# HG changeset patch # User coleenp # Date 1346520318 14400 # Node ID da91efe96a93fcc1098dd7a759a0bca610e2359f # Parent 36d1d483d5d63fb477a3afb0c365a4e5360256b1 6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa , stefank , mgerdin , never diff -r 36d1d483d5d6 -r da91efe96a93 agent/doc/clhsdb.html --- a/agent/doc/clhsdb.html Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/doc/clhsdb.html Sat Sep 01 13:25:18 2012 -0400 @@ -38,10 +38,10 @@ assert true | false turn on/off asserts in SA code attach pid | exec core attach SA to a process or core class name find a Java class from debuggee and print oop - classes print all loaded Java classes with klassOop + classes print all loaded Java classes with Klass* detach detach SA from current target dis address [ length ] disassemble (sparc/x86) specified number of instructions from given address - dumpclass { address | name } [ directory ] dump .class file for given klassOop or class name + dumpclass { address | name } [ directory ] dump .class file for given Klass* or class name dumpheap [ file ] dump heap in hprof binary format echo [ true | false ] turn on/off command echo mode examine [ address/count ] | [ address,address] show contents of memory from given address @@ -51,7 +51,7 @@ help [ command ] print help message for all commands or just given command history show command history. usual !command-number syntax works. inspect expression inspect a given oop - jdis address show bytecode disassembly of a given methodOop + jdis address show bytecode disassembly of a given Method* jhisto show Java heap histogram jseval script evaluate a given string as JavaScript code jsload file load and evaluate a JavaScript file @@ -59,7 +59,7 @@ livenmethods show all live nmethods mem address [ length ] show contents of memory -- also shows closest ELF/COFF symbol if found pmap show Solaris pmap-like output - print expression print given klassOop, methodOop or arbitrary address + print expression print given Klass*, Method* or arbitrary address printas type expression print given address as given HotSpot type. eg. print JavaThread <address> printstatics [ type ] print static fields of given HotSpot type (or all types if none specified) pstack [-v] show mixed mode stack trace for all Java, non-Java threads. -v is verbose mode diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/os/bsd/ps_core.c --- a/agent/src/os/bsd/ps_core.c Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/os/bsd/ps_core.c Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -210,7 +210,6 @@ // mapped. This structure gets written to a file. It is not a class, // so that the compilers don't add any compiler-private data to it. -// Refer to CompactingPermGenGen::n_regions in compactingPermGenGen.hpp #define NUM_SHARED_MAPS 4 // Refer to FileMapInfo::_current_version in filemap.hpp @@ -234,7 +233,7 @@ char _read_only; // read only space? char _allow_exec; // executable code in space? - } _space[NUM_SHARED_MAPS]; // was _space[CompactingPermGenGen::n_regions]; + } _space[NUM_SHARED_MAPS]; // Ignore the rest of the FileMapHeader. We don't need those fields here. }; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/os/linux/ps_core.c --- a/agent/src/os/linux/ps_core.c Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/os/linux/ps_core.c Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -209,7 +209,6 @@ // mapped. This structure gets written to a file. It is not a class, // so that the compilers don't add any compiler-private data to it. -// Refer to CompactingPermGenGen::n_regions in compactingPermGenGen.hpp #define NUM_SHARED_MAPS 4 // Refer to FileMapInfo::_current_version in filemap.hpp @@ -233,7 +232,7 @@ char _read_only; // read only space? char _allow_exec; // executable code in space? - } _space[NUM_SHARED_MAPS]; // was _space[CompactingPermGenGen::n_regions]; + } _space[NUM_SHARED_MAPS]; // Ignore the rest of the FileMapHeader. We don't need those fields here. }; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/os/solaris/proc/saproc.cpp --- a/agent/src/os/solaris/proc/saproc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/os/solaris/proc/saproc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -510,7 +510,6 @@ // mapped. This structure gets written to a file. It is not a class, so // that the compilers don't add any compiler-private data to it. -// Refer to CompactingPermGenGen::n_regions in compactingPermGenGen.hpp const int NUM_SHARED_MAPS = 4; // Refer to FileMapInfo::_current_version in filemap.hpp @@ -531,7 +530,7 @@ bool _read_only; // read only space? bool _allow_exec; // executable code in space? - } _space[NUM_SHARED_MAPS]; // was _space[CompactingPermGenGen::n_regions]; + } _space[NUM_SHARED_MAPS]; // Ignore the rest of the FileMapHeader. We don't need those fields here. }; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java --- a/agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -634,29 +634,57 @@ } else { String s = t.nextToken(); if (s.equals("-a")) { - HeapVisitor iterator = new DefaultHeapVisitor() { - public boolean doObj(Oop obj) { - if (obj instanceof MethodData) { - Method m = ((MethodData)obj).getMethod(); - out.println("MethodData " + obj.getHandle() + " for " + + SystemDictionary sysDict = VM.getVM().getSystemDictionary(); + sysDict.allClassesDo(new SystemDictionary.ClassVisitor() { + public void visit(Klass k) { + if (k instanceof InstanceKlass) { + MethodArray methods = ((InstanceKlass)k).getMethods(); + for (int i = 0; i < methods.length(); i++) { + Method m = methods.at(i); + MethodData mdo = m.getMethodData(); + if (mdo != null) { + out.println("MethodData " + mdo.getAddress() + " for " + "method " + m.getMethodHolder().getName().asString() + "." + m.getName().asString() + - m.getSignature().asString() + "@" + m.getHandle()); - ((MethodData)obj).printDataOn(out); + m.getSignature().asString() + "@" + m.getAddress()); + mdo.printDataOn(out); } - return false; + } + } } - }; - VM.getVM().getObjectHeap().iteratePerm(iterator); + } + ); } else { Address a = VM.getVM().getDebugger().parseAddress(s); - OopHandle handle = a.addOffsetToAsOopHandle(0); - MethodData mdo = (MethodData)VM.getVM().getObjectHeap().newOop(handle); + MethodData mdo = (MethodData) Metadata.instantiateWrapperFor(a); mdo.printDataOn(out); } } } }, + new Command("printall", "printall", false) { + // Print every MDO in the heap or the one referenced by expression. + public void doit(Tokens t) { + if (t.countTokens() != 0) { + usage(); + } else { + SystemDictionary sysDict = VM.getVM().getSystemDictionary(); + sysDict.allClassesDo(new SystemDictionary.ClassVisitor() { + public void visit(Klass k) { + if (k instanceof InstanceKlass && ((InstanceKlass)k).getConstants().getCache() != null) { + MethodArray methods = ((InstanceKlass)k).getMethods(); + for (int i = 0; i < methods.length(); i++) { + Method m = methods.at(i); + HTMLGenerator gen = new HTMLGenerator(false); + out.println(gen.genHTML(m)); + } + } + } + } + ); + } + } + }, new Command("dumpideal", "dumpideal { -a | id }", false) { // Do a full dump of the nodes reachabile from root in each compiler thread. public void doit(Tokens t) { @@ -1229,7 +1257,7 @@ } }; VM.getVM().getObjectHeap().iterateRaw(iterator); - } else if (type.equals("heap") || type.equals("perm")) { + } else if (type.equals("heap")) { HeapVisitor iterator = new DefaultHeapVisitor() { public boolean doObj(Oop obj) { int index = 0; @@ -1246,11 +1274,7 @@ return false; } }; - if (type.equals("heap")) { VM.getVM().getObjectHeap().iterate(iterator); - } else { - VM.getVM().getObjectHeap().iteratePerm(iterator); - } } else if (type.equals("codecache")) { CodeCacheVisitor v = new CodeCacheVisitor() { public void prologue(Address start, Address end) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/HSDB.java --- a/agent/src/share/classes/sun/jvm/hotspot/HSDB.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/HSDB.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -998,7 +998,7 @@ curFrame.addressOfInterpreterFrameLocal((int) interpreterFrameMethod.getMaxLocals() + offset), "Interpreter locals area for frame with SP = " + curFrame.getSP())); } - String methodAnno = "Interpreter frame methodOop"; + String methodAnno = "Interpreter frame Method*"; if (interpreterFrameMethod == null) { methodAnno += " (BAD OOP)"; } @@ -1054,13 +1054,6 @@ } } - if (bad) { - // Try perm gen - if (heap.permGen().isIn(handle)) { - anno = "PermGen "; - bad = false; - } - } } else if (collHeap instanceof ParallelScavengeHeap) { ParallelScavengeHeap heap = (ParallelScavengeHeap) collHeap; if (heap.youngGen().isIn(handle)) { @@ -1069,9 +1062,6 @@ } else if (heap.oldGen().isIn(handle)) { anno = "PSOldGen "; bad = false; - } else if (heap.permGen().isIn(handle)) { - anno = "PSPermGen "; - bad = false; } } else { // Optimistically assume the oop isn't bad diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/HotSpotTypeDataBase.java --- a/agent/src/share/classes/sun/jvm/hotspot/HotSpotTypeDataBase.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/HotSpotTypeDataBase.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,6 +50,7 @@ private static final int C_INT8_SIZE = 1; private static final int C_INT32_SIZE = 4; private static final int C_INT64_SIZE = 8; + private static int pointerSize = UNINITIALIZED_SIZE; private static final boolean DEBUG; static { @@ -185,6 +186,9 @@ long size = entryAddr.getCIntegerAt(typeEntrySizeOffset, C_INT64_SIZE, true); createType(typeName, superclassName, isOopType, isIntegerType, isUnsigned, size); + if (pointerSize == UNINITIALIZED_SIZE && typeName.equals("void*")) { + pointerSize = (int)size; + } } entryAddr = entryAddr.addOffsetTo(typeEntryArrayStride); @@ -678,7 +682,11 @@ } } result = new BasicPointerType(this, typeName, targetType); - result.setSize(UNINITIALIZED_SIZE); + if (pointerSize == UNINITIALIZED_SIZE && !typeName.equals("void*")) { + // void* must be declared early so that other pointer types can use that to set their size. + throw new InternalError("void* type hasn't been seen when parsing " + typeName); + } + result.setSize(pointerSize); addType(result); return result; } @@ -731,9 +739,11 @@ "had its size redefined (old was " + curType.getSize() + ", new is " + size + ")."); } + if (!typeNameIsPointerType(typeName)) { System.err.println("Warning: the type \"" + typeName + "\" (declared in the remote VM in VMStructs::localHotSpotVMTypes) " + "had its size declared as " + size + " twice. Continuing."); } + } } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciArrayKlassKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciArrayKlassKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - */ - -package sun.jvm.hotspot.ci; - -import java.io.PrintStream; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.oops.*; -import sun.jvm.hotspot.types.*; - -public class ciArrayKlassKlass extends ciKlassKlass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("ciArrayKlassKlass"); - } - - - public ciArrayKlassKlass(Address addr) { - super(addr); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciBaseObject.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/ci/ciBaseObject.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + */ + +package sun.jvm.hotspot.ci; + +import java.io.*; +import java.util.*; +import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.oops.*; +import sun.jvm.hotspot.types.*; + +public class ciBaseObject extends VMObject { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + Type type = db.lookupType("ciBaseObject"); + identField = new CIntField(type.getCIntegerField("_ident"), 0); + } + + private static CIntField identField; + + public ciBaseObject(Address addr) { + super(addr); + } +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciInstanceKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciInstanceKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ci/ciInstanceKlass.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,8 +47,8 @@ Type type = db.lookupType("ciInstanceKlass"); initStateField = new CIntField(type.getCIntegerField("_init_state"), 0); isSharedField = new CIntField(type.getCIntegerField("_is_shared"), 0); - CLASS_STATE_LINKED = db.lookupIntConstant("instanceKlass::linked").intValue(); - CLASS_STATE_FULLY_INITIALIZED = db.lookupIntConstant("instanceKlass::fully_initialized").intValue(); + CLASS_STATE_LINKED = db.lookupIntConstant("InstanceKlass::linked").intValue(); + CLASS_STATE_FULLY_INITIALIZED = db.lookupIntConstant("InstanceKlass::fully_initialized").intValue(); } private static CIntField initStateField; @@ -63,7 +63,7 @@ public int initState() { int initState = (int)initStateField.getValue(getAddress()); if (isShared() && initState < CLASS_STATE_LINKED) { - InstanceKlass ik = (InstanceKlass)getOop(); + InstanceKlass ik = (InstanceKlass)getMetadata(); initState = ik.getInitStateAsInt(); } return initState; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciInstanceKlassKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciInstanceKlassKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - */ - -package sun.jvm.hotspot.ci; - -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.oops.*; -import sun.jvm.hotspot.types.*; - -public class ciInstanceKlassKlass extends ciKlassKlass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("ciInstanceKlassKlass"); - } - - - public ciInstanceKlassKlass(Address addr) { - super(addr); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciKlassKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciKlassKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - */ - -package sun.jvm.hotspot.ci; - -import java.io.PrintStream; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.oops.*; -import sun.jvm.hotspot.types.*; - -public class ciKlassKlass extends ciKlass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("ciKlassKlass"); - } - - - public ciKlassKlass(Address addr) { - super(addr); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciMetadata.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/ci/ciMetadata.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + */ + +package sun.jvm.hotspot.ci; + +import java.io.*; +import java.util.*; +import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.oops.*; +import sun.jvm.hotspot.types.*; + +public class ciMetadata extends ciBaseObject { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + Type type = db.lookupType("ciMetadata"); + metadataField = new MetadataField(type.getAddressField("_metadata"), 0); + } + + private static MetadataField metadataField; + + public Metadata getMetadata() { + return metadataField.getValue(getAddress()); + } + + public ciMetadata(Address addr) { + super(addr); + } + + public void printOn(PrintStream out) { + getMetadata().printValueOn(out); + } + + public String toString() { + return getMetadata().toString(); + } +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciMethod.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciMethod.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ci/ciMethod.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,7 @@ import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.types.*; -public class ciMethod extends ciObject { +public class ciMethod extends ciMetadata { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -61,7 +61,7 @@ } public Method method() { - return (Method)getOop(); + return (Method)getMetadata(); } public int interpreterThrowoutCount() { @@ -75,7 +75,7 @@ public int instructionsSize() { if (instructionsSizeField == null) { // XXX - Method method = (Method)getOop(); + Method method = method(); NMethod nm = method.getNativeMethod(); if (nm != null) return (int)nm.codeEnd().minus(nm.getVerifiedEntryPoint()); return 0; @@ -84,7 +84,7 @@ } public void printShortName(PrintStream st) { - Method method = (Method)getOop(); + Method method = method(); st.printf(" %s::%s", method.getMethodHolder().getName().asString().replace('/', '.'), method.getName().asString()); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciMethodData.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciMethodData.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ci/ciMethodData.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.types.*; -public class ciMethodData extends ciObject { +public class ciMethodData extends ciMetadata { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -54,7 +54,7 @@ extraDataSizeField = new CIntField(type.getCIntegerField("_extra_data_size"), 0); dataSizeField = new CIntField(type.getCIntegerField("_data_size"), 0); stateField = new CIntField(type.getCIntegerField("_state"), 0); - sizeofMethodDataOopDesc = (int)db.lookupType("methodDataOopDesc").getSize();; + sizeofMethodDataOopDesc = (int)db.lookupType("MethodData").getSize();; } private static AddressField origField; @@ -83,7 +83,7 @@ } public byte[] orig() { - // fetch the orig methodDataOopDesc data between header and dataSize + // fetch the orig MethodData data between header and dataSize Address base = getAddress().addOffsetTo(origField.getOffset()); byte[] result = new byte[MethodData.sizeofMethodDataOopDesc]; for (int i = 0; i < MethodData.sizeofMethodDataOopDesc; i++) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciMethodKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciMethodKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - */ - -package sun.jvm.hotspot.ci; - -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.oops.*; -import sun.jvm.hotspot.types.*; - -public class ciMethodKlass extends ciKlass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("ciMethodKlass"); - } - - - public ciMethodKlass(Address addr) { - super(addr); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciObjArrayKlassKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciObjArrayKlassKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - */ - -package sun.jvm.hotspot.ci; - -import java.io.PrintStream; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.oops.*; -import sun.jvm.hotspot.types.*; - -public class ciObjArrayKlassKlass extends ciArrayKlassKlass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("ciObjArrayKlassKlass"); - } - - - public ciObjArrayKlassKlass(Address addr) { - super(addr); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciObject.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciObject.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ci/ciObject.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.types.*; -public class ciObject extends VMObject { +public class ciObject extends ciBaseObject { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -42,12 +42,10 @@ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("ciObject"); - identField = new CIntField(type.getCIntegerField("_ident"), 0); klassField = type.getAddressField("_klass"); handleField = type.getAddressField("_handle"); } - private static CIntField identField; private static AddressField klassField; private static AddressField handleField; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciObjectFactory.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciObjectFactory.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ci/ciObjectFactory.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,18 +44,20 @@ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("ciObjectFactory"); unloadedMethodsField = type.getAddressField("_unloaded_methods"); - ciObjectsField = type.getAddressField("_ci_objects"); + ciMetadataField = type.getAddressField("_ci_metadata"); symbolsField = type.getAddressField("_symbols"); ciObjectConstructor = new VirtualBaseConstructor(db, db.lookupType("ciObject"), "sun.jvm.hotspot.ci", ciObject.class); + ciMetadataConstructor = new VirtualBaseConstructor(db, db.lookupType("ciMetadata"), "sun.jvm.hotspot.ci", ciMetadata.class); ciSymbolConstructor = new VirtualBaseConstructor(db, db.lookupType("ciSymbol"), "sun.jvm.hotspot.ci", ciSymbol.class); } private static AddressField unloadedMethodsField; - private static AddressField ciObjectsField; + private static AddressField ciMetadataField; private static AddressField symbolsField; private static VirtualBaseConstructor ciObjectConstructor; + private static VirtualBaseConstructor ciMetadataConstructor; private static VirtualBaseConstructor ciSymbolConstructor; public static ciObject get(Address addr) { @@ -64,8 +66,14 @@ return (ciObject)ciObjectConstructor.instantiateWrapperFor(addr); } - public GrowableArray objects() { - return GrowableArray.create(ciObjectsField.getValue(getAddress()), ciObjectConstructor); + public static ciMetadata getMetadata(Address addr) { + if (addr == null) return null; + + return (ciMetadata)ciMetadataConstructor.instantiateWrapperFor(addr); + } + + public GrowableArray objects() { + return GrowableArray.create(ciMetadataField.getValue(getAddress()), ciMetadataConstructor); } public GrowableArray symbols() { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciReceiverTypeData.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciReceiverTypeData.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ci/ciReceiverTypeData.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,7 +42,7 @@ public ciKlass receiverAt(int row) { //assert((uint)row < rowLimit(), "oob"); - ciObject recv = ciObjectFactory.get(addressAt(receiverCellIndex(row))); + ciMetadata recv = ciObjectFactory.getMetadata(addressAt(receiverCellIndex(row))); if (recv != null && !(recv instanceof ciKlass)) { System.err.println(recv); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciSymbol.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciSymbol.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ci/ciSymbol.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.types.*; -public class ciSymbol extends VMObject { +public class ciSymbol extends ciMetadata { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -42,12 +42,10 @@ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("ciSymbol"); - identField = type.getCIntegerField("_ident"); symbolField = type.getAddressField("_symbol"); } private static AddressField symbolField; - private static CIntegerField identField; public String asUtf88() { Symbol sym = Symbol.create(symbolField.getValue(getAddress())); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciType.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciType.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ci/ciType.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.types.*; -public class ciType extends ciObject { +public class ciType extends ciMetadata { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciTypeArrayKlassKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciTypeArrayKlassKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - */ - -package sun.jvm.hotspot.ci; - -import java.io.PrintStream; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.oops.*; -import sun.jvm.hotspot.types.*; - -public class ciTypeArrayKlassKlass extends ciArrayKlassKlass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("ciTypeArrayKlassKlass"); - } - - - public ciTypeArrayKlassKlass(Address addr) { - super(addr); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ci/ciVirtualCallData.java --- a/agent/src/share/classes/sun/jvm/hotspot/ci/ciVirtualCallData.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ci/ciVirtualCallData.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,7 +42,7 @@ public ciKlass receiverAt(int row) { //assert((uint)row < rowLimit(), "oob"); - ciObject recv = ciObjectFactory.get(addressAt(receiverCellIndex(row))); + ciMetadata recv = ciObjectFactory.getMetadata(addressAt(receiverCellIndex(row))); if (recv != null && !(recv instanceof ciKlass)) { System.err.println(recv); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/classfile/ClassLoaderData.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/classfile/ClassLoaderData.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + */ + +package sun.jvm.hotspot.classfile; + +import java.io.PrintStream; +import java.util.*; +import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.oops.*; +import sun.jvm.hotspot.types.*; + +public class ClassLoaderData extends VMObject { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + Type type = db.lookupType("ClassLoaderData"); + classLoaderField = type.getOopField("_class_loader"); + nextField = type.getAddressField("_next"); + } + + private static sun.jvm.hotspot.types.OopField classLoaderField; + private static AddressField nextField; + + public ClassLoaderData(Address addr) { + super(addr); + } + + public static ClassLoaderData instantiateWrapperFor(Address addr) { + if (addr == null) { + return null; + } + return new ClassLoaderData(addr); + } + + public Oop getClassLoader() { + return VM.getVM().getObjectHeap().newOop(classLoaderField.getValue(getAddress())); + } +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/code/DebugInfoReadStream.java --- a/agent/src/share/classes/sun/jvm/hotspot/code/DebugInfoReadStream.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/code/DebugInfoReadStream.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.runtime.VM; import sun.jvm.hotspot.utilities.*; +import sun.jvm.hotspot.oops.Method; public class DebugInfoReadStream extends CompressedReadStream { private NMethod code; @@ -53,6 +54,10 @@ return code.getOopAt(readInt()); } + public Method readMethod() { + return code.getMethodAt(readInt()); + } + ScopeValue readObjectValue() { int id = readInt(); if (Assert.ASSERTS_ENABLED) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/code/NMethod.java --- a/agent/src/share/classes/sun/jvm/hotspot/code/NMethod.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/code/NMethod.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ public class NMethod extends CodeBlob { private static long pcDescSize; - private static sun.jvm.hotspot.types.OopField methodField; + private static AddressField methodField; /** != InvocationEntryBci if this nmethod is an on-stack replacement method */ private static CIntegerField entryBCIField; /** To support simple linked-list chaining of nmethods */ @@ -50,6 +50,7 @@ private static CIntegerField origPCOffsetField; private static CIntegerField stubOffsetField; private static CIntegerField oopsOffsetField; + private static CIntegerField metadataOffsetField; private static CIntegerField scopesDataOffsetField; private static CIntegerField scopesPCsOffsetField; private static CIntegerField dependenciesOffsetField; @@ -88,7 +89,7 @@ private static void initialize(TypeDataBase db) { Type type = db.lookupType("nmethod"); - methodField = type.getOopField("_method"); + methodField = type.getAddressField("_method"); entryBCIField = type.getCIntegerField("_entry_bci"); osrLinkField = type.getAddressField("_osr_link"); scavengeRootLinkField = type.getAddressField("_scavenge_root_link"); @@ -100,6 +101,7 @@ origPCOffsetField = type.getCIntegerField("_orig_pc_offset"); stubOffsetField = type.getCIntegerField("_stub_offset"); oopsOffsetField = type.getCIntegerField("_oops_offset"); + metadataOffsetField = type.getCIntegerField("_metadata_offset"); scopesDataOffsetField = type.getCIntegerField("_scopes_data_offset"); scopesPCsOffsetField = type.getCIntegerField("_scopes_pcs_offset"); dependenciesOffsetField = type.getCIntegerField("_dependencies_offset"); @@ -126,7 +128,7 @@ } public Method getMethod() { - return (Method) VM.getVM().getObjectHeap().newOop(methodField.getValue(addr)); + return (Method)Metadata.instantiateWrapperFor(methodField.getValue(addr)); } // Type info @@ -146,7 +148,9 @@ public Address stubBegin() { return headerBegin().addOffsetTo(getStubOffset()); } public Address stubEnd() { return headerBegin().addOffsetTo(getOopsOffset()); } public Address oopsBegin() { return headerBegin().addOffsetTo(getOopsOffset()); } - public Address oopsEnd() { return headerBegin().addOffsetTo(getScopesDataOffset()); } + public Address oopsEnd() { return headerBegin().addOffsetTo(getMetadataOffset()); } + public Address metadataBegin() { return headerBegin().addOffsetTo(getMetadataOffset()); } + public Address metadataEnd() { return headerBegin().addOffsetTo(getScopesDataOffset()); } public Address scopesDataBegin() { return headerBegin().addOffsetTo(getScopesDataOffset()); } public Address scopesDataEnd() { return headerBegin().addOffsetTo(getScopesPCsOffset()); } public Address scopesPCsBegin() { return headerBegin().addOffsetTo(getScopesPCsOffset()); } @@ -162,6 +166,7 @@ public int instsSize() { return (int) instsEnd() .minus(instsBegin()); } public int stubSize() { return (int) stubEnd() .minus(stubBegin()); } public int oopsSize() { return (int) oopsEnd() .minus(oopsBegin()); } + public int metadataSize() { return (int) metadataEnd() .minus(metadataBegin()); } public int scopesDataSize() { return (int) scopesDataEnd() .minus(scopesDataBegin()); } public int scopesPCsSize() { return (int) scopesPCsEnd() .minus(scopesPCsBegin()); } public int dependenciesSize() { return (int) dependenciesEnd().minus(dependenciesBegin()); } @@ -185,12 +190,14 @@ public boolean instsContains (Address addr) { return instsBegin() .lessThanOrEqual(addr) && instsEnd() .greaterThan(addr); } public boolean stubContains (Address addr) { return stubBegin() .lessThanOrEqual(addr) && stubEnd() .greaterThan(addr); } public boolean oopsContains (Address addr) { return oopsBegin() .lessThanOrEqual(addr) && oopsEnd() .greaterThan(addr); } + public boolean metadataContains (Address addr) { return metadataBegin() .lessThanOrEqual(addr) && metadataEnd() .greaterThan(addr); } public boolean scopesDataContains (Address addr) { return scopesDataBegin() .lessThanOrEqual(addr) && scopesDataEnd() .greaterThan(addr); } public boolean scopesPCsContains (Address addr) { return scopesPCsBegin() .lessThanOrEqual(addr) && scopesPCsEnd() .greaterThan(addr); } public boolean handlerTableContains(Address addr) { return handlerTableBegin().lessThanOrEqual(addr) && handlerTableEnd().greaterThan(addr); } public boolean nulChkTableContains (Address addr) { return nulChkTableBegin() .lessThanOrEqual(addr) && nulChkTableEnd() .greaterThan(addr); } public int getOopsLength() { return (int) (oopsSize() / VM.getVM().getOopSize()); } + public int getMetadataLength() { return (int) (metadataSize() / VM.getVM().getOopSize()); } /** Entry points */ public Address getEntryPoint() { return entryPointField.getValue(addr); } @@ -205,6 +212,19 @@ return oopsBegin().getOopHandleAt((index - 1) * VM.getVM().getOopSize()); } + /** Support for metadata in scopes and relocs. Note: index 0 is reserved for null. */ + public Address getMetadataAt(int index) { + if (index == 0) return null; + if (Assert.ASSERTS_ENABLED) { + Assert.that(index > 0 && index <= getMetadataLength(), "must be a valid non-zero index"); + } + return metadataBegin().getAddressAt((index - 1) * VM.getVM().getOopSize()); + } + + public Method getMethodAt(int index) { + return (Method)Metadata.instantiateWrapperFor(getMetadataAt(index)); + } + // FIXME: add interpreter_entry_point() // FIXME: add lazy_interpreter_entry_point() for C2 @@ -412,6 +432,7 @@ private int getDeoptMhOffset() { return (int) deoptMhOffsetField .getValue(addr); } private int getStubOffset() { return (int) stubOffsetField .getValue(addr); } private int getOopsOffset() { return (int) oopsOffsetField .getValue(addr); } + private int getMetadataOffset() { return (int) metadataOffsetField .getValue(addr); } private int getScopesDataOffset() { return (int) scopesDataOffsetField .getValue(addr); } private int getScopesPCsOffset() { return (int) scopesPCsOffsetField .getValue(addr); } private int getDependenciesOffset() { return (int) dependenciesOffsetField.getValue(addr); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/code/ScopeDesc.java --- a/agent/src/share/classes/sun/jvm/hotspot/code/ScopeDesc.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/code/ScopeDesc.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -61,7 +61,7 @@ DebugInfoReadStream stream = streamAt(decodeOffset); senderDecodeOffset = stream.readInt(); - method = (Method) VM.getVM().getObjectHeap().newOop(stream.readOopHandle()); + method = stream.readMethod(); bci = stream.readBCI(); // Decode offsets for body and sender localsDecodeOffset = stream.readInt(); @@ -79,7 +79,7 @@ DebugInfoReadStream stream = streamAt(decodeOffset); senderDecodeOffset = stream.readInt(); - method = (Method) VM.getVM().getObjectHeap().newOop(stream.readOopHandle()); + method = stream.readMethod(); bci = stream.readBCI(); // Decode offsets for body and sender localsDecodeOffset = stream.readInt(); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/compiler/CompileTask.java --- a/agent/src/share/classes/sun/jvm/hotspot/compiler/CompileTask.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/compiler/CompileTask.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -56,8 +56,8 @@ } public Method method() { - OopHandle oh = methodField.getValue(getAddress()).getOopHandleAt(0); - return (Method)VM.getVM().getObjectHeap().newOop(oh); + Address oh = methodField.getValue(getAddress()).getAddressAt(0); + return (Method)Metadata.instantiateWrapperFor(oh); } public int osrBci() { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/PSPermGen.java --- a/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/PSPermGen.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.gc_implementation.parallelScavenge; - -import java.io.*; -import java.util.*; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.gc_implementation.shared.*; -import sun.jvm.hotspot.memory.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -public class PSPermGen extends PSOldGen { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) { - // just checking type existence - Type type = db.lookupType("PSPermGen"); - } - - public PSPermGen(Address addr) { - super(addr); - } - - public void printOn(PrintStream tty) { - tty.print("PSPermGen [ "); - objectSpace().printOn(tty); - tty.print(" ] "); - } - - // FIXME: no other stuff yet -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/ParallelScavengeHeap.java --- a/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/ParallelScavengeHeap.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/parallelScavenge/ParallelScavengeHeap.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,7 +45,6 @@ Type type = db.lookupType("ParallelScavengeHeap"); youngGenField = type.getAddressField("_young_gen"); oldGenField = type.getAddressField("_old_gen"); - permGenField = type.getAddressField("_perm_gen"); } public ParallelScavengeHeap(Address addr) { @@ -55,7 +54,6 @@ // Fields private static AddressField youngGenField; private static AddressField oldGenField; - private static AddressField permGenField; // Accessors public PSYoungGen youngGen() { @@ -66,10 +64,6 @@ return (PSOldGen) VMObjectFactory.newObject(PSOldGen.class, oldGenField.getValue()); } - public PSPermGen permGen() { - return (PSPermGen) VMObjectFactory.newObject(PSPermGen.class, permGenField.getValue()); - } - public long capacity() { return youngGen().capacity() + oldGen().capacity(); } @@ -87,10 +81,6 @@ return true; } - if (permGen().isIn(a)) { - return true; - } - return false; } @@ -102,7 +92,6 @@ tty.print("ParallelScavengeHeap [ "); youngGen().printOn(tty); oldGen().printOn(tty); - permGen().printOn(tty); tty.print(" ] "); } } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeDisassembler.java --- a/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeDisassembler.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeDisassembler.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -138,9 +138,9 @@ } } - Object bytecodeObj = null; + Bytecode bytecodeObj = null; try { - bytecodeObj = cstr.newInstance(new Object[] { method, new Integer(bci) }); + bytecodeObj = (Bytecode)cstr.newInstance(new Object[] { method, new Integer(bci) }); } catch (Exception exp) { if (Assert.ASSERTS_ENABLED) { Assert.that(false, "Bytecode instance of class " @@ -153,11 +153,10 @@ } try { - visitor.visit((Bytecode) bytecodeObj); + visitor.visit(bytecodeObj); } catch(ClassCastException castfail) { - if (Assert.ASSERTS_ENABLED) { - Assert.that(false, clazz.getName() + " is not derived from Bytecode!"); - } + castfail.printStackTrace(); + System.err.println(method.getAddress() + " " + bci); } } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeInvoke.java --- a/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeInvoke.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeInvoke.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -55,8 +55,7 @@ public Symbol name() { ConstantPool cp = method().getConstants(); if (isInvokedynamic()) { - int[] nt = cp.getNameAndTypeAt(indexForFieldOrMethod()); - return cp.getSymbolAt(nt[0]); + return cp.uncachedGetNameRefAt(indexForFieldOrMethod()); } return cp.getNameRefAt(index()); } @@ -65,20 +64,11 @@ public Symbol signature() { ConstantPool cp = method().getConstants(); if (isInvokedynamic()) { - int[] nt = cp.getNameAndTypeAt(indexForFieldOrMethod()); - return cp.getSymbolAt(nt[1]); + return cp.uncachedGetSignatureRefAt(indexForFieldOrMethod()); } return cp.getSignatureRefAt(index()); } - public int getSecondaryIndex() { - if (isInvokedynamic()) { - // change byte-ordering of 4-byte integer - return VM.getVM().getBytes().swapInt(javaSignedWordAt(1)); - } - return super.getSecondaryIndex(); // throw an error - } - public Method getInvokedMethod() { return method().getConstants().getMethodRefAt(index()); } @@ -123,7 +113,7 @@ buf.append(Integer.toString(indexForFieldOrMethod())); if (isInvokedynamic()) { buf.append('('); - buf.append(Integer.toString(getSecondaryIndex())); + buf.append(Integer.toString(index())); buf.append(')'); } buf.append(" [Method "); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeLoadConstant.java --- a/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeLoadConstant.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeLoadConstant.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,12 +46,11 @@ } public int poolIndex() { - int i = rawIndex(); + int index = rawIndex(); if (hasCacheIndex()) { - ConstantPoolCache cpCache = method().getConstants().getCache(); - return cpCache.getEntryAt(i).getConstantPoolIndex(); + return method().getConstants().objectToCPIndex(index); } else { - return i; + return index; } } @@ -72,8 +71,7 @@ private Oop getCachedConstant() { int i = cacheIndex(); if (i >= 0) { - ConstantPoolCache cpCache = method().getConstants().getCache(); - return cpCache.getEntryAt(i).getF1(); + throw new InternalError("invokedynamic not implemented yet"); } return null; } @@ -96,7 +94,7 @@ return (ctag.isDouble() || ctag.isLong()) ? true: false; } else { // has to be int or float or String or Klass - return (ctag.isUnresolvedString() || ctag.isString() + return (ctag.isString() || ctag.isUnresolvedKlass() || ctag.isKlass() || ctag.isMethodHandle() || ctag.isMethodType() || ctag.isInt() || ctag.isFloat())? true: false; @@ -124,9 +122,9 @@ ConstantPool cpool = method().getConstants(); int cpIndex = poolIndex(); ConstantPool.CPSlot oop = cpool.getSlotAt(cpIndex); - if (oop.isOop()) { - return (Klass) oop.getOop(); - } else if (oop.isMetaData()) { + if (oop.isResolved()) { + return oop.getKlass(); + } else if (oop.isUnresolved()) { return oop.getSymbol(); } else { throw new RuntimeException("should not reach here"); @@ -163,28 +161,21 @@ return ""; } else if (ctag.isDouble()) { return ""; - } else if (ctag.isString() || ctag.isUnresolvedString()) { + } else if (ctag.isString()) { // tag change from 'unresolved' to 'string' does not happen atomically. // We just look at the object at the corresponding index and // decide based on the oop type. - ConstantPool.CPSlot obj = cpool.getSlotAt(cpIndex); - if (obj.isMetaData()) { - Symbol sym = obj.getSymbol(); + Symbol sym = cpool.getUnresolvedStringAt(cpIndex); return ""; - } else if (obj.isOop()) { - return ""; - } else { - throw new RuntimeException("should not reach here"); - } } else if (ctag.isKlass() || ctag.isUnresolvedKlass()) { // tag change from 'unresolved' to 'klass' does not happen atomically. // We just look at the object at the corresponding index and // decide based on the oop type. ConstantPool.CPSlot obj = cpool.getSlotAt(cpIndex); - if (obj.isOop()) { - Klass k = (Klass) obj.getOop(); - return ""; - } else if (obj.isMetaData()) { + if (obj.isResolved()) { + Klass k = obj.getKlass(); + return ""; + } else if (obj.isUnresolved()) { Symbol sym = obj.getSymbol(); return ""; } else { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeWithCPIndex.java --- a/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeWithCPIndex.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeWithCPIndex.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,10 +35,17 @@ } // the constant pool index for this bytecode - public int index() { return getIndexU2(code(), false); } - - public int getSecondaryIndex() { - throw new IllegalArgumentException("must be invokedynamic"); + public int index() { + if (code() == Bytecodes._invokedynamic) { + int index = getIndexU4(); + if (ConstantPool.isInvokedynamicIndex(index)) { + return ConstantPool.decodeInvokedynamicIndex(index); + } else { + return index; + } + } else { + return getIndexU2(code(), false); + } } protected int indexForFieldOrMethod() { @@ -47,12 +54,8 @@ int cpCacheIndex = index(); if (cpCache == null) { return cpCacheIndex; - } else if (code() == Bytecodes._invokedynamic) { - int secondaryIndex = getSecondaryIndex(); - return cpCache.getMainEntryAt(secondaryIndex).getConstantPoolIndex(); } else { - // change byte-ordering and go via cache - return cpCache.getEntryAt((int) (0xFFFF & VM.getVM().getBytes().swapShort((short) cpCacheIndex))).getConstantPoolIndex(); + return cpCache.getEntryAt((int) (0xFFFF & cpCacheIndex)).getConstantPoolIndex(); } } } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeWithKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeWithKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/interpreter/BytecodeWithKlass.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,15 +33,15 @@ } protected Klass getKlass() { - return method().getConstants().getKlassRefAt(index()); + return method().getConstants().getKlassAt(index()); } public Symbol getClassName() { ConstantPool.CPSlot obj = method().getConstants().getSlotAt(index()); - if (obj.isMetaData()) { + if (obj.isUnresolved()) { return obj.getSymbol(); } else { - return ((Klass)obj.getOop()).getName(); + return obj.getKlass().getName(); } } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java --- a/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -362,7 +362,7 @@ // find a bytecode, behind a breakpoint if necessary: // FIXME: not yet implementable - // static Code non_breakpoint_code_at(address bcp, methodOop method = null); + // static Code non_breakpoint_code_at(address bcp, Method* method = null); // Bytecode attributes public static boolean isDefined (int code) { return 0 <= code && code < number_of_codes && flags(code, false) != 0; } @@ -743,7 +743,7 @@ def(_invokespecial , "invokespecial" , "bJJ" , null , BasicType.getTIllegal(), -1, true ); def(_invokestatic , "invokestatic" , "bJJ" , null , BasicType.getTIllegal(), 0, true ); def(_invokeinterface , "invokeinterface" , "bJJ__", null , BasicType.getTIllegal(), -1, true ); - def(_invokedynamic , "invokedynamic" , "bJJJJ", null , BasicType.getTIllegal(), -1, true ); + def(_invokedynamic , "invokedynamic" , "bJJJJ", null , BasicType.getTIllegal(), 0, true ); def(_new , "new" , "bkk" , null , BasicType.getTObject() , 1, true ); def(_newarray , "newarray" , "bc" , null , BasicType.getTObject() , 0, true ); def(_anewarray , "anewarray" , "bkk" , null , BasicType.getTObject() , 0, true ); @@ -763,6 +763,7 @@ // JVM bytecodes // bytecode bytecode name format wide f. result tp stk traps std code + def(_fast_agetfield , "fast_agetfield" , "bJJ" , null , BasicType.getTObject() , 0, true , _getfield ); def(_fast_bgetfield , "fast_bgetfield" , "bJJ" , null , BasicType.getTInt() , 0, true , _getfield ); def(_fast_cgetfield , "fast_cgetfield" , "bJJ" , null , BasicType.getTChar() , 0, true , _getfield ); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java --- a/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/jdi/ReferenceTypeImpl.java Sat Sep 01 13:25:18 2012 -0400 @@ -135,15 +135,15 @@ ReferenceTypeImpl other = (ReferenceTypeImpl)refType; int comp = name().compareTo(other.name()); if (comp == 0) { - Oop rf1 = ref(); - Oop rf2 = other.ref(); + Klass rf1 = ref(); + Klass rf2 = other.ref(); // optimize for typical case: refs equal and VMs equal if (rf1.equals(rf2)) { // sequenceNumbers are always positive comp = vm.sequenceNumber - ((VirtualMachineImpl)(other.virtualMachine())).sequenceNumber; } else { - comp = rf1.getHandle().minus(rf2.getHandle()) < 0? -1 : 1; + comp = rf1.getAddress().minus(rf2.getAddress()) < 0? -1 : 1; } } return comp; @@ -225,7 +225,7 @@ private boolean isThrowableBacktraceField(sun.jvm.hotspot.oops.Field fld) { // refer to JvmtiEnv::GetClassFields in jvmtiEnv.cpp. // We want to filter out java.lang.Throwable.backtrace (see 4446677). - // It contains some methodOops that aren't quite real Objects. + // It contains some Method*s that aren't quite real Objects. if (fld.getFieldHolder().getName().equals(vm.javaLangThrowable()) && fld.getID().getName().equals("backtrace")) { return true; @@ -932,7 +932,7 @@ } long uniqueID() { - return vm.getAddressValue(ref()); + return vm.getAddressValue(ref().getJavaMirror()); } // new method since 1.6 diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/jdi/VirtualMachineImpl.java --- a/agent/src/share/classes/sun/jvm/hotspot/jdi/VirtualMachineImpl.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/jdi/VirtualMachineImpl.java Sat Sep 01 13:25:18 2012 -0400 @@ -447,7 +447,7 @@ newRefType = new ClassTypeImpl(this, (InstanceKlass)kk); } } else { - throw new RuntimeException("should not reach here"); + throw new RuntimeException("should not reach here:" + kk); } typesByID.put(kk, newRefType); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/CMSPermGen.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/CMSPermGen.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.memory; - -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -public class CMSPermGen extends PermGen { - // The "generation" view. - private static AddressField genField; - - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("CMSPermGen"); - genField = type.getAddressField("_gen"); - } - - public CMSPermGen(Address addr) { - super(addr); - } - - public Generation asGen() { - return GenerationFactory.newObject(genField.getValue(addr)); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/CMSPermGenGen.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/CMSPermGenGen.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.memory; - -import sun.jvm.hotspot.debugger.*; - -public class CMSPermGenGen extends ConcurrentMarkSweepGeneration { - public CMSPermGenGen(Address addr) { - super(addr); - } - - public String name() { - return "concurrent-mark-sweep perm gen"; - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -168,7 +168,7 @@ final long addressSize = vm.getAddressSize(); for (; cur.lessThan(limit);) { - Address klassOop = cur.getAddressAt(addressSize); + Address k = cur.getAddressAt(addressSize); if (FreeChunk.indicatesFreeChunk(cur)) { if (! cur.equals(regionStart)) { res.add(new MemRegion(regionStart, cur)); @@ -181,7 +181,7 @@ // note that fc.size() gives chunk size in heap words cur = cur.addOffsetTo(chunkSize * addressSize); regionStart = cur; - } else if (klassOop != null) { + } else if (k != null) { Oop obj = heap.newOop(cur.addOffsetToAsOopHandle(0)); long objectSize = obj.getObjectSize(); cur = cur.addOffsetTo(adjustObjectSizeInBytes(objectSize)); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/CompactingPermGen.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/CompactingPermGen.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.memory; - -import java.util.*; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -/** A PermGen implemented with a contiguous space. */ - -public class CompactingPermGen extends PermGen { - // The "generation" view. - private static AddressField genField; - - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("CompactingPermGen"); - - genField = type.getAddressField("_gen"); - } - - public CompactingPermGen(Address addr) { - super(addr); - } - - public Generation asGen() { - return GenerationFactory.newObject(genField.getValue(addr)); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/CompactingPermGenGen.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/CompactingPermGenGen.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,161 +0,0 @@ -/* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.memory; - -import java.io.*; -import java.util.*; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -/** This is the "generation" view of a CompactingPermGen. */ -public class CompactingPermGenGen extends OneContigSpaceCardGeneration { - private static AddressField unsharedBottomField; - private static AddressField unsharedEndField; - private static AddressField sharedBottomField; - private static AddressField sharedEndField; - private static AddressField readOnlyBottomField; - private static AddressField readOnlyEndField; - private static AddressField readWriteBottomField; - private static AddressField readWriteEndField; - private static AddressField roSpaceField; - private static AddressField rwSpaceField; - - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("CompactingPermGenGen"); - unsharedBottomField = type.getAddressField("unshared_bottom"); - unsharedEndField = type.getAddressField("unshared_end"); - sharedBottomField = type.getAddressField("shared_bottom"); - sharedEndField = type.getAddressField("shared_end"); - readOnlyBottomField = type.getAddressField("readonly_bottom"); - readOnlyEndField = type.getAddressField("readonly_end"); - readWriteBottomField = type.getAddressField("readwrite_bottom"); - readWriteEndField = type.getAddressField("readwrite_end"); - roSpaceField = type.getAddressField("_ro_space"); - rwSpaceField = type.getAddressField("_rw_space"); - } - - public boolean isSharingEnabled() { - return VM.getVM().isSharingEnabled(); - } - - // NEEDS_CLEANUP - public CompactingPermGenGen(Address addr) { - super(addr); - } - - public OffsetTableContigSpace roSpace() { - return newOffsetTableContigSpace(roSpaceField.getValue(addr)); - } - - public OffsetTableContigSpace rwSpace() { - return newOffsetTableContigSpace(rwSpaceField.getValue(addr)); - } - - public String name() { - return "compacting permanent generation"; - } - - public static Address unsharedBottom() { - return unsharedBottomField.getValue(); - } - - public static Address unsharedEnd() { - return unsharedEndField.getValue(); - } - - public static Address sharedBottom() { - return sharedBottomField.getValue(); - } - - public static Address sharedEnd() { - return sharedEndField.getValue(); - } - - public static Address readOnlyBottom() { - return readOnlyBottomField.getValue(); - } - - public static Address readOnlyEnd() { - return readOnlyEndField.getValue(); - } - - public static Address readWriteBottom() { - return readWriteBottomField.getValue(); - } - - public static Address readWriteEnd() { - return readWriteEndField.getValue(); - } - - public static boolean isShared(Address p) { - return sharedBottom().lessThanOrEqual(p) && sharedEnd().greaterThan(p); - } - - public static boolean isSharedReadOnly(Address p) { - return readOnlyBottom().lessThanOrEqual(p) && readOnlyEnd().greaterThan(p); - } - - public static boolean isSharedReadWrite(Address p) { - return readWriteBottom().lessThanOrEqual(p) && readWriteEnd().greaterThan(p); - } - - public boolean isIn(Address p) { - return unsharedBottom().lessThanOrEqual(p) && sharedEnd().greaterThan(p); - } - - public void spaceIterate(SpaceClosure blk, boolean usedOnly) { - super.spaceIterate(blk, usedOnly); - if (isSharingEnabled()) { - blk.doSpace(roSpace()); - blk.doSpace(rwSpace()); - } - } - - public void printOn(PrintStream tty) { - tty.print(" perm"); - theSpace().printOn(tty); - if (isSharingEnabled()) { - tty.print(" ro space: "); - roSpace().printOn(tty); - tty.print(", rw space: "); - rwSpace().printOn(tty); - } - } - - private OffsetTableContigSpace newOffsetTableContigSpace(Address addr) { - return (OffsetTableContigSpace) VMObjectFactory.newObject( - OffsetTableContigSpace.class, addr); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/ContigPermSpace.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/ContigPermSpace.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.memory; - -import sun.jvm.hotspot.debugger.*; - -/** No additional functionality for now */ - -public class ContigPermSpace extends OffsetTableContigSpace { - public ContigPermSpace(Address addr) { - super(addr); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/Dictionary.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/Dictionary.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/memory/Dictionary.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -63,10 +63,9 @@ for (int index = 0; index < tblSize; index++) { for (DictionaryEntry probe = (DictionaryEntry) bucket(index); probe != null; probe = (DictionaryEntry) probe.next()) { - Oop k = probe.klass(); - if (k.isKlass() && - heap.equal(probe.loader(), ((InstanceKlass) k).getClassLoader())) { - v.visit((Klass) k); + Klass k = probe.klass(); + if (heap.equal(probe.loader(), ((InstanceKlass) k).getClassLoader())) { + v.visit(k); } } } @@ -78,10 +77,8 @@ for (int index = 0; index < tblSize; index++) { for (DictionaryEntry probe = (DictionaryEntry) bucket(index); probe != null; probe = (DictionaryEntry) probe.next()) { - Oop k = probe.klass(); - if (k.isKlass()) { - v.visit((Klass) k, probe.loader()); - } + Klass k = probe.klass(); + v.visit(k, probe.loader()); } } } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/DictionaryEntry.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/DictionaryEntry.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/memory/DictionaryEntry.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.memory; import java.util.*; +import sun.jvm.hotspot.classfile.ClassLoaderData; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.types.*; @@ -43,12 +44,12 @@ private static synchronized void initialize(TypeDataBase db) { Type type = db.lookupType("DictionaryEntry"); pdSetField = type.getAddressField("_pd_set"); - loaderField = type.getOopField("_loader"); + loaderDataField = type.getAddressField("_loader_data"); } // Fields private static AddressField pdSetField; - private static sun.jvm.hotspot.types.OopField loaderField; + private static AddressField loaderDataField; // Accessors @@ -59,11 +60,15 @@ } public Oop loader() { - return VM.getVM().getObjectHeap().newOop(loaderField.getValue(addr)); + return loaderData().getClassLoader(); + } + + public ClassLoaderData loaderData() { + return ClassLoaderData.instantiateWrapperFor(loaderDataField.getValue(addr)); } public Klass klass() { - return (Klass)VM.getVM().getObjectHeap().newOop(literalValue().addOffsetToAsOopHandle(0)); + return (Klass)Metadata.instantiateWrapperFor(literalValue()); } public DictionaryEntry(Address addr) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -90,7 +90,7 @@ } } - return permGen().isIn(a); + return false; } public long capacity() { @@ -140,7 +140,5 @@ tty.println("Invocations: " + getGen(i).invocations()); tty.println(); } - permGen().printOn(tty); - tty.println("Invocations: " + permGen().invocations()); } } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/Generation.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/Generation.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/memory/Generation.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,7 +39,6 @@
  • OneContigSpaceCardGeneration
      -
    • CompactingPermGenGen
    • TenuredGeneration
diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/GenerationFactory.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/GenerationFactory.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/memory/GenerationFactory.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,8 +47,6 @@ private static synchronized void initialize(TypeDataBase db) { ctor = new VirtualConstructor(db); - ctor.addMapping("CompactingPermGenGen", CompactingPermGenGen.class); - ctor.addMapping("CMSPermGenGen", CMSPermGenGen.class); ctor.addMapping("DefNewGeneration", DefNewGeneration.class); ctor.addMapping("ParNewGeneration", ParNewGeneration.class); ctor.addMapping("TenuredGeneration", TenuredGeneration.class); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/PermGen.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/PermGen.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.memory; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; - -/** All heaps contains a "permanent generation," containing permanent - (reflective) objects. This is like a regular generation in some - ways, but unlike one in others, and so is split apart. (FIXME: - this distinction is confusing and seems unnecessary.) */ - -public abstract class PermGen extends VMObject { - // NEEDS_CLEANUP - public PermGen(Address addr) { - super(addr); - } - - public abstract Generation asGen(); -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/PlaceholderEntry.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/PlaceholderEntry.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/memory/PlaceholderEntry.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.memory; import java.util.*; +import sun.jvm.hotspot.classfile.ClassLoaderData; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.types.*; @@ -42,15 +43,19 @@ private static synchronized void initialize(TypeDataBase db) { Type type = db.lookupType("PlaceholderEntry"); - loaderField = type.getOopField("_loader"); + loaderDataField = type.getAddressField("_loader_data"); } // Field - private static sun.jvm.hotspot.types.OopField loaderField; + private static AddressField loaderDataField; // Accessor public Oop loader() { - return VM.getVM().getObjectHeap().newOop(loaderField.getValue(addr)); + return loaderData().getClassLoader(); + } + + public ClassLoaderData loaderData() { + return ClassLoaderData.instantiateWrapperFor(loaderDataField.getValue(addr)); } public PlaceholderEntry(Address addr) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/SharedHeap.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/SharedHeap.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/memory/SharedHeap.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,7 +33,6 @@ import sun.jvm.hotspot.types.*; public abstract class SharedHeap extends CollectedHeap { - private static AddressField permGenField; private static VirtualConstructor ctor; static { @@ -46,31 +45,14 @@ private static synchronized void initialize(TypeDataBase db) { Type type = db.lookupType("SharedHeap"); - permGenField = type.getAddressField("_perm_gen"); ctor = new VirtualConstructor(db); - ctor.addMapping("CompactingPermGen", CompactingPermGen.class); - ctor.addMapping("CMSPermGen", CMSPermGen.class); - } public SharedHeap(Address addr) { super(addr); } - /** These functions return the "permanent" generation, in which - reflective objects are allocated and stored. Two versions, the - second of which returns the view of the perm gen as a - generation. (FIXME: this distinction is strange and seems - unnecessary, and should be cleaned up.) */ - public PermGen perm() { - return (PermGen) ctor.instantiateWrapperFor(permGenField.getValue(addr)); - } - public CollectedHeapName kind() { return CollectedHeapName.SHARED_HEAP; } - - public Generation permGen() { - return perm().asGen(); } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/SystemDictionary.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/SystemDictionary.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/memory/SystemDictionary.java Sat Sep 01 13:25:18 2012 -0400 @@ -37,13 +37,13 @@ private static AddressField loaderConstraintTableField; private static sun.jvm.hotspot.types.OopField javaSystemLoaderField; - private static sun.jvm.hotspot.types.OopField objectKlassField; - private static sun.jvm.hotspot.types.OopField classLoaderKlassField; - private static sun.jvm.hotspot.types.OopField stringKlassField; - private static sun.jvm.hotspot.types.OopField systemKlassField; - private static sun.jvm.hotspot.types.OopField threadKlassField; - private static sun.jvm.hotspot.types.OopField threadGroupKlassField; - private static sun.jvm.hotspot.types.OopField methodHandleKlassField; + private static AddressField objectKlassField; + private static AddressField classLoaderKlassField; + private static AddressField stringKlassField; + private static AddressField systemKlassField; + private static AddressField threadKlassField; + private static AddressField threadGroupKlassField; + private static AddressField methodHandleKlassField; static { VM.registerVMInitializedObserver(new Observer() { @@ -62,13 +62,13 @@ loaderConstraintTableField = type.getAddressField("_loader_constraints"); javaSystemLoaderField = type.getOopField("_java_system_loader"); - objectKlassField = type.getOopField(WK_KLASS("Object_klass")); - classLoaderKlassField = type.getOopField(WK_KLASS("ClassLoader_klass")); - stringKlassField = type.getOopField(WK_KLASS("String_klass")); - systemKlassField = type.getOopField(WK_KLASS("System_klass")); - threadKlassField = type.getOopField(WK_KLASS("Thread_klass")); - threadGroupKlassField = type.getOopField(WK_KLASS("ThreadGroup_klass")); - methodHandleKlassField = type.getOopField(WK_KLASS("MethodHandle_klass")); + objectKlassField = type.getAddressField(WK_KLASS("Object_klass")); + classLoaderKlassField = type.getAddressField(WK_KLASS("ClassLoader_klass")); + stringKlassField = type.getAddressField(WK_KLASS("String_klass")); + systemKlassField = type.getAddressField(WK_KLASS("System_klass")); + threadKlassField = type.getAddressField(WK_KLASS("Thread_klass")); + threadGroupKlassField = type.getAddressField(WK_KLASS("ThreadGroup_klass")); + methodHandleKlassField = type.getAddressField(WK_KLASS("MethodHandle_klass")); } // This WK functions must follow the definitions in systemDictionary.hpp: @@ -104,31 +104,31 @@ // few well known classes -- not all are added here. // add more if needed. public static InstanceKlass getThreadKlass() { - return (InstanceKlass) newOop(threadKlassField.getValue()); + return (InstanceKlass)Metadata.instantiateWrapperFor(threadKlassField.getValue()); } public static InstanceKlass getThreadGroupKlass() { - return (InstanceKlass) newOop(threadGroupKlassField.getValue()); + return (InstanceKlass)Metadata.instantiateWrapperFor(threadGroupKlassField.getValue()); } public static InstanceKlass getObjectKlass() { - return (InstanceKlass) newOop(objectKlassField.getValue()); + return (InstanceKlass)Metadata.instantiateWrapperFor(objectKlassField.getValue()); } public static InstanceKlass getStringKlass() { - return (InstanceKlass) newOop(stringKlassField.getValue()); + return (InstanceKlass)Metadata.instantiateWrapperFor(stringKlassField.getValue()); } public static InstanceKlass getClassLoaderKlass() { - return (InstanceKlass) newOop(classLoaderKlassField.getValue()); + return (InstanceKlass)Metadata.instantiateWrapperFor(classLoaderKlassField.getValue()); } public static InstanceKlass getSystemKlass() { - return (InstanceKlass) newOop(systemKlassField.getValue()); + return (InstanceKlass)Metadata.instantiateWrapperFor(systemKlassField.getValue()); } public static InstanceKlass getMethodHandleKlass() { - return (InstanceKlass) newOop(methodHandleKlassField.getValue()); + return (InstanceKlass)Metadata.instantiateWrapperFor(methodHandleKlassField.getValue()); } public InstanceKlass getAbstractOwnableSynchronizerKlass() { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java --- a/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,17 +42,14 @@ private static sun.jvm.hotspot.types.OopField systemThreadGroupField; // single dimensional primitive array klasses - private static sun.jvm.hotspot.types.OopField boolArrayKlassObjField; - private static sun.jvm.hotspot.types.OopField byteArrayKlassObjField; - private static sun.jvm.hotspot.types.OopField charArrayKlassObjField; - private static sun.jvm.hotspot.types.OopField intArrayKlassObjField; - private static sun.jvm.hotspot.types.OopField shortArrayKlassObjField; - private static sun.jvm.hotspot.types.OopField longArrayKlassObjField; - private static sun.jvm.hotspot.types.OopField singleArrayKlassObjField; - private static sun.jvm.hotspot.types.OopField doubleArrayKlassObjField; - - // system obj array klass object - private static sun.jvm.hotspot.types.OopField systemObjArrayKlassObjField; + private static sun.jvm.hotspot.types.AddressField boolArrayKlassField; + private static sun.jvm.hotspot.types.AddressField byteArrayKlassField; + private static sun.jvm.hotspot.types.AddressField charArrayKlassField; + private static sun.jvm.hotspot.types.AddressField intArrayKlassField; + private static sun.jvm.hotspot.types.AddressField shortArrayKlassField; + private static sun.jvm.hotspot.types.AddressField longArrayKlassField; + private static sun.jvm.hotspot.types.AddressField singleArrayKlassField; + private static sun.jvm.hotspot.types.AddressField doubleArrayKlassField; private static AddressField narrowOopBaseField; private static CIntegerField narrowOopShiftField; @@ -78,16 +75,14 @@ mainThreadGroupField = type.getOopField("_main_thread_group"); systemThreadGroupField = type.getOopField("_system_thread_group"); - boolArrayKlassObjField = type.getOopField("_boolArrayKlassObj"); - byteArrayKlassObjField = type.getOopField("_byteArrayKlassObj"); - charArrayKlassObjField = type.getOopField("_charArrayKlassObj"); - intArrayKlassObjField = type.getOopField("_intArrayKlassObj"); - shortArrayKlassObjField = type.getOopField("_shortArrayKlassObj"); - longArrayKlassObjField = type.getOopField("_longArrayKlassObj"); - singleArrayKlassObjField = type.getOopField("_singleArrayKlassObj"); - doubleArrayKlassObjField = type.getOopField("_doubleArrayKlassObj"); - - systemObjArrayKlassObjField = type.getOopField("_systemObjArrayKlassObj"); + boolArrayKlassField = type.getAddressField("_boolArrayKlassObj"); + byteArrayKlassField = type.getAddressField("_byteArrayKlassObj"); + charArrayKlassField = type.getAddressField("_charArrayKlassObj"); + intArrayKlassField = type.getAddressField("_intArrayKlassObj"); + shortArrayKlassField = type.getAddressField("_shortArrayKlassObj"); + longArrayKlassField = type.getAddressField("_longArrayKlassObj"); + singleArrayKlassField = type.getAddressField("_singleArrayKlassObj"); + doubleArrayKlassField = type.getAddressField("_doubleArrayKlassObj"); narrowOopBaseField = type.getAddressField("_narrow_oop._base"); narrowOopShiftField = type.getCIntegerField("_narrow_oop._shift"); @@ -138,21 +133,17 @@ return newOop(systemThreadGroupField.getValue()); } - public Oop systemObjArrayKlassObj() { - return newOop(systemObjArrayKlassObjField.getValue()); - } - // iterate through the single dimensional primitive array klasses - // refer to basic_type_classes_do(void f(klassOop)) in universe.cpp + // refer to basic_type_classes_do(void f(Klass*)) in universe.cpp public void basicTypeClassesDo(SystemDictionary.ClassVisitor visitor) { - visitor.visit((Klass)newOop(boolArrayKlassObjField.getValue())); - visitor.visit((Klass)newOop(byteArrayKlassObjField.getValue())); - visitor.visit((Klass)newOop(charArrayKlassObjField.getValue())); - visitor.visit((Klass)newOop(intArrayKlassObjField.getValue())); - visitor.visit((Klass)newOop(shortArrayKlassObjField.getValue())); - visitor.visit((Klass)newOop(longArrayKlassObjField.getValue())); - visitor.visit((Klass)newOop(singleArrayKlassObjField.getValue())); - visitor.visit((Klass)newOop(doubleArrayKlassObjField.getValue())); + visitor.visit(new TypeArrayKlass(boolArrayKlassField.getValue())); + visitor.visit(new TypeArrayKlass(byteArrayKlassField.getValue())); + visitor.visit(new TypeArrayKlass(charArrayKlassField.getValue())); + visitor.visit(new TypeArrayKlass(intArrayKlassField.getValue())); + visitor.visit(new TypeArrayKlass(shortArrayKlassField.getValue())); + visitor.visit(new TypeArrayKlass(longArrayKlassField.getValue())); + visitor.visit(new TypeArrayKlass(singleArrayKlassField.getValue())); + visitor.visit(new TypeArrayKlass(doubleArrayKlassField.getValue())); } public void print() { printOn(System.out); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/AccessFlags.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/AccessFlags.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/AccessFlags.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,7 +57,7 @@ public long getValue () { return flags; } // Hotspot internal flags - // methodOop flags + // Method* flags public boolean isMonitorMatching () { return (flags & JVM_ACC_MONITOR_MATCH ) != 0; } public boolean hasMonitorBytecodes () { return (flags & JVM_ACC_HAS_MONITOR_BYTECODES ) != 0; } public boolean hasLoops () { return (flags & JVM_ACC_HAS_LOOPS ) != 0; } @@ -69,13 +69,13 @@ public boolean hasJsrs () { return (flags & JVM_ACC_HAS_JSRS ) != 0; } public boolean isObsolete () { return (flags & JVM_ACC_IS_OBSOLETE ) != 0; } - // klassOop flags + // Klass* flags public boolean hasMirandaMethods () { return (flags & JVM_ACC_HAS_MIRANDA_METHODS ) != 0; } public boolean hasVanillaConstructor() { return (flags & JVM_ACC_HAS_VANILLA_CONSTRUCTOR) != 0; } public boolean hasFinalizer () { return (flags & JVM_ACC_HAS_FINALIZER ) != 0; } public boolean isCloneable () { return (flags & JVM_ACC_IS_CLONEABLE ) != 0; } - // klassOop and methodOop flags + // Klass* and Method* flags public boolean hasLocalVariableTable() { return (flags & JVM_ACC_HAS_LOCAL_VARIABLE_TABLE ) != 0; } // field flags diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/Array.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/Array.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/Array.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -59,7 +59,7 @@ if (headerSize != 0) { return headerSize; } - if (VM.getVM().isCompressedOopsEnabled()) { + if (VM.getVM().isCompressedHeadersEnabled()) { headerSize = typeSize; } else { headerSize = VM.getVM().alignUp(typeSize + VM.getVM().getIntSize(), @@ -80,7 +80,7 @@ if (lengthOffsetInBytes != 0) { return lengthOffsetInBytes; } - if (VM.getVM().isCompressedOopsEnabled()) { + if (VM.getVM().isCompressedHeadersEnabled()) { lengthOffsetInBytes = typeSize - VM.getVM().getIntSize(); } else { lengthOffsetInBytes = typeSize; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ArrayData.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ArrayData.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ArrayData.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,10 +49,6 @@ int aindex = index + arrayStartOffSet; return intAt(aindex); } - Oop arrayOopAt(int index) { - int aindex = index + arrayStartOffSet; - return oopAt(aindex); - } // Code generation support for subclasses. static int arrayElementOffset(int index) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ArrayKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ArrayKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ArrayKlass.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,24 +45,24 @@ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("arrayKlass"); - dimension = new CIntField(type.getCIntegerField("_dimension"), Oop.getHeaderSize()); - higherDimension = new OopField(type.getOopField("_higher_dimension"), Oop.getHeaderSize()); - lowerDimension = new OopField(type.getOopField("_lower_dimension"), Oop.getHeaderSize()); - vtableLen = new CIntField(type.getCIntegerField("_vtable_len"), Oop.getHeaderSize()); - allocSize = new CIntField(type.getCIntegerField("_alloc_size"), Oop.getHeaderSize()); - componentMirror = new OopField(type.getOopField("_component_mirror"), Oop.getHeaderSize()); + dimension = new CIntField(type.getCIntegerField("_dimension"), 0); + higherDimension = new MetadataField(type.getAddressField("_higher_dimension"), 0); + lowerDimension = new MetadataField(type.getAddressField("_lower_dimension"), 0); + vtableLen = new CIntField(type.getCIntegerField("_vtable_len"), 0); + allocSize = new CIntField(type.getCIntegerField("_alloc_size"), 0); + componentMirror = new OopField(type.getOopField("_component_mirror"), 0); javaLangCloneableName = null; javaLangObjectName = null; javaIoSerializableName = null; } - ArrayKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); + public ArrayKlass(Address addr) { + super(addr); } private static CIntField dimension; - private static OopField higherDimension; - private static OopField lowerDimension; + private static MetadataField higherDimension; + private static MetadataField lowerDimension; private static CIntField vtableLen; private static CIntField allocSize; private static OopField componentMirror; @@ -141,19 +141,13 @@ tty.print("ArrayKlass"); } - public long getObjectSize() { - return alignObjectSize(InstanceKlass.getHeaderSize() + getVtableLen() * getHeap().getOopSize()); - } - - public void iterateFields(OopVisitor visitor, boolean doVMFields) { - super.iterateFields(visitor, doVMFields); - if (doVMFields) { + public void iterateFields(MetadataVisitor visitor) { + super.iterateFields(visitor); visitor.doCInt(dimension, true); - visitor.doOop(higherDimension, true); - visitor.doOop(lowerDimension, true); + visitor.doMetadata(higherDimension, true); + visitor.doMetadata(lowerDimension, true); visitor.doCInt(vtableLen, true); visitor.doCInt(allocSize, true); visitor.doOop(componentMirror, true); } } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ArrayKlassKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ArrayKlassKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.oops; - -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -public class ArrayKlassKlass extends KlassKlass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("arrayKlassKlass"); - headerSize = type.getSize() + Oop.getHeaderSize(); - } - - ArrayKlassKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); - } - - private static long headerSize; - - public long getObjectSize() { return alignObjectSize(headerSize); } - - public void printValueOn(PrintStream tty) { - tty.print("ArrayKlassKlass"); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/BooleanField.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/BooleanField.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/BooleanField.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.oops; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.VMObject; // The class for a boolean field simply provides access to the value. public class BooleanField extends Field { @@ -41,6 +42,7 @@ } public boolean getValue(Oop obj) { return obj.getHandle().getJBooleanAt(getOffset()); } + public boolean getValue(VMObject obj) { return obj.getAddress().getJBooleanAt(getOffset()); } public void setValue(Oop obj, boolean value) throws MutationException { // Fix this: setJBooleanAt is missing in Address } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ByteField.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ByteField.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ByteField.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.oops; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.VMObject; // The class for a byte field simply provides access to the value. public class ByteField extends Field { @@ -41,6 +42,7 @@ } public byte getValue(Oop obj) { return obj.getHandle().getJByteAt(getOffset()); } + public byte getValue(VMObject obj) { return obj.getAddress().getJByteAt(getOffset()); } public void setValue(Oop obj, char value) throws MutationException { // Fix this: setJCharAt is missing in Address } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/CIntField.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/CIntField.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/CIntField.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,6 +24,7 @@ package sun.jvm.hotspot.oops; +import sun.jvm.hotspot.runtime.VMObject; import sun.jvm.hotspot.debugger.*; // The class for an C int field simply provides access to the value. @@ -39,7 +40,10 @@ private boolean isUnsigned; public long getValue(Oop obj) { - return obj.getHandle().getCIntegerAt(getOffset(), size, isUnsigned); + return getValue(obj.getHandle()); + } + public long getValue(VMObject obj) { + return getValue(obj.getAddress()); } public long getValue(Address addr) { return addr.getCIntegerAt(getOffset(), size, isUnsigned); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/CharField.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/CharField.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/CharField.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.oops; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.VMObject; // The class for a char field simply provides access to the value. public class CharField extends Field { @@ -41,6 +42,7 @@ } public char getValue(Oop obj) { return obj.getHandle().getJCharAt(getOffset()); } + public char getValue(VMObject obj) { return obj.getAddress().getJCharAt(getOffset()); } public void setValue(Oop obj, char value) throws MutationException { // Fix this: setJCharAt is missing in Address } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/CheckedExceptionElement.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/CheckedExceptionElement.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/CheckedExceptionElement.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,10 +48,10 @@ private static long offsetOfClassCPIndex; - private OopHandle handle; + private Address handle; private long offset; - public CheckedExceptionElement(OopHandle handle, long offset) { + public CheckedExceptionElement(Address handle, long offset) { this.handle = handle; this.offset = offset; } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/CompiledICHolder.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/CompiledICHolder.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/CompiledICHolder.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; -public class CompiledICHolder extends Oop { +public class CompiledICHolder extends VMObject { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -40,14 +40,14 @@ } private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("compiledICHolderOopDesc"); - holderMethod = new OopField(type.getOopField("_holder_method"), 0); - holderKlass = new OopField(type.getOopField("_holder_klass"), 0); + Type type = db.lookupType("CompiledICHolder"); + holderMethod = new MetadataField(type.getAddressField("_holder_method"), 0); + holderKlass = new MetadataField(type.getAddressField("_holder_klass"), 0); headerSize = type.getSize(); } - CompiledICHolder(OopHandle handle, ObjectHeap heap) { - super(handle, heap); + public CompiledICHolder(Address addr) { + super(addr); } public boolean isCompiledICHolder() { return true; } @@ -55,8 +55,8 @@ private static long headerSize; // Fields - private static OopField holderMethod; - private static OopField holderKlass; + private static MetadataField holderMethod; + private static MetadataField holderKlass; // Accessors for declared fields public Method getHolderMethod() { return (Method) holderMethod.getValue(this); } @@ -65,16 +65,4 @@ public void printValueOn(PrintStream tty) { tty.print("CompiledICHolder"); } - - public long getObjectSize() { - return alignObjectSize(headerSize); } - - void iterateFields(OopVisitor visitor, boolean doVMFields) { - super.iterateFields(visitor, doVMFields); - if (doVMFields) { - visitor.doOop(holderMethod, true); - visitor.doOop(holderKlass, true); - } - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/CompiledICHolderKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/CompiledICHolderKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.oops; - -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -public class CompiledICHolderKlass extends Klass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("compiledICHolderKlass"); - headerSize = type.getSize() + Oop.getHeaderSize(); - } - - CompiledICHolderKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); - } - - private static long headerSize; - - public long getObjectSize() { return alignObjectSize(headerSize); } - - public void printValueOn(PrintStream tty) { - tty.print("CompilerICHolderKlass"); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethod.java Sat Sep 01 13:25:18 2012 -0400 @@ -34,7 +34,7 @@ import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.utilities.*; -public class ConstMethod extends Oop { +public class ConstMethod extends VMObject { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -50,18 +50,18 @@ private static int HAS_EXCEPTION_TABLE; private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("constMethodOopDesc"); - constants = new OopField(type.getOopField("_constants"), 0); + Type type = db.lookupType("ConstMethod"); + constants = new MetadataField(type.getAddressField("_constants"), 0); constMethodSize = new CIntField(type.getCIntegerField("_constMethod_size"), 0); flags = new ByteField(type.getJByteField("_flags"), 0); // enum constants for flags - HAS_LINENUMBER_TABLE = db.lookupIntConstant("constMethodOopDesc::_has_linenumber_table").intValue(); - HAS_CHECKED_EXCEPTIONS = db.lookupIntConstant("constMethodOopDesc::_has_checked_exceptions").intValue(); - HAS_LOCALVARIABLE_TABLE = db.lookupIntConstant("constMethodOopDesc::_has_localvariable_table").intValue(); - HAS_EXCEPTION_TABLE = db.lookupIntConstant("constMethodOopDesc::_has_exception_table").intValue(); + HAS_LINENUMBER_TABLE = db.lookupIntConstant("ConstMethod::_has_linenumber_table").intValue(); + HAS_CHECKED_EXCEPTIONS = db.lookupIntConstant("ConstMethod::_has_checked_exceptions").intValue(); + HAS_LOCALVARIABLE_TABLE = db.lookupIntConstant("ConstMethod::_has_localvariable_table").intValue(); + HAS_EXCEPTION_TABLE = db.lookupIntConstant("ConstMethod::_has_exception_table").intValue(); - // Size of Java bytecodes allocated immediately after constMethodOop. + // Size of Java bytecodes allocated immediately after ConstMethod*. codeSize = new CIntField(type.getCIntegerField("_code_size"), 0); nameIndex = new CIntField(type.getCIntegerField("_name_index"), 0); signatureIndex = new CIntField(type.getCIntegerField("_signature_index"), 0); @@ -81,12 +81,12 @@ exceptionTableElementSize = type.getSize(); } - ConstMethod(OopHandle handle, ObjectHeap heap) { - super(handle, heap); + public ConstMethod(Address addr) { + super(addr); } // Fields - private static OopField constants; + private static MetadataField constants; private static CIntField constMethodSize; private static ByteField flags; private static CIntField codeSize; @@ -104,8 +104,8 @@ public Method getMethod() { InstanceKlass ik = (InstanceKlass)getConstants().getPoolHolder(); - ObjArray methods = ik.getMethods(); - return (Method)methods.getObjAt(getIdNum()); + MethodArray methods = ik.getMethods(); + return methods.at((int)getIdNum()); } // Accessors for declared fields @@ -157,7 +157,7 @@ /** Get a bytecode or breakpoint at the given bci */ public int getBytecodeOrBPAt(int bci) { - return getHandle().getJByteAt(bytecodeOffset + bci) & 0xFF; + return getAddress().getJByteAt(bytecodeOffset + bci) & 0xFF; } public byte getBytecodeByteArg(int bci) { @@ -215,23 +215,21 @@ for( int i=0; i < bc.length; i++ ) { long offs = bytecodeOffset + i; - bc[i] = getHandle().getJByteAt( offs ); + bc[i] = getAddress().getJByteAt( offs ); } return bc; } - public long getObjectSize() { - return getConstMethodSize() * getHeap().getOopSize(); + public long getSize() { + return getConstMethodSize(); } public void printValueOn(PrintStream tty) { - tty.print("ConstMethod " + getName().asString() + getSignature().asString() + "@" + getHandle()); + tty.print("ConstMethod " + getName().asString() + getSignature().asString() + "@" + getAddress()); } - public void iterateFields(OopVisitor visitor, boolean doVMFields) { - super.iterateFields(visitor, doVMFields); - if (doVMFields) { - visitor.doOop(constants, true); + public void iterateFields(MetadataVisitor visitor) { + visitor.doMetadata(constants, true); visitor.doCInt(constMethodSize, true); visitor.doByte(flags, true); visitor.doCInt(codeSize, true); @@ -240,7 +238,6 @@ visitor.doCInt(genericSignatureIndex, true); visitor.doCInt(codeSize, true); } - } // Accessors @@ -266,7 +263,7 @@ // The line numbers are a short array of 2-tuples [start_pc, line_number]. // Not necessarily sorted and not necessarily one-to-one. CompressedLineNumberReadStream stream = - new CompressedLineNumberReadStream(getHandle(), (int) offsetOfCompressedLineNumberTable()); + new CompressedLineNumberReadStream(getAddress(), (int) offsetOfCompressedLineNumberTable()); while (stream.readPair()) { if (stream.bci() == bci) { // perfect match @@ -290,7 +287,7 @@ } int len = getLineNumberTableLength(); CompressedLineNumberReadStream stream = - new CompressedLineNumberReadStream(getHandle(), (int) offsetOfCompressedLineNumberTable()); + new CompressedLineNumberReadStream(getAddress(), (int) offsetOfCompressedLineNumberTable()); LineNumberTableElement[] ret = new LineNumberTableElement[len]; for (int idx = 0; idx < len; idx++) { @@ -316,7 +313,7 @@ LocalVariableTableElement[] ret = new LocalVariableTableElement[getLocalVariableTableLength()]; long offset = offsetOfLocalVariableTable(); for (int i = 0; i < ret.length; i++) { - ret[i] = new LocalVariableTableElement(getHandle(), offset); + ret[i] = new LocalVariableTableElement(getAddress(), offset); offset += localVariableTableElementSize; } return ret; @@ -333,7 +330,7 @@ ExceptionTableElement[] ret = new ExceptionTableElement[getExceptionTableLength()]; long offset = offsetOfExceptionTable(); for (int i = 0; i < ret.length; i++) { - ret[i] = new ExceptionTableElement(getHandle(), offset); + ret[i] = new ExceptionTableElement(getAddress(), offset); offset += exceptionTableElementSize; } return ret; @@ -350,7 +347,7 @@ CheckedExceptionElement[] ret = new CheckedExceptionElement[getCheckedExceptionsLength()]; long offset = offsetOfCheckedExceptions(); for (int i = 0; i < ret.length; i++) { - ret[i] = new CheckedExceptionElement(getHandle(), offset); + ret[i] = new CheckedExceptionElement(getAddress(), offset); offset += checkedExceptionElementSize; } return ret; @@ -370,14 +367,14 @@ return bytecodeOffset + getCodeSize(); } - // Offset of start of compressed line number table (see methodOop.hpp) + // Offset of start of compressed line number table (see method.hpp) private long offsetOfCompressedLineNumberTable() { return offsetOfCodeEnd() + (isNative() ? 2 * VM.getVM().getAddressSize() : 0); } - // Offset of last short in methodOop + // Offset of last short in Method* private long offsetOfLastU2Element() { - return getObjectSize() - 2; + return getSize() * VM.getVM().getObjectHeap().getOopSize() - 2; } private long offsetOfCheckedExceptionsLength() { @@ -386,7 +383,7 @@ private int getCheckedExceptionsLength() { if (hasCheckedExceptions()) { - return (int) getHandle().getCIntegerAt(offsetOfCheckedExceptionsLength(), 2, true); + return (int) getAddress().getCIntegerAt(offsetOfCheckedExceptionsLength(), 2, true); } else { return 0; } @@ -407,7 +404,7 @@ int len = 0; if (hasLineNumberTable()) { CompressedLineNumberReadStream stream = - new CompressedLineNumberReadStream(getHandle(), (int) offsetOfCompressedLineNumberTable()); + new CompressedLineNumberReadStream(getAddress(), (int) offsetOfCompressedLineNumberTable()); while (stream.readPair()) { len += 1; } @@ -417,7 +414,7 @@ private int getLocalVariableTableLength() { if (hasLocalVariableTable()) { - return (int) getHandle().getCIntegerAt(offsetOfLocalVariableTableLength(), 2, true); + return (int) getAddress().getCIntegerAt(offsetOfLocalVariableTableLength(), 2, true); } else { return 0; } @@ -450,7 +447,7 @@ private int getExceptionTableLength() { if (hasExceptionTable()) { - return (int) getHandle().getCIntegerAt(offsetOfExceptionTableLength(), 2, true); + return (int) getAddress().getCIntegerAt(offsetOfExceptionTableLength(), 2, true); } else { return 0; } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethodKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ConstMethodKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.oops; - -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -// The ConstMethodKlass is the klass of a ConstMethod - -public class ConstMethodKlass extends Klass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("constMethodKlass"); - headerSize = type.getSize() + Oop.getHeaderSize(); - } - - ConstMethodKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); - } - - private static long headerSize; - - public long getObjectSize() { return alignObjectSize(headerSize); } - - public void printValueOn(PrintStream tty) { - tty.print("ConstMethodKlass"); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPool.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,8 +34,7 @@ // A ConstantPool is an oop containing class constants // as described in the class file -public class ConstantPool extends Oop implements ClassConstants { - +public class ConstantPool extends Metadata implements ClassConstants { public class CPSlot { private Address ptr; @@ -46,24 +45,20 @@ this.ptr = sym.getAddress().orWithMask(1); } - public boolean isOop() { + public boolean isResolved() { return (ptr.minus(null) & 1) == 0; } - public boolean isMetaData() { + public boolean isUnresolved() { return (ptr.minus(null) & 1) == 1; } public Symbol getSymbol() { - if (isMetaData()) { + if (!isUnresolved()) throw new InternalError("not a symbol"); return Symbol.create(ptr.xorWithMask(1)); } - throw new InternalError("not a symbol"); - } - public Oop getOop() { - if (isOop()) { - return VM.getVM().getObjectHeap().newOop(ptr.addOffsetToAsOopHandle(0)); - } - throw new InternalError("not an oop"); + public Klass getKlass() { + if (!isResolved()) throw new InternalError("not klass"); + return (Klass)Metadata.instantiateWrapperFor(ptr); } } @@ -83,31 +78,35 @@ } private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("constantPoolOopDesc"); - tags = new OopField(type.getOopField("_tags"), 0); - operands = new OopField(type.getOopField("_operands"), 0); - cache = new OopField(type.getOopField("_cache"), 0); - poolHolder = new OopField(type.getOopField("_pool_holder"), 0); + Type type = db.lookupType("ConstantPool"); + tags = type.getAddressField("_tags"); + operands = type.getAddressField("_operands"); + cache = type.getAddressField("_cache"); + poolHolder = new MetadataField(type.getAddressField("_pool_holder"), 0); length = new CIntField(type.getCIntegerField("_length"), 0); + resolvedReferences = type.getAddressField("_resolved_references"); + referenceMap = type.getAddressField("_reference_map"); headerSize = type.getSize(); elementSize = 0; // fetch constants: - INDY_BSM_OFFSET = db.lookupIntConstant("constantPoolOopDesc::_indy_bsm_offset").intValue(); - INDY_ARGC_OFFSET = db.lookupIntConstant("constantPoolOopDesc::_indy_argc_offset").intValue(); - INDY_ARGV_OFFSET = db.lookupIntConstant("constantPoolOopDesc::_indy_argv_offset").intValue(); + INDY_BSM_OFFSET = db.lookupIntConstant("ConstantPool::_indy_bsm_offset").intValue(); + INDY_ARGC_OFFSET = db.lookupIntConstant("ConstantPool::_indy_argc_offset").intValue(); + INDY_ARGV_OFFSET = db.lookupIntConstant("ConstantPool::_indy_argv_offset").intValue(); } - ConstantPool(OopHandle handle, ObjectHeap heap) { - super(handle, heap); + public ConstantPool(Address addr) { + super(addr); } public boolean isConstantPool() { return true; } - private static OopField tags; - private static OopField operands; - private static OopField cache; - private static OopField poolHolder; + private static AddressField tags; + private static AddressField operands; + private static AddressField cache; + private static MetadataField poolHolder; private static CIntField length; // number of elements in oop + private static AddressField resolvedReferences; + private static AddressField referenceMap; private static long headerSize; private static long elementSize; @@ -116,11 +115,31 @@ private static int INDY_ARGC_OFFSET; private static int INDY_ARGV_OFFSET; - public TypeArray getTags() { return (TypeArray) tags.getValue(this); } - public TypeArray getOperands() { return (TypeArray) operands.getValue(this); } - public ConstantPoolCache getCache() { return (ConstantPoolCache) cache.getValue(this); } + public U1Array getTags() { return new U1Array(tags.getValue(getAddress())); } + public U2Array getOperands() { return new U2Array(operands.getValue(getAddress())); } + public ConstantPoolCache getCache() { + Address addr = cache.getValue(getAddress()); + return (ConstantPoolCache) VMObjectFactory.newObject(ConstantPoolCache.class, addr); + } public Klass getPoolHolder() { return (Klass) poolHolder.getValue(this); } - public int getLength() { return (int)length.getValue(this); } + public int getLength() { return (int)length.getValue(getAddress()); } + public Oop getResolvedReferences() { + Address handle = resolvedReferences.getValue(getAddress()); + if (handle != null) { + // Load through the handle + OopHandle refs = handle.getOopHandleAt(0); + return VM.getVM().getObjectHeap().newOop(refs); + } + return null; + } + + public U2Array referenceMap() { + return new U2Array(referenceMap.getValue(getAddress())); + } + + public int objectToCPIndex(int index) { + return referenceMap().at(index); + } private long getElementSize() { if (elementSize !=0 ) { @@ -139,33 +158,32 @@ } public ConstantTag getTagAt(long index) { - return new ConstantTag(getTags().getByteAt((int) index)); + return new ConstantTag((byte)getTags().at((int) index)); } public CPSlot getSlotAt(long index) { - return new CPSlot(getHandle().getAddressAt(indexOffset(index))); + return new CPSlot(getAddressAtRaw(index)); } - public Oop getObjAtRaw(long index){ - return getHeap().newOop(getHandle().getOopHandleAt(indexOffset(index))); + public Address getAddressAtRaw(long index) { + return getAddress().getAddressAt(indexOffset(index)); } public Symbol getSymbolAt(long index) { - CPSlot slot = getSlotAt(index); - return slot.getSymbol(); + return Symbol.create(getAddressAtRaw(index)); } public int getIntAt(long index){ - return getHandle().getJIntAt(indexOffset(index)); + return getAddress().getJIntAt(indexOffset(index)); } public float getFloatAt(long index){ - return getHandle().getJFloatAt(indexOffset(index)); + return getAddress().getJFloatAt(indexOffset(index)); } public long getLongAt(long index) { - int oneHalf = getHandle().getJIntAt(indexOffset(index + 1)); - int otherHalf = getHandle().getJIntAt(indexOffset(index)); + int oneHalf = getAddress().getJIntAt(indexOffset(index + 1)); + int otherHalf = getAddress().getJIntAt(indexOffset(index)); // buildLongFromIntsPD accepts higher address value, lower address value // in that order. return VM.getVM().buildLongFromIntsPD(oneHalf, otherHalf); @@ -185,7 +203,7 @@ i = which; } else { // change byte-ordering and go via cache - i = cache.getEntryAt(0xFFFF & VM.getVM().getBytes().swapShort((short) which)).getConstantPoolIndex(); + i = cache.getEntryAt(0xFFFF & which).getConstantPoolIndex(); } if (Assert.ASSERTS_ENABLED) { Assert.that(getTagAt(i).isFieldOrMethod(), "Corrupted constant pool"); @@ -202,7 +220,7 @@ public int[] getNameAndTypeAt(int which) { if (Assert.ASSERTS_ENABLED) { - Assert.that(getTagAt(which).isNameAndType(), "Corrupted constant pool"); + Assert.that(getTagAt(which).isNameAndType(), "Corrupted constant pool: " + which + " " + getTagAt(which)); } int i = getIntAt(which); if (DEBUG) { @@ -215,6 +233,10 @@ return implGetNameRefAt(which, false); } + public Symbol uncachedGetNameRefAt(int which) { + return implGetNameRefAt(which, true); + } + private Symbol implGetNameRefAt(int which, boolean uncached) { int signatureIndex = getNameRefIndexAt(implNameAndTypeRefIndexAt(which, uncached)); return getSymbolAt(signatureIndex); @@ -224,35 +246,57 @@ return implGetSignatureRefAt(which, false); } + public Symbol uncachedGetSignatureRefAt(int which) { + return implGetSignatureRefAt(which, true); + } + private Symbol implGetSignatureRefAt(int which, boolean uncached) { int signatureIndex = getSignatureRefIndexAt(implNameAndTypeRefIndexAt(which, uncached)); return getSymbolAt(signatureIndex); } + public static boolean isInvokedynamicIndex(int i) { return (i < 0); } + + public static int decodeInvokedynamicIndex(int i) { Assert.that(isInvokedynamicIndex(i), ""); return ~i; } + + // The invokedynamic points at the object index. The object map points at + // the cpCache index and the cpCache entry points at the original constant + // pool index. + public int invokedynamicCPCacheIndex(int index) { + Assert.that(isInvokedynamicIndex(index), "should be a invokedynamic index"); + int rawIndex = decodeInvokedynamicIndex(index); + return referenceMap().at(rawIndex); + } + + ConstantPoolCacheEntry invokedynamicCPCacheEntryAt(int index) { + // decode index that invokedynamic points to. + int cpCacheIndex = invokedynamicCPCacheIndex(index); + return getCache().getEntryAt(cpCacheIndex); + } private int implNameAndTypeRefIndexAt(int which, boolean uncached) { int i = which; if (!uncached && getCache() != null) { - if (ConstantPoolCache.isSecondaryIndex(which)) { - // Invokedynamic index. - int pool_index = getCache().getMainEntryAt(which).getConstantPoolIndex(); - pool_index = invokeDynamicNameAndTypeRefIndexAt(pool_index); - // assert(tagAt(pool_index).isNameAndType(), ""); - return pool_index; + if (isInvokedynamicIndex(which)) { + // Invokedynamic index is index into resolved_references + int poolIndex = invokedynamicCPCacheEntryAt(which).getConstantPoolIndex(); + poolIndex = invokeDynamicNameAndTypeRefIndexAt(poolIndex); + Assert.that(getTagAt(poolIndex).isNameAndType(), ""); + return poolIndex; } // change byte-ordering and go via cache i = remapInstructionOperandFromCache(which); } else { if (getTagAt(which).isInvokeDynamic()) { - int pool_index = invokeDynamicNameAndTypeRefIndexAt(which); - // assert(tag_at(pool_index).is_name_and_type(), ""); - return pool_index; + int poolIndex = invokeDynamicNameAndTypeRefIndexAt(which); + Assert.that(getTagAt(poolIndex).isNameAndType(), ""); + return poolIndex; } } // assert(tag_at(i).is_field_or_method(), "Corrupted constant pool"); // assert(!tag_at(i).is_invoke_dynamic(), "Must be handled above"); - int ref_index = getIntAt(i); - return extractHighShortFromInt(ref_index); + int refIndex = getIntAt(i); + return extractHighShortFromInt(refIndex); } private int remapInstructionOperandFromCache(int operand) { @@ -269,16 +313,29 @@ } // returns null, if not resolved. - public Klass getKlassRefAt(int which) { + public Klass getKlassAt(int which) { if( ! getTagAt(which).isKlass()) return null; - return (Klass) getObjAtRaw(which); + return (Klass)Metadata.instantiateWrapperFor(getAddressAtRaw(which)); + } + + public Symbol getKlassNameAt(int which) { + CPSlot entry = getSlotAt(which); + if (entry.isResolved()) { + return entry.getKlass().getName(); + } else { + return entry.getSymbol(); + } + } + + public Symbol getUnresolvedStringAt(int which) { + return getSymbolAt(which); } // returns null, if not resolved. public InstanceKlass getFieldOrMethodKlassRefAt(int which) { int refIndex = getFieldOrMethodAt(which); int klassIndex = extractLowShortFromInt(refIndex); - return (InstanceKlass) getKlassRefAt(klassIndex); + return (InstanceKlass) getKlassAt(klassIndex); } // returns null, if not resolved. @@ -371,16 +428,16 @@ Assert.that(getTagAt(i).isInvokeDynamic(), "Corrupted constant pool"); } int bsmSpec = extractLowShortFromInt(this.getIntAt(i)); - TypeArray operands = getOperands(); + U2Array operands = getOperands(); if (operands == null) return null; // safety first - int basePos = VM.getVM().buildIntFromShorts(operands.getShortAt(bsmSpec * 2 + 0), - operands.getShortAt(bsmSpec * 2 + 1)); + int basePos = VM.getVM().buildIntFromShorts(operands.at(bsmSpec * 2 + 0), + operands.at(bsmSpec * 2 + 1)); int argv = basePos + INDY_ARGV_OFFSET; - int argc = operands.getShortAt(basePos + INDY_ARGC_OFFSET); + int argc = operands.at(basePos + INDY_ARGC_OFFSET); int endPos = argv + argc; short[] values = new short[endPos - basePos]; for (int j = 0; j < values.length; j++) { - values[j] = operands.getShortAt(basePos+j); + values[j] = operands.at(basePos+j); } return values; } @@ -407,25 +464,24 @@ case JVM_CONSTANT_InvokeDynamic: return "JVM_CONSTANT_InvokeDynamic"; case JVM_CONSTANT_Invalid: return "JVM_CONSTANT_Invalid"; case JVM_CONSTANT_UnresolvedClass: return "JVM_CONSTANT_UnresolvedClass"; + case JVM_CONSTANT_ClassIndex: return "JVM_CONSTANT_ClassIndex"; + case JVM_CONSTANT_StringIndex: return "JVM_CONSTANT_StringIndex"; case JVM_CONSTANT_UnresolvedClassInError: return "JVM_CONSTANT_UnresolvedClassInError"; - case JVM_CONSTANT_ClassIndex: return "JVM_CONSTANT_ClassIndex"; - case JVM_CONSTANT_UnresolvedString: return "JVM_CONSTANT_UnresolvedString"; - case JVM_CONSTANT_StringIndex: return "JVM_CONSTANT_StringIndex"; + case JVM_CONSTANT_MethodHandleInError:return "JVM_CONSTANT_MethodHandleInError"; + case JVM_CONSTANT_MethodTypeInError: return "JVM_CONSTANT_MethodTypeInError"; + case JVM_CONSTANT_Object: return "JVM_CONSTANT_Object"; } throw new InternalError("Unknown tag: " + tag); } - public void iterateFields(OopVisitor visitor, boolean doVMFields) { - super.iterateFields(visitor, doVMFields); - if (doVMFields) { - visitor.doOop(tags, true); - visitor.doOop(cache, true); - visitor.doOop(poolHolder, true); + public void iterateFields(MetadataVisitor visitor) { + super.iterateFields(visitor); + visitor.doMetadata(poolHolder, true); final int length = (int) getLength(); // zero'th pool entry is always invalid. ignore it. for (int index = 1; index < length; index++) { - int ctag = (int) getTags().getByteAt((int) index); + int ctag = (int) getTags().at((int) index); switch (ctag) { case JVM_CONSTANT_ClassIndex: case JVM_CONSTANT_StringIndex: @@ -452,7 +508,6 @@ case JVM_CONSTANT_UnresolvedClassInError: case JVM_CONSTANT_UnresolvedClass: case JVM_CONSTANT_Class: - case JVM_CONSTANT_UnresolvedString: case JVM_CONSTANT_Utf8: visitor.doOop(new OopField(new NamedFieldIdentifier(nameForTag(ctag)), indexOffset(index), true), true); break; @@ -469,27 +524,19 @@ } } } - /* - int length = getLength(); - for (int index = 0; index < length; index++) { - long offset = baseOffset + (index + typeDataBase.getOopSize()); - visitor.doOop(new IndexableField(index, offset, false), getObjAt(index)); - } - */ - } public void writeBytes(OutputStream os) throws IOException { // Map between any modified UTF-8 and it's constant pool index. Map utf8ToIndex = new HashMap(); DataOutputStream dos = new DataOutputStream(os); - TypeArray tags = getTags(); + U1Array tags = getTags(); int len = (int)getLength(); int ci = 0; // constant pool index // collect all modified UTF-8 Strings from Constant Pool for (ci = 1; ci < len; ci++) { - byte cpConstType = tags.getByteAt(ci); + int cpConstType = tags.at(ci); if(cpConstType == JVM_CONSTANT_Utf8) { Symbol sym = getSymbolAt(ci); utf8ToIndex.put(sym.asString(), new Short((short) ci)); @@ -502,7 +549,7 @@ for(ci = 1; ci < len; ci++) { - int cpConstType = (int)tags.getByteAt(ci); + int cpConstType = tags.at(ci); // write cp_info // write constant type switch(cpConstType) { @@ -548,8 +595,8 @@ case JVM_CONSTANT_Class: { dos.writeByte(cpConstType); - // Klass already resolved. ConstantPool constains klassOop. - Klass refKls = (Klass) getObjAtRaw(ci); + // Klass already resolved. ConstantPool constains Klass*. + Klass refKls = (Klass)Metadata.instantiateWrapperFor(getAddressAtRaw(ci)); String klassName = refKls.getName().asString(); Short s = (Short) utf8ToIndex.get(klassName); dos.writeShort(s.shortValue()); @@ -570,24 +617,13 @@ case JVM_CONSTANT_String: { dos.writeByte(cpConstType); - String str = OopUtilities.stringOopToString(getObjAtRaw(ci)); + String str = getUnresolvedStringAt(ci).asString(); Short s = (Short) utf8ToIndex.get(str); dos.writeShort(s.shortValue()); if (DEBUG) debugMessage("CP[" + ci + "] = string " + s); break; } - // case JVM_CONSTANT_StringIndex: - case JVM_CONSTANT_UnresolvedString: { - dos.writeByte(JVM_CONSTANT_String); - String val = getSymbolAt(ci).asString(); - - Short s = (Short) utf8ToIndex.get(val); - dos.writeShort(s.shortValue()); - if (DEBUG) debugMessage("CP[" + ci + "] = string " + s); - break; - } - // all external, internal method/field references case JVM_CONSTANT_Fieldref: case JVM_CONSTANT_Methodref: @@ -618,12 +654,21 @@ case JVM_CONSTANT_MethodHandle: { dos.writeByte(cpConstType); int value = getIntAt(ci); - short nameIndex = (short) extractLowShortFromInt(value); - short signatureIndex = (short) extractHighShortFromInt(value); - dos.writeShort(nameIndex); - dos.writeShort(signatureIndex); - if (DEBUG) debugMessage("CP[" + ci + "] = N&T name = " + nameIndex - + ", type = " + signatureIndex); + byte refKind = (byte) extractLowShortFromInt(value); + short memberIndex = (short) extractHighShortFromInt(value); + dos.writeByte(refKind); + dos.writeShort(memberIndex); + if (DEBUG) debugMessage("CP[" + ci + "] = MH kind = " + + refKind + ", mem = " + memberIndex); + break; + } + + case JVM_CONSTANT_MethodType: { + dos.writeByte(cpConstType); + int value = getIntAt(ci); + short refIndex = (short) value; + dos.writeShort(refIndex); + if (DEBUG) debugMessage("CP[" + ci + "] = MT index = " + refIndex); break; } @@ -634,13 +679,13 @@ short nameAndTypeIndex = (short) extractHighShortFromInt(value); dos.writeShort(bsmIndex); dos.writeShort(nameAndTypeIndex); - if (DEBUG) debugMessage("CP[" + ci + "] = indy BSM = " + bsmIndex - + ", N&T = " + nameAndTypeIndex); + if (DEBUG) debugMessage("CP[" + ci + "] = INDY bsm = " + + bsmIndex + ", N&T = " + nameAndTypeIndex); break; } default: - throw new InternalError("unknown tag: " + cpConstType); + throw new InternalError("Unknown tag: " + cpConstType); } // switch } dos.flush(); @@ -648,16 +693,11 @@ } public void printValueOn(PrintStream tty) { - Oop holder = poolHolder.getValue(this); - if (holder instanceof Klass) { - tty.print("ConstantPool for " + ((Klass)holder).getName().asString()); - } else { - tty.print("ConstantPool for partially loaded class"); - } + tty.print("ConstantPool for " + getPoolHolder().getName().asString()); } - public long getObjectSize() { - return alignObjectSize(headerSize + (getLength() * getElementSize())); + public long getSize() { + return Oop.alignObjectSize(headerSize + getLength()); } //---------------------------------------------------------------------- @@ -665,12 +705,12 @@ // private static int extractHighShortFromInt(int val) { - // must stay in sync with constantPoolOopDesc::name_and_type_at_put, method_at_put, etc. + // must stay in sync with ConstantPool::name_and_type_at_put, method_at_put, etc. return (val >> 16) & 0xFFFF; } private static int extractLowShortFromInt(int val) { - // must stay in sync with constantPoolOopDesc::name_and_type_at_put, method_at_put, etc. + // must stay in sync with ConstantPool::name_and_type_at_put, method_at_put, etc. return val & 0xFFFF; } } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolCache.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolCache.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolCache.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,10 +31,10 @@ import sun.jvm.hotspot.types.*; import sun.jvm.hotspot.utilities.*; -// ConstantPoolCache : A constant pool cache (constantPoolCacheOopDesc). -// See cpCacheOop.hpp for details about this class. +// ConstantPoolCache : A constant pool cache (ConstantPoolCache). +// See cpCache.hpp for details about this class. // -public class ConstantPoolCache extends Oop { +public class ConstantPoolCache extends Metadata { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -44,31 +44,33 @@ } private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("constantPoolCacheOopDesc"); - constants = new OopField(type.getOopField("_constant_pool"), 0); + Type type = db.lookupType("ConstantPoolCache"); + constants = new MetadataField(type.getAddressField("_constant_pool"), 0); baseOffset = type.getSize(); Type elType = db.lookupType("ConstantPoolCacheEntry"); elementSize = elType.getSize(); length = new CIntField(type.getCIntegerField("_length"), 0); + intSize = VM.getVM().getObjectHeap().getIntSize(); } - ConstantPoolCache(OopHandle handle, ObjectHeap heap) { - super(handle, heap); + public ConstantPoolCache(Address addr) { + super(addr); } public boolean isConstantPoolCache() { return true; } - private static OopField constants; + private static MetadataField constants; private static long baseOffset; private static long elementSize; private static CIntField length; + private static long intSize; public ConstantPool getConstants() { return (ConstantPool) constants.getValue(this); } - public long getObjectSize() { - return alignObjectSize(baseOffset + getLength() * elementSize); + public long getSize() { + return Oop.alignObjectSize(baseOffset + getLength() * elementSize); } public ConstantPoolCacheEntry getEntryAt(int i) { @@ -76,41 +78,10 @@ return new ConstantPoolCacheEntry(this, i); } - public static boolean isSecondaryIndex(int i) { return (i < 0); } - public static int decodeSecondaryIndex(int i) { return isSecondaryIndex(i) ? ~i : i; } - public static int encodeSecondaryIndex(int i) { return !isSecondaryIndex(i) ? ~i : i; } - - // secondary entries hold invokedynamic call site bindings - public ConstantPoolCacheEntry getSecondaryEntryAt(int i) { - int rawIndex = i; - if (isSecondaryIndex(i)) { - rawIndex = decodeSecondaryIndex(i); - } - ConstantPoolCacheEntry e = getEntryAt(rawIndex); - if (Assert.ASSERTS_ENABLED) { - Assert.that(e.isSecondaryEntry(), "must be a secondary entry:" + rawIndex); - } - return e; - } - - public ConstantPoolCacheEntry getMainEntryAt(int i) { - int primaryIndex = i; - if (isSecondaryIndex(i)) { - // run through an extra level of indirection: - int rawIndex = decodeSecondaryIndex(i); - primaryIndex = getEntryAt(rawIndex).getMainEntryIndex(); - } - ConstantPoolCacheEntry e = getEntryAt(primaryIndex); - if (Assert.ASSERTS_ENABLED) { - Assert.that(!e.isSecondaryEntry(), "must not be a secondary entry:" + primaryIndex); - } - return e; - } - public int getIntAt(int entry, int fld) { //alignObjectSize ? - long offset = baseOffset + /*alignObjectSize*/entry * elementSize + fld* getHeap().getIntSize(); - return (int) getHandle().getCIntegerAt(offset, getHeap().getIntSize(), true ); + long offset = baseOffset + /*alignObjectSize*/entry * elementSize + fld * intSize; + return (int) getAddress().getCIntegerAt(offset, intSize, true ); } @@ -119,17 +90,15 @@ } public int getLength() { - return (int) length.getValue(this); + return (int) length.getValue(getAddress()); } - public void iterateFields(OopVisitor visitor, boolean doVMFields) { - super.iterateFields(visitor, doVMFields); - if (doVMFields) { - visitor.doOop(constants, true); + public void iterateFields(MetadataVisitor visitor) { + super.iterateFields(visitor); + visitor.doMetadata(constants, true); for (int i = 0; i < getLength(); i++) { ConstantPoolCacheEntry entry = getEntryAt(i); entry.iterateFields(visitor); } } - } }; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolCacheEntry.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolCacheEntry.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolCacheEntry.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ private static long size; private static long baseOffset; private static CIntegerField indices; - private static sun.jvm.hotspot.types.OopField f1; + private static AddressField f1; private static CIntegerField f2; private static CIntegerField flags; @@ -54,11 +54,11 @@ size = type.getSize(); indices = type.getCIntegerField("_indices"); - f1 = type.getOopField ("_f1"); + f1 = type.getAddressField ("_f1"); f2 = type.getCIntegerField("_f2"); flags = type.getCIntegerField("_flags"); - type = db.lookupType("constantPoolCacheOopDesc"); + type = db.lookupType("ConstantPoolCache"); baseOffset = type.getSize(); } @@ -69,43 +69,32 @@ public int getConstantPoolIndex() { if (Assert.ASSERTS_ENABLED) { - Assert.that(!isSecondaryEntry(), "must not be a secondary CP entry"); + Assert.that((getIndices() & 0xFFFF) != 0, "must be main entry"); } return (int) (getIndices() & 0xFFFF); } - public boolean isSecondaryEntry() { - return (getIndices() & 0xFFFF) == 0; + private long getIndices() { + return cp.getAddress().getCIntegerAt(indices.getOffset() + offset, indices.getSize(), indices.isUnsigned()); } - public int getMainEntryIndex() { - if (Assert.ASSERTS_ENABLED) { - Assert.that(isSecondaryEntry(), "must be a secondary CP entry"); - } - return (int) (getIndices() >>> 16); - } - - private long getIndices() { - return cp.getHandle().getCIntegerAt(indices.getOffset() + offset, indices.getSize(), indices.isUnsigned()); - } - - public Oop getF1() { - return cp.getHeap().newOop(cp.getHandle().getOopHandleAt(f1.getOffset() + offset)); + public Metadata getF1() { + return Metadata.instantiateWrapperFor(cp.getAddress().getAddressAt(f1.getOffset() + offset)); } public int getF2() { - return cp.getHandle().getJIntAt(f1.getOffset() + offset); + return cp.getAddress().getJIntAt(f1.getOffset() + offset); } public int getFlags() { - return cp.getHandle().getJIntAt(flags.getOffset() + offset); + return cp.getAddress().getJIntAt(flags.getOffset() + offset); } static NamedFieldIdentifier f1FieldName = new NamedFieldIdentifier("_f1"); static NamedFieldIdentifier f2FieldName = new NamedFieldIdentifier("_f2"); static NamedFieldIdentifier flagsFieldName = new NamedFieldIdentifier("_flags"); - public void iterateFields(OopVisitor visitor) { + public void iterateFields(MetadataVisitor visitor) { visitor.doOop(new OopField(f1FieldName, f1.getOffset() + offset, true), true); visitor.doInt(new IntField(f2FieldName, f2.getOffset() + offset, true), true); visitor.doInt(new IntField(flagsFieldName, flags.getOffset() + offset, true), true); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolCacheKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolCacheKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.oops; - -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -// A ConstantPoolCacheKlass is the klass of a ConstantPoolCache - -public class ConstantPoolCacheKlass extends Klass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("constantPoolCacheKlass"); - headerSize = type.getSize() + Oop.getHeaderSize(); - } - - ConstantPoolCacheKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); - } - - public long getObjectSize() { return alignObjectSize(headerSize); } - - public void printValueOn(PrintStream tty) { - tty.print("ConstantPoolCacheKlass"); - } - - private static long headerSize; -} - - diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ConstantPoolKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.oops; - -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -// A ConstantPoolKlass is the klass of a ConstantPool - -public class ConstantPoolKlass extends Klass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("constantPoolKlass"); - headerSize = type.getSize() + Oop.getHeaderSize(); - } - - ConstantPoolKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); - } - - public long getObjectSize() { return alignObjectSize(headerSize); } - - public void printValueOn(PrintStream tty) { - tty.print("ConstantPoolKlass"); - } - - private static long headerSize; -} - diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/DataLayout.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/DataLayout.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/DataLayout.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -64,7 +64,7 @@ private boolean handlized; public DataLayout(MethodData d, int o) { - data = d.getHandle(); + data = d.getAddress(); offset = o; } @@ -89,15 +89,6 @@ return (int)data.getCIntegerAt(offset + cellOffset(index), MethodData.cellSize, false); } - Oop oopAt(int index) { - OopHandle handle; - if (handlized) { - throw new InternalError("unsupported"); - } - handle = data.getOopHandleAt(offset + cellOffset(index)); - return VM.getVM().getObjectHeap().newOop(handle); - } - public Address addressAt(int index) { OopHandle handle; if (handlized) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/DefaultMetadataVisitor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/DefaultMetadataVisitor.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.oops; + +import sun.jvm.hotspot.debugger.Address; + +/** A DefaultMetadataVisitor implements basic no-op MetadataVisitor + functionality except that the setObj() and getObj() methods are + implemented properly. */ +abstract public class DefaultMetadataVisitor implements MetadataVisitor { + private Metadata obj; + + public void prologue() {} + + // Called after visiting an object + public void epilogue() {} + + public void setObj(Metadata obj) { + this.obj = obj; + } + + public Metadata getObj() { + return obj; + } + + // Callback methods for each field type in an object + abstract public void doMetadata(MetadataField field, boolean isVMField); + public void doOop(OopField field, boolean isVMField) {} + public void doOop(NarrowOopField field, boolean isVMField) {} + public void doByte(ByteField field, boolean isVMField) {} + public void doChar(CharField field, boolean isVMField) {} + public void doBoolean(BooleanField field, boolean isVMField) {} + public void doShort(ShortField field, boolean isVMField) {} + public void doInt(IntField field, boolean isVMField) {} + public void doLong(LongField field, boolean isVMField) {} + public void doFloat(FloatField field, boolean isVMField) {} + public void doDouble(DoubleField field, boolean isVMField) {} + public void doCInt(CIntField field, boolean isVMField) {} +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/DefaultOopVisitor.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/DefaultOopVisitor.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/DefaultOopVisitor.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,6 +45,7 @@ } // Callback methods for each field type in an object + public void doMetadata(MetadataField field, boolean isVMField) {} public void doOop(OopField field, boolean isVMField) {} public void doOop(NarrowOopField field, boolean isVMField) {} public void doByte(ByteField field, boolean isVMField) {} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/DoubleField.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/DoubleField.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/DoubleField.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.oops; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.VMObject; // The class for a double field simply provides access to the value. public class DoubleField extends Field { @@ -41,6 +42,7 @@ } public double getValue(Oop obj) { return obj.getHandle().getJDoubleAt(getOffset()); } + public double getValue(VMObject obj) { return obj.getAddress().getJDoubleAt(getOffset()); } public void setValue(Oop obj, double value) throws MutationException { // Fix this: setJDoubleAt is missing in Address } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ExceptionTableElement.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ExceptionTableElement.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ExceptionTableElement.java Sat Sep 01 13:25:18 2012 -0400 @@ -54,10 +54,10 @@ private static long offsetOfHandlerPC; private static long offsetOfCatchTypeIndex; - private OopHandle handle; + private Address handle; private long offset; - public ExceptionTableElement(OopHandle handle, long offset) { + public ExceptionTableElement(Address handle, long offset) { this.handle = handle; this.offset = offset; } @@ -78,4 +78,3 @@ return (int) handle.getCIntegerAt(offset + offsetOfCatchTypeIndex, 2, true); } } - diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/Field.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/Field.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/Field.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ import java.io.*; import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.utilities.*; // Super class for all fields in an object public class Field { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/FieldVisitor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/FieldVisitor.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.oops; + +// An OopVisitor can be used to inspect all fields within an object. +// Fields include vm fields, java fields, indexable fields. + +public interface FieldVisitor { + // Callback methods for each field type in an object + public void doMetadata(MetadataField field, boolean isVMField); + public void doOop(OopField field, boolean isVMField); + public void doOop(NarrowOopField field, boolean isVMField); + public void doByte(ByteField field, boolean isVMField); + public void doChar(CharField field, boolean isVMField); + public void doBoolean(BooleanField field, boolean isVMField); + public void doShort(ShortField field, boolean isVMField); + public void doInt(IntField field, boolean isVMField); + public void doLong(LongField field, boolean isVMField); + public void doFloat(FloatField field, boolean isVMField); + public void doDouble(DoubleField field, boolean isVMField); + public void doCInt(CIntField field, boolean isVMField); +}; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/FloatField.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/FloatField.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/FloatField.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.oops; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.VMObject; // The class for a float field simply provides access to the value. public class FloatField extends Field { @@ -41,6 +42,7 @@ } public float getValue(Oop obj) { return obj.getHandle().getJFloatAt(getOffset()); } + public float getValue(VMObject obj) { return obj.getAddress().getJFloatAt(getOffset()); } public void setValue(Oop obj, float value) throws MutationException { // Fix this: setJFloatAt is missing in Address } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/GenerateOopMap.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/GenerateOopMap.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/GenerateOopMap.java Sat Sep 01 13:25:18 2012 -0400 @@ -613,7 +613,7 @@ tty.print(" idx " + idx); /* int idx = currentBC.getIndexU2(); - constantPoolOop cp = method().constants(); + ConstantPool* cp = method().constants(); int nameAndTypeIdx = cp.name_and_type_ref_index_at(idx); int signatureIdx = cp.signature_ref_index_at(nameAndTypeIdx); Symbol* signature = cp.symbol_at(signatureIdx); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/Instance.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/Instance.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/Instance.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,7 +53,7 @@ // Returns header size in bytes. public static long getHeaderSize() { - if (VM.getVM().isCompressedOopsEnabled()) { + if (VM.getVM().isCompressedHeadersEnabled()) { return typeSize - VM.getVM().getIntSize(); } else { return typeSize; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/InstanceClassLoaderKlass.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceClassLoaderKlass.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.oops; + +import java.io.*; +import java.util.*; +import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.memory.*; +import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.types.*; +import sun.jvm.hotspot.utilities.*; + +// An InstanceKlass is the VM level representation of a Java class. + +public class InstanceClassLoaderKlass extends InstanceKlass { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + // Just make sure it's there for now + Type type = db.lookupType("instanceClassLoaderKlass"); + } + + public InstanceClassLoaderKlass(Address addr) { + super(addr); + } +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java Sat Sep 01 13:25:18 2012 -0400 @@ -26,6 +26,7 @@ import java.io.*; import java.util.*; +import sun.jvm.hotspot.classfile.ClassLoaderData; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.runtime.*; @@ -53,7 +54,6 @@ private static int FIELD_SLOTS; // ClassState constants - private static int CLASS_STATE_UNPARSABLE_BY_GC; private static int CLASS_STATE_ALLOCATED; private static int CLASS_STATE_LOADED; private static int CLASS_STATE_LINKED; @@ -62,34 +62,34 @@ private static int CLASS_STATE_INITIALIZATION_ERROR; private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("instanceKlass"); - arrayKlasses = new OopField(type.getOopField("_array_klasses"), Oop.getHeaderSize()); - methods = new OopField(type.getOopField("_methods"), Oop.getHeaderSize()); - methodOrdering = new OopField(type.getOopField("_method_ordering"), Oop.getHeaderSize()); - localInterfaces = new OopField(type.getOopField("_local_interfaces"), Oop.getHeaderSize()); - transitiveInterfaces = new OopField(type.getOopField("_transitive_interfaces"), Oop.getHeaderSize()); - fields = new OopField(type.getOopField("_fields"), Oop.getHeaderSize()); - javaFieldsCount = new CIntField(type.getCIntegerField("_java_fields_count"), Oop.getHeaderSize()); - constants = new OopField(type.getOopField("_constants"), Oop.getHeaderSize()); - classLoader = new OopField(type.getOopField("_class_loader"), Oop.getHeaderSize()); - protectionDomain = new OopField(type.getOopField("_protection_domain"), Oop.getHeaderSize()); - signers = new OopField(type.getOopField("_signers"), Oop.getHeaderSize()); + Type type = db.lookupType("InstanceKlass"); + arrayKlasses = new MetadataField(type.getAddressField("_array_klasses"), 0); + methods = type.getAddressField("_methods"); + methodOrdering = type.getAddressField("_method_ordering"); + localInterfaces = type.getAddressField("_local_interfaces"); + transitiveInterfaces = type.getAddressField("_transitive_interfaces"); + fields = type.getAddressField("_fields"); + javaFieldsCount = new CIntField(type.getCIntegerField("_java_fields_count"), 0); + constants = new MetadataField(type.getAddressField("_constants"), 0); + classLoaderData = type.getAddressField("_class_loader_data"); + protectionDomain = new OopField(type.getOopField("_protection_domain"), 0); + signers = new OopField(type.getOopField("_signers"), 0); sourceFileName = type.getAddressField("_source_file_name"); sourceDebugExtension = type.getAddressField("_source_debug_extension"); - innerClasses = new OopField(type.getOopField("_inner_classes"), Oop.getHeaderSize()); - nonstaticFieldSize = new CIntField(type.getCIntegerField("_nonstatic_field_size"), Oop.getHeaderSize()); - staticFieldSize = new CIntField(type.getCIntegerField("_static_field_size"), Oop.getHeaderSize()); - staticOopFieldCount = new CIntField(type.getCIntegerField("_static_oop_field_count"), Oop.getHeaderSize()); - nonstaticOopMapSize = new CIntField(type.getCIntegerField("_nonstatic_oop_map_size"), Oop.getHeaderSize()); - isMarkedDependent = new CIntField(type.getCIntegerField("_is_marked_dependent"), Oop.getHeaderSize()); - initState = new CIntField(type.getCIntegerField("_init_state"), Oop.getHeaderSize()); - vtableLen = new CIntField(type.getCIntegerField("_vtable_len"), Oop.getHeaderSize()); - itableLen = new CIntField(type.getCIntegerField("_itable_len"), Oop.getHeaderSize()); + innerClasses = type.getAddressField("_inner_classes"); + nonstaticFieldSize = new CIntField(type.getCIntegerField("_nonstatic_field_size"), 0); + staticFieldSize = new CIntField(type.getCIntegerField("_static_field_size"), 0); + staticOopFieldCount = new CIntField(type.getCIntegerField("_static_oop_field_count"), 0); + nonstaticOopMapSize = new CIntField(type.getCIntegerField("_nonstatic_oop_map_size"), 0); + isMarkedDependent = new CIntField(type.getCIntegerField("_is_marked_dependent"), 0); + initState = new CIntField(type.getCIntegerField("_init_state"), 0); + vtableLen = new CIntField(type.getCIntegerField("_vtable_len"), 0); + itableLen = new CIntField(type.getCIntegerField("_itable_len"), 0); breakpoints = type.getAddressField("_breakpoints"); genericSignature = type.getAddressField("_generic_signature"); - majorVersion = new CIntField(type.getCIntegerField("_major_version"), Oop.getHeaderSize()); - minorVersion = new CIntField(type.getCIntegerField("_minor_version"), Oop.getHeaderSize()); - headerSize = alignObjectOffset(Oop.getHeaderSize() + type.getSize()); + majorVersion = new CIntField(type.getCIntegerField("_major_version"), 0); + minorVersion = new CIntField(type.getCIntegerField("_minor_version"), 0); + headerSize = Oop.alignObjectOffset(type.getSize()); // read field offset constants ACCESS_FLAGS_OFFSET = db.lookupIntConstant("FieldInfo::access_flags_offset").intValue(); @@ -100,18 +100,17 @@ HIGH_OFFSET = db.lookupIntConstant("FieldInfo::high_offset").intValue(); FIELD_SLOTS = db.lookupIntConstant("FieldInfo::field_slots").intValue(); // read ClassState constants - CLASS_STATE_UNPARSABLE_BY_GC = db.lookupIntConstant("instanceKlass::unparsable_by_gc").intValue(); - CLASS_STATE_ALLOCATED = db.lookupIntConstant("instanceKlass::allocated").intValue(); - CLASS_STATE_LOADED = db.lookupIntConstant("instanceKlass::loaded").intValue(); - CLASS_STATE_LINKED = db.lookupIntConstant("instanceKlass::linked").intValue(); - CLASS_STATE_BEING_INITIALIZED = db.lookupIntConstant("instanceKlass::being_initialized").intValue(); - CLASS_STATE_FULLY_INITIALIZED = db.lookupIntConstant("instanceKlass::fully_initialized").intValue(); - CLASS_STATE_INITIALIZATION_ERROR = db.lookupIntConstant("instanceKlass::initialization_error").intValue(); + CLASS_STATE_ALLOCATED = db.lookupIntConstant("InstanceKlass::allocated").intValue(); + CLASS_STATE_LOADED = db.lookupIntConstant("InstanceKlass::loaded").intValue(); + CLASS_STATE_LINKED = db.lookupIntConstant("InstanceKlass::linked").intValue(); + CLASS_STATE_BEING_INITIALIZED = db.lookupIntConstant("InstanceKlass::being_initialized").intValue(); + CLASS_STATE_FULLY_INITIALIZED = db.lookupIntConstant("InstanceKlass::fully_initialized").intValue(); + CLASS_STATE_INITIALIZATION_ERROR = db.lookupIntConstant("InstanceKlass::initialization_error").intValue(); } - InstanceKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); + public InstanceKlass(Address addr) { + super(addr); if (getJavaFieldsCount() != getAllFieldsCount()) { // Exercise the injected field logic for (int i = getJavaFieldsCount(); i < getAllFieldsCount(); i++) { @@ -121,20 +120,20 @@ } } - private static OopField arrayKlasses; - private static OopField methods; - private static OopField methodOrdering; - private static OopField localInterfaces; - private static OopField transitiveInterfaces; - private static OopField fields; + private static MetadataField arrayKlasses; + private static AddressField methods; + private static AddressField methodOrdering; + private static AddressField localInterfaces; + private static AddressField transitiveInterfaces; + private static AddressField fields; private static CIntField javaFieldsCount; - private static OopField constants; - private static OopField classLoader; + private static MetadataField constants; + private static AddressField classLoaderData; private static OopField protectionDomain; private static OopField signers; private static AddressField sourceFileName; private static AddressField sourceDebugExtension; - private static OopField innerClasses; + private static AddressField innerClasses; private static CIntField nonstaticFieldSize; private static CIntField staticFieldSize; private static CIntField staticOopFieldCount; @@ -150,7 +149,6 @@ // type safe enum for ClassState from instanceKlass.hpp public static class ClassState { - public static final ClassState UNPARSABLE_BY_GC = new ClassState("unparsable_by_gc"); public static final ClassState ALLOCATED = new ClassState("allocated"); public static final ClassState LOADED = new ClassState("loaded"); public static final ClassState LINKED = new ClassState("linked"); @@ -172,9 +170,7 @@ public int getInitStateAsInt() { return (int) initState.getValue(this); } public ClassState getInitState() { int state = getInitStateAsInt(); - if (state == CLASS_STATE_UNPARSABLE_BY_GC) { - return ClassState.UNPARSABLE_BY_GC; - } else if (state == CLASS_STATE_ALLOCATED) { + if (state == CLASS_STATE_ALLOCATED) { return ClassState.ALLOCATED; } else if (state == CLASS_STATE_LOADED) { return ClassState.LOADED; @@ -242,19 +238,24 @@ return getSizeHelper() * VM.getVM().getAddressSize(); } + public long getSize() { + return Oop.alignObjectSize(getHeaderSize() + Oop.alignObjectOffset(getVtableLen()) + + Oop.alignObjectOffset(getItableLen()) + Oop.alignObjectOffset(getNonstaticOopMapSize())); + } + public static long getHeaderSize() { return headerSize; } public short getFieldAccessFlags(int index) { - return getFields().getShortAt(index * FIELD_SLOTS + ACCESS_FLAGS_OFFSET); + return getFields().at(index * FIELD_SLOTS + ACCESS_FLAGS_OFFSET); } public short getFieldNameIndex(int index) { if (index >= getJavaFieldsCount()) throw new IndexOutOfBoundsException("not a Java field;"); - return getFields().getShortAt(index * FIELD_SLOTS + NAME_INDEX_OFFSET); + return getFields().at(index * FIELD_SLOTS + NAME_INDEX_OFFSET); } public Symbol getFieldName(int index) { - int nameIndex = getFields().getShortAt(index * FIELD_SLOTS + NAME_INDEX_OFFSET); + int nameIndex = getFields().at(index * FIELD_SLOTS + NAME_INDEX_OFFSET); if (index < getJavaFieldsCount()) { return getConstants().getSymbolAt(nameIndex); } else { @@ -264,11 +265,11 @@ public short getFieldSignatureIndex(int index) { if (index >= getJavaFieldsCount()) throw new IndexOutOfBoundsException("not a Java field;"); - return getFields().getShortAt(index * FIELD_SLOTS + SIGNATURE_INDEX_OFFSET); + return getFields().at(index * FIELD_SLOTS + SIGNATURE_INDEX_OFFSET); } public Symbol getFieldSignature(int index) { - int signatureIndex = getFields().getShortAt(index * FIELD_SLOTS + SIGNATURE_INDEX_OFFSET); + int signatureIndex = getFields().at(index * FIELD_SLOTS + SIGNATURE_INDEX_OFFSET); if (index < getJavaFieldsCount()) { return getConstants().getSymbolAt(signatureIndex); } else { @@ -277,7 +278,7 @@ } public short getFieldGenericSignatureIndex(int index) { - int len = (int)getFields().getLength(); + int len = getFields().length(); int allFieldsCount = getAllFieldsCount(); int generic_signature_slot = allFieldsCount * FIELD_SLOTS; for (int i = 0; i < allFieldsCount; i++) { @@ -285,7 +286,7 @@ AccessFlags access = new AccessFlags(flags); if (i == index) { if (access.fieldHasGenericSignature()) { - return getFields().getShortAt(generic_signature_slot); + return getFields().at(generic_signature_slot); } else { return 0; } @@ -308,25 +309,23 @@ public short getFieldInitialValueIndex(int index) { if (index >= getJavaFieldsCount()) throw new IndexOutOfBoundsException("not a Java field;"); - return getFields().getShortAt(index * FIELD_SLOTS + INITVAL_INDEX_OFFSET); + return getFields().at(index * FIELD_SLOTS + INITVAL_INDEX_OFFSET); } public int getFieldOffset(int index) { - TypeArray fields = getFields(); - return VM.getVM().buildIntFromShorts(fields.getShortAt(index * FIELD_SLOTS + LOW_OFFSET), - fields.getShortAt(index * FIELD_SLOTS + HIGH_OFFSET)); + U2Array fields = getFields(); + return VM.getVM().buildIntFromShorts(fields.at(index * FIELD_SLOTS + LOW_OFFSET), + fields.at(index * FIELD_SLOTS + HIGH_OFFSET)); } // Accessors for declared fields public Klass getArrayKlasses() { return (Klass) arrayKlasses.getValue(this); } - public ObjArray getMethods() { return (ObjArray) methods.getValue(this); } - public TypeArray getMethodOrdering() { return (TypeArray) methodOrdering.getValue(this); } - public ObjArray getLocalInterfaces() { return (ObjArray) localInterfaces.getValue(this); } - public ObjArray getTransitiveInterfaces() { return (ObjArray) transitiveInterfaces.getValue(this); } - public TypeArray getFields() { return (TypeArray) fields.getValue(this); } + public MethodArray getMethods() { return new MethodArray(methods.getValue(getAddress())); } + public KlassArray getLocalInterfaces() { return new KlassArray(localInterfaces.getValue(getAddress())); } + public KlassArray getTransitiveInterfaces() { return new KlassArray(transitiveInterfaces.getValue(getAddress())); } public int getJavaFieldsCount() { return (int) javaFieldsCount.getValue(this); } public int getAllFieldsCount() { - int len = (int)getFields().getLength(); + int len = getFields().length(); int allFieldsCount = 0; for (; allFieldsCount*FIELD_SLOTS < len; allFieldsCount++) { short flags = getFieldAccessFlags(allFieldsCount); @@ -338,12 +337,12 @@ return allFieldsCount; } public ConstantPool getConstants() { return (ConstantPool) constants.getValue(this); } - public Oop getClassLoader() { return classLoader.getValue(this); } + public ClassLoaderData getClassLoaderData() { return ClassLoaderData.instantiateWrapperFor(classLoaderData.getValue(getAddress())); } + public Oop getClassLoader() { return getClassLoaderData().getClassLoader(); } public Oop getProtectionDomain() { return protectionDomain.getValue(this); } public ObjArray getSigners() { return (ObjArray) signers.getValue(this); } public Symbol getSourceFileName() { return getSymbol(sourceFileName); } - public String getSourceDebugExtension(){ return CStringUtilities.getString(sourceDebugExtension.getValue(getHandle())); } - public TypeArray getInnerClasses() { return (TypeArray) innerClasses.getValue(this); } + public String getSourceDebugExtension(){ return CStringUtilities.getString(sourceDebugExtension.getValue(getAddress())); } public long getNonstaticFieldSize() { return nonstaticFieldSize.getValue(this); } public long getStaticOopFieldCount() { return staticOopFieldCount.getValue(this); } public long getNonstaticOopMapSize() { return nonstaticOopMapSize.getValue(this); } @@ -383,8 +382,8 @@ public long computeModifierFlags() { long access = getAccessFlags(); // But check if it happens to be member class. - TypeArray innerClassList = getInnerClasses(); - int length = ( innerClassList == null)? 0 : (int) innerClassList.getLength(); + U2Array innerClassList = getInnerClasses(); + int length = (innerClassList == null)? 0 : (int) innerClassList.length(); if (length > 0) { if (Assert.ASSERTS_ENABLED) { Assert.that(length % InnerClassAttributeOffset.innerClassNextOffset == 0 || @@ -395,7 +394,7 @@ if (i == length - EnclosingMethodAttributeOffset.enclosing_method_attribute_size) { break; } - int ioff = innerClassList.getShortAt(i + + int ioff = innerClassList.at(i + InnerClassAttributeOffset.innerClassInnerClassInfoOffset); // 'ioff' can be zero. // refer to JVM spec. section 4.7.5. @@ -404,9 +403,9 @@ // since we are looking for the flags for our self. ConstantPool.CPSlot classInfo = getConstants().getSlotAt(ioff); Symbol name = null; - if (classInfo.isOop()) { - name = ((Klass) classInfo.getOop()).getName(); - } else if (classInfo.isMetaData()) { + if (classInfo.isResolved()) { + name = classInfo.getKlass().getName(); + } else if (classInfo.isUnresolved()) { name = classInfo.getSymbol(); } else { throw new RuntimeException("should not reach here"); @@ -414,7 +413,7 @@ if (name.equals(getName())) { // This is really a member class - access = innerClassList.getShortAt(i + + access = innerClassList.at(i + InnerClassAttributeOffset.innerClassAccessFlagsOffset); break; } @@ -440,8 +439,8 @@ } private boolean isInInnerClasses(Symbol sym, boolean includeLocals) { - TypeArray innerClassList = getInnerClasses(); - int length = ( innerClassList == null)? 0 : (int) innerClassList.getLength(); + U2Array innerClassList = getInnerClasses(); + int length = ( innerClassList == null)? 0 : (int) innerClassList.length(); if (length > 0) { if (Assert.ASSERTS_ENABLED) { Assert.that(length % InnerClassAttributeOffset.innerClassNextOffset == 0 || @@ -452,27 +451,19 @@ if (i == length - EnclosingMethodAttributeOffset.enclosing_method_attribute_size) { break; } - int ioff = innerClassList.getShortAt(i + + int ioff = innerClassList.at(i + InnerClassAttributeOffset.innerClassInnerClassInfoOffset); // 'ioff' can be zero. // refer to JVM spec. section 4.7.5. if (ioff != 0) { ConstantPool.CPSlot iclassInfo = getConstants().getSlotAt(ioff); - Symbol innerName = null; - if (iclassInfo.isOop()) { - innerName = ((Klass) iclassInfo.getOop()).getName(); - } else if (iclassInfo.isMetaData()) { - innerName = iclassInfo.getSymbol(); - } else { - throw new RuntimeException("should not reach here"); - } - + Symbol innerName = getConstants().getKlassNameAt(ioff); Symbol myname = getName(); - int ooff = innerClassList.getShortAt(i + + int ooff = innerClassList.at(i + InnerClassAttributeOffset.innerClassOuterClassInfoOffset); // for anonymous classes inner_name_index of InnerClasses // attribute is zero. - int innerNameIndex = innerClassList.getShortAt(i + + int innerNameIndex = innerClassList.at(i + InnerClassAttributeOffset.innerClassInnerNameOffset); // if this is not a member (anonymous, local etc.), 'ooff' will be zero // refer to JVM spec. section 4.7.5. @@ -488,9 +479,9 @@ } else { ConstantPool.CPSlot oclassInfo = getConstants().getSlotAt(ooff); Symbol outerName = null; - if (oclassInfo.isOop()) { - outerName = ((Klass) oclassInfo.getOop()).getName(); - } else if (oclassInfo.isMetaData()) { + if (oclassInfo.isResolved()) { + outerName = oclassInfo.getKlass().getName(); + } else if (oclassInfo.isUnresolved()) { outerName = oclassInfo.getSymbol(); } else { throw new RuntimeException("should not reach here"); @@ -513,10 +504,10 @@ if (Assert.ASSERTS_ENABLED) { Assert.that(k.isInterface(), "should not reach here"); } - ObjArray interfaces = getTransitiveInterfaces(); - final int len = (int) interfaces.getLength(); + KlassArray interfaces = getTransitiveInterfaces(); + final int len = interfaces.length(); for (int i = 0; i < len; i++) { - if (interfaces.getObjAt(i).equals(k)) return true; + if (interfaces.getAt(i).equals(k)) return true; } return false; } @@ -533,20 +524,14 @@ tty.print("InstanceKlass for " + getName().asString()); } - public void iterateFields(OopVisitor visitor, boolean doVMFields) { - super.iterateFields(visitor, doVMFields); - if (doVMFields) { - visitor.doOop(arrayKlasses, true); - visitor.doOop(methods, true); - visitor.doOop(methodOrdering, true); - visitor.doOop(localInterfaces, true); - visitor.doOop(transitiveInterfaces, true); - visitor.doOop(fields, true); - visitor.doOop(constants, true); - visitor.doOop(classLoader, true); + public void iterateFields(MetadataVisitor visitor) { + super.iterateFields(visitor); + visitor.doMetadata(arrayKlasses, true); + // visitor.doOop(methods, true); + // visitor.doOop(localInterfaces, true); + // visitor.doOop(transitiveInterfaces, true); visitor.doOop(protectionDomain, true); visitor.doOop(signers, true); - visitor.doOop(innerClasses, true); visitor.doCInt(nonstaticFieldSize, true); visitor.doCInt(staticFieldSize, true); visitor.doCInt(staticOopFieldCount, true); @@ -556,7 +541,6 @@ visitor.doCInt(vtableLen, true); visitor.doCInt(itableLen, true); } - } /* * Visit the static fields of this InstanceKlass with the obj of @@ -628,10 +612,10 @@ /** Find field in direct superinterfaces. */ public Field findInterfaceField(Symbol name, Symbol sig) { - ObjArray interfaces = getLocalInterfaces(); - int n = (int) interfaces.getLength(); + KlassArray interfaces = getLocalInterfaces(); + int n = interfaces.length(); for (int i = 0; i < n; i++) { - InstanceKlass intf1 = (InstanceKlass) interfaces.getObjAt(i); + InstanceKlass intf1 = (InstanceKlass) interfaces.getAt(i); if (Assert.ASSERTS_ENABLED) { Assert.that(intf1.isInterface(), "just checking type"); } @@ -727,10 +711,10 @@ // transitiveInterfaces contains all interfaces implemented // by this class and its superclass chain with no duplicates. - ObjArray interfaces = getTransitiveInterfaces(); - int n = (int) interfaces.getLength(); + KlassArray interfaces = getTransitiveInterfaces(); + int n = interfaces.length(); for (int i = 0; i < n; i++) { - InstanceKlass intf1 = (InstanceKlass) interfaces.getObjAt(i); + InstanceKlass intf1 = (InstanceKlass) interfaces.getAt(i); if (Assert.ASSERTS_ENABLED) { Assert.that(intf1.isInterface(), "just checking type"); } @@ -759,20 +743,20 @@ // Contains a Method for each method declared in this class/interface // not including inherited methods. - ObjArray methods = getMethods(); - int length = (int)methods.getLength(); + MethodArray methods = getMethods(); + int length = methods.length(); Object[] tmp = new Object[length]; - TypeArray methodOrdering = getMethodOrdering(); - if (methodOrdering.getLength() != length) { + IntArray methodOrdering = getMethodOrdering(); + if (methodOrdering.length() != length) { // no ordering info present for (int index = 0; index < length; index++) { - tmp[index] = methods.getObjAt(index); + tmp[index] = methods.at(index); } } else { for (int index = 0; index < length; index++) { - int originalIndex = getMethodOrdering().getIntAt(index); - tmp[originalIndex] = methods.getObjAt(index); + int originalIndex = methodOrdering.at(index); + tmp[originalIndex] = methods.at(index); } } @@ -786,25 +770,17 @@ // Contains an InstanceKlass for each interface in this classes // 'implements' clause. - ObjArray interfaces = getLocalInterfaces(); - int length = (int) interfaces.getLength(); + KlassArray interfaces = getLocalInterfaces(); + int length = interfaces.length(); List directImplementedInterfaces = new ArrayList(length); for (int index = 0; index < length; index ++) { - directImplementedInterfaces.add(interfaces.getObjAt(index)); + directImplementedInterfaces.add(interfaces.getAt(index)); } return directImplementedInterfaces; } - - public long getObjectSize() { - long bodySize = alignObjectOffset(getVtableLen() * getHeap().getOopSize()) - + alignObjectOffset(getItableLen() * getHeap().getOopSize()) - + (getNonstaticOopMapSize()) * getHeap().getOopSize(); - return alignObjectSize(headerSize + bodySize); - } - public Klass arrayKlassImpl(boolean orNull, int n) { // FIXME: in reflective system this would need to change to // actually allocate @@ -841,12 +817,28 @@ return findMethod(getMethods(), name, sig); } - /** Breakpoint support (see methods on methodOop for details) */ + /** Breakpoint support (see methods on Method* for details) */ public BreakpointInfo getBreakpoints() { - Address addr = getHandle().getAddressAt(Oop.getHeaderSize() + breakpoints.getOffset()); + Address addr = getAddress().getAddressAt(breakpoints.getOffset()); return (BreakpointInfo) VMObjectFactory.newObject(BreakpointInfo.class, addr); } + public IntArray getMethodOrdering() { + Address addr = getAddress().getAddressAt(methodOrdering.getOffset()); + return (IntArray) VMObjectFactory.newObject(IntArray.class, addr); + } + + public U2Array getFields() { + Address addr = getAddress().getAddressAt(fields.getOffset()); + return (U2Array) VMObjectFactory.newObject(U2Array.class, addr); + } + + public U2Array getInnerClasses() { + Address addr = getAddress().getAddressAt(innerClasses.getOffset()); + return (U2Array) VMObjectFactory.newObject(U2Array.class, addr); + } + + //---------------------------------------------------------------------- // Internals only below this point // @@ -928,14 +920,14 @@ throw new RuntimeException("Illegal field type at index " + index); } - private static Method findMethod(ObjArray methods, Symbol name, Symbol signature) { - int len = (int) methods.getLength(); + private static Method findMethod(MethodArray methods, Symbol name, Symbol signature) { + int len = methods.length(); // methods are sorted, so do binary search int l = 0; int h = len - 1; while (l <= h) { int mid = (l + h) >> 1; - Method m = (Method) methods.getObjAt(mid); + Method m = methods.at(mid); int res = m.getName().fastCompare(name); if (res == 0) { // found matching name; do linear search to find matching signature @@ -944,13 +936,13 @@ // search downwards through overloaded methods int i; for (i = mid - 1; i >= l; i--) { - Method m1 = (Method) methods.getObjAt(i); + Method m1 = methods.at(i); if (!m1.getName().equals(name)) break; if (m1.getSignature().equals(signature)) return m1; } // search upwards for (i = mid + 1; i <= h; i++) { - Method m1 = (Method) methods.getObjAt(i); + Method m1 = methods.at(i); if (!m1.getName().equals(name)) break; if (m1.getSignature().equals(signature)) return m1; } @@ -977,10 +969,10 @@ return null; } - private static int linearSearch(ObjArray methods, Symbol name, Symbol signature) { - int len = (int) methods.getLength(); + private static int linearSearch(MethodArray methods, Symbol name, Symbol signature) { + int len = (int) methods.length(); for (int index = 0; index < len; index++) { - Method m = (Method) methods.getObjAt(index); + Method m = methods.at(index); if (m.getSignature().equals(signature) && m.getName().equals(name)) { return index; } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlassKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlassKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.oops; - -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -// An InstanceKlassKlass is the klass of an InstanceKlass. -// There only exist one instance Universe::instanceKlassKlassObj() - -public class InstanceKlassKlass extends KlassKlass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("instanceKlassKlass"); - headerSize = type.getSize() + Oop.getHeaderSize(); - } - - InstanceKlassKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); - } - - private static long headerSize; - - public long getObjectSize() { return alignObjectSize(headerSize); } - - public void printValueOn(PrintStream tty) { - tty.print("InstanceKlassKlass"); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/InstanceMirrorKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceMirrorKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceMirrorKlass.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,8 +48,8 @@ Type type = db.lookupType("instanceMirrorKlass"); } - InstanceMirrorKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); + public InstanceMirrorKlass(Address addr) { + super(addr); } public long getObjectSize(Oop o) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/InstanceRefKlass.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceRefKlass.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.oops; + +import java.io.*; +import java.util.*; +import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.memory.*; +import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.types.*; +import sun.jvm.hotspot.utilities.*; + +// An InstanceKlass is the VM level representation of a Java class. + +public class InstanceRefKlass extends InstanceKlass { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + // Just make sure it's there for now + Type type = db.lookupType("instanceRefKlass"); + } + + public InstanceRefKlass(Address addr) { + super(addr); + } +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/IntField.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/IntField.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/IntField.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.oops; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.VMObject; // The class for an int field simply provides access to the value. public class IntField extends Field { @@ -46,6 +47,9 @@ } return obj.getHandle().getJIntAt(getOffset()); } + public int getValue(VMObject obj) { + return obj.getAddress().getJIntAt(getOffset()); + } public void setValue(Oop obj, int value) throws MutationException { // Fix this: setJIntAt is missing in Address } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/Klass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/Klass.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/Klass.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; -public class Klass extends Oop implements ClassConstants { +public class Klass extends Metadata implements ClassConstants { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -50,14 +50,14 @@ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("Klass"); - javaMirror = new OopField(type.getOopField("_java_mirror"), Oop.getHeaderSize()); - superField = new OopField(type.getOopField("_super"), Oop.getHeaderSize()); - layoutHelper = new IntField(type.getJIntField("_layout_helper"), Oop.getHeaderSize()); + javaMirror = new OopField(type.getOopField("_java_mirror"), 0); + superField = new MetadataField(type.getAddressField("_super"), 0); + layoutHelper = new IntField(type.getJIntField("_layout_helper"), 0); name = type.getAddressField("_name"); - accessFlags = new CIntField(type.getCIntegerField("_access_flags"), Oop.getHeaderSize()); - subklass = new OopField(type.getOopField("_subklass"), Oop.getHeaderSize()); - nextSibling = new OopField(type.getOopField("_next_sibling"), Oop.getHeaderSize()); - allocCount = new CIntField(type.getCIntegerField("_alloc_count"), Oop.getHeaderSize()); + accessFlags = new CIntField(type.getCIntegerField("_access_flags"), 0); + subklass = new MetadataField(type.getAddressField("_subklass"), 0); + nextSibling = new MetadataField(type.getAddressField("_next_sibling"), 0); + allocCount = new CIntField(type.getCIntegerField("_alloc_count"), 0); LH_INSTANCE_SLOW_PATH_BIT = db.lookupIntConstant("Klass::_lh_instance_slow_path_bit").intValue(); LH_LOG2_ELEMENT_SIZE_SHIFT = db.lookupIntConstant("Klass::_lh_log2_element_size_shift").intValue(); @@ -68,8 +68,8 @@ LH_ARRAY_TAG_OBJ_VALUE = db.lookupIntConstant("Klass::_lh_array_tag_obj_value").intValue(); } - Klass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); + public Klass(Address addr) { + super(addr); } // jvmdi support - see also class_status in VM code @@ -81,20 +81,20 @@ // Fields private static OopField javaMirror; - private static OopField superField; + private static MetadataField superField; private static IntField layoutHelper; private static AddressField name; private static CIntField accessFlags; - private static OopField subklass; - private static OopField nextSibling; + private static MetadataField subklass; + private static MetadataField nextSibling; private static CIntField allocCount; private Address getValue(AddressField field) { - return getHandle().getAddressAt(field.getOffset() + Oop.getHeaderSize()); + return addr.getAddressAt(field.getOffset()); } protected Symbol getSymbol(AddressField field) { - return Symbol.create(getHandle().getAddressAt(field.getOffset() + Oop.getHeaderSize())); + return Symbol.create(addr.getAddressAt(field.getOffset())); } // Accessors for declared fields @@ -164,19 +164,16 @@ tty.print("Klass"); } - public void iterateFields(OopVisitor visitor, boolean doVMFields) { - super.iterateFields(visitor, doVMFields); - if (doVMFields) { + public void iterateFields(MetadataVisitor visitor) { visitor.doOop(javaMirror, true); - visitor.doOop(superField, true); + visitor.doMetadata(superField, true); visitor.doInt(layoutHelper, true); // visitor.doOop(name, true); visitor.doCInt(accessFlags, true); - visitor.doOop(subklass, true); - visitor.doOop(nextSibling, true); + visitor.doMetadata(subklass, true); + visitor.doMetadata(nextSibling, true); visitor.doCInt(allocCount, true); } - } public long getObjectSize() { throw new RuntimeException("should not reach here"); @@ -191,11 +188,11 @@ public Klass arrayKlassOrNull() { return arrayKlassImpl(true); } public Klass arrayKlassImpl(boolean orNull, int rank) { - throw new RuntimeException("array_klass should be dispatched to instanceKlass, objArrayKlass or typeArrayKlass"); + throw new RuntimeException("array_klass should be dispatched to InstanceKlass, objArrayKlass or typeArrayKlass"); } public Klass arrayKlassImpl(boolean orNull) { - throw new RuntimeException("array_klass should be dispatched to instanceKlass, objArrayKlass or typeArrayKlass"); + throw new RuntimeException("array_klass should be dispatched to InstanceKlass, objArrayKlass or typeArrayKlass"); } // This returns the name in the form java/lang/String which isn't really a signature diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/KlassKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/KlassKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.oops; - -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -// A KlassKlass serves as the fix point of the klass chain. -// The klass of KlassKlass is itself. - -public class KlassKlass extends Klass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("klassKlass"); - headerSize = type.getSize() + Oop.getHeaderSize(); - } - - KlassKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); - } - - private static long headerSize; - - public long getObjectSize() { return alignObjectSize(headerSize); } - - public void printValueOn(PrintStream tty) { - tty.print("KlassKlass"); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/LocalVariableTableElement.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/LocalVariableTableElement.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/LocalVariableTableElement.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,10 +58,10 @@ private static long offsetOfSignatureCPIndex; private static long offsetOfSlot; - private OopHandle handle; + private Address handle; private long offset; - public LocalVariableTableElement(OopHandle handle, long offset) { + public LocalVariableTableElement(Address handle, long offset) { this.handle = handle; this.offset = offset; } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/LongField.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/LongField.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/LongField.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.oops; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.VMObject; // The class for a long field simply provides access to the value. public class LongField extends Field { @@ -41,6 +42,7 @@ } public long getValue(Oop obj) { return obj.getHandle().getJLongAt(getOffset()); } + public long getValue(VMObject obj) { return obj.getAddress().getJLongAt(getOffset()); } public void setValue(Oop obj, long value) { // Fix this: setJLongAt is missing in Address } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/Metadata.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/Metadata.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.oops; + +import java.io.*; +import java.util.*; +import sun.jvm.hotspot.utilities.*; +import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.types.*; + +abstract public class Metadata extends VMObject { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + public Metadata(Address addr) { + super(addr); + } + + private static VirtualBaseConstructor metadataConstructor; + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + metadataConstructor = new VirtualBaseConstructor(db, db.lookupType("Metadata"), null, null); + // Define an explicit mapping since the C++ and Java type names don't match. + metadataConstructor.addMapping("Metadata", Metadata.class); + metadataConstructor.addMapping("Klass", Klass.class); + metadataConstructor.addMapping("InstanceKlass", InstanceKlass.class); + metadataConstructor.addMapping("instanceMirrorKlass", InstanceMirrorKlass.class); + metadataConstructor.addMapping("instanceRefKlass", InstanceRefKlass.class); + metadataConstructor.addMapping("instanceClassLoaderKlass", InstanceClassLoaderKlass.class); + metadataConstructor.addMapping("typeArrayKlass", TypeArrayKlass.class); + metadataConstructor.addMapping("objArrayKlass", ObjArrayKlass.class); + metadataConstructor.addMapping("Method", Method.class); + metadataConstructor.addMapping("MethodData", MethodData.class); + metadataConstructor.addMapping("ConstMethod", ConstMethod.class); + metadataConstructor.addMapping("ConstantPool", ConstantPool.class); + metadataConstructor.addMapping("ConstantPoolCache", ConstantPoolCache.class); + } + + public static Metadata instantiateWrapperFor(Address addr) { + return metadataConstructor.instantiateWrapperFor(addr); + } + + public void iterate(MetadataVisitor visitor) { + visitor.setObj(this); + visitor.prologue(); + iterateFields(visitor); + visitor.epilogue(); + } + + void iterateFields(MetadataVisitor visitor) { + } + + abstract public void printValueOn(PrintStream tty); +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/MetadataField.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/MetadataField.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.oops; + +import sun.jvm.hotspot.runtime.VMObject; +import sun.jvm.hotspot.debugger.*; + +// The class for an C int field simply provides access to the value. +public class MetadataField extends Field { + + public MetadataField(sun.jvm.hotspot.types.AddressField vmField, long startOffset) { + super(new NamedFieldIdentifier(vmField.getName()), vmField.getOffset() + startOffset, true); + } + + public Metadata getValue(Oop obj) { + return getValue(obj.getHandle()); + } + public Metadata getValue(VMObject obj) { + return getValue(obj.getAddress()); + } + public Metadata getValue(Address addr) { + return Metadata.instantiateWrapperFor(addr.getAddressAt(getOffset())); + } + public void setValue(Oop obj, long value) throws MutationException { + // Fix this: set* missing in Address + } +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/MetadataVisitor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/MetadataVisitor.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.oops; + +// A MetadataVisitor can be used to inspect all fields within an object. +// Fields include vm fields, java fields, indexable fields. + +public interface MetadataVisitor extends FieldVisitor { + // Called before visiting an object + public void prologue(); + + // Called after visiting an object + public void epilogue(); + + public void setObj(Metadata obj); + + // Returns the object being visited + public Metadata getObj(); +}; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/Method.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/Method.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/Method.java Sat Sep 01 13:25:18 2012 -0400 @@ -36,7 +36,7 @@ // A Method represents a Java method -public class Method extends Oop { +public class Method extends Metadata { static { VM.registerVMInitializedObserver(new Observer() { public void update(Observable o, Object data) { @@ -46,9 +46,9 @@ } private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("methodOopDesc"); - constMethod = new OopField(type.getOopField("_constMethod"), 0); - methodData = new OopField(type.getOopField("_method_data"), 0); + Type type = db.lookupType("Method"); + constMethod = type.getAddressField("_constMethod"); + methodData = type.getAddressField("_method_data"); methodSize = new CIntField(type.getCIntegerField("_method_size"), 0); maxStack = new CIntField(type.getCIntegerField("_max_stack"), 0); maxLocals = new CIntField(type.getCIntegerField("_max_locals"), 0); @@ -74,15 +74,15 @@ classInitializerName = null; } - Method(OopHandle handle, ObjectHeap heap) { - super(handle, heap); + public Method(Address addr) { + super(addr); } public boolean isMethod() { return true; } // Fields - private static OopField constMethod; - private static OopField methodData; + private static AddressField constMethod; + private static AddressField methodData; private static CIntField methodSize; private static CIntField maxStack; private static CIntField maxLocals; @@ -122,11 +122,17 @@ */ // Accessors for declared fields - public ConstMethod getConstMethod() { return (ConstMethod) constMethod.getValue(this); } + public ConstMethod getConstMethod() { + Address addr = constMethod.getValue(getAddress()); + return (ConstMethod) VMObjectFactory.newObject(ConstMethod.class, addr); + } public ConstantPool getConstants() { return getConstMethod().getConstants(); } - public MethodData getMethodData() { return (MethodData) methodData.getValue(this); } + public MethodData getMethodData() { + Address addr = methodData.getValue(getAddress()); + return (MethodData) VMObjectFactory.newObject(MethodData.class, addr); + } /** WARNING: this is in words, not useful in this system; use getObjectSize() instead */ public long getMethodSize() { return methodSize.getValue(this); } public long getMaxStack() { return maxStack.getValue(this); } @@ -153,7 +159,7 @@ // get associated compiled native method, if available, else return null. public NMethod getNativeMethod() { - Address addr = code.getValue(getHandle()); + Address addr = code.getValue(getAddress()); return (NMethod) VMObjectFactory.newObject(NMethod.class, addr); } @@ -268,25 +274,21 @@ return entry; } - public long getObjectSize() { - return getMethodSize() * getHeap().getOopSize(); + public long getSize() { + return getMethodSize(); } public void printValueOn(PrintStream tty) { - tty.print("Method " + getName().asString() + getSignature().asString() + "@" + getHandle()); + tty.print("Method " + getName().asString() + getSignature().asString() + "@" + getAddress()); } - public void iterateFields(OopVisitor visitor, boolean doVMFields) { - super.iterateFields(visitor, doVMFields); - if (doVMFields) { - visitor.doOop(constMethod, true); + public void iterateFields(MetadataVisitor visitor) { visitor.doCInt(methodSize, true); visitor.doCInt(maxStack, true); visitor.doCInt(maxLocals, true); visitor.doCInt(sizeOfParameters, true); visitor.doCInt(accessFlags, true); } - } public boolean hasLineNumberTable() { return getConstMethod().hasLineNumberTable(); @@ -357,10 +359,10 @@ return buf.toString().replace('/', '.'); } public int interpreterThrowoutCount() { - return (int) interpreterThrowoutCountField.getValue(getHandle()); + return (int) interpreterThrowoutCountField.getValue(this); } public int interpreterInvocationCount() { - return (int) interpreterInvocationCountField.getValue(getHandle()); + return (int) interpreterInvocationCountField.getValue(this); } } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/MethodData.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/MethodData.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/MethodData.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,7 +33,7 @@ // A MethodData provides interpreter profiling information -public class MethodData extends Oop { +public class MethodData extends Metadata { static int TypeProfileWidth = 2; static int BciProfileWidth = 2; static int CompileThreshold; @@ -129,11 +129,11 @@ } private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("methodDataOopDesc"); + Type type = db.lookupType("MethodData"); baseOffset = type.getSize(); size = new CIntField(type.getCIntegerField("_size"), 0); - method = new OopField(type.getOopField("_method"), 0); + method = new MetadataField(type.getAddressField("_method"), 0); VM.Flag[] flags = VM.getVM().getCommandLineFlags(); for (int f = 0; f < flags.length; f++) { @@ -188,25 +188,21 @@ } } - MethodData(OopHandle handle, ObjectHeap heap) { - super(handle, heap); + public MethodData(Address addr) { + super(addr); } public boolean isMethodData() { return true; } private static long baseOffset; private static CIntField size; - private static OopField method; + private static MetadataField method; private static CIntField dataSize; private static AddressField data; public static int sizeofMethodDataOopDesc; public static int cellSize; - public long getObjectSize() { - return alignObjectSize(size.getValue(this)); - } - public Method getMethod() { return (Method) method.getValue(this); } @@ -216,19 +212,17 @@ tty.print("MethodData for " + m.getName().asString() + m.getSignature().asString()); } - public void iterateFields(OopVisitor visitor, boolean doVMFields) { - super.iterateFields(visitor, doVMFields); - if (doVMFields) { - visitor.doOop(method, true); + public void iterateFields(MetadataVisitor visitor) { + super.iterateFields(visitor); + visitor.doMetadata(method, true); visitor.doCInt(size, true); } - } int dataSize() { if (dataSize == null) { return 0; } else { - return (int)dataSize.getValue(this); + return (int)dataSize.getValue(getAddress()); } } @@ -298,13 +292,13 @@ } public byte[] orig() { - // fetch the orig methodDataOopDesc data between header and dataSize - return fetchDataAt(this.getHandle(), 0, sizeofMethodDataOopDesc); + // fetch the orig MethodData data between header and dataSize + return fetchDataAt(getAddress(), 0, sizeofMethodDataOopDesc); } public long[] data() { // Read the data as an array of intptr_t elements - OopHandle base = getHandle(); + Address base = getAddress(); long offset = data.getOffset(); int elements = dataSize() / cellSize; long[] result = new long[elements]; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/MethodDataKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/MethodDataKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.oops; - -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -// The MethodDataKlass is the klass of a MethodData oop - -public class MethodDataKlass extends Klass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("methodDataKlass"); - headerSize = type.getSize() + Oop.getHeaderSize(); - } - - MethodDataKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); - } - - private static long headerSize; - - public long getObjectSize() { return alignObjectSize(headerSize); } - - public void printValueOn(PrintStream tty) { - tty.print("MethodDataKlass"); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/MethodKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/MethodKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.oops; - -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -// The MethodKlass is the klass of a Method - -public class MethodKlass extends Klass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("methodKlass"); - headerSize = type.getSize() + Oop.getHeaderSize(); - } - - MethodKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); - } - - private static long headerSize; - - public long getObjectSize() { return alignObjectSize(headerSize); } - - public void printValueOn(PrintStream tty) { - tty.print("MethodKlass"); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ObjArrayKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ObjArrayKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ObjArrayKlass.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,16 +44,16 @@ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("objArrayKlass"); - elementKlass = new OopField(type.getOopField("_element_klass"), Oop.getHeaderSize()); - bottomKlass = new OopField(type.getOopField("_bottom_klass"), Oop.getHeaderSize()); + elementKlass = new MetadataField(type.getAddressField("_element_klass"), 0); + bottomKlass = new MetadataField(type.getAddressField("_bottom_klass"), 0); } - ObjArrayKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); + public ObjArrayKlass(Address addr) { + super(addr); } - private static OopField elementKlass; - private static OopField bottomKlass; + private static MetadataField elementKlass; + private static MetadataField bottomKlass; public Klass getElementKlass() { return (Klass) elementKlass.getValue(this); } public Klass getBottomKlass() { return (Klass) bottomKlass.getValue(this); } @@ -71,12 +71,10 @@ return arrayFlags; } - public void iterateFields(OopVisitor visitor, boolean doVMFields) { - super.iterateFields(visitor, doVMFields); - if (doVMFields) { - visitor.doOop(elementKlass, true); - visitor.doOop(bottomKlass, true); - } + public void iterateFields(MetadataVisitor visitor) { + super.iterateFields(visitor); + visitor.doMetadata(elementKlass, true); + visitor.doMetadata(bottomKlass, true); } public Klass arrayKlassImpl(boolean orNull, int n) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ObjArrayKlassKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ObjArrayKlassKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.oops; - -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -// An ObjArrayKlassKlass is klass for ObjArrayKlass' -// We only have one - -public class ObjArrayKlassKlass extends ArrayKlassKlass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("objArrayKlassKlass"); - headerSize = type.getSize() + Oop.getHeaderSize(); - } - - ObjArrayKlassKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); - } - - private static long headerSize; - - public long getObjectSize() { return alignObjectSize(headerSize); } - - public void printValueOn(PrintStream tty) { - tty.print("ObjArrayKlassKlass"); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,35 +48,15 @@ DEBUG = System.getProperty("sun.jvm.hotspot.oops.ObjectHeap.DEBUG") != null; } - private OopHandle methodKlassHandle; - private OopHandle constMethodKlassHandle; - private OopHandle methodDataKlassHandle; - private OopHandle constantPoolKlassHandle; - private OopHandle constantPoolCacheKlassHandle; - private OopHandle klassKlassHandle; - private OopHandle instanceKlassKlassHandle; - private OopHandle typeArrayKlassKlassHandle; - private OopHandle objArrayKlassKlassHandle; - private OopHandle boolArrayKlassHandle; - private OopHandle byteArrayKlassHandle; - private OopHandle charArrayKlassHandle; - private OopHandle intArrayKlassHandle; - private OopHandle shortArrayKlassHandle; - private OopHandle longArrayKlassHandle; - private OopHandle singleArrayKlassHandle; - private OopHandle doubleArrayKlassHandle; - private OopHandle arrayKlassKlassHandle; - private OopHandle compiledICHolderKlassHandle; + private Address boolArrayKlassHandle; + private Address byteArrayKlassHandle; + private Address charArrayKlassHandle; + private Address intArrayKlassHandle; + private Address shortArrayKlassHandle; + private Address longArrayKlassHandle; + private Address singleArrayKlassHandle; + private Address doubleArrayKlassHandle; - private MethodKlass methodKlassObj; - private ConstMethodKlass constMethodKlassObj; - private MethodDataKlass methodDataKlassObj; - private ConstantPoolKlass constantPoolKlassObj; - private ConstantPoolCacheKlass constantPoolCacheKlassObj; - private KlassKlass klassKlassObj; - private InstanceKlassKlass instanceKlassKlassObj; - private TypeArrayKlassKlass typeArrayKlassKlassObj; - private ObjArrayKlassKlass objArrayKlassKlassObj; private TypeArrayKlass boolArrayKlassObj; private TypeArrayKlass byteArrayKlassObj; private TypeArrayKlass charArrayKlassObj; @@ -85,71 +65,34 @@ private TypeArrayKlass longArrayKlassObj; private TypeArrayKlass singleArrayKlassObj; private TypeArrayKlass doubleArrayKlassObj; - private ArrayKlassKlass arrayKlassKlassObj; - private CompiledICHolderKlass compiledICHolderKlassObj; public void initialize(TypeDataBase db) throws WrongTypeException { // Lookup the roots in the object hierarchy. Type universeType = db.lookupType("Universe"); - methodKlassHandle = universeType.getOopField("_methodKlassObj").getValue(); - methodKlassObj = new MethodKlass(methodKlassHandle, this); - - constMethodKlassHandle = universeType.getOopField("_constMethodKlassObj").getValue(); - constMethodKlassObj = new ConstMethodKlass(constMethodKlassHandle, this); + boolArrayKlassHandle = universeType.getAddressField("_boolArrayKlassObj").getValue(); + boolArrayKlassObj = new TypeArrayKlass(boolArrayKlassHandle); - constantPoolKlassHandle = universeType.getOopField("_constantPoolKlassObj").getValue(); - constantPoolKlassObj = new ConstantPoolKlass(constantPoolKlassHandle, this); - - constantPoolCacheKlassHandle = universeType.getOopField("_constantPoolCacheKlassObj").getValue(); - constantPoolCacheKlassObj = new ConstantPoolCacheKlass(constantPoolCacheKlassHandle, this); + byteArrayKlassHandle = universeType.getAddressField("_byteArrayKlassObj").getValue(); + byteArrayKlassObj = new TypeArrayKlass(byteArrayKlassHandle); - klassKlassHandle = universeType.getOopField("_klassKlassObj").getValue(); - klassKlassObj = new KlassKlass(klassKlassHandle, this); - - arrayKlassKlassHandle = universeType.getOopField("_arrayKlassKlassObj").getValue(); - arrayKlassKlassObj = new ArrayKlassKlass(arrayKlassKlassHandle, this); + charArrayKlassHandle = universeType.getAddressField("_charArrayKlassObj").getValue(); + charArrayKlassObj = new TypeArrayKlass(charArrayKlassHandle); - instanceKlassKlassHandle = universeType.getOopField("_instanceKlassKlassObj").getValue(); - instanceKlassKlassObj = new InstanceKlassKlass(instanceKlassKlassHandle, this); - - typeArrayKlassKlassHandle = universeType.getOopField("_typeArrayKlassKlassObj").getValue(); - typeArrayKlassKlassObj = new TypeArrayKlassKlass(typeArrayKlassKlassHandle, this); - - objArrayKlassKlassHandle = universeType.getOopField("_objArrayKlassKlassObj").getValue(); - objArrayKlassKlassObj = new ObjArrayKlassKlass(objArrayKlassKlassHandle, this); + intArrayKlassHandle = universeType.getAddressField("_intArrayKlassObj").getValue(); + intArrayKlassObj = new TypeArrayKlass(intArrayKlassHandle); - boolArrayKlassHandle = universeType.getOopField("_boolArrayKlassObj").getValue(); - boolArrayKlassObj = new TypeArrayKlass(boolArrayKlassHandle, this); - - byteArrayKlassHandle = universeType.getOopField("_byteArrayKlassObj").getValue(); - byteArrayKlassObj = new TypeArrayKlass(byteArrayKlassHandle, this); + shortArrayKlassHandle = universeType.getAddressField("_shortArrayKlassObj").getValue(); + shortArrayKlassObj = new TypeArrayKlass(shortArrayKlassHandle); - charArrayKlassHandle = universeType.getOopField("_charArrayKlassObj").getValue(); - charArrayKlassObj = new TypeArrayKlass(charArrayKlassHandle, this); - - intArrayKlassHandle = universeType.getOopField("_intArrayKlassObj").getValue(); - intArrayKlassObj = new TypeArrayKlass(intArrayKlassHandle, this); - - shortArrayKlassHandle = universeType.getOopField("_shortArrayKlassObj").getValue(); - shortArrayKlassObj = new TypeArrayKlass(shortArrayKlassHandle, this); + longArrayKlassHandle = universeType.getAddressField("_longArrayKlassObj").getValue(); + longArrayKlassObj = new TypeArrayKlass(longArrayKlassHandle); - longArrayKlassHandle = universeType.getOopField("_longArrayKlassObj").getValue(); - longArrayKlassObj = new TypeArrayKlass(longArrayKlassHandle, this); - - singleArrayKlassHandle = universeType.getOopField("_singleArrayKlassObj").getValue(); - singleArrayKlassObj = new TypeArrayKlass(singleArrayKlassHandle, this); + singleArrayKlassHandle = universeType.getAddressField("_singleArrayKlassObj").getValue(); + singleArrayKlassObj = new TypeArrayKlass(singleArrayKlassHandle); - doubleArrayKlassHandle = universeType.getOopField("_doubleArrayKlassObj").getValue(); - doubleArrayKlassObj = new TypeArrayKlass(doubleArrayKlassHandle, this); - - if (!VM.getVM().isCore()) { - methodDataKlassHandle = universeType.getOopField("_methodDataKlassObj").getValue(); - methodDataKlassObj = new MethodDataKlass(methodDataKlassHandle, this); - - compiledICHolderKlassHandle = universeType.getOopField("_compiledICHolderKlassObj").getValue(); - compiledICHolderKlassObj= new CompiledICHolderKlass(compiledICHolderKlassHandle ,this); - } + doubleArrayKlassHandle = universeType.getAddressField("_doubleArrayKlassObj").getValue(); + doubleArrayKlassObj = new TypeArrayKlass(doubleArrayKlassHandle); } public ObjectHeap(TypeDataBase db) throws WrongTypeException { @@ -195,16 +138,6 @@ public long getDoubleSize() { return doubleSize; } // Accessors for well-known system classes (from Universe) - public MethodKlass getMethodKlassObj() { return methodKlassObj; } - public ConstMethodKlass getConstMethodKlassObj() { return constMethodKlassObj; } - public MethodDataKlass getMethodDataKlassObj() { return methodDataKlassObj; } - public ConstantPoolKlass getConstantPoolKlassObj() { return constantPoolKlassObj; } - public ConstantPoolCacheKlass getConstantPoolCacheKlassObj() { return constantPoolCacheKlassObj; } - public KlassKlass getKlassKlassObj() { return klassKlassObj; } - public ArrayKlassKlass getArrayKlassKlassObj() { return arrayKlassKlassObj; } - public InstanceKlassKlass getInstanceKlassKlassObj() { return instanceKlassKlassObj; } - public ObjArrayKlassKlass getObjArrayKlassKlassObj() { return objArrayKlassKlassObj; } - public TypeArrayKlassKlass getTypeArrayKlassKlassObj() { return typeArrayKlassKlassObj; } public TypeArrayKlass getBoolArrayKlassObj() { return boolArrayKlassObj; } public TypeArrayKlass getByteArrayKlassObj() { return byteArrayKlassObj; } public TypeArrayKlass getCharArrayKlassObj() { return charArrayKlassObj; } @@ -213,12 +146,6 @@ public TypeArrayKlass getLongArrayKlassObj() { return longArrayKlassObj; } public TypeArrayKlass getSingleArrayKlassObj() { return singleArrayKlassObj; } public TypeArrayKlass getDoubleArrayKlassObj() { return doubleArrayKlassObj; } - public CompiledICHolderKlass getCompiledICHolderKlassObj() { - if (Assert.ASSERTS_ENABLED) { - Assert.that(!VM.getVM().isCore(), "must not be called for core build"); - } - return compiledICHolderKlassObj; - } /** Takes a BasicType and returns the corresponding primitive array klass */ @@ -301,22 +228,13 @@ visitor.epilogue(); } - // Iterates through only the perm generation for the purpose of - // finding static fields for liveness analysis - public void iteratePerm(HeapVisitor visitor) { - CollectedHeap heap = VM.getVM().getUniverse().heap(); - List liveRegions = new ArrayList(); - addPermGenLiveRegions(liveRegions, heap); - sortLiveRegions(liveRegions); - iterateLiveRegions(liveRegions, visitor, null); + public boolean isValidMethod(Address handle) { + try { + Method m = (Method)Metadata.instantiateWrapperFor(handle); + return true; + } catch (Exception e) { + return false; } - - public boolean isValidMethod(OopHandle handle) { - OopHandle klass = Oop.getKlassForOopHandle(handle); - if (klass != null && klass.equals(methodKlassHandle)) { - return true; - } - return false; } // Creates an instance from the Oop hierarchy based based on the handle @@ -329,60 +247,12 @@ // Handle the null reference if (handle == null) return null; - // First check if handle is one of the root objects - if (handle.equals(methodKlassHandle)) return getMethodKlassObj(); - if (handle.equals(constMethodKlassHandle)) return getConstMethodKlassObj(); - if (handle.equals(constantPoolKlassHandle)) return getConstantPoolKlassObj(); - if (handle.equals(constantPoolCacheKlassHandle)) return getConstantPoolCacheKlassObj(); - if (handle.equals(instanceKlassKlassHandle)) return getInstanceKlassKlassObj(); - if (handle.equals(objArrayKlassKlassHandle)) return getObjArrayKlassKlassObj(); - if (handle.equals(klassKlassHandle)) return getKlassKlassObj(); - if (handle.equals(arrayKlassKlassHandle)) return getArrayKlassKlassObj(); - if (handle.equals(typeArrayKlassKlassHandle)) return getTypeArrayKlassKlassObj(); - if (handle.equals(boolArrayKlassHandle)) return getBoolArrayKlassObj(); - if (handle.equals(byteArrayKlassHandle)) return getByteArrayKlassObj(); - if (handle.equals(charArrayKlassHandle)) return getCharArrayKlassObj(); - if (handle.equals(intArrayKlassHandle)) return getIntArrayKlassObj(); - if (handle.equals(shortArrayKlassHandle)) return getShortArrayKlassObj(); - if (handle.equals(longArrayKlassHandle)) return getLongArrayKlassObj(); - if (handle.equals(singleArrayKlassHandle)) return getSingleArrayKlassObj(); - if (handle.equals(doubleArrayKlassHandle)) return getDoubleArrayKlassObj(); - if (!VM.getVM().isCore()) { - if (handle.equals(compiledICHolderKlassHandle)) return getCompiledICHolderKlassObj(); - if (handle.equals(methodDataKlassHandle)) return getMethodDataKlassObj(); - } - // Then check if obj.klass() is one of the root objects - OopHandle klass = Oop.getKlassForOopHandle(handle); + Klass klass = Oop.getKlassForOopHandle(handle); if (klass != null) { - if (klass.equals(methodKlassHandle)) return new Method(handle, this); - if (klass.equals(constMethodKlassHandle)) return new ConstMethod(handle, this); - if (klass.equals(constantPoolKlassHandle)) return new ConstantPool(handle, this); - if (klass.equals(constantPoolCacheKlassHandle)) return new ConstantPoolCache(handle, this); - if (!VM.getVM().isCore()) { - if (klass.equals(compiledICHolderKlassHandle)) return new CompiledICHolder(handle, this); - if (klass.equals(methodDataKlassHandle)) return new MethodData(handle, this); - } - if (klass.equals(instanceKlassKlassHandle)) { - InstanceKlass ik = new InstanceKlass(handle, this); - if (ik.getName().asString().equals("java/lang/Class")) { - // We would normally do this using the vtable style - // lookup but since it's not used for these currently - // it's simpler to just check for the name. - return new InstanceMirrorKlass(handle, this); - } - return ik; - } - if (klass.equals(objArrayKlassKlassHandle)) return new ObjArrayKlass(handle, this); - if (klass.equals(typeArrayKlassKlassHandle)) return new TypeArrayKlass(handle, this); - - // Lastly check if obj.klass().klass() is on of the root objects - OopHandle klassKlass = Oop.getKlassForOopHandle(klass); - if (klassKlass != null) { - if (klassKlass.equals(instanceKlassKlassHandle)) return new Instance(handle, this); - if (klassKlass.equals(objArrayKlassKlassHandle)) return new ObjArray(handle, this); - if (klassKlass.equals(typeArrayKlassKlassHandle)) return new TypeArray(handle, this); - } + if (klass instanceof TypeArrayKlass) return new TypeArray(handle, this); + if (klass instanceof ObjArrayKlass) return new ObjArray(handle, this); + if (klass instanceof InstanceKlass) return new Instance(handle, this); } if (DEBUG) { @@ -434,21 +304,15 @@ visitor.prologue(totalSize); CompactibleFreeListSpace cmsSpaceOld = null; - CompactibleFreeListSpace cmsSpacePerm = null; CollectedHeap heap = VM.getVM().getUniverse().heap(); if (heap instanceof GenCollectedHeap) { GenCollectedHeap genHeap = (GenCollectedHeap) heap; Generation genOld = genHeap.getGen(1); - Generation genPerm = genHeap.permGen(); if (genOld instanceof ConcurrentMarkSweepGeneration) { ConcurrentMarkSweepGeneration concGen = (ConcurrentMarkSweepGeneration)genOld; cmsSpaceOld = concGen.cmsSpace(); } - if (genPerm instanceof ConcurrentMarkSweepGeneration) { - ConcurrentMarkSweepGeneration concGen = (ConcurrentMarkSweepGeneration)genPerm; - cmsSpacePerm = concGen.cmsSpace(); - } } for (int i = 0; i < liveRegions.size(); i += 2) { @@ -476,8 +340,6 @@ if ( (cmsSpaceOld != null) && cmsSpaceOld.contains(handle) ){ size = cmsSpaceOld.collector().blockSizeUsingPrintezisBits(handle); - } else if ((cmsSpacePerm != null) && cmsSpacePerm.contains(handle) ){ - size = cmsSpacePerm.collector().blockSizeUsingPrintezisBits(handle); } if (size <= 0) { @@ -494,8 +356,7 @@ break; } } - if ( (cmsSpaceOld != null) && cmsSpaceOld.contains(handle) || - (cmsSpacePerm != null) && cmsSpacePerm.contains(handle) ) { + if ( (cmsSpaceOld != null) && cmsSpaceOld.contains(handle)) { handle = handle.addOffsetToAsOopHandle(CompactibleFreeListSpace.adjustObjectSizeInBytes(obj.getObjectSize()) ); } else { handle = handle.addOffsetToAsOopHandle(obj.getObjectSize()); @@ -513,32 +374,6 @@ visitor.epilogue(); } - private void addPermGenLiveRegions(List output, CollectedHeap heap) { - LiveRegionsCollector lrc = new LiveRegionsCollector(output); - if (heap instanceof SharedHeap) { - if (Assert.ASSERTS_ENABLED) { - Assert.that(heap instanceof GenCollectedHeap || - heap instanceof G1CollectedHeap, - "Expecting GenCollectedHeap or G1CollectedHeap, " + - "but got " + heap.getClass().getName()); - } - // Handles both GenCollectedHeap and G1CollectedHeap - SharedHeap sharedHeap = (SharedHeap) heap; - Generation gen = sharedHeap.permGen(); - gen.spaceIterate(lrc, true); - } else if (heap instanceof ParallelScavengeHeap) { - ParallelScavengeHeap psh = (ParallelScavengeHeap) heap; - PSPermGen permGen = psh.permGen(); - addLiveRegions(permGen.objectSpace().getLiveRegions(), output); - } else { - if (Assert.ASSERTS_ENABLED) { - Assert.that(false, - "Expecting SharedHeap or ParallelScavengeHeap, " + - "but got " + heap.getClass().getName()); - } - } - } - private void addLiveRegions(List input, List output) { for (Iterator itr = input.iterator(); itr.hasNext();) { MemRegion reg = (MemRegion) itr.next(); @@ -608,9 +443,6 @@ } } - // handle perm generation - addPermGenLiveRegions(liveRegions, heap); - // If UseTLAB is enabled, snip out regions associated with TLABs' // dead regions. Note that TLABs can be present in any generation. diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHistogramElement.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHistogramElement.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHistogramElement.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -84,10 +84,6 @@ return tak.getElementTypeName() + "[]"; } else if (k instanceof ObjArrayKlass) { ObjArrayKlass oak = (ObjArrayKlass) ak; - // See whether it's a "system objArray" - if (oak.equals(VM.getVM().getUniverse().systemObjArrayKlassObj())) { - return "* System ObjArray"; - } Klass bottom = oak.getBottomKlass(); int dim = (int) oak.getDimension(); StringBuffer buf = new StringBuffer(); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/Oop.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/Oop.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/Oop.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,6 @@ import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; -import sun.jvm.hotspot.memory.CompactingPermGenGen; // Oop represents the superclass for all types of // objects in the HotSpot object heap. @@ -47,8 +46,11 @@ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type type = db.lookupType("oopDesc"); mark = new CIntField(type.getCIntegerField("_mark"), 0); - klass = new OopField(type.getOopField("_metadata._klass"), 0); - compressedKlass = new NarrowOopField(type.getOopField("_metadata._compressed_klass"), 0); + klass = new MetadataField(type.getAddressField("_metadata._klass"), 0); + if (VM.getVM().isCompressedHeadersEnabled()) { + // compressedKlass = new CIntField(type.getCIntegerField("_metadata._compressed_klass"), 0); + throw new InternalError("unimplemented"); + } headerSize = type.getSize(); } @@ -71,28 +73,16 @@ public static long getHeaderSize() { return headerSize; } // Header size in bytes. private static CIntField mark; - private static OopField klass; - private static NarrowOopField compressedKlass; - - public boolean isShared() { - return CompactingPermGenGen.isShared(handle); - } - - public boolean isSharedReadOnly() { - return CompactingPermGenGen.isSharedReadOnly(handle); - } - - public boolean isSharedReadWrite() { - return CompactingPermGenGen.isSharedReadWrite(handle); - } + private static MetadataField klass; + private static CIntField compressedKlass; // Accessors for declared fields public Mark getMark() { return new Mark(getHandle()); } public Klass getKlass() { - if (VM.getVM().isCompressedOopsEnabled()) { - return (Klass) compressedKlass.getValue(this); + if (VM.getVM().isCompressedHeadersEnabled()) { + throw new InternalError("unimplemented"); } else { - return (Klass) klass.getValue(this); + return (Klass)klass.getValue(getHandle()); } } @@ -113,14 +103,7 @@ public boolean isArray() { return false; } public boolean isObjArray() { return false; } public boolean isTypeArray() { return false; } - public boolean isSymbol() { return false; } - public boolean isKlass() { return false; } public boolean isThread() { return false; } - public boolean isMethod() { return false; } - public boolean isMethodData() { return false; } - public boolean isConstantPool() { return false; } - public boolean isConstantPoolCache() { return false; } - public boolean isCompiledICHolder() { return false; } // Align the object size. public static long alignObjectSize(long size) { @@ -167,10 +150,10 @@ void iterateFields(OopVisitor visitor, boolean doVMFields) { if (doVMFields) { visitor.doCInt(mark, true); - if (VM.getVM().isCompressedOopsEnabled()) { - visitor.doOop(compressedKlass, true); + if (VM.getVM().isCompressedHeadersEnabled()) { + throw new InternalError("unimplemented"); } else { - visitor.doOop(klass, true); + visitor.doMetadata(klass, true); } } } @@ -223,14 +206,14 @@ public boolean verify() { return true;} // Package-private routine to speed up ObjectHeap.newOop - static OopHandle getKlassForOopHandle(OopHandle handle) { + static Klass getKlassForOopHandle(OopHandle handle) { if (handle == null) { return null; } - if (VM.getVM().isCompressedOopsEnabled()) { - return handle.getCompOopHandleAt(compressedKlass.getOffset()); + if (VM.getVM().isCompressedHeadersEnabled()) { + throw new InternalError("Unimplemented"); } else { - return handle.getOopHandleAt(klass.getOffset()); + return (Klass)Metadata.instantiateWrapperFor(handle.getAddressAt(klass.getOffset())); } } }; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/OopField.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/OopField.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/OopField.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,8 @@ package sun.jvm.hotspot.oops; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.VM; +import sun.jvm.hotspot.runtime.VMObject; // The class for an oop field simply provides access to the value. public class OopField extends Field { @@ -55,6 +57,15 @@ return obj.getHandle().getOopHandleAt(getOffset()); } + public Oop getValue(VMObject obj) { + return VM.getVM().getObjectHeap().newOop(getValueAsOopHandle(obj)); + } + + /** Debugging support */ + public OopHandle getValueAsOopHandle(VMObject obj) { + return obj.getAddress().getOopHandleAt(getOffset()); + } + public void setValue(Oop obj) throws MutationException { // Fix this: setOopAt is missing in Address } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/OopPrinter.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/OopPrinter.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/OopPrinter.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,6 +52,12 @@ field.printOn(tty); } + public void doMetadata(MetadataField field, boolean isVMField) { + printField(field); + field.getValue(getObj()).printValueOn(tty); + tty.println(); + } + public void doOop(OopField field, boolean isVMField) { printField(field); Oop.printOopValueOn(field.getValue(getObj()), tty); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/OopVisitor.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/OopVisitor.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/OopVisitor.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ // An OopVisitor can be used to inspect all fields within an object. // Fields include vm fields, java fields, indexable fields. -public interface OopVisitor { +public interface OopVisitor extends FieldVisitor { // Called before visiting an object public void prologue(); @@ -38,17 +38,4 @@ // Returns the object being visited public Oop getObj(); - - // Callback methods for each field type in an object - public void doOop(OopField field, boolean isVMField); - public void doOop(NarrowOopField field, boolean isVMField); - public void doByte(ByteField field, boolean isVMField); - public void doChar(CharField field, boolean isVMField); - public void doBoolean(BooleanField field, boolean isVMField); - public void doShort(ShortField field, boolean isVMField); - public void doInt(IntField field, boolean isVMField); - public void doLong(LongField field, boolean isVMField); - public void doFloat(FloatField field, boolean isVMField); - public void doDouble(DoubleField field, boolean isVMField); - public void doCInt(CIntField field, boolean isVMField); }; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ProfileData.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ProfileData.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ProfileData.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -61,10 +61,6 @@ int uintAt(int index) { return (int)intptrAt(index); } - Oop oopAt(int index) { - return data().oopAt(index); - } - public Address addressAt(int index) { return data().addressAt(index); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ReceiverTypeData.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ReceiverTypeData.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ReceiverTypeData.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -75,8 +75,8 @@ // would fail. The 'normal' version should be used whenever possible. Klass receiverUnchecked(int row) { //assert(row < rowLimit(), "oob"); - Oop recv = oopAt(receiverCellIndex(row)); - return (Klass)recv; + Address recv = addressAt(receiverCellIndex(row)); + return (Klass)Metadata.instantiateWrapperFor(recv); } public Klass receiver(int row) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/ShortField.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/ShortField.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/ShortField.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.jvm.hotspot.oops; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.VMObject; // The class for a short field simply provides access to the value. public class ShortField extends Field { @@ -41,6 +42,7 @@ } public short getValue(Oop obj) { return obj.getHandle().getJShortAt(getOffset()); } + public short getValue(VMObject obj) { return obj.getAddress().getJShortAt(getOffset()); } public void setValue(Oop obj, short value) throws MutationException { // Fix this: setJFloatAt is missing in Address } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/TypeArray.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/TypeArray.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/TypeArray.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,7 +43,7 @@ } private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("typeArrayOopDesc"); + Type type = db.lookupType("typeArrayOop"); } TypeArray(OopHandle handle, ObjectHeap heap) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/TypeArrayKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/TypeArrayKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/TypeArrayKlass.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,11 +44,11 @@ private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { Type t = db.lookupType("typeArrayKlass"); - maxLength = new CIntField(t.getCIntegerField("_max_length"), Oop.getHeaderSize()); + maxLength = new CIntField(t.getCIntegerField("_max_length"), 0); } - TypeArrayKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); + public TypeArrayKlass(Address addr) { + super(addr); } private static CIntField maxLength; @@ -96,12 +96,10 @@ tty.print("TypeArrayKlass for " + getTypeName()); } - public void iterateFields(OopVisitor visitor, boolean doVMFields) { - super.iterateFields(visitor, doVMFields); - if (doVMFields) { + public void iterateFields(MetadataVisitor visitor) { + super.iterateFields(visitor); visitor.doCInt(maxLength, true); } - } public Klass arrayKlassImpl(boolean orNull, int n) { int dimension = (int) getDimension(); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/TypeArrayKlassKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/TypeArrayKlassKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.oops; - -import java.io.*; -import java.util.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; - -public class TypeArrayKlassKlass extends ArrayKlassKlass { - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { - Type type = db.lookupType("typeArrayKlassKlass"); - headerSize = type.getSize() + Oop.getHeaderSize(); - } - - public TypeArrayKlassKlass(OopHandle handle, ObjectHeap heap) { - super(handle, heap); - } - - private static long headerSize; - - public long getObjectSize() { return alignObjectSize(headerSize); } - - public void printValueOn(PrintStream tty) { - tty.print("TypeArrayKlassKlass"); - } -}; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/oops/java_lang_Class.java --- a/agent/src/share/classes/sun/jvm/hotspot/oops/java_lang_Class.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/java_lang_Class.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.types.AddressField; import sun.jvm.hotspot.types.Type; import sun.jvm.hotspot.types.TypeDataBase; import sun.jvm.hotspot.utilities.*; @@ -40,7 +41,7 @@ public class java_lang_Class { // java.lang.Class fields - static OopField klassField; + static int klassOffset; static IntField oopSizeField; static { @@ -55,19 +56,18 @@ // klass and oop_size are HotSpot magic fields and hence we can't // find them from InstanceKlass for java.lang.Class. Type jlc = db.lookupType("java_lang_Class"); - int klassOffset = (int) jlc.getCIntegerField("_klass_offset").getValue(); - if (VM.getVM().isCompressedOopsEnabled()) { - klassField = new NarrowOopField(new NamedFieldIdentifier("klass"), klassOffset, true); - } else { - klassField = new OopField(new NamedFieldIdentifier("klass"), klassOffset, true); - } + klassOffset = (int) jlc.getCIntegerField("_klass_offset").getValue(); int oopSizeOffset = (int) jlc.getCIntegerField("_oop_size_offset").getValue(); oopSizeField = new IntField(new NamedFieldIdentifier("oop_size"), oopSizeOffset, true); } - /** get klassOop field at offset hc_klass_offset from a java.lang.Class object */ + /** get Klass* field at offset hc_klass_offset from a java.lang.Class object */ public static Klass asKlass(Oop aClass) { - return (Klass) java_lang_Class.klassField.getValue(aClass); + if (VM.getVM().isCompressedHeadersEnabled()) { + throw new InternalError("unimplemented"); + } else { + return (Klass)Metadata.instantiateWrapperFor(aClass.getHandle().getAddressAt(klassOffset)); + } } /** get oop_size field at offset oop_size_offset from a java.lang.Class object */ diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/opto/CallJavaNode.java --- a/agent/src/share/classes/sun/jvm/hotspot/opto/CallJavaNode.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/opto/CallJavaNode.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -54,7 +54,7 @@ } public ciMethod method() { - return (ciMethod) ciObjectFactory.get(methodField.getValue(getAddress())); + return (ciMethod) ciObjectFactory.getMetadata(methodField.getValue(getAddress())); } public void dumpSpec(PrintStream out) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/opto/Compile.java --- a/agent/src/share/classes/sun/jvm/hotspot/opto/Compile.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/opto/Compile.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -74,7 +74,7 @@ } public ciMethod method() { - return (ciMethod) ciObjectFactory.get(methodField.getValue(getAddress())); + return (ciMethod) ciObjectFactory.getMetadata(methodField.getValue(getAddress())); } public PhaseCFG cfg() { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/opto/InlineTree.java --- a/agent/src/share/classes/sun/jvm/hotspot/opto/InlineTree.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/opto/InlineTree.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,7 +69,7 @@ } public ciMethod method() { - return (ciMethod) ciObjectFactory.get(methodField.getValue(getAddress())); + return (ciMethod) ciObjectFactory.getMetadata(methodField.getValue(getAddress())); } public JVMState callerJvms() { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/opto/JVMState.java --- a/agent/src/share/classes/sun/jvm/hotspot/opto/JVMState.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/opto/JVMState.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -81,7 +81,7 @@ } public ciMethod method() { - return (ciMethod) ciObjectFactory.get(methodField.getValue(getAddress())); + return (ciMethod) ciObjectFactory.getMetadata(methodField.getValue(getAddress())); } public int bci() { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/opto/MachCallJavaNode.java --- a/agent/src/share/classes/sun/jvm/hotspot/opto/MachCallJavaNode.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/opto/MachCallJavaNode.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,7 +52,7 @@ private static CIntField bciField; public ciMethod method() { - return (ciMethod) ciObjectFactory.get(methodField.getValue(getAddress())); + return (ciMethod) ciObjectFactory.getMetadata(methodField.getValue(getAddress())); } public MachCallJavaNode(Address addr) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java --- a/agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -61,20 +61,13 @@ // For bad value initialization public static final int JVM_CONSTANT_Invalid = 0; - // Temporary tag until actual use - public static final int JVM_CONSTANT_UnresolvedClass = 100; - - // Temporary tag while constructing constant pool - public static final int JVM_CONSTANT_ClassIndex = 101; - - // Temporary tag until actual use - public static final int JVM_CONSTANT_UnresolvedString = 102; - - // Temporary tag while constructing constant pool - public static final int JVM_CONSTANT_StringIndex = 103; - - // Temporary tag while constructing constant pool - public static final int JVM_CONSTANT_UnresolvedClassInError = 104; + public static final int JVM_CONSTANT_UnresolvedClass = 100; // Temporary tag until actual use + public static final int JVM_CONSTANT_ClassIndex = 101; // Temporary tag while constructing constant pool + public static final int JVM_CONSTANT_StringIndex = 102; // Temporary tag while constructing constant pool + public static final int JVM_CONSTANT_UnresolvedClassInError = 103; // Error tag due to resolution error + public static final int JVM_CONSTANT_MethodHandleInError = 104; // Error tag due to resolution error + public static final int JVM_CONSTANT_MethodTypeInError = 105; // Error tag due to resolution error + public static final int JVM_CONSTANT_Object = 106; // Required for BoundMethodHandle arguments. // 1.5 major/minor version numbers from JVM spec. 3rd edition public static final short MAJOR_VERSION = 49; @@ -109,7 +102,7 @@ // flags actually put in .class file public static final long JVM_ACC_WRITTEN_FLAGS = 0x00007FFF; - // methodOop flags + // Method* flags // monitorenter/monitorexit bytecodes match public static final long JVM_ACC_MONITOR_MATCH = 0x10000000; // Method contains monitorenter/monitorexit bytecodes @@ -130,7 +123,7 @@ // RedefineClasses() has made method obsolete public static final long JVM_ACC_IS_OBSOLETE = 0x00010000; - // klassOop flags + // Klass* flags // True if this class has miranda methods in it's vtable public static final long JVM_ACC_HAS_MIRANDA_METHODS = 0x10000000; // True if klass has a vanilla default constructor @@ -140,14 +133,14 @@ // True if klass supports the Clonable interface public static final long JVM_ACC_IS_CLONEABLE = 0x80000000; - // klassOop and methodOop flags + // Klass* and Method* flags public static final long JVM_ACC_HAS_LOCAL_VARIABLE_TABLE = 0x00200000; // flags promoted from methods to the holding klass public static final long JVM_ACC_PROMOTED_FLAGS = 0x00200000; // field flags // Note: these flags must be defined in the low order 16 bits because - // instanceKlass only stores a ushort worth of information from the + // InstanceKlass only stores a ushort worth of information from the // AccessFlags value. // field access is watched by JVMTI public static final long JVM_ACC_FIELD_ACCESS_WATCHED = 0x00002000; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/runtime/Frame.java --- a/agent/src/share/classes/sun/jvm/hotspot/runtime/Frame.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/runtime/Frame.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,8 +72,8 @@ }); } - /** Size of constMethodOopDesc for computing BCI from BCP (FIXME: hack) */ - private static long constMethodOopDescSize; + /** Size of ConstMethod for computing BCI from BCP (FIXME: hack) */ + private static long ConstMethodSize; private static int pcReturnOffset; @@ -82,10 +82,10 @@ } private static synchronized void initialize(TypeDataBase db) { - Type constMethodOopType = db.lookupType("constMethodOopDesc"); + Type ConstMethodType = db.lookupType("ConstMethod"); // FIXME: not sure whether alignment here is correct or how to // force it (round up to address size?) - constMethodOopDescSize = constMethodOopType.getSize(); + ConstMethodSize = ConstMethodType.getSize(); pcReturnOffset = db.lookupIntConstant("frame::pc_return_offset").intValue(); } @@ -97,7 +97,7 @@ if (bcp == null) return 0; long bci = bcp.minus(null); if (bci >= 0 && bci < cm.getCodeSize()) return (int) bci; - return (int) (bcp.minus(cm.getHandle()) - constMethodOopDescSize); + return (int) (bcp.minus(cm.getAddress()) - ConstMethodSize); } protected int bcpToBci(Address bcp, Method m) { @@ -285,7 +285,7 @@ // NOTE that the accessor "addressOfInterpreterFrameBCX" has // necessarily been eliminated. The byte code pointer is inherently // an interior pointer to a Method (the bytecodes follow the - // methodOopDesc data structure) and therefore acquisition of it in + // Method data structure) and therefore acquisition of it in // this system can not be allowed. All accesses to interpreter frame // byte codes are via the byte code index (BCI). @@ -374,7 +374,7 @@ /** Current method */ public Method getInterpreterFrameMethod() { - return (Method) VM.getVM().getObjectHeap().newOop(addressOfInterpreterFrameMethod().getOopHandleAt(0)); + return (Method)Metadata.instantiateWrapperFor(addressOfInterpreterFrameMethod().getAddressAt(0)); } /** Current method */ @@ -385,7 +385,7 @@ public abstract Address addressOfInterpreterFrameCPCache(); /** Constant pool cache */ public ConstantPoolCache getInterpreterFrameCPCache() { - return (ConstantPoolCache) VM.getVM().getObjectHeap().newOop(addressOfInterpreterFrameCPCache().getOopHandleAt(0)); + return (ConstantPoolCache) Metadata.instantiateWrapperFor(addressOfInterpreterFrameCPCache().getAddressAt(0)); } //-------------------------------------------------------------------------------- @@ -583,8 +583,9 @@ // } // process fixed part - oopVisitor.visitAddress(addressOfInterpreterFrameMethod()); - oopVisitor.visitAddress(addressOfInterpreterFrameCPCache()); + // FIXME: these are no longer oops, so should anything be visitied? + // oopVisitor.visitAddress(addressOfInterpreterFrameMethod()); + // oopVisitor.visitAddress(addressOfInterpreterFrameCPCache()); // FIXME: expose interpreterFrameMirrorOffset // if (m.isNative() && m.isStatic()) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/runtime/JNIid.java --- a/agent/src/share/classes/sun/jvm/hotspot/runtime/JNIid.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/runtime/JNIid.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,11 +31,11 @@ import sun.jvm.hotspot.types.*; public class JNIid extends VMObject { - private static sun.jvm.hotspot.types.OopField holder; + private static MetadataField holder; private static AddressField next; private static CIntegerField offset; - private static sun.jvm.hotspot.types.OopField resolvedMethod; - private static sun.jvm.hotspot.types.OopField resolvedReceiver; + private static MetadataField resolvedMethod; + private static MetadataField resolvedReceiver; private ObjectHeap heap; @@ -77,11 +77,11 @@ return new JNIid(nextAddr, heap); } - public Klass holder() { return (Klass) heap.newOop(holder.getValue(addr)); } + public Klass holder() { return (Klass) holder.getValue(addr); } public int offset() { return (int) offset.getValue(addr); } public Method method() { - return (Method) ((InstanceKlass) holder()).getMethods().getObjAt(offset()); + return ((InstanceKlass) holder()).getMethods().at(offset()); } - public Method resolvedMethod() { return (Method) heap.newOop(resolvedMethod.getValue(addr)); } - public Klass resolvedReceiver() { return (Klass) heap.newOop(resolvedReceiver.getValue(addr)); } + public Method resolvedMethod() { return (Method)resolvedMethod.getValue(addr); } + public Klass resolvedReceiver() { return (Klass) resolvedReceiver.getValue(addr); } } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java --- a/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/runtime/VM.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -97,6 +97,7 @@ /** alignment constants */ private boolean isLP64; private int bytesPerLong; + private int bytesPerWord; private int objectAlignmentInBytes; private int minObjAlignmentInBytes; private int logMinObjAlignmentInBytes; @@ -128,6 +129,7 @@ private static CIntegerType boolType; private Boolean sharingEnabled; private Boolean compressedOopsEnabled; + private Boolean compressedHeadersEnabled; // command line flags supplied to VM - see struct Flag in globals.hpp public static final class Flag { @@ -303,7 +305,7 @@ // We infer the presence of C1 or C2 from a couple of fields we // already have present in the type database { - Type type = db.lookupType("methodOopDesc"); + Type type = db.lookupType("Method"); if (type.getField("_from_compiled_entry", false, false) == null) { // Neither C1 nor C2 is present usingClientCompiler = false; @@ -325,6 +327,7 @@ isLP64 = debugger.getMachineDescription().isLP64(); } bytesPerLong = db.lookupIntConstant("BytesPerLong").intValue(); + bytesPerWord = db.lookupIntConstant("BytesPerWord").intValue(); heapWordSize = db.lookupIntConstant("HeapWordSize").intValue(); oopSize = db.lookupIntConstant("oopSize").intValue(); @@ -509,6 +512,10 @@ return bytesPerLong; } + public int getBytesPerWord() { + return bytesPerWord; + } + /** Get minimum object alignment in bytes. */ public int getMinObjAlignmentInBytes() { return minObjAlignmentInBytes; @@ -772,6 +779,15 @@ return compressedOopsEnabled.booleanValue(); } + public boolean isCompressedHeadersEnabled() { + if (compressedHeadersEnabled == null) { + Flag flag = getCommandLineFlag("UseCompressedHeaders"); + compressedHeadersEnabled = (flag == null) ? Boolean.FALSE: + (flag.getBool()? Boolean.TRUE: Boolean.FALSE); + } + return compressedHeadersEnabled.booleanValue(); + } + public int getObjectAlignmentInBytes() { if (objectAlignmentInBytes == 0) { Flag flag = getCommandLineFlag("ObjectAlignmentInBytes"); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/runtime/VMObjectFactory.java --- a/agent/src/share/classes/sun/jvm/hotspot/runtime/VMObjectFactory.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/runtime/VMObjectFactory.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,6 +57,12 @@ }); return c.newInstance(new Object[] { addr }); } + catch (java.lang.reflect.InvocationTargetException ite) { + if (ite.getTargetException() instanceof RuntimeException) { + throw (RuntimeException)ite.getTargetException(); + } + throw new ConstructionException(ite); + } catch (Exception e) { throw new ConstructionException(e); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/runtime/VirtualBaseConstructor.java --- a/agent/src/share/classes/sun/jvm/hotspot/runtime/VirtualBaseConstructor.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/runtime/VirtualBaseConstructor.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,6 +47,7 @@ map = new HashMap(); this.baseType = baseType; this.unknownTypeHandler = unknownTypeHandler; + if (packageName != null) { // Try to find mirror types for each of the types. If there isn't // a direct mirror then try to find an instantiable superclass and // treat it as that. @@ -73,22 +74,36 @@ } } } + } + + /** Adds a mapping from the given C++ type name to the given Java + class. The latter must be a subclass of + sun.jvm.hotspot.runtime.VMObject. Returns false if there was + already a class for this type name in the map. */ + public boolean addMapping(String cTypeName, Class clazz) { + if (map.get(cTypeName) != null) { + return false; + } + + map.put(cTypeName, clazz); + return true; + } /** Instantiate the most-precisely typed wrapper object available for the type of the given Address. If no type in the mapping matched the type of the Address, throws a WrongTypeException. Returns null for a null address (similar behavior to VMObjectFactory). */ - public VMObject instantiateWrapperFor(Address addr) throws WrongTypeException { + public T instantiateWrapperFor(Address addr) throws WrongTypeException { if (addr == null) { return null; } Type type = db.findDynamicTypeForAddress(addr, baseType); if (type != null) { - return (VMObject) VMObjectFactory.newObject((Class) map.get(type.getName()), addr); + return (T) VMObjectFactory.newObject((Class) map.get(type.getName()), addr); } else if (unknownTypeHandler != null) { - return (VMObject) VMObjectFactory.newObject(unknownTypeHandler, addr); + return (T) VMObjectFactory.newObject(unknownTypeHandler, addr); } throw newWrongTypeException(addr); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/runtime/ia64/IA64Frame.java --- a/agent/src/share/classes/sun/jvm/hotspot/runtime/ia64/IA64Frame.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/runtime/ia64/IA64Frame.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -345,8 +345,8 @@ // for use in a non-debugging, or reflective, system. Need to // figure out how to express this. Address bcp = addressOfInterpreterFrameBCX().getAddressAt(0); - OopHandle methodHandle = addressOfInterpreterFrameMethod().getOopHandleAt(0); - Method method = (Method) VM.getVM().getObjectHeap().newOop(methodHandle); + Address methodHandle = addressOfInterpreterFrameMethod().getAddressAt(0); + Method method = (Method)Metadata.instantiateWrapperFor(methodHandle); return bcpToBci(bcp, method); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/runtime/sparc/SPARCFrame.java --- a/agent/src/share/classes/sun/jvm/hotspot/runtime/sparc/SPARCFrame.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/runtime/sparc/SPARCFrame.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -423,7 +423,7 @@ return false; } - OopHandle methodHandle = addressOfInterpreterFrameMethod().getOopHandleAt(0); + Address methodHandle = addressOfInterpreterFrameMethod().getAddressAt(0); if (VM.getVM().getObjectHeap().isValidMethod(methodHandle) == false) { return false; @@ -444,7 +444,7 @@ Method method; try { - method = (Method) VM.getVM().getObjectHeap().newOop(methodHandle); + method = (Method)Metadata.instantiateWrapperFor(methodHandle); } catch (UnknownOopException ex) { return false; } @@ -744,8 +744,8 @@ // private: // // // where LcpoolCache is saved: - // constantPoolCacheOop* interpreter_frame_cpoolcache_addr() const { - // return (constantPoolCacheOop*)sp_addr_at( LcpoolCache.sp_offset_in_saved_window()); + // ConstantPoolCache** interpreter_frame_cpoolcache_addr() const { + // return (ConstantPoolCache**)sp_addr_at( LcpoolCache.sp_offset_in_saved_window()); // } // // // where Lmonitors is saved: @@ -787,8 +787,8 @@ // for use in a non-debugging, or reflective, system. Need to // figure out how to express this. Address bcp = addressOfInterpreterFrameBCX().getAddressAt(0); - OopHandle methodHandle = addressOfInterpreterFrameMethod().getOopHandleAt(0); - Method method = (Method) VM.getVM().getObjectHeap().newOop(methodHandle); + Address methodHandle = addressOfInterpreterFrameMethod().getAddressAt(0); + Method method = (Method)Metadata.instantiateWrapperFor(methodHandle); return bcpToBci(bcp, method); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java --- a/agent/src/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/runtime/x86/X86Frame.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -452,8 +452,8 @@ // for use in a non-debugging, or reflective, system. Need to // figure out how to express this. Address bcp = addressOfInterpreterFrameBCX().getAddressAt(0); - OopHandle methodHandle = addressOfInterpreterFrameMethod().getOopHandleAt(0); - Method method = (Method) VM.getVM().getObjectHeap().newOop(methodHandle); + Address methodHandle = addressOfInterpreterFrameMethod().getAddressAt(0); + Method method = (Method)Metadata.instantiateWrapperFor(methodHandle); return bcpToBci(bcp, method); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java --- a/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java Sat Sep 01 13:25:18 2012 -0400 @@ -65,8 +65,8 @@ printValMB("OldSize = ", getFlagValue("OldSize", flagMap)); printValue("NewRatio = ", getFlagValue("NewRatio", flagMap)); printValue("SurvivorRatio = ", getFlagValue("SurvivorRatio", flagMap)); - printValMB("PermSize = ", getFlagValue("PermSize", flagMap)); - printValMB("MaxPermSize = ", getFlagValue("MaxPermSize", flagMap)); + printValMB("MetaspaceSize = ", getFlagValue("MetaspaceSize", flagMap)); + printValMB("MaxMetaspaceSize = ", getFlagValue("MaxMetaspaceSize", flagMap)); printValMB("G1HeapRegionSize = ", HeapRegion.grainBytes()); System.out.println(); @@ -118,10 +118,6 @@ } else { throw new RuntimeException("unknown SharedHeap type : " + heap.getClass()); } - // Perm generation shared by the above - Generation permGen = sharedHeap.permGen(); - System.out.println("Perm Generation:"); - printGen(permGen); } else if (heap instanceof ParallelScavengeHeap) { ParallelScavengeHeap psh = (ParallelScavengeHeap) heap; PSYoungGen youngGen = psh.youngGen(); @@ -134,14 +130,6 @@ printValMB("used = ", oldGen.used()); printValMB("free = ", oldFree); System.out.println(alignment + (double)oldGen.used() * 100.0 / oldGen.capacity() + "% used"); - - PSPermGen permGen = psh.permGen(); - long permFree = permGen.capacity() - permGen.used(); - System.out.println("PS Perm Generation"); - printValMB("capacity = ", permGen.capacity()); - printValMB("used = ", permGen.used()); - printValMB("free = ", permFree); - System.out.println(alignment + (double)permGen.used() * 100.0 / permGen.capacity() + "% used"); } else { throw new RuntimeException("unknown CollectedHeap type : " + heap.getClass()); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java --- a/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/tools/PStack.java Sat Sep 01 13:25:18 2012 -0400 @@ -34,7 +34,7 @@ import sun.jvm.hotspot.runtime.*; public class PStack extends Tool { - // in non-verbose mode, methodOops are not printed in java frames + // in non-verbose mode, Method*s are not printed in java frames public PStack(boolean v, boolean concurrentLocks) { this.verbose = v; this.concurrentLocks = concurrentLocks; @@ -247,7 +247,7 @@ } if (verbose) { - sb.append(" methodOop:" + method.getHandle()); + sb.append(" Method*:" + method.getAddress()); } if (vf.isCompiledFrame()) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/tools/PermStat.java --- a/agent/src/share/classes/sun/jvm/hotspot/tools/PermStat.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/tools/PermStat.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -201,7 +201,7 @@ if (loaderKlass != null) { out.print(loaderKlass.getName().asString()); out.print('@'); - out.print(loader.getKlass().getHandle()); + out.print(loader.getKlass().getAddress()); } else { out.print(" null! "); } @@ -233,47 +233,45 @@ } // Don't count the shared empty arrays - private static long arraySize(Array arr) { - return arr.getLength() != 0L ? arr.getObjectSize() : 0L; + private static long arraySize(GenericArray arr) { + return arr.getLength() != 0L ? arr.getSize() : 0L; } private long computeSize(InstanceKlass k) { long size = 0L; // the InstanceKlass object itself - size += k.getObjectSize(); + size += k.getSize(); // Constant pool ConstantPool cp = k.getConstants(); - size += cp.getObjectSize(); - size += objectSize(cp.getCache()); - size += objectSize(cp.getTags()); + size += cp.getSize(); + if (cp.getCache() != null) { + size += cp.getCache().getSize(); + } + size += arraySize(cp.getTags()); // Interfaces size += arraySize(k.getLocalInterfaces()); size += arraySize(k.getTransitiveInterfaces()); // Inner classes - size += objectSize(k.getInnerClasses()); + size += arraySize(k.getInnerClasses()); // Fields - size += objectSize(k.getFields()); + size += arraySize(k.getFields()); // Methods - ObjArray methods = k.getMethods(); + MethodArray methods = k.getMethods(); int nmethods = (int) methods.getLength(); if (nmethods != 0L) { - size += methods.getObjectSize(); + size += methods.getSize(); for (int i = 0; i < nmethods; ++i) { - Method m = (Method) methods.getObjAt(i); - size += m.getObjectSize(); - size += objectSize(m.getConstMethod()); + Method m = methods.at(i); + size += m.getSize(); + size += m.getConstMethod().getSize(); } } - // MethodOrdering - an int array that records the original - // ordering of methods in the class file - size += arraySize(k.getMethodOrdering()); - return size; } } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/tools/StackTrace.java --- a/agent/src/share/classes/sun/jvm/hotspot/tools/StackTrace.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/tools/StackTrace.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ /** Traverses and prints the stack traces for all Java threads in the * remote VM */ public class StackTrace extends Tool { - // in non-verbose mode pc, sp and methodOop are not printed + // in non-verbose mode pc, sp and Method* are not printed public StackTrace(boolean v, boolean concurrentLocks) { this.verbose = v; this.concurrentLocks = concurrentLocks; @@ -89,7 +89,7 @@ tty.print(", pc=" + pc); } - tty.print(", methodOop=" + method.getHandle()); + tty.print(", Method*=" + method.getAddress()); } if (vf.isCompiledFrame()) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java --- a/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -73,7 +73,7 @@ return (short) cpCacheIndex; } else if (fmt.indexOf("JJJJ") >= 0) { // change byte-ordering and go via secondary cache entry - return (short) cpCache.getMainEntryAt(bytes.swapInt(cpCacheIndex)).getConstantPoolIndex(); + throw new InternalError("unimplemented"); } else if (fmt.indexOf("JJ") >= 0) { // change byte-ordering and go via cache return (short) cpCache.getEntryAt((int) (0xFFFF & bytes.swapShort((short)cpCacheIndex))).getConstantPoolIndex(); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java --- a/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/tools/jcore/ClassWriter.java Sat Sep 01 13:25:18 2012 -0400 @@ -28,6 +28,7 @@ import java.util.*; import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.utilities.*; public class ClassWriter implements /* imports */ ClassConstants { @@ -42,10 +43,10 @@ protected ConstantPool cpool; // Map between class name to index of type CONSTANT_Class - protected Map classToIndex = new HashMap(); + protected Map classToIndex = new HashMap(); // Map between any modified UTF-8 and it's constant pool index. - protected Map utf8ToIndex = new HashMap(); + protected Map utf8ToIndex = new HashMap(); // constant pool index for attribute names. @@ -61,12 +62,12 @@ protected short _signatureIndex; protected static int extractHighShortFromInt(int val) { - // must stay in sync with constantPoolOopDesc::name_and_type_at_put, method_at_put, etc. + // must stay in sync with ConstantPool::name_and_type_at_put, method_at_put, etc. return (val >> 16) & 0xFFFF; } protected static int extractLowShortFromInt(int val) { - // must stay in sync with constantPoolOopDesc::name_and_type_at_put, method_at_put, etc. + // must stay in sync with ConstantPool::name_and_type_at_put, method_at_put, etc. return val & 0xFFFF; } @@ -107,8 +108,8 @@ } protected void writeConstantPool() throws IOException { - final TypeArray tags = cpool.getTags(); - final long len = tags.getLength(); + final U1Array tags = cpool.getTags(); + final long len = tags.length(); dos.writeShort((short) len); if (DEBUG) debugMessage("constant pool length = " + len); @@ -118,7 +119,7 @@ // collect all modified UTF-8 Strings from Constant Pool for (ci = 1; ci < len; ci++) { - byte cpConstType = tags.getByteAt(ci); + int cpConstType = tags.at(ci); if(cpConstType == JVM_CONSTANT_Utf8) { Symbol sym = cpool.getSymbolAt(ci); utf8ToIndex.put(sym.asString(), new Short((short) ci)); @@ -182,9 +183,9 @@ if (DEBUG) debugMessage("Signature index = " + _signatureIndex); for(ci = 1; ci < len; ci++) { + int cpConstType = tags.at(ci); // write cp_info // write constant type - byte cpConstType = tags.getByteAt(ci); switch(cpConstType) { case JVM_CONSTANT_Utf8: { dos.writeByte(cpConstType); @@ -226,12 +227,11 @@ ci++; break; - case JVM_CONSTANT_Class: { - dos.writeByte(cpConstType); - // Klass already resolved. ConstantPool constains klassOop. - Klass refKls = (Klass) cpool.getObjAtRaw(ci); - String klassName = refKls.getName().asString(); - + case JVM_CONSTANT_Class: + case JVM_CONSTANT_UnresolvedClass: + case JVM_CONSTANT_UnresolvedClassInError: { + dos.writeByte(JVM_CONSTANT_Class); + String klassName = cpool.getKlassNameAt(ci).asString(); Short s = (Short) utf8ToIndex.get(klassName); classToIndex.put(klassName, new Short((short)ci)); dos.writeShort(s.shortValue()); @@ -239,40 +239,15 @@ break; } - // case JVM_CONSTANT_ClassIndex: - case JVM_CONSTANT_UnresolvedClassInError: - case JVM_CONSTANT_UnresolvedClass: { - dos.writeByte(JVM_CONSTANT_Class); - String klassName = cpool.getSymbolAt(ci).asString(); - - Short s = (Short) utf8ToIndex.get(klassName); - classToIndex.put(klassName, new Short((short) ci)); - - dos.writeShort(s.shortValue()); - if (DEBUG) debugMessage("CP[" + ci + "] = class " + s); - break; - } - case JVM_CONSTANT_String: { dos.writeByte(cpConstType); - String str = OopUtilities.stringOopToString(cpool.getObjAtRaw(ci)); + String str = cpool.getUnresolvedStringAt(ci).asString(); Short s = (Short) utf8ToIndex.get(str); dos.writeShort(s.shortValue()); if (DEBUG) debugMessage("CP[" + ci + "] = string " + s); break; } - // case JVM_CONSTANT_StringIndex: - case JVM_CONSTANT_UnresolvedString: { - dos.writeByte(JVM_CONSTANT_String); - String val = cpool.getSymbolAt(ci).asString(); - - Short s = (Short) utf8ToIndex.get(val); - dos.writeShort(s.shortValue()); - if (DEBUG) debugMessage("CP[" + ci + "] = string " + s); - break; - } - // all external, internal method/field references case JVM_CONSTANT_Fieldref: case JVM_CONSTANT_Methodref: @@ -363,15 +338,15 @@ } } protected void writeInterfaces() throws IOException { - ObjArray interfaces = klass.getLocalInterfaces(); - final int len = (int) interfaces.getLength(); + KlassArray interfaces = klass.getLocalInterfaces(); + final int len = interfaces.length(); if (DEBUG) debugMessage("number of interfaces = " + len); // write interfaces count dos.writeShort((short) len); for (int i = 0; i < len; i++) { - Klass k = (Klass) interfaces.getObjAt(i); + Klass k = interfaces.getAt(i); Short index = (Short) classToIndex.get(k.getName().asString()); dos.writeShort(index.shortValue()); if (DEBUG) debugMessage("\t" + index); @@ -379,7 +354,8 @@ } protected void writeFields() throws IOException { - final int length = klass.getJavaFieldsCount(); + U2Array fields = klass.getFields(); + final int length = (int) fields.length(); // write number of fields dos.writeShort((short) length); @@ -447,13 +423,13 @@ } protected void writeMethods() throws IOException { - ObjArray methods = klass.getMethods(); - final int len = (int) methods.getLength(); + MethodArray methods = klass.getMethods(); + final int len = methods.length(); // write number of methods dos.writeShort((short) len); if (DEBUG) debugMessage("number of methods = " + len); for (int m = 0; m < len; m++) { - writeMethod((Method) methods.getObjAt(m)); + writeMethod(methods.at(m)); } } @@ -683,8 +659,8 @@ if (genericSignature != null) classAttributeCount++; - TypeArray innerClasses = klass.getInnerClasses(); - final int numInnerClasses = (int) (innerClasses.getLength() / 4); + U2Array innerClasses = klass.getInnerClasses(); + final int numInnerClasses = (int) (innerClasses.length() / 4); if (numInnerClasses != 0) classAttributeCount++; @@ -724,7 +700,7 @@ if (DEBUG) debugMessage("class has " + numInnerClasses + " inner class entries"); for (int index = 0; index < numInnerClasses * 4; index++) { - dos.writeShort(innerClasses.getShortAt(index)); + dos.writeShort(innerClasses.at(index)); } } } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/tools/soql/SOQL.java --- a/agent/src/share/classes/sun/jvm/hotspot/tools/soql/SOQL.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/tools/soql/SOQL.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -126,7 +126,7 @@ for (int i = 0; i < klasses.length; i++) { out.print(klasses[i].getName().asString().replace('/', '.')); out.print(" @"); - out.println(klasses[i].getHandle()); + out.println(klasses[i].getAddress()); } } @@ -150,7 +150,8 @@ } // list immediate fields only - int numFields = klass.getJavaFieldsCount(); + U2Array fields = klass.getFields(); + int numFields = (int) fields.length(); ConstantPool cp = klass.getConstants(); out.println("fields"); if (numFields != 0) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/CodeViewerPanel.java --- a/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/CodeViewerPanel.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/CodeViewerPanel.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -66,7 +66,7 @@ JPanel topPanel = new JPanel(); topPanel.setLayout(new BorderLayout()); - topPanel.add(new JLabel("Enter PC or methodOop/klassOop Address: "), BorderLayout.WEST); + topPanel.add(new JLabel("Enter PC or Method*/Klass* Address: "), BorderLayout.WEST); address = new HistoryComboBox(); topPanel.add(address, BorderLayout.CENTER); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java --- a/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java Sat Sep 01 13:25:18 2012 -0400 @@ -313,7 +313,7 @@ buf.append(' '); } buf.append('@'); - buf.append(klass.getHandle().toString()); + buf.append(klass.getAddress().toString()); return buf.toString(); } @@ -322,7 +322,7 @@ } protected String genKlassHref(InstanceKlass klass) { - return genBaseHref() + "klass=" + klass.getHandle(); + return genBaseHref() + "klass=" + klass.getAddress(); } protected String genKlassLink(InstanceKlass klass) { @@ -403,12 +403,12 @@ buf.append(genMethodNameAndSignature(method)); buf.append(' '); buf.append('@'); - buf.append(method.getHandle().toString()); + buf.append(method.getAddress().toString()); return buf.toString(); } protected String genMethodHref(Method m) { - return genBaseHref() + "method=" + m.getHandle(); + return genBaseHref() + "method=" + m.getAddress(); } protected String genMethodLink(Method m) { @@ -498,7 +498,7 @@ buf.beginTag("tr"); buf.cell(Integer.toString(index)); - int ctag = (int) cpool.getTags().getByteAt((int) index); + int ctag = (int) cpool.getTags().at((int) index); switch (ctag) { case JVM_CONSTANT_Integer: buf.cell("JVM_CONSTANT_Integer"); @@ -526,7 +526,7 @@ case JVM_CONSTANT_UnresolvedClass: buf.cell("JVM_CONSTANT_UnresolvedClass"); - buf.cell(cpool.getSymbolAt(index).asString()); + buf.cell(cpool.getKlassNameAt(index).asString()); break; case JVM_CONSTANT_UnresolvedClassInError: @@ -536,7 +536,7 @@ case JVM_CONSTANT_Class: buf.cell("JVM_CONSTANT_Class"); - Klass klass = (Klass) cpool.getObjAtRaw(index); + Klass klass = (Klass) cpool.getKlassAt(index); if (klass instanceof InstanceKlass) { buf.cell(genKlassLink((InstanceKlass) klass)); } else { @@ -544,13 +544,6 @@ } break; - case JVM_CONSTANT_UnresolvedString: - buf.cell("JVM_CONSTANT_UnresolvedString"); - buf.cell("\"" + - escapeHTMLSpecialChars(cpool.getSymbolAt(index).asString()) + - "\""); - break; - case JVM_CONSTANT_Utf8: buf.cell("JVM_CONSTANT_Utf8"); buf.cell("\"" + @@ -561,7 +554,7 @@ case JVM_CONSTANT_String: buf.cell("JVM_CONSTANT_String"); buf.cell("\"" + - escapeHTMLSpecialChars(OopUtilities.stringOopToString(cpool.getObjAtRaw(index))) + "\""); + escapeHTMLSpecialChars(cpool.getUnresolvedStringAt(index).asString()) + "\""); break; case JVM_CONSTANT_Fieldref: @@ -637,7 +630,7 @@ } protected String genConstantPoolHref(ConstantPool cpool) { - return genBaseHref() + "cpool=" + cpool.getHandle(); + return genBaseHref() + "cpool=" + cpool.getAddress(); } protected String genConstantPoolTitle(ConstantPool cpool) { @@ -645,7 +638,7 @@ buf.append("Constant Pool of ["); buf.append(genKlassTitle((InstanceKlass) cpool.getPoolHolder())); buf.append("] @"); - buf.append(cpool.getHandle().toString()); + buf.append(cpool.getAddress().toString()); return buf.toString(); } @@ -678,10 +671,10 @@ for (int exp = 0; exp < exceptions.length; exp++) { short cpIndex = (short) exceptions[exp].getClassCPIndex(); ConstantPool.CPSlot obj = cpool.getSlotAt(cpIndex); - if (obj.isMetaData()) { + if (obj.isUnresolved()) { buf.li((obj.getSymbol()).asString().replace('/', '.')); } else { - buf.li(genKlassLink((InstanceKlass)obj.getOop())); + buf.li(genKlassLink((InstanceKlass)obj.getKlass())); } } buf.endTag("ul"); @@ -723,7 +716,7 @@ try { instrStr = escapeHTMLSpecialChars(instr.toString()); } catch (RuntimeException re) { - buf.append("exception during bytecode processing"); + buf.append("exception while printing " + instr.getBytecodeName()); buf.endTag("td"); buf.endTag("tr"); re.printStackTrace(); @@ -762,7 +755,7 @@ BytecodeLoadConstant ldc = (BytecodeLoadConstant) instr; if (ldc.isKlassConstant()) { Object oop = ldc.getKlass(); - if (oop instanceof Klass) { + if (oop instanceof InstanceKlass) { buf.append(""); @@ -812,10 +805,10 @@ ConstantPool.CPSlot obj = cpIndex == 0? null : cpool.getSlotAt(cpIndex); if (obj == null) { buf.cell("Any"); - } else if (obj.isMetaData()) { + } else if (obj.isUnresolved()) { buf.cell(obj.getSymbol().asString().replace('/', '.')); } else { - buf.cell(genKlassLink((InstanceKlass)obj.getOop())); + buf.cell(genKlassLink((InstanceKlass)obj.getKlass())); } buf.endTag("tr"); } @@ -843,7 +836,7 @@ } // genHTML for a given address. Address may be a PC or - // methodOop or klassOop. + // Method* or Klass*. public String genHTMLForAddress(String addrStr) { return genHTML(parseAddress(addrStr)); @@ -878,9 +871,9 @@ } // did not find nmethod. - // try methodOop, klassOop and constantPoolOop. + // try Method*, Klass* and ConstantPool*. try { - Oop obj = getOopAtAddress(pc); + Metadata obj = Metadata.instantiateWrapperFor(pc); if (obj != null) { if (obj instanceof Method) { return genHTML((Method) obj); @@ -891,6 +884,7 @@ } } } catch (Exception exp) { + exp.printStackTrace(); // ignore } @@ -1120,11 +1114,15 @@ Assert.that(klHandle != null, "scalar replaced object klass must be not NULL"); } Oop obj = VM.getVM().getObjectHeap().newOop(klHandle); - if (obj instanceof InstanceKlass) { - InstanceKlass kls = (InstanceKlass) obj; + // Obj is a Java mirror + Klass klass = java_lang_Class.asKlass(obj); + if (klass instanceof InstanceKlass) { + InstanceKlass kls = (InstanceKlass) klass; buf.append(" " + kls.getName().asString() + "={"); int flen = ov.fieldsSize(); - int klen = kls.getJavaFieldsCount(); + + U2Array klfields = kls.getFields(); + int klen = (int) klfields.length(); int findex = 0; for (int index = 0; index < klen; index++) { int accsFlags = kls.getFieldAccessFlags(index); @@ -1140,11 +1138,11 @@ } else { buf.append(" "); int flen = ov.fieldsSize(); - if (obj instanceof TypeArrayKlass) { - TypeArrayKlass kls = (TypeArrayKlass) obj; + if (klass instanceof TypeArrayKlass) { + TypeArrayKlass kls = (TypeArrayKlass) klass; buf.append(kls.getElementTypeName() + "[" + flen + "]"); - } else if (obj instanceof ObjArrayKlass) { - ObjArrayKlass kls = (ObjArrayKlass) obj; + } else if (klass instanceof ObjArrayKlass) { + ObjArrayKlass kls = (ObjArrayKlass) klass; Klass elobj = kls.getBottomKlass(); if (elobj instanceof InstanceKlass) { buf.append(elobj.getName().asString()); @@ -1687,7 +1685,7 @@ StringBuffer buf = new StringBuffer(genBaseHref()); buf.append("jcore_multiple="); for (int k = 0; k < klasses.length; k++) { - buf.append(klasses[k].getHandle().toString()); + buf.append(klasses[k].getAddress().toString()); buf.append(','); } return buf.toString(); @@ -1743,13 +1741,13 @@ protected String genHTMLListForMethods(InstanceKlass klass) { Formatter buf = new Formatter(genHTML); - ObjArray methods = klass.getMethods(); - int numMethods = (int) methods.getLength(); + MethodArray methods = klass.getMethods(); + int numMethods = methods.length(); if (numMethods != 0) { buf.h3("Methods"); buf.beginTag("ul"); for (int m = 0; m < numMethods; m++) { - Method mtd = (Method) methods.getObjAt(m); + Method mtd = methods.at(m); buf.li(genMethodLink(mtd) + ";"); } buf.endTag("ul"); @@ -1760,13 +1758,13 @@ protected String genHTMLListForInterfaces(InstanceKlass klass) { try { Formatter buf = new Formatter(genHTML); - ObjArray interfaces = klass.getLocalInterfaces(); - int numInterfaces = (int) interfaces.getLength(); + KlassArray interfaces = klass.getLocalInterfaces(); + int numInterfaces = interfaces.length(); if (numInterfaces != 0) { buf.h3("Interfaces"); buf.beginTag("ul"); for (int i = 0; i < numInterfaces; i++) { - InstanceKlass inf = (InstanceKlass) interfaces.getObjAt(i); + InstanceKlass inf = (InstanceKlass) interfaces.getAt(i); buf.li(genKlassLink(inf)); } buf.endTag("ul"); @@ -1822,7 +1820,8 @@ protected String genHTMLListForFields(InstanceKlass klass) { Formatter buf = new Formatter(genHTML); - int numFields = klass.getJavaFieldsCount(); + U2Array fields = klass.getFields(); + int numFields = klass.getAllFieldsCount(); if (numFields != 0) { buf.h3("Fields"); buf.beginList(); @@ -1857,7 +1856,7 @@ } protected String genKlassHierarchyHref(InstanceKlass klass) { - return genBaseHref() + "hierarchy=" + klass.getHandle(); + return genBaseHref() + "hierarchy=" + klass.getAddress(); } protected String genKlassHierarchyTitle(InstanceKlass klass) { @@ -1919,7 +1918,7 @@ } protected String genDumpKlassHref(InstanceKlass klass) { - return genBaseHref() + "jcore=" + klass.getHandle(); + return genBaseHref() + "jcore=" + klass.getAddress(); } protected String genDumpKlassLink(InstanceKlass klass) { @@ -1992,6 +1991,21 @@ return getOopAtAddress(addr); } + protected Klass getKlassAtAddress(String address) { + sun.jvm.hotspot.debugger.Address addr = parseAddress(address); + return (Klass)Metadata.instantiateWrapperFor(addr); + } + + protected Method getMethodAtAddress(String address) { + sun.jvm.hotspot.debugger.Address addr = parseAddress(address); + return (Method)Metadata.instantiateWrapperFor(addr); + } + + protected ConstantPool getConstantPoolAtAddress(String address) { + sun.jvm.hotspot.debugger.Address addr = parseAddress(address); + return (ConstantPool) Metadata.instantiateWrapperFor(addr); + } + private void dumpKlass(InstanceKlass kls) throws IOException { String klassName = kls.getName().asString(); klassName = klassName.replace('/', File.separatorChar); @@ -2082,18 +2096,18 @@ public String genHTMLForHyperlink(String href) { if (href.startsWith("klass=")) { href = href.substring(href.indexOf('=') + 1); - Oop obj = getOopAtAddress(href); + Klass k = getKlassAtAddress(href); if (Assert.ASSERTS_ENABLED) { - Assert.that(obj instanceof InstanceKlass, "class= href with improper InstanceKlass!"); + Assert.that(k instanceof InstanceKlass, "class= href with improper InstanceKlass!"); } - return genHTML((InstanceKlass) obj); + return genHTML((InstanceKlass) k); } else if (href.startsWith("method=")) { href = href.substring(href.indexOf('=') + 1); - Oop obj = getOopAtAddress(href); + Method obj = getMethodAtAddress(href); if (Assert.ASSERTS_ENABLED) { Assert.that(obj instanceof Method, "method= href with improper Method!"); } - return genHTML((Method) obj); + return genHTML(obj); } else if (href.startsWith("nmethod=")) { String addr = href.substring(href.indexOf('=') + 1); Object obj = VMObjectFactory.newObject(NMethod.class, parseAddress(addr)); @@ -2117,21 +2131,21 @@ return genInterpreterCodeletLinksPage(); } else if (href.startsWith("hierarchy=")) { href = href.substring(href.indexOf('=') + 1); - Oop obj = getOopAtAddress(href); + Klass obj = getKlassAtAddress(href); if (Assert.ASSERTS_ENABLED) { Assert.that(obj instanceof InstanceKlass, "class= href with improper InstanceKlass!"); } return genHTMLForKlassHierarchy((InstanceKlass) obj); } else if (href.startsWith("cpool=")) { href = href.substring(href.indexOf('=') + 1); - Oop obj = getOopAtAddress(href); + ConstantPool obj = getConstantPoolAtAddress(href); if (Assert.ASSERTS_ENABLED) { Assert.that(obj instanceof ConstantPool, "cpool= href with improper ConstantPool!"); } - return genHTML((ConstantPool) obj); + return genHTML(obj); } else if (href.startsWith("jcore=")) { href = href.substring(href.indexOf('=') + 1); - Oop obj = getOopAtAddress(href); + Klass obj = getKlassAtAddress(href); if (Assert.ASSERTS_ENABLED) { Assert.that(obj instanceof InstanceKlass, "jcore= href with improper InstanceKlass!"); } @@ -2142,7 +2156,7 @@ buf.genHTMLPrologue(); StringTokenizer st = new StringTokenizer(href, ","); while (st.hasMoreTokens()) { - Oop obj = getOopAtAddress(st.nextToken()); + Klass obj = getKlassAtAddress(st.nextToken()); if (Assert.ASSERTS_ENABLED) { Assert.that(obj instanceof InstanceKlass, "jcore_multiple= href with improper InstanceKlass!"); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ui/tree/BadAddressTreeNodeAdapter.java --- a/agent/src/share/classes/sun/jvm/hotspot/ui/tree/BadAddressTreeNodeAdapter.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ui/tree/BadAddressTreeNodeAdapter.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,36 +27,38 @@ import java.io.*; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.oops.*; +import sun.jvm.hotspot.runtime.VM; /** Simple wrapper for displaying bad addresses in the Inspector */ public class BadAddressTreeNodeAdapter extends FieldTreeNodeAdapter { - private boolean usingAddress; - private Address addr; - private long addrValue; + private String message; + + private static String generateMessage(long addr, String kind) { + return "** BAD " + kind + " " + Long.toHexString(addr) + " **"; + } - public BadAddressTreeNodeAdapter(Address addr, FieldIdentifier id) { - this(addr, id, false); + public BadAddressTreeNodeAdapter(Address addr, MetadataField field, boolean treeTableMode) { + super(field.getID(), treeTableMode); + message = generateMessage(addr.minus(null), "METADATA"); + } + + public BadAddressTreeNodeAdapter(Address addr, OopField field, boolean treeTableMode) { + super(field.getID(), treeTableMode); + message = generateMessage(addr.minus(null), "OOP"); + } + + public BadAddressTreeNodeAdapter(OopHandle addr, FieldIdentifier id, boolean treeTableMode) { + super(id, treeTableMode); + message = generateMessage(addr.minus(null), "OOP"); } /** The address may be null (for address fields of structures which are null); the FieldIdentifier may also be null (for the root node). */ - public BadAddressTreeNodeAdapter(Address addr, FieldIdentifier id, boolean treeTableMode) { + public BadAddressTreeNodeAdapter(long addr, FieldIdentifier id, boolean treeTableMode) { super(id, treeTableMode); - this.addr = addr; - usingAddress = true; - } - - public BadAddressTreeNodeAdapter(long addr, FieldIdentifier id) { - this(addr, id, false); - } - - /** He FieldIdentifier may be null (for the root node). */ - public BadAddressTreeNodeAdapter(long addrValue, FieldIdentifier id, boolean treeTableMode) { - super(id, treeTableMode); - this.addrValue = addrValue; - usingAddress = false; + message = generateMessage(addr, "ADDRESS"); } public int getChildCount() { @@ -76,17 +78,6 @@ } public String getValue() { - // FIXME: should have this better factored to not have to replicate this code - String addrString = null; - if (usingAddress) { - if (addr == null) { - addrString = "0x0"; - } else { - addrString = addr.toString(); + return message; } - } else { - addrString = "0x" + Long.toHexString(addrValue); } - return "** BAD ADDRESS " + addrString + " **"; - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ui/tree/BadOopTreeNodeAdapter.java --- a/agent/src/share/classes/sun/jvm/hotspot/ui/tree/BadOopTreeNodeAdapter.java Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.ui.tree; - -import java.io.*; -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.oops.*; - -/** Simple wrapper for displaying bad oops in the Inspector */ - -public class BadOopTreeNodeAdapter extends FieldTreeNodeAdapter { - private OopHandle oop; - - public BadOopTreeNodeAdapter(OopHandle oop, FieldIdentifier id) { - this(oop, id, false); - } - - /** The oop may be null (for oop fields of oops which are null); the - FieldIdentifier may also be null (for the root node). */ - public BadOopTreeNodeAdapter(OopHandle oop, FieldIdentifier id, boolean treeTableMode) { - super(id, treeTableMode); - this.oop = oop; - } - - public int getChildCount() { - return 0; - } - - public SimpleTreeNode getChild(int index) { - throw new RuntimeException("Should not call this"); - } - - public boolean isLeaf() { - return true; - } - - public int getIndexOfChild(SimpleTreeNode child) { - throw new RuntimeException("Should not call this"); - } - - public String getValue() { - return "** BAD OOP " + oop + " **"; - } -} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ui/tree/CTypeTreeNodeAdapter.java --- a/agent/src/share/classes/sun/jvm/hotspot/ui/tree/CTypeTreeNodeAdapter.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ui/tree/CTypeTreeNodeAdapter.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -133,11 +133,11 @@ Oop oop = VM.getVM().getObjectHeap().newOop(handle); return new OopTreeNodeAdapter(oop, cf, getTreeTableMode()); } catch (AddressException e) { - return new BadOopTreeNodeAdapter(handle, + return new BadAddressTreeNodeAdapter(handle, new CTypeFieldIdentifier(type, f), getTreeTableMode()); } catch (UnknownOopException e) { - return new BadOopTreeNodeAdapter(handle, + return new BadAddressTreeNodeAdapter(handle, new CTypeFieldIdentifier(type, f), getTreeTableMode()); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ui/tree/MetadataTreeNodeAdapter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/ui/tree/MetadataTreeNodeAdapter.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,274 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.ui.tree; + +import java.io.*; +import sun.jvm.hotspot.oops.*; +import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.runtime.*; + +/** An adapter class which allows oops to be displayed in a tree via + the SimpleTreeNode interface. FIXME: must attach this to some sort + of policy object which determines how to display names and whether + VM fields should be shown. (Must also fix oop visitation mechanism + in oops package.) */ + +public class MetadataTreeNodeAdapter extends FieldTreeNodeAdapter { + private Metadata metadata; + + /** The metadata may be null (for metadata fields of metadatas which are null); the + FieldIdentifier may also be null (for the root node). + treeTableMode defaults to false. */ + public MetadataTreeNodeAdapter(Metadata metadata, FieldIdentifier id) { + this(metadata, id, false); + } + + /** The metadata may be null (for metadata fields of metadatas which are null); the + FieldIdentifier may also be null (for the root node). */ + public MetadataTreeNodeAdapter(Metadata metadata, FieldIdentifier id, boolean treeTableMode) { + super(id, treeTableMode); + this.metadata = metadata; + } + + public Metadata getMetadata() { + return metadata; + } + + public int getChildCount() { + if (metadata == null) { + return 0; + } + + Counter c = new Counter(); + metadata.iterate(c); + return c.getNumFields() + (VM.getVM().getRevPtrs() == null ? 0 : 1); + } + + public SimpleTreeNode getChild(int index) { + if (metadata == null) { + return null; + } + + Fetcher f = new Fetcher(index); + metadata.iterate(f); + return f.getChild(); + } + + public boolean isLeaf() { + return (metadata == null); + } + + public int getIndexOfChild(SimpleTreeNode child) { + if (child instanceof RevPtrsTreeNodeAdapter) { + // assert(VM.getVM().getRevPtrs() != null, "Only created from revptrs"); + return 0; + } + FieldIdentifier id = ((FieldTreeNodeAdapter) child).getID(); + Finder f = new Finder(id); + metadata.iterate(f); + return f.getIndex() + (VM.getVM().getRevPtrs() == null ? 0 : 1); + } + + public String getValue() { + if (metadata != null) { + // FIXME: choose style of printing depending on whether we're + // displaying VM fields? Want to make Java objects look like + // Java objects. + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + metadata.printValueOn(new PrintStream(bos)); + return bos.toString(); + } + return "null"; + } + + /** Should be applied to one metadata at a time, then have the number of + fields fetched. FIXME: want this to distinguish between VM and + non-VM fields. */ + static class Counter extends DefaultMetadataVisitor { + private int numFields; + + public int getNumFields() { + return numFields; + } + + public void prologue() { + numFields = 0; + } + + public void doMetadata(MetadataField field, boolean isVMField) { ++numFields; } + public void doOop(OopField field, boolean isVMField) { ++numFields; } + public void doByte(ByteField field, boolean isVMField) { ++numFields; } + public void doChar(CharField field, boolean isVMField) { ++numFields; } + public void doBoolean(BooleanField field, boolean isVMField) { ++numFields; } + public void doShort(ShortField field, boolean isVMField) { ++numFields; } + public void doInt(IntField field, boolean isVMField) { ++numFields; } + public void doLong(LongField field, boolean isVMField) { ++numFields; } + public void doFloat(FloatField field, boolean isVMField) { ++numFields; } + public void doDouble(DoubleField field, boolean isVMField) { ++numFields; } + public void doCInt(CIntField field, boolean isVMField) { ++numFields; } + } + + /** Creates a new SimpleTreeNode for the given field. FIXME: want + this to distinguish between VM and non-VM fields. */ + class Fetcher extends DefaultMetadataVisitor { + private int index; + private int curField; + private SimpleTreeNode child; + + public Fetcher(int index) { + this.index = index; + } + + public SimpleTreeNode getChild() { + return child; + } + + public void prologue() { + curField = 0; + } + + public void doMetadata(MetadataField field, boolean isVMField) { + if (curField == index) { + try { + child = new MetadataTreeNodeAdapter(field.getValue(getObj()), field.getID(), getTreeTableMode()); + } catch (AddressException e) { + child = new BadAddressTreeNodeAdapter(getObj().getAddress().getAddressAt(field.getOffset()), field, getTreeTableMode()); + } catch (UnknownOopException e) { + child = new BadAddressTreeNodeAdapter(getObj().getAddress().getAddressAt(field.getOffset()), field, getTreeTableMode()); + } + } + ++curField; + } + + public void doOop(OopField field, boolean isVMField) { + if (curField == index) { + try { + child = new OopTreeNodeAdapter(field.getValue(getObj()), field.getID(), getTreeTableMode()); + } catch (AddressException e) { + child = new BadAddressTreeNodeAdapter(field.getValueAsOopHandle(getObj()), field, getTreeTableMode()); + } catch (UnknownOopException e) { + child = new BadAddressTreeNodeAdapter(field.getValueAsOopHandle(getObj()), field, getTreeTableMode()); + } + } + ++curField; + } + + public void doByte(ByteField field, boolean isVMField) { + if (curField == index) { + child = new LongTreeNodeAdapter(field.getValue(getObj()) & 0xFF, field.getID(), getTreeTableMode()); + } + ++curField; + } + + public void doChar(CharField field, boolean isVMField) { + if (curField == index) { + child = new CharTreeNodeAdapter(field.getValue(getObj()), field.getID(), getTreeTableMode()); + } + ++curField; + } + + public void doBoolean(BooleanField field, boolean isVMField) { + if (curField == index) { + child = new BooleanTreeNodeAdapter(field.getValue(getObj()), field.getID(), getTreeTableMode()); + } + ++curField; + } + + public void doShort(ShortField field, boolean isVMField) { + if (curField == index) { + child = new LongTreeNodeAdapter(field.getValue(getObj()) & 0xFFFF, field.getID(), getTreeTableMode()); + } + ++curField; + } + + public void doInt(IntField field, boolean isVMField) { + if (curField == index) { + child = new LongTreeNodeAdapter(field.getValue(getObj()) & 0xFFFFFFFF, field.getID(), getTreeTableMode()); + } + ++curField; + } + + public void doLong(LongField field, boolean isVMField) { + if (curField == index) { + child = new LongTreeNodeAdapter(field.getValue(getObj()), field.getID(), getTreeTableMode()); + } + ++curField; + } + + public void doFloat(FloatField field, boolean isVMField) { + if (curField == index) { + child = new FloatTreeNodeAdapter(field.getValue(getObj()), field.getID(), getTreeTableMode()); + } + ++curField; + } + + public void doDouble(DoubleField field, boolean isVMField) { + if (curField == index) { + child = new DoubleTreeNodeAdapter(field.getValue(getObj()), field.getID(), getTreeTableMode()); + } + ++curField; + } + + public void doCInt(CIntField field, boolean isVMField) { + if (curField == index) { + child = new LongTreeNodeAdapter(field.getValue(getObj()), field.getID(), getTreeTableMode()); + } + ++curField; + } + } + + /** Finds the index of the given FieldIdentifier. */ + static class Finder extends DefaultMetadataVisitor { + private FieldIdentifier id; + private int curField; + private int index; + + public Finder(FieldIdentifier id) { + this.id = id; + } + + /** Returns -1 if not found */ + public int getIndex() { + return index; + } + + public void prologue() { + curField = 0; + index = -1; + } + + public void doMetadata(MetadataField field, boolean isVMField) { if (field.getID().equals(id)) { index = curField; } ++curField; } + public void doOop(OopField field, boolean isVMField) { if (field.getID().equals(id)) { index = curField; } ++curField; } + public void doByte(ByteField field, boolean isVMField) { if (field.getID().equals(id)) { index = curField; } ++curField; } + public void doChar(CharField field, boolean isVMField) { if (field.getID().equals(id)) { index = curField; } ++curField; } + public void doBoolean(BooleanField field, boolean isVMField) { if (field.getID().equals(id)) { index = curField; } ++curField; } + public void doShort(ShortField field, boolean isVMField) { if (field.getID().equals(id)) { index = curField; } ++curField; } + public void doInt(IntField field, boolean isVMField) { if (field.getID().equals(id)) { index = curField; } ++curField; } + public void doLong(LongField field, boolean isVMField) { if (field.getID().equals(id)) { index = curField; } ++curField; } + public void doFloat(FloatField field, boolean isVMField) { if (field.getID().equals(id)) { index = curField; } ++curField; } + public void doDouble(DoubleField field, boolean isVMField) { if (field.getID().equals(id)) { index = curField; } ++curField; } + public void doCInt(CIntField field, boolean isVMField) { if (field.getID().equals(id)) { index = curField; } ++curField; } + } +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/ui/tree/OopTreeNodeAdapter.java --- a/agent/src/share/classes/sun/jvm/hotspot/ui/tree/OopTreeNodeAdapter.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/ui/tree/OopTreeNodeAdapter.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -124,6 +124,7 @@ numFields = 0; } + public void doMetadata(MetadataField field, boolean isVMField) { ++numFields; } public void doOop(OopField field, boolean isVMField) { ++numFields; } public void doByte(ByteField field, boolean isVMField) { ++numFields; } public void doChar(CharField field, boolean isVMField) { ++numFields; } @@ -155,14 +156,27 @@ curField = 0; } + public void doMetadata(MetadataField field, boolean isVMField) { + if (curField == index) { + try { + child = new MetadataTreeNodeAdapter(field.getValue(getObj()), field.getID(), getTreeTableMode()); + } catch (AddressException e) { + child = new BadAddressTreeNodeAdapter(getObj().getHandle().getAddressAt(field.getOffset()), field, getTreeTableMode()); + } catch (UnknownOopException e) { + child = new BadAddressTreeNodeAdapter(getObj().getHandle().getAddressAt(field.getOffset()), field, getTreeTableMode()); + } + } + ++curField; + } + public void doOop(OopField field, boolean isVMField) { if (curField == index) { try { child = new OopTreeNodeAdapter(field.getValue(getObj()), field.getID(), getTreeTableMode()); } catch (AddressException e) { - child = new BadOopTreeNodeAdapter(field.getValueAsOopHandle(getObj()), field.getID(), getTreeTableMode()); + child = new BadAddressTreeNodeAdapter(field.getValueAsOopHandle(getObj()), field, getTreeTableMode()); } catch (UnknownOopException e) { - child = new BadOopTreeNodeAdapter(field.getValueAsOopHandle(getObj()), field.getID(), getTreeTableMode()); + child = new BadAddressTreeNodeAdapter(field.getValueAsOopHandle(getObj()), field, getTreeTableMode()); } } ++curField; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/AbstractHeapGraphWriter.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/AbstractHeapGraphWriter.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/AbstractHeapGraphWriter.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -217,14 +217,7 @@ oop.iterate(new DefaultOopVisitor() { public void doOop(OopField field, boolean isVMField) { try { - Oop ref = field.getValue(oop); - if (ref instanceof TypeArray || - ref instanceof ObjArray || - ref instanceof Instance) { writeReferenceField(oop, field); - } else { - writeInternalReferenceField(oop, field); - } } catch (IOException exp) { throw new RuntimeException(exp); } @@ -299,11 +292,88 @@ } } - // object field writers - protected void writeInternalReferenceField(Oop oop, OopField field) - throws IOException { + // write instance fields of given object + protected void writeObjectFields(final InstanceKlass oop) throws IOException { + try { + oop.iterateStaticFields(new DefaultOopVisitor() { + public void doOop(OopField field, boolean isVMField) { + try { + writeReferenceField(null, field); + } catch (IOException exp) { + throw new RuntimeException(exp); + } } + public void doByte(ByteField field, boolean isVMField) { + try { + writeByteField(null, field); + } catch (IOException exp) { + throw new RuntimeException(exp); + } + } + + public void doChar(CharField field, boolean isVMField) { + try { + writeCharField(null, field); + } catch (IOException exp) { + throw new RuntimeException(exp); + } + } + + public void doBoolean(BooleanField field, boolean vField) { + try { + writeBooleanField(null, field); + } catch (IOException exp) { + throw new RuntimeException(exp); + } + } + + public void doShort(ShortField field, boolean isVMField) { + try { + writeShortField(null, field); + } catch (IOException exp) { + throw new RuntimeException(exp); + } + } + + public void doInt(IntField field, boolean isVMField) { + try { + writeIntField(null, field); + } catch (IOException exp) { + throw new RuntimeException(exp); + } + } + + public void doLong(LongField field, boolean isVMField) { + try { + writeLongField(null, field); + } catch (IOException exp) { + throw new RuntimeException(exp); + } + } + + public void doFloat(FloatField field, boolean isVMField) { + try { + writeFloatField(null, field); + } catch (IOException exp) { + throw new RuntimeException(exp); + } + } + + public void doDouble(DoubleField field, boolean vField) { + try { + writeDoubleField(null, field); + } catch (IOException exp) { + throw new RuntimeException(exp); + } + } + }); + } catch (RuntimeException re) { + handleRuntimeException(re); + } + } + + // object field writers protected void writeReferenceField(Oop oop, OopField field) throws IOException { } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/ConstantTag.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/ConstantTag.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/ConstantTag.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,10 +47,11 @@ private static final int JVM_CONSTANT_Invalid = 0; // For bad value initialization private static final int JVM_CONSTANT_UnresolvedClass = 100; // Temporary tag until actual use private static final int JVM_CONSTANT_ClassIndex = 101; // Temporary tag while constructing constant pool - private static final int JVM_CONSTANT_UnresolvedString = 102; // Temporary tag until actual use - private static final int JVM_CONSTANT_StringIndex = 103; // Temporary tag while constructing constant pool - private static final int JVM_CONSTANT_UnresolvedClassInError = 104; // Resolution failed - private static final int JVM_CONSTANT_Object = 105; // Required for BoundMethodHandle arguments. + private static final int JVM_CONSTANT_StringIndex = 102; // Temporary tag while constructing constant pool + private static final int JVM_CONSTANT_UnresolvedClassInError = 103; // Resolution failed + private static final int JVM_CONSTANT_MethodHandleInError = 104; // Error tag due to resolution error + private static final int JVM_CONSTANT_MethodTypeInError = 105; // Error tag due to resolution error + private static final int JVM_CONSTANT_Object = 106; // Required for BoundMethodHandle arguments. // JVM_CONSTANT_MethodHandle subtypes //FIXME: connect these to data structure private static int JVM_REF_getField = 1; @@ -93,7 +94,6 @@ } public boolean isUnresolveKlassInError() { return tag == JVM_CONSTANT_UnresolvedClassInError; } public boolean isKlassIndex() { return tag == JVM_CONSTANT_ClassIndex; } - public boolean isUnresolvedString() { return tag == JVM_CONSTANT_UnresolvedString; } public boolean isStringIndex() { return tag == JVM_CONSTANT_StringIndex; } public boolean isObject() { return tag == JVM_CONSTANT_Object; } @@ -117,8 +117,9 @@ case JVM_CONSTANT_String : case JVM_CONSTANT_UnresolvedClass : case JVM_CONSTANT_UnresolvedClassInError : + case JVM_CONSTANT_MethodHandleInError : + case JVM_CONSTANT_MethodTypeInError : case JVM_CONSTANT_ClassIndex : - case JVM_CONSTANT_UnresolvedString : case JVM_CONSTANT_StringIndex : case JVM_CONSTANT_MethodHandle : case JVM_CONSTANT_MethodType : @@ -128,4 +129,8 @@ throw new InternalError("unexpected tag: " + tag); } } + + public String toString() { + return "ConstantTag:" + Integer.toString(tag); } +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/GenericArray.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/GenericArray.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,91 @@ +package sun.jvm.hotspot.utilities; + +import java.util.Observable; +import java.util.Observer; + +import sun.jvm.hotspot.debugger.Address; +import sun.jvm.hotspot.oops.ArrayKlass; +import sun.jvm.hotspot.oops.CIntField; +import sun.jvm.hotspot.oops.Oop; +import sun.jvm.hotspot.runtime.VM; +import sun.jvm.hotspot.runtime.VMObject; +import sun.jvm.hotspot.types.AddressField; +import sun.jvm.hotspot.types.Type; +import sun.jvm.hotspot.types.TypeDataBase; +import sun.jvm.hotspot.types.WrongTypeException; + +/** + * The base class for the mirrors of the Array C++ classes. + */ +public abstract class GenericArray extends VMObject { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + // Array is arbitrarily chosen to get the fields in Array. + Type type = db.lookupType("Array"); + lengthField = new CIntField(type.getCIntegerField("_length"), 0); + } + + private static long sizeOfArray; + private static CIntField lengthField; + + private long dataFieldOffset; + + public GenericArray(Address addr, long dataOffset) { + super(addr); + dataFieldOffset = dataOffset; + } + + public int length() { + return (int)lengthField.getValue(this); + } + + // for compatibility with TypeArray + public int getLength() { + return length(); + } + + /** + * Gets the element at the given index. + */ + protected long getIntegerAt(int index) { + if (index < 0 || index >= length()) throw new ArrayIndexOutOfBoundsException(index + " " + length()); + + Type elemType = getElemType(); + if (!getElemType().isCIntegerType()) throw new RuntimeException("elemType must be of CInteger type"); + + Address data = getAddress().addOffsetTo(dataFieldOffset); + long elemSize = elemType.getSize(); + + return data.getCIntegerAt(index * elemSize, elemSize, false); + } + + protected Address getAddressAt(int index) { + if (index < 0 || index >= length()) throw new ArrayIndexOutOfBoundsException(index); + + Type elemType = getElemType(); + if (getElemType().isCIntegerType()) throw new RuntimeException("elemType must not be of CInteger type"); + + Address data = getAddress().addOffsetTo(dataFieldOffset); + long elemSize = elemType.getSize(); + + return data.getAddressAt(index * elemSize); + } + + private long byteSizeof(int length) { return sizeOfArray + length * getElemType().getSize(); } + + public long getSize() { + return VM.getVM().alignUp(byteSizeof(length()), VM.getVM().getBytesPerWord()) / VM.getVM().getBytesPerWord(); + } + + /** + * The element type of this array. + */ + public abstract Type getElemType(); +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/HeapGXLWriter.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/HeapGXLWriter.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/HeapGXLWriter.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -179,7 +179,7 @@ writeAttribute("object-size", "int", Long.toString(sizeInBytes)); // write static fields of this class. - writeObjectFields(reflectedType); + writeObjectFields((InstanceKlass)reflectedType); } } out.println(""); @@ -193,10 +193,10 @@ if (isInstanceKlass) { // write edges for directly implemented interfaces InstanceKlass ik = (InstanceKlass) reflectedType; - ObjArray interfaces = ik.getLocalInterfaces(); - final int len = (int) interfaces.getLength(); + KlassArray interfaces = ik.getLocalInterfaces(); + final int len = interfaces.length(); for (int i = 0; i < len; i++) { - Klass k = (Klass) interfaces.getObjAt(i); + Klass k = interfaces.getAt(i); writeEdge(instance, k.getJavaMirror(), "implements"); } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/HeapHprofBinWriter.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -721,7 +721,7 @@ ClassData cd = (ClassData) classDataCache.get(klass); if (Assert.ASSERTS_ENABLED) { - Assert.that(cd != null, "can not get class data for " + klass.getName().asString() + klass.getHandle()); + Assert.that(cd != null, "can not get class data for " + klass.getName().asString() + klass.getAddress()); } List fields = cd.fields; int size = cd.instSize; diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/IntArray.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/IntArray.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,42 @@ +package sun.jvm.hotspot.utilities; + +import java.util.Observable; +import java.util.Observer; + +import sun.jvm.hotspot.debugger.Address; +import sun.jvm.hotspot.runtime.VM; +import sun.jvm.hotspot.types.Type; +import sun.jvm.hotspot.types.TypeDataBase; +import sun.jvm.hotspot.types.WrongTypeException; + +public class IntArray extends GenericArray { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + elemType = db.lookupType("int"); + + Type type = db.lookupType("Array"); + dataFieldOffset = type.getAddressField("_data").getOffset(); + } + + private static long dataFieldOffset; + protected static Type elemType; + + public IntArray(Address addr) { + super(addr, dataFieldOffset); + } + + public int at(int i) { + return (int)getIntegerAt(i); + } + + public Type getElemType() { + return elemType; + } +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/KlassArray.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/KlassArray.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.utilities; + +import java.util.Observable; +import java.util.Observer; + +import sun.jvm.hotspot.debugger.Address; +import sun.jvm.hotspot.oops.Metadata; +import sun.jvm.hotspot.oops.Klass; +import sun.jvm.hotspot.runtime.VM; +import sun.jvm.hotspot.types.Type; +import sun.jvm.hotspot.types.TypeDataBase; +import sun.jvm.hotspot.types.WrongTypeException; + +public class KlassArray extends GenericArray { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + elemType = db.lookupType("Klass*"); + + Type type = db.lookupType("Array"); + dataFieldOffset = type.getAddressField("_data").getOffset(); + } + + private static long dataFieldOffset; + protected static Type elemType; + + public KlassArray(Address addr) { + super(addr, dataFieldOffset); + } + + public Klass getAt(int i) { + return (Klass) Metadata.instantiateWrapperFor(getAddressAt(i)); + } + + public Type getElemType() { + return elemType; + } +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/MethodArray.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/MethodArray.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.utilities; + +import java.util.Observable; +import java.util.Observer; + +import sun.jvm.hotspot.debugger.Address; +import sun.jvm.hotspot.oops.Metadata; +import sun.jvm.hotspot.oops.Method; +import sun.jvm.hotspot.runtime.VM; +import sun.jvm.hotspot.types.Type; +import sun.jvm.hotspot.types.TypeDataBase; +import sun.jvm.hotspot.types.WrongTypeException; + +public class MethodArray extends GenericArray { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + elemType = db.lookupType("Method*"); + + Type type = db.lookupType("Array"); + dataFieldOffset = type.getAddressField("_data").getOffset(); + } + + private static long dataFieldOffset; + protected static Type elemType; + + public MethodArray(Address addr) { + super(addr, dataFieldOffset); + } + + public Method at(int i) { + return (Method) Metadata.instantiateWrapperFor(getAddressAt(i)); + } + + public Type getElemType() { + return elemType; + } +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/ObjectReader.java Sat Sep 01 13:25:18 2012 -0400 @@ -654,6 +654,14 @@ return oopToObjMap.get(oop); } + protected void putIntoObjTable(Metadata oop, Object obj) { + oopToObjMap.put(oop, obj); + } + + protected Object getFromObjTable(Metadata oop) { + return oopToObjMap.get(oop); + } + protected class SignatureParser extends SignatureIterator { protected Vector tmp = new Vector(); // Vector diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/PointerFinder.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/PointerFinder.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/PointerFinder.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,13 +50,8 @@ } } - if (loc.gen == null) { - // Should be in perm gen - Generation permGen = genheap.permGen(); if (Assert.ASSERTS_ENABLED) { - Assert.that(permGen.isIn(a), "should have been in ordinary or perm gens if it's in the heap"); - } - loc.permGen = permGen; + Assert.that(loc.gen != null, "Should have found this in a generation"); } if (VM.getVM().getUseTLAB()) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/PointerLocation.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/PointerLocation.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/PointerLocation.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,7 +47,6 @@ CollectedHeap heap; Generation gen; - Generation permGen; // If UseTLAB was enabled and the pointer was found in a // currently-active TLAB, these will be set @@ -81,7 +80,7 @@ } public boolean isInHeap() { - return (heap != null || (gen != null) || (permGen != null)); + return (heap != null || (gen != null)); } public boolean isInNewGen() { @@ -92,21 +91,13 @@ return ((gen != null) && (gen.level() == 1)); } - public boolean isInPermGen() { - return (permGen != null); - } - public boolean inOtherGen() { - return (!isInNewGen() && !isInOldGen() && !isInPermGen()); + return (!isInNewGen() && !isInOldGen()); } /** Only valid if isInHeap() */ public Generation getGeneration() { - if (gen != null) { return gen; - } else { - return permGen; - } } /** This may be true if isInNewGen is also true */ @@ -216,8 +207,6 @@ tty.print("In new generation "); } else if (isInOldGen()) { tty.print("In old generation "); - } else if (isInPermGen()) { - tty.print("In perm generation "); } else if (gen != null) { tty.print("In Generation " + getGeneration().level()); } else { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/ReversePtrsAnalysis.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/ReversePtrsAnalysis.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/ReversePtrsAnalysis.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -112,20 +112,22 @@ doJNIHandleBlock(handles.weakGlobalHandles(), new RootVisitor("Weak global JNI handle root")); - // Do Java-level static fields in perm gen - heap.iteratePerm(new DefaultHeapVisitor() { - public boolean doObj(Oop obj) { - if (obj instanceof InstanceKlass) { - final InstanceKlass ik = (InstanceKlass) obj; + // Do Java-level static fields + SystemDictionary sysDict = VM.getVM().getSystemDictionary(); + sysDict.allClassesDo(new SystemDictionary.ClassVisitor() { + + public void visit(Klass k) { + if (k instanceof InstanceKlass) { + final InstanceKlass ik = (InstanceKlass)k; ik.iterateStaticFields( new DefaultOopVisitor() { public void doOop(OopField field, boolean isVMField) { Oop next = field.getValue(getObj()); - LivenessPathElement lp = new LivenessPathElement(null, - new NamedFieldIdentifier("Static field \"" + + NamedFieldIdentifier nfi = new NamedFieldIdentifier("Static field \"" + field.getID().getName() + "\" in class \"" + - ik.getName().asString() + "\"")); + ik.getName().asString() + "\""); + LivenessPathElement lp = new LivenessPathElement(null, nfi); rp.put(lp, next); try { markAndTraverse(next); @@ -144,7 +146,6 @@ } }); } - return false; } }); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/RobustOopDeterminator.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/RobustOopDeterminator.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/RobustOopDeterminator.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,8 @@ import java.util.*; import sun.jvm.hotspot.debugger.*; import sun.jvm.hotspot.memory.*; +import sun.jvm.hotspot.oops.Metadata; +import sun.jvm.hotspot.oops.Klass; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; @@ -38,7 +40,7 @@ states than the ObjectHeap code. */ public class RobustOopDeterminator { - private static OopField klassField; + private static AddressField klassField; static { VM.registerVMInitializedObserver(new Observer() { @@ -51,10 +53,11 @@ private static void initialize(TypeDataBase db) { Type type = db.lookupType("oopDesc"); - if (VM.getVM().isCompressedOopsEnabled()) { - klassField = type.getNarrowOopField("_metadata._compressed_klass"); + if (VM.getVM().isCompressedHeadersEnabled()) { + // klassField = type.getNarrowOopField("_metadata._compressed_klass"); + throw new InternalError("unimplemented"); } else { - klassField = type.getOopField("_metadata._klass"); + klassField = type.getAddressField("_metadata._klass"); } } @@ -66,18 +69,10 @@ return false; } try { - for (int i = 0; i < 4; ++i) { - OopHandle next = klassField.getValue(oop); - if (next == null) { - return false; - } - if (next.equals(oop)) { + // Try to instantiate the Klass + Metadata.instantiateWrapperFor(klassField.getValue(oop)); return true; } - oop = next; - } - return false; - } catch (AddressException e) { return false; } diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/U1Array.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/U1Array.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.utilities; + +import java.util.Observable; +import java.util.Observer; + +import sun.jvm.hotspot.debugger.Address; +import sun.jvm.hotspot.runtime.VM; +import sun.jvm.hotspot.types.Type; +import sun.jvm.hotspot.types.TypeDataBase; +import sun.jvm.hotspot.types.WrongTypeException; + +public class U1Array extends GenericArray { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + elemType = db.lookupType("u1"); + + Type type = db.lookupType("Array"); + dataFieldOffset = type.getAddressField("_data").getOffset(); + } + + private static long dataFieldOffset; + protected static Type elemType; + + public U1Array(Address addr) { + super(addr, dataFieldOffset); + } + + public byte at(int i) { + return (byte)getIntegerAt(i); + } + + public Type getElemType() { + return elemType; + } +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/U2Array.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/U2Array.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.utilities; + +import java.util.Observable; +import java.util.Observer; + +import sun.jvm.hotspot.debugger.Address; +import sun.jvm.hotspot.runtime.VM; +import sun.jvm.hotspot.types.Type; +import sun.jvm.hotspot.types.TypeDataBase; +import sun.jvm.hotspot.types.WrongTypeException; + +public class U2Array extends GenericArray { + static { + VM.registerVMInitializedObserver(new Observer() { + public void update(Observable o, Object data) { + initialize(VM.getVM().getTypeDataBase()); + } + }); + } + + private static synchronized void initialize(TypeDataBase db) throws WrongTypeException { + elemType = db.lookupType("u2"); + Type type = db.lookupType("Array"); + dataFieldOffset = type.getAddressField("_data").getOffset(); + } + + private static long dataFieldOffset; + protected static Type elemType; + + public U2Array(Address addr) { + super(addr, dataFieldOffset); + } + + public short at(int i) { + return (short)getIntegerAt(i); + } + + public Type getElemType() { + return elemType; + } +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaFactory.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaFactory.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaFactory.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,6 +34,7 @@ public JSJavaField newJSJavaField(Field f); public JSJavaThread newJSJavaThread(JavaThread jt); public JSJavaFrame newJSJavaFrame(JavaVFrame vf); + public JSJavaMethod newJSJavaMethod(Method m); public JSList newJSList(List l); public JSMap newJSMap(Map m); public JSJavaHeap newJSJavaHeap(); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaFactoryImpl.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaFactoryImpl.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaFactoryImpl.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,8 +42,6 @@ res = new JSJavaObjArray((ObjArray)oop, this); } else if (oop instanceof Instance) { res = newJavaInstance((Instance) oop); - } else if (oop instanceof Method) { - res = new JSJavaMethod((Method) oop, this); } } if (res != null) { @@ -67,6 +65,14 @@ return res; } + public JSJavaMethod newJSJavaMethod(Method method) { + JSJavaMethod res = new JSJavaMethod(method, this); + if (res != null) { + om.put(method, new SoftReference(res)); + } + return res; + } + public JSJavaField newJSJavaField(Field field) { if (field == null) return null; return new JSJavaField(field, this); diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaFrame.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaFrame.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaFrame.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -119,8 +119,8 @@ addField("thread", FIELD_THREAD); } - private JSJavaObject getMethod() { - return factory.newJSJavaObject(jvf.getMethod()); + private JSJavaMethod getMethod() { + return factory.newJSJavaMethod(jvf.getMethod()); } private int getBCI() { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaInstanceKlass.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaInstanceKlass.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaInstanceKlass.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -286,6 +286,34 @@ } } + private Object getFieldValue(Field fld, String name, InstanceKlass oop) { + FieldType fd = fld.getFieldType(); + if (fd.isObject() || fd.isArray()) { + return factory.newJSJavaObject(((OopField)fld).getValue(oop)); + } else if (fd.isByte()) { + return new Byte(((ByteField)fld).getValue(oop)); + } else if (fd.isChar()) { + return new String(new char[] { ((CharField)fld).getValue(oop) }); + } else if (fd.isDouble()) { + return new Double(((DoubleField)fld).getValue(oop)); + } else if (fd.isFloat()) { + return new Float(((FloatField)fld).getValue(oop)); + } else if (fd.isInt()) { + return new Integer(((IntField)fld).getValue(oop)); + } else if (fd.isLong()) { + return new Long(((LongField)fld).getValue(oop)); + } else if (fd.isShort()) { + return new Short(((ShortField)fld).getValue(oop)); + } else if (fd.isBoolean()) { + return Boolean.valueOf(((BooleanField)fld).getValue(oop)); + } else { + if (Assert.ASSERTS_ENABLED) { + Assert.that(false, "invalid field type for " + name); + } + return null; + } + } + private Field findInstanceField(String name) { Field fld = (Field) instanceFields.get(name); if (fld != null) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaMethod.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaMethod.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaMethod.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,9 +29,9 @@ import sun.jvm.hotspot.runtime.*; /** - * Wraps a methodOop from the debuggee VM. + * Wraps a Method* from the debuggee VM. */ -public class JSJavaMethod extends JSJavaObject { +public class JSJavaMethod extends JSMetadata { private static final int FIELD_NAME = 0; private static final int FIELD_SIGNATURE = 1; private static final int FIELD_HOLDER = 2; @@ -54,7 +54,7 @@ } public final Method getMethod() { - return (Method) getOop(); + return (Method) getMetadata(); } public Object get(String name) { diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaScriptEngine.java --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaScriptEngine.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaScriptEngine.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -149,9 +149,9 @@ // treat it as address VM vm = VM.getVM(); Address addr = vm.getDebugger().parseAddress(name); - Oop oop = vm.getObjectHeap().newOop(addr.addOffsetToAsOopHandle(0)); - if (oop instanceof InstanceKlass) { - ik = (InstanceKlass) oop; + Metadata metadata = Metadata.instantiateWrapperFor(addr.addOffsetTo(0)); + if (metadata instanceof InstanceKlass) { + ik = (InstanceKlass) metadata; } else { return Boolean.FALSE; } @@ -264,23 +264,28 @@ */ public Object mirror(Object[] args) { Object o = args[0]; - if (o != null && o instanceof JSJavaObject) { + Object res = UNDEFINED; + if (o != null) { + if (o instanceof JSJavaObject) { Oop oop = ((JSJavaObject)o).getOop(); - Object res = null; try { - if (oop instanceof InstanceKlass) { - res = getObjectReader().readClass((InstanceKlass) oop); - } else { res = getObjectReader().readObject(oop); + } catch (Exception e) { + if (debug) e.printStackTrace(getErrorStream()); + } + } else if (o instanceof JSMetadata) { + Metadata metadata = ((JSMetadata)o).getMetadata(); + try { + if (metadata instanceof InstanceKlass) { + res = getObjectReader().readClass((InstanceKlass) metadata); } } catch (Exception e) { if (debug) e.printStackTrace(getErrorStream()); } - return (res != null)? res : UNDEFINED; - } else { - return UNDEFINED; } } + return res; + } /** owner function gets owning thread of given JSJavaObjec, if any, else diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSMetadata.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSMetadata.java Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.jvm.hotspot.utilities.soql; + +import sun.jvm.hotspot.oops.Metadata; + +/** This is JavaScript wrapper for a metadata object in debuggee.*/ + +public abstract class JSMetadata extends DefaultScriptObject { + public JSMetadata(Metadata metadata, JSJavaFactory factory) { + this.metadata = metadata; + this.factory = factory; + } + + public final Metadata getMetadata() { + return metadata; + } + + public boolean equals(Object o) { + if (o == null || !(o instanceof JSMetadata)) { + return false; + } + + JSMetadata other = (JSMetadata) o; + return metadata.equals(other.metadata); + } + + public int hashCode() { + return metadata.hashCode(); + } + + public String toString() { + return "Metadata " + metadata.getAddress().toString(); + } + + private final Metadata metadata; + protected final JSJavaFactory factory; +} diff -r 36d1d483d5d6 -r da91efe96a93 agent/src/share/classes/sun/jvm/hotspot/utilities/soql/sa.js --- a/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/sa.js Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/utilities/soql/sa.js Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -234,7 +234,7 @@ if (typeof(name) == "string") { var clazz = sapkg.utilities.SystemDictionaryHelper.findInstanceKlass(name); if (clazz) { - writeln(clazz.getName().asString() + " @" + clazz.getHandle().toString()); + writeln(clazz.getName().asString() + " @" + clazz.getAddress().toString()); } else { writeln("class not found: " + name); } @@ -1096,7 +1096,6 @@ // gc vmType2Class["GenCollectedHeap"] = sapkg.memory.GenCollectedHeap; -vmType2Class["CompactingPermGenGen"] = sapkg.memory.CompactingPermGenGen; vmType2Class["DefNewGeneration"] = sapkg.memory.DefNewGeneration; vmType2Class["TenuredGeneration"] = sapkg.memory.TenuredGeneration; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/fastdebug.make --- a/make/solaris/makefiles/fastdebug.make Fri Aug 31 16:39:35 2012 -0700 +++ b/make/solaris/makefiles/fastdebug.make Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ # -# Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -37,8 +37,13 @@ OPT_CFLAGS/SLOWER = -xO2 ifeq ($(COMPILER_REV_NUMERIC), 510) +# Avoid apparent crash because of corrupted methodHandle in a tail call +OPT_CFLAGS/simpleThresholdPolicy.o = $(OPT_CFLAGS/DEFAULT) $(OPT_CCFLAGS/NO_TAIL_CALL_OPT) # CC 5.10 has bug XXXXX with -xO4 OPT_CFLAGS/jvmtiClassFileReconstituter.o = $(OPT_CFLAGS/SLOWER) +# jvm98 crashes on solaris-i586-fastdebug and solaris-sparc-fastdebug with stack overflow +OPT_CFLAGS/escape.o = $(OPT_CFLAGS) -xspace +OPT_CFLAGS/matcher.o = $(OPT_CFLAGS) -xspace endif # COMPILER_REV_NUMERIC == 510 ifeq ($(COMPILER_REV_NUMERIC), 509) @@ -49,6 +54,8 @@ ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1) # dtrace cannot handle tail call optimization (6672627, 6693876) OPT_CFLAGS/jni.o = $(OPT_CFLAGS/DEFAULT) $(OPT_CCFLAGS/NO_TAIL_CALL_OPT) +# this hangs in iropt now (7113504) +OPT_CFLAGS/compileBroker.o = $(OPT_CFLAGS/SLOWER) endif # COMPILER_NUMERIC_REV >= 509 ifeq ($(COMPILER_REV_NUMERIC), 505) diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/launcher.make --- a/make/solaris/makefiles/launcher.make Fri Aug 31 16:39:35 2012 -0700 +++ b/make/solaris/makefiles/launcher.make Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -43,7 +43,7 @@ ifeq ($(LINK_INTO),AOUT) LAUNCHER.o = launcher.o $(JVM_OBJ_FILES) - LAUNCHER_MAPFILE = mapfile_reorder + LAUNCHER_MAPFILE = mapfile_extended LFLAGS_LAUNCHER$(LDNOMAP) += $(MAPFLAG:FILENAME=$(LAUNCHER_MAPFILE)) LIBS_LAUNCHER += $(LIBS) else diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/mapfile-vers-COMPILER1 --- a/make/solaris/makefiles/mapfile-vers-COMPILER1 Fri Aug 31 16:39:35 2012 -0700 +++ b/make/solaris/makefiles/mapfile-vers-COMPILER1 Sat Sep 01 13:25:18 2012 -0400 @@ -1,7 +1,7 @@ # # -# Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -29,9 +29,9 @@ SUNWprivate_1.1 { global: # Dtrace support - __1cIUniverseP_methodKlassObj_; __1cJCodeCacheF_heap_; __1cIUniverseO_collectedHeap_; + __1cGMethodG__vtbl_; __1cHnmethodG__vtbl_; __1cICodeBlobG__vtbl_; __1cKBufferBlobG__vtbl_; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/mapfile-vers-COMPILER2 --- a/make/solaris/makefiles/mapfile-vers-COMPILER2 Fri Aug 31 16:39:35 2012 -0700 +++ b/make/solaris/makefiles/mapfile-vers-COMPILER2 Sat Sep 01 13:25:18 2012 -0400 @@ -1,7 +1,7 @@ # # -# Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -29,9 +29,9 @@ SUNWprivate_1.1 { global: # Dtrace support - __1cIUniverseP_methodKlassObj_; __1cJCodeCacheF_heap_; __1cIUniverseO_collectedHeap_; + __1cGMethodG__vtbl_; __1cHnmethodG__vtbl_; __1cICodeBlobG__vtbl_; __1cKBufferBlobG__vtbl_; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/mapfile-vers-TIERED --- a/make/solaris/makefiles/mapfile-vers-TIERED Fri Aug 31 16:39:35 2012 -0700 +++ b/make/solaris/makefiles/mapfile-vers-TIERED Sat Sep 01 13:25:18 2012 -0400 @@ -1,7 +1,7 @@ # # -# Copyright (c) 2006, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -29,9 +29,9 @@ SUNWprivate_1.1 { global: # Dtrace support - __1cIUniverseP_methodKlassObj_; __1cJCodeCacheF_heap_; __1cIUniverseO_collectedHeap_; + __1cGMethodG__vtbl_; __1cHnmethodG__vtbl_; __1cICodeBlobG__vtbl_; __1cKBufferBlobG__vtbl_; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/product.make --- a/make/solaris/makefiles/product.make Fri Aug 31 16:39:35 2012 -0700 +++ b/make/solaris/makefiles/product.make Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -43,6 +43,8 @@ ifeq ($(COMPILER_REV_NUMERIC), 510) # CC 5.10 has bug XXXXX with -xO4 OPT_CFLAGS/jvmtiClassFileReconstituter.o = $(OPT_CFLAGS/O2) +# Avoid apparent crash because of corrupted methodHandle in a tail call +OPT_CFLAGS/simpleThresholdPolicy.o = $(OPT_CFLAGS/DEFAULT) $(OPT_CCFLAGS/NO_TAIL_CALL_OPT) endif # COMPILER_REV_NUMERIC == 510 ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1) @@ -70,7 +72,6 @@ # and mustn't be otherwise. MAPFILE_DTRACE = $(GAMMADIR)/make/solaris/makefiles/mapfile-vers-$(TYPE) -REORDERFILE = $(GAMMADIR)/make/solaris/makefiles/reorder_$(TYPE)_$(BUILDARCH) endif # If we can create .debuginfo files, then the VM is stripped in vm.make @@ -79,5 +80,4 @@ G_SUFFIX = SYSDEFS += -DPRODUCT -SYSDEFS += $(REORDER_FLAG) VERSION = optimized diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/profiled.make --- a/make/solaris/makefiles/profiled.make Fri Aug 31 16:39:35 2012 -0700 +++ b/make/solaris/makefiles/profiled.make Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ # -# Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -33,8 +33,6 @@ PROF_AOUT_FLAGS += -pg -SYSDEFS += $(REORDER_FLAG) - # To do a profiled build of the product, such as for generating the # reordering file, set PROFILE_PRODUCT. Otherwise the reordering file will # contain references to functions which are not defined in the PRODUCT build. diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_COMPILER1_amd64 --- a/make/solaris/makefiles/reorder_COMPILER1_amd64 Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5450 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; - - -# Test Null -text: .text%__cplus_fini_at_exit: CCrti.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: arguments.o; -text: .text%__1cQAgentLibraryList2t6M_v_: arguments.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_AllocTable.o; -text: .text%__1cFRInfo2t6M_v_: c1_AllocTable.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_AllocTable_x86.o; -text: .text%__1cFRInfo2t6M_v_: c1_AllocTable_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_CacheLocals.o; -text: .text%__1cFRInfo2t6M_v_: c1_CacheLocals.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_CacheLocals_x86.o; -text: .text%__1cFRInfo2t6M_v_: c1_CacheLocals_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_Canonicalizer.o; -text: .text%__1cFRInfo2t6M_v_: c1_Canonicalizer.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_CodeGenerator.o; -text: .text%__1cFRInfo2t6M_v_: c1_CodeGenerator.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_CodeGenerator_x86.o; -text: .text%__1cFRInfo2t6M_v_: c1_CodeGenerator_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_CodeStubs_x86.o; -text: .text%__1cFRInfo2t6M_v_: c1_CodeStubs_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_Compilation.o; -text: .text%__1cFRInfo2t6M_v_: c1_Compilation.o; -text: .text%__1cMelapsedTimer2t6M_v_: c1_Compilation.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_Compiler.o; -text: .text%__1cFRInfo2t6M_v_: c1_Compiler.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_FrameMap.o; -text: .text%__1cFRInfo2t6M_v_: c1_FrameMap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_FrameMap_x86.o; -text: .text%__1cFRInfo2t6M_v_: c1_FrameMap_x86.o; -text: .text%__1cKc1_RegMask2t6M_v_: c1_FrameMap_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_GraphBuilder.o; -text: .text%__1cFRInfo2t6M_v_: c1_GraphBuilder.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_IR.o; -text: .text%__1cFRInfo2t6M_v_: c1_IR.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_Instruction.o; -text: .text%__1cFRInfo2t6M_v_: c1_Instruction.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_InstructionPrinter.o; -text: .text%__1cFRInfo2t6M_v_: c1_InstructionPrinter.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_Items.o; -text: .text%__1cFRInfo2t6M_v_: c1_Items.o; -text: .text%__1cIHintItem2t6MpnJValueType_i_v_: c1_Items.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_Items_x86.o; -text: .text%__1cFRInfo2t6M_v_: c1_Items_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_LIR.o; -text: .text%__1cFRInfo2t6M_v_: c1_LIR.o; -text: .text%__1cLLIR_OprFactHillegal6F_pnLLIR_OprDesc__: c1_LIR.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_LIRAssembler.o; -text: .text%__1cFRInfo2t6M_v_: c1_LIRAssembler.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_LIRAssembler_x86.o; -text: .text%__1cFRInfo2t6M_v_: c1_LIRAssembler_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_LIREmitter.o; -text: .text%__1cFRInfo2t6M_v_: c1_LIREmitter.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_LIREmitter_x86.o; -text: .text%__1cFRInfo2t6M_v_: c1_LIREmitter_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_LIROptimizer.o; -text: .text%__1cFRInfo2t6M_v_: c1_LIROptimizer.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_Loops.o; -text: .text%__1cFRInfo2t6M_v_: c1_Loops.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_MacroAssembler_x86.o; -text: .text%__1cFRInfo2t6M_v_: c1_MacroAssembler_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_Optimizer.o; -text: .text%__1cFRInfo2t6M_v_: c1_Optimizer.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_RInfo.o; -text: .text%__1cFRInfo2t6M_v_: c1_RInfo.o; -text: .text%__1cKc1_RegMask2t6M_v_: c1_RInfo.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_RInfo_x86.o; -text: .text%__1cFRInfo2t6M_v_: c1_RInfo_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_RegAlloc.o; -text: .text%__1cFRInfo2t6M_v_: c1_RegAlloc.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_RegAlloc_x86.o; -text: .text%__1cFRInfo2t6M_v_: c1_RegAlloc_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_Runtime1.o; -text: .text%__1cFRInfo2t6M_v_: c1_Runtime1.o; -text: .text%__1cIiEntries2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_Runtime1_x86.o; -text: .text%__1cFRInfo2t6M_v_: c1_Runtime1_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_ScanBlocks.o; -text: .text%__1cFRInfo2t6M_v_: c1_ScanBlocks.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_ValueMap.o; -text: .text%__1cFRInfo2t6M_v_: c1_ValueMap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_ValueSet.o; -text: .text%__1cFRInfo2t6M_v_: c1_ValueSet.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_ValueStack.o; -text: .text%__1cFRInfo2t6M_v_: c1_ValueStack.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: codeBlob.o; -text: .text%__1cFRInfo2t6M_v_: codeBlob.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: codeCache.o; -text: .text%__1cICHeapObj2n6FI_pv_; -text: .text%__1cCosGmalloc6FI_pv_; -text: .text%__1cICodeHeap2t6M_v_; -text: .text%__1cMVirtualSpace2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o; -text: .text%__1cMelapsedTimer2t6M_v_: compilationPolicy.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; -text: .text%__1cMelapsedTimer2t6M_v_: compileBroker.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compiledIC.o; -text: .text%__1cFRInfo2t6M_v_: compiledIC.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: deoptimization.o; -text: .text%__1cFRInfo2t6M_v_: deoptimization.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; -text: .text%__1cMelapsedTimer2t6M_v_: fprofiler.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: frame.o; -text: .text%__1cFRInfo2t6M_v_: frame.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: frame_x86.o; -text: .text%__1cFRInfo2t6M_v_: frame_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cTAssertIsPermClosure2t6M_v_: genCollectedHeap.o; -text: .text%__1cRAlwaysTrueClosure2t6M_v_: genCollectedHeap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; -text: .text%__1cNCellTypeStateLmake_bottom6F_0_: generateOopMap.o; -text: .text%__1cNCellTypeStateImake_any6Fi_0_: generateOopMap.o; -text: .text%__1cNCellTypeStateImake_top6F_0_: generateOopMap.o; -text: .text%__1cMelapsedTimer2t6M_v_: generateOopMap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: interpreter.o; -text: .text%__1cKEntryPoint2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: interpreter_x86.o; -text: .text%__1cFRInfo2t6M_v_: interpreter_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: java.o; -text: .text%__1cFRInfo2t6M_v_: java.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEnvBase.o; -text: .text%__1cWNonPrintingResourceObj2n6FInLResourceObjPallocation_type__pv_: jvmtiEnvBase.o; -text: .text%__1cLResourceObj2n6FIn0APallocation_type__pv_; -text: .text%__1cNGrowableArray4CpnMJvmtiEnvBase__2t6Mii_v_: jvmtiEnvBase.o; -text: .text%__1cUGenericGrowableArray2t6Mii_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEventController.o; -text: .text%__1cRJvmtiEventEnabled2t6M_v_; -text: .text%__1cRJvmtiEventEnabledFclear6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiImpl.o; -text: .text%__1cWNonPrintingResourceObj2n6FInLResourceObjPallocation_type__pv_: jvmtiImpl.o; -text: .text%__1cNGrowableArray4CpnPJvmtiRawMonitor__2t6Mii_v_: jvmtiImpl.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o; -text: .text%__1cJMemRegion2t6M_v_: jvmtiTagMap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: klassVtable.o; -text: .text%__1cFRInfo2t6M_v_: klassVtable.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; -text: .text%__1cJTimeStamp2t6M_v_: management.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; -text: .text%__1cJMarkSweepSMarkAndPushClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepRFollowRootClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepSFollowStackClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepUAdjustPointerClosure2t6Mi_v_: markSweep.o; -text: .text%__1cJMarkSweepOIsAliveClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepQKeepAliveClosure2t6M_v_: markSweep.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o; -text: .text%__1cWNonPrintingResourceObj2n6FInLResourceObjPallocation_type__pv_: memoryService.o; -text: .text%__1cNGrowableArray4CpnKMemoryPool__2t6Mii_v_: memoryService.o; -text: .text%__1cNGrowableArray4CpnNMemoryManager__2t6Mii_v_: memoryService.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: methodOop.o; -text: .text%__1cFRInfo2t6M_v_: methodOop.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: nativeInst_x86.o; -text: .text%__1cFRInfo2t6M_v_: nativeInst_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: nmethod.o; -text: .text%__1cFRInfo2t6M_v_: nmethod.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cQDoNothingClosure2t6M_v_: oopMap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: os_solaris.o; -text: .text%__1cFRInfo2t6M_v_: os_solaris.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: os_solaris_x86.o; -text: .text%__1cFRInfo2t6M_v_: os_solaris_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; -text: .text%__1cMarrayOopDescLheader_size6FnJBasicType__i_: parGCAllocBuffer.o; -text: .text%__1cRalign_object_size6Fi_i_: parGCAllocBuffer.o; -text: .text%__1cHoopDescLheader_size6F_i_: parGCAllocBuffer.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psAdaptiveSizePolicy.o; -text: .text%__1cMelapsedTimer2t6M_v_: psAdaptiveSizePolicy.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cMelapsedTimer2t6M_v_: psMarkSweep.o; -text: .text%__1cTPSAlwaysTrueClosure2t6M_v_: psMarkSweep.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psPromotionLAB.o; -text: .text%__1cMarrayOopDescLheader_size6FnJBasicType__i_: psPromotionLAB.o; -text: .text%__1cRalign_object_size6Fi_i_: psPromotionLAB.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o; -text: .text%__1cMelapsedTimer2t6M_v_: psScavenge.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; -text: .text%__1cQRelocationHolder2t6M_v_: relocInfo.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o; -text: .text%__1cJTimeStamp2t6M_v_: runtimeService.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: safepoint.o; -text: .text%__1cFRInfo2t6M_v_: safepoint.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: safepoint_solaris_x86.o; -text: .text%__1cFRInfo2t6M_v_: safepoint_solaris_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cTAssertIsPermClosure2t6M_v_: sharedHeap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedRuntime.o; -text: .text%__1cFRInfo2t6M_v_: sharedRuntime.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: tenuredGeneration.o; -text: .text%__1cRCardTableModRefBSbCpar_chunk_heapword_alignment6F_I_: tenuredGeneration.o; -text: .text%__1cEMIN24CI_6FTA0_0_: tenuredGeneration.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vframeArray.o; -text: .text%__1cFRInfo2t6M_v_: vframeArray.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; -text: .text%__1cFRInfo2t6M_v_: vmStructs.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; -text: .text%__1cTAbstract_VM_VersionKvm_release6F_pkc_; -text: .text%__1cTAbstract_VM_VersionXinternal_vm_info_string6F_pkc_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vtableStubs_x86.o; -text: .text%__1cFRInfo2t6M_v_: vtableStubs_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_LIROptimizer_x86.o; -text: .text%__1cFRInfo2t6M_v_: c1_LIROptimizer_x86.o; -text: .text%JNI_CreateJavaVM; -text: .text%__1cCosVatomic_xchg_bootstrap6Fipoi_i_; -text: .text%__1cHThreadsJcreate_vm6FpnOJavaVMInitArgs_pi_i_; -text: .text%__1cHThreadsYis_supported_jni_version6Fi_C_; -text: .text%__1cMostream_init6F_v_; -text: .text%__1cMoutputStream2t6Mi_v_; -text: .text%__1cCosEinit6F_v_; -text: .text%__1cCosLinit_random6Fl_v_; -text: .text%__1cCosHSolarisWinitialize_system_info6F_v_; -text: .text%__1cOThreadCriticalKinitialize6F_v_; -text: .text%__1cCosMvm_page_size6F_i_; -text: .text%__1cJArgumentsWinit_system_properties6F_v_; -text: .text%__1cJArgumentsQPropertyList_add6FppnOSystemProperty_2_v_; -text: .text%__1cTAbstract_VM_VersionHvm_name6F_pkc_; -text: .text%__1cTAbstract_VM_VersionJvm_vendor6F_pkc_; -text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_; -text: .text%__1cCosbDinit_system_properties_values6F_v_; -text: .text%__1cCosIjvm_path6Fpci_v_; -text: .text%__1cCosNset_boot_path6Fcc_i_; -text: .text%__1cJArgumentsFparse6FpknOJavaVMInitArgs__i_; -text: .text%__1cMmatch_option6FpknMJavaVMOption_pkcp4_i_: arguments.o; -text: .text%__1cJArgumentsVprocess_settings_file6Fpkcii_i_; -text: .text%__1cJArgumentsSparse_vm_init_args6FpknOJavaVMInitArgs__i_; -text: .text%__1cMSysClassPath2t6Mpkc_v_; -text: .text%__1cJArgumentsbSparse_java_tool_options_environment_variable6FpnMSysClassPath_pi_i_; -text: .text%__1cCosGgetenv6Fpkcpci_i_; -text: .text%__1cJArgumentsWparse_each_vm_init_arg6FpknOJavaVMInitArgs_pnMSysClassPath_pi_i_; -text: .text%__1cMmatch_option6FpknMJavaVMOption_ppkc5i_i_: arguments.o; -text: .text%__1cJArgumentsMadd_property6Fpkc_i_; -text: .text%__1cJArgumentsXPropertyList_unique_add6FppnOSystemProperty_pkcpc_v_; -text: .text%__1cCosEfree6Fpv_v_; -text: .text%__1cJArgumentsbNparse_java_options_environment_variable6FpnMSysClassPath_pi_i_; -text: .text%__1cJArgumentsVfinalize_vm_init_args6FpnMSysClassPath_i_i_; -text: .text%__1cMSysClassPathPexpand_endorsed6M_v_; -text: .text%__1cJArgumentsMget_property6Fpkc_2_; -text: .text%__1cJArgumentsWPropertyList_get_value6FpnOSystemProperty_pkc_4_; -text: .text%__1cMSysClassPathQadd_jars_to_path6Fpcpkc_1_; -text: .text%__1cJArgumentsZcheck_vm_args_consistency6F_i_; -text: .text%__1cJArgumentsRverify_percentage6FIpkc_i_; -text: .text%__1cMSysClassPath2T6M_v_; -text: .text%__1cMSysClassPathNreset_item_at6Mi_v_: arguments.o; -text: .text%__1cJArgumentsbOparse_java_compiler_environment_variable6F_v_; -text: .text%__1cJArgumentsVset_parallel_gc_flags6F_v_; -text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_; -text: .text%__1cSCommandLineFlagsExKis_default6FnPCommandLineFlag__i_; -text: .text%__1cJArgumentsUset_ergonomics_flags6F_v_; -text: .text%__1cCosXis_server_class_machine6F_i_; -text: .text%__1cJTimeStampJupdate_to6Mx_v_; -text: .text%__1cCosOjavaTimeMillis6F_x_; -text: .text%__1cJTraceTime2t6MpkciipnMoutputStream__v_; -text: .text%__1cCosGinit_26F_i_; -text: .text%__1cCosHSolarisKmmap_chunk6FpcIii_2_; -text: .text%__1cCosXnon_memory_address_word6F_pc_; -text: .text%__1cCosHSolarisRmpss_sanity_check6F_v_; -text: .text%__1cCosHSolarisOset_mpss_range6FpcII_i_; -text: .text%__1cCosPuncommit_memory6FpcI_i_; -text: .text%__1cCosHSolarisOlibthread_init6F_v_; -text: .text%__1cOisT2_libthread6F_i_; -text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; -text: .text%__1cNpriocntl_stub6FinGidtype_lipc_l_: os_solaris.o; -text: .text%__1cOresolve_symbol6Fpkc_pC_: os_solaris.o; -text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; -text: .text%__1cCosHSolarisOis_sig_ignored6Fi_i_; -text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; -text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; -text: .text%__1cCosHSolarisSset_signal_handler6Fiii_v_; -text: .text%__1cCosHSolarisUsynchronization_init6F_v_; -text: .text%__1cDhpiKinitialize6F_i_; -text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_; -text: .text%__1cQostream_init_log6F_v_; -text: .text%__1cNdefaultStreamMhas_log_file6M_i_; -text: .text%__1cRis_error_reported6F_i_; -text: .text%__1cNdefaultStreamEinit6M_v_; -text: .text%__1cSThreadLocalStorageEinit6F_v_; -text: .text%__1cSThreadLocalStorageHpd_init6F_v_; -text: .text%__1cCosbDallocate_thread_local_storage6F_i_; -text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; -text: .text%__1cRAllocateTLSOffset6F_v_: threadLS_solaris_x86.o; -text: .text%__1cPvm_init_globals6F_v_; -text: .text%__1cScheck_ThreadShadow6F_v_; -text: .text%__1cRcheck_basic_types6F_v_; -text: .text%__1cNeventlog_init6F_v_; -text: .text%__1cKmutex_init6F_v_; -text: .text%__1cFMutex2t6Mipkci_v_; -text: .text%lwp_cond_init: os_solaris.o; -text: .text%lwp_mutex_init: os_solaris.o; -text: .text%__1cHMonitor2t6Mipkci_v_; -text: .text%__1cOchunkpool_init6F_v_; -text: .text%__1cPperfMemory_init6F_v_; -text: .text%__1cKPerfMemoryKinitialize6F_v_; -text: .text%__1cCosZvm_allocation_granularity6F_i_; -text: .text%__1cKPerfMemoryUcreate_memory_region6FI_v_; -text: .text%__1cUcreate_shared_memory6FI_pc_: perfMemory_solaris.o; -text: .text%__1cSmmap_create_shared6FI_pc_: perfMemory_solaris.o; -text: .text%__1cCosScurrent_process_id6F_i_; -text: .text%__1cNget_user_name6Fl_pc_: perfMemory_solaris.o; -text: .text%__1cQget_user_tmp_dir6Fpkc_pc_: perfMemory_solaris.o; -text: .text%__1cCosSget_temp_directory6F_pkc_; -text: .text%__1cWget_sharedmem_filename6Fpkci_pc_: perfMemory_solaris.o; -text: .text%__1cbBcleanup_sharedmem_resources6Fpkc_v_: perfMemory_solaris.o; -text: .text%__1cTis_directory_secure6Fpkc_i_: perfMemory_solaris.o; -text: .text%lstat: perfMemory_solaris.o; -text: .text%__1cPfilename_to_pid6Fpkc_l_: perfMemory_solaris.o; -text: .text%__1cbAcreate_sharedmem_resources6Fpkc1I_i_: perfMemory_solaris.o; -text: .text%__1cRmake_user_tmp_dir6Fpkc_i_: perfMemory_solaris.o; -text: .text%__1cKJavaThread2t6M_v_; -text: .text%__1cGThread2t6M_v_; -text: .text%__1cFArena2t6M_v_; -text: .text%__1cFChunk2n6FII_pv_; -text: .text%__1cOThreadCritical2t6M_v_; -text: .text%__1cOThreadCritical2T6M_v_; -text: .text%__1cFChunk2t6MI_v_; -text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_; -text: .text%__1cKJavaThreadKinitialize6M_v_; -text: .text%__1cNjni_functions6F_pknTJNINativeInterface___; -text: .text%__1cQThreadStatistics2t6M_v_; -text: .text%__1cGParker2t6M_v_; -text: .text%__1cWThreadLocalAllocBufferKinitialize6M_v_; -text: .text%__1cWThreadLocalAllocBufferKinitialize6MpnIHeapWord_22_v_; -text: .text%__1cWThreadLocalAllocBufferMinitial_size6F_I_; -text: .text%__1cWThreadLocalAllocBufferVinitialize_statistics6M_v_; -text: .text%__1cMFlatProfilerJis_active6F_i_; -text: .text%__1cUThreadSafepointStateGcreate6FpnKJavaThread__v_; -text: .text%__1cUThreadSafepointState2t6MpnKJavaThread__v_; -text: .text%__1cGThreadbArecord_stack_base_and_size6M_v_; -text: .text%__1cCosScurrent_stack_base6F_pC_; -text: .text%__1cCosScurrent_stack_size6F_I_; -text: .text%__1cGThreadbFinitialize_thread_local_storage6M_v_; -text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; -text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; -text: .text%__1cCosbBthread_local_storage_at_put6Fipv_v_; -text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_; -text: .text%get_thread; -text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FIi_pnGThread__; -text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; -text: .text%__1cCosXthread_local_storage_at6Fi_pv_; -text: .text%__1cCosVcurrent_stack_pointer6F_pC_; -text: .text%__1cCosRinitialize_thread6F_v_; -text: .text%__1cNReservedSpaceUpage_align_size_down6FI_I_; -text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; -text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; -text: .text%__1cFMutexbClock_without_safepoint_check6M_v_; -text: .text%__1cFMutexGunlock6M_v_; -text: .text%__1cGThreadWset_as_starting_thread6M_i_; -text: .text%__1cCosScreate_main_thread6FpnGThread__i_; -text: .text%__1cQcreate_os_thread6FpnGThread_I_pnIOSThread__: os_solaris.o; -text: .text%__1cIOSThread2t6MpFpv_i1_v_; -text: .text%__1cIOSThreadNpd_initialize6M_v_; -text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_; -text: .text%__1cCosHSolarisRunblocked_signals6F_pnIsigset_t__; -text: .text%__1cGThreadMis_VM_thread6kM_i_: thread.o; -text: .text%__1cCosHSolarisKvm_signals6F_pnIsigset_t__; -text: .text%__1cKJavaThreadYcreate_stack_guard_pages6M_v_; -text: .text%__1cCosNcommit_memory6FpcI_i_; -text: .text%__1cCosMguard_memory6FpcI_i_; -text: .text%__1cMinit_globals6F_i_; -text: .text%__1cPmanagement_init6F_v_; -text: .text%__1cKManagementEinit6F_v_; -text: .text%__1cNExceptionMark2t6MrpnGThread__v_; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongVariable__; -text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_; -text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_; -text: .text%__1cIPerfDataMcreate_entry6MnJBasicType_II_v_; -text: .text%__1cKPerfMemoryFalloc6FI_pc_; -text: .text%__1cFMutexElock6M_v_; -text: .text%__1cFMutexElock6MpnGThread__v_; -text: .text%__1cKPerfMemoryMmark_updated6F_v_; -text: .text%__1cCosLelapsedTime6F_d_; -text: .text%__1cMgetTimeNanos6F_x_: os_solaris.o; -text: .text%__1cPoldgetTimeNanos6F_x_: os_solaris.o; -text: .text%__1cPPerfDataManagerIadd_item6FpnIPerfData_i_v_; -text: .text%__1cMPerfDataList2t6Mi_v_; -text: .text%__1cCosbCis_thread_cpu_time_supported6F_i_; -text: .text%__1cNExceptionMark2T6M_v_; -text: .text%__1cNThreadServiceEinit6F_v_; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnPPerfLongCounter__; -text: .text%__1cORuntimeServiceEinit6F_v_; -text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cKvtune_init6F_v_; -text: .text%__1cObytecodes_init6F_v_; -text: .text%__1cJBytecodesKinitialize6F_v_; -text: .text%__1cJBytecodesDdef6Fn0AECode_pkc33nJBasicType_iii_v_; -text: .text%__1cJBytecodesDdef6Fn0AECode_pkc33nJBasicType_ii1i_v_; -text: .text%__1cJBytecodesNpd_initialize6F_v_; -text: .text%__1cQclassLoader_init6F_v_; -text: .text%__1cLClassLoaderKinitialize6F_v_; -text: .text%__1cLClassLoaderQload_zip_library6F_v_; -text: .text%__1cCosTnative_java_library6F_pv_; -text: .text%JVM_GetInterfaceVersion; -text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_; -text: .text%__1cKHandleMark2T6M_v_; -text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_; -text: .text%__1cCosGstrdup6Fpkc_pc_; -text: .text%__1cLClassLoaderbCupdate_class_path_entry_list6Fpkc_v_; -text: .text%__1cCosEstat6FpkcpnEstat__i_; -text: .text%stat: os_solaris.o; -text: .text%__1cLClassLoaderXcreate_class_path_entry6FpcnEstat_ppnOClassPathEntry__v_; -text: .text%__1cLClassLoaderSget_canonical_path6Fpc1i_i_; -text: .text%JVM_RawMonitorCreate; -text: .text%JVM_NativePath; -text: .text%JVM_RawMonitorEnter; -text: .text%__1cFMutexMjvm_raw_lock6M_v_; -text: .text%JVM_RawMonitorExit; -text: .text%__1cFMutexOjvm_raw_unlock6M_v_; -text: .text%JVM_Open; -text: .text%JVM_Lseek; -text: .text%JVM_Close; -text: .text%__1cDhpiFclose6Fi_i_: jvm.o; -text: .text%__1cRClassPathZipEntry2t6Mppvpc_v_; -text: .text%__1cOClassPathEntry2t6M_v_; -text: .text%__1cLClassLoaderLadd_to_list6FpnOClassPathEntry__v_; -text: .text%__1cOcodeCache_init6F_v_; -text: .text%__1cJCodeCacheKinitialize6F_v_; -text: .text%__1cICodeHeapHreserve6MIII_i_; -text: .text%__1cLlog2_intptr6Fi_i_: heap.o; -text: .text%__1cYalign_to_allocation_size6FI_I_: heap.o; -text: .text%__1cNReservedSpace2t6MI_v_; -text: .text%__1cNReservedSpaceKinitialize6MIIipc_v_; -text: .text%__1cCosOreserve_memory6FIpc_1_; -text: .text%__1cMVirtualSpaceKinitialize6MnNReservedSpace_I_i_; -text: .text%__1cMVirtualSpaceJexpand_by6MI_i_; -text: .text%__1cMVirtualSpaceQuncommitted_size6kM_I_; -text: .text%__1cMVirtualSpaceNreserved_size6kM_I_; -text: .text%__1cMVirtualSpaceOcommitted_size6kM_I_; -text: .text%__1cCosNcommit_memory6FpcII_i_; -text: .text%__1cSalign_to_page_size6FI_I_: heap.o; -text: .text%__1cICodeHeapFclear6M_v_; -text: .text%__1cICodeHeapTmark_segmap_as_free6MII_v_; -text: .text%__1cNMemoryServiceZadd_code_heap_memory_pool6FpnICodeHeap__v_; -text: .text%__1cMCodeHeapPool2t6MpnICodeHeap_pkci_v_; -text: .text%__1cICodeHeapIcapacity6kM_I_; -text: .text%__1cICodeHeapMmax_capacity6kM_I_; -text: .text%__1cKMemoryPool2t6Mpkcn0AIPoolType_IIii_v_; -text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_; -text: .text%__1cNMemoryManager2t6M_v_; -text: .text%__1cNMemoryManagerIadd_pool6MpnKMemoryPool__v_; -text: .text%__1cKMemoryPoolLadd_manager6MpnNMemoryManager__v_; -text: .text%__1cLicache_init6F_v_; -text: .text%__1cPVM_Version_init6F_v_; -text: .text%__1cKVM_VersionKinitialize6F_v_; -text: .text%__1cKBufferBlobGcreate6Fpkci_p0_; -text: .text%__1cKJavaThreadOis_Java_thread6kM_i_: thread.o; -text: .text%__1cRalign_code_offset6Fi_I_; -text: .text%__1cICodeHeapLheader_size6F_I_; -text: .text%__1cKBufferBlob2n6FII_pv_; -text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__; -text: .text%__1cICodeHeapIallocate6MI_pv_; -text: .text%__1cICodeHeapPsearch_freelist6MI_pnJFreeBlock__; -text: .text%__1cICodeHeapTmark_segmap_as_used6MII_v_; -text: .text%__1cKBufferBlob2t6Mpkci_v_; -text: .text%__1cICodeBlob2t6Mpkcii_v_; -text: .text%__1cICodeBlobMset_oop_maps6MpnJOopMapSet__v_; -text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; -text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; -text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cMCodeHeapPoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cICodeHeapSallocated_capacity6kM_I_; -text: .text%__1cKMemoryPoolImax_size6kM_I_: memoryPool.o; -text: .text%__1cXresource_allocate_bytes6FI_pc_; -text: .text%__1cKCodeBuffer2t6MpCi_v_; -text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_; -text: .text%__1cYVM_Version_StubGeneratorTgenerate_getPsrInfo6M_pC_: vm_version_x86.o; -text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_; -text: .text%__1cRStubCodeGeneratorLstub_prolog6MpnMStubCodeDesc__v_; -text: .text%__1cJAssemblerFpushl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerGpushfd6M_v_; -text: .text%__1cJAssemblerEpopl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerExorl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerExorl6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerFpopfd6M_v_; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerDjcc6Mn0AJCondition_rnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cJAssemblerFcpuid6M_v_; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerDjmp6MrnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cRAbstractAssemblerEbind6MrnFLabel__v_; -text: .text%__1cRAbstractAssemblerHbind_to6MrnFLabel_i_v_; -text: .text%__1cMDisplacementEbind6MrnFLabel_ipnRAbstractAssembler__v_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerMemit_operand6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerMemit_operand6MpnMRegisterImpl_22nHAddressLScaleFactor_irknQRelocationHolder__v_; -text: .text%__1cKRelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cJAssemblerEmovl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cJAssemblerDret6Mi_v_; -text: .text%__1cMStubCodeMark2T6M_v_; -text: .text%__1cRAbstractAssemblerFflush6M_v_; -text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; -text: .text%__1cFVTuneNregister_stub6FpkcpC3_v_; -text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cKVM_VersionWget_processor_features6F_v_; -text: .text%__1cCosMsupports_sse6F_i_; -text: .text%__1cVcheck_for_sse_support6F_v_: os_solaris_x86.o; -text: .text%jio_snprintf; -text: .text%jio_vsnprintf; -text: .text%__1cPlocal_vsnprintf6FpcIpkcpv_i_; -text: .text%__1cSstubRoutines_init16F_v_; -text: .text%__1cMStubRoutinesLinitialize16F_v_; -text: .text%__1cWStubGenerator_generate6FpnKCodeBuffer_i_v_; -text: .text%__1cNStubGeneratorbAgenerate_forward_exception6M_pC_: stubGenerator_x86.o; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCi_v_; -text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cJAssemblerEcall6MpCnJrelocInfoJrelocType__v_; -text: .text%__1cJAssemblerJemit_data6MinJrelocInfoJrelocType_i_v_; -text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_: relocInfo.o; -text: .text%__1cKRelocationLunpack_data6M_v_: codeBlob.o; -text: .text%__1cJAssemblerJemit_data6MirknQRelocationHolder_i_v_; -text: .text%__1cKCodeBufferIrelocate6MpCrknQRelocationHolder_i_v_; -text: .text%__1cXruntime_call_RelocationEtype6M_nJrelocInfoJrelocType__: codeBlob.o; -text: .text%__1cOMacroAssemblerJincrement6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_i_v_; -text: .text%__1cOMacroAssemblerKget_thread6MpnMRegisterImpl__v_; -text: .text%__1cSThreadLocalStorageTpd_getTlsAccessMode6F_n0AQpd_tlsAccessMode__; -text: .text%__1cJAssemblerFpushl6Mi_v_; -text: .text%__1cJAssemblerEleal6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerEmovl6MnHAddress_i_v_; -text: .text%__1cOMacroAssemblerKverify_oop6MpnMRegisterImpl_pkc_v_; -text: .text%__1cJAssemblerDjmp6MpnMRegisterImpl_nJrelocInfoJrelocType__v_; -text: .text%__1cNStubGeneratorSgenerate_call_stub6MrpC_1_: stubGenerator_x86.o; -text: .text%__1cOMacroAssemblerFenter6M_v_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEdecl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEcall6MpnMRegisterImpl_nJrelocInfoJrelocType__v_; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerGfstp_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfstp_d6MnHAddress__v_; -text: .text%__1cNStubGeneratorYgenerate_catch_exception6M_pC_: stubGenerator_x86.o; -text: .text%__1cJAssemblerDjmp6MpCnJrelocInfoJrelocType__v_; -text: .text%__1cNStubGeneratorUgenerate_atomic_xchg6M_pC_: stubGenerator_x86.o; -text: .text%__1cJAssemblerExchg6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerGpushad6M_v_; -text: .text%__1cJAssemblerFpopad6M_v_; -text: .text%__1cNStubGeneratorYgenerate_get_previous_fp6M_pC_: stubGenerator_x86.o; -text: .text%__1cNStubGeneratorUgenerate_d2i_wrapper6MpC_1_: stubGenerator_x86.o; -text: .text%__1cOMacroAssemblerOpush_FPU_state6M_v_; -text: .text%__1cJAssemblerGfnsave6MnHAddress__v_; -text: .text%__1cJAssemblerFfwait6M_v_; -text: .text%__1cJAssemblerFfld_d6MnHAddress__v_; -text: .text%__1cJAssemblerFfst_d6MnHAddress__v_; -text: .text%__1cOMacroAssemblerPempty_FPU_stack6M_v_; -text: .text%__1cJAssemblerFffree6Mi_v_; -text: .text%__1cJAssemblerLemit_farith6Miii_v_; -text: .text%__1cOMacroAssemblerNpop_FPU_state6M_v_; -text: .text%__1cJAssemblerGfrstor6MnHAddress__v_; -text: .text%__1cNStubGeneratorUcreate_control_words6M_v_: stubGenerator_x86.o; -text: .text%__1cJTraceTime2T6M_v_; -text: .text%__1cNcarSpace_init6F_v_; -text: .text%__1cICarSpaceEinit6F_v_; -text: .text%__1cNuniverse_init6F_i_; -text: .text%__1cLJavaClassesbAcompute_hard_coded_offsets6F_v_; -text: .text%__1cLFileMapInfoKinitialize6M_i_; -text: .text%__1cLFileMapInfoNfail_continue6MpkcE_v_; -text: .text%__1cLFileMapInfoFclose6M_v_; -text: .text%__1cIUniversePinitialize_heap6F_i_; -text: .text%__1cPMarkSweepPolicy2t6M_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyQinitialize_flags6M_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyMrem_set_name6M_nJGenRemSetEName__: collectorPolicy.o; -text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__I_; -text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_I_; -text: .text%__1cbCTwoGenerationCollectorPolicyUinitialize_size_info6M_v_; -text: .text%__1cPMarkSweepPolicyWinitialize_generations6M_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyVnumber_of_generations6M_i_: collectorPolicy.o; -text: .text%__1cXPermanentGenerationSpec2t6MnHPermGenEName_IIIIII_v_; -text: .text%__1cQGCPolicyCounters2t6Mpkcii_v_; -text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; -text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; -text: .text%__1cSPerfStringConstant2t6MnJCounterNS_pkc3_v_; -text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; -text: .text%__1cKPerfStringKset_string6Mpkc_v_; -text: .text%__1cPPerfDataManagerUcreate_long_constant6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongConstant__; -text: .text%__1cQGenCollectedHeap2t6MpnPCollectorPolicy__v_; -text: .text%__1cKSharedHeap2t6MpnPCollectorPolicy__v_; -text: .text%__1cNCollectedHeap2t6M_v_; -text: .text%__1cHGCCauseJto_string6Fn0AFCause__pkc_; -text: .text%__1cPPerfDataManagerWcreate_string_variable6FnJCounterNS_pkci3pnGThread__pnSPerfStringVariable__; -text: .text%__1cMSubTasksDone2t6Mi_v_; -text: .text%__1cMSubTasksDoneFclear6M_v_; -text: .text%__1cMSubTasksDoneFvalid6M_i_; -text: .text%__1cQGenCollectedHeapKinitialize6M_i_; -text: .text%__1cPCollectorPolicyLgenerations6M_ppnOGenerationSpec__: collectorPolicy.o; -text: .text%__1cPCollectorPolicyUpermanent_generation6M_pnXPermanentGenerationSpec__: collectorPolicy.o; -text: .text%__1cXPermanentGenerationSpecFalign6MI_v_; -text: .text%__1cQGenCollectedHeapIallocate6MIpnXPermanentGenerationSpec_pIpipnNReservedSpace__pc_; -text: .text%__1cOGenerationSpecRn_covered_regions6kM_i_: collectorPolicy.o; -text: .text%__1cNReservedSpace2t6MIIipc_v_; -text: .text%__1cPCollectorPolicyOcreate_rem_set6MnJMemRegion_i_pnJGenRemSet__; -text: .text%__1cbCTwoGenerationCollectorPolicyQbarrier_set_name6M_nKBarrierSetEName__: collectorPolicy.o; -text: .text%__1cLCardTableRS2t6MnJMemRegion_i_v_; -text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; -text: .text%__1cNReservedSpaceYallocation_align_size_up6FI_I_; -text: .text%__1cJMemRegion2t6M_v_: cardTableModRefBS.o; -text: .text%__1cKSharedHeapPset_barrier_set6MpnKBarrierSet__v_; -text: .text%__1cNReservedSpaceKfirst_part6MIii_0_; -text: .text%__1cNReservedSpace2t6MpcI_v_; -text: .text%__1cOGenerationSpecEinit6MnNReservedSpace_ipnJGenRemSet__pnKGeneration__; -text: .text%__1cQDefNewGeneration2t6MnNReservedSpace_Iipkc_v_; -text: .text%__1cKGeneration2t6MnNReservedSpace_Ii_v_; -text: .text%__1cIageTable2t6Mi_v_; -text: .text%__1cIageTableFclear6M_v_; -text: .text%__1cFArenaEgrow6MI_pv_; -text: .text%__1cFChunkJnext_chop6M_v_; -text: .text%__1cFChunkEchop6M_v_; -text: .text%__1cFChunk2k6Fpv_v_; -text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cRCardTableModRefBSbCfind_covering_region_by_base6MpnIHeapWord__i_; -text: .text%__1cRCardTableModRefBSbAlargest_prev_committed_end6kMi_pnIHeapWord__; -text: .text%__1cWSequentialSubTasksDoneFclear6M_v_; -text: .text%__1cSGenerationCounters2t6MpkciipnMVirtualSpace__v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkci_pc_; -text: .text%__1cRCollectorCounters2t6Mpkci_v_; -text: .text%__1cOCSpaceCounters2t6MpkciIpnPContiguousSpace_pnSGenerationCounters__v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__; -text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_pnUPerfLongSampleHelper__v_; -text: .text%__1cPPerfLongVariantGsample6M_v_; -text: .text%__1cZContiguousSpaceUsedHelperLtake_sample6M_x_: cSpaceCounters.o; -text: .text%__1cPContiguousSpaceEused6kM_I_: space.o; -text: .text%__1cQDefNewGenerationYcompute_space_boundaries6MI_v_; -text: .text%__1cQCompactibleSpaceKinitialize6MnJMemRegion_i_v_; -text: .text%__1cFSpaceKinitialize6MnJMemRegion_i_v_; -text: .text%__1cFSpaceKset_bottom6MpnIHeapWord__v_: space.o; -text: .text%__1cJEdenSpaceHset_end6MpnIHeapWord__v_: space.o; -text: .text%__1cJEdenSpaceFclear6M_v_; -text: .text%__1cPContiguousSpaceFclear6M_v_; -text: .text%__1cFSpaceFclear6M_v_; -text: .text%__1cFSpaceHset_end6MpnIHeapWord__v_: space.o; -text: .text%__1cQDefNewGenerationPupdate_counters6M_v_; -text: .text%__1cSGenerationCountersKupdate_all6M_v_: generationCounters.o; -text: .text%__1cNReservedSpaceJlast_part6MI_0_; -text: .text%__1cRTenuredGeneration2t6MnNReservedSpace_IipnJGenRemSet__v_; -text: .text%__1cOCardGeneration2t6MnNReservedSpace_IipnJGenRemSet__v_; -text: .text%__1cWBlockOffsetSharedArray2t6MnJMemRegion_I_v_; -text: .text%__1cWBlockOffsetSharedArrayGresize6MI_v_; -text: .text%__1cNReservedSpaceSpage_align_size_up6FI_I_; -text: .text%__1cLCardTableRSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cLCardTableRSKis_aligned6MpnIHeapWord__i_: cardTableRS.o; -text: .text%__1cHGCStats2t6M_v_; -text: .text%__1cWOffsetTableContigSpace2t6MpnWBlockOffsetSharedArray_nJMemRegion__v_; -text: .text%__1cQBlockOffsetArray2t6MpnWBlockOffsetSharedArray_nJMemRegion_i_v_; -text: .text%__1cWOffsetTableContigSpaceKset_bottom6MpnIHeapWord__v_; -text: .text%__1cQBlockOffsetArrayGresize6MI_v_: blockOffsetTable.o; -text: .text%__1cWOffsetTableContigSpaceHset_end6MpnIHeapWord__v_; -text: .text%__1cWOffsetTableContigSpaceFclear6M_v_; -text: .text%__1cbBBlockOffsetArrayContigSpaceUinitialize_threshold6M_pnIHeapWord__; -text: .text%__1cUGenericGrowableArrayEgrow6Mi_v_; -text: .text%__1cXPermanentGenerationSpecEinit6MnNReservedSpace_IpnJGenRemSet__pnHPermGen__; -text: .text%__1cRCompactingPermGen2t6MnNReservedSpace_1IpnJGenRemSet_pnXPermanentGenerationSpec__v_; -text: .text%__1cUCompactingPermGenGen2t6MnNReservedSpace_1IipnJGenRemSet_pnPContiguousSpace_pnXPermanentGenerationSpec__v_; -text: .text%__1cUCompactingPermGenGenbFinitialize_performance_counters6M_v_; -text: .text%__1cbCOneContigSpaceCardGenerationIcapacity6kM_I_; -text: .text%__1cPCollectorPolicybFis_concurrent_mark_sweep_policy6M_i_: collectorPolicy.o; -text: .text%__1cWThreadLocalAllocBufferWstartup_initialization6F_v_; -text: .text%__1cPGlobalTLABStats2t6M_v_; -text: .text%__1cPGlobalTLABStatsKinitialize6M_v_; -text: .text%__1cXAdaptiveWeightedAverageGsample6Mf_v_; -text: .text%__1cXAdaptiveWeightedAverageYcompute_adaptive_average6Mff_f_; -text: .text%__1cQGenCollectedHeapNtlab_capacity6kM_I_; -text: .text%__1cQDefNewGenerationYsupports_tlab_allocation6kM_i_: defNewGeneration.o; -text: .text%__1cQDefNewGenerationNtlab_capacity6kM_I_: defNewGeneration.o; -text: .text%__1cKGenerationYsupports_tlab_allocation6kM_i_: tenuredGeneration.o; -text: .text%__1cWThreadLocalAllocBufferImax_size6F_I_; -text: .text%__1cOBasicHashtable2t6Mii_v_: universe.o; -text: .text%__1cLClassLoaderZcreate_package_info_table6F_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: classLoader.o; -text: .text%__1cQinterpreter_init6F_v_; -text: .text%__1cTAbstractInterpreterKinitialize6F_v_; -text: .text%__1cNTemplateTableKinitialize6F_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF_vc_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; -text: .text%__1cITemplateKinitialize6MinITosState_1pFi_vi_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJOperation__v4_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJCondition__v4_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF3_v3_v_; -text: .text%__1cNTemplateTableNpd_initialize6F_v_; -text: .text%__1cRInvocationCounterMreinitialize6Fi_v_; -text: .text%__1cRInvocationCounterDdef6Fn0AFState_ipFnMmethodHandle_pnGThread__pC_v_; -text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; -text: .text%__1cICodeHeapJexpand_by6MI_i_; -text: .text%__1cJStubQdDueueOregister_queue6Fp0_v_; -text: .text%__1cUInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; -text: .text%__1cLCodeletMark2t6MrpnZInterpreterMacroAssembler_pkcinJBytecodesECode__v_: interpreter.o; -text: .text%__1cJStubQdDueueHrequest6Mi_pnEStub__; -text: .text%__1cbBInterpreterCodeletInterfaceRcode_size_to_size6kMi_i_: interpreter.o; -text: .text%__1cbBInterpreterCodeletInterfaceKinitialize6MpnEStub_i_v_: interpreter.o; -text: .text%__1cSInterpreterCodeletKinitialize6MpkcinJBytecodesECode__v_; -text: .text%__1cbCAbstractInterpreterGeneratorTgenerate_error_exit6Mpkc_pC_; -text: .text%__1cOMacroAssemblerEstop6Mpkc_v_; -text: .text%__1cJAssemblerEcall6MrnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cJAssemblerDhlt6M_v_; -text: .text%__1cOMacroAssemblerFalign6Mi_v_; -text: .text%__1cJAssemblerDnop6M_v_; -text: .text%__1cJStubQdDueueGcommit6Mi_v_; -text: .text%__1cbCAbstractInterpreterGeneratorZgenerate_return_entry_for6MnITosState_i_pC_; -text: .text%__1cZInterpreterMacroAssemblerbAget_cache_and_index_at_bcp6MpnMRegisterImpl_2i_v_; -text: .text%__1cOMacroAssemblerSload_unsigned_word6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cJAssemblerGmovzxw6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerEshll6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_i_v_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; -text: .text%__1cOMacroAssemblerSload_unsigned_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cJAssemblerGmovzxb6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_base6MnITosState_ppCi_v_; -text: .text%__1cZInterpreterMacroAssemblerKverify_FPU6MinITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerKverify_oop6MpnMRegisterImpl_nITosState__v_; -text: .text%__1cJAssemblerDjmp6MnHAddress__v_; -text: .text%__1cOMacroAssemblerKverify_FPU6Mipkc_v_; -text: .text%__1cKEntryPoint2t6MpC11111111_v_; -text: .text%__1cJAssemblerEincl6MpnMRegisterImpl__v_; -text: .text%__1cbCAbstractInterpreterGeneratorYgenerate_deopt_entry_for6MnITosState_i_pC_; -text: .text%__1cJAssemblerEcmpl6MnHAddress_i_v_; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pCi_v_; -text: .text%__1cOMacroAssemblerOcall_VM_helper6MpnMRegisterImpl_pCii_v_; -text: .text%__1cZInterpreterMacroAssemblerMcall_VM_base6MpnMRegisterImpl_22pCii_v_; -text: .text%__1cOMacroAssemblerMcall_VM_base6MpnMRegisterImpl_22pCii_v_; -text: .text%__1cZInterpreterMacroAssemblerZcheck_and_handle_popframe6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerDjcc6Mn0AJCondition_pCnJrelocInfoJrelocType__v_; -text: .text%__1cTAbstractInterpreterSBasicType_as_index6FnJBasicType__i_; -text: .text%__1cbCAbstractInterpreterGeneratorbBgenerate_result_handler_for6MnJBasicType__pC_; -text: .text%__1cOMacroAssemblerGc2bool6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEsetb6Mn0AJCondition_pnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerQsign_extend_byte6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerGmovsxb6MpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerRsign_extend_short6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerGmovsxw6MpnMRegisterImpl_2_v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEtemp6F_pnMRegisterImpl__; -text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_; -text: .text%__1cbCAbstractInterpreterGeneratorbFgenerate_slow_signature_handler6M_pC_; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pC222i_v_; -text: .text%__1cTAbstractInterpreterRTosState_as_index6FnITosState__i_; -text: .text%__1cTAbstractInterpreterMreturn_entry6FnITosState_i_pC_; -text: .text%__1cKEntryPointFentry6kMnITosState__pC_; -text: .text%__1cbCAbstractInterpreterGeneratorZgenerate_continuation_for6MnITosState__pC_; -text: .text%__1cbCAbstractInterpreterGeneratorZgenerate_safept_entry_for6MnITosState_pC_2_; -text: .text%__1cZInterpreterMacroAssemblerEpush6MnITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cbCAbstractInterpreterGeneratorYgenerate_throw_exception6M_v_; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pC2i_v_; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_i_v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl_33_v_; -text: .text%__1cZInterpreterMacroAssemblerRremove_activation6MnITosState_pnMRegisterImpl_iii_v_; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_i_v_; -text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerElock6M_v_; -text: .text%__1cJAssemblerHcmpxchg6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cHAddress2t6MinJrelocInfoJrelocType__v_; -text: .text%__1cOMacroAssemblerFleave6M_v_; -text: .text%__1cbCAbstractInterpreterGeneratorbMgenerate_ArrayIndexOutOfBounds_handler6Mpkc_pC_; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pC22i_v_; -text: .text%__1cbCAbstractInterpreterGeneratorbHgenerate_exception_handler_common6Mpkc2i_pC_; -text: .text%__1cbCAbstractInterpreterGeneratorbJgenerate_StackOverflowError_handler6M_pC_; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cUInterpreterGeneratorbEgenerate_asm_interpreter_entry6Mi_pC_; -text: .text%__1cUInterpreterGeneratorXcheck_for_compiled_code6MrnFLabel__v_; -text: .text%__1cUInterpreterGeneratorbDgenerate_stack_overflow_check6M_v_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cUInterpreterGeneratorUgenerate_fixed_frame6Mi_v_; -text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cbCAbstractInterpreterGeneratorXbang_stack_shadow_pages6Mi_v_; -text: .text%__1cOMacroAssemblerWbang_stack_with_offset6Mi_v_: interp_masm_x86.o; -text: .text%__1cZInterpreterMacroAssemblerTnotify_method_entry6M_v_; -text: .text%__1cUInterpreterGeneratorZgenerate_counter_overflow6MpC_v_; -text: .text%__1cJAssemblerEnegl6MpnMRegisterImpl__v_; -text: .text%__1cUInterpreterGeneratorbAgenerate_run_compiled_code6M_v_; -text: .text%__1cZInterpreterMacroAssemblerNsuper_call_VM6MpnMRegisterImpl_2pC22_v_; -text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; -text: .text%__1cZInterpreterMacroAssemblerLlock_object6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cUInterpreterGeneratorUgenerate_empty_entry6M_pC_; -text: .text%__1cUInterpreterGeneratorXgenerate_accessor_entry6M_pC_; -text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl_i_v_; -text: .text%__1cLlog2_intptr6Fi_i_: interpreter_x86.o; -text: .text%__1cOMacroAssemblerQload_signed_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cJAssemblerGmovsxb6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cOMacroAssemblerQload_signed_word6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cJAssemblerGmovsxw6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cUInterpreterGeneratorXgenerate_abstract_entry6M_pC_; -text: .text%__1cUInterpreterGeneratorTgenerate_math_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cOMacroAssemblerGsincos6Miii_v_; -text: .text%__1cJAssemblerFfld_s6Mi_v_; -text: .text%__1cJAssemblerEfabs6M_v_; -text: .text%__1cOMacroAssemblerEfcmp6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerHfucomip6Mi_v_; -text: .text%__1cOMacroAssemblerEfpop6M_v_; -text: .text%__1cJAssemblerHfincstp6M_v_; -text: .text%__1cJAssemblerEfsin6M_v_; -text: .text%__1cJAssemblerEfcos6M_v_; -text: .text%__1cJAssemblerFfsqrt6M_v_; -text: .text%__1cUInterpreterGeneratorVgenerate_native_entry6Mi_pC_; -text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_; -text: .text%__1cJAssemblerGmembar6M_v_; -text: .text%__1cJAssemblerEaddl6MnHAddress_i_v_; -text: .text%__1cJAssemblerSemit_arith_operand6MipnMRegisterImpl_nHAddress_i_v_; -text: .text%__1cZInterpreterMacroAssemblerSnotify_method_exit6MnITosState__v_; -text: .text%__1cbCAbstractInterpreterGeneratorbEset_entry_points_for_all_bytes6M_v_; -text: .text%__1cbCAbstractInterpreterGeneratorQset_entry_points6MnJBytecodesECode__v_; -text: .text%__1cbCAbstractInterpreterGeneratorWset_short_entry_points6MpnITemplate_rpC44444444_v_; -text: .text%__1cbCAbstractInterpreterGeneratorVset_vtos_entry_points6MpnITemplate_rpC44444444_v_; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_and_dispatch6MpnITemplate_nITosState__v_; -text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_prolog6MnITosState_i_v_; -text: .text%__1cITemplateIgenerate6MpnZInterpreterMacroAssembler__v_; -text: .text%__1cNTemplateTableDnop6F_v_; -text: .text%__1cNTemplateTableKtransition6FnITosState_1_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_epilog6MnITosState_i_v_; -text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; -text: .text%__1cNTemplateTableLaconst_null6F_v_; -text: .text%__1cNTemplateTableGiconst6Fi_v_; -text: .text%__1cNTemplateTableGlconst6Fi_v_; -text: .text%__1cNTemplateTableGfconst6Fi_v_; -text: .text%__1cJAssemblerEfldz6M_v_; -text: .text%__1cJAssemblerEfld16M_v_; -text: .text%__1cJAssemblerFfaddp6Mi_v_; -text: .text%__1cNTemplateTableGdconst6Fi_v_; -text: .text%__1cNTemplateTableGbipush6F_v_; -text: .text%__1cNTemplateTableGsipush6F_v_; -text: .text%__1cJAssemblerFbswap6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEsarl6MpnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableDldc6Fi_v_; -text: .text%__1cJAssemblerEmovb6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_; -text: .text%__1cJAssemblerFfld_s6MnHAddress__v_; -text: .text%__1cZInterpreterMacroAssemblerbGget_unsigned_2_byte_index_at_bcp6MpnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableGldc2_w6F_v_; -text: .text%__1cJAssemblerEcmpb6MnHAddress_i_v_; -text: .text%__1cNTemplateTableFiload6F_v_; -text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_; -text: .text%__1cbCAbstractInterpreterGeneratorUset_wide_entry_point6MpnITemplate_rpC_v_; -text: .text%__1cNTemplateTableKwide_iload6F_v_; -text: .text%__1cNTemplateTableRlocals_index_wide6FpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableFlload6F_v_; -text: .text%__1cNTemplateTableKwide_lload6F_v_; -text: .text%__1cNTemplateTableFfload6F_v_; -text: .text%__1cNTemplateTableKwide_fload6F_v_; -text: .text%__1cNTemplateTableFdload6F_v_; -text: .text%__1cNTemplateTableKwide_dload6F_v_; -text: .text%__1cNTemplateTableFaload6F_v_; -text: .text%__1cNTemplateTableKwide_aload6F_v_; -text: .text%__1cNTemplateTableFiload6Fi_v_; -text: .text%__1cNTemplateTableFlload6Fi_v_; -text: .text%__1cNTemplateTableFfload6Fi_v_; -text: .text%__1cNTemplateTableFdload6Fi_v_; -text: .text%__1cNTemplateTableHaload_06F_v_; -text: .text%__1cNTemplateTableFaload6Fi_v_; -text: .text%__1cNTemplateTableGiaload6F_v_; -text: .text%__1cNTemplateTableLindex_check6FpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; -text: .text%__1cOMacroAssemblerZneeds_explicit_null_check6Fi_i_; -text: .text%__1cNTemplateTableGlaload6F_v_; -text: .text%__1cNTemplateTableGfaload6F_v_; -text: .text%__1cNTemplateTableGdaload6F_v_; -text: .text%__1cNTemplateTableGaaload6F_v_; -text: .text%__1cNTemplateTableGbaload6F_v_; -text: .text%__1cNTemplateTableGcaload6F_v_; -text: .text%__1cNTemplateTableGsaload6F_v_; -text: .text%__1cNTemplateTableGistore6F_v_; -text: .text%__1cNTemplateTableLwide_istore6F_v_; -text: .text%__1cNTemplateTableGlstore6F_v_; -text: .text%__1cNTemplateTableLwide_lstore6F_v_; -text: .text%__1cNTemplateTableGfstore6F_v_; -text: .text%__1cNTemplateTableLwide_fstore6F_v_; -text: .text%__1cNTemplateTableGdstore6F_v_; -text: .text%__1cNTemplateTableLwide_dstore6F_v_; -text: .text%__1cNTemplateTableGastore6F_v_; -text: .text%__1cNTemplateTableLwide_astore6F_v_; -text: .text%__1cNTemplateTableGistore6Fi_v_; -text: .text%__1cNTemplateTableGlstore6Fi_v_; -text: .text%__1cNTemplateTableGfstore6Fi_v_; -text: .text%__1cNTemplateTableGdstore6Fi_v_; -text: .text%__1cNTemplateTableGastore6Fi_v_; -text: .text%__1cNTemplateTableHiastore6F_v_; -text: .text%__1cNTemplateTableHlastore6F_v_; -text: .text%__1cNTemplateTableHfastore6F_v_; -text: .text%__1cNTemplateTableHdastore6F_v_; -text: .text%__1cNTemplateTableHaastore6F_v_; -text: .text%__1cZInterpreterMacroAssemblerRprofile_checkcast6MipnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cJAssemblerKrepne_scan6M_v_; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerSstore_check_part_16MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerSstore_check_part_26MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEmovb6MnHAddress_i_v_; -text: .text%__1cNTemplateTableHbastore6F_v_; -text: .text%__1cJAssemblerEmovb6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cNTemplateTableHcastore6F_v_; -text: .text%__1cJAssemblerEmovw6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cNTemplateTableHsastore6F_v_; -text: .text%__1cNTemplateTableDpop6F_v_; -text: .text%__1cNTemplateTableEpop26F_v_; -text: .text%__1cNTemplateTableDdup6F_v_; -text: .text%__1cJAssemblerFpushl6MnHAddress__v_; -text: .text%__1cNTemplateTableGdup_x16F_v_; -text: .text%__1cNTemplateTableGdup_x26F_v_; -text: .text%__1cNTemplateTableEdup26F_v_; -text: .text%__1cNTemplateTableHdup2_x16F_v_; -text: .text%__1cNTemplateTableHdup2_x26F_v_; -text: .text%__1cNTemplateTableEswap6F_v_; -text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; -text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_; -text: .text%__1cJAssemblerEadcl6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_; -text: .text%__1cJAssemblerGfadd_s6MnHAddress__v_; -text: .text%__1cZInterpreterMacroAssemblerGf2ieee6M_v_; -text: .text%__1cNTemplateTableEdop26Fn0AJOperation__v_; -text: .text%__1cJAssemblerGfadd_d6MnHAddress__v_; -text: .text%__1cZInterpreterMacroAssemblerGd2ieee6M_v_; -text: .text%__1cJAssemblerEsbbl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerHfsubr_s6MnHAddress__v_; -text: .text%__1cJAssemblerHfsubr_d6MnHAddress__v_; -text: .text%__1cJAssemblerFimull6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableElmul6F_v_; -text: .text%__1cOMacroAssemblerElmul6Mii_v_; -text: .text%__1cJAssemblerEmull6MnHAddress__v_; -text: .text%__1cJAssemblerEmull6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerGfmul_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfmul_d6MnHAddress__v_; -text: .text%__1cJAssemblerFfld_x6MnHAddress__v_; -text: .text%__1cJAssemblerFfmulp6Mi_v_; -text: .text%__1cNTemplateTableEidiv6F_v_; -text: .text%__1cOMacroAssemblerPcorrected_idivl6MpnMRegisterImpl__i_; -text: .text%__1cJAssemblerEcdql6M_v_; -text: .text%__1cJAssemblerFidivl6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableEldiv6F_v_; -text: .text%__1cZInterpreterMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cJAssemblerHfdivr_s6MnHAddress__v_; -text: .text%__1cJAssemblerHfdivr_d6MnHAddress__v_; -text: .text%__1cJAssemblerGfdivrp6Mi_v_; -text: .text%__1cNTemplateTableEirem6F_v_; -text: .text%__1cNTemplateTableElrem6F_v_; -text: .text%__1cOMacroAssemblerFfremr6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerIsave_eax6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerFfprem6M_v_; -text: .text%__1cJAssemblerJfnstsw_ax6M_v_; -text: .text%__1cJAssemblerEsahf6M_v_; -text: .text%__1cOMacroAssemblerLrestore_eax6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEfxch6Mi_v_; -text: .text%__1cNTemplateTableEineg6F_v_; -text: .text%__1cNTemplateTableElneg6F_v_; -text: .text%__1cOMacroAssemblerElneg6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEadcl6MpnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableEfneg6F_v_; -text: .text%__1cJAssemblerEfchs6M_v_; -text: .text%__1cNTemplateTableEdneg6F_v_; -text: .text%__1cJAssemblerEshll6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableElshl6F_v_; -text: .text%__1cOMacroAssemblerElshl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerFshldl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEsarl6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableElshr6F_v_; -text: .text%__1cOMacroAssemblerElshr6MpnMRegisterImpl_2i_v_; -text: .text%__1cJAssemblerFshrdl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableFlushr6F_v_; -text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableEiinc6F_v_; -text: .text%__1cJAssemblerEaddl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cNTemplateTableJwide_iinc6F_v_; -text: .text%__1cNTemplateTableHconvert6F_v_; -text: .text%__1cOMacroAssemblerLextend_sign6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerGfild_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfild_d6MnHAddress__v_; -text: .text%__1cNTemplateTableElcmp6F_v_; -text: .text%__1cOMacroAssemblerIlcmp2int6MpnMRegisterImpl_222_v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fi_v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fii_v_; -text: .text%__1cOMacroAssemblerIfcmp2int6MpnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableKdouble_cmp6Fi_v_; -text: .text%__1cNTemplateTableHif_0cmp6Fn0AJCondition__v_; -text: .text%__1cFj_not6FnNTemplateTableJCondition__nJAssemblerJCondition__: templateTable_x86.o; -text: .text%__1cNTemplateTableGbranch6Fii_v_; -text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_only6MnITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerYprofile_not_taken_branch6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableHif_icmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableHif_acmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableF_goto6F_v_; -text: .text%__1cNTemplateTableDjsr6F_v_; -text: .text%__1cZInterpreterMacroAssemblerWdispatch_only_noverify6MnITosState__v_; -text: .text%__1cNTemplateTableDret6F_v_; -text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableIwide_ret6F_v_; -text: .text%__1cNTemplateTableLtableswitch6F_v_; -text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_22_v_; -text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableMlookupswitch6F_v_; -text: .text%__1cNTemplateTableH_return6FnITosState__v_; -text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cNTemplateTableSgetfield_or_static6Fii_v_; -text: .text%__1cNTemplateTableZload_field_cp_cache_entry6FipnMRegisterImpl_22i_v_; -text: .text%__1cNTemplateTableXresolve_cache_and_index6FipnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerHfistp_d6MnHAddress__v_; -text: .text%__1cNTemplateTableJputstatic6Fi_v_; -text: .text%__1cNTemplateTableSputfield_or_static6Fii_v_; -text: .text%__1cNTemplateTableUjvmti_post_field_mod6Fii_v_; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cNTemplateTableQvolatile_barrier6F_v_; -text: .text%__1cNTemplateTableIgetfield6Fi_v_; -text: .text%__1cNTemplateTableOpatch_bytecode6FnJBytecodesECode_pnMRegisterImpl_4i_v_; -text: .text%__1cNTemplateTableIputfield6Fi_v_; -text: .text%__1cNTemplateTableNinvokevirtual6Fi_v_; -text: .text%__1cNTemplateTableOprepare_invoke6FpnMRegisterImpl_2inJBytecodesECode__v_; -text: .text%__1cNTemplateTablebAload_invoke_cp_cache_entry6FipnMRegisterImpl_22ii_v_; -text: .text%__1cNTemplateTableUinvokevirtual_helper6FpnMRegisterImpl_22_v_; -text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerUprofile_virtual_call6MpnMRegisterImpl_22_v_; -text: .text%__1cNTemplateTableNinvokespecial6Fi_v_; -text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableMinvokestatic6Fi_v_; -text: .text%__1cNTemplateTablePinvokeinterface6Fi_v_; -text: .text%__1cOMacroAssemblerIround_to6MpnMRegisterImpl_i_v_; -text: .text%__1cbCAbstractInterpreterGeneratorRset_unimplemented6Mi_v_; -text: .text%__1cNTemplateTableE_new6F_v_; -text: .text%__1cQGenCollectedHeapItop_addr6kM_ppnIHeapWord__; -text: .text%__1cQDefNewGenerationItop_addr6kM_ppnIHeapWord__; -text: .text%__1cQGenCollectedHeapIend_addr6kM_ppnIHeapWord__; -text: .text%__1cQDefNewGenerationIend_addr6kM_ppnIHeapWord__; -text: .text%__1cOMacroAssemblerJdecrement6MpnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC22_v_; -text: .text%__1cNTemplateTableInewarray6F_v_; -text: .text%__1cNTemplateTableJanewarray6F_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC222_v_; -text: .text%__1cNTemplateTableLarraylength6F_v_; -text: .text%__1cNTemplateTableGathrow6F_v_; -text: .text%__1cNTemplateTableJcheckcast6F_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC_v_; -text: .text%__1cNTemplateTableKinstanceof6F_v_; -text: .text%__1cNTemplateTableMmonitorenter6F_v_; -text: .text%__1cJAssemblerFcmovl6Mn0AJCondition_pnMRegisterImpl_3_v_; -text: .text%__1cNTemplateTableLmonitorexit6F_v_; -text: .text%__1cNTemplateTableEwide6F_v_; -text: .text%__1cNTemplateTableOmultianewarray6F_v_; -text: .text%__1cNTemplateTableKif_nullcmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableGgoto_w6F_v_; -text: .text%__1cNTemplateTableFjsr_w6F_v_; -text: .text%__1cNTemplateTableL_breakpoint6F_v_; -text: .text%__1cZInterpreterMacroAssemblerUdispatch_only_normal6MnITosState__v_; -text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; -text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_; -text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_; -text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_; -text: .text%__1cNTemplateTableKfast_iload6F_v_; -text: .text%__1cNTemplateTableLfast_iload26F_v_; -text: .text%__1cNTemplateTableMfast_icaload6F_v_; -text: .text%__1cNTemplateTableRfast_invokevfinal6Fi_v_; -text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; -text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; -text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_; -text: .text%__1cbCAbstractInterpreterGeneratorbCset_safepoints_for_all_bytes6M_v_; -text: .text%__1cWinvocationCounter_init6F_v_; -text: .text%__1cOmarksweep_init6F_v_; -text: .text%__1cQaccessFlags_init6F_v_; -text: .text%__1cStemplateTable_init6F_v_; -text: .text%__1cVInterfaceSupport_init6F_v_; -text: .text%__1cOuniverse2_init6F_v_; -text: .text%__1cIUniverseHgenesis6FpnGThread__v_; -text: .text%__1cIUniverseYcompute_base_vtable_size6F_v_; -text: .text%__1cLClassLoaderVcompute_Object_vtable6F_i_; -text: .text%__1cKklassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__; -text: .text%__1cKklassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: klassKlass.o; -text: .text%__1cKKlass_vtbl2n6FIrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: klass.o; -text: .text%__1cKSharedHeapWpermanent_mem_allocate6MI_pnIHeapWord__: genCollectedHeap.o; -text: .text%__1cRCompactingPermGenMmem_allocate6MI_pnIHeapWord__; -text: .text%__1cbCOneContigSpaceCardGenerationIallocate6MIii_pnIHeapWord__: compactingPermGenGen.o; -text: .text%__1cWOffsetTableContigSpaceIallocate6MI_pnIHeapWord__: space.o; -text: .text%__1cPContiguousSpaceIallocate6MI_pnIHeapWord__; -text: .text%__1cbBBlockOffsetArrayContigSpaceLalloc_block6MpnIHeapWord_2_v_: blockOffsetTable.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: klass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: klass.o; -text: .text%__1cRCardTableModRefBSEkind6M_nKBarrierSetEName__: cardTableModRefBS.o; -text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; -text: .text%__1cFKlassQset_next_sibling6MpnMklassOopDesc__v_; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: klassKlass.o; -text: .text%__1cParrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassRbase_create_klass6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__1_; -text: .text%__1cParrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: arrayKlassKlass.o; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: arrayKlassKlass.o; -text: .text%__1cPjava_lang_ClassNcreate_mirror6FnLKlassHandle_pnGThread__pnHoopDesc__; -text: .text%__1cFKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cSobjArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlassKlass.o; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: objArrayKlassKlass.o; -text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cSinstanceKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlassKlass.o; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: instanceKlassKlass.o; -text: .text%__1cTtypeArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlassKlass.o; -text: .text%__1cbBBlockOffsetArrayContigSpaceQalloc_block_work6MpnIHeapWord_2_v_; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: typeArrayKlassKlass.o; -text: .text%__1cLsymbolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cLsymbolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: symbolKlass.o; -text: .text%__1cLsymbolKlassOset_alloc_size6MI_v_: symbolKlass.o; -text: .text%__1cKoopFactoryKnew_symbol6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cJHashtableLhash_symbol6Fpkci_I_: symbolTable.o; -text: .text%__1cLSymbolTableGlookup6MipkciI_pnNsymbolOopDesc__; -text: .text%__1cLSymbolTableJbasic_add6MipCiIpnGThread__pnNsymbolOopDesc__; -text: .text%__1cLsymbolKlassPallocate_symbol6MpCipnGThread__pnNsymbolOopDesc__; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: symbolKlass.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: symbolKlass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: symbolKlass.o; -text: .text%__1cJHashtableJnew_entry6MIpnHoopDesc__pnOHashtableEntry__; -text: .text%__1cOBasicHashtableJnew_entry6MI_pnTBasicHashtableEntry__; -text: .text%__1cOtypeArrayKlassMcreate_klass6FnJBasicType_ipnGThread__pnMklassOopDesc__; -text: .text%__1cOtypeArrayKlassNexternal_name6FnJBasicType__pkc_; -text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__; -text: .text%__1cOtypeArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlass.o; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_: typeArrayKlass.o; -text: .text%__1cLAccessFlagsPatomic_set_bits6Mi_v_; -text: .text%__1cLlog2_intptr6Fi_i_: typeArrayKlass.o; -text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_; -text: .text%__1cKarrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cKarrayKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cLklassVtableRinitialize_vtable6MpnGThread__v_; -text: .text%__1cKarrayKlassKjava_super6kM_pnMklassOopDesc__; -text: .text%__1cKarrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cLmethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodKlass.o; -text: .text%__1cLmethodKlassOset_alloc_size6MI_v_: methodKlass.o; -text: .text%__1cQconstMethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cQconstMethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassOset_alloc_size6MI_v_: constMethodKlass.o; -text: .text%__1cPmethodDataKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cPmethodDataKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodDataKlass.o; -text: .text%__1cPmethodDataKlassOset_alloc_size6MI_v_: methodDataKlass.o; -text: .text%__1cRconstantPoolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cRconstantPoolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constantPoolKlass.o; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_: constantPoolKlass.o; -text: .text%__1cWconstantPoolCacheKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cWconstantPoolCacheKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: cpCacheKlass.o; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_: cpCacheKlass.o; -text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cVcompiledICHolderKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: compiledICHolderKlass.o; -text: .text%__1cVcompiledICHolderKlassOset_alloc_size6MI_v_: compiledICHolderKlass.o; -text: .text%__1cSobjArrayKlassKlassbEallocate_system_objArray_klass6MpnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassXallocate_objArray_klass6MinLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: typeArrayKlass.o; -text: .text%__1cNsymbolOopDescLas_C_string6kM_pc_; -text: .text%__1cNsymbolOopDescLas_C_string6kMpci_1_; -text: .text%__1cFKlassPoop_is_instance6kM_i_: typeArrayKlass.o; -text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlass.o; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_: objArrayKlass.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: typeArrayKlass.o; -text: .text%__1cLlog2_intptr6Fi_i_: objArrayKlassKlass.o; -text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNobjArrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cOtypeArrayKlassSallocate_permanent6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: typeArrayKlass.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: typeArrayKlass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: typeArrayKlass.o; -text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cKoopFactoryWnew_permanent_intArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: oopFactory.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: oopFactory.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: oopFactory.o; -text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_; -text: .text%__1cNsymbolOopDescGequals6kMpkci_i_; -text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_; -text: .text%__1cKDictionary2t6Mi_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: dictionary.o; -text: .text%__1cQPlaceholderTable2t6Mi_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: placeholders.o; -text: .text%__1cVLoaderConstraintTable2t6Mi_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: loaderConstraints.o; -text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_; -text: .text%__1cQSystemDictionaryPresolve_or_fail6FnMsymbolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cQSystemDictionaryPresolve_or_fail6FnMsymbolHandle_nGHandle_2ipnGThread__pnMklassOopDesc__; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cQSystemDictionarybEresolve_instance_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_; -text: .text%__1cPTwoOopHashtableMcompute_hash6MnMsymbolHandle_nGHandle__I_: systemDictionary.o; -text: .text%__1cHoopDescSslow_identity_hash6M_i_; -text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__i_; -text: .text%__1cNget_next_hash6F_i_: synchronizer.o; -text: .text%__1cCosGrandom6F_l_; -text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cKDictionaryJget_entry6MiInMsymbolHandle_nGHandle__pnPDictionaryEntry__; -text: .text%__1cQSystemDictionarybAcompute_loader_lock_object6FnGHandle_pnGThread__1_; -text: .text%__1cMObjectLocker2t6MnGHandle_pnGThread__v_; -text: .text%__1cSObjectSynchronizerKfast_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cQSystemDictionaryKfind_class6FiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cQPlaceholderTableJadd_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cQPlaceholderTableJnew_entry6MipnNsymbolOopDesc_pnHoopDesc__pnQPlaceholderEntry__; -text: .text%__1cQSystemDictionaryTload_instance_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cQSystemDictionaryRload_shared_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cQSystemDictionaryRfind_shared_class6FnMsymbolHandle__pnMklassOopDesc__; -text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; -text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cFVTuneQstart_class_load6F_v_; -text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; -text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; -text: .text%__1cMstringStream2t6MI_v_; -text: .text%__1cMstringStreamFwrite6MpkcI_v_; -text: .text%__1cMoutputStreamPupdate_position6MpkcI_v_; -text: .text%__1cMstringStreamJas_string6M_pc_; -text: .text%__1cMelapsedTimerFstart6M_v_; -text: .text%__1cCosPelapsed_counter6F_x_; -text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__; -text: .text%__1cPClassFileStream2t6MpCipc_v_; -text: .text%__1cMelapsedTimerEstop6M_v_; -text: .text%__1cPClassFileParserOparseClassFile6MnMsymbolHandle_nGHandle_2r1pnGThread__nTinstanceKlassHandle__; -text: .text%__1cIVerifierRshould_verify_for6FpnHoopDesc__i_; -text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_; -text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_; -text: .text%__1cIVerifierQrelax_verify_for6FpnHoopDesc__i_; -text: .text%__1cVjava_lang_ClassLoaderRis_trusted_loader6FpnHoopDesc__i_; -text: .text%__1cQSystemDictionarySjava_system_loader6F_pnHoopDesc__; -text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__; -text: .text%__1cPClassFileParserOcheck_property6MipkcipnGThread__v_; -text: .text%__1cKoopFactoryQnew_constantPool6FipnGThread__pnTconstantPoolOopDesc__; -text: .text%__1cRconstantPoolKlassIallocate6MipnGThread__pnTconstantPoolOopDesc__; -text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: constantPoolKlass.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: constantPoolKlass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: constantPoolKlass.o; -text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileStreamGget_u16MpnGThread__C_; -text: .text%__1cPClassFileParserbFparse_constant_pool_class_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileParserbJparse_constant_pool_methodref_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileParserbGparse_constant_pool_string_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileParserbHparse_constant_pool_integer_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileParserbEparse_constant_pool_utf8_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileParserRverify_legal_utf86MpkCipnGThread__v_; -text: .text%__1cPClassFileStreamHskip_u16MipnGThread__v_; -text: .text%__1cPClassFileParserbLparse_constant_pool_nameandtype_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cTconstantPoolOopDescSklass_ref_index_at6Mi_i_; -text: .text%__1cTconstantPoolOopDescbAname_and_type_ref_index_at6Mi_i_; -text: .text%__1cTconstantPoolOopDescRname_ref_index_at6Mi_i_; -text: .text%__1cTconstantPoolOopDescWsignature_ref_index_at6Mi_i_; -text: .text%__1cPClassFileParserbCverify_legal_class_modifiers6MipnGThread__v_; -text: .text%__1cPClassFileParserQparse_interfaces6MnSconstantPoolHandle_nGHandle_2pnGThread__nOobjArrayHandle__; -text: .text%__1cPClassFileParserMparse_fields6MnSconstantPoolHandle_ipnUFieldAllocationCount_pnOobjArrayHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cUinitialize_hashtable6FppnLNameSigHash__v_; -text: .text%__1cPclear_hashtable6FppnLNameSigHash__v_; -text: .text%__1cPClassFileParserNparse_methods6MnSconstantPoolHandle_ipnLAccessFlags_ppnPobjArrayOopDesc_66pnGThread__nOobjArrayHandle__; -text: .text%__1cPClassFileParserMparse_method6MnSconstantPoolHandle_ipnLAccessFlags_pnPtypeArrayHandle_55pnGThread__nMmethodHandle__; -text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbDverify_legal_method_modifiers6MiinMsymbolHandle_pnGThread__v_; -text: .text%__1cPClassFileParserWparse_linenumber_table6MIIpipnGThread__pC_; -text: .text%__1cbFCompressedLineNumberWriteStream2t6Mi_v_; -text: .text%__1cVCompressedWriteStream2t6Mi_v_; -text: .text%__1cQCompressedStream2t6MpCi_v_; -text: .text%__1cbFCompressedLineNumberWriteStreamKwrite_pair6Mii_v_; -text: .text%__1cVCompressedWriteStreamJwrite_int6Mi_v_: methodOop.o; -text: .text%__1cKoopFactoryKnew_method6FinLAccessFlags_iiipnGThread__pnNmethodOopDesc__; -text: .text%__1cKoopFactoryPnew_constMethod6FiiiipnGThread__pnSconstMethodOopDesc__; -text: .text%__1cQconstMethodKlassIallocate6MiiiipnGThread__pnSconstMethodOopDesc__; -text: .text%__1cSconstMethodOopDescLobject_size6Fiiii_i_; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: constMethodKlass.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: constMethodKlass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: constMethodKlass.o; -text: .text%__1cSconstMethodOopDescZset_inlined_tables_length6Miii_v_; -text: .text%__1cLmethodKlassIallocate6MnRconstMethodHandle_nLAccessFlags_pnGThread__pnNmethodOopDesc__; -text: .text%__1cNmethodOopDescLobject_size6Fi_i_; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: methodKlass.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: methodKlass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: methodKlass.o; -text: .text%__1cNmethodOopDescJinit_code6M_v_; -text: .text%__1cRInvocationCounterEinit6M_v_; -text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cRInvocationCounterJset_state6Mn0AFState__v_; -text: .text%__1cLmethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cNmethodOopDescbAcompute_size_of_parameters6MpnGThread__v_; -text: .text%__1cRSignatureIterator2t6MnMsymbolHandle__v_; -text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; -text: .text%__1cRSignatureIteratorGexpect6Mc_v_; -text: .text%__1cSconstMethodOopDescbBcompressed_linenumber_table6kM_pC_; -text: .text%__1cPClassFileParserUassemble_annotations6MpCi1ipnGThread__nPtypeArrayHandle__; -text: .text%__1cNmethodOopDescVclear_native_function6M_v_; -text: .text%__1cNmethodOopDescTset_native_function6MpC_v_; -text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; -text: .text%__1cVCompressedWriteStreamEgrow6M_v_; -text: .text%__1cRSignatureIteratorKparse_type6M_i_; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_: frame.o; -text: .text%__1cUArgumentSizeComputerDset6MinJBasicType__v_: frame.o; -text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; -text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; -text: .text%__1cSconstMethodOopDescbEchecked_exceptions_length_addr6kM_pH_; -text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; -text: .text%__1cXcopy_u2_with_conversion6FpH0i_v_: classFileParser.o; -text: .text%__1cNSignatureInfoHdo_long6M_v_: frame.o; -text: .text%__1cNSignatureInfoGdo_int6M_v_: frame.o; -text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; -text: .text%__1cNmethodOopDescMsort_methods6FpnPobjArrayOopDesc_222_v_; -text: .text%method_compare: methodOop.o; -text: .text%__1cLklassVtablebKcompute_vtable_size_and_num_mirandas6Fri1pnMklassOopDesc_pnPobjArrayOopDesc_nLAccessFlags_pnHoopDesc_pnNsymbolOopDesc_5_v_; -text: .text%__1cLklassVtableWneeds_new_vtable_entry6FpnNmethodOopDesc_pnMklassOopDesc_pnHoopDesc_pnNsymbolOopDesc_nLAccessFlags__i_; -text: .text%__1cLklassVtableQget_num_mirandas6FpnMklassOopDesc_pnPobjArrayOopDesc_4_i_; -text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_; -text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; -text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; -text: .text%__1cPClassFileParserUcompute_oop_map_size6MnTinstanceKlassHandle_ii_i_; -text: .text%__1cKoopFactoryRnew_instanceKlass6FiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cSinstanceKlassKlassXallocate_instance_klass6MiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o; -text: .text%__1cNinstanceKlassQinit_implementor6M_v_; -text: .text%__1cNinstanceKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cTconstantPoolOopDescNklass_name_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cFKlassMoop_is_klass6kM_i_: symbolKlass.o; -text: .text%__1cPClassFileParserbAparse_classfile_attributes6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; -text: .text%__1cNinstanceKlassbBdo_local_static_fields_impl6FnTinstanceKlassHandle_pFpnPfieldDescriptor_pnGThread__v5_v_; -text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserNfill_oop_maps6MnTinstanceKlassHandle_ii_v_; -text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; -text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; -text: .text%__1cFKlassNlookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__; -text: .text%__1cNmethodOopDescPis_empty_method6kM_i_; -text: .text%__1cPClassFileParserYcheck_super_class_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cTClassLoadingServiceTnotify_class_loaded6FpnNinstanceKlass_i_v_; -text: .text%__1cTClassLoadingServiceScompute_class_size6FpnNinstanceKlass__I_; -text: .text%__1cSinstanceKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cNinstanceKlassPoop_is_instance6kM_i_: instanceKlass.o; -text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cLClassLoaderLadd_package6Fpkci_i_; -text: .text%__1cLClassLoaderOlookup_package6Fpkc_pnLPackageInfo__; -text: .text%__1cQPackageHashtableMcompute_hash6Mpkci_I_: classLoader.o; -text: .text%__1cQPackageHashtableJget_entry6MiIpkcI_pnLPackageInfo__: classLoader.o; -text: .text%__1cMstringStream2T6M_v_; -text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cFVTuneOend_class_load6F_v_; -text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cQSystemDictionaryRcheck_constraints6FiInTinstanceKlassHandle_nGHandle_pnGThread__v_; -text: .text%__1cVLoaderConstraintTablePcheck_or_update6MnTinstanceKlassHandle_nGHandle_nMsymbolHandle__pkc_; -text: .text%__1cVLoaderConstraintTableWfind_loader_constraint6MnMsymbolHandle_nGHandle__ppnVLoaderConstraintEntry__; -text: .text%__1cQSystemDictionaryQadd_to_hierarchy6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cFKlassWappend_to_sibling_list6M_v_; -text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; -text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_; -text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; -text: .text%__1cQSystemDictionaryRupdate_dictionary6FiIiInTinstanceKlassHandle_nGHandle_pnGThread__v_; -text: .text%__1cQSystemDictionaryQfind_placeholder6FiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cQPlaceholderTableMremove_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; -text: .text%__1cPTwoOopHashtableMcompute_hash6MnMsymbolHandle_nGHandle__I_: dictionary.o; -text: .text%__1cKDictionaryJnew_entry6MIpnMklassOopDesc_pnHoopDesc__pnPDictionaryEntry__; -text: .text%__1cNinstanceKlassQeager_initialize6MpnGThread__v_; -text: .text%__1cMObjectLocker2T6M_v_; -text: .text%__1cSObjectSynchronizerJfast_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cPClassFileParserbIparse_constant_pool_fieldref_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileParserbSparse_constant_pool_interfacemethodref_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileParserbEparse_constant_pool_long_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileStreamGget_u86MpnGThread__X_; -text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cKJavaThreadNis_lock_owned6kMpC_i_; -text: .text%__1cGThreadLis_in_stack6kMpC_i_; -text: .text%__1cQSystemDictionaryVresolve_super_or_fail6FnMsymbolHandle_1nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassZcan_be_primary_super_slow6kM_i_; -text: .text%__1cKReflectionTverify_class_access6FpnMklassOopDesc_2i_i_; -text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbJparse_classfile_signature_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCverify_legal_field_modifiers6MiipnGThread__v_; -text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_; -text: .text%__1cPClassFileParserWparse_field_attributes6MnSconstantPoolHandle_iHpHpi2pnPtypeArrayHandle_pnGThread__v_; -text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__; -text: .text%__1cJFieldTypeKbasic_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cJchar2type6Fc_nJBasicType__: fieldType.o; -text: .text%__1cRSignatureIteratorSskip_optional_size6M_v_; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_: frame.o; -text: .text%__1cPClassFileParserVparse_exception_table6MIInSconstantPoolHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cNSignatureInfoHdo_bool6M_v_: frame.o; -text: .text%__1cNSignatureInfoHdo_char6M_v_: frame.o; -text: .text%__1cNSignatureInfoIdo_float6M_v_: frame.o; -text: .text%__1cNSignatureInfoJdo_double6M_v_: frame.o; -text: .text%__1cbDreorder_based_on_method_index6FpnPobjArrayOopDesc_1ppnHoopDesc__v_: methodOop.o; -text: .text%__1cLklassVtableYadd_new_mirandas_to_list6FpnNGrowableArray4CpnNmethodOopDesc___pnPobjArrayOopDesc_6pnMklassOopDesc__v_; -text: .text%__1cLklassVtableKis_miranda6FpnNmethodOopDesc_pnPobjArrayOopDesc_pnMklassOopDesc__i_; -text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cPClassFileParserbNparse_classfile_inner_classes_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__H_; -text: .text%__1cPfieldDescriptorKinitialize6MpnMklassOopDesc_i_v_; -text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: classFileParser.o; -text: .text%__1cPfieldDescriptorSlong_initial_value6kM_x_; -text: .text%__1cFKlassZcan_be_primary_super_slow6kM_i_; -text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cNmethodOopDescWis_vanilla_constructor6kM_i_; -text: .text%__1cNinstanceKlassPadd_implementor6MpnMklassOopDesc__v_; -text: .text%__1cPClassFileParserXjava_lang_Class_fix_pre6MpnOobjArrayHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cPClassFileParserYjava_lang_Class_fix_post6Mpi_v_; -text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; -text: .text%__1cIUniverseNfixup_mirrors6FpnGThread__v_; -text: .text%__1cKSharedHeapYpermanent_object_iterate6MpnNObjectClosure__v_: genCollectedHeap.o; -text: .text%__1cHPermGenOobject_iterate6MpnNObjectClosure__v_: permGen.o; -text: .text%__1cRCompactingPermGenGas_gen6kM_pnKGeneration__: permGen.o; -text: .text%__1cbCOneContigSpaceCardGenerationOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cPContiguousSpaceOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cPContiguousSpaceTobject_iterate_from6MnJWaterMark_pnNObjectClosure__v_; -text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_: universe.o; -text: .text%__1cKklassKlassMoop_is_klass6kM_i_: klassKlass.o; -text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: instanceKlass.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: instanceKlass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: instanceKlass.o; -text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_: klassKlass.o; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_: arrayKlassKlass.o; -text: .text%__1cSobjArrayKlassKlassOklass_oop_size6kM_i_: objArrayKlassKlass.o; -text: .text%__1cSinstanceKlassKlassOklass_oop_size6kM_i_: instanceKlassKlass.o; -text: .text%__1cTtypeArrayKlassKlassOklass_oop_size6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cLsymbolKlassOklass_oop_size6kM_i_: symbolKlass.o; -text: .text%__1cLsymbolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cKklassKlassMoop_is_klass6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cTtypeArrayKlassKlassIoop_size6kMpnHoopDesc__i_: typeArrayKlassKlass.o; -text: .text%__1cKarrayKlassLobject_size6kMi_i_; -text: .text%__1cLmethodKlassOklass_oop_size6kM_i_: methodKlass.o; -text: .text%__1cQconstMethodKlassOklass_oop_size6kM_i_: constMethodKlass.o; -text: .text%__1cPmethodDataKlassOklass_oop_size6kM_i_: methodDataKlass.o; -text: .text%__1cKklassKlassMoop_is_klass6kM_i_: arrayKlassKlass.o; -text: .text%__1cRconstantPoolKlassOklass_oop_size6kM_i_: constantPoolKlass.o; -text: .text%__1cWconstantPoolCacheKlassOklass_oop_size6kM_i_: cpCacheKlass.o; -text: .text%__1cVcompiledICHolderKlassOklass_oop_size6kM_i_: compiledICHolderKlass.o; -text: .text%__1cKklassKlassMoop_is_klass6kM_i_: objArrayKlassKlass.o; -text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_: objArrayKlassKlass.o; -text: .text%__1cFKlassMoop_is_klass6kM_i_: typeArrayKlass.o; -text: .text%__1cFKlassMoop_is_klass6kM_i_: objArrayKlass.o; -text: .text%__1cFKlassMoop_is_klass6kM_i_: constantPoolKlass.o; -text: .text%__1cFKlassMoop_is_klass6kM_i_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cFKlassMoop_is_klass6kM_i_: methodKlass.o; -text: .text%__1cSinstanceKlassKlassMoop_is_klass6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassMoop_is_klass6kM_i_: instanceKlass.o; -text: .text%__1cFKlassXsearch_secondary_supers6kMpnMklassOopDesc__i_; -text: .text%__1cPClassFileParserbFjava_lang_ref_Reference_fix_pre6MpnPtypeArrayHandle_nSconstantPoolHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_; -text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceRefKlass.o; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceRefKlass.o; -text: .text%__1cNinstanceKlassPoop_is_instance6kM_i_: instanceRefKlass.o; -text: .text%__1cKReflectionVis_same_class_package6FpnMklassOopDesc_2_i_; -text: .text%__1cNinstanceKlassVis_same_class_package6MpnMklassOopDesc__i_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: instanceRefKlass.o; -text: .text%__1cNinstanceKlassVis_same_class_package6FpnHoopDesc_pnNsymbolOopDesc_24_i_; -text: .text%__1cEUTF8Hstrrchr6FpWiW_1_; -text: .text%__1cEUTF8Fequal6FpWi1i_i_; -text: .text%__1cPClassFileParserbFparse_constant_pool_float_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cNSignatureInfoHdo_byte6M_v_: frame.o; -text: .text%__1cNSignatureInfoIdo_short6M_v_: frame.o; -text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: instanceKlass.o; -text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; -text: .text%__1cPClassFileParserbGparse_constant_pool_double_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPfieldDescriptorUdouble_initial_value6kM_d_; -text: .text%__1cQSystemDictionarybDinitialize_basic_type_mirrors6FpnGThread__v_; -text: .text%__1cPjava_lang_ClassYcreate_basic_type_mirror6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cNobjArrayKlassZcan_be_primary_super_slow6kM_i_; -text: .text%__1cXreferenceProcessor_init6F_v_; -text: .text%__1cSReferenceProcessorMinit_statics6F_v_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJset_clock6Fx_v_; -text: .text%__1cQjni_handles_init6F_v_; -text: .text%__1cKJNIHandlesKinitialize6F_v_; -text: .text%__1cOvmStructs_init6F_v_; -text: .text%__1cVverificationType_init6F_v_; -text: .text%__1cQVerificationTypeKinitialize6F_v_; -text: .text%__1cOcompiler1_init6F_v_; -text: .text%__1cKSharedInfoKset_stack06Fi_v_; -text: .text%__1cKSharedInfoLset_regName6F_v_; -text: .text%__1cIRegAllocYinit_register_allocation6F_v_; -text: .text%__1cIFrameMapEinit6F_v_; -text: .text%__1cKc1_RegMaskKinit_masks6Fi_v_; -text: .text%__1cLLIR_OprDescIsize_for6FnJBasicType__n0AHOprSize__: c1_FrameMap_x86.o; -text: .text%__1cNc1_AllocTableLinit_tables6F_v_; -text: .text%__1cIFrameMapOfirst_register6F_pnMRegisterImpl__; -text: .text%__1cIFrameMapLcpu_reg2rnr6FpnMRegisterImpl__i_; -text: .text%__1cIFrameMapLcpu_rnr2reg6Fi_pnMRegisterImpl__; -text: .text%__1cIRuntime1Kinitialize6F_v_; -text: .text%__1cKCodeBufferRinsts_memory_size6Fi_i_; -text: .text%__1cKCodeBufferQlocs_memory_size6Fi_i_; -text: .text%__1cIRuntime1Ninitialize_pd6F_v_; -text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; -text: .text%__1cKCodeBuffer2t6MiiiiiipnKBufferBlob_pnJrelocInfo_pnORelocateBuffer_ipnLOopRecorder_pkcii_v_; -text: .text%__1cKCodeBufferQalloc_relocation6MI_v_; -text: .text%__1cJOopMapSet2t6M_v_; -text: .text%__1cJAssemblerEsubl6MnHAddress_i_v_; -text: .text%__1cTsave_live_registers6FpnOMacroAssembler_i_pnGOopMap__: c1_Runtime1_x86.o; -text: .text%__1cJAssemblerGfldenv6MnHAddress__v_; -text: .text%__1cGOopMap2t6Mii_v_; -text: .text%__1cGOopMapQset_callee_saved6MnHOptoRegEName_ii2_v_; -text: .text%__1cGOopMapHset_xxx6MnHOptoRegEName_nLOopMapValueJoop_types_ii2_v_; -text: .text%__1cGOopMapbEmap_compiler_reg_to_oopmap_reg6MnHOptoRegEName_ii_nFVMRegEName__; -text: .text%__1cVCompressedWriteStreamJwrite_int6Mi_v_: oopMap.o; -text: .text%__1cIFrameMapRfpu_stack_regname6Fi_nHOptoRegEName__; -text: .text%__1cKRelocationJpack_data6M_i_: codeBlob.o; -text: .text%__1cJrelocInfoNfinish_prefix6Mph_p0_; -text: .text%__1cJrelocInfo2t6Mn0AJrelocType_ii_v_; -text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_22pC_v_; -text: .text%__1cJOopMapSetKadd_gc_map6MiipnGOopMap__v_; -text: .text%__1cOMacroAssemblerVreset_last_Java_frame6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerEdecl6MnHAddress__v_; -text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; -text: .text%__1cICodeBlobPallocation_size6FpnKCodeBuffer_ii_I_; -text: .text%__1cNRelocIteratorTlocs_and_index_size6Fii_i_; -text: .text%__1cSDeoptimizationBlob2n6FII_pv_; -text: .text%__1cSDeoptimizationBlob2t6MpnKCodeBuffer_ipnJOopMapSet_iiii_v_; -text: .text%__1cICodeBlob2t6MpkcpnKCodeBuffer_iiipnJOopMapSet_i_v_; -text: .text%__1cKCodeBufferPcopy_relocation6MpnICodeBlob__v_; -text: .text%__1cNRelocIteratorMcreate_index6FpnKCodeBuffer_pnJrelocInfo_4_4_; -text: .text%__1cKCodeBufferJcopy_code6MpnICodeBlob__v_; -text: .text%__1cRAbstractAssemblerOcode_fill_byte6F_i_; -text: .text%__1cICodeBlobWfix_relocation_at_move6Mi_v_; -text: .text%__1cNRelocIteratorKinitialize6MipnICodeBlob_pC3_v_; -text: .text%__1cNRelocIteratorKset_limits6MpC1_v_; -text: .text%__1cVPatchingRelocIteratorHprepass6M_v_; -text: .text%__1cNRelocIteratorEnext6M_i_: relocInfo.o; -text: .text%__1cNRelocIteratorEnext6M_i_: codeBlob.o; -text: .text%__1cNRelocIteratorFreloc6M_pnKRelocation__; -text: .text%__1cOCallRelocationWfix_relocation_at_move6Mi_v_; -text: .text%__1cOCallRelocationFvalue6M_pC_: codeBlob.o; -text: .text%__1cKRelocationTpd_call_destination6M_pC_; -text: .text%__1cKNativeCallLdestination6kM_pC_; -text: .text%__1cOCallRelocationPset_destination6MpCi_v_; -text: .text%__1cKRelocationXpd_set_call_destination6MpCi_v_; -text: .text%__1cRNativeInstructionFwrote6Mi_v_; -text: .text%__1cKRelocationLunpack_data6M_v_: relocInfo.o; -text: .text%__1cKRelocationWfix_relocation_at_move6Mi_v_: relocInfo.o; -text: .text%__1cVPatchingRelocIteratorIpostpass6M_v_; -text: .text%__1cJOopMapSetJheap_size6kM_i_; -text: .text%__1cGOopMapJheap_size6kM_i_; -text: .text%__1cJOopMapSetHcopy_to6MpC_v_; -text: .text%__1cGOopMapHcopy_to6MpC_v_; -text: .text%__1cIRuntime1Rgenerate_blob_for6Fn0AGStubID__v_; -text: .text%__1cIRuntime1Pnew_code_buffer6F_pnKCodeBuffer__; -text: .text%__1cLOopRecorder2t6MpnFArena__v_; -text: .text%__1cNStubAssembler2t6MpnKCodeBuffer__v_; -text: .text%__1cIRuntime1Rgenerate_code_for6Fn0AGStubID_pnNStubAssembler_pi_pnJOopMapSet__; -text: .text%__1cIRuntime1Iname_for6Fn0AGStubID__pkc_; -text: .text%__1cLRuntimeStubQnew_runtime_stub6FpkcpnKCodeBuffer_ipnJOopMapSet_i_p0_; -text: .text%__1cLRuntimeStub2n6FII_pv_; -text: .text%__1cLRuntimeStub2t6MpkcpnKCodeBuffer_iipnJOopMapSet_i_v_; -text: .text%__1cJStubFrame2t6MpnNStubAssembler_pkci_v_; -text: .text%__1cNStubAssemblerIset_info6Mpkci_v_; -text: .text%__1cNStubAssemblerHcall_RT6MpnMRegisterImpl_2pC2_i_; -text: .text%__1cNStubAssemblerHcall_RT6MpnMRegisterImpl_2pCi_i_; -text: .text%__1cJStubFrame2T6M_v_; -text: .text%__1cIRuntime1Ygenerate_exception_throw6FpnNStubAssembler_pCpnMRegisterImpl__pnJOopMapSet__; -text: .text%__1cOMacroAssemblerLtlab_refill6MrnFLabel_22_v_; -text: .text%__1cLlog2_intptr6Fi_i_: assembler_x86.o; -text: .text%__1cOMacroAssemblerNeden_allocate6MpnMRegisterImpl_2i2rnFLabel__v_; -text: .text%__1cOMacroAssemblerLverify_tlab6M_v_; -text: .text%__1cLlog2_intptr6Fi_i_: c1_Runtime1_x86.o; -text: .text%__1cOMacroAssemblerNtlab_allocate6MpnMRegisterImpl_2i22rnFLabel__v_; -text: .text%__1cRC1_MacroAssemblerRinitialize_object6MpnMRegisterImpl_22i22_v_; -text: .text%__1cRC1_MacroAssemblerRinitialize_header6MpnMRegisterImpl_22_v_; -text: .text%__1cRC1_MacroAssemblerPinitialize_body6MpnMRegisterImpl_2i2_v_; -text: .text%__1cNStubAssemblerHcall_RT6MpnMRegisterImpl_2pC22_i_; -text: .text%__1cNStubAssemblerHcall_RT6MpnMRegisterImpl_2pC222_i_; -text: .text%__1cIRuntime1Iblob_for6Fn0AGStubID__pnICodeBlob__; -text: .text%__1cJStubFrame2t6MpnNStubAssembler_pkcipnMRegisterImpl_6_v_; -text: .text%__1cJStubFrame2t6MpnNStubAssembler_pkcipnMRegisterImpl__v_; -text: .text%__1cIiEntries2t6Miiii_v_; -text: .text%__1cRNativeGeneralJumpQjump_destination6kM_pC_; -text: .text%__1cJAssemblerOlocate_operand6FpCn0AMWhichOperand__1_; -text: .text%__1cIRuntime1Rgenerate_patching6FpnNStubAssembler_pC_pnJOopMapSet__; -text: .text%__1cWrestore_live_registers6FpnOMacroAssembler__v_: c1_Runtime1_x86.o; -text: .text%__1cNSafepointBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNSafepointBlob2n6FII_pv_; -text: .text%__1cNSafepointBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cJAssemblerFfldcw6MnHAddress__v_; -text: .text%__1cJAssemblerGfnstcw6MnHAddress__v_; -text: .text%__1cJAssemblerHfcomp_d6MnHAddress__v_; -text: .text%__1cIiEntriesIset_base6MpC_v_; -text: .text%__1cQvtableStubs_init6F_v_; -text: .text%__1cLVtableStubsKinitialize6F_v_; -text: .text%__1cWInlineCacheBuffer_init6F_v_; -text: .text%__1cRInlineCacheBufferKinitialize6F_v_; -text: .text%__1cRInlineCacheBufferOinit_next_stub6F_v_; -text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_; -text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__; -text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_: icBuffer.o; -text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_: icBuffer.o; -text: .text%__1cTcompilerOracle_init6F_v_; -text: .text%__1cOCompilerOracleRparse_from_string6Fpkc_v_; -text: .text%__1cOCompilerOracleOread_from_line6Fpc_v_; -text: .text%__1cOCompilerOraclePparse_from_file6F_v_; -text: .text%__1cHcc_file6F_pkc_: compilerOracle.o; -text: .text%__1cXonStackReplacement_init6F_v_; -text: .text%__1cSOnStackReplacementKinitialize6F_v_; -text: .text%__1cUGenericGrowableArrayPraw_at_put_grow6MipknEGrET_3_v_; -text: .text%__1cWcompilationPolicy_init6F_v_; -text: .text%__1cSuniverse_post_init6F_v_; -text: .text%__1cIUniverseWreinitialize_vtable_of6FpnFKlass_pnGThread__v_; -text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceKlass.o; -text: .text%__1cLklassVtableVinitialize_from_super6MnLKlassHandle__i_; -text: .text%__1cFKlassMoop_is_array6kM_i_: instanceKlass.o; -text: .text%__1cLklassVtableTupdate_super_vtable6MpnNinstanceKlass_pnNmethodOopDesc_i_i_; -text: .text%__1cLklassVtableNput_method_at6MpnNmethodOopDesc_i_v_; -text: .text%__1cLklassVtableQfill_in_mirandas6Mri_v_; -text: .text%__1cFKlassIsubklass6kM_p0_; -text: .text%__1cLklassVtableOcopy_vtable_to6MpnLvtableEntry__v_; -text: .text%__1cLklassVtableXvtable_accessibility_at6Mi_n0AKAccessType__; -text: .text%__1cFKlassMnext_sibling6kM_p0_; -text: .text%__1cKarrayKlassMoop_is_array6kM_i_: objArrayKlass.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: objArrayKlass.o; -text: .text%__1cKarrayKlassMoop_is_array6kM_i_: constantPoolKlass.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: constantPoolKlass.o; -text: .text%__1cKarrayKlassMoop_is_array6kM_i_: typeArrayKlass.o; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceRefKlass.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: instanceRefKlass.o; -text: .text%__1cIUniverseUreinitialize_itables6F_v_; -text: .text%__1cQSystemDictionaryKclasses_do6FpFpnMklassOopDesc__v_v_; -text: .text%__1cKDictionaryKclasses_do6MpFpnMklassOopDesc__v_v_; -text: .text%__1cbBinitialize_itable_for_klass6FpnMklassOopDesc__v_; -text: .text%__1cNinstanceKlassGitable6kM_pnLklassItable__; -text: .text%__1cLklassItable2t6MnTinstanceKlassHandle__v_; -text: .text%__1cLklassItableRinitialize_itable6M_v_; -text: .text%__1cLklassItablebFinitialize_itable_for_interface6MpnMklassOopDesc_pnRitableMethodEntry__v_; -text: .text%__1cRitableMethodEntryKinitialize6MpnNmethodOopDesc__v_; -text: .text%__1cKoopFactoryMnew_objArray6FpnMklassOopDesc_ipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassRallocate_objArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassQarray_klass_impl6MiipnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassQarray_klass_impl6FnTinstanceKlassHandle_iipnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__; -text: .text%__1cNinstanceKlassQarray_klass_impl6MipnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: instanceKlass.o; -text: .text%__1cNobjArrayKlassQarray_klass_impl6MiipnGThread__pnMklassOopDesc__; -text: .text%__1cNobjArrayKlassQarray_klass_impl6FnTobjArrayKlassHandle_iipnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: instanceKlass.o; -text: .text%__1cNCollectedHeapYcommon_mem_allocate_init6FIipnGThread__pnIHeapWord__: instanceKlass.o; -text: .text%__1cNCollectedHeapXallocate_from_tlab_slow6FpnGThread_I_pnIHeapWord__; -text: .text%__1cQGenCollectedHeapVunsafe_max_tlab_alloc6kM_I_; -text: .text%__1cQDefNewGenerationVunsafe_max_tlab_alloc6kM_I_: defNewGeneration.o; -text: .text%__1cQDefNewGenerationVunsafe_max_alloc_nogc6kM_I_; -text: .text%__1cPContiguousSpaceEfree6kM_I_: space.o; -text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_; -text: .text%__1cWThreadLocalAllocBufferFreset6M_v_; -text: .text%__1cQGenCollectedHeapRallocate_new_tlab6MI_pnIHeapWord__; -text: .text%__1cQGenCollectedHeapMmem_allocate6MIii_pnIHeapWord__; -text: .text%__1cbCTwoGenerationCollectorPolicyRmem_allocate_work6MIii_pnIHeapWord__; -text: .text%__1cQGenCollectedHeapEheap6F_p0_; -text: .text%__1cQDefNewGenerationPshould_allocate6MIii_i_: defNewGeneration.o; -text: .text%__1cQDefNewGenerationMpar_allocate6MIii_pnIHeapWord__: defNewGeneration.o; -text: .text%__1cJEdenSpaceMpar_allocate6MI_pnIHeapWord__; -text: .text%__1cPContiguousSpaceRpar_allocate_impl6MIkpnIHeapWord__2_: space.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: collectedHeap.o; -text: .text%__1cWThreadLocalAllocBufferEfill6MpnIHeapWord_2I_v_; -text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__; -text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cEUTF8Ounicode_length6Fpkc_i_; -text: .text%__1cEUTF8Enext6FpkcpH_pc_; -text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cQGenCollectedHeapVlarge_typearray_limit6M_I_; -text: .text%__1cbCTwoGenerationCollectorPolicyYis_two_generation_policy6M_i_: collectorPolicy.o; -text: .text%__1cbCTwoGenerationCollectorPolicyVlarge_typearray_limit6M_I_; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: typeArrayKlass.o; -text: .text%__1cNCollectedHeapYcommon_mem_allocate_init6FIipnGThread__pnIHeapWord__: typeArrayKlass.o; -text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_; -text: .text%__1cQjava_lang_StringQbasic_create_oop6FpnQtypeArrayOopDesc_ipnGThread__pnHoopDesc__; -text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cNCollectedHeapMobj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: instanceKlass.o; -text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; -text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; -text: .text%__1cNinstanceKlassPlink_class_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassLverify_code6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cIVerifierRverify_byte_codes6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassWadd_loader_constraints6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_; -text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cIRewriterScompute_index_maps6FnSconstantPoolHandle_rpnIintArray_rpnIintStack__v_; -text: .text%__1cIintArray2t6Mki1_v_: rewriter.o; -text: .text%__1cIRewriterXnew_constant_pool_cache6FrnIintArray_pnGThread__nXconstantPoolCacheHandle__; -text: .text%__1cKoopFactoryVnew_constantPoolCache6FipnGThread__pnYconstantPoolCacheOopDesc__; -text: .text%__1cWconstantPoolCacheKlassIallocate6MipnGThread__pnYconstantPoolCacheOopDesc__; -text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: cpCacheKlass.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: cpCacheKlass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: cpCacheKlass.o; -text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; -text: .text%__1cWConstantPoolCacheEntryRset_initial_state6Mi_v_; -text: .text%__1cIRewriterOrewrite_method6FnMmethodHandle_rnIintArray_pnGThread__1_; -text: .text%__1cNmethodOopDescLlink_method6FnMmethodHandle__v_; -text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__; -text: .text%__1cNmethodOopDescbGupdate_compiled_code_entry_point6Mi_v_; -text: .text%__1cIRuntime1Mientries_for6FnMmethodHandle__pnIiEntries__; -text: .text%__1cNmethodOopDescLis_accessor6kM_i_; -text: .text%__1cNmethodOopDescMintrinsic_id6kM_n0ALIntrinsicId__; -text: .text%__1cQSystemDictionaryXcheck_signature_loaders6FnMsymbolHandle_nGHandle_2ipnGThread__v_; -text: .text%__1cNSharedRuntimebIinitialize_StrictMath_entry_points6F_v_; -text: .text%__1cNSharedRuntimeUlookup_function_DD_D6FrpFpnHJNIEnv__pnH_jclass_dd_dpkc_v_; -text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; -text: .text%__1cMNativeLookupGlookup6FnMmethodHandle_ripnGThread__pC_; -text: .text%__1cNmethodOopDescThas_native_function6kM_i_; -text: .text%__1cMNativeLookupLlookup_base6FnMmethodHandle_ripnGThread__pC_; -text: .text%__1cMNativeLookupNpure_jni_name6FnMmethodHandle__pc_; -text: .text%__1cMoutputStreamFprint6MpkcE_v_; -text: .text%__1cMoutputStreamMdo_vsnprintf6FpcIpkcpvirI_3_; -text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; -text: .text%__1cOmangle_name_on6FpnMoutputStream_pnNsymbolOopDesc__v_: nativeLookup.o; -text: .text%__1cOmangle_name_on6FpnMoutputStream_pnNsymbolOopDesc_ii_v_: nativeLookup.o; -text: .text%__1cMoutputStreamDput6Mc_v_; -text: .text%__1cMNativeLookupMlookup_style6FnMmethodHandle_pcpkciiripnGThread__pC_; -text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; -text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; -text: .text%__1cVlookup_special_native6Fpc_pC_: nativeLookup.o; -text: .text%__1cbEinitialize_converter_functions6F_v_; -text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; -text: .text%__1cQGenCollectedHeapIcapacity6kM_I_; -text: .text%__1cQDefNewGenerationIcapacity6kM_I_; -text: .text%__1cQGenCollectedHeapEused6kM_I_; -text: .text%__1cQDefNewGenerationEused6kM_I_; -text: .text%__1cbCOneContigSpaceCardGenerationEused6kM_I_; -text: .text%__1cQGenCollectedHeapPpost_initialize6M_v_; -text: .text%__1cQGenCollectedHeapTref_processing_init6M_v_; -text: .text%__1cKSharedHeapTref_processing_init6M_v_; -text: .text%__1cKGenerationSref_processor_init6M_v_; -text: .text%__1cKGenerationYrefs_discovery_is_atomic6kM_i_: compactingPermGenGen.o; -text: .text%__1cKGenerationUrefs_discovery_is_mt6kM_i_: compactingPermGenGen.o; -text: .text%__1cSReferenceProcessor2t6MnJMemRegion_iii_v_; -text: .text%__1cKGenerationYrefs_discovery_is_atomic6kM_i_: defNewGeneration.o; -text: .text%__1cKGenerationUrefs_discovery_is_mt6kM_i_: defNewGeneration.o; -text: .text%__1cKGenerationYrefs_discovery_is_atomic6kM_i_: tenuredGeneration.o; -text: .text%__1cKGenerationUrefs_discovery_is_mt6kM_i_: tenuredGeneration.o; -text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_; -text: .text%__1cQGenCollectedHeapEkind6M_nNCollectedHeapEName__: genCollectedHeap.o; -text: .text%__1cNMemoryServicebBadd_gen_collected_heap_info6FpnQGenCollectedHeap__v_; -text: .text%__1cPMarkSweepPolicyUis_mark_sweep_policy6M_i_: collectorPolicy.o; -text: .text%__1cNMemoryManagerXget_copy_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cPGCMemoryManager2t6M_v_; -text: .text%__1cNMemoryManagerWget_msc_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cNMemoryServicebAadd_generation_memory_pool6FpnKGeneration_pnNMemoryManager_4_v_; -text: .text%__1cQDefNewGenerationEkind6M_nKGenerationEName__: defNewGeneration.o; -text: .text%__1cNMemoryServiceJadd_space6FpnPContiguousSpace_pkciIi_pnKMemoryPool__; -text: .text%__1cTContiguousSpacePool2t6MpnPContiguousSpace_pkcnKMemoryPoolIPoolType_Ii_v_; -text: .text%__1cNMemoryServiceTadd_survivor_spaces6FpnQDefNewGeneration_pkciIi_pnKMemoryPool__; -text: .text%__1cbBSurvivorContiguousSpacePool2t6MpnQDefNewGeneration_pkcnKMemoryPoolIPoolType_Ii_v_; -text: .text%__1cRTenuredGenerationEkind6M_nKGenerationEName__: tenuredGeneration.o; -text: .text%__1cNMemoryServiceHadd_gen6FpnKGeneration_pkcii_pnKMemoryPool__; -text: .text%__1cOGenerationPool2t6MpnKGeneration_pkcnKMemoryPoolIPoolType_i_v_; -text: .text%__1cKGenerationMmax_capacity6kM_I_; -text: .text%__1cNMemoryServicebGadd_compact_perm_gen_memory_pool6FpnUCompactingPermGenGen_pnNMemoryManager__v_; -text: .text%__1cQGenCollectedHeapNgc_threads_do6kMpnNThreadClosure__v_; -text: .text%__1cPGCMemoryManagerXinitialize_gc_stat_info6M_v_; -text: .text%__1cKGCStatInfo2t6Mi_v_; -text: .text%__1cQjavaClasses_init6F_v_; -text: .text%__1cLJavaClassesPcompute_offsets6F_v_; -text: .text%__1cQjava_lang_SystemPcompute_offsets6F_v_; -text: .text%__1cQjava_lang_ThreadPcompute_offsets6F_v_; -text: .text%__1cNinstanceKlassQfind_local_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__i_; -text: .text%__1cVjava_lang_ThreadGroupPcompute_offsets6F_v_; -text: .text%__1cbIjava_security_AccessControlContextPcompute_offsets6F_v_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectPcompute_offsets6F_v_; -text: .text%__1cYjava_lang_reflect_MethodPcompute_offsets6F_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldPcompute_offsets6F_v_; -text: .text%__1cPjava_nio_BufferPcompute_offsets6F_v_; -text: .text%__1cYsun_reflect_ConstantPoolPcompute_offsets6F_v_; -text: .text%__1cZsun_misc_AtomicLongCSImplPcompute_offsets6F_v_; -text: .text%__1cSstubRoutines_init26F_v_; -text: .text%__1cMStubRoutinesLinitialize26F_v_; -text: .text%__1cNStubGeneratorYgenerate_throw_exception6MpkcpCi_3_: stubGenerator_x86.o; -text: .text%__1cNStubGeneratorTgenerate_verify_oop6M_pC_: stubGenerator_x86.o; -text: .text%__1cJAssemblerEincl6MnHAddress__v_; -text: .text%__1cHThreadsDadd6FpnKJavaThread_i_v_; -text: .text%__1cNThreadServiceKadd_thread6FpnKJavaThread_i_v_; -text: .text%__1cGThreadbCis_hidden_from_external_view6kM_i_: thread.o; -text: .text%__1cGThreadVis_jvmti_agent_thread6kM_i_: thread.o; -text: .text%__1cGEventsDlog6FpkcE_v_: thread.o; -text: .text%__1cLJvmtiExportbMtransition_pending_onload_raw_monitors6F_v_; -text: .text%__1cUJvmtiPendingMonitorsXtransition_raw_monitors6F_v_; -text: .text%__1cUGenericGrowableArrayUclear_and_deallocate6M_v_; -text: .text%__1cIVMThreadGcreate6F_v_; -text: .text%__1cIVMThread2t6M_v_; -text: .text%__1cQVMOperationQdDueue2t6M_v_; -text: .text%__1cCosNcreate_thread6FpnGThread_n0AKThreadType_I_i_; -text: .text%__1cCosMstart_thread6FpnGThread__v_; -text: .text%__1cCosPpd_start_thread6FpnGThread__v_; -text: .text%__1cHMonitorEwait6Mil_i_; -text: .text%_start: os_solaris.o; -text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; -text: .text%__1cQset_lwp_priority6Fiii_i_; -text: .text%__1cVscale_to_lwp_priority6Fiii_i_: os_solaris.o; -text: .text%__1cIVMThreadMis_VM_thread6kM_i_: vmThread.o; -text: .text%__1cIVMThreadDrun6M_v_; -text: .text%__1cHMonitorGnotify6M_i_; -text: .text%__1cIVMThreadEloop6M_v_; -text: .text%__1cQVMOperationQdDueueLremove_next6M_pnMVM_Operation__; -text: .text%__1cQVMOperationQdDueueLqueue_empty6Mi_i_; -text: .text%__1cQVMOperationQdDueueSqueue_remove_front6Mi_pnMVM_Operation__; -text: .text%__1cLJvmtiExportRenter_start_phase6F_v_; -text: .text%__1cLJvmtiExportNpost_vm_start6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_start6F_v_; -text: .text%__1cQinitialize_class6FnMsymbolHandle_pnGThread__v_: thread.o; -text: .text%__1cNinstanceKlassKinitialize6MpnGThread__v_; -text: .text%__1cNinstanceKlassVshould_be_initialized6kM_i_; -text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassWcall_class_initializer6MpnGThread__v_; -text: .text%__1cNinstanceKlassbBcall_class_initializer_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassRclass_initializer6M_pnNmethodOopDesc__; -text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; -text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cRCompilationPolicyOmustBeCompiled6FnMmethodHandle__i_; -text: .text%__1cRCompilationPolicyNcanBeCompiled6FnMmethodHandle__i_; -text: .text%__1cNmethodOopDescRis_not_compilable6kMi_i_; -text: .text%__1cRruntime_type_from6FpnJJavaValue__nJBasicType__: javaCalls.o; -text: .text%__1cCosbCstack_shadow_pages_available6FpnGThread_nMmethodHandle__i_; -text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; -text: .text%__1cPJavaCallWrapper2t6MnMmethodHandle_nGHandle_pnJJavaValue_pnGThread__v_; -text: .text%__1cGThreadSis_Compiler_thread6kM_i_: thread.o; -text: .text%__1cGThreadXclear_pending_exception6M_v_; -text: .text%__1cRJavaCallArgumentsKparameters6M_pi_; -text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cKJavaThreadPcook_last_frame6MnFframe__1_; -text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__; -text: .text%__1cFframeVinterpreter_frame_bcp6kM_pC_; -text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoolHandle_inJBytecodesECode_pnGThread__v_; -text: .text%__1cMLinkResolverUresolve_invokestatic6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverMresolve_pool6FrnLKlassHandle_rnMsymbolHandle_42nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverNresolve_klass6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__; -text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceKlass.o; -text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPoolHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_; -text: .text%__1cTconstantPoolOopDescMklass_at_put6MipnMklassOopDesc__v_: constantPoolOop.o; -text: .text%__1cTconstantPoolOopDescLname_ref_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cTconstantPoolOopDescQsignature_ref_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cMLinkResolverTresolve_static_call6FrnICallInfo_rnLKlassHandle_nMsymbolHandle_53iipnGThread__v_; -text: .text%__1cMLinkResolverbElinktime_resolve_static_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cMLinkResolverYlookup_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cMLinkResolverbAcheck_method_accessability6FnLKlassHandle_11nMmethodHandle_pnGThread__v_; -text: .text%__1cKReflectionTverify_field_access6FpnMklassOopDesc_22nLAccessFlags_ii_i_; -text: .text%__1cICallInfoDset6MnLKlassHandle_nMmethodHandle_pnGThread__v_; -text: .text%__1cICallInfoDset6MnLKlassHandle_1nMmethodHandle_2ipnGThread__v_; -text: .text%__1cSInterpreterRuntimeLcache_entry6FpnKJavaThread__pnWConstantPoolCacheEntry__: interpreterRuntime.o; -text: .text%__1cWConstantPoolCacheEntryLis_resolved6kMnJBytecodesECode__i_: interpreterRuntime.o; -text: .text%__1cWConstantPoolCacheEntryPbytecode_number6FnJBytecodesECode__i_: interpreterRuntime.o; -text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; -text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__; -text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_; -text: .text%__1cNSignatureInfoHdo_void6M_v_: bytecode.o; -text: .text%__1cQResultTypeFinderDset6MinJBasicType__v_: bytecode.o; -text: .text%__1cRSignatureIteratorTcheck_signature_end6M_v_; -text: .text%__1cLas_TosState6FnJBasicType__nITosState__: cpCacheOop.o; -text: .text%__1cNmethodOopDescPis_final_method6kM_i_; -text: .text%__1cWConstantPoolCacheEntryIas_flags6MnITosState_iiiii_i_; -text: .text%__1cWConstantPoolCacheEntryOset_bytecode_16MnJBytecodesECode__v_; -text: .text%__1cWConstantPoolCacheEntryGverify6kMpnMoutputStream__v_; -text: .text%__1cSInterpreterRuntimeTprepare_native_call6FpnKJavaThread_pnNmethodOopDesc__v_; -text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_; -text: .text%__1cXSignatureHandlerLibraryKinitialize6F_v_; -text: .text%__1cXSignatureHandlerLibraryQset_handler_blob6F_pC_; -text: .text%__1cRSignatureIterator2t6MpnNsymbolOopDesc__v_; -text: .text%__1cNFingerprinterLfingerprint6M_X_: interpreterRuntime.o; -text: .text%__1cNGrowableArray4CX_Efind6kMkX_i_: interpreterRuntime.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIgenerate6MX_v_; -text: .text%__1cRSignatureIteratorSiterate_parameters6MX_v_; -text: .text%__1cXSignatureHandlerLibraryLset_handler6FpnKCodeBuffer__pC_; -text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; -text: .text%jni_RegisterNatives: jni.o; -text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; -text: .text%__1cLSymbolTableFprobe6Fpkci_pnNsymbolOopDesc__; -text: .text%__1cPregister_native6FnLKlassHandle_nMsymbolHandle_1pCpnGThread__i_: jni.o; -text: .text%__1cPJavaCallWrapper2T6M_v_; -text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; -text: .text%__1cNinstanceKlassbJset_initialization_state_and_notify6Mn0AKClassState_pnGThread__v_; -text: .text%__1cNinstanceKlassbOset_initialization_state_and_notify_impl6FnTinstanceKlassHandle_n0AKClassState_pnGThread__v_; -text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; -text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; -text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cMLinkResolverNresolve_field6FrnPFieldAccessInfo_nSconstantPoolHandle_inJBytecodesECode_ipnGThread__v_; -text: .text%__1cMLinkResolverNresolve_field6FrnPFieldAccessInfo_nSconstantPoolHandle_inJBytecodesECode_iipnGThread__v_; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cMLinkResolverZcheck_field_accessability6FnLKlassHandle_11rnPfieldDescriptor_pnGThread__v_; -text: .text%__1cPFieldAccessInfoDset6MnLKlassHandle_nMsymbolHandle_iinJBasicType_nLAccessFlags__v_; -text: .text%__1cLas_TosState6FnJBasicType__nITosState__: interpreterRuntime.o; -text: .text%__1cWConstantPoolCacheEntryJset_field6MnJBytecodesECode_2nLKlassHandle_iinITosState_ii_v_; -text: .text%__1cWConstantPoolCacheEntryOset_bytecode_26MnJBytecodesECode__v_; -text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_; -text: .text%__1cNinstanceKlassbDcheck_valid_for_instantiation6MipnGThread__v_; -text: .text%__1cMLinkResolverVresolve_invokespecial6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverUresolve_special_call6FrnICallInfo_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cMLinkResolverbFlinktime_resolve_special_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cMLinkResolverbEruntime_resolve_special_method6FrnICallInfo_nMmethodHandle_nLKlassHandle_4ipnGThread__v_; -text: .text%__1cWConstantPoolCacheEntryLis_resolved6kMnJBytecodesECode__i_: cpCacheOop.o; -text: .text%__1cWConstantPoolCacheEntryPbytecode_number6FnJBytecodesECode__i_: cpCacheOop.o; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_: bytecode.o; -text: .text%__1cNSignatureInfoHdo_long6M_v_: bytecode.o; -text: .text%JVM_CurrentTimeMillis; -text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cSInterpreterRuntimeDldc6FpnKJavaThread_i_v_; -text: .text%__1cTconstantPoolOopDescOstring_at_impl6FnSconstantPoolHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cLsymbolKlassNoop_is_symbol6kM_i_: symbolKlass.o; -text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_; -text: .text%__1cEUTF8Ounicode_length6Fpkci_i_; -text: .text%__1cLStringTableGintern6FnGHandle_pHipnGThread__pnHoopDesc__; -text: .text%__1cLStringTableLhash_string6FpHi_i_; -text: .text%__1cLStringTableGlookup6MipHiI_pnHoopDesc__; -text: .text%__1cLStringTableJbasic_add6MinGHandle_pHiIpnGThread__pnHoopDesc__; -text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nGHandle__; -text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cQjava_lang_StringMbasic_create6FpnQtypeArrayOopDesc_ipnGThread__nGHandle__; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cPBytecode_invokeJsignature6kM_pnNsymbolOopDesc__; -text: .text%__1cPBytecode_invokeFindex6kM_i_; -text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; -text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; -text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverUresolve_virtual_call6FrnICallInfo_nGHandle_nLKlassHandle_4nMsymbolHandle_54iipnGThread__v_; -text: .text%__1cMLinkResolverbFlinktime_resolve_virtual_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cMLinkResolverbEruntime_resolve_virtual_method6FrnICallInfo_nMmethodHandle_nLKlassHandle_nGHandle_4ipnGThread__v_; -text: .text%__1cFKlassXcan_be_statically_bound6FpnNmethodOopDesc__i_; -text: .text%__1cNSignatureInfoGdo_int6M_v_: bytecode.o; -text: .text%__1cNSignatureInfoHdo_char6M_v_: bytecode.o; -text: .text%__1cFKlassOis_subclass_of6kMpnMklassOopDesc__i_; -text: .text%__1cNinstanceKlassVis_same_class_package6MpnHoopDesc_pnNsymbolOopDesc__i_; -text: .text%__1cJBytecodesRspecial_length_at6FpC_i_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cLklassVtableIindex_of6kMpnNmethodOopDesc_i_i_; -text: .text%__1cMNativeLookupNlong_jni_name6FnMmethodHandle__pc_; -text: .text%__1cNFingerprinterJdo_object6Mii_v_: dump.o; -text: .text%__1cXNativeSignatureIteratorJdo_object6Mii_v_: interpreterRuntime.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_object6M_v_: interpreterRuntime.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorDbox6Mii_v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEfrom6F_pnMRegisterImpl__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorCto6F_pnMRegisterImpl__; -text: .text%JVM_DoPrivileged; -text: .text%__1cLmethodKlassNoop_is_method6kM_i_: methodKlass.o; -text: .text%__1cMvframeStream2t6MpnKJavaThread_i_v_; -text: .text%__1cLRegisterMap2t6MpnKJavaThread_i_v_; -text: .text%__1cLRegisterMapFclear6Mpi_v_; -text: .text%__1cSvframeStreamCommonPfill_from_frame6M_i_; -text: .text%__1cFframeUis_interpreted_frame6kM_i_; -text: .text%__1cSvframeStreamCommonbBfill_from_interpreter_frame6M_v_; -text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_; -text: .text%__1cSvframeStreamCommonbHskip_method_invoke_and_aux_frames6M_v_; -text: .text%__1cSvframeStreamCommonEnext6M_v_; -text: .text%__1cFframeGsender6kMpnLRegisterMap_pnICodeBlob__0_; -text: .text%__1cFframeOis_entry_frame6kM_i_; -text: .text%__1cRPrivilegedElementKinitialize6MpnMvframeStream_pnHoopDesc_p0pnGThread__v_; -text: .text%__1cKJNIHandlesKmake_local6FpnHJNIEnv__pnHoopDesc__pnI_jobject__; -text: .text%__1cOJNIHandleBlockPallocate_handle6MpnHoopDesc__pnI_jobject__; -text: .text%__1cSInterpreterRuntimeNquicken_io_cc6FpnKJavaThread__v_; -text: .text%__1cNSignatureInfoHdo_bool6M_v_: bytecode.o; -text: .text%__1cNSharedRuntimeDf2i6Ff_i_; -text: .text%jni_FindClass: jni.o; -text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__; -text: .text%__1cbCfind_class_from_class_loader6FpnHJNIEnv__nMsymbolHandle_CnGHandle_3CpnGThread__pnH_jclass__; -text: .text%__1cRCompilationPolicyUcompleted_vm_startup6F_v_; -text: .text%jni_NewGlobalRef: jni.o; -text: .text%__1cKJNIHandlesLmake_global6FnGHandle_i_pnI_jobject__; -text: .text%jni_GetStringUTFChars: jni.o; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cHUNICODEHas_utf86FpHi_pc_; -text: .text%__1cHUNICODELutf8_length6FpHi_i_; -text: .text%__1cKutf8_write6FpCH_0_: utf8.o; -text: .text%JVM_FindPrimitiveClass; -text: .text%__1cJname2type6Fpkc_nJBasicType__; -text: .text%jni_ReleaseStringUTFChars; -text: .text%__1cVcreate_initial_thread6FnGHandle_pnKJavaThread_pnGThread__pnHoopDesc__: thread.o; -text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_; -text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_; -text: .text%JVM_CurrentThread; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_: bytecode.o; -text: .text%__1cSInterpreterRuntimeInewarray6FpnKJavaThread_nJBasicType_i_v_; -text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cNFingerprinterGdo_int6M_v_: dump.o; -text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_: interpreterRuntime.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIpass_int6M_v_: interpreterRuntime.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEmove6Mii_v_; -text: .text%JVM_ArrayCopy; -text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cOtypeArrayKlassQoop_is_typeArray6kM_i_: typeArrayKlass.o; -text: .text%JVM_GetStackAccessControlContext; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_; -text: .text%__1cJCodeCacheJfind_blob6Fpv_pnICodeBlob__; -text: .text%__1cJCodeCacheQfind_blob_unsafe6Fpv_pnICodeBlob__; -text: .text%__1cICodeHeapKfind_start6kMpv_1_; -text: .text%__1cICodeBlobJis_zombie6kM_i_: codeBlob.o; -text: .text%__1cICodeBlobKis_nmethod6kM_i_: codeBlob.o; -text: .text%__1cFframeOis_first_frame6kM_i_; -text: .text%__1cFframeUentry_frame_is_first6kM_i_; -text: .text%__1cbIjava_security_AccessControlContextGcreate6FnOobjArrayHandle_inGHandle_pnGThread__pnHoopDesc__; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; -text: .text%__1cTJvmtiEventCollectorYunset_jvmti_thread_state6M_v_; -text: .text%JVM_GetInheritedAccessControlContext; -text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_; -text: .text%JVM_SetThreadPriority; -text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; -text: .text%__1cGThreadMset_priority6Fp0nOThreadPriority__v_; -text: .text%__1cCosMset_priority6FpnGThread_nOThreadPriority__nIOSReturn__; -text: .text%__1cQjava_lang_ThreadRset_thread_status6FpnHoopDesc_n0AMThreadStatus__v_; -text: .text%JVM_IsThreadAlive; -text: .text%__1cQjava_lang_ThreadIis_alive6FpnHoopDesc__i_; -text: .text%JVM_StartThread; -text: .text%__1cQjava_lang_ThreadMis_stillborn6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_ThreadJstackSize6FpnHoopDesc__x_; -text: .text%__1cKJavaThread2t6MpFp0pnGThread__vI_v_; -text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; -text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; -text: .text%__1cQjava_lang_ThreadJis_daemon6FpnHoopDesc__i_; -text: .text%__1cGThreadFstart6Fp0_v_; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceRefKlass.o; -text: .text%__1cbAcall_initializeSystemClass6FpnGThread__v_: thread.o; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%__1cKJavaThreadRthread_main_inner6M_v_; -text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cIBytecodeIset_code6MnJBytecodesECode__v_; -text: .text%__1cNFingerprinterHdo_long6M_v_: dump.o; -text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_: interpreterRuntime.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorJpass_long6M_v_: interpreterRuntime.o; -text: .text%JVM_MonitorWait; -text: .text%__1cQjava_lang_ThreadRget_thread_status6FpnHoopDesc__n0AMThreadStatus__; -text: .text%__1cSObjectSynchronizerEwait6FnGHandle_xpnGThread__v_; -text: .text%__1cSObjectSynchronizerHinflate6FpnHoopDesc__pnNObjectMonitor__; -text: .text%__1cNObjectMonitor2t6M_v_; -text: .text%__1cNObjectMonitorHRecycle6M_v_; -text: .text%__1cNObjectMonitorEwait6MxipnGThread__v_; -text: .text%__1cGThreadOis_interrupted6Fp0i_i_; -text: .text%__1cCosOis_interrupted6FpnGThread_i_i_; -text: .text%__1cNObjectMonitorEexit6MpnGThread__v_; -text: .text%__1cCosHSolarisFEventEpark6M_v_: objectMonitor_solaris.o; -text: .text%jni_GetObjectClass: jni.o; -text: .text%jni_GetMethodID: jni.o; -text: .text%__1cNget_method_id6FpnHJNIEnv__pnH_jclass_pkc5ipnGThread__pnK_jmethodID__: jni.o; -text: .text%__1cPjava_lang_ClassMis_primitive6FpnHoopDesc__i_; -text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; -text: .text%__1cMjniIdSupportNto_jmethod_id6FpnNmethodOopDesc__pnK_jmethodID__; -text: .text%__1cMjniIdPrivateGid_for6FnTinstanceKlassHandle_i_i_: jniId.o; -text: .text%__1cIjniIdMapGcreate6FnTinstanceKlassHandle__p0_; -text: .text%__1cIjniIdMapRcompute_index_cnt6FnTinstanceKlassHandle__i_; -text: .text%__1cIjniIdMap2t6MpnMklassOopDesc_i_v_; -text: .text%__1cLjniIdBucket2t6MpnIjniIdMap_p0_v_; -text: .text%jni_NewStringUTF: jni.o; -text: .text%jni_CallObjectMethod: jni.o; -text: .text%__1cMjniIdSupportNto_method_oop6FpnK_jmethodID__pnNmethodOopDesc__; -text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_; -text: .text%__1cUjni_invoke_nonstatic6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; -text: .text%__1cNFingerprinterLfingerprint6M_X_: jni.o; -text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6MX_v_: jni.o; -text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_: jni.o; -text: .text%jni_ExceptionOccurred: jni.o; -text: .text%__1cbAjni_check_async_exceptions6FpnKJavaThread__v_: jni.o; -text: .text%__1cKJavaThreadbHcheck_and_handle_async_exceptions6Mi_v_; -text: .text%jni_DeleteLocalRef: jni.o; -text: .text%__1cOJNIHandleBlockRrebuild_free_list6M_v_; -text: .text%jni_EnsureLocalCapacity; -text: .text%jni_GetStaticMethodID: jni.o; -text: .text%jni_CallStaticObjectMethodV: jni.o; -text: .text%__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; -text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%jni_ExceptionCheck: jni.o; -text: .text%jni_NewString: jni.o; -text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__; -text: .text%JVM_InitProperties; -text: .text%__1cMset_property6FnGHandle_pkc2pnGThread__v_: jvm.o; -text: .text%__1cQjava_lang_StringbHcreate_from_platform_depended_str6FpkcpnGThread__nGHandle__; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cKSharedHeapXfill_region_with_object6FnJMemRegion__v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: sharedHeap.o; -text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; -text: .text%__1cPfieldDescriptorUstring_initial_value6kMpnGThread__pnHoopDesc__; -text: .text%jni_GetFieldID: jni.o; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2ipnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassSregister_finalizer6FpnPinstanceOopDesc_pnGThread__2_; -text: .text%__1cJFieldTypeYis_valid_array_signature6FpnNsymbolOopDesc__i_; -text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cJFieldTypeOget_array_info6FpnNsymbolOopDesc_pip2pnGThread__nJBasicType__; -text: .text%__1cJFieldTypeSskip_optional_size6FpnNsymbolOopDesc_pi_v_; -text: .text%__1cOtypeArrayKlassQarray_klass_impl6MiipnGThread__pnMklassOopDesc__; -text: .text%__1cOtypeArrayKlassQarray_klass_impl6FnUtypeArrayKlassHandle_iipnGThread__pnMklassOopDesc__; -text: .text%JVM_RegisterUnsafeMethods; -text: .text%JVM_IsArrayClass; -text: .text%JVM_GetComponentType; -text: .text%__1cKReflectionUarray_component_type6FpnHoopDesc_pnGThread__2_; -text: .text%__1cKReflectionbFbasic_type_arrayklass_to_mirror6FpnMklassOopDesc_pnGThread__pnHoopDesc__; -text: .text%JVM_IsPrimitiveClass; -text: .text%JVM_GetClassLoader; -text: .text%JVM_DesiredAssertionStatus; -text: .text%__1cOJavaAssertionsHenabled6Fpkci_i_; -text: .text%__1cOJavaAssertionsLmatch_class6Fpkc_pn0AKOptionList__: javaAssertions.o; -text: .text%__1cOJavaAssertionsNmatch_package6Fpkc_pn0AKOptionList__; -text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%JVM_InternString; -text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_; -text: .text%__1cQjava_lang_StringRas_unicode_string6FpnHoopDesc_ri_pH_; -text: .text%__1cKSharedHeapPis_in_permanent6kMpkv_i_: genCollectedHeap.o; -text: .text%__1cQjava_lang_StringGequals6FpnHoopDesc_pHi_i_; -text: .text%JVM_NanoTime; -text: .text%__1cCosNjavaTimeNanos6F_x_; -text: .text%JVM_GetCallerClass; -text: .text%JVM_SupportsCX8; -text: .text%__1cNFingerprinterHdo_bool6M_v_: dump.o; -text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_: interpreterRuntime.o; -text: .text%JVM_GetClassDeclaredFields; -text: .text%__1cKReflectionJnew_field6FpnPfieldDescriptor_ipnGThread__pnHoopDesc__; -text: .text%__1cKReflectionInew_type6FnMsymbolHandle_nLKlassHandle_pnGThread__nGHandle__; -text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cXjava_lang_reflect_FieldGcreate6FpnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_name6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_type6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectMset_override6FpnHoopDesc_C_v_; -text: .text%__1cXjava_lang_reflect_FieldThas_signature_field6F_i_; -text: .text%__1cXjava_lang_reflect_FieldVhas_annotations_field6F_i_; -text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cXjava_lang_reflect_FieldPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverWresolve_interface_call6FrnICallInfo_nGHandle_nLKlassHandle_4nMsymbolHandle_54iipnGThread__v_; -text: .text%__1cMLinkResolverbHlinktime_resolve_interface_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cMLinkResolverbGruntime_resolve_interface_method6FrnICallInfo_nMmethodHandle_nLKlassHandle_nGHandle_4ipnGThread__v_; -text: .text%__1cICallInfoDset6MnLKlassHandle_1nMmethodHandle_2pnGThread__v_; -text: .text%__1cLklassItableUcompute_itable_index6FpnNmethodOopDesc__i_; -text: .text%__1cWConstantPoolCacheEntrySset_interface_call6MnMmethodHandle_i_v_; -text: .text%Unsafe_ObjectFieldOffset; -text: .text%__1cRfind_field_offset6FpnI_jobject_ipnGThread__i_; -text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_; -text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldNset_signature6FpnHoopDesc_2_v_; -text: .text%JVM_IHashCode; -text: .text%jni_GetStaticFieldID: jni.o; -text: .text%__1cNinstanceKlassKjni_id_for6Mi_pnFJNIid__; -text: .text%__1cNinstanceKlassPjni_id_for_impl6FnTinstanceKlassHandle_i_pnFJNIid__; -text: .text%__1cFJNIid2t6MpnMklassOopDesc_ip0_v_; -text: .text%jni_SetStaticObjectField: jni.o; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: instanceRefKlass.o; -text: .text%__1cNobjArrayKlassPoop_is_objArray6kM_i_: objArrayKlass.o; -text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNobjArrayKlassQarray_klass_impl6MipnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: objArrayKlass.o; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: arrayKlass.o; -text: .text%__1cNCollectedHeapYcommon_mem_allocate_init6FIipnGThread__pnIHeapWord__: arrayKlass.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: arrayKlass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: arrayKlass.o; -text: .text%jni_GetStringUTFLength: jni.o; -text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; -text: .text%jni_GetStringLength: jni.o; -text: .text%__1cQjava_lang_StringGlength6FpnHoopDesc__i_; -text: .text%jni_GetStringUTFRegion: jni.o; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; -text: .text%JVM_FindClassFromClassLoader; -text: .text%JVM_IsInterface; -text: .text%JVM_GetClassDeclaredConstructors; -text: .text%__1cNmethodOopDescOis_initializer6kM_i_; -text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDesc__; -text: .text%__1cNinstanceKlassQmethod_index_for6kMpnNmethodOopDesc_pnGThread__i_; -text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; -text: .text%__1cPSignatureStream2t6MnMsymbolHandle_i_v_; -text: .text%__1cPSignatureStreamEnext6M_v_; -text: .text%__1cKReflectionTget_exception_types6FnMmethodHandle_pnGThread__nOobjArrayHandle__; -text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__; -text: .text%__1cSconstMethodOopDescZchecked_exceptions_length6kM_i_; -text: .text%__1cbDjava_lang_reflect_ConstructorGcreate6FpnGThread__nGHandle__; -text: .text%__1cbDjava_lang_reflect_ConstructorJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorThas_signature_field6F_i_; -text: .text%__1cbDjava_lang_reflect_ConstructorVhas_annotations_field6F_i_; -text: .text%__1cNmethodOopDescLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cbDjava_lang_reflect_ConstructorPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorbFhas_parameter_annotations_field6F_i_; -text: .text%__1cNmethodOopDescVparameter_annotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cbDjava_lang_reflect_ConstructorZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cKarrayKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%JVM_Clone; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: jvm.o; -text: .text%__1cNCollectedHeapYcommon_mem_allocate_init6FIipnGThread__pnIHeapWord__: jvm.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: jvm.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: jvm.o; -text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; -text: .text%JVM_GetClassAccessFlags; -text: .text%JVM_GetClassName; -text: .text%__1cFKlassNexternal_name6kM_pkc_; -text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; -text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__; -text: .text%JVM_GetClassModifiers; -text: .text%jni_GetSuperclass: jni.o; -text: .text%__1cKJNIHandlesKmake_local6FpnHoopDesc__pnI_jobject__; -text: .text%__1cNFingerprinterIdo_array6Mii_v_: dump.o; -text: .text%JVM_NewInstanceFromConstructor; -text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_; -text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; -text: .text%__1cKReflectionGinvoke6FnTinstanceKlassHandle_nMmethodHandle_nGHandle_inOobjArrayHandle_nJBasicType_4ipnGThread__pnHoopDesc__; -text: .text%__1cKReflectionDbox6FpnGjvalue_nJBasicType_pnGThread__pnHoopDesc__; -text: .text%JVM_MaxMemory; -text: .text%__1cQGenCollectedHeapMmax_capacity6kM_I_; -text: .text%__1cQDefNewGenerationMmax_capacity6kM_I_; -text: .text%Unsafe_AllocateMemory; -text: .text%Unsafe_SetNativeLong; -text: .text%__1cNSignatureInfoHdo_byte6M_v_: bytecode.o; -text: .text%Unsafe_GetNativeByte; -text: .text%Unsafe_FreeMemory; -text: .text%__1cNSignatureInfoIdo_float6M_v_: bytecode.o; -text: .text%__1cFJNIidEfind6Mi_p0_; -text: .text%jni_NewObjectV: jni.o; -text: .text%__1cMalloc_object6FpnH_jclass_pnGThread__pnPinstanceOopDesc__: jni.o; -text: .text%jni_GetStringRegion: jni.o; -text: .text%__1cQjava_lang_StringGoffset6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringFvalue6FpnHoopDesc__pnQtypeArrayOopDesc__; -text: .text%jni_GetObjectField: jni.o; -text: .text%jni_GetStringCritical: jni.o; -text: .text%__1cJGC_lockerNlock_critical6FpnKJavaThread__v_: jni.o; -text: .text%jni_ReleaseStringCritical: jni.o; -text: .text%JVM_LoadLibrary; -text: .text%JVM_FindLibraryEntry; -text: .text%jni_GetJavaVM; -text: .text%JVM_IsSupportedJNIVersion; -text: .text%jni_SetIntField: jni.o; -text: .text%jni_SetLongField: jni.o; -text: .text%JVM_FindSignal; -text: .text%JVM_RegisterSignal; -text: .text%__1cCosMuser_handler6F_pv_; -text: .text%__1cCosGsignal6Fipv_1_; -text: .text%__1cWreset_vm_info_property6FpnGThread__v_: thread.o; -text: .text%__1cVquicken_jni_functions6F_v_; -text: .text%__1cQJNI_FastGetFieldbFgenerate_fast_get_boolean_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_int_field06FnJBasicType__pC_; -text: .text%__1cJAssemblerFtestb6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerMemit_arith_b6MiipnMRegisterImpl_i_v_; -text: .text%__1cYjni_GetBooleanField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_byte_field6F_pC_; -text: .text%__1cVjni_GetByteField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_char_field6F_pC_; -text: .text%__1cVjni_GetCharField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_short_field6F_pC_; -text: .text%__1cWjni_GetShortField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbBgenerate_fast_get_int_field6F_pC_; -text: .text%__1cUjni_GetIntField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_long_field6F_pC_; -text: .text%__1cVjni_GetLongField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_float_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_float_field06FnJBasicType__pC_; -text: .text%__1cJAssemblerFfst_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfstp_d6Mi_v_; -text: .text%__1cWjni_GetFloatField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_double_field6F_pC_; -text: .text%__1cXjni_GetDoubleField_addr6F_pC_; -text: .text%__1cSset_init_completed6F_v_; -text: .text%__1cJTimeStampGupdate6M_v_; -text: .text%__1cQSystemDictionarybAcompute_java_system_loader6FpnGThread__v_; -text: .text%jni_NewObjectArray: jni.o; -text: .text%__1cNobjArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: objArrayKlass.o; -text: .text%__1cNCollectedHeapYcommon_mem_allocate_init6FIipnGThread__pnIHeapWord__: objArrayKlass.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: objArrayKlass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: objArrayKlass.o; -text: .text%jni_SetObjectArrayElement: jni.o; -text: .text%jni_GetObjectArrayElement: jni.o; -text: .text%__1cSInterpreterRuntimebAfrequency_counter_overflow6FpnKJavaThread_pC_x_; -text: .text%__1cQSimpleCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; -text: .text%__1cRCompilationPolicybIreset_counter_for_invocation_event6MnMmethodHandle__v_; -text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cNCompileBrokerOcompile_method6FnMmethodHandle_i1ipkcpnGThread__pnHnmethod__; -text: .text%__1cQSimpleCompPolicyRcompilation_level6MnMmethodHandle_i_i_; -text: .text%__1cNCompileBrokerTcompile_method_base6FnMmethodHandle_ii1ipkcpnGThread__pnHnmethod__; -text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cLJvmtiExportQenter_live_phase6F_v_; -text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_; -text: .text%__1cUJvmtiEventControllerHvm_init6F_v_; -text: .text%__1cHMonitorKnotify_all6M_i_; -text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_; -text: .text%__1cMPeriodicTask2t6MI_v_; -text: .text%__1cMPeriodicTaskGenroll6M_v_; -text: .text%__1cURecompilationMonitorbGstart_recompilation_monitor_task6F_v_; -text: .text%__1cCosLsignal_init6F_v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_; -text: .text%__1cCosOsignal_init_pd6F_v_; -text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; -text: .text%__1cICompiler2t6M_v_; -text: .text%__1cNCompileBrokerQcompilation_init6FpnQAbstractCompiler__v_; -text: .text%__1cNCompileBrokerVinit_compiler_threads6Fi_v_; -text: .text%__1cICompilerOneeds_adapters6M_i_: c1_Compiler.o; -text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; -text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; -text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; -text: .text%__1cOCompilerThreadbCis_hidden_from_external_view6kM_i_: thread.o; -text: .text%__1cCosFyield6F_v_; -text: .text%__1cCosFsleep6FpnGThread_xi_i_; -text: .text%__1cGThreadRis_Watcher_thread6kM_i_: thread.o; -text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; -text: .text%__1cCosLsignal_wait6F_i_; -text: .text%__1cVcheck_pending_signals6Fi_i_: os_solaris.o; -text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o; -text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%__1cICompilerKinitialize6M_v_; -text: .text%__1cMCompileQdDueueDget6M_pnLCompileTask__; -text: .text%__1cKManagementKinitialize6FpnGThread__v_; -text: .text%__1cRLowMemoryDetectorKinitialize6F_v_; -text: .text%__1cXLowMemoryDetectorThreadbCis_hidden_from_external_view6kM_i_: lowMemoryDetector.o; -text: .text%__1cKJavaThreadOis_Java_thread6kM_i_: lowMemoryDetector.o; -text: .text%__1cLStatSamplerGengage6F_v_; -text: .text%__1cLStatSamplerKinitialize6F_v_; -text: .text%__1cLStatSamplerUcreate_misc_perfdata6F_v_; -text: .text%__1cCosRelapsed_frequency6F_x_; -text: .text%__1cLStatSamplerbMcreate_system_property_instrumentation6FpnGThread__v_; -text: .text%__1cLStatSamplerTget_system_property6FpkcpnGThread__2_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; -text: .text%__1cLStatSamplerXcreate_sampled_perfdata6F_v_; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnPPerfLongCounter__; -text: .text%__1cSHighResTimeSamplerLtake_sample6M_x_: statSampler.o; -text: .text%__1cPPerfDataManagerHsampled6F_pnMPerfDataList__; -text: .text%__1cMPerfDataListFclone6M_p0_; -text: .text%__1cMPerfDataList2t6Mp0_v_; -text: .text%__1cUGenericGrowableArrayNraw_appendAll6Mpk0_v_; -text: .text%__1cNWatcherThreadFstart6F_v_; -text: .text%__1cNWatcherThread2t6M_v_; -text: .text%__1cJTimeStampMmilliseconds6kM_x_; -text: .text%__1cKManagementWrecord_vm_startup_time6Fxx_v_; -text: .text%__1cORuntimeServiceYrecord_application_start6F_v_; -text: .text%__1cNWatcherThreadDrun6M_v_; -text: .text%__1cMPeriodicTaskMtime_to_wait6F_I_: thread.o; -text: .text%__1cNWatcherThreadRis_Watcher_thread6kM_i_: thread.o; -text: .text%__1cIos_sleep6Fxi_i_: os_solaris.o; -text: .text%__1cNgetTimeMillis6F_x_; -text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_; -text: .text%JVM_FindLoadedClass; -text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cQSystemDictionaryEfind6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%jni_CallStaticObjectMethod: jni.o; -text: .text%jni_NewByteArray: jni.o; -text: .text%jni_SetByteArrayRegion: jni.o; -text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; -text: .text%jni_NewObject: jni.o; -text: .text%__1cGThreadMis_VM_thread6kM_i_: lowMemoryDetector.o; -text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_; -text: .text%__1cRLowMemoryDetectorUhas_pending_requests6F_i_; -text: .text%__1cVjava_lang_ClassLoaderGparent6FpnHoopDesc__2_; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcinMsymbolHandle_4nGHandle_6_v_; -text: .text%__1cKExceptionsRspecial_exception6FpnGThread_pkcinMsymbolHandle_4_i_; -text: .text%__1cKExceptionsNnew_exception6FpnGThread_nMsymbolHandle_pkcnGHandle_6_6_; -text: .text%__1cKExceptionsNnew_exception6FpnGThread_nMsymbolHandle_3pnRJavaCallArguments_nGHandle_6_6_; -text: .text%JVM_FillInStackTrace; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle__v_; -text: .text%__1cIUniverseWis_out_of_memory_error6FnGHandle__i_; -text: .text%__1cVPreserveExceptionMark2t6MrpnGThread__v_; -text: .text%__1cKJavaThreadGactive6F_p0_; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_; -text: .text%__1cTjava_lang_ThrowableNset_backtrace6FpnHoopDesc_2_v_; -text: .text%__1cTjava_lang_ThrowableQclear_stacktrace6FpnHoopDesc__v_; -text: .text%__1cVPreserveExceptionMark2T6M_v_; -text: .text%__1cKExceptionsG_throw6FpnGThread_pkcinGHandle__v_; -text: .text%__1cKExceptionsRspecial_exception6FpnGThread_pkcinGHandle__i_; -text: .text%__1cGThreadVset_pending_exception6MpnHoopDesc_pkci_v_; -text: .text%__1cGEventsDlog6FpkcE_v_: exceptions.o; -text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; -text: .text%__1cNSharedRuntimebKexception_handler_for_return_address6FpC_1_; -text: .text%__1cNSharedRuntimebOraw_exception_handler_for_return_address6FpC_1_; -text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; -text: .text%__1cKJavaThreadNreguard_stack6MpC_i_; -text: .text%__1cSInterpreterRuntimePset_bcp_and_mdp6FpCpnKJavaThread__v_; -text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_; -text: .text%__1cFframeZinterpreter_frame_set_bcx6Mi_v_; -text: .text%__1cNCompileBrokerYcheck_compilation_result6FnMmethodHandle_iippnHnmethod__i_; -text: .text%__1cNCompileBrokerXcompilation_is_in_queue6FnMmethodHandle_i_i_; -text: .text%__1cNCompileBrokerZcompilation_is_prohibited6FnMmethodHandle_i_i_; -text: .text%__1cNCompileBrokerTis_not_compile_only6FnMmethodHandle__i_; -text: .text%__1cOCompilerOracleOshould_exclude6FnMmethodHandle__i_; -text: .text%__1cNCompileBrokerRassign_compile_id6FnMmethodHandle_i_I_; -text: .text%__1cNCompileBrokerTis_compile_blocking6FnMmethodHandle_i_i_; -text: .text%__1cNCompileBrokerTcreate_compile_task6FpnMCompileQdDueue_inMmethodHandle_i3ipkcii_pnLCompileTask__; -text: .text%__1cNCompileBrokerNallocate_task6F_pnLCompileTask__; -text: .text%__1cLCompileTaskKinitialize6MinMmethodHandle_i1ipkcii_v_; -text: .text%__1cMCompileQdDueueDadd6MpnLCompileTask__v_; -text: .text%__1cNCompileBrokerTwait_for_completion6FpnLCompileTask__pnHnmethod__; -text: .text%__1cCosPhint_no_preempt6F_v_; -text: .text%__1cSCompileTaskWrapper2t6MpnLCompileTask__v_; -text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; -text: .text%__1cNCompileBrokerQset_last_compile6FpnOCompilerThread_nMmethodHandle_ii_v_; -text: .text%__1cNCompileBrokerVpush_jni_handle_block6F_v_; -text: .text%__1cNCompileBrokerOcheck_break_at6FnMmethodHandle_iii_i_; -text: .text%__1cOCompilerOraclePshould_break_at6FnMmethodHandle__i_; -text: .text%__1cFciEnv2t6MpnHJNIEnv__iii_v_; -text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; -text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; -text: .text%__1cUGenericGrowableArray2t6MpnFArena_iipnEGrET__v_; -text: .text%__1cIciSymbol2t6MnMsymbolHandle__v_; -text: .text%__1cIciObject2t6MnGHandle__v_; -text: .text%__1cPciObjectFactoryEfind6MpnHoopDesc_pnNGrowableArray4CpnIciObject____i_; -text: .text%__1cPciObjectFactoryLis_found_at6MipnHoopDesc_pnNGrowableArray4CpnIciObject____i_; -text: .text%__1cPciObjectFactoryNinit_ident_of6MpnIciObject__v_; -text: .text%__1cIciObjectJset_ident6MI_v_; -text: .text%__1cPciObjectFactoryGinsert6MipnIciObject_pnNGrowableArray4C2___v_; -text: .text%__1cGciType2t6MnJBasicType__v_; -text: .text%__1cIciObject2t6M_v_; -text: .text%__1cPciObjectFactoryDget6MpnHoopDesc__pnIciObject__; -text: .text%__1cPciObjectFactoryNfind_non_perm6MpnHoopDesc__rpn0ANNonPermObject__; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: klassKlass.o; -text: .text%__1cPciObjectFactoryRcreate_new_object6MpnHoopDesc__pnIciObject__; -text: .text%__1cFKlassPoop_is_instance6kM_i_: methodKlass.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: methodKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: methodKlass.o; -text: .text%__1cIciSymbolEmake6Fpkc_p0_; -text: .text%__1cFciEnvIis_in_vm6F_i_; -text: .text%__1cIciSymbolJmake_impl6Fpkc_p0_; -text: .text%__1cHciKlass2t6MnLKlassHandle_pnIciSymbol__v_; -text: .text%__1cGciType2t6MnLKlassHandle__v_; -text: .text%__1cFKlassMoop_is_array6kM_i_: methodKlass.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: symbolKlass.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: symbolKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: symbolKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: symbolKlass.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: symbolKlass.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: klassKlass.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: klassKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: klassKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: klassKlass.o; -text: .text%__1cFKlassUoop_is_objArrayKlass6kM_i_: klassKlass.o; -text: .text%__1cFKlassVoop_is_typeArrayKlass6kM_i_: klassKlass.o; -text: .text%__1cFKlassUoop_is_instanceKlass6kM_i_: klassKlass.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: klassKlass.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassUoop_is_objArrayKlass6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassVoop_is_typeArrayKlass6kM_i_: instanceKlassKlass.o; -text: .text%__1cSinstanceKlassKlassUoop_is_instanceKlass6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cFKlassUoop_is_objArrayKlass6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cTtypeArrayKlassKlassVoop_is_typeArrayKlass6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: objArrayKlassKlass.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: objArrayKlassKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: objArrayKlassKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: objArrayKlassKlass.o; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: objArrayKlassKlass.o; -text: .text%__1cSobjArrayKlassKlassUoop_is_objArrayKlass6kM_i_: objArrayKlassKlass.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: objArrayKlassKlass.o; -text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle__v_; -text: .text%__1cPciInstanceKlassFsuper6M_p0_; -text: .text%__1cPciInstanceKlassTis_java_lang_Object6M_i_; -text: .text%__1cIciObjectGequals6Mp0_i_; -text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cHciKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cFKlassNoop_is_method6kM_i_: instanceKlass.o; -text: .text%__1cFKlassRoop_is_methodData6kM_i_: instanceKlass.o; -text: .text%__1cUciInstanceKlassKlassEmake6F_p0_; -text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; -text: .text%__1cGciType2t6MpnHciKlass__v_; -text: .text%__1cIciObject2t6MpnHciKlass__v_; -text: .text%__1cIciObjectUis_array_klass_klass6M_i_: ciObjectFactory.o; -text: .text%__1cPciObjArrayKlass2t6MpnIciSymbol_pnHciKlass_i_v_; -text: .text%__1cUciObjArrayKlassKlassEmake6F_p0_; -text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_; -text: .text%__1cRciArrayKlassKlassUis_array_klass_klass6M_i_: ciObjectFactory.o; -text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cMciArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cFciEnvWget_method_from_handle6MpnI_jobject__pnIciMethod__; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: methodKlass.o; -text: .text%__1cIciMethod2t6MnMmethodHandle__v_; -text: .text%__1cLciSignature2t6MpnHciKlass_pnIciSymbol__v_; -text: .text%__1cPSignatureStreamJis_object6kM_i_; -text: .text%__1cGciTypeEmake6FnJBasicType__p0_; -text: .text%__1cJTraceTime2t6MpkcpnMelapsedTimer_iipnMoutputStream__v_; -text: .text%__1cICompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cLCompilation2t6MpnQAbstractCompiler_pnFciEnv_pnIciMethod_ipnRC1_MacroAssembler__v_; -text: .text%__1cTExceptionRangeTable2t6Mi_v_; -text: .text%__1cWImplicitExceptionTableIset_size6MI_v_; -text: .text%__1cLCompilationOcompile_method6M_v_; -text: .text%__1cLCompilationKinitialize6M_v_; -text: .text%__1cLCompilationEcode6kM_pnKCodeBuffer__; -text: .text%__1cYDebugInformationRecorder2t6MpnLOopRecorder__v_; -text: .text%__1cUDebugInfoWriteStream2t6MpnYDebugInformationRecorder_i_v_; -text: .text%__1cLCompilationTdebug_info_recorder6kM_pnYDebugInformationRecorder__; -text: .text%__1cLCompilationbBis_optimized_library_method6kM_i_; -text: .text%__1cLCompilationTcompile_java_method6MpnLCodeOffsets__i_; -text: .text%__1cLCompilationTinitialize_oop_maps6M_v_; -text: .text%__1cIciMethodMall_oop_maps6M_pnKciLocalMap__; -text: .text%__1cSciGenerateLocalMap2t6MpnFArena_nMmethodHandle__v_; -text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; -text: .text%__1cSciGenerateLocalMapWfind_jsr_return_points6MnMmethodHandle__v_; -text: .text%__1cRRawBytecodeStream2t6MnMmethodHandle__v_; -text: .text%__1cRRawBytecodeStreamMset_interval6Mii_v_; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: ciOopMap.o; -text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; -text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: generateOopMap.o; -text: .text%__1cOGenerateOopMapbImark_bbheaders_and_count_gc_points6M_v_; -text: .text%__1cOGenerateOopMapNinitialize_bb6M_v_; -text: .text%__1cOGenerateOopMapLbb_mark_fct6Fp0ipi_v_; -text: .text%__1cOGenerateOopMapOset_bbmark_bit6Mi_v_; -text: .text%__1cOGenerateOopMapPjump_targets_do6MpnOBytecodeStream_pFp0ipi_v4_i_; -text: .text%__1cSciGenerateLocalMapRpossible_gc_point6MpnOBytecodeStream__i_; -text: .text%__1cSciGenerateLocalMapUbytecode_is_gc_point6FnJBytecodesECode_ii_i_; -text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; -text: .text%__1cOGenerateOopMapRinit_basic_blocks6M_v_; -text: .text%__1cOGenerateOopMapKinit_state6M_v_; -text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_; -text: .text%__1cOGenerateOopMapUreachable_basicblock6Fp0ipi_v_; -text: .text%__1cOGenerateOopMapSget_basic_block_at6kMi_pnKBasicBlock__; -text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__; -text: .text%__1cOGenerateOopMapYsetup_method_entry_state6M_v_; -text: .text%__1cOGenerateOopMapbAmake_context_uninitialized6M_v_; -text: .text%__1cOGenerateOopMapTmethodsig_to_effect6MpnNsymbolOopDesc_ipnNCellTypeState__i_; -text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_; -text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapKcopy_state6MpnNCellTypeState_2_v_; -text: .text%__1cOGenerateOopMapKinterp_all6M_v_; -text: .text%__1cOGenerateOopMapJinterp_bb6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapNrestore_state6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapQnext_bb_start_pc6MpnKBasicBlock__i_; -text: .text%__1cOGenerateOopMapHinterp16MpnOBytecodeStream__v_; -text: .text%__1cOGenerateOopMapGppload6MpnNCellTypeState_i_v_; -text: .text%__1cOGenerateOopMapHget_var6Mi_nNCellTypeState__; -text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_; -text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_; -text: .text%__1cOGenerateOopMapCpp6MpnNCellTypeState_2_v_; -text: .text%__1cOGenerateOopMapEppop6MpnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapFppop16MnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__; -text: .text%__1cOGenerateOopMapKcheck_type6MnNCellTypeState_1_v_; -text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapGppush16MnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; -text: .text%__1cOGenerateOopMapHset_var6MinNCellTypeState__v_; -text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; -text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; -text: .text%__1cOGenerateOopMapTmerge_state_vectors6MpnNCellTypeState_2_i_; -text: .text%__1cNCellTypeStateFmerge6kM0i_0_; -text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; -text: .text%__1cOGenerateOopMapXdo_return_monitor_check6M_v_; -text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; -text: .text%__1cSciGenerateLocalMapOreport_results6kM_i_: ciOopMap.o; -text: .text%__1cOGenerateOopMapNreport_result6M_v_; -text: .text%__1cSciGenerateLocalMapUfill_stackmap_prolog6Mi_v_; -text: .text%__1cSciGenerateLocalMapZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; -text: .text%__1cKciLocalMap2t6MpnFArena_iii_v_; -text: .text%__1cKciLocalMapRset_bci_for_index6Mii_v_; -text: .text%__1cSciGenerateLocalMapUfill_stackmap_epilog6M_v_: ciOopMap.o; -text: .text%__1cSciGenerateLocalMapOfill_init_vars6MpnNGrowableArray4Ci___v_; -text: .text%__1cKciLocalMapSset_nof_initialize6Mi_v_; -text: .text%__1cLCompilationJbuild_hir6M_v_; -text: .text%__1cCIR2t6MpnLCompilation_pnIciMethod_i_v_; -text: .text%__1cJValueTypeKinitialize6F_v_; -text: .text%__1cMciNullObjectEmake6F_p0_; -text: .text%__1cMGraphBuilderKinitialize6F_v_; -text: .text%__1cHIRScope2t6MpnLCompilation_p0ipnIciMethod_ii_v_; -text: .text%__1cOLocalSlotArray2t6MkikpnJLocalSlot__v_: c1_IR.o; -text: .text%__1cGBitMap2t6MI_v_; -text: .text%__1cGBitMapGresize6MI_v_; -text: .text%__1cNWordSizeArray2t6Mki1_v_: c1_IR.o; -text: .text%__1cJXHandlers2t6MpnIciMethod__v_; -text: .text%__1cIciMethodJload_code6M_v_; -text: .text%__1cIciMethodVhas_balanced_monitors6M_i_; -text: .text%__1cHIRScopeLbuild_graph6MpnLCompilation_i_pnKBlockBegin__; -text: .text%__1cQBlockListBuilder2t6MpnHIRScope_ii_v_; -text: .text%__1cPBlockBeginArray2t6MkikpnKBlockBegin__v_: c1_GraphBuilder.o; -text: .text%__1cQBlockListBuilderLset_leaders6M_v_; -text: .text%__1cQciBytecodeStream2t6MpnIciMethod__v_; -text: .text%__1cQciBytecodeStreamMset_interval6Mii_v_; -text: .text%__1cQBlockListBuilderMnew_block_at6MinKBlockBeginEFlag__p1_; -text: .text%__1cQBlockListBuilderUset_xhandler_entries6M_v_; -text: .text%__1cKValueStack2t6MpnHIRScope_ii_v_; -text: .text%__1cKValueArray2t6MkikpnLInstruction__v_: c1_ValueStack.o; -text: .text%__1cJLocalSlot2t6M_v_; -text: .text%__1cJLocalSlotIfor_type6MpnJValueType_ii_pnFLocal__: c1_IR.o; -text: .text%__1cKObjectTypeDtag6kM_nIValueTag__: c1_ValueType.o; -text: .text%__1cMGraphBuilder2t6MpnLCompilation_pnHIRScope_pnJBlockList_pnKBlockBegin__v_; -text: .text%__1cMGraphBuilderPpush_root_scope6MpnHIRScope_pnJBlockList_pnKBlockBegin__v_; -text: .text%__1cMGraphBuilderJScopeData2t6Mp1i_v_; -text: .text%__1cMGraphBuilderJScopeDataJset_scope6MpnHIRScope__v_; -text: .text%__1cMGraphBuilderUpush_exception_scope6M_v_; -text: .text%__1cOExceptionScope2t6M_v_; -text: .text%__1cOExceptionScopeEinit6M_v_; -text: .text%__1cIValueMap2t6M_v_; -text: .text%__1cMGraphBuilderJScopeDataQadd_to_work_list6MpnKBlockBegin__v_; -text: .text%__1cNResourceArrayGexpand6MIiri_v_; -text: .text%__1cMGraphBuilderSiterate_all_blocks6Mi_v_; -text: .text%__1cMGraphBuilderJScopeDataVremove_from_work_list6M_pnKBlockBegin__; -text: .text%__1cMGraphBuilderJScopeDataSis_work_list_empty6kM_i_; -text: .text%__1cMGraphBuilderOconnect_to_end6MpnKBlockBegin__pnIBlockEnd__; -text: .text%__1cIValueMapIkill_all6M_v_; -text: .text%__1cIValueMapRnumber_of_buckets6kM_i_; -text: .text%__1cIValueMapJbucket_at6Mi_pnGBucket__; -text: .text%__1cGBucketIkill_all6M_v_; -text: .text%__1cKValueStackEcopy6M_p0_; -text: .text%__1cGValuesIpush_all6Mpk0_v_: c1_ValueStack.o; -text: .text%__1cMGraphBuilderbBiterate_bytecodes_for_block6Mi_pnIBlockEnd__; -text: .text%__1cLInstructionLas_BlockEnd6M_pnIBlockEnd__: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderJScopeDataIblock_at6Mi_pnKBlockBegin__; -text: .text%__1cMGraphBuilderKload_local6MpnJValueType_i_v_; -text: .text%__1cJLocalSlotIfor_type6MpnJValueType_ii_pnFLocal__: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderGappend6MpnLInstruction__2_; -text: .text%__1cMGraphBuilderLappend_base6MpnLInstruction__2_; -text: .text%__1cJLoadLocalFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerMdo_LoadLocal6MpnJLoadLocal__v_; -text: .text%__1cIValueMapEfind6MpnLInstruction__2_; -text: .text%__1cLInstructionOas_AccessField6M_pnLAccessField__: c1_GraphBuilder.o; -text: .text%__1cLInstructionLas_UnsafeOp6M_pnIUnsafeOp__: c1_GraphBuilder.o; -text: .text%__1cLInstructionMas_Intrinsic6M_pnJIntrinsic__: c1_GraphBuilder.o; -text: .text%__1cLInstructionEhash6kM_i_: c1_GraphBuilder.o; -text: .text%__1cLInstructionNas_StateSplit6M_pnKStateSplit__: c1_GraphBuilder.o; -text: .text%__1cLInstructionIcan_trap6kM_i_: c1_GraphBuilder.o; -text: .text%__1cKValueStackLclear_store6Mi_v_; -text: .text%__1cKValueStackEpush6MpnJValueType_pnLInstruction__v_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderMaccess_field6MnJBytecodesECode__v_; -text: .text%__1cQciBytecodeStreamJget_field6kM_pnHciField__; -text: .text%__1cQciBytecodeStreamPget_field_index6kM_i_; -text: .text%__1cFciEnvSget_field_by_index6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cFciEnvXget_field_by_index_impl6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__; -text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; -text: .text%__1cFciEnvSget_klass_by_index6MpnPciInstanceKlass_iri_pnHciKlass__; -text: .text%__1cFciEnvXget_klass_by_index_impl6MpnPciInstanceKlass_iri_pnHciKlass__; -text: .text%__1cTconstantPoolOopDescSklass_at_if_loaded6FnSconstantPoolHandle_i_pnMklassOopDesc__; -text: .text%__1cPciObjectFactorySget_unloaded_klass6MpnHciKlass_pnIciSymbol_i_2_; -text: .text%__1cPciInstanceKlassGloader6M_pnHoopDesc__; -text: .text%__1cPciInstanceKlassRprotection_domain6M_pnHoopDesc__; -text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; -text: .text%__1cMas_ValueType6FnJBasicType__pnJValueType__; -text: .text%__1cHciFieldJwill_link6MpnPciInstanceKlass_nJBytecodesECode__i_; -text: .text%__1cMLinkResolverXresolve_klass_no_update6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cMGraphBuilderKlock_stack6M_pnKValueStack__; -text: .text%__1cKValueStackKcopy_locks6M_p0_; -text: .text%__1cJLoadFieldFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerMdo_LoadField6MpnJLoadField__v_; -text: .text%__1cLAccessFieldOas_AccessField6M_p0_: c1_Instruction.o; -text: .text%__1cJLoadFieldEhash6kM_i_: c1_Instruction.o; -text: .text%__1cJLoadFieldEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cIValueMapNlookup_bucket6Mi_pnGBucket__; -text: .text%__1cGBucketEfind6MpnLInstruction_i_2_; -text: .text%__1cGBucketGappend6MpnLInstruction_i_v_; -text: .text%__1cLInstructionNas_StateSplit6M_pnKStateSplit__: c1_Instruction.o; -text: .text%__1cLInstructionLas_BlockEnd6M_pnIBlockEnd__: c1_Instruction.o; -text: .text%__1cLAccessFieldIcan_trap6kM_i_: c1_Instruction.o; -text: .text%__1cOExceptionScopeEcopy6M_p0_; -text: .text%__1cOExceptionScopeGlength6kM_i_; -text: .text%__1cHIntTypeDtag6kM_nIValueTag__: c1_ValueType.o; -text: .text%__1cMGraphBuilderLstore_local6MpnJValueType_i_v_; -text: .text%__1cKValueStackDpop6MpnJValueType__pnLInstruction__: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderLstore_local6MpnKValueStack_pnLInstruction_pnJValueType_ii_v_; -text: .text%__1cJValueTypeNas_ObjectType6M_pnKObjectType__: c1_ValueType.o; -text: .text%__1cKStoreLocalFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerNdo_StoreLocal6MpnKStoreLocal__v_; -text: .text%__1cKValueStackLstore_local6MpnKStoreLocal_i_v_; -text: .text%__1cKValueStackQpin_stack_locals6Mi_v_; -text: .text%__1cKValueStackNpin_stack_all6MnLInstructionJPinReason__v_; -text: .text%__1cHIntTypeEsize6kM_i_: c1_ValueType.o; -text: .text%__1cMGraphBuilderHif_zero6MpnJValueType_nLInstructionJCondition__v_; -text: .text%__1cIConstantFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerLdo_Constant6MpnIConstant__v_; -text: .text%__1cLInstructionOas_AccessField6M_pnLAccessField__: c1_Instruction.o; -text: .text%__1cLInstructionLas_UnsafeOp6M_pnIUnsafeOp__: c1_Instruction.o; -text: .text%__1cLInstructionMas_Intrinsic6M_pnJIntrinsic__: c1_Instruction.o; -text: .text%__1cIConstantEhash6kM_i_; -text: .text%__1cHIntTypeDtag6kM_nIValueTag__: c1_Canonicalizer.o; -text: .text%__1cLIntConstantOas_IntConstant6M_p0_: c1_Canonicalizer.o; -text: .text%__1cIConstantEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cIConstantIcan_trap6kM_i_: c1_Instruction.o; -text: .text%__1cMGraphBuilderHif_node6MpnLInstruction_n0BJCondition_2pnKValueStack__v_; -text: .text%__1cCIf2t6MpnLInstruction_n0BJCondition_i2pnKBlockBegin_5pnKValueStack_i_v_: c1_GraphBuilder.o; -text: .text%__1cCIfFvisit6MpnSInstructionVisitor__v_: c1_Canonicalizer.o; -text: .text%__1cNCanonicalizerFdo_If6MpnCIf__v_; -text: .text%__1cJValueTypeLis_constant6kM_i_: c1_ValueType.o; -text: .text%__1cLInstructionMas_CompareOp6M_pnJCompareOp__: c1_Instruction.o; -text: .text%__1cLInstructionNas_InstanceOf6M_pnKInstanceOf__: c1_Instruction.o; -text: .text%__1cLInstructionOas_AccessField6M_pnLAccessField__: c1_Canonicalizer.o; -text: .text%__1cLInstructionLas_UnsafeOp6M_pnIUnsafeOp__: c1_Canonicalizer.o; -text: .text%__1cLInstructionMas_Intrinsic6M_pnJIntrinsic__: c1_Canonicalizer.o; -text: .text%__1cLInstructionEhash6kM_i_: c1_Canonicalizer.o; -text: .text%__1cKStateSplitNas_StateSplit6M_p0_: c1_Canonicalizer.o; -text: .text%__1cIBlockEndLas_BlockEnd6M_p0_: c1_Canonicalizer.o; -text: .text%__1cLInstructionIcan_trap6kM_i_: c1_Canonicalizer.o; -text: .text%__1cLInstructionJas_Return6M_pnGReturn__: c1_Canonicalizer.o; -text: .text%__1cLInstructionIas_Throw6M_pnFThrow__: c1_Canonicalizer.o; -text: .text%__1cKBlockBeginItry_join6MpnKValueStack__i_; -text: .text%__1cKValueStack2t6Mp0_v_; -text: .text%__1cKValueStackEinit6Mp0_v_; -text: .text%__1cMGraphBuilderNmethod_return6MpnLInstruction__v_; -text: .text%__1cGReturnFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerJdo_Return6MpnGReturn__v_; -text: .text%__1cKStateSplitNas_StateSplit6M_p0_: c1_GraphBuilder.o; -text: .text%__1cIBlockEndLas_BlockEnd6M_p0_: c1_GraphBuilder.o; -text: .text%__1cGReturnJas_Return6M_p0_: c1_GraphBuilder.o; -text: .text%__1cKValueStackbAeliminate_all_scope_stores6Mi_v_; -text: .text%__1cKValueStackQeliminate_stores6Mi_v_; -text: .text%__1cKValueStackMcaller_state6kM_p0_; -text: .text%__1cFciEnvWget_klass_by_name_impl6MpnHciKlass_pnIciSymbol_i_2_; -text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cHciKlassGloader6M_pnHoopDesc__: ciTypeArrayKlass.o; -text: .text%__1cFciEnvZcheck_klass_accessibility6MpnHciKlass_pnMklassOopDesc__i_; -text: .text%__1cIciObjectMis_obj_array6M_i_: ciInstanceKlass.o; -text: .text%__1cPciInstanceKlassRis_instance_klass6M_i_: ciInstanceKlass.o; -text: .text%__1cKObjectTypeNas_ObjectType6M_p0_: c1_ValueType.o; -text: .text%__1cJValueTypeOas_AddressType6M_pnLAddressType__: c1_ValueType.o; -text: .text%__1cKObjectTypeEsize6kM_i_: c1_ValueType.o; -text: .text%__1cMGraphBuilderHif_same6MpnJValueType_nLInstructionJCondition__v_; -text: .text%__1cJValueTypeOas_IntConstant6M_pnLIntConstant__: c1_ValueType.o; -text: .text%__1cKStoreFieldFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerNdo_StoreField6MpnKStoreField__v_; -text: .text%__1cLAccessFieldOas_AccessField6M_p0_: c1_GraphBuilder.o; -text: .text%__1cLAccessFieldIcan_trap6kM_i_: c1_GraphBuilder.o; -text: .text%__1cIValueMapKkill_field6MpnHciField__v_; -text: .text%__1cGBucketKkill_field6MpnHciField__v_; -text: .text%__1cKValueStackQpin_stack_fields6MpnHciField__v_; -text: .text%__1cKValueStackVis_same_across_scopes6Mp0_i_; -text: .text%__1cMGraphBuilderNarithmetic_op6MpnJValueType_nJBytecodesECode_pnKValueStack__v_; -text: .text%__1cJValueTypeEmeet6kMp0_1_; -text: .text%__1cHIntTypeEbase6kM_pnJValueType__: c1_Canonicalizer.o; -text: .text%__1cMArithmeticOpIcan_trap6kM_i_; -text: .text%__1cMArithmeticOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerPdo_ArithmeticOp6MpnMArithmeticOp__v_; -text: .text%__1cNCanonicalizerGdo_Op26MpnDOp2__v_; -text: .text%__1cLIntConstantLis_constant6kM_i_: c1_Canonicalizer.o; -text: .text%__1cNCanonicalizerTmove_const_to_right6MpnDOp2__v_; -text: .text%__1cMArithmeticOpOis_commutative6kM_i_; -text: .text%__1cMArithmeticOpEhash6kM_i_: c1_Instruction.o; -text: .text%__1cMArithmeticOpEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cMGraphBuilderJincrement6M_v_; -text: .text%__1cHIntTypeEbase6kM_pnJValueType__: c1_ValueType.o; -text: .text%__1cMGraphBuilderMload_indexed6MnJBasicType__v_; -text: .text%__1cLLoadIndexedFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerOdo_LoadIndexed6MpnLLoadIndexed__v_; -text: .text%__1cLLoadIndexedEhash6kM_i_: c1_Instruction.o; -text: .text%__1cLLoadIndexedEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cLAccessArrayIcan_trap6kM_i_: c1_Instruction.o; -text: .text%__1cIConstantIis_equal6kMpnLInstruction__i_; -text: .text%__1cIConstantLas_Constant6M_p0_: c1_Instruction.o; -text: .text%__1cEGotoFvisit6MpnSInstructionVisitor__v_: c1_Canonicalizer.o; -text: .text%__1cNCanonicalizerHdo_Goto6MpnEGoto__v_; -text: .text%__1cHIRScopeMheader_block6MpnKBlockBegin_n0BEFlag__2_; -text: .text%__1cCIRIoptimize6M_v_; -text: .text%__1cJOptimizer2t6MpnCIR__v_; -text: .text%__1cJOptimizerbHeliminate_conditional_expressions6M_v_; -text: .text%__1cCIRQiterate_preorder6MpnMBlockClosure__v_; -text: .text%__1cKBlockBeginQiterate_preorder6MpnMBlockClosure__v_; -text: .text%__1cJboolArray2t6Mki1_v_: c1_Instruction.o; -text: .text%__1cKBlockBeginQiterate_preorder6MrnJboolArray_pnMBlockClosure__v_; -text: .text%__1cNCE_EliminatorIblock_do6MpnKBlockBegin__v_: c1_Optimizer.o; -text: .text%__1cLInstructionFas_If6M_pnCIf__: c1_IR.o; -text: .text%__1cLInstructionFas_If6M_pnCIf__: c1_Canonicalizer.o; -text: .text%__1cCIfFas_If6M_p0_: c1_Canonicalizer.o; -text: .text%__1cHIntTypeKas_IntType6M_p0_: c1_ValueType.o; -text: .text%__1cNCE_EliminatorRsimple_value_copy6MpnLInstruction__2_: c1_Optimizer.o; -text: .text%__1cLInstructionLas_Constant6M_pnIConstant__: c1_GraphBuilder.o; -text: .text%__1cJLoadLocalMas_LoadLocal6M_p0_: c1_GraphBuilder.o; -text: .text%__1cLInstructionHas_Goto6M_pnEGoto__: c1_GraphBuilder.o; -text: .text%__1cLInstructionFas_If6M_pnCIf__: c1_GraphBuilder.o; -text: .text%__1cJOptimizerQeliminate_blocks6M_v_; -text: .text%__1cUGenericGrowableArray2t6MiipnEGrET_i_v_; -text: .text%__1cSPredecessorCounterIblock_do6MpnKBlockBegin__v_: c1_Optimizer.o; -text: .text%__1cLBlockMergerIblock_do6MpnKBlockBegin__v_: c1_Optimizer.o; -text: .text%__1cLBlockMergerJtry_merge6MpnKBlockBegin__i_: c1_Optimizer.o; -text: .text%__1cLInstructionHas_Goto6M_pnEGoto__: c1_IR.o; -text: .text%__1cEGotoHas_Goto6M_p0_: c1_Canonicalizer.o; -text: .text%__1cLInstructionHas_Goto6M_pnEGoto__: c1_Canonicalizer.o; -text: .text%__1cJOptimizerVeliminate_null_checks6M_v_; -text: .text%__1cGBitMapFclear6M_v_; -text: .text%__1cGBitMapUclear_range_of_words6MII_v_: bitMap.o; -text: .text%__1cNValueSetArray2t6MkikpnIValueSet__v_: c1_Optimizer.o; -text: .text%__1cTNullCheckEliminatorHiterate6MpnKBlockBegin__v_; -text: .text%__1cTNullCheckEliminatorLiterate_all6M_v_; -text: .text%__1cTNullCheckEliminatorLiterate_one6MpnKBlockBegin__v_; -text: .text%__1cJLocalSlotIfor_type6MpnJValueType_ii_pnFLocal__: c1_Optimizer.o; -text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%__1cKStateSplitPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cKBlockBeginFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorNdo_BlockBegin6MpnKBlockBegin__v_; -text: .text%__1cKStateSplitPinput_values_do6MpFppnLInstruction__v_v_: c1_IR.o; -text: .text%__1cEBaseFvisit6MpnSInstructionVisitor__v_: c1_IR.o; -text: .text%__1cQNullCheckVisitorHdo_Base6MpnEBase__v_; -text: .text%__1cTNullCheckEliminatorPmerge_state_for6MpnKBlockBegin_pnKValueStack_pnIValueSet__i_; -text: .text%__1cPBlockBeginArrayIindex_of6kMkpnKBlockBegin__i_: c1_Optimizer.o; -text: .text%__1cKStateSplitPinput_values_do6MpFppnLInstruction__v_v_: c1_Canonicalizer.o; -text: .text%__1cQNullCheckVisitorHdo_Goto6MpnEGoto__v_; -text: .text%__1cLInstructionMas_NullCheck6M_pnJNullCheck__: c1_GraphBuilder.o; -text: .text%__1cLInstructionMas_NullCheck6M_pnJNullCheck__: c1_Instruction.o; -text: .text%__1cKStoreLocalPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cTNullCheckEliminatorIdo_value6FppnLInstruction__v_; -text: .text%__1cFLocalPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cFLocalFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorIdo_Local6MpnFLocal__v_; -text: .text%__1cLAccessFieldPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; -text: .text%__1cLAccessLocalPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorMdo_LoadLocal6MpnJLoadLocal__v_; -text: .text%__1cTNullCheckEliminatorQhandle_LoadLocal6MpnJLoadLocal__v_; -text: .text%__1cQNullCheckVisitorMdo_LoadField6MpnJLoadField__v_; -text: .text%__1cTNullCheckEliminatorShandle_AccessField6MpnLAccessField__v_; -text: .text%__1cQNullCheckVisitorNdo_StoreLocal6MpnKStoreLocal__v_; -text: .text%__1cTNullCheckEliminatorRhandle_StoreLocal6MpnKStoreLocal__v_; -text: .text%__1cCIfPinput_values_do6MpFppnLInstruction__v_v_: c1_Canonicalizer.o; -text: .text%__1cIConstantPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorLdo_Constant6MpnIConstant__v_; -text: .text%__1cQNullCheckVisitorFdo_If6MpnCIf__v_; -text: .text%__1cDOp2Pinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorPdo_ArithmeticOp6MpnMArithmeticOp__v_; -text: .text%__1cNAccessIndexedPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorOdo_LoadIndexed6MpnLLoadIndexed__v_; -text: .text%__1cTNullCheckEliminatorShandle_LoadIndexed6MpnLLoadIndexed__v_; -text: .text%__1cGBitMapbCset_intersection_with_result6M0_i_; -text: .text%__1cKStoreFieldPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorNdo_StoreField6MpnKStoreField__v_; -text: .text%__1cGReturnPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorJdo_Return6MpnGReturn__v_; -text: .text%__1cJboolArray2t6Mki1_v_: c1_Optimizer.o; -text: .text%__1cCIRTcompute_locals_size6M_v_; -text: .text%__1cHIRScopePallocate_locals6MipnMWordSizeList__i_; -text: .text%__1cHIRScopeGlocals6M_pnJLocalList__; -text: .text%__1cJLocalSlotOcollect_locals6MpnJLocalList__v_; -text: .text%__1cHIRScopePargument_locals6M_pnJLocalList__; -text: .text%__1cJLocalSlotXcollect_argument_locals6MpnJLocalList__v_; -text: .text%__1cCIRTallocate_local_name6M_i_; -text: .text%__1cMWordSizeListEgrow6Mki1_v_: c1_IR.o; -text: .text%__1cCIRSnotice_used_offset6Mi_v_; -text: .text%__1cCIRNcompute_loops6M_v_; -text: .text%__1cIciMethodJhas_loops6kM_i_; -text: .text%__1cNmethodOopDescWcompute_has_loops_flag6M_i_; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: methodOop.o; -text: .text%__1cKLoopFinder2t6MpnCIR_i_v_; -text: .text%__1cSBlockLoopInfoArray2t6MkikpnNBlockLoopInfo__v_: c1_Loops.o; -text: .text%__1cKLoopFinderNcompute_loops6Mi_pnILoopList__; -text: .text%__1cJboolArray2t6Mki1_v_: c1_Loops.o; -text: .text%__1cKLoopFinderScompute_dominators6MpnJboolArray__v_; -text: .text%__1cGBitMapGat_put6MIi_v_; -text: .text%__1cRCreateInfoClosureIblock_do6MpnKBlockBegin__v_: c1_Loops.o; -text: .text%__1cNBlockLoopInfo2t6MpnKBlockBegin_i_v_; -text: .text%__1cPSetPredsClosureIblock_do6MpnKBlockBegin__v_: c1_Loops.o; -text: .text%__1cKLoopFinderSdominator_walk_sux6MpnKBlockBegin_pnJboolArray__v_; -text: .text%__1cGBitMapQset_intersection6M0_v_; -text: .text%__1cGBitMapHis_same6M0_i_; -text: .text%__1cKLoopFinderOfind_backedges6MpnJboolArray__pnILoopList__; -text: .text%__1cELoop2t6MpnKBlockBegin_2_v_: c1_Loops.o; -text: .text%__1cKLoopFinderSgather_loop_blocks6MpnILoopList__v_; -text: .text%__1cPBlockBeginArrayIindex_of6kMkpnKBlockBegin__i_: c1_Loops.o; -text: .text%__1cKLoopFinderKfind_loops6MpnILoopList_i_2_; -text: .text%__1cKScanBlocks2t6MpnJBlockList__v_; -text: .text%__1cIintStack2t6M_v_: c1_ScanBlocks.o; -text: .text%__1cKScanBlocksEscan6MpnKScanResult_i_v_; -text: .text%__1cKScanBlocksKscan_block6MpnKBlockBegin_pnKScanResult_i_v_; -text: .text%__1cLIllegalTypeDtag6kM_nIValueTag__: c1_ValueType.o; -text: .text%__1cLInstructionJas_Invoke6M_pnGInvoke__: c1_GraphBuilder.o; -text: .text%__1cLInstructionLas_NewArray6M_pnINewArray__: c1_GraphBuilder.o; -text: .text%__1cLInstructionOas_NewInstance6M_pnLNewInstance__: c1_GraphBuilder.o; -text: .text%__1cLInstructionQas_AccessMonitor6M_pnNAccessMonitor__: c1_GraphBuilder.o; -text: .text%__1cLInstructionOas_AccessLocal6M_pnLAccessLocal__: c1_Instruction.o; -text: .text%__1cLAccessLocalOas_AccessLocal6M_p0_: c1_GraphBuilder.o; -text: .text%__1cLInstructionNas_StoreLocal6M_pnKStoreLocal__: c1_GraphBuilder.o; -text: .text%__1cKStoreLocalNas_StoreLocal6M_p0_: c1_GraphBuilder.o; -text: .text%__1cKScanBlocksRaccumulate_access6MinIValueTag_i_v_; -text: .text%__1cKScanBlocksPincrement_count6MnIValueTag_ii_v_; -text: .text%__1cKScanBlocksJget_array6MnIValueTag__pnIintStack__; -text: .text%__1cIintStackEgrow6Mki1_v_: c1_ScanBlocks.o; -text: .text%__1cKScanBlocksLupdate_type6MinIValueTag__v_; -text: .text%__1cLInstructionJas_Invoke6M_pnGInvoke__: c1_Canonicalizer.o; -text: .text%__1cLInstructionLas_NewArray6M_pnINewArray__: c1_Canonicalizer.o; -text: .text%__1cLInstructionOas_NewInstance6M_pnLNewInstance__: c1_Canonicalizer.o; -text: .text%__1cLInstructionQas_AccessMonitor6M_pnNAccessMonitor__: c1_Canonicalizer.o; -text: .text%__1cJ_LoopListIpush_all6Mpk0_v_: c1_Loops.o; -text: .text%__1cKLoopFinderbEcompute_loop_exits_and_entries6MpnILoopList__v_; -text: .text%__1cKLoopFinderRfind_loop_entries6MpnKBlockBegin_pnELoop__v_; -text: .text%__1cKLoopFinderPfind_loop_exits6MpnKBlockBegin_pnELoop__v_; -text: .text%__1cKLoopFinderbDcompute_single_precision_flag6MpnILoopList__v_; -text: .text%__1cKLoopFinderNinsert_blocks6MpnILoopList__v_; -text: .text%__1cIintArray2t6Mki1_v_: c1_Loops.o; -text: .text%__1cJBlockListPiterate_forward6MpnMBlockClosure__v_; -text: .text%__1cGTaggerIblock_do6MpnKBlockBegin__v_: c1_Loops.o; -text: .text%__1cNPairCollectorIblock_do6MpnKBlockBegin__v_: c1_Loops.o; -text: .text%__1cNResourceArrayEsort6MIpGpkv2_i_v_; -text: .text%__1cRsort_by_block_ids6FppnJBlockPair_2_i_: c1_Loops.o; -text: .text%__1cKLoopFinderUinsert_caching_block6MpnILoopList_pnKBlockBegin_4_4_; -text: .text%__1cLInstructionQas_CachingChange6M_pnNCachingChange__: c1_GraphBuilder.o; -text: .text%__1cKStateSplitFscope6kM_pnHIRScope__; -text: .text%__1cKLoopFinderJnew_block6MpnHIRScope_i_pnKBlockBegin__; -text: .text%__1cIBlockEndOsubstitute_sux6MpnKBlockBegin_2_v_; -text: .text%__1cILoopListMupdate_loops6MpnKBlockBegin_22_v_; -text: .text%__1cELoopSupdate_loop_blocks6MpnKBlockBegin_22_v_; -text: .text%__1cCIRMcompute_code6M_v_; -text: .text%__1cJboolArray2t6Mki1_v_: c1_IR.o; -text: .text%__1cCIRWiterate_and_set_weight6kMrnJboolArray_pnKBlockBegin_pnJBlockList_i_v_; -text: .text%__1cKBlockBeginKset_weight6Mi_v_; -text: .text%__1cLInstructionIas_Throw6M_pnFThrow__: c1_IR.o; -text: .text%__1cLInstructionJas_Return6M_pnGReturn__: c1_IR.o; -text: .text%__1cLInstructionIas_Throw6M_pnFThrow__: c1_GraphBuilder.o; -text: .text%__1cDcmp6FppnKBlockBegin_2_i_: c1_IR.o; -text: .text%__1cUSuxAndWeightAdjusterIblock_do6MpnKBlockBegin__v_: c1_IR.o; -text: .text%__1cJBlockListJblocks_do6MpFpnKBlockBegin__v_v_; -text: .text%__1cQUseCountComputerRcompute_use_count6FpnKBlockBegin__v_: c1_IR.o; -text: .text%__1cQUseCountComputerXbasic_compute_use_count6FpnKBlockBegin__v_: c1_IR.o; -text: .text%__1cQUseCountComputerQupdate_use_count6FppnLInstruction__v_: c1_IR.o; -text: .text%__1cFLocalIas_Local6M_p0_: c1_GraphBuilder.o; -text: .text%__1cKStateSplitPstate_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cKValueStackJvalues_do6MpFppnLInstruction__v_v_; -text: .text%__1cQUseCountComputerPupdated_pinning6FpnKBlockBegin__i_: c1_IR.o; -text: .text%__1cNCachingChangePinput_values_do6MpFppnLInstruction__v_v_: c1_Loops.o; -text: .text%__1cLInstructionLas_BlockEnd6M_pnIBlockEnd__: c1_Loops.o; -text: .text%__1cIBlockEndLas_BlockEnd6M_p0_: c1_IR.o; -text: .text%__1cLCompilationIemit_lir6M_v_; -text: .text%__1cIFrameMap2t6Mi_v_; -text: .text%__1cIFrameMapLFpuStackSim2t6M_v_; -text: .text%__1cLCompilationNinit_framemap6MpnIFrameMap__v_; -text: .text%__1cIFrameMapbCset_local_name_to_offset_map6MpnMWordSizeList__v_; -text: .text%__1cLLIR_Emitter2t6MpnLCompilation__v_; -text: .text%__1cIValueGenOinit_value_gen6F_v_; -text: .text%__1cIRegAlloc2t6M_v_; -text: .text%__1cNc1_AllocTable2t6Mi_v_; -text: .text%__1cIRegAllocFclear6M_v_; -text: .text%__1cNCodeGenerator2t6MpnIValueGen_pnRValueGenInvariant__v_; -text: .text%__1cNCodeGeneratorIblock_do6MpnKBlockBegin__v_; -text: .text%__1cLLIR_EmitterMmust_bailout6kM_i_; -text: .text%__1cNCodeGeneratorPblock_do_prolog6MpnKBlockBegin__v_; -text: .text%__1cIValueGenLstart_block6MpnKBlockBegin__v_; -text: .text%__1cLLIR_EmitterLstart_block6MpnKBlockBegin__v_; -text: .text%__1cILIR_List2t6MpnLCompilation__v_; -text: .text%__1cIValueGenQbind_block_entry6MpnKBlockBegin__v_; -text: .text%__1cLLIR_EmitterQbind_block_entry6MpnKBlockBegin__v_; -text: .text%__1cIValueGenMblock_prolog6MpnKBlockBegin__v_; -text: .text%__1cIValueGenHdo_root6MpnLInstruction__v_; -text: .text%__1cLInstructionGas_Phi6M_pnDPhi__: c1_GraphBuilder.o; -text: .text%__1cIValueGenNdo_BlockBegin6MpnKBlockBegin__v_; -text: .text%__1cQDelayedSpillMark2T6M_v_: c1_CodeGenerator.o; -text: .text%__1cLInstructionGas_Phi6M_pnDPhi__: c1_IR.o; -text: .text%__1cIValueGenHdo_Base6MpnEBase__v_; -text: .text%__1cIValueGenNreceiverRInfo6F_nFRInfo__; -text: .text%__1cIValueGenMicKlassRInfo6F_nFRInfo__; -text: .text%__1cLCompilationNget_init_vars6M_pnIintStack__; -text: .text%__1cLLIR_EmitterJstd_entry6MpnHIRScope_pnIintStack_nFRInfo_5_v_; -text: .text%__1cILIR_ListWunverified_entry_point6MnFRInfo_1_v_: c1_LIREmitter.o; -text: .text%__1cLLIR_OprDescIsize_for6FnJBasicType__n0AHOprSize__: c1_LIREmitter.o; -text: .text%__1cLLIR_EmitterGmethod6kM_pnIciMethod__; -text: .text%__1cMCodeEmitInfo2t6MpnLLIR_Emitter_ipnIintStack_pnKValueStack_pnOExceptionScope_pnPRInfoCollection__v_; -text: .text%__1cLCompilationVvalue_stack2lir_stack6MpnKValueStack__pnNGrowableArray4CpnLLIR_OprDesc____; -text: .text%__1cIValueGenMblock_epilog6MpnKBlockBegin__v_; -text: .text%__1cNCodeGeneratorPblock_do_epilog6MpnKBlockBegin__v_; -text: .text%__1cLInstructionGas_Phi6M_pnDPhi__: c1_Canonicalizer.o; -text: .text%__1cIValueGenHdo_Goto6MpnEGoto__v_; -text: .text%__1cIValueGenNset_no_result6MpnLInstruction__v_; -text: .text%__1cIValueGenLmove_to_phi6MpnKValueStack_i_i_; -text: .text%__1cIValueGenWgoto_default_successor6MpnIBlockEnd_pnMCodeEmitInfo__v_; -text: .text%__1cLInstructionGas_Phi6M_pnDPhi__: c1_Instruction.o; -text: .text%__1cIValueGenMdo_LoadField6MpnJLoadField__v_; -text: .text%__1cLAccessFieldKlock_stack6kM_pnKValueStack__: c1_Instruction.o; -text: .text%__1cIValueGenEwalk6MpnLInstruction__v_; -text: .text%__1cIValueGenMdo_LoadLocal6MpnJLoadLocal__v_; -text: .text%__1cIValueGenJload_item6MpnEItem__v_; -text: .text%__1cEItemGupdate6M_v_; -text: .text%__1cIValueGenQset_maynot_spill6MpnEItem__v_; -text: .text%__1cIValueGenSfpu_fanout_handled6MpnEItem__i_; -text: .text%__1cEItemEtype6kM_pnJValueType__: c1_Items.o; -text: .text%__1cIValueGenPlock_free_rinfo6MpnLInstruction_pnJValueType__nFRInfo__; -text: .text%__1cIRegAllocMhas_free_reg6kMpnJValueType__i_; -text: .text%__1cIRegAllocMhas_free_reg6kMnIValueTag__i_; -text: .text%__1cNc1_AllocTableMhas_one_free6kM_i_; -text: .text%__1cIRegAllocNget_lock_temp6MpnLInstruction_pnJValueType__nFRInfo__; -text: .text%__1cIRegAllocMget_free_reg6MpnJValueType__nFRInfo__; -text: .text%__1cIRegAllocMget_free_reg6MnIValueTag__nFRInfo__; -text: .text%__1cNc1_AllocTableIget_free6M_i_; -text: .text%__1cNc1_AllocTablePget_free_helper6Mi_i_; -text: .text%__1cIRegAllocIlock_reg6MpnLInstruction_nFRInfo_i_v_; -text: .text%__1cJRInfo2RegFdo_it6M_v_: c1_RegAlloc.o; -text: .text%__1cHLockRegGdo_cpu6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIRegAllocOset_locked_cpu6MipnLInstruction_i_v_; -text: .text%__1cNc1_AllocTableKset_locked6Mi_v_; -text: .text%__1cLCompilationIitem2lir6MpknEItem__pnLLIR_OprDesc__; -text: .text%__1cLCompilationKitem2stack6MpknEItem__i_; -text: .text%__1cJValueTypeNas_DoubleType6M_pnKDoubleType__: c1_ValueType.o; -text: .text%__1cMas_BasicType6FpnJValueType__nJBasicType__; -text: .text%__1cJValueTypeMas_ArrayType6M_pnJArrayType__: c1_ValueType.o; -text: .text%__1cLLIR_OprDescIsize_for6FnJBasicType__n0AHOprSize__: c1_Compilation.o; -text: .text%__1cLLIR_EmitterEmove6MpnLLIR_OprDesc_nFRInfo__v_; -text: .text%__1cILIR_ListEmove6MpnLLIR_OprDesc_2pnMCodeEmitInfo__v_: c1_LIREmitter.o; -text: .text%__1cIValueGenJitem_free6MpnEItem__v_; -text: .text%__1cIRegAllocPincr_spill_lock6MnFRInfo__v_; -text: .text%__1cQChangeSpillCountGdo_cpu6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIValueGenFrfree6MpnEItem__v_; -text: .text%__1cIRegAllocPdecr_spill_lock6MnFRInfo__v_; -text: .text%__1cIRegAllocIfree_reg6MnFRInfo__v_; -text: .text%__1cHFreeRegGdo_cpu6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIRegAllocMset_free_cpu6Mi_v_; -text: .text%__1cNc1_AllocTableIset_free6Mi_v_; -text: .text%__1cIValueGenWrlock_result_with_hint6MpnLInstruction_pknEItem__nFRInfo__; -text: .text%__1cIValueGenFrlock6MpnLInstruction_pknEItem__nFRInfo__; -text: .text%__1cIRegAllocMget_lock_reg6MpnLInstruction_pnJValueType__nFRInfo__; -text: .text%__1cLLIR_EmitterKfield_load6MnFRInfo_pnHciField_pnLLIR_OprDesc_iiipnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListMload_mem_reg6MnFRInfo_i1nJBasicType_pnMCodeEmitInfo_nHLIR_Op1NLIR_PatchCode__v_; -text: .text%__1cLLIR_OprDescIsize_for6FnJBasicType__n0AHOprSize__: c1_LIR.o; -text: .text%__1cIRegAllocHset_reg6MnFRInfo_ipnLInstruction__v_; -text: .text%__1cGSetRegGdo_cpu6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIRegAllocLset_cpu_reg6MiipnLInstruction__v_; -text: .text%__1cIValueGenNdo_StoreLocal6MpnKStoreLocal__v_; -text: .text%__1cEItemRhandle_float_kind6M_v_; -text: .text%__1cEItemNset_from_item6Mpk0_v_: c1_Items.o; -text: .text%__1cIValueGenXcan_inline_any_constant6kM_i_; -text: .text%__1cIValueGenSmust_copy_register6MpnEItem__i_; -text: .text%__1cIValueGenUcheck_float_register6MpnEItem__v_; -text: .text%__1cIRegAllocLis_free_reg6kMnFRInfo__i_; -text: .text%__1cJIsFreeRegGdo_cpu6Mi_v_: c1_RegAlloc.o; -text: .text%__1cNc1_AllocTableHis_free6kMi_i_; -text: .text%__1cLLIR_EmitterJopr2local6MipnLLIR_OprDesc__v_; -text: .text%__1cILIR_ListQreg2single_stack6MnFRInfo_inJBasicType__v_: c1_LIREmitter.o; -text: .text%__1cIValueGenFdo_If6MpnCIf__v_; -text: .text%__1cIHintItemNset_from_item6MpknEItem__v_; -text: .text%__1cIHintItemEtype6kM_pnJValueType__: c1_Items.o; -text: .text%__1cJValueTypeMas_FloatType6M_pnJFloatType__: c1_ValueType.o; -text: .text%__1cIValueGenLdo_Constant6MpnIConstant__v_; -text: .text%__1cJValueTypeRas_ObjectConstant6M_pnOObjectConstant__: c1_Canonicalizer.o; -text: .text%__1cIValueGenOdont_load_item6MpnEItem__v_; -text: .text%__1cIValueGenWdont_load_item_nocheck6MpnEItem__v_; -text: .text%__1cLLIR_OprFactKvalue_type6FpnJValueType__pnLLIR_OprDesc__; -text: .text%__1cLLIR_EmitterFif_op6MinLInstructionJCondition_pnLLIR_OprDesc_4pnKBlockBegin_66pnMCodeEmitInfo__v_; -text: .text%__1cJLIR_ConstEtype6kM_nJBasicType__: c1_CacheLocals.o; -text: .text%__1cJLIR_ConstLas_constant6M_p0_: c1_CacheLocals.o; -text: .text%__1cLLIR_EmitterIlir_cond6MnLInstructionJCondition__nMLIR_OpBranchNLIR_Condition__; -text: .text%__1cILIR_ListDcmp6MnMLIR_OpBranchNLIR_Condition_pnLLIR_OprDesc_4pnMCodeEmitInfo__v_: c1_LIREmitter.o; -text: .text%__1cILIR_ListGbranch6MnMLIR_OpBranchNLIR_Condition_pnKBlockBegin__v_; -text: .text%__1cMLIR_OpBranch2t6Mn0ANLIR_Condition_pnKBlockBegin_pnMCodeEmitInfo__v_; -text: .text%__1cEItemEtype6kM_pnJValueType__: c1_CodeGenerator.o; -text: .text%__1cJArrayTypeMas_ArrayType6M_p0_: c1_ValueType.o; -text: .text%__1cLLIR_EmitterHopr2int6MpnLLIR_OprDesc__i_; -text: .text%__1cILIR_ListJint2stack6Mii_v_: c1_LIREmitter.o; -text: .text%__1cLInstructionGas_Phi6M_pnDPhi__: c1_Loops.o; -text: .text%__1cNCachingChangeFvisit6MpnSInstructionVisitor__v_: c1_Loops.o; -text: .text%__1cIValueGenQdo_CachingChange6MpnNCachingChange__v_; -text: .text%__1cIValueGenPdo_ArithmeticOp6MpnMArithmeticOp__v_; -text: .text%__1cIValueGenTdo_ArithmeticOp_Int6MpnMArithmeticOp__v_; -text: .text%__1cIValueGenOload_item_hint6MpnEItem_pk1_v_; -text: .text%__1cEItemRget_jint_constant6kM_i_; -text: .text%__1cLLIR_EmitterRarithmetic_op_int6MnJBytecodesECode_pnLLIR_OprDesc_44nFRInfo__v_; -text: .text%__1cLLIR_EmitterNarithmetic_op6MnJBytecodesECode_pnLLIR_OprDesc_44inFRInfo_pnMCodeEmitInfo__v_; -text: .text%__1cLLIR_EmitterYstrength_reduce_multiply6MpnLLIR_OprDesc_i22_i_; -text: .text%__1cILIR_ListHreg2reg6MnFRInfo_1nJBasicType__v_: c1_LIREmitter_x86.o; -text: .text%__1cLLIR_OprDescIsize_for6FnJBasicType__n0AHOprSize__: c1_LIREmitter_x86.o; -text: .text%__1cLlog2_intptr6Fi_i_: c1_LIREmitter_x86.o; -text: .text%__1cILIR_ListKshift_left6MpnLLIR_OprDesc_222_v_; -text: .text%__1cILIR_ListDsub6MpnLLIR_OprDesc_22pnMCodeEmitInfo__v_: c1_LIREmitter_x86.o; -text: .text%__1cIValueGenWcan_inline_as_constant6MpnEItem__i_; -text: .text%__1cIRegAllocPget_register_rc6kMnFRInfo__i_; -text: .text%__1cLGetRefCountGdo_cpu6Mi_v_: c1_RegAlloc.o; -text: .text%__1cILIR_ListHreg2reg6MnFRInfo_1nJBasicType__v_: c1_LIREmitter.o; -text: .text%__1cILIR_ListDadd6MpnLLIR_OprDesc_22_v_: c1_LIREmitter.o; -text: .text%__1cIValueGenOdo_LoadIndexed6MpnLLoadIndexed__v_; -text: .text%__1cJValueTypeLas_LongType6M_pnILongType__: c1_ValueType.o; -text: .text%__1cLAccessArrayKlock_stack6kM_pnKValueStack__: c1_Instruction.o; -text: .text%__1cMCodeEmitInfoVfill_expression_stack6M_v_; -text: .text%__1cLLIR_EmitterRarray_range_check6MpnLLIR_OprDesc_2pnMCodeEmitInfo_4_v_; -text: .text%__1cORangeCheckStub2t6MpnMCodeEmitInfo_nFRInfo_ii_v_; -text: .text%__1cMCodeEmitInfo2t6Mp0i_v_; -text: .text%__1cLLIR_EmitterLcmp_reg_mem6MnMLIR_OpBranchNLIR_Condition_nFRInfo_3inJBasicType_pnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListLcmp_reg_mem6MnMLIR_OpBranchNLIR_Condition_nFRInfo_pnLLIR_Address_nJBasicType_pnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListGbranch6MnMLIR_OpBranchNLIR_Condition_pnICodeStub__v_; -text: .text%__1cMLIR_OpBranch2t6Mn0ANLIR_Condition_pnICodeStub_pnMCodeEmitInfo__v_; -text: .text%__1cLLIR_EmitterMindexed_load6MnFRInfo_nJBasicType_pnLLIR_OprDesc_4pnMCodeEmitInfo__v_; -text: .text%__1cLLIR_EmitterNarray_address6MpnLLIR_OprDesc_2inJBasicType__pnLLIR_Address__; -text: .text%__1cLLIR_AddressFscale6FnJBasicType__n0AFScale__; -text: .text%__1cILIR_ListEmove6MpnLLIR_Address_pnLLIR_OprDesc_pnMCodeEmitInfo__v_: c1_LIREmitter_x86.o; -text: .text%__1cIRegAllocNoops_in_spill6kM_pnIintStack__; -text: .text%__1cIRegAllocRoops_in_registers6kM_pnPRInfoCollection__; -text: .text%__1cIValueGenbDsafepoint_poll_needs_register6F_i_; -text: .text%__1cILIR_ListJsafepoint6MnFRInfo_pnMCodeEmitInfo__v_: c1_CodeGenerator.o; -text: .text%__1cLLIR_EmitterHgoto_op6MpnKBlockBegin_pnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListEjump6MpnKBlockBegin_pnMCodeEmitInfo__v_; -text: .text%__1cIValueGenNdo_StoreField6MpnKStoreField__v_; -text: .text%__1cIValueGenOscratch1_RInfo6kM_nFRInfo__; -text: .text%__1cIValueGenUprefer_alu_registers6kM_i_; -text: .text%__1cLLIR_EmitterLfield_store6MpnHciField_pnLLIR_OprDesc_i4iipnMCodeEmitInfo_nFRInfo__v_; -text: .text%__1cILIR_ListNstore_mem_reg6MnFRInfo_1inJBasicType_pnMCodeEmitInfo_nHLIR_Op1NLIR_PatchCode__v_; -text: .text%__1cIValueGenJdo_Return6MpnGReturn__v_; -text: .text%__1cJValueTypeLas_VoidType6M_pnIVoidType__: c1_ValueType.o; -text: .text%__1cIValueGenTresult_register_for6FpnJValueType_i_nFRInfo__; -text: .text%__1cIValueGenMreturn1RInfo6F_nFRInfo__; -text: .text%__1cIValueGenPload_item_force6MpnEItem_nFRInfo__v_; -text: .text%__1cIValueGenPlock_spill_temp6MpnLInstruction_nFRInfo__v_; -text: .text%__1cIRegAllocJlock_temp6MpnLInstruction_nFRInfo__v_; -text: .text%__1cLLIR_EmitterJreturn_op6MpnLLIR_OprDesc__v_; -text: .text%__1cNCodeGeneratorXclear_instruction_items6FpnKBlockBegin__v_; -text: .text%__1cQLIR_LocalCaching2t6MpnCIR__v_; -text: .text%__1cQLIR_LocalCachingQpreferred_locals6MpknIciMethod__pnMLocalMapping__; -text: .text%__1cMLocalMappingQinit_cached_regs6M_v_; -text: .text%__1cPRegisterManager2t6M_v_; -text: .text%__1cMLocalMappingNget_cache_reg6kMi_nFRInfo__; -text: .text%__1cQLIR_LocalCachingVcompute_cached_locals6M_v_; -text: .text%__1cQLIR_LocalCachingMcache_locals6M_v_; -text: .text%__1cLInstructionQas_CachingChange6M_pnNCachingChange__: c1_IR.o; -text: .text%__1cLInstructionQas_CachingChange6M_pnNCachingChange__: c1_Canonicalizer.o; -text: .text%__1cNCachingChangeQas_CachingChange6M_p0_: c1_Loops.o; -text: .text%__1cRBlockListScanInfo2t6MpnJBlockList__v_: c1_CacheLocals.o; -text: .text%__1cOLIR_OprRefList2t6M_v_: c1_CacheLocals.o; -text: .text%__1cRBlockListScanInfoItraverse6MpnKBlockBegin_pnKLIR_OpList__v_: c1_CacheLocals.o; -text: .text%__1cLLIR_OpLabelFvisit6MpnQLIR_OpVisitState__v_; -text: .text%__1cHLIR_Op1Fvisit6MpnQLIR_OpVisitState__v_; -text: .text%__1cPRegisterManagerElock6MnFRInfo__v_; -text: .text%__1cHLIR_Op2Fvisit6MpnQLIR_OpVisitState__v_; -text: .text%__1cMLIR_OpBranchFvisit6MpnQLIR_OpVisitState__v_; -text: .text%__1cORangeCheckStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cQLIR_OpVisitStateGappend6MnFRInfo__v_: c1_CodeStubs_x86.o; -text: .text%__1cLLIR_OprDescIsize_for6FnJBasicType__n0AHOprSize__: c1_CodeStubs_x86.o; -text: .text%__1cNc1_AllocTableFmerge6Mp0_v_; -text: .text%__1cGLIR_OpFvisit6MpnQLIR_OpVisitState__v_; -text: .text%__1cQLIR_LocalCachingXcache_locals_for_blocks6MpnJBlockList_pnPRegisterManager_i_pnMLocalMapping__; -text: .text%__1cLInstructionNas_StateSplit6M_pnKStateSplit__: c1_Loops.o; -text: .text%__1cLInstructionOas_AccessField6M_pnLAccessField__: c1_Loops.o; -text: .text%__1cLInstructionOas_AccessLocal6M_pnLAccessLocal__: c1_Loops.o; -text: .text%__1cKStateSplitNas_StateSplit6M_p0_: c1_IR.o; -text: .text%__1cLInstructionJas_Invoke6M_pnGInvoke__: c1_IR.o; -text: .text%__1cLInstructionLas_NewArray6M_pnINewArray__: c1_IR.o; -text: .text%__1cLInstructionOas_NewInstance6M_pnLNewInstance__: c1_IR.o; -text: .text%__1cLInstructionQas_AccessMonitor6M_pnNAccessMonitor__: c1_IR.o; -text: .text%__1cLInstructionMas_Intrinsic6M_pnJIntrinsic__: c1_IR.o; -text: .text%__1cKScanBlocksQmost_used_locals6M_pnKALocalList__; -text: .text%__1cKScanBlocksMint_count_at6kMi_i_; -text: .text%__1cKScanBlocksIcount_at6kMnIValueTag_i_i_; -text: .text%__1cKScanBlocksJget_array6kMnIValueTag__pknIintStack__; -text: .text%__1cKScanBlocksNlong_count_at6kMi_i_; -text: .text%__1cKScanBlocksMobj_count_at6kMi_i_; -text: .text%__1cKScanBlocksLis_obj_only6kMi_i_; -text: .text%__1cKScanBlocksLis_int_only6kMi_i_; -text: .text%__1cGALocalUsort_by_access_count6Fpp02_i_: c1_ScanBlocks.o; -text: .text%__1cQLIR_LocalCachingPcompute_caching6MpnKALocalList_pnPRegisterManager__pnMLocalMapping__; -text: .text%__1cPRegisterManagerMnum_free_cpu6M_i_; -text: .text%__1cMLocalMappingNget_cache_reg6kMinIValueTag__nFRInfo__; -text: .text%__1cPRegisterManagerMhas_free_reg6MnIValueTag__i_; -text: .text%__1cPRegisterManagerNlock_free_reg6MnIValueTag__nFRInfo__; -text: .text%__1cQLIR_LocalCachingQadd_at_all_names6FpnPRInfoCollection_inFRInfo_pnMWordSizeList__v_; -text: .text%__1cIintStackEgrow6Mki1_v_: c1_CacheLocals.o; -text: .text%__1cMLocalMappingFmerge6Mp0_v_; -text: .text%__1cGALocalNsort_by_index6Fpp02_i_: c1_CacheLocals.o; -text: .text%__1cSLocalMappingSetterIblock_do6MpnKBlockBegin__v_; -text: .text%__1cMLocalMappingEjoin6Mp0_v_; -text: .text%__1cPRegisterManagerLis_free_reg6MnFRInfo__i_; -text: .text%__1cQLIR_LocalCachingYinsert_transition_blocks6M_v_; -text: .text%__1cPBlockTransitionIblock_do6MpnKBlockBegin__v_: c1_CacheLocals.o; -text: .text%__1cGLIR_OpLas_OpBranch6M_pnMLIR_OpBranch__: c1_LIR.o; -text: .text%__1cMLocalMappingPemit_transition6FpnILIR_List_p03pnCIR__v_; -text: .text%__1cCIRThighest_used_offset6kM_i_; -text: .text%__1cILIR_ListQreg2single_stack6MnFRInfo_inJBasicType__v_: c1_CacheLocals.o; -text: .text%__1cLLIR_OprDescIsize_for6FnJBasicType__n0AHOprSize__: c1_CacheLocals.o; -text: .text%__1cILIR_ListQsingle_stack2reg6MinFRInfo_nJBasicType__v_; -text: .text%__1cLInstructionQas_CachingChange6M_pnNCachingChange__: c1_Instruction.o; -text: .text%__1cLCompilationbBemit_code_prolog_non_native6MpnIFrameMap__v_; -text: .text%__1cHIRScopeJmax_stack6kM_i_; -text: .text%__1cNLIR_Optimizer2t6MpnCIR__v_; -text: .text%__1cRLIR_PeepholeState2t6M_v_; -text: .text%__1cRLIR_PeepholeStateKinitialize6MpnMLocalMapping__v_; -text: .text%__1cRLIR_PeepholeStateMclear_values6M_v_; -text: .text%__1cOLIR_OprRefList2t6M_v_: c1_LIROptimizer.o; -text: .text%__1cNLIR_OptimizerIoptimize6M_v_; -text: .text%__1cNLIR_OptimizerIoptimize6MpnJBlockList__v_; -text: .text%__1cNLIR_OptimizerIoptimize6MpnKBlockBegin__v_; -text: .text%__1cNLIR_OptimizerMblock_prolog6M_v_; -text: .text%__1cNLIR_OptimizerKprocess_op6M_v_; -text: .text%__1cGLIR_OpGas_Op16M_pnHLIR_Op1__: c1_LIR.o; -text: .text%__1cLLIR_OpLabelKas_OpLabel6M_p0_: c1_LIR.o; -text: .text%__1cRLIR_PeepholeStateVfinish_forward_branch6MpnFLabel__v_; -text: .text%__1cJLabelListIindex_of6kMkpnFLabel__i_: c1_LIROptimizer.o; -text: .text%__1cRLIR_PeepholeStateYset_disable_optimization6Mi_v_; -text: .text%__1cLLIR_OpLabelJemit_code6MpnVLIR_AbstractAssembler__v_; -text: .text%__1cNLIR_OptimizerMemit_opLabel6MpnLLIR_OpLabel__v_; -text: .text%__1cNLIR_OptimizerFvisit6M_v_: c1_LIROptimizer_x86.o; -text: .text%__1cHLIR_Op0Jemit_code6MpnVLIR_AbstractAssembler__v_; -text: .text%__1cNLIR_OptimizerIemit_op06MpnHLIR_Op0__v_; -text: .text%__1cHLIR_Op2Jemit_code6MpnVLIR_AbstractAssembler__v_; -text: .text%__1cNLIR_OptimizerIemit_op26MpnHLIR_Op2__v_; -text: .text%__1cNLIR_OptimizerKhandle_opr6MpnLLIR_OprDesc_nQLIR_OpVisitStateHOprMode__2_; -text: .text%__1cNLIR_OptimizerJis_cached6MpnLLIR_OprDesc__i_; -text: .text%__1cNLIR_OptimizerUrecord_opr_reference6MpnLLIR_OprDesc__v_; -text: .text%__1cRLIR_PeepholeStateUrecord_opr_reference6MpnLLIR_OprDesc__i_; -text: .text%__1cRLIR_PeepholeStateLdefining_op6MpnLLIR_OprDesc__i_; -text: .text%__1cRLIR_PeepholeStateJreg2index6MpnLLIR_OprDesc__i_; -text: .text%__1cIintStackEgrow6Mki1_v_: c1_LIROptimizer.o; -text: .text%__1cNLIR_OptimizerMblock_epilog6M_v_; -text: .text%__1cRLIR_PeepholeStateRis_safe_to_delete6kMi_i_; -text: .text%__1cHLIR_Op1Gas_Op16M_p0_: c1_LIR.o; -text: .text%__1cHLIR_Op1Jemit_code6MpnVLIR_AbstractAssembler__v_; -text: .text%__1cNLIR_OptimizerIemit_op16MpnHLIR_Op1__v_; -text: .text%__1cNLIR_OptimizerMprocess_move6MpnHLIR_Op1__v_; -text: .text%__1cMLocalMappingNget_cache_reg6kMpnLLIR_OprDesc__2_; -text: .text%__1cRLIR_PeepholeStateTmark_safe_to_delete6Mi_v_; -text: .text%__1cNLIR_OptimizerRreplace_stack_opr6MpnLLIR_OprDesc__2_; -text: .text%__1cNLIR_OptimizerNoptimize_move6MpnHLIR_Op1_rpnLLIR_OprDesc_5_i_; -text: .text%__1cRLIR_PeepholeStatebFequivalent_register_or_constant6MpnLLIR_OprDesc__2_; -text: .text%__1cRLIR_PeepholeStateOequivalent_opr6MpnLLIR_OprDesc__2_; -text: .text%__1cNLIR_OptimizerKmaybe_opto6MpnLLIR_OprDesc_2_2_: c1_LIROptimizer_x86.o; -text: .text%__1cNLIR_OptimizerMis_cache_reg6MpnLLIR_OprDesc__i_; -text: .text%__1cMLocalMappingMis_cache_reg6kMpnLLIR_OprDesc__i_; -text: .text%__1cMLocalMappingMis_cache_reg6kMnFRInfo__i_; -text: .text%__1cRLIR_PeepholeStateSequivalent_address6MpnLLIR_OprDesc__2_; -text: .text%__1cNLIR_OptimizerRresult_substitute6M_v_; -text: .text%__1cNLIR_OptimizerRnext_op_with_code6MnILIR_Code__pnGLIR_Op__; -text: .text%__1cNLIR_OptimizerFop_at6Mi_pnGLIR_Op__; -text: .text%__1cRLIR_PeepholeStateMkill_operand6MpnLLIR_OprDesc_i_v_; -text: .text%__1cRLIR_PeepholeStateQkill_equivalents6MpnLLIR_OprDesc__v_; -text: .text%__1cRLIR_PeepholeStateNkill_register6Mi_v_; -text: .text%__1cRLIR_PeepholeStateSrecord_defining_op6MpnLLIR_OprDesc_i_v_; -text: .text%__1cRLIR_PeepholeStatePset_defining_op6Mii_v_; -text: .text%__1cRLIR_PeepholeStateHdo_move6MpnLLIR_OprDesc_2_v_; -text: .text%__1cLLIR_OprListEgrow6MkikpnLLIR_OprDesc__v_: c1_LIROptimizer.o; -text: .text%__1cLLIR_AddressKas_address6M_p0_: c1_LIR.o; -text: .text%__1cRLIR_PeepholeStateTequivalent_register6MpnLLIR_OprDesc__2_; -text: .text%__1cKLIR_OprPtrLas_constant6M_pnJLIR_Const__: c1_LIR.o; -text: .text%__1cNLIR_OptimizerKallow_opto6M_i_; -text: .text%__1cNLIR_OptimizerLrecord_opto6MpnLLIR_OprDesc_2_2_; -text: .text%__1cLLIR_AddressEtype6kM_nJBasicType__: c1_LIR.o; -text: .text%__1cRLIR_PeepholeStateNincrement_ref6Mi_v_; -text: .text%__1cKLIR_OprPtrKas_address6M_pnLLIR_Address__: c1_CacheLocals.o; -text: .text%__1cMLIR_OpBranchLas_OpBranch6M_p0_: c1_LIR.o; -text: .text%__1cMLIR_OpBranchJemit_code6MpnVLIR_AbstractAssembler__v_; -text: .text%__1cNLIR_OptimizerNemit_opBranch6MpnMLIR_OpBranch__v_; -text: .text%__1cNLIR_OptimizerQopr_live_on_exit6MpnLLIR_OprDesc__i_; -text: .text%__1cNResourceArrayJremove_at6MIi_v_; -text: .text%__1cRLIR_PeepholeStateLstack2index6MpnLLIR_OprDesc__i_; -text: .text%__1cRLIR_PeepholeStatePkill_stack_slot6Mi_v_; -text: .text%__1cRLIR_PeepholeStatebCequivalent_register_or_stack6MpnLLIR_OprDesc__2_; -text: .text%__1cNLIR_OptimizerKmaybe_opto6MpnLLIR_OprDesc_2_2_: c1_LIROptimizer.o; -text: .text%__1cNLIR_OptimizerLhandle_info6MpnMCodeEmitInfo__v_; -text: .text%__1cMCodeEmitInfoRset_local_mapping6MpnMLocalMapping__v_; -text: .text%__1cNLIR_OptimizerUrecord_register_oops6MpnMCodeEmitInfo__v_; -text: .text%__1cNLIR_OptimizerOemit_code_stub6MpnICodeStub__v_; -text: .text%__1cLCompilationOemit_code_body6MpnLCodeOffsets__i_; -text: .text%__1cNLIR_Assembler2t6MpnLCompilation_pnLCodeOffsets__v_; -text: .text%__1cNConstantTable2t6M_v_; -text: .text%__1cNLIR_AssemblerJemit_code6MpnJBlockList__v_; -text: .text%__1cQCollectConstantsIblock_do6MpnKBlockBegin__v_: c1_LIRAssembler.o; -text: .text%__1cLInstructionLas_Constant6M_pnIConstant__: c1_IR.o; -text: .text%__1cLInstructionLas_Constant6M_pnIConstant__: c1_Canonicalizer.o; -text: .text%__1cLInstructionLas_Constant6M_pnIConstant__: c1_Instruction.o; -text: .text%__1cJValueTypeNas_DoubleType6M_pnKDoubleType__: c1_Canonicalizer.o; -text: .text%__1cJValueTypeMas_FloatType6M_pnJFloatType__: c1_Canonicalizer.o; -text: .text%__1cLInstructionLas_Constant6M_pnIConstant__: c1_Loops.o; -text: .text%__1cNLIR_AssemblerOemit_constants6M_v_; -text: .text%__1cNConstantTableMemit_entries6MpnOMacroAssembler_i_v_; -text: .text%__1cLLIR_CodeGenIblock_do6MpnKBlockBegin__v_; -text: .text%__1cNLIR_AssemblerPcheck_codespace6M_v_; -text: .text%__1cNLIR_AssemblerMemit_opLabel6MpnLLIR_OpLabel__v_; -text: .text%__1cNLIR_AssemblerIemit_op06MpnHLIR_Op0__v_; -text: .text%__1cNLIR_AssemblerIemit_op26MpnHLIR_Op2__v_; -text: .text%__1cNLIR_AssemblerMneeds_icache6kMpnIciMethod__i_; -text: .text%__1cFRInfoLas_register6kM_pnMRegisterImpl__; -text: .text%__1cNLIR_AssemblerMcheck_icache6MpnMRegisterImpl_2_i_; -text: .text%__1cRC1_MacroAssemblerSinline_cache_check6MpnMRegisterImpl_2_v_; -text: .text%__1cRC1_MacroAssemblerOverified_entry6M_v_; -text: .text%__1cNLIR_AssemblerLbuild_frame6M_v_; -text: .text%__1cNLIR_AssemblerbBinitial_frame_size_in_bytes6M_i_; -text: .text%__1cIFrameMapJframesize6kM_i_; -text: .text%__1cRC1_MacroAssemblerLbuild_frame6Mi_v_; -text: .text%__1cRAbstractAssemblerbDgenerate_stack_overflow_check6Mi_v_; -text: .text%__1cOMacroAssemblerWbang_stack_with_offset6Mi_v_: c1_Compiler.o; -text: .text%__1cNLIR_AssemblerVsetup_locals_at_entry6M_v_; -text: .text%__1cIFrameMapYsignature_type_array_for6FpknIciMethod__pnNBasicTypeList__; -text: .text%__1cIFrameMapScalling_convention6FpknIciMethod_pnIintArray__pnRCallingConvention__; -text: .text%__1cIFrameMapScalling_convention6FirknOBasicTypeArray_pnIintArray__pnRCallingConvention__; -text: .text%__1cIintArray2t6Mki1_v_: c1_FrameMap_x86.o; -text: .text%__1cIFrameMapRname_for_argument6Fi_i_; -text: .text%__1cIFrameMapSfp_offset_for_name6kMiii_i_; -text: .text%__1cIFrameMapPnum_local_names6kM_i_; -text: .text%__1cIFrameMapNlocal_to_slot6kMii_i_; -text: .text%__1cIFrameMapSfp_offset_for_slot6kMi_i_; -text: .text%__1cQArgumentLocation2t6Mci_v_: c1_FrameMap_x86.o; -text: .text%__1cQArgumentLocationSset_stack_location6Mi_v_; -text: .text%__1cIFrameMapQaddress_for_name6kMiii_nHAddress__; -text: .text%__1cIFrameMapQmake_new_address6kMi_nHAddress__; -text: .text%__1cNLIR_AssemblerIemit_op16MpnHLIR_Op1__v_; -text: .text%__1cNLIR_AssemblerHmove_op6MpnLLIR_OprDesc_2nJBasicType_nHLIR_Op1NLIR_PatchCode_pnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerHmem2reg6MpnLLIR_Address_nFRInfo_nJBasicType_nHLIR_Op1NLIR_PatchCode_pnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerKas_Address6MpnLLIR_Address__nHAddress__; -text: .text%__1cNLIR_AssemblerHcomp_op6MnMLIR_OpBranchNLIR_Condition_pnLLIR_OprDesc_4nJBasicType__v_; -text: .text%__1cNLIR_AssemblerNemit_opBranch6MpnMLIR_OpBranch__v_; -text: .text%__1cNLIR_AssemblerJreg2stack6MnFRInfo_inJBasicType__v_; -text: .text%__1cNLIR_AssemblerLconst2stack6MpnJLIR_Const_i_v_; -text: .text%__1cNLIR_AssemblerJstack2reg6MpnLLIR_OprDesc_2nJBasicType__v_; -text: .text%__1cNLIR_AssemblerHreg2reg6MnFRInfo_1_v_; -text: .text%__1cNLIR_AssemblerJmove_regs6MpnMRegisterImpl_2_v_; -text: .text%__1cNLIR_AssemblerIshift_op6MnILIR_Code_nFRInfo_i2_v_; -text: .text%__1cNLIR_AssemblerIarith_op6MnILIR_Code_pnLLIR_OprDesc_33pnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerbIadd_debug_info_for_null_check_here6MpnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerLcode_offset6kM_i_; -text: .text%__1cNLIR_AssemblerbDadd_debug_info_for_null_check6MipnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerOemit_code_stub6MpnICodeStub__v_; -text: .text%__1cVImplicitNullCheckStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerCpc6kM_pC_; -text: .text%__1cICodeStubLset_code_pc6MpC_v_: c1_CodeStubs_x86.o; -text: .text%__1cICodeStubMis_call_stub6kM_i_: c1_CodeStubs_x86.o; -text: .text%__1cNCodeStubArrayIindex_of6kMkpnICodeStub__i_: c1_LIRAssembler.o; -text: .text%__1cORangeCheckStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerOsafepoint_poll6MnFRInfo_pnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerZadd_debug_info_for_branch6MpnMCodeEmitInfo__v_; -text: .text%__1cPpoll_RelocationEtype6M_nJrelocInfoJrelocType__: codeBlob.o; -text: .text%__1cMCodeEmitInfoRrecord_debug_info6MpnYDebugInformationRecorder_ii_v_; -text: .text%__1cMCodeEmitInfoHoop_map6M_pnGOopMap__; -text: .text%__1cMCodeEmitInfoScompute_debug_info6M_v_; -text: .text%__1cMCodeEmitInfoOcreate_oop_map6M_pnGOopMap__; -text: .text%__1cIFrameMapRoop_map_arg_count6M_i_; -text: .text%__1cMCodeEmitInfoTrecord_spilled_oops6kMpnIFrameMap_pnGOopMap__v_; -text: .text%__1cKciLocalMapNindex_for_bci6kMi_i_; -text: .text%__1cSciLocalMapIteratorJfind_next6M_v_: c1_LIREmitter.o; -text: .text%__1cJLocalSlotIfor_type6MpnJValueType_ii_pnFLocal__: c1_LIREmitter.o; -text: .text%__1cMCodeEmitInfoNget_cache_reg6kMinIValueTag__nFRInfo__; -text: .text%__1cIFrameMapTsingle_word_regname6kMi_nHOptoRegEName__; -text: .text%__1cIFrameMapMfp2sp_offset6kMi_i_; -text: .text%__1cGOopMapHset_oop6MnHOptoRegEName_ii_v_; -text: .text%__1cMCodeEmitInfoVlir_stack2value_stack6MpnNGrowableArray4CpnLLIR_OprDesc____pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cMCodeEmitInfobCcompute_debug_info_for_scope6MpnHIRScope_ipnNGrowableArray4CpnKScopeValue___inGValues_i_pnQIRScopeDebugInfo__; -text: .text%__1cMCodeEmitInfobCscope_value_for_local_offset6MinILocationEType_ppnKScopeValue__4_; -text: .text%__1cMCodeEmitInfobEget_cache_reg_for_local_offset6kMi_nFRInfo__; -text: .text%__1cMLocalMappingbEget_cache_reg_for_local_offset6kMi_nFRInfo__; -text: .text%__1cMCodeEmitInfoZlocation_for_local_offset6MinILocationEType__1_; -text: .text%__1cIFrameMapZlocation_for_local_offset6kMinILocationEType_p1_i_; -text: .text%__1cIFrameMapWlocation_for_fp_offset6kMinILocationEType_p1_i_; -text: .text%__1cILocationVlegal_offset_in_bytes6Fi_i_; -text: .text%__1cMCodeEmitInfoYscope_value_for_register6MnFRInfo_ppnKScopeValue_4nILocationEType__v_; -text: .text%__1cGOopMapJdeep_copy6M_p0_; -text: .text%__1cGOopMap2t6Mn0ANDeepCopyToken_p0_v_; -text: .text%__1cMOopMapStream2t6MpnGOopMap__v_; -text: .text%__1cMOopMapStreamJfind_next6M_v_; -text: .text%__1cUCompressedReadStreamIread_int6M_i_: oopMap.o; -text: .text%__1cYDebugInformationRecorderNadd_safepoint6MiipnGOopMap__v_; -text: .text%__1cYDebugInformationRecorderLcheck_phase6Mn0AFPhase__v_; -text: .text%__1cYDebugInformationRecorderKadd_oopmap6MiipnGOopMap__v_; -text: .text%__1cYDebugInformationRecorderTcreate_scope_values6MpnNGrowableArray4CpnKScopeValue____pnKDebugToken__; -text: .text%__1cYDebugInformationRecorderWserialize_scope_values6MpnNGrowableArray4CpnKScopeValue____i_; -text: .text%__1cVCompressedWriteStreamJwrite_int6Mi_v_: debugInfoRec.o; -text: .text%__1cNLocationValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cVCompressedWriteStreamJwrite_int6Mi_v_: debugInfo.o; -text: .text%__1cILocationIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cVCompressedWriteStreamJwrite_int6Mi_v_: location.o; -text: .text%__1cYDebugInformationRecorderVcreate_monitor_values6MpnNGrowableArray4CpnMMonitorValue____pnKDebugToken__; -text: .text%__1cYDebugInformationRecorderYserialize_monitor_values6MpnNGrowableArray4CpnMMonitorValue____i_; -text: .text%__1cYDebugInformationRecorderOdescribe_scope6MpnIciMethod_ipnKDebugToken_44_v_; -text: .text%__1cYDebugInformationRecorderNappend_handle6MpnI_jobject__i_; -text: .text%__1cLOopRecorderOallocate_index6MpnI_jobject__i_; -text: .text%__1cLCompilationbEadd_exception_handlers_for_pco6MiipnOExceptionScope__v_; -text: .text%__1cNExceptionInfo2t6MiipnOExceptionScope__v_; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cNLIR_AssemblerHreg2mem6MnFRInfo_pnLLIR_Address_nJBasicType_nHLIR_Op1NLIR_PatchCode_pnMCodeEmitInfo__v_; -text: .text%__1cLLIR_OprDescGis_oop6kM_i_; -text: .text%__1cNLIR_AssemblerJreturn_op6MnFRInfo_i_v_; -text: .text%__1cWpoll_return_RelocationEtype6M_nJrelocInfoJrelocType__: codeBlob.o; -text: .text%__1cRC1_MacroAssemblerLmethod_exit6Mi_v_; -text: .text%__1cLCompilationQemit_code_epilog6MpnNLIR_Assembler__v_; -text: .text%__1cNLIR_AssemblerUemit_slow_case_stubs6M_v_; -text: .text%__1cNLIR_AssemblerKemit_stubs6MpnMCodeStubList__v_; -text: .text%__1cVImplicitNullCheckStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cWImplicitExceptionTableGappend6MII_v_; -text: .text%__1cZresource_reallocate_bytes6FpcII_0_; -text: .text%__1cFArenaIArealloc6MpvII_1_; -text: .text%__1cNLIR_AssemblerNadd_call_info6MipnMCodeEmitInfo__v_; -text: .text%__1cOdummy_location6FnIValueTag__pnKScopeValue__: c1_LIREmitter.o; -text: .text%__1cQConstantIntValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cORangeCheckStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cNLIR_AssemblerWemit_exception_handler6M_i_; -text: .text%__1cRC1_MacroAssemblerRexception_handler6Mii_v_; -text: .text%__1cNLIR_AssemblerPemit_call_stubs6M_v_; -text: .text%__1cNLIR_AssemblerbCmaybe_adjust_stack_alignment6MpnIciMethod__v_; -text: .text%__1cKreal_index6FpnIFrameMap_i_i_: c1_LIRAssembler_x86.o; -text: .text%__1cLCompilationbEgenerate_exception_range_table6M_v_; -text: .text%__1cOExceptionScopeGequals6kMp0_i_; -text: .text%__1cLCompilationbBadd_exception_range_entries6MiipnOExceptionScope_ip2pi_v_; -text: .text%__1cTExceptionRangeTablebCcompute_modified_at_call_pco6Fii_i_; -text: .text%__1cOExceptionScopeMcaller_scope6kM_p0_; -text: .text%__1cLLIR_EmitterKframe_size6M_i_; -text: .text%__1cNLIR_Assembler2T6M_v_; -text: .text%__1cLCompilationMinstall_code6MpnLCodeOffsets_i_v_; -text: .text%__1cFciEnvPregister_method6MpnIciMethod_iiiiiipnKCodeBuffer_ipnJOopMapSet_pnVExceptionHandlerTable_pnWImplicitExceptionTable_pnTExceptionRangeTable_pnQAbstractCompiler_ii_v_; -text: .text%__1cFciEnvbOcheck_for_system_dictionary_modification6MpnIciMethod__v_; -text: .text%__1cFciEnvbUsystem_dictionary_modification_counter_changed6M_i_; -text: .text%__1cHnmethodLnew_nmethod6FnMmethodHandle_iiiiiipnYDebugInformationRecorder_pnKCodeBuffer_ipnJOopMapSet_pnVExceptionHandlerTable_pnWImplicitExceptionTable_pnTExceptionRangeTable_pnQAbstractCompiler__p0_; -text: .text%__1cLOopRecorderIoop_size6M_i_; -text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_; -text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; -text: .text%__1cHnmethod2n6FIi_pv_; -text: .text%__1cHnmethod2t6MpnNmethodOopDesc_iiiiiiipnYDebugInformationRecorder_pnKCodeBuffer_ipnJOopMapSet_pnVExceptionHandlerTable_pnWImplicitExceptionTable_pnTExceptionRangeTable_pnQAbstractCompiler__v_; -text: .text%__1cKRelocationWfix_relocation_at_move6Mi_v_: codeBlob.o; -text: .text%__1cLPcDescCache2t6M_v_; -text: .text%__1cHnmFlagsFclear6M_v_; -text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cLOopRecorderHcopy_to6MpnICodeBlob__v_; -text: .text%__1cICodeBlobJcopy_oops6MppnI_jobject_i_v_; -text: .text%__1cIUniverseMnon_oop_word6F_pv_; -text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; -text: .text%__1cGPcDesc2t6Miii_v_; -text: .text%__1cHnmethodKcopy_pc_at6MipnGPcDesc__v_; -text: .text%__1cHnmethodSresolve_JNIHandles6M_v_; -text: .text%__1cNRelocIteratorEnext6M_i_: nmethod.o; -text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cHnmethodKis_nmethod6kM_i_: nmethod.o; -text: .text%__1cHnmethodUnumber_of_dependents6kM_i_: nmethod.o; -text: .text%__1cFVTuneOcreate_nmethod6FpnHnmethod__v_; -text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cTExceptionRangeTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cKNativeJumpbEcheck_verified_entry_alignment6FpC1_v_; -text: .text%__1cGEventsDlog6FpkcE_v_: nmethod.o; -text: .text%__1cFciEnvKcompile_id6M_I_; -text: .text%__1cNmethodOopDescIset_code6MpnHnmethod__v_; -text: .text%__1cFciEnvbFpost_compiled_method_load_event6MpnHnmethod__v_; -text: .text%__1cLCompilation2T6M_v_; -text: .text%__1cFArena2T6M_v_; -text: .text%__1cFArenaRdestruct_contents6M_v_; -text: .text%__1cICHeapObj2k6Fpv_v_; -text: .text%__1cTExceptionRangeTable2T6M_v_; -text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; -text: .text%__1cMelapsedTimerDadd6M0_v_; -text: .text%__1cFciEnv2T6M_v_; -text: .text%__1cNCompileBrokerUpop_jni_handle_block6F_v_; -text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTimer_pnLCompileTask__v_; -text: .text%__1cHnmethodKtotal_size6kM_i_; -text: .text%__1cHnmethodJcode_size6kM_i_: nmethod.o; -text: .text%__1cHnmethodOexception_size6kM_i_: nmethod.o; -text: .text%__1cHnmethodJstub_size6kM_i_: nmethod.o; -text: .text%__1cHnmethodQscopes_data_size6kM_i_: nmethod.o; -text: .text%__1cHnmethodPscopes_pcs_size6kM_i_: nmethod.o; -text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_; -text: .text%__1cSCompileTaskWrapper2T6M_v_; -text: .text%__1cNCompileBrokerJfree_task6FpnLCompileTask__v_; -text: .text%__1cLCompileTaskEfree6M_v_; -text: .text%__1cKJNIHandlesOdestroy_global6FpnI_jobject_i_v_; -text: .text%__1cNSignatureInfoGdo_int6M_v_: reflection.o; -text: .text%__1cNArgumentCountDset6MinJBasicType__v_: reflection.o; -text: .text%__1cZget_mirror_from_signature6FnMmethodHandle_pnPSignatureStream_pnGThread__pnHoopDesc__; -text: .text%__1cPjava_lang_ClassQprimitive_mirror6FnJBasicType__pnHoopDesc__; -text: .text%__1cNSignatureInfoHdo_long6M_v_: reflection.o; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_: reflection.o; -text: .text%__1cPSignatureStreamJas_symbol6MpnGThread__pnNsymbolOopDesc__; -text: .text%__1cKReflectionbFbasic_type_mirror_to_basic_type6FpnHoopDesc_pnGThread__nJBasicType__; -text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; -text: .text%__1cQSystemDictionaryQjava_mirror_type6FpnHoopDesc__nJBasicType__; -text: .text%__1cKReflectionTunbox_for_primitive6FpnHoopDesc_pnGjvalue_pnGThread__nJBasicType__; -text: .text%__1cXjava_lang_boxing_objectJget_value6FpnHoopDesc_pnGjvalue__nJBasicType__; -text: .text%__1cUGenericGrowableArrayGgrow646Mi_v_; -text: .text%__1cRComputeEntryStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_; -text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_; -text: .text%__1cQComputeCallStackHdo_void6M_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cLciSignatureHtype_at6kMi_pnGciType__; -text: .text%__1cLInstructionMas_CompareOp6M_pnJCompareOp__: c1_GraphBuilder.o; -text: .text%__1cLInstructionNas_InstanceOf6M_pnKInstanceOf__: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderMnew_instance6Mi_v_; -text: .text%__1cQciBytecodeStreamJget_klass6kM_pnHciKlass__; -text: .text%__1cQciBytecodeStreamPget_klass_index6kM_i_; -text: .text%__1cVLoaderConstraintTableWfind_constrained_klass6MnMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cIciSymbolHbyte_at6Mi_i_; -text: .text%__1cPciInstanceKlassNloader_handle6M_pnI_jobject__; -text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; -text: .text%__1cGciTypeMis_classless6kM_i_: ciInstanceKlass.o; -text: .text%__1cMGraphBuilderMappend_split6MpnKStateSplit__pnLInstruction__; -text: .text%__1cLNewInstanceFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerOdo_NewInstance6MpnLNewInstance__v_; -text: .text%__1cLInstructionEhash6kM_i_: c1_Instruction.o; -text: .text%__1cKStateSplitNas_StateSplit6M_p0_: c1_Instruction.o; -text: .text%__1cLInstructionJas_Invoke6M_pnGInvoke__: c1_Instruction.o; -text: .text%__1cKValueStackMclear_locals6M_v_; -text: .text%__1cKValueStackMclear_stores6M_v_; -text: .text%__1cKValueStackZpin_stack_for_state_split6M_v_; -text: .text%__1cLNewInstanceIcan_trap6kM_i_: c1_Instruction.o; -text: .text%__1cMGraphBuilderIstack_op6MnJBytecodesECode__v_; -text: .text%__1cMGraphBuilderGinvoke6MnJBytecodesECode__v_; -text: .text%__1cQciBytecodeStreamKget_method6kM_pnIciMethod__; -text: .text%__1cQciBytecodeStreamQget_method_index6kM_i_; -text: .text%__1cFciEnvTget_method_by_index6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cFciEnvYget_method_by_index_impl6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__; -text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; -text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; -text: .text%__1cNciMethodKlassEmake6F_p0_; -text: .text%__1cIciObjectMis_classless6kM_i_: ciMethod.o; -text: .text%__1cQciBytecodeStreambAget_declared_method_holder6M_pnHciKlass__; -text: .text%__1cQciBytecodeStreamXget_method_holder_index6M_i_; -text: .text%__1cLciSignatureLreturn_type6kM_pnGciType__; -text: .text%__1cKValueStackNpop_arguments6Mi_pnGValues__; -text: .text%__1cGInvoke2t6MnJBytecodesECode_pnJValueType_pnLInstruction_pnGValues_iiii_v_; -text: .text%__1cGInvokeFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerJdo_Invoke6MpnGInvoke__v_; -text: .text%__1cGInvokeJas_Invoke6M_p0_: c1_Instruction.o; -text: .text%__1cLInstructionMas_LoadLocal6M_pnJLoadLocal__: c1_Instruction.o; -text: .text%__1cGInvokeIcan_trap6kM_i_: c1_Instruction.o; -text: .text%__1cMGraphBuilderIthrow_op6M_v_; -text: .text%__1cFThrowFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerIdo_Throw6MpnFThrow__v_; -text: .text%__1cIBlockEndLas_BlockEnd6M_p0_: c1_Instruction.o; -text: .text%__1cFThrowIcan_trap6kM_i_: c1_Instruction.o; -text: .text%__1cLInstructionJas_Return6M_pnGReturn__: c1_Instruction.o; -text: .text%__1cFThrowIas_Throw6M_p0_: c1_Instruction.o; -text: .text%__1cLInstructionFas_If6M_pnCIf__: c1_Instruction.o; -text: .text%__1cLInstructionHas_Goto6M_pnEGoto__: c1_Instruction.o; -text: .text%__1cKStateSplitPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorOdo_NewInstance6MpnLNewInstance__v_; -text: .text%__1cTNullCheckEliminatorShandle_NewInstance6MpnLNewInstance__v_; -text: .text%__1cGInvokePinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorJdo_Invoke6MpnGInvoke__v_; -text: .text%__1cTNullCheckEliminatorNhandle_Invoke6MpnGInvoke__v_; -text: .text%__1cFThrowPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorIdo_Throw6MpnFThrow__v_; -text: .text%__1cPBlockBeginArrayIindex_of6kMkpnKBlockBegin__i_: c1_IR.o; -text: .text%__1cLInstructionGnegate6Fn0AJCondition__1_; -text: .text%__1cFThrowPstate_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cFRInfoIoverlaps6kMk0_i_; -text: .text%__1cIValueGenOdo_NewInstance6MpnLNewInstance__v_; -text: .text%__1cIValueGenVspill_values_on_stack6MpnKValueStack_nFRInfo_i_v_; -text: .text%__1cIRegAllocNlock_register6MpnLInstruction_nFRInfo__v_; -text: .text%__1cHHideReg2t6MpnIValueGen_pnJValueType__v_; -text: .text%__1cHHideReg2T6M_v_; -text: .text%__1cLLIR_EmitterMnew_instance6MnFRInfo_pnPciInstanceKlass_1111pnMCodeEmitInfo__v_; -text: .text%__1cLLIR_EmitterZjobject2reg_with_patching6MnFRInfo_pnIciObject_pnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListNoop2reg_patch6MpnI_jobject_nFRInfo_pnMCodeEmitInfo__v_; -text: .text%__1cPNewInstanceStub2t6MnFRInfo_pnLLIR_OprDesc_pnPciInstanceKlass_pnMCodeEmitInfo_nIRuntime1GStubID__v_; -text: .text%__1cIValueGenJdo_Invoke6MpnGInvoke__v_; -text: .text%__1cIValueGenWinvoke_visit_arguments6MpnGInvoke_pnRCallingConvention__pnJItemArray__; -text: .text%__1cIValueGenNis_free_rinfo6MnFRInfo__i_; -text: .text%__1cGInvokeRsize_of_arguments6kM_i_; -text: .text%__1cLLIR_EmitterVstore_stack_parameter6MpnLLIR_OprDesc_i_v_; -text: .text%__1cILIR_ListFstore6MpnLLIR_OprDesc_pnLLIR_Address_nJBasicType_pnMCodeEmitInfo_nHLIR_Op1NLIR_PatchCode__v_; -text: .text%__1cHHideReg2t6MpnIValueGen_nFRInfo_i_v_; -text: .text%__1cIValueGenVinvoke_load_arguments6MpnGInvoke_pnJItemArray_pnRCallingConvention__v_; -text: .text%__1cIValueGenPinvoke_do_spill6MpnGInvoke_nFRInfo__v_; -text: .text%__1cIValueGenXis_caller_save_register6FnFRInfo__i_; -text: .text%__1cIValueGenLspill_value6MpnLInstruction__v_; -text: .text%__1cIValueGenKspill_item6MpnEItem__v_; -text: .text%__1cIValueGenQround_spill_item6MpnEItem_i_v_; -text: .text%__1cIRegAllocOget_lock_spill6MpnLInstruction_i_i_; -text: .text%__1cIValueGenJraw_rfree6MpnEItem__v_; -text: .text%__1cLLIR_EmitterFspill6MipnLLIR_OprDesc__v_; -text: .text%__1cIFrameMapKspill_name6kMi_i_; -text: .text%__1cIValueGenQinvoke_do_result6MpnGInvoke_ipnEItem__v_; -text: .text%__1cIVoidTypeLas_VoidType6M_p0_: c1_ValueType.o; -text: .text%__1cLCompilationXlir_opr_for_instruction6MpnLInstruction__pnLLIR_OprDesc__; -text: .text%__1cLLIR_EmitterHcall_op6MnJBytecodesECode_pknOBasicTypeArray_pnMCodeEmitInfo_iiinFRInfo_pnLLIR_OprDesc__v_; -text: .text%__1cILIR_ListKnull_check6MnFRInfo_pnMCodeEmitInfo__v_: c1_LIREmitter.o; -text: .text%__1cILIR_ListQcall_opt_virtual6MnFRInfo_pnLLIR_OprDesc_pCpnMCodeEmitInfo_pnOStaticCallStub__v_: c1_LIREmitter.o; -text: .text%__1cIValueGenIdo_Throw6MpnFThrow__v_; -text: .text%__1cLNewInstanceKexact_type6kM_pnGciType__; -text: .text%__1cOExceptionScopeLcould_catch6kMpnPciInstanceKlass_i_i_; -text: .text%__1cIValueGenRexceptionOopRInfo6F_nFRInfo__; -text: .text%__1cIValueGenFsfree6MpnEItem__v_; -text: .text%__1cIRegAllocKfree_spill6MipnJValueType__v_; -text: .text%__1cIRegAllocNis_free_spill6kMipnJValueType__i_; -text: .text%__1cLNewInstanceOas_NewInstance6M_p0_: c1_Instruction.o; -text: .text%__1cIValueGenQexceptionPcRInfo6F_nFRInfo__; -text: .text%__1cILIR_ListPthrow_exception6MnFRInfo_1pnMCodeEmitInfo__v_: c1_CodeGenerator.o; -text: .text%__1cLLIR_OprDescIsize_for6FnJBasicType__n0AHOprSize__: c1_CodeGenerator.o; -text: .text%__1cPNewInstanceStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cOLIR_OpJavaCallFvisit6MpnQLIR_OpVisitState__v_; -text: .text%__1cQLIR_OpVisitStateGappend6MnFRInfo__v_: c1_LIR.o; -text: .text%__1cOStaticCallStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cIFrameMapWcaller_save_cpu_reg_at6Fi_pnLLIR_OprDesc__; -text: .text%__1cLInstructionLas_NewArray6M_pnINewArray__: c1_Instruction.o; -text: .text%__1cIVoidTypeDtag6kM_nIValueTag__: c1_ValueType.o; -text: .text%__1cLInstructionOas_NewInstance6M_pnLNewInstance__: c1_Instruction.o; -text: .text%__1cLInstructionQas_AccessMonitor6M_pnNAccessMonitor__: c1_Instruction.o; -text: .text%__1cRLIR_PeepholeStateHdo_call6M_v_; -text: .text%__1cOLIR_OpJavaCallJemit_code6MpnVLIR_AbstractAssembler__v_; -text: .text%__1cNLIR_OptimizerJemit_call6MpnOLIR_OpJavaCall__v_; -text: .text%__1cNLIR_AssemblerJconst2reg6MpnJLIR_Const_nFRInfo_nHLIR_Op1NLIR_PatchCode_pnMCodeEmitInfo__v_; -text: .text%__1cMPatchingStubQalign_patch_site6MpnOMacroAssembler__v_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_pnI_jobject__v_; -text: .text%__1cOoop_RelocationLunpack_data6M_v_; -text: .text%__1cKRelocationNunpack_2_ints6Mri1_v_: relocInfo.o; -text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cOoop_RelocationJpack_data6M_i_; -text: .text%__1cNLIR_AssemblerPpatching_epilog6MpnMPatchingStub_nHLIR_Op1NLIR_PatchCode_pnMRegisterImpl_pnMCodeEmitInfo__v_; -text: .text%__1cMPatchingStubHinstall6MpnOMacroAssembler_nHLIR_Op1NLIR_PatchCode_pnMRegisterImpl_pnMCodeEmitInfo__v_: c1_LIRAssembler.o; -text: .text%__1cNLIR_AssemblerUappend_patching_stub6MpnMPatchingStub__v_; -text: .text%__1cPNewInstanceStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerJemit_call6MpnOLIR_OpJavaCall__v_; -text: .text%__1cNLIR_AssemblerKalign_call6MnILIR_Code__v_; -text: .text%__1cICodeStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cOStaticCallStubLset_code_pc6MpC_v_: c1_CodeStubs_x86.o; -text: .text%__1cOStaticCallStubMis_call_stub6kM_i_: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerEcall6MpCnJrelocInfoJrelocType_pnMCodeEmitInfo__v_; -text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cKRelocationJpack_data6M_i_: relocInfo.o; -text: .text%__1cMCodeEmitInfoSappend_scope_value6MpnLLIR_OprDesc_pnNGrowableArray4CpnKScopeValue____v_; -text: .text%__1cMCodeEmitInfoRopr2location_type6MpnLLIR_OprDesc__nILocationEType__; -text: .text%__1cMCodeEmitInfoRlocation_for_name6MinILocationEType_ii_1_; -text: .text%__1cIFrameMapRlocation_for_name6kMinILocationEType_p1ii_i_; -text: .text%__1cNLIR_AssemblerIthrow_op6MnFRInfo_1pnMCodeEmitInfo_i_v_; -text: .text%__1cMCodeEmitInfoQadd_register_oop6MnFRInfo__v_; -text: .text%__1cIintArrayIindex_of6kMki_i_: c1_LIREmitter.o; -text: .text%__1cMCodeEmitInfoYadd_registers_to_oop_map6MpnGOopMap__v_; -text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cYinternal_word_RelocationJpack_data6M_i_; -text: .text%__1cJrelocInfoKset_format6Mi_v_; -text: .text%__1cMPatchingStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cRAbstractAssemblerGa_byte6Mi_v_; -text: .text%__1cRNativeGeneralJumpUinsert_unconditional6FpC1_v_; -text: .text%__1cNRelocIterator2t6MpnKCodeBuffer_pC3_v_; -text: .text%__1cJrelocInfobDchange_reloc_info_for_address6FpnNRelocIterator_pCn0AJrelocType_4_v_; -text: .text%__1cJrelocInfoIset_type6Mn0AJrelocType__v_; -text: .text%__1cPNewInstanceStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cJOopMapSetMgrow_om_data6M_v_; -text: .text%__1cOStaticCallStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cWstatic_stub_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cWstatic_stub_RelocationJpack_data6M_i_; -text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_; -text: .text%__1cOCallRelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_; -text: .text%__1cYinternal_word_RelocationWfix_relocation_at_move6Mi_v_; -text: .text%__1cYinternal_word_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; -text: .text%__1cODataRelocationJset_value6MpC_v_: relocInfo.o; -text: .text%__1cODataRelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cKRelocationRpd_set_data_value6MpCi_v_; -text: .text%__1cKRelocationSpd_address_in_code6M_ppC_; -text: .text%__1cWstatic_stub_RelocationLunpack_data6M_v_; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_: nmethod.o; -text: .text%__1cOoop_RelocationHoops_do6MpFppnHoopDesc__v_v_; -text: .text%__1cOoop_RelocationIoop_addr6M_ppnHoopDesc__; -text: .text%__1cRresolve_and_patch6FppnHoopDesc__v_; -text: .text%__1cMPeriodicTaskOreal_time_tick6FI_v_; -text: .text%__1cPStatSamplerTaskEtask6M_v_: statSampler.o; -text: .text%__1cLStatSamplerOcollect_sample6F_v_; -text: .text%__1cLStatSamplerLsample_data6FpnMPerfDataList__v_; -text: .text%jni_GetPrimitiveArrayCritical: jni.o; -text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; -text: .text%jni_SetBooleanField: jni.o; -text: .text%__1cNFingerprinterIdo_float6M_v_: dump.o; -text: .text%__1cXNativeSignatureIteratorIdo_float6M_v_: interpreterRuntime.o; -text: .text%JVM_IsNaN; -text: .text%__1cNFingerprinterJdo_double6M_v_: dump.o; -text: .text%__1cXNativeSignatureIteratorJdo_double6M_v_: interpreterRuntime.o; -text: .text%__1cXNativeSignatureIteratorLpass_double6M_v_: interpreterRuntime.o; -text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_; -text: .text%jni_GetArrayLength: jni.o; -text: .text%JVM_Read; -text: .text%__1cDhpiEread6FipvI_I_: jvm.o; -text: .text%__1cKJNIHandlesKmake_local6FpnGThread_pnHoopDesc__pnI_jobject__; -text: .text%__1cRComputeEntryStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackHdo_char6M_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; -text: .text%__1cMLinkResolverbNlinktime_resolve_virtual_method_or_null6FnLKlassHandle_nMsymbolHandle_21i_nMmethodHandle__; -text: .text%__1cIciMethodXfind_monomorphic_target6MpnHciKlass_22_p0_; -text: .text%__1cDCHAManalyze_call6FnLKlassHandle_11nMsymbolHandle_2_pnJCHAResult__; -text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cJCHAResult2t6MnLKlassHandle_nMsymbolHandle_2pnNGrowableArray4n0B___pnNGrowableArray4nMmethodHandle___n0E_i_v_; -text: .text%__1cJCHAResultOis_monomorphic6kM_i_; -text: .text%__1cJCHAResultSmonomorphic_target6kM_nMmethodHandle__; -text: .text%__1cIciMethodJwill_link6MpnHciKlass_2nJBytecodesECode__i_; -text: .text%__1cMGraphBuilderKtry_inline6MpnIciMethod_i_i_; -text: .text%__1cMGraphBuilderUclear_inline_bailout6M_v_; -text: .text%__1cIciMethodOshould_exclude6M_i_; -text: .text%__1cIciMethodPcan_be_compiled6M_i_; -text: .text%__1cMGraphBuilderVtry_inline_intrinsics6MpnIciMethod__i_; -text: .text%__1cMGraphBuilderPtry_inline_full6MpnIciMethod_i_i_; -text: .text%__1cIciMethodIhas_jsrs6kM_i_; -text: .text%__1cMGraphBuilderWrecursive_inline_level6kMpnIciMethod__i_; -text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; -text: .text%__1cJNullCheckFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerMdo_NullCheck6MpnJNullCheck__v_; -text: .text%__1cJNullCheckIcan_trap6kM_i_: c1_GraphBuilder.o; -text: .text%__1cKObjectTypeEbase6kM_pnJValueType__: c1_ValueType.o; -text: .text%__1cKValueStackEpush6MpnJValueType_pnLInstruction__v_: c1_ValueStack.o; -text: .text%__1cMGraphBuilderKpush_scope6MpnIciMethod_pnKBlockBegin_i_v_; -text: .text%__1cKValueStackKpush_scope6MpnHIRScope__p0_; -text: .text%__1cOExceptionScopeKpush_scope6M_p0_; -text: .text%__1cOExceptionScope2t6Mp0_v_; -text: .text%__1cHIRScopeXcompute_lock_stack_size6M_v_; -text: .text%__1cMGraphBuilderJScopeDataRcaller_stack_size6kM_i_; -text: .text%__1cMGraphBuilderJScopeDataLnum_returns6M_i_; -text: .text%__1cMGraphBuilderJScopeDataXset_inline_cleanup_info6MpnKBlockBegin_pnLInstruction_pnKValueStack__v_; -text: .text%__1cMGraphBuilderJScopeDataQincr_num_returns6M_v_; -text: .text%__1cKValueStackJpop_scope6Mii_p0_; -text: .text%__1cMGraphBuilderJpop_scope6M_v_; -text: .text%__1cMGraphBuilderTpop_exception_scope6M_v_; -text: .text%__1cOExceptionScopeJpop_scope6M_p0_; -text: .text%__1cLCompilationVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cMGraphBuilderOinline_bailout6Mpkc_v_; -text: .text%__1cLInstructionEprev6MpnKBlockBegin__p0_; -text: .text%__1cKBlockBeginUresolve_substitution6M_v_; -text: .text%__1cKBlockBeginPblock_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cZresolve_substituted_value6FppnLInstruction__v_: c1_Instruction.o; -text: .text%__1cLInstructionFsubst6M_p0_: c1_Instruction.o; -text: .text%__1cLInstructionPother_values_do6MpFpp0_v_v_: c1_GraphBuilder.o; -text: .text%__1cLInstructionPstate_values_do6MpFpp0_v_v_: c1_GraphBuilder.o; -text: .text%__1cLInstructionPstate_values_do6MpFpp0_v_v_: c1_Instruction.o; -text: .text%__1cIConstantPother_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cIBlockEndPother_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cHIntTypeEsize6kM_i_: c1_Canonicalizer.o; -text: .text%__1cJNullCheckPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorMdo_NullCheck6MpnJNullCheck__v_; -text: .text%__1cTNullCheckEliminatorQhandle_NullCheck6MpnJNullCheck__v_; -text: .text%__1cLInstructionOas_AccessLocal6M_pnLAccessLocal__: c1_GraphBuilder.o; -text: .text%__1cHIRScopeNtop_scope_bci6kM_i_; -text: .text%__1cQUseCountComputerPclear_use_count6FpnKBlockBegin__v_: c1_IR.o; -text: .text%__1cIValueGenMdo_NullCheck6MpnJNullCheck__v_; -text: .text%__1cJNullCheckKlock_stack6kM_pnKValueStack__: c1_GraphBuilder.o; -text: .text%__1cLLIR_EmitterKnull_check6MpnLLIR_OprDesc_pnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListDsub6MpnLLIR_OprDesc_22pnMCodeEmitInfo__v_: c1_LIREmitter.o; -text: .text%__1cIValueGenQlock_spill_rinfo6MpnLInstruction_nFRInfo__v_; -text: .text%__1cQIRScopeDebugInfoRrecord_debug_info6MpnYDebugInformationRecorder__v_: c1_LIREmitter.o; -text: .text%__1cIRuntime1Yresolve_opt_virtual_call6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cNSharedRuntimeOresolve_helper6FpnKJavaThread_iipnGThread__nMmethodHandle__; -text: .text%__1cNSharedRuntimeSresolve_sub_helper6FpnKJavaThread_iipnGThread__nMmethodHandle__; -text: .text%__1cFframeZsender_for_compiled_frame6kMpnLRegisterMap_pnICodeBlob_i_0_; -text: .text%__1cLRuntimeStubYcaller_must_gc_arguments6kMpnKJavaThread__i_: codeBlob.o; -text: .text%__1cHnmethodJis_zombie6kM_i_: nmethod.o; -text: .text%__1cNnmethodLocker2t6MpnHnmethod__v_; -text: .text%__1cNSharedRuntimeQfind_callee_info6FpnKJavaThread_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cHnmethodQis_native_method6kM_i_: nmethod.o; -text: .text%__1cHnmethodKpc_desc_at6MpCi_pnGPcDesc__; -text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; -text: .text%__1cLPcDescCacheKpc_desc_at6kMpnHnmethod_pCi_pnGPcDesc__; -text: .text%__1cLPcDescCacheLadd_pc_desc6MpnGPcDesc__v_; -text: .text%__1cSvframeStreamCommonYfill_from_compiled_frame6MpnHnmethod_i_v_; -text: .text%__1cUCompressedReadStreamMraw_read_int6FrpC_i_: vframe.o; -text: .text%__1cICodeBlobLoop_addr_at6kMi_ppnHoopDesc__; -text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKCompiledICZcompute_monomorphic_entry6FnMmethodHandle_nLKlassHandle_iirnOCompiledICInfo_pnGThread__v_; -text: .text%__1cKCompiledIC2t6MpnKNativeCall__v_; -text: .text%__1cXvirtual_call_RelocationIparse_ic6FrpnICodeBlob_rpC5rppnHoopDesc_pi_nNRelocIterator__; -text: .text%__1cKCompiledICIis_clean6kM_i_; -text: .text%__1cKCompiledICOic_destination6kM_pC_; -text: .text%__1cKCompiledICWis_in_transition_state6kM_i_; -text: .text%__1cRInlineCacheBufferIcontains6FpC_i_; -text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_; -text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_; -text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_; -text: .text%__1cNRelocIteratorEnext6M_i_: compiledIC.o; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_: compiledIC.o; -text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; -text: .text%__1cNnmethodLocker2T6M_v_; -text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; -text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%JVM_DefineClassWithSource; -text: .text%__1cXjvm_define_class_common6FpnHJNIEnv__pkcpnI_jobject_pkWi53pnGThread__pnH_jclass__: jvm.o; -text: .text%__1cQSystemDictionaryTresolve_from_stream6FnMsymbolHandle_nGHandle_2pnPClassFileStream_pnGThread__pnMklassOopDesc__; -text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; -text: .text%__1cPClassFileParserZskip_over_field_signature6MpciIpnGThread__1_; -text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cQput_after_lookup6FnMsymbolHandle_0ppnLNameSigHash__i_; -text: .text%__1cEhash6Fpkc1_I_; -text: .text%__1cKDictionarybAis_valid_protection_domain6MiInMsymbolHandle_nGHandle_2_i_; -text: .text%__1cPDictionaryEntrybAcontains_protection_domain6kMpnHoopDesc__i_; -text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cPDictionaryEntryVadd_protection_domain6MpnHoopDesc__v_; -text: .text%__1cUverify_byte_codes_fn6F_pv_: verifier.o; -text: .text%JVM_GetClassCPEntriesCount; -text: .text%JVM_GetClassCPTypes; -text: .text%JVM_GetClassNameUTF; -text: .text%JVM_ReleaseUTF; -text: .text%JVM_FindClassFromClass; -text: .text%jni_IsSameObject: jni.o; -text: .text%JVM_GetClassFieldsCount; -text: .text%JVM_GetClassMethodsCount; -text: .text%JVM_GetMethodIxModifiers; -text: .text%JVM_GetMethodIxByteCodeLength; -text: .text%JVM_GetMethodIxByteCode; -text: .text%JVM_GetMethodIxExceptionTableLength; -text: .text%JVM_GetMethodIxLocalsCount; -text: .text%JVM_GetMethodIxArgsSize; -text: .text%JVM_GetMethodIxSignatureUTF; -text: .text%JVM_GetMethodIxMaxStack; -text: .text%JVM_GetMethodIxExceptionsCount; -text: .text%JVM_GetMethodIxExceptionIndexes; -text: .text%JVM_GetCPMethodNameUTF; -text: .text%JVM_GetCPMethodClassNameUTF; -text: .text%jni_NewLocalRef: jni.o; -text: .text%JVM_GetCPMethodModifiers; -text: .text%JVM_IsConstructorIx; -text: .text%JVM_GetCPMethodSignatureUTF; -text: .text%jni_DeleteGlobalRef: jni.o; -text: .text%__1cQSystemDictionaryVadd_loader_constraint6FnMsymbolHandle_nGHandle_2pnGThread__v_; -text: .text%__1cVLoaderConstraintTableJadd_entry6MnMsymbolHandle_pnMklassOopDesc_nGHandle_34pnGThread__i_; -text: .text%__1cVLoaderConstraintTableJnew_entry6MIpnNsymbolOopDesc_pnMklassOopDesc_ii_pnVLoaderConstraintEntry__; -text: .text%jni_ToReflectedMethod: jni.o; -text: .text%__1cKReflectionKnew_method6FnMmethodHandle_iipnGThread__pnHoopDesc__; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_: reflection.o; -text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__; -text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodPset_return_type6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodThas_signature_field6F_i_; -text: .text%__1cYjava_lang_reflect_MethodVhas_annotations_field6F_i_; -text: .text%__1cYjava_lang_reflect_MethodPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodbFhas_parameter_annotations_field6F_i_; -text: .text%__1cYjava_lang_reflect_MethodZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodbChas_annotation_default_field6F_i_; -text: .text%__1cNmethodOopDescSannotation_default6kM_pnQtypeArrayOopDesc__; -text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v_; -text: .text%jni_CallIntMethod: jni.o; -text: .text%jni_CallStaticVoidMethod: jni.o; -text: .text%jni_DetachCurrentThread; -text: .text%__1cKJavaThreadEexit6Mi_v_; -text: .text%__1cQjava_lang_ThreadLthreadGroup6FpnHoopDesc__2_; -text: .text%JVM_MonitorNotifyAll; -text: .text%__1cNThreadServiceWcurrent_thread_exiting6FpnKJavaThread__v_; -text: .text%__1cLensure_join6FpnKJavaThread__v_: thread.o; -text: .text%__1cQjava_lang_ThreadNset_stillborn6FpnHoopDesc__v_; -text: .text%__1cKJavaThreadYremove_stack_guard_pages6M_v_; -text: .text%__1cWThreadLocalAllocBufferFclear6M_v_; -text: .text%__1cHThreadsGremove6FpnKJavaThread__v_; -text: .text%__1cNThreadServiceNremove_thread6FpnKJavaThread_i_v_; -text: .text%__SLIP.DELETER__A: thread.o; -text: .text%__1cKJavaThread2T6M_v_; -text: .text%__1cGParker2T6M_v_; -text: .text%__1cHMonitor2T6M_v_; -text: .text%__1cFMutex2T6M_v_; -text: .text%lwp_cond_destroy: os_solaris.o; -text: .text%lwp_mutex_destroy: os_solaris.o; -text: .text%__1cUThreadSafepointStateHdestroy6FpnKJavaThread__v_; -text: .text%__1cUThreadSafepointState2T6M_v_; -text: .text%__1cGThread2T5B6M_v_; -text: .text%__1cCosLfree_thread6FpnIOSThread__v_; -text: .text%__1cIOSThread2T6M_v_; -text: .text%__1cIOSThreadKpd_destroy6M_v_; -text: .text%jni_DestroyJavaVM; -text: .text%jni_AttachCurrentThread; -text: .text%attach_current_thread: jni.o; -text: .text%__1cCosWcreate_attached_thread6FpnGThread__i_; -text: .text%__1cKJavaThreadSallocate_threadObj6MnGHandle_pcipnGThread__v_; -text: .text%__1cHThreadsKdestroy_vm6F_i_; -text: .text%__1cKJavaThreadVinvoke_shutdown_hooks6M_v_; -text: .text%__1cLbefore_exit6FpnKJavaThread__v_; -text: .text%__1cNWatcherThreadEstop6F_v_; -text: .text%__1cLStatSamplerJdisengage6F_v_; -text: .text%__1cMPeriodicTaskJdisenroll6M_v_; -text: .text%__1cMPeriodicTask2T5B6M_v_; -text: .text%__1cMPeriodicTaskLis_enrolled6kM_i_; -text: .text%__1cLStatSamplerHdestroy6F_v_; -text: .text%__1cMPerfDataList2T6M_v_; -text: .text%__1cLJvmtiExportNpost_vm_death6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_death6F_v_; -text: .text%__1cCosXterminate_signal_thread6F_v_; -text: .text%__1cCosNsigexitnum_pd6F_i_; -text: .text%__1cCosNsignal_notify6Fi_v_; -text: .text%__1cQprint_statistics6F_v_; -text: .text%__1cFVTuneEexit6F_v_; -text: .text%__1cIVMThreadXwait_for_vm_thread_exit6F_v_; -text: .text%__1cUSafepointSynchronizeFbegin6F_v_; -text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; -text: .text%__1cJTimeStampSticks_since_update6kM_x_; -text: .text%__1cTAbstractInterpreterRnotice_safepoints6F_v_; -text: .text%__1cKcopy_table6FppC1i_v_: interpreter.o; -text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_; -text: .text%__1cCosRcurrent_thread_id6F_i_; -text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fi_v_; -text: .text%__1cCosbCmake_polling_page_unreadable6F_v_; -text: .text%__1cUThreadSafepointStateXexamine_state_of_thread6Mi_v_; -text: .text%__1cUSafepointSynchronizeOsafepoint_safe6FpnKJavaThread_nPJavaThreadState__i_; -text: .text%__1cUThreadSafepointStateMroll_forward6Mn0AMsuspend_type_pnHnmethod_i_v_; -text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; -text: .text%__1cUSafepointSynchronizeQdo_cleanup_tasks6F_v_; -text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_; -text: .text%__1cNObjectMonitorHis_busy6kM_i_; -text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_; -text: .text%__1cMCounterDecayFdecay6F_v_; -text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; -text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; -text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; -text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cJdo_method6FpnNmethodOopDesc__v_: recompilationMonitor.o; -text: .text%__1cONMethodSweeperFsweep6F_v_; -text: .text%__1cNCompileBrokerQset_should_block6F_v_; -text: .text%__1cHVM_ExitbJwait_for_threads_in_native_to_block6F_i_; -text: .text%__1cURecompilationMonitorbFstop_recompilation_monitor_task6F_v_; -text: .text%__1cIVMThreadHdestroy6F_v_; -text: .text%__SLIP.DELETER__A: vmThread.o; -text: .text%__1cSThreadLocalStorageRpd_invalidate_all6F_v_; -text: .text%__1cHVM_ExitNset_vm_exited6F_i_; -text: .text%__1cMexit_globals6F_v_; -text: .text%__1cVverificationType_exit6F_v_; -text: .text%__1cQVerificationTypeIfinalize6F_v_; -text: .text%__1cPperfMemory_exit6F_v_; -text: .text%__1cPPerfDataManagerHdestroy6F_v_; -text: .text%__1cIPerfData2T6M_v_; -text: .text%__1cKPerfMemoryHdestroy6F_v_; -text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; -text: .text%__1cUdelete_shared_memory6FpcI_v_: perfMemory_solaris.o; -text: .text%__1cLremove_file6Fpkc_v_: perfMemory_solaris.o; -text: .text%__1cMostream_exit6F_v_; -text: .text%__SLIP.DELETER__C: ostream.o; -text: .text%__SLIP.FINAL__A: c1_Items.o; -# Test Exit -text: .text%__1cPSignatureStreamHis_done6kM_i_; -text: .text%JVM_Halt; -text: .text%__1cHvm_exit6Fi_v_; -text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; -text: .text%__1cMVM_OperationNdoit_prologue6M_i_: vm_operations.o; -text: .text%__1cGThreadMget_priority6Fkpk0_nOThreadPriority__; -text: .text%__1cCosMget_priority6FkpknGThread_rnOThreadPriority__nIOSReturn__; -text: .text%__1cCosTget_native_priority6FkpknGThread_pi_nIOSReturn__; -text: .text%__1cMVM_OperationSset_calling_thread6MpnGThread_nOThreadPriority__v_; -text: .text%__1cMVM_OperationPevaluation_mode6kM_n0AEMode__: vm_operations.o; -text: .text%__1cMVM_OperationSis_cheap_allocated6kM_i_: vm_operations.o; -text: .text%__1cQVMOperationQdDueueDadd6MpnMVM_Operation__i_; -text: .text%__1cQVMOperationQdDueueOqueue_add_back6MipnMVM_Operation__v_; -text: .text%__1cQVMOperationQdDueueGinsert6MpnMVM_Operation_2_v_; -text: .text%__1cQVMOperationQdDueueGunlink6MpnMVM_Operation__v_; -text: .text%__1cHVM_ExitEname6kM_pkc_: vm_operations.o; -text: .text%__1cJEventMark2t6MpkcE_v_: vmThread.o; -text: .text%__1cCosJyield_all6Fi_v_; -text: .text%__1cGThreadRis_Watcher_thread6kM_i_: vmThread.o; -text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_; -text: .text%__1cIVMThreadSevaluate_operation6MpnMVM_Operation__v_; -text: .text%__1cMVM_OperationIevaluate6M_v_; -text: .text%__1cHVM_ExitEdoit6M_v_; -# Test Hello -text: .text%JVM_GetCPFieldSignatureUTF; -text: .text%JVM_Write; -text: .text%__1cDhpiFwrite6FipkvI_I_: jvm.o; -# Test Sleep -text: .text%JVM_GetMethodIxExceptionTableEntry; -text: .text%JVM_GetCPClassNameUTF; -text: .text%JVM_Sleep; -text: .text%__1cCosHSolarisTsetup_interruptible6F_pnKJavaThread__; -text: .text%__1cCosHSolarisTsetup_interruptible6FpnKJavaThread__v_; -text: .text%__1cUSafepointSynchronizeRis_cleanup_needed6F_i_; -text: .text%__1cRInlineCacheBufferIis_empty6F_i_; -text: .text%__1cCosHSolarisVcleanup_interruptible6FpnKJavaThread__v_; -text: .text%__1cCosOunguard_memory6FpcI_i_; -# Test IntToString -text: .text%__1cQChunkPoolCleanerEtask6M_v_: allocation.o; -text: .text%__1cJChunkPoolMfree_all_but6MI_v_: allocation.o; -# Test LoadToolkit -text: .text%JVM_GetClassContext; -text: .text%__1cNCollectedHeapMobj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: jvm.o; -text: .text%jni_IsAssignableFrom: jni.o; -text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; -text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cMGraphBuilderNload_constant6M_v_; -text: .text%__1cQciBytecodeStreamMget_constant6kM_nKciConstant__; -text: .text%__1cQciBytecodeStreamSget_constant_index6kM_i_; -text: .text%__1cFciEnvVget_constant_by_index6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cFciEnvbAget_constant_by_index_impl6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cLInstructionMas_LoadLocal6M_pnJLoadLocal__: c1_Canonicalizer.o; -text: .text%__1cTsort_by_start_block6FppnELoop_2_i_: c1_Loops.o; -text: .text%__1cILIR_ListLcall_static6MpnLLIR_OprDesc_pCpnMCodeEmitInfo_pnOStaticCallStub__v_: c1_LIREmitter.o; -text: .text%__1cLLIR_EmitterLcmp_mem_int6MnMLIR_OpBranchNLIR_Condition_nFRInfo_iipnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListLcmp_mem_int6MnMLIR_OpBranchNLIR_Condition_nFRInfo_iipnMCodeEmitInfo__v_; -text: .text%__1cJValueTypeLas_VoidType6M_pnIVoidType__: c1_Canonicalizer.o; -text: .text%__1cILIR_ListHint2reg6MinFRInfo__v_: c1_LIREmitter.o; -text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cRComputeEntryStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cKValueStackEpush6MpnJValueType_pnLInstruction__v_: c1_Optimizer.o; -text: .text%__1cEIfOpPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; -text: .text%__1cEIfOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorHdo_IfOp6MpnEIfOp__v_; -text: .text%__1cIValueGenHdo_IfOp6MpnEIfOp__v_; -text: .text%__1cLLIR_EmitterLifop_phase16MnLInstructionJCondition_pnLLIR_OprDesc_4_v_; -text: .text%__1cLLIR_EmitterLifop_phase26MnFRInfo_pnLLIR_OprDesc_3nLInstructionJCondition__v_; -text: .text%__1cILIR_ListGbranch6MnMLIR_OpBranchNLIR_Condition_pnFLabel__v_; -text: .text%__1cRLIR_PeepholeStateUstart_forward_branch6MpnFLabel__v_; -text: .text%__1cOGenerateOopMapMdo_checkcast6M_v_; -text: .text%__1cMGraphBuilderLinstance_of6Mi_v_; -text: .text%__1cKInstanceOfFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerNdo_InstanceOf6MpnKInstanceOf__v_; -text: .text%__1cJTypeCheckIcan_trap6kM_i_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderOdirect_compare6MpnHciKlass__i_; -text: .text%__1cKInstanceOfNas_InstanceOf6M_p0_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderKcheck_cast6Mi_v_; -text: .text%__1cJCheckCastFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerMdo_CheckCast6MpnJCheckCast__v_; -text: .text%__1cJValueTypeKas_IntType6M_pnHIntType__: c1_ValueType.o; -text: .text%__1cJTypeCheckPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorNdo_InstanceOf6MpnKInstanceOf__v_; -text: .text%__1cQNullCheckVisitorMdo_CheckCast6MpnJCheckCast__v_; -text: .text%__1cIValueGenNdo_InstanceOf6MpnKInstanceOf__v_; -text: .text%__1cLLIR_OprDescIsize_for6FnJBasicType__n0AHOprSize__: c1_CodeGenerator_x86.o; -text: .text%__1cLLIR_EmitterNinstanceof_op6MpnLLIR_OprDesc_2pnHciKlass_nFRInfo_5ipnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListKinstanceof6MpnLLIR_OprDesc_2pnHciKlass_22ipnMCodeEmitInfo__v_; -text: .text%__1cPLIR_OpTypeCheck2t6MnILIR_Code_pnLLIR_OprDesc_3pnHciKlass_33ipnMCodeEmitInfo_7pnICodeStub__v_; -text: .text%__1cIValueGenMdo_CheckCast6MpnJCheckCast__v_; -text: .text%__1cILIR_ListJcheckcast6MpnLLIR_OprDesc_2pnHciKlass_22ipnMCodeEmitInfo_6pnICodeStub__v_; -text: .text%__1cILIR_ListJsafepoint6MnFRInfo_pnMCodeEmitInfo__v_: c1_CodeGenerator_x86.o; -text: .text%__1cPLIR_OpTypeCheckFvisit6MpnQLIR_OpVisitState__v_; -text: .text%__1cTSimpleExceptionStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cPLIR_OpTypeCheckJemit_code6MpnVLIR_AbstractAssembler__v_; -text: .text%__1cNLIR_OptimizerQemit_opTypeCheck6MpnPLIR_OpTypeCheck__v_; -text: .text%__1cLLIR_OprDescIsize_for6FnJBasicType__n0AHOprSize__: c1_LIROptimizer.o; -text: .text%__1cIintArrayIindex_of6kMki_i_: c1_LIROptimizer.o; -text: .text%__1cNLIR_AssemblerQemit_opTypeCheck6MpnPLIR_OpTypeCheck__v_; -text: .text%__1cIciObjectIencoding6M_pnI_jobject__; -text: .text%__1cJAssemblerEcmpl6MnHAddress_pnI_jobject__v_; -text: .text%__1cTSimpleExceptionStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cTSimpleExceptionStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cJLoadFieldIis_equal6kMpnLInstruction__i_: c1_Instruction.o; -text: .text%__1cJLoadFieldMas_LoadField6M_p0_: c1_Instruction.o; -text: .text%__1cDPhiPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cDPhiFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorGdo_Phi6MpnDPhi__v_; -text: .text%__1cLInstructionIas_Local6M_pnFLocal__: c1_GraphBuilder.o; -text: .text%__1cDPhiGas_Phi6M_p0_: c1_GraphBuilder.o; -text: .text%__1cIValueGenScompute_phi_arrays6MpnKValueStack_pnGValues_pnIintStack_i_pnLInstruction__; -text: .text%__1cLLIR_EmitterTset_fpu_stack_empty6M_v_; -text: .text%__1cIRegAllocKlock_spill6MpnLInstruction_ii_v_; -text: .text%__1cIRegAllocRextend_spill_area6Mi_v_; -text: .text%__1cRclear_state_items6FppnLInstruction__v_: c1_CodeGenerator.o; -text: .text%__1cNLIR_AssemblerTset_fpu_stack_empty6M_v_; -text: .text%__1cIFrameMapLFpuStackSimFclear6M_v_; -text: .text%jni_GetEnv; -text: .text%jni_CallStaticBooleanMethod: jni.o; -text: .text%__1cOtypeArrayKlassQarray_klass_impl6MipnGThread__pnMklassOopDesc__; -text: .text%__1cOtypeArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cVcreate_gc_point_array6FpnFArena_i_pnNGrowableArray4Ci___; -text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_; -text: .text%__1cOGenerateOopMapIppop_any6Mi_v_; -text: .text%__1cYciExceptionHandlerStreamEnext6M_v_: c1_IR.o; -text: .text%__1cMGraphBuilderQhandle_exception6Mi_v_; -text: .text%__1cOExceptionScopeFclear6M_v_; -text: .text%__1cMGraphBuilderJScopeDataJxhandlers6kM_pnJXHandlers__; -text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; -text: .text%__1cTciConstantPoolCacheDget6Mi_pv_; -text: .text%__1cTciConstantPoolCacheEfind6Mi_i_; -text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; -text: .text%__1cMGraphBuilderHif_null6MpnJValueType_nLInstructionJCondition__v_; -text: .text%__1cOObjectConstantRas_ObjectConstant6M_p0_: c1_ValueType.o; -text: .text%__1cMas_ValueType6FnKciConstant__pnJValueType__; -text: .text%__1cLInstructionGmirror6Fn0AJCondition__1_; -text: .text%__1cHis_true6FxnLInstructionJCondition_x_i_: c1_Canonicalizer.o; -text: .text%__1cNCanonicalizerNset_canonical6MpnLInstruction__v_; -text: .text%__1cKBlockBeginVadd_exception_handler6Mp0_v_; -text: .text%__1cPBlockBeginArrayIindex_of6kMkpnKBlockBegin__i_: c1_Instruction.o; -text: .text%__1cOExceptionScopeLadd_handler6MpnIXHandler__v_; -text: .text%__1cIciObjectEhash6M_i_; -text: .text%__1cPciObjectFactoryPinsert_non_perm6Mrpn0ANNonPermObject_pnHoopDesc_pnIciObject__v_; -text: .text%__1cIciObjectMhas_encoding6M_i_; -text: .text%__1cJValueTypeRas_ObjectConstant6M_pnOObjectConstant__: c1_ValueType.o; -text: .text%__1cNClassConstantQas_ClassConstant6M_p0_: c1_ValueType.o; -text: .text%__1cOExceptionScopeKhandler_at6kMi_pnIXHandler__; -text: .text%__1cLInstructionMas_LoadLocal6M_pnJLoadLocal__: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderIlogic_op6MpnJValueType_nJBytecodesECode__v_; -text: .text%__1cHLogicOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerKdo_LogicOp6MpnHLogicOp__v_; -text: .text%__1cHLogicOpEhash6kM_i_: c1_Instruction.o; -text: .text%__1cHLogicOpEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cLInstructionIcan_trap6kM_i_: c1_Instruction.o; -text: .text%__1cMGraphBuilderHconvert6MnJBytecodesECode_nJBasicType_3_v_; -text: .text%__1cHConvertFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerKdo_Convert6MpnHConvert__v_; -text: .text%__1cHConvertEhash6kM_i_: c1_GraphBuilder.o; -text: .text%__1cHConvertEname6kM_pkc_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderNstore_indexed6MnJBasicType__v_; -text: .text%__1cIValueMapKkill_array6MpnJValueType__v_; -text: .text%__1cGBucketKkill_array6MpnJValueType__v_; -text: .text%__1cLInstructionOas_LoadIndexed6M_pnLLoadIndexed__: c1_GraphBuilder.o; -text: .text%__1cLInstructionOas_LoadIndexed6M_pnLLoadIndexed__: c1_Instruction.o; -text: .text%__1cKValueStackRpin_stack_indexed6MpnJValueType__v_; -text: .text%__1cMStoreIndexedFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerPdo_StoreIndexed6MpnMStoreIndexed__v_; -text: .text%__1cLAccessArrayIcan_trap6kM_i_: c1_GraphBuilder.o; -text: .text%__1cLAccessFieldPother_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cLInstructionPother_values_do6MpFpp0_v_v_: c1_Instruction.o; -text: .text%__1cIciObjectOis_null_object6kM_i_: ciInstance.o; -text: .text%__1cMStoreIndexedPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cHConvertPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorKdo_LogicOp6MpnHLogicOp__v_; -text: .text%__1cQNullCheckVisitorKdo_Convert6MpnHConvert__v_; -text: .text%__1cQNullCheckVisitorPdo_StoreIndexed6MpnMStoreIndexed__v_; -text: .text%__1cTNullCheckEliminatorThandle_StoreIndexed6MpnMStoreIndexed__v_; -text: .text%__1cMciNullObjectMis_classless6kM_i_: ciNullObject.o; -text: .text%__1cJValueTypeQas_ClassConstant6M_pnNClassConstant__: c1_ValueType.o; -text: .text%__1cOObjectConstantIencoding6kM_pnI_jobject__; -text: .text%__1cIValueGenbBrlock_byte_result_with_hint6MpnLInstruction_pknEItem__nFRInfo__; -text: .text%__1cNc1_AllocTableThas_one_free_masked6kMnKc1_RegMask__i_; -text: .text%__1cIRegAllocMget_lock_reg6MpnLInstruction_nKc1_RegMask__nFRInfo__; -text: .text%__1cIRegAllocMget_free_reg6MnKc1_RegMask__nFRInfo__; -text: .text%__1cNc1_AllocTablePget_free_masked6MnKc1_RegMask__i_; -text: .text%__1cNClassConstantIencoding6kM_pnI_jobject__; -text: .text%__1cLLIR_EmitterLopr2jobject6MpnLLIR_OprDesc__pnI_jobject__; -text: .text%__1cILIR_ListHoop2reg6MpnI_jobject_nFRInfo__v_: c1_LIREmitter.o; -text: .text%__1cIValueGenMrelease_item6MpnEItem__v_; -text: .text%__1cIValueGenPdo_StoreIndexed6MpnMStoreIndexed__v_; -text: .text%__1cIValueGenKdo_Convert6MpnHConvert__v_; -text: .text%__1cIValueGenKdo_LogicOp6MpnHLogicOp__v_; -text: .text%__1cLLIR_EmitterIlogic_op6MnJBytecodesECode_nFRInfo_pnLLIR_OprDesc_5_v_; -text: .text%__1cILIR_ListLlogical_and6MnFRInfo_pnLLIR_OprDesc_1_v_: c1_LIREmitter.o; -text: .text%__1cLLIR_EmitterKconvert_op6MnJBytecodesECode_pnLLIR_OprDesc_nFRInfo_i_v_; -text: .text%__1cILIR_ListHconvert6MnJBytecodesECode_pnLLIR_OprDesc_4i_v_: c1_LIREmitter.o; -text: .text%__1cIValueGenKmust_round6MpnLInstruction_pknEItem__i_; -text: .text%__1cLAccessArrayKlock_stack6kM_pnKValueStack__: c1_GraphBuilder.o; -text: .text%__1cLLIR_EmitterNindexed_store6MnJBasicType_pnLLIR_OprDesc_33nFRInfo_pnMCodeEmitInfo__v_; -text: .text%__1cLLIR_EmitterXlo_word_offset_in_bytes6kM_i_; -text: .text%__1cLLIR_EmitterXhi_word_offset_in_bytes6kM_i_; -text: .text%__1cILIR_ListLstore_array6MnFRInfo_pnLLIR_Address_nJBasicType_pnMCodeEmitInfo__v_; -text: .text%__1cIValueGenXexception_handler_start6MpnHIRScope_ipnKValueStack__v_; -text: .text%__1cLLIR_EmitterNhandler_entry6M_v_; -text: .text%__1cLLIR_OprFactQdummy_value_type6FpnJValueType__pnLLIR_OprDesc__; -text: .text%__1cLInstructionKexact_type6kM_pnGciType__: c1_GraphBuilder.o; -text: .text%__1cLInstructionNdeclared_type6kM_pnGciType__: c1_GraphBuilder.o; -text: .text%__1cILIR_ListKnull_check6MnFRInfo_pnMCodeEmitInfo__v_: c1_CodeGenerator.o; -text: .text%__1cNLIR_OpConvertJemit_code6MpnVLIR_AbstractAssembler__v_; -text: .text%__1cNLIR_OptimizerOemit_opConvert6MpnNLIR_OpConvert__v_; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_pnI_jobject__v_; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_pnI_jobject__v_; -text: .text%__1cNLIR_AssemblerIlogic_op6MnILIR_Code_pnLLIR_OprDesc_33_v_; -text: .text%__1cNLIR_AssemblerOemit_opConvert6MpnNLIR_OpConvert__v_; -text: .text%__1cNLIR_AssemblerNarray_move_op6MpnLLIR_OprDesc_2nJBasicType_pnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerJreg2array6MnFRInfo_pnLLIR_Address_nJBasicType_pnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerPas_ArrayAddress6MpnLLIR_Address_nJBasicType__nHAddress__; -text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cUDebugInfoWriteStreamMwrite_handle6MpnI_jobject__v_; -text: .text%__1cTExceptionRangeTableJadd_entry6Miiiiii_v_; -text: .text%__1cTExceptionRangeEntry2t6Miiiiii_v_; -text: .text%__1cTExceptionRangeTableJadd_entry6MnTExceptionRangeEntry__v_; -text: .text%__1cOExceptionScopeCid6kM_i_; -text: .text%__1cTExceptionRangeTableTentry_index_for_pco6kMi_i_; -text: .text%__1cTExceptionRangeTableIentry_at6kMi_pnTExceptionRangeEntry__; -text: .text%jni_CallStaticVoidMethodV: jni.o; -text: .text%JVM_GetLastErrorString; -text: .text%jni_Throw: jni.o; -text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_; -text: .text%JVM_DisableCompiler; -text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%JVM_Available; -text: .text%__1cOGenerateOopMapKpp_new_ref6MpnNCellTypeState_i_v_; -text: .text%__1cLInstructionMas_LoadField6M_pnJLoadField__: c1_Instruction.o; -text: .text%__1cHLogicOpOis_commutative6kM_i_; -text: .text%__1cDCHANprocess_class6FnLKlassHandle_pnNGrowableArray4n0B___pnNGrowableArray4nMmethodHandle___nMsymbolHandle_6_v_; -text: .text%__1cUGenericGrowableArrayMraw_contains6kMpknEGrET__i_; -text: .text%__1cLArrayLengthFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerOdo_ArrayLength6MpnLArrayLength__v_; -text: .text%__1cLArrayLengthEhash6kM_i_: c1_GraphBuilder.o; -text: .text%__1cLArrayLengthEname6kM_pkc_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderOnew_type_array6M_v_; -text: .text%__1cMNewTypeArrayFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerPdo_NewTypeArray6MpnMNewTypeArray__v_; -text: .text%__1cINewArrayIcan_trap6kM_i_: c1_Instruction.o; -text: .text%__1cJIntrinsicFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerMdo_Intrinsic6MpnJIntrinsic__v_; -text: .text%__1cJIntrinsicMas_Intrinsic6M_p0_: c1_GraphBuilder.o; -text: .text%__1cJIntrinsicIcan_trap6kM_i_: c1_GraphBuilder.o; -text: .text%__1cLAccessArrayPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorOdo_ArrayLength6MpnLArrayLength__v_; -text: .text%__1cTNullCheckEliminatorShandle_ArrayLength6MpnLArrayLength__v_; -text: .text%__1cINewArrayPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorPdo_NewTypeArray6MpnMNewTypeArray__v_; -text: .text%__1cTNullCheckEliminatorPhandle_NewArray6MpnINewArray__v_; -text: .text%__1cJIntrinsicPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorMdo_Intrinsic6MpnJIntrinsic__v_; -text: .text%__1cJLoopArrayIindex_of6kMkpnELoop__i_: c1_Loops.o; -text: .text%__1cINewArrayLas_NewArray6M_p0_: c1_Instruction.o; -text: .text%__1cILIR_ListOcall_icvirtual6MnFRInfo_pnLLIR_OprDesc_pCpnMCodeEmitInfo__v_: c1_LIREmitter.o; -text: .text%__1cILIR_ListNstore_mem_int6MinFRInfo_inJBasicType_pnMCodeEmitInfo_nHLIR_Op1NLIR_PatchCode__v_; -text: .text%__1cIValueGenOdo_ArrayLength6MpnLArrayLength__v_; -text: .text%__1cLLIR_EmitterMarray_length6MnFRInfo_pnLLIR_OprDesc_pnMCodeEmitInfo__v_; -text: .text%__1cLlog2_intptr6Fi_i_: c1_LIREmitter.o; -text: .text%__1cIValueGenPdo_NewTypeArray6MpnMNewTypeArray__v_; -text: .text%__1cLLIR_EmitterOnew_type_array6MnFRInfo_nJBasicType_pnLLIR_OprDesc_11111pnMCodeEmitInfo__v_; -text: .text%__1cQNewTypeArrayStub2t6MnFRInfo_11pnMCodeEmitInfo__v_; -text: .text%__1cQciTypeArrayKlassEmake6FnJBasicType__p0_; -text: .text%__1cQciTypeArrayKlassJmake_impl6FnJBasicType__p0_; -text: .text%__1cILIR_ListHoop2reg6MpnI_jobject_nFRInfo__v_: c1_LIREmitter_x86.o; -text: .text%__1cILIR_ListOallocate_array6MnFRInfo_11111nJBasicType_1pnICodeStub__v_; -text: .text%__1cIValueGenMdo_Intrinsic6MpnJIntrinsic__v_; -text: .text%__1cIValueGenMdo_ArrayCopy6MpnJIntrinsic__v_; -text: .text%__1cIValueGenQarraycopy_helper6MpnJIntrinsic_pippnMciArrayKlass__v_; -text: .text%__1cJLoadFieldKexact_type6kM_pnGciType__; -text: .text%__1cJLoadFieldNdeclared_type6kM_pnGciType__; -text: .text%__1cQciTypeArrayKlassTis_type_array_klass6M_i_: ciTypeArrayKlass.o; -text: .text%__1cOas_array_klass6FpnGciType__pnMciArrayKlass__: c1_CodeGenerator.o; -text: .text%__1cMciArrayKlassOis_array_klass6M_i_: ciTypeArrayKlass.o; -text: .text%__1cMNewTypeArrayKexact_type6kM_pnGciType__; -text: .text%__1cLInstructionNdeclared_type6kM_pnGciType__: c1_Instruction.o; -text: .text%__1cRpositive_constant6FpnLInstruction__i_: c1_CodeGenerator.o; -text: .text%__1cLArrayLengthOas_ArrayLength6M_p0_: c1_GraphBuilder.o; -text: .text%__1cQis_constant_zero6FpnLInstruction__i_: c1_CodeGenerator.o; -text: .text%__1cILIR_ListJarraycopy6MpnLLIR_OprDesc_22222pnMciArrayKlass_ipnMCodeEmitInfo__v_: c1_CodeGenerator_x86.o; -text: .text%__1cLLIR_EmitterNwrite_barrier6MpnLLIR_OprDesc_2_v_; -text: .text%__1cILIR_ListUunsigned_shift_right6MnFRInfo_i1_v_: c1_LIREmitter_x86.o; -text: .text%__1cILIR_ListUunsigned_shift_right6MpnLLIR_OprDesc_222_v_; -text: .text%__1cQLIR_OpAllocArrayFvisit6MpnQLIR_OpVisitState__v_; -text: .text%__1cQNewTypeArrayStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cPLIR_OpArrayCopyFvisit6MpnQLIR_OpVisitState__v_; -text: .text%__1cQLIR_OpAllocArrayJemit_code6MpnVLIR_AbstractAssembler__v_; -text: .text%__1cNLIR_OptimizerQemit_alloc_array6MpnQLIR_OpAllocArray__v_; -text: .text%__1cPLIR_OpArrayCopyJemit_code6MpnVLIR_AbstractAssembler__v_; -text: .text%__1cNLIR_OptimizerOemit_arraycopy6MpnPLIR_OpArrayCopy__v_; -text: .text%__1cNLIR_AssemblerHic_call6MpCpnMCodeEmitInfo__v_; -text: .text%__1cJAssemblerEcall6MpCrknQRelocationHolder__v_; -text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cXvirtual_call_RelocationJpack_data6M_i_; -text: .text%__1cNLIR_AssemblerJconst2mem6MpnJLIR_Const_pnLLIR_Address_nJBasicType_pnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerQemit_alloc_array6MpnQLIR_OpAllocArray__v_; -text: .text%__1cNLIR_AssemblerSarray_element_size6kMnJBasicType__nHAddressLScaleFactor__; -text: .text%__1cRC1_MacroAssemblerOallocate_array6MpnMRegisterImpl_222inHAddressLScaleFactor_2rnFLabel__v_; -text: .text%__1cRC1_MacroAssemblerMtry_allocate6MpnMRegisterImpl_2i22rnFLabel__v_; -text: .text%__1cQNewTypeArrayStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerOemit_arraycopy6MpnPLIR_OpArrayCopy__v_; -text: .text%__1cMciArrayKlassMelement_type6M_pnGciType__; -text: .text%__1cNArrayCopyStub2t6MpnMCodeEmitInfo_pnOStaticCallStub__v_; -text: .text%__1cFRInfoMset_word_reg6MkpnMRegisterImpl__v_; -text: .text%__1cNArrayCopyStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerOpush_parameter6MpnMRegisterImpl_i_v_; -text: .text%__1cQNewTypeArrayStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cNArrayCopyStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_; -text: .text%__1cIRuntime1Uresolve_virtual_call6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cKoopFactoryUnew_compiledICHolder6FnMmethodHandle_nLKlassHandle_pnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cVcompiledICHolderKlassIallocate6MpnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: compiledICHolderKlass.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: compiledICHolderKlass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: compiledICHolderKlass.o; -text: .text%__1cXvirtual_call_RelocationJfirst_oop6M_pC_; -text: .text%__1cXvirtual_call_RelocationJoop_limit6M_pC_; -text: .text%__1cNRelocIteratorJset_limit6MpC_v_; -text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cGICStubIset_stub6MpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_; -text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; -text: .text%__1cRInlineCacheBufferLnew_ic_stub6F_pnGICStub__; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: objArrayKlass.o; -text: .text%JVM_NewArray; -text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__; -text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; -text: .text%__1cNobjArrayKlassOmulti_allocate6MipiipnGThread__pnHoopDesc__; -text: .text%__1cNinstanceKlassSlookup_osr_nmethod6kMkpnNmethodOopDesc_i_pnHnmethod__; -text: .text%__1cQSimpleCompPolicyYmethod_back_branch_event6MnMmethodHandle_iipnGThread__v_; -text: .text%__1cICompilerMsupports_osr6M_i_: c1_Compiler.o; -text: .text%__1cHciKlassOis_subclass_of6Mp0_i_; -text: .text%__1cMGraphBuilderQnew_object_array6M_v_; -text: .text%__1cONewObjectArrayFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerRdo_NewObjectArray6MpnONewObjectArray__v_; -text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__: ciObjArrayKlass.o; -text: .text%__1cMGraphBuilderIshift_op6MpnJValueType_nJBytecodesECode__v_; -text: .text%__1cHShiftOpFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerKdo_ShiftOp6MpnHShiftOp__v_; -text: .text%__1cHShiftOpEhash6kM_i_: c1_GraphBuilder.o; -text: .text%__1cHShiftOpEname6kM_pkc_: c1_GraphBuilder.o; -text: .text%__1cLLoadIndexedOas_LoadIndexed6M_p0_: c1_Instruction.o; -text: .text%__1cMArithmeticOpIis_equal6kMpnLInstruction__i_: c1_Instruction.o; -text: .text%__1cDOp2Gas_Op26M_p0_: c1_Instruction.o; -text: .text%__1cLInstructionMas_LoadField6M_pnJLoadField__: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorRdo_NewObjectArray6MpnONewObjectArray__v_; -text: .text%__1cDOp2Pinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorKdo_ShiftOp6MpnHShiftOp__v_; -text: .text%__1cHciKlassMaccess_flags6M_i_; -text: .text%__1cILIR_ListPallocate_object6MnFRInfo_111ii1pnICodeStub__v_; -text: .text%__1cLLIR_EmitterOmembar_release6M_v_; -text: .text%__1cLLIR_EmitterGmembar6M_v_; -text: .text%__1cIValueGenRdo_NewObjectArray6MpnONewObjectArray__v_; -text: .text%__1cLLIR_EmitterQnew_object_array6MnFRInfo_pnHciKlass_pnLLIR_OprDesc_11111pnMCodeEmitInfo_7_v_; -text: .text%__1cSNewObjectArrayStub2t6MnFRInfo_11pnMCodeEmitInfo__v_; -text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_; -text: .text%__1cPciObjArrayKlassJmake_impl6FpnHciKlass__p0_; -text: .text%__1cLLIR_EmitterOmembar_acquire6M_v_; -text: .text%__1cIValueGenKdo_ShiftOp6MpnHShiftOp__v_; -text: .text%__1cIValueGenPshiftCountRInfo6F_nFRInfo__; -text: .text%__1cLLIR_EmitterIshift_op6MnJBytecodesECode_nFRInfo_pnLLIR_OprDesc_53_v_; -text: .text%__1cILIR_ListKshift_left6MnFRInfo_i1_v_: c1_LIREmitter.o; -text: .text%__1cILIR_ListKlogical_or6MnFRInfo_pnLLIR_OprDesc_1_v_: c1_LIREmitter.o; -text: .text%__1cOLIR_OpAllocObjFvisit6MpnQLIR_OpVisitState__v_; -text: .text%__1cSNewObjectArrayStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cOLIR_OpAllocObjJemit_code6MpnVLIR_AbstractAssembler__v_; -text: .text%__1cNLIR_OptimizerOemit_alloc_obj6MpnOLIR_OpAllocObj__v_; -text: .text%__1cNLIR_AssemblerOemit_alloc_obj6MpnOLIR_OpAllocObj__v_; -text: .text%__1cRC1_MacroAssemblerPallocate_object6MpnMRegisterImpl_22ii2rnFLabel__v_; -text: .text%__1cNLIR_AssemblerOmembar_release6M_v_; -text: .text%__1cNLIR_AssemblerGmembar6M_v_; -text: .text%__1cSNewObjectArrayStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerOmembar_acquire6M_v_; -text: .text%__1cEBaseHas_Base6M_p0_: c1_IR.o; -text: .text%__1cNLIR_AssemblerOemit_osr_entry6MpnHIRScope_ipnFLabel_i_v_; -text: .text%__1cSNewObjectArrayStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cUGenericGrowableArrayLraw_at_grow6MipknEGrET__pv_; -text: .text%__1cNSignatureInfoIdo_short6M_v_: bytecode.o; -text: .text%jni_MonitorEnter: jni.o; -text: .text%__1cSObjectSynchronizerJjni_enter6FnGHandle_pnGThread__v_; -text: .text%jni_MonitorExit: jni.o; -text: .text%__1cSObjectSynchronizerIjni_exit6FpnHoopDesc_pnGThread__v_; -text: .text%jni_CallVoidMethod: jni.o; -text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_: jni.o; -text: .text%jni_CallStaticBooleanMethodV: jni.o; -text: .text%JVM_GetStackTraceDepth; -text: .text%__1cTjava_lang_ThrowableVget_stack_trace_depth6FpnHoopDesc_pnGThread__i_; -text: .text%__1cTjava_lang_ThrowableJbacktrace6FpnHoopDesc__2_; -text: .text%JVM_GetStackTraceElement; -text: .text%__1cTjava_lang_ThrowableXget_stack_trace_element6FpnHoopDesc_ipnGThread__2_; -text: .text%__1cbBjava_lang_StackTraceElementGcreate6FnMmethodHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cbBjava_lang_StackTraceElementNset_className6FpnHoopDesc_2_v_; -text: .text%__1cbBjava_lang_StackTraceElementOset_methodName6FpnHoopDesc_2_v_; -text: .text%__1cbBjava_lang_StackTraceElementMset_fileName6FpnHoopDesc_2_v_; -text: .text%__1cNmethodOopDescUline_number_from_bci6kMi_i_; -text: .text%__1cbECompressedLineNumberReadStream2t6MpC_v_; -text: .text%__1cbECompressedLineNumberReadStreamJread_pair6M_i_; -text: .text%__1cUCompressedReadStreamIread_int6M_i_: methodOop.o; -text: .text%__1cbBjava_lang_StackTraceElementOset_lineNumber6FpnHoopDesc_i_v_; -text: .text%__1cFKlassNoop_is_method6kM_i_: typeArrayKlass.o; -text: .text%__1cFKlassRoop_is_methodData6kM_i_: typeArrayKlass.o; -text: .text%__1cIciObjectOis_null_object6kM_i_: ciObjectFactory.o; -text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; -text: .text%__1cNObjectMonitorREntryQdDueue_insert6MpnMObjectWaiter_i_v_; -text: .text%__1cNObjectMonitorbAEntryQdDueue_SelectSuccessor6M_pnMObjectWaiter__; -text: .text%__1cLServiceUtilLvisible_oop6FpnHoopDesc__i_: objectMonitor_solaris.o; -text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_; -text: .text%JVM_EnableCompiler; -text: .text%__1cCosHSolarisFEventEpark6Mx_i_: objectMonitor_solaris.o; -text: .text%__1cJStubQdDueueKremove_all6M_v_; -text: .text%__1cJStubQdDueueMremove_first6Mi_v_; -text: .text%__1cJStubQdDueueMremove_first6M_v_; -text: .text%__1cPICStubInterfaceIfinalize6MpnEStub__v_: icBuffer.o; -text: .text%__1cGICStubIfinalize6M_v_; -text: .text%__1cGICStubKcached_oop6kM_pnHoopDesc__; -text: .text%__1cRInlineCacheBufferUic_buffer_cached_oop6FpC_pnHoopDesc__; -text: .text%__1cKCompiledICOset_cached_oop6MpnHoopDesc__v_; -text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_; -text: .text%__1cGICStubLdestination6kM_pC_; -text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_; -text: .text%__1cPICStubInterfaceEsize6kMpnEStub__i_: icBuffer.o; -text: .text%__1cUSafepointSynchronizeDend6F_v_; -text: .text%__1cCosbAmake_polling_page_readable6F_v_; -text: .text%__1cTAbstractInterpreterRignore_safepoints6F_v_; -text: .text%__1cGThreadQunboost_priority6Fp0_v_; -text: .text%__1cUThreadSafepointStateHrestart6M_v_; -text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; -text: .text%__1cKJavaThreadbScheck_safepoint_and_suspend_for_native_trans6Fp0_v_; -# Test LoadFrame -text: .text%__1cNObjectMonitorGenter26MpnGThread__v_; -text: .text%__1cICompilerPsupports_native6M_i_: c1_Compiler.o; -text: .text%__1cLCompilationVcompile_native_method6MpnLCodeOffsets__i_; -text: .text%__1cIciMethodMnative_entry6M_pC_; -text: .text%__1cLCompilationUemit_code_for_native6MpCpnLCodeOffsets__v_; -text: .text%__1cLCompilationXemit_code_prolog_native6MpnIFrameMap__v_; -text: .text%__1cNLIR_AssemblerRemit_method_entry6MpnLLIR_Emitter_pnHIRScope__v_; -text: .text%__1cOMacroAssemblerHfat_nop6M_v_; -text: .text%__1cNLIR_AssemblerQemit_native_call6MpCpnMCodeEmitInfo__v_; -text: .text%__1cMCodeEmitInfobGcreate_oop_map_for_own_signature6M_pnGOopMap__; -text: .text%__1cNLIR_AssemblerXemit_native_method_exit6MpnMCodeEmitInfo__v_; -text: .text%__1cNSignatureInfoHdo_char6M_v_: reflection.o; -text: .text%__1cNSignatureInfoHdo_bool6M_v_: reflection.o; -text: .text%jni_CallObjectMethodV: jni.o; -text: .text%jni_SetObjectField: jni.o; -text: .text%jni_IsInstanceOf: jni.o; -text: .text%jni_GetStaticObjectField: jni.o; -text: .text%__1cbCTwoGenerationCollectorPolicybMshould_try_older_generation_allocation6kMI_i_; -text: .text%__1cQGenCollectedHeapSattempt_allocation6MIiii_pnIHeapWord__; -text: .text%__1cQDefNewGenerationIallocate6MIii_pnIHeapWord__: defNewGeneration.o; -text: .text%__1cKGenerationInext_gen6kM_p0_; -text: .text%__1cKGenerationYallocation_limit_reached6MpnFSpace_pnIHeapWord_I_4_: tenuredGeneration.o; -text: .text%__1cQDefNewGenerationTallocate_from_space6MI_pnIHeapWord__; -text: .text%__1cPVM_GC_OperationNdoit_prologue6M_i_; -text: .text%__1cPVM_GC_OperationZacquire_pending_list_lock6M_v_; -text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; -text: .text%__1cXjava_lang_ref_ReferenceWpending_list_lock_addr6F_ppnHoopDesc__; -text: .text%__1cPVM_GC_OperationQgc_count_changed6kM_i_; -text: .text%__1cbAVM_GenCollectForAllocationEname6kM_pkc_: vm_operations.o; -text: .text%__1cbAVM_GenCollectForAllocationEdoit6M_v_; -text: .text%__1cNJvmtiGCMarker2t6Mi_v_; -text: .text%__1cQGenCollectedHeapZsatisfy_failed_allocation6MIiipi_pnIHeapWord__; -text: .text%__1cbCTwoGenerationCollectorPolicyZsatisfy_failed_allocation6MIiipi_pnIHeapWord__; -text: .text%__1cQGenCollectedHeapNdo_collection6MiiIiiipi_v_; -text: .text%__1cXTraceMemoryManagerStats2t6Mi_v_; -text: .text%__1cNMemoryServiceIgc_begin6Fi_v_; -text: .text%__1cPGCMemoryManagerIgc_begin6M_v_; -text: .text%__1cKManagementJtimestamp6F_x_; -text: .text%__1cKGCStatInfoMset_gc_usage6MinLMemoryUsage_i_v_; -text: .text%__1cTContiguousSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cTContiguousSpacePoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cbBSurvivorContiguousSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cbBSurvivorContiguousSpacePoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cOGenerationPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cOGenerationPoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cQGenCollectedHeapLgc_prologue6Mi_v_; -text: .text%__1cNCollectedHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; -text: .text%__1cWThreadLocalAllocBufferVaccumulate_statistics6MIi_v_; -text: .text%__1cPGlobalTLABStatsHpublish6M_v_; -text: .text%__1cQGenCollectedHeapTensure_parseability6M_v_; -text: .text%__1cNCollectedHeapTensure_parseability6M_v_; -text: .text%__1cNCollectedHeapOfill_all_tlabs6M_v_; -text: .text%__1cQGenCollectedHeapSgeneration_iterate6Mpn0AKGenClosure_i_v_; -text: .text%__1cbCGenEnsureParseabilityClosureNdo_generation6MpnKGeneration__v_: genCollectedHeap.o; -text: .text%__1cKGenerationTensure_parseability6M_v_: defNewGeneration.o; -text: .text%__1cKGenerationTensure_parseability6M_v_: tenuredGeneration.o; -text: .text%__1cKGenerationTensure_parseability6M_v_: compactingPermGenGen.o; -text: .text%__1cSAllocationProfilerViterate_since_last_gc6F_v_; -text: .text%__1cUGenGCPrologueClosureNdo_generation6MpnKGeneration__v_: genCollectedHeap.o; -text: .text%__1cQDefNewGenerationLgc_prologue6Mi_v_: defNewGeneration.o; -text: .text%__1cRTenuredGenerationLgc_prologue6Mi_v_; -text: .text%__1cKGenerationLgc_prologue6Mi_v_: compactingPermGenGen.o; -text: .text%__1cKGenerationOshould_collect6MiIii_i_: defNewGeneration.o; -text: .text%__1cQDefNewGenerationKshort_name6kM_pkc_: defNewGeneration.o; -text: .text%__1cKGenerationIcounters6M_pnRCollectorCounters__: defNewGeneration.o; -text: .text%__1cQGenCollectedHeapKsave_marks6M_v_; -text: .text%__1cQDefNewGenerationKsave_marks6M_v_; -text: .text%__1cbCOneContigSpaceCardGenerationKsave_marks6M_v_; -text: .text%__1cQDefNewGenerationHcollect6MiiIii_v_; -text: .text%__1cQDefNewGenerationbAcollection_attempt_is_safe6M_i_; -text: .text%__1cRTenuredGenerationZpromotion_attempt_is_safe6kMIi_i_; -text: .text%__1cKGenerationYmax_contiguous_available6kM_I_; -text: .text%__1cbCOneContigSpaceCardGenerationUcontiguous_available6kM_I_; -text: .text%__1cQDefNewGenerationbIinit_assuming_no_promotion_failure6M_v_; -text: .text%__1cQDefNewGenerationOIsAliveClosure2t6MpnKGeneration__v_; -text: .text%__1cSScanWeakRefClosure2t6MpnQDefNewGeneration__v_; -text: .text%__1cLCardTableRSbGprepare_for_younger_refs_iterate6Mi_v_; -text: .text%__1cULRUCurrentHeapPolicy2t6M_v_; -text: .text%__1cPCollectorPolicyPis_train_policy6M_i_: collectorPolicy.o; -text: .text%__1cPFastScanClosure2t6MpnQDefNewGeneration_i_v_; -text: .text%__1cQDefNewGenerationbCFastEvacuateFollowersClosure2t6MpnQGenCollectedHeap_ip0pnPFastScanClosure_6_v_; -text: .text%__1cQGenCollectedHeapUprocess_strong_roots6Miiin0ATClassScanningOption_pnQOopsInGenClosure_3_v_; -text: .text%__1cKSharedHeapbAchange_strong_roots_parity6M_v_; -text: .text%__1cMSubTasksDonePis_task_claimed6Mi_i_; -text: .text%__1cIUniverseHoops_do6FpnKOopClosure_i_v_; -text: .text%__1cPFastScanClosureGdo_oop6MppnHoopDesc__v_: defNewGeneration.o; -text: .text%__1cQDefNewGenerationWcopy_to_survivor_space6MpnHoopDesc_p2_2_; -text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; -text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; -text: .text%__1cHThreadsHoops_do6FpnKOopClosure__v_; -text: .text%__1cKJavaThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cGThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cNchunk_oops_do6FpnKOopClosure_pnFChunk_pc_I_: handles.o; -text: .text%__1cQStackFrameStream2t6MpnKJavaThread_i_v_; -text: .text%__1cFframeQoops_do_internal6MpnKOopClosure_pnLRegisterMap_i_v_; -text: .text%__1cFframeToops_interpreted_do6MpnKOopClosure_pknLRegisterMap_i_v_; -text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; -text: .text%__1cFframebDinterpreter_frame_monitor_end6kM_pnPBasicObjectLock__; -text: .text%__1cFframebFinterpreter_frame_monitor_begin6kM_pnPBasicObjectLock__; -text: .text%__1cRInterpreterOopMap2t6M_v_; -text: .text%__1cRInterpreterOopMapKinitialize6M_v_; -text: .text%__1cNmethodOopDescImask_for6MipnRInterpreterOopMap__v_; -text: .text%__1cNinstanceKlassImask_for6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cLOopMapCache2t6M_v_; -text: .text%__1cLOopMapCacheGlookup6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cLOopMapCacheIentry_at6kMi_pnQOopMapCacheEntry__; -text: .text%__1cRInterpreterOopMapIis_empty6M_i_; -text: .text%__1cQOopMapCacheEntryEfill6MnMmethodHandle_i_v_; -text: .text%__1cQOopMapCacheEntryFflush6M_v_; -text: .text%__1cQOopMapCacheEntryTdeallocate_bit_mask6M_v_; -text: .text%__1cQOopMapCacheEntryPfill_for_native6M_v_; -text: .text%__1cQOopMapCacheEntryRallocate_bit_mask6M_v_; -text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pIi_v_: oopMapCache.o; -text: .text%__1cNFingerprinterLfingerprint6M_X_: oopMapCache.o; -text: .text%__1cTMaskFillerForNativeLpass_object6M_v_: oopMapCache.o; -text: .text%__1cRInterpreterOopMapNresource_copy6MpnQOopMapCacheEntry__v_; -text: .text%__1cRInterpreterOopMapLiterate_oop6MpnNOffsetClosure__v_; -text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_: frame.o; -text: .text%__1cRInterpreterOopMap2T6M_v_; -text: .text%__1cTOopMapForCacheEntry2t6MnMmethodHandle_ipnQOopMapCacheEntry__v_; -text: .text%__1cTOopMapForCacheEntryLcompute_map6MpnGThread__v_; -text: .text%__1cTOopMapForCacheEntryRpossible_gc_point6MpnOBytecodeStream__i_; -text: .text%__1cTOopMapForCacheEntryOreport_results6kM_i_: oopMapCache.o; -text: .text%__1cOGenerateOopMapVresult_for_basicblock6Mi_v_; -text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; -text: .text%__1cQOopMapCacheEntryIset_mask6MpnNCellTypeState_2i_v_; -text: .text%__1cFframeNoops_entry_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cPJavaCallWrapperHoops_do6MpnKOopClosure__v_; -text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_: oopMapCache.o; -text: .text%__1cTMaskFillerForNativeJpass_long6M_v_: oopMapCache.o; -text: .text%__1cFframebHnext_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; -text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; -text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_; -text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_; -text: .text%__1cQComputeCallStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; -text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; -text: .text%__1cRComputeEntryStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cPBytecode_invokeIis_valid6kM_i_: frame.o; -text: .text%__1cXNativeSignatureIteratorJdo_object6Mii_v_: oopMapCache.o; -text: .text%__1cFframebDoops_interpreted_arguments_do6MnMsymbolHandle_ipnKOopClosure__v_; -text: .text%__1cRArgumentOopFinderDset6MinJBasicType__v_: frame.o; -text: .text%__1cIVMThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cQVMOperationQdDueueHoops_do6MpnKOopClosure__v_; -text: .text%__1cQVMOperationQdDueueNqueue_oops_do6MipnKOopClosure__v_; -text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; -text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; -text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_; -text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_; -text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_; -text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; -text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollectorXoops_do_for_all_threads6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; -text: .text%__1cKDictionaryHoops_do6MpnKOopClosure__v_; -text: .text%__1cPDictionaryEntrybDprotection_domain_set_oops_do6MpnKOopClosure__v_: dictionary.o; -text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cVLoaderConstraintTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cUCompactingPermGenGenUyounger_refs_iterate6MpnQOopsInGenClosure__v_; -text: .text%__1cbCOneContigSpaceCardGenerationUyounger_refs_iterate6MpnQOopsInGenClosure__v_; -text: .text%__1cKGenerationbDyounger_refs_in_space_iterate6MpnFSpace_pnQOopsInGenClosure__v_; -text: .text%__1cLCardTableRSbDyounger_refs_in_space_iterate6MpnFSpace_pnQOopsInGenClosure__v_; -text: .text%__1cPContiguousSpaceLnew_dcto_cl6MpnKOopClosure_nRCardTableModRefBSOPrecisionStyle_pnIHeapWord__pnVDirtyCardToOopClosure__; -text: .text%__1cPContiguousSpaceZused_region_at_save_marks6kM_nJMemRegion__: space.o; -text: .text%__1cRCardTableModRefBSWnon_clean_card_iterate6MpnFSpace_nJMemRegion_pnVDirtyCardToOopClosure_pnQMemRegionClosure_i_v_; -text: .text%__1cRCardTableModRefBSbBnon_clean_card_iterate_work6MnJMemRegion_pnQMemRegionClosure_i_v_; -text: .text%__1cJMemRegionMintersection6kMk0_0_; -text: .text%__1cYClearNoncleanCardWrapperMdo_MemRegion6MnJMemRegion__v_: cardTableRS.o; -text: .text%__1cYClearNoncleanCardWrapperKclear_card6MpW_i_: cardTableRS.o; -text: .text%__1cVDirtyCardToOopClosureMdo_MemRegion6MnJMemRegion__v_; -text: .text%__1cWOffsetTableContigSpaceLblock_start6kMpkv_pnIHeapWord__: space.o; -text: .text%__1cbBBlockOffsetArrayContigSpaceSblock_start_unsafe6kMpkv_pnIHeapWord__; -text: .text%__1cPContiguousSpaceKblock_size6kMpknIHeapWord__I_; -text: .text%__1cUContiguousSpaceDCTOCOget_actual_top6MpnIHeapWord_2_2_; -text: .text%__1cPContiguousSpaceRtoContiguousSpace6M_p0_: space.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: instanceKlass.o; -text: .text%__1cPFiltering_DCTOCPwalk_mem_region6MnJMemRegion_pnIHeapWord_3_v_; -text: .text%__1cUContiguousSpaceDCTOCXwalk_mem_region_with_cl6MnJMemRegion_pnIHeapWord_3pnQFilteringClosure__v_; -text: .text%__1cFKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_: methodKlass.o; -text: .text%__1cLmethodKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cFKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_: instanceKlassKlass.o; -text: .text%__1cSinstanceKlassKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cNinstanceKlassViterate_static_fields6MpnKOopClosure__v_; -text: .text%__1cLklassVtablePoop_oop_iterate6MpnKOopClosure__v_; -text: .text%__1cQFilteringClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cLklassItablePoop_oop_iterate6MpnKOopClosure__v_; -text: .text%__1cKklassKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cKOopClosureXshould_remember_klasses6kM_ki_: space.o; -text: .text%__1cNinstanceKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_; -text: .text%__1cWconstantPoolCacheKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cFKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_: cpCacheKlass.o; -text: .text%__1cWconstantPoolCacheKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cWConstantPoolCacheEntryLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cFKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_: objArrayKlassKlass.o; -text: .text%__1cSobjArrayKlassKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cParrayKlassKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cNobjArrayKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_; -text: .text%__1cNinstanceKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_; -text: .text%__1cNobjArrayKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_; -text: .text%__1cFKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_: typeArrayKlass.o; -text: .text%__1cOtypeArrayKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cFKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cFKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_: methodKlass.o; -text: .text%__1cLmethodKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: constantPoolKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: constantPoolKlass.o; -text: .text%__1cFKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cFKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_: constantPoolKlass.o; -text: .text%__1cRconstantPoolKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: constMethodKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: constMethodKlass.o; -text: .text%__1cFKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_: symbolKlass.o; -text: .text%__1cLsymbolKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cFKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_: symbolKlass.o; -text: .text%__1cLsymbolKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cFKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_: constantPoolKlass.o; -text: .text%__1cRconstantPoolKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cFKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_: cpCacheKlass.o; -text: .text%__1cWconstantPoolCacheKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cWConstantPoolCacheEntryNoop_iterate_m6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: cpCacheKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: cpCacheKlass.o; -text: .text%__1cFKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_: typeArrayKlass.o; -text: .text%__1cOtypeArrayKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cFKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_: instanceKlassKlass.o; -text: .text%__1cSinstanceKlassKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cNinstanceKlassViterate_static_fields6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cLklassVtableRoop_oop_iterate_m6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cLklassItableRoop_oop_iterate_m6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cKklassKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cRInterpreterOopMapLoop_iterate6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cKOopClosureIdo_oop_v6MppnHoopDesc__v_: space.o; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cRInterpreterOopMapLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cVcompiledICHolderKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cFKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_: compiledICHolderKlass.o; -text: .text%__1cVcompiledICHolderKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cFKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_: klassKlass.o; -text: .text%__1cFKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_: klassKlass.o; -text: .text%__1cFKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_: typeArrayKlassKlass.o; -text: .text%__1cFKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_: arrayKlassKlass.o; -text: .text%__1cLCardTableRSUyounger_refs_iterate6MpnKGeneration_pnQOopsInGenClosure__v_; -text: .text%__1cMSubTasksDoneTall_tasks_completed6M_v_; -text: .text%__1cQDefNewGenerationbCFastEvacuateFollowersClosureHdo_void6M_v_; -text: .text%__1cQGenCollectedHeapbCoop_since_save_marks_iterate6MipnPFastScanClosure_2_v_; -text: .text%__1cQDefNewGenerationbFoop_since_save_marks_iterate_nv6MpnPFastScanClosure__v_; -text: .text%__1cPContiguousSpacebFoop_since_save_marks_iterate_nv6MpnPFastScanClosure__v_; -text: .text%__1cNobjArrayKlassSoop_oop_iterate_nv6MpnHoopDesc_pnPFastScanClosure__i_; -text: .text%__1cNinstanceKlassSoop_oop_iterate_nv6MpnHoopDesc_pnPFastScanClosure__i_; -text: .text%__1cFKlassSoop_oop_iterate_nv6MpnHoopDesc_pnPFastScanClosure__i_: typeArrayKlass.o; -text: .text%__1cQinstanceRefKlassSoop_oop_iterate_nv6MpnHoopDesc_pnPFastScanClosure__i_; -text: .text%__1cXjava_lang_ref_ReferenceNreferent_addr6FpnHoopDesc__p2_; -text: .text%__1cSReferenceProcessorSdiscover_reference6MpnHoopDesc_nNReferenceType__i_; -text: .text%__1cXjava_lang_ref_ReferenceJnext_addr6FpnHoopDesc__p2_; -text: .text%__1cXjava_lang_ref_ReferencePdiscovered_addr6FpnHoopDesc__p2_; -text: .text%__1cSReferenceProcessorTget_discovered_list6MnNReferenceType__ppnHoopDesc__; -text: .text%__1cKGenerationHpromote6MpnHoopDesc_Ip2_2_; -text: .text%__1cbCOneContigSpaceCardGenerationIallocate6MIii_pnIHeapWord__: tenuredGeneration.o; -text: .text%__1cbCOneContigSpaceCardGenerationbFoop_since_save_marks_iterate_nv6MpnPFastScanClosure__v_; -text: .text%__1cQGenCollectedHeapbAno_allocs_since_save_marks6Mi_i_; -text: .text%__1cQDefNewGenerationbAno_allocs_since_save_marks6M_i_; -text: .text%__1cbCOneContigSpaceCardGenerationbAno_allocs_since_save_marks6M_i_; -text: .text%__1cQDefNewGenerationUFastKeepAliveClosure2t6Mp0pnSScanWeakRefClosure__v_; -text: .text%__1cQDefNewGenerationQKeepAliveClosure2t6MpnSScanWeakRefClosure__v_; -text: .text%__1cbDReferenceProcessorInitializerIis_clean6kM_v_: concurrentMarkSweepGeneration.o; -text: .text%__1cSReferenceProcessorbDprocess_discovered_references6M_v_; -text: .text%__1cSReferenceProcessorbAprocess_discovered_reflist6MppnHoopDesc_pnPReferencePolicy_i_v_; -text: .text%__1cSReferenceProcessorOprocess_phase16MppnHoopDesc_pnPReferencePolicy_pnRBoolObjectClosure_pnKOopClosure_pnLVoidClosure__v_; -text: .text%__1cQDefNewGenerationOIsAliveClosureLdo_object_b6MpnHoopDesc__i_; -text: .text%__1cULRUCurrentHeapPolicyWshould_clear_reference6MpnHoopDesc__i_; -text: .text%__1cbBjava_lang_ref_SoftReferenceFclock6F_x_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJtimestamp6FpnHoopDesc__x_; -text: .text%__1cXjava_lang_ref_ReferenceIset_next6FpnHoopDesc_2_v_; -text: .text%__1cQDefNewGenerationUFastKeepAliveClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cSReferenceProcessorOprocess_phase26MppnHoopDesc_pnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cSReferenceProcessorOprocess_phase36MppnHoopDesc_ipnRBoolObjectClosure_pnKOopClosure_pnLVoidClosure__v_; -text: .text%__1cSReferenceProcessorQprocess_phaseJNI6M_v_; -text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cOJNIHandleBlockMweak_oops_do6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cQDefNewGenerationLswap_spaces6M_v_; -text: .text%__1cIageTablebAcompute_tenuring_threshold6MI_i_; -text: .text%__1cKGenerationWupdate_time_of_last_gc6Mx_v_: defNewGeneration.o; -text: .text%__1cSReferenceProcessorbDenqueue_discovered_references6M_i_; -text: .text%__1cXjava_lang_ref_ReferenceRpending_list_addr6F_ppnHoopDesc__; -text: .text%__1cSReferenceProcessorbBenqueue_discovered_reflists6MppnHoopDesc__v_; -text: .text%__1cSReferenceProcessorbAenqueue_discovered_reflist6MpnHoopDesc_p2_v_; -text: .text%__1cQGenCollectedHeapPupdate_gc_stats6Mii_v_: genCollectedHeap.o; -text: .text%__1cKGenerationPupdate_gc_stats6Mii_v_: defNewGeneration.o; -text: .text%__1cRTenuredGenerationPupdate_gc_stats6Mii_v_; -text: .text%__1cVAdaptivePaddedAverageGsample6Mf_v_; -text: .text%__1cKGenerationPupdate_gc_stats6Mii_v_: compactingPermGenGen.o; -text: .text%__1cRTenuredGenerationOshould_collect6MiIii_i_; -text: .text%__1cKGenerationPshould_allocate6MIii_i_: tenuredGeneration.o; -text: .text%__1cbCOneContigSpaceCardGenerationEfree6kM_I_; -text: .text%__1cQDefNewGenerationQcompute_new_size6M_v_; -text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; -text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; -text: .text%__1cQGenCollectedHeapLgc_epilogue6Mi_v_; -text: .text%__1cNCollectedHeapQresize_all_tlabs6M_v_; -text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; -text: .text%__1cWThreadLocalAllocBufferGresize6M_v_; -text: .text%__1cUGenGCEpilogueClosureNdo_generation6MpnKGeneration__v_: genCollectedHeap.o; -text: .text%__1cQDefNewGenerationLgc_epilogue6Mi_v_; -text: .text%__1cRTenuredGenerationLgc_epilogue6Mi_v_; -text: .text%__1cbCOneContigSpaceCardGenerationLgc_epilogue6Mi_v_; -text: .text%__1cRTenuredGenerationPupdate_counters6M_v_; -text: .text%__1cUCompactingPermGenGenPupdate_counters6M_v_; -text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cNMemoryServiceGgc_end6Fi_v_; -text: .text%__1cPGCMemoryManagerGgc_end6M_v_; -text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; -text: .text%__1cNJvmtiGCMarker2T6M_v_; -text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; -text: .text%__1cPVM_GC_OperationbKrelease_and_notify_pending_list_lock6M_v_; -text: .text%__1cQinstanceRefKlassbKrelease_and_notify_pending_list_lock6FipnJBasicLock__v_; -text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_: jni.o; -text: .text%jni_GetIntArrayRegion: jni.o; -text: .text%jni_SetIntArrayRegion: jni.o; -text: .text%jni_PushLocalFrame: jni.o; -text: .text%jni_PopLocalFrame: jni.o; -text: .text%__1cMGraphBuilderJnegate_op6MpnJValueType__v_; -text: .text%__1cINegateOpFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerLdo_NegateOp6MpnINegateOp__v_; -text: .text%__1cMLinkResolverbPlinktime_resolve_interface_method_or_null6FnLKlassHandle_nMsymbolHandle_21i_nMmethodHandle__; -text: .text%__1cPciInstanceKlassLimplementor6M_p0_; -text: .text%__1cINegateOpPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorLdo_NegateOp6MpnINegateOp__v_; -text: .text%__1cIValueGenJspill_one6MpnJValueType__v_; -text: .text%__1cIRegAllocbBget_smallest_value_to_spill6kMpnJValueType__pnLInstruction__; -text: .text%__1cLLIR_EmitterRarray_store_check6MpnLLIR_OprDesc_2nFRInfo_33pnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListLstore_check6MpnLLIR_OprDesc_2222pnMCodeEmitInfo__v_; -text: .text%__1cPLIR_OpTypeCheck2t6MnILIR_Code_pnLLIR_OprDesc_3333pnMCodeEmitInfo__v_; -text: .text%__1cXArrayStoreExceptionStub2t6MpnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListLshift_right6MnFRInfo_i1_v_: c1_LIREmitter.o; -text: .text%__1cILIR_ListLshift_right6MpnLLIR_OprDesc_222_v_; -text: .text%__1cIValueGenLdo_NegateOp6MpnINegateOp__v_; -text: .text%__1cLLIR_EmitterGnegate6MnFRInfo_pnLLIR_OprDesc__v_; -text: .text%__1cILIR_ListGnegate6MnFRInfo_1_v_: c1_LIREmitter.o; -text: .text%__1cXArrayStoreExceptionStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cXArrayStoreExceptionStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerEleal6MpnLLIR_OprDesc_2_v_; -text: .text%__1cNLIR_AssemblerGnegate6MpnLLIR_OprDesc_2_v_; -text: .text%__1cNCodeStubArrayIindex_of6kMkpnICodeStub__i_: c1_LIRAssembler_x86.o; -text: .text%__1cXArrayStoreExceptionStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cIRuntime1Tresolve_static_call6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_; -text: .text%__1cSCompiledStaticCallIis_clean6kM_i_; -text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cHciKlassSsuper_check_offset6M_I_; -text: .text%__1cIRuntime1Thandle_wrong_method6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cFframeRis_compiled_frame6kMpi_i_; -text: .text%__1cHnmethodOis_java_method6kM_i_: nmethod.o; -text: .text%__1cGEventsDlog6FpkcE_v_: sharedRuntime.o; -text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; -text: .text%__1cNRelocIteratorEnext6M_i_: sharedRuntime.o; -text: .text%__1cKCompiledICMset_to_clean6M_v_; -text: .text%__1cKCompiledICMstub_address6kM_pC_; -text: .text%__1cGICStubFclear6M_v_; -text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cRInlineCacheBufferSic_destination_for6FpnKCompiledIC__pC_; -text: .text%__1cIRuntime1Jarraycopy6FpnHoopDesc_i2ii_i_; -text: .text%__1cMGraphBuilderNadd_dependent6MpnPciInstanceKlass_pnIciMethod__v_; -text: .text%__1cYDebugInformationRecorderNadd_dependent6MpnPciInstanceKlass_pnIciMethod__v_; -text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cJCodeCacheXmark_for_deoptimization6FpnMklassOopDesc__i_; -text: .text%__1cNinstanceKlassXmark_dependent_nmethods6MpnMklassOopDesc__i_; -text: .text%jni_NewWeakGlobalRef: jni.o; -text: .text%__1cKJNIHandlesQmake_weak_global6FnGHandle__pnI_jobject__; -text: .text%__1cMLinkResolverbBlookup_method_in_interfaces6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%jni_CallIntMethodV: jni.o; -text: .text%Unsafe_GetObject; -text: .text%jni_CallBooleanMethod: jni.o; -text: .text%jni_CallVoidMethodV: jni.o; -text: .text%JVM_GetClassDeclaredMethods; -text: .text%JVM_InvokeMethod; -text: .text%__1cKReflectionNinvoke_method6FpnHoopDesc_nGHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; -text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; -text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; -text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; -text: .text%JVM_IsInterrupted; -# Test LoadJFrame -text: .text%__1cTresource_free_bytes6FpcI_v_; -text: .text%__1cRComputeEntryStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cJFloatTypeDtag6kM_nIValueTag__: c1_ValueType.o; -text: .text%__1cJFloatTypeEbase6kM_pnJValueType__: c1_ValueType.o; -text: .text%__1cJFloatTypeMas_FloatType6M_p0_: c1_ValueType.o; -text: .text%__1cIValueGenTdo_ArithmeticOp_FPU6MpnMArithmeticOp__v_; -text: .text%__1cHLockRegIdo_float6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIRegAllocOset_locked_fpu6MipnLInstruction_i_v_; -text: .text%__1cIValueGenNis_32bit_mode6M_i_; -text: .text%__1cLGetRefCountIdo_float6Mi_v_: c1_RegAlloc.o; -text: .text%__1cJFloatTypeEsize6kM_i_: c1_ValueType.o; -text: .text%__1cHFreeRegIdo_float6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIRegAllocMset_free_fpu6Mi_v_; -text: .text%__1cQChangeSpillCountIdo_float6Mi_v_: c1_RegAlloc.o; -text: .text%__1cLLIR_EmitterRarithmetic_op_fpu6MnJBytecodesECode_pnLLIR_OprDesc_44i_v_; -text: .text%__1cILIR_ListDmul6MpnLLIR_OprDesc_22_v_: c1_LIREmitter.o; -text: .text%__1cIValueGenKround_item6MpnEItem__v_; -text: .text%__1cLLIR_EmitterFround6MipnLLIR_OprDesc__v_; -text: .text%__1cILIR_ListKround32bit6MnFRInfo_i_v_: c1_LIREmitter.o; -text: .text%__1cIValueGenOspill_register6MnFRInfo__v_; -text: .text%__1cIRegAllocTget_value_for_rinfo6kMnFRInfo__pnLInstruction__; -text: .text%__1cLGetValueForGdo_cpu6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIValueGenKdivInRInfo6F_nFRInfo__; -text: .text%__1cIValueGenLremOutRInfo6F_nFRInfo__; -text: .text%__1cMArithmeticOpKlock_stack6kM_pnKValueStack__: c1_Instruction.o; -text: .text%__1cLLIR_EmitterParithmetic_idiv6MnJBytecodesECode_pnLLIR_OprDesc_44nFRInfo_pnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListEirem6MnFRInfo_111pnMCodeEmitInfo__v_; -text: .text%__1cHLIR_Op3Fvisit6MpnQLIR_OpVisitState__v_; -text: .text%__1cHLIR_Op3Jemit_code6MpnVLIR_AbstractAssembler__v_; -text: .text%__1cNLIR_OptimizerIemit_op36MpnHLIR_Op3__v_; -text: .text%__1cNLIR_AssemblerIfpu_push6MnFRInfo__v_; -text: .text%__1cIFrameMapLFpuStackSimEpush6Mi_v_; -text: .text%__1cNLIR_AssemblerKfpu_on_tos6MnFRInfo__v_; -text: .text%__1cIFrameMapLFpuStackSimPoffset_from_tos6kMi_i_; -text: .text%__1cIintArrayIindex_of6kMki_i_: c1_FrameMap_x86.o; -text: .text%__1cNLIR_AssemblerHfpu_pop6MnFRInfo__v_; -text: .text%__1cIFrameMapLFpuStackSimDpop6Mi_i_; -text: .text%__1cNLIR_AssemblerKround32_op6MpnLLIR_OprDesc_2_v_; -text: .text%__1cJAssemblerGfist_s6MnHAddress__v_; -text: .text%__1cNLIR_AssemblerJreset_FPU6M_v_; -text: .text%__1cNLIR_AssemblerIemit_op36MpnHLIR_Op3__v_; -text: .text%__1cNLIR_AssemblerParithmetic_idiv6MnILIR_Code_pnLLIR_OprDesc_333pnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerXadd_debug_info_for_div06MipnMCodeEmitInfo__v_; -text: .text%__1cNDivByZeroStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNDivByZeroStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cIciObjectSis_obj_array_klass6M_i_: ciTypeArrayKlass.o; -text: .text%__1cLInstructionOas_ArrayLength6M_pnLArrayLength__: c1_GraphBuilder.o; -text: .text%__1cLInstructionKas_ShiftOp6M_pnHShiftOp__: c1_Instruction.o; -text: .text%__1cILIR_ListLlogical_xor6MnFRInfo_pnLLIR_OprDesc_1_v_: c1_LIREmitter.o; -text: .text%__1cILIR_ListUunsigned_shift_right6MnFRInfo_i1_v_: c1_LIREmitter.o; -text: .text%__1cIRuntime1Ohandle_ic_miss6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cNSharedRuntimeVhandle_ic_miss_helper6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2t6M_v_; -text: .text%__1cKCompiledICOis_megamorphic6kM_i_; -text: .text%__1cLVtableStubsOis_entry_point6FpC_i_; -text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; -text: .text%__1cLVtableStubsLcreate_stub6FiipnNmethodOopDesc__pC_; -text: .text%__1cLVtableStubsGlookup6Fiii_pnKVtableStub__; -text: .text%__1cLVtableStubsScreate_vtable_stub6Fii_pnKVtableStub__; -text: .text%__1cKVtableStubSpd_code_size_limit6Fi_i_; -text: .text%__1cKVtableStub2n6FIi_pv_; -text: .text%__1cKVtableStubRpd_code_alignment6F_i_; -text: .text%__1cLVtableStubsFenter6FiiipnKVtableStub__v_; -text: .text%__1cGEventsDlog6FpkcE_v_: compiledIC.o; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_; -text: .text%Unsafe_EnsureClassInitialized; -text: .text%Unsafe_StaticFieldOffset; -text: .text%Unsafe_StaticFieldBaseFromField; -text: .text%Unsafe_GetIntVolatile; -text: .text%__1cUBytecode_tableswitchGlength6M_i_: generateOopMap.o; -text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; -text: .text%__1cUBytecode_tableswitchGlength6M_i_: c1_GraphBuilder.o; -text: .text%__1cLInstructionKas_ShiftOp6M_pnHShiftOp__: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderMtable_switch6M_v_; -text: .text%__1cLTableSwitchFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerOdo_TableSwitch6MpnLTableSwitch__v_; -text: .text%__1cLInstructionJas_Return6M_pnGReturn__: c1_GraphBuilder.o; -text: .text%__1cGSwitchPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorOdo_TableSwitch6MpnLTableSwitch__v_; -text: .text%__1cIValueGenOdo_TableSwitch6MpnLTableSwitch__v_; -text: .text%__1cIValueGenVsetup_phis_for_switch6MpnEItem_pnKValueStack__v_; -text: .text%__1cLLIR_EmitterOtableswitch_op6MpnLLIR_OprDesc_ipnKBlockBegin__v_; -text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cSCompiledStaticCallMset_to_clean6M_v_; -# Test JHello -text: .text%__1cYjava_lang_reflect_MethodNset_signature6FpnHoopDesc_2_v_; -text: .text%JVM_InitializeSocketLibrary; -text: .text%__1cDhpiZinitialize_socket_library6F_i_; -text: .text%JVM_Socket; -text: .text%Unsafe_PageSize; -text: .text%__1cNFingerprinterHdo_byte6M_v_: dump.o; -text: .text%__1cXNativeSignatureIteratorHdo_byte6M_v_: interpreterRuntime.o; -text: .text%Unsafe_SetMemory; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: unsafe.o; -text: .text%__1cNSharedRuntimeElrem6Fxx_x_; -text: .text%Unsafe_DefineClass1; -text: .text%__1cSUnsafe_DefineClass6FpnHJNIEnv__pnI_jstring_pnL_jbyteArray_iipnI_jobject_7_pnH_jclass__: unsafe.o; -text: .text%JVM_DefineClass; -text: .text%__1cPClassFileParserXverify_unqualified_name6MpcIi_i_; -text: .text%__1cVLoaderConstraintTableYextend_loader_constraint6MpnVLoaderConstraintEntry_nGHandle_pnMklassOopDesc__v_; -text: .text%__1cVLoaderConstraintTablebHensure_loader_constraint_capacity6MpnVLoaderConstraintEntry_i_v_; -text: .text%__1cIciObjectIis_klass6M_i_: ciInstance.o; -text: .text%__1cQInstanceConstantIencoding6kM_pnI_jobject__; -text: .text%__1cLInstructionOas_ArrayLength6M_pnLArrayLength__: c1_Instruction.o; -text: .text%__1cILIR_ListQunwind_exception6MnFRInfo_1pnMCodeEmitInfo__v_: c1_CodeGenerator.o; -text: .text%__1cIRuntime1Tprimitive_arraycopy6FpnIHeapWord_2i_v_; -text: .text%__1cRComputeEntryStackHdo_char6M_v_: generateOopMap.o; -text: .text%jni_NewDirectByteBuffer; -text: .text%__1cbDinitializeDirectBufferSupport6FpnHJNIEnv___i_: jni.o; -text: .text%lookupDirectBufferClasses: jni.o; -text: .text%__1cJlookupOne6FpnHJNIEnv__pkcpnGThread__pnH_jclass__: jni.o; -text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__: jni.o; -text: .text%jni_GetDoubleArrayRegion: jni.o; -text: .text%__1cNSignatureInfoJdo_double6M_v_: bytecode.o; -text: .text%__1cXJNI_ArgumentPusherVaArgJget_float6M_v_: jni.o; -text: .text%__1cQComputeCallStackHdo_byte6M_v_: generateOopMap.o; -text: .text%__1cFKlassQup_cast_abstract6M_p0_; -text: .text%__1cRComputeEntryStackHdo_byte6M_v_: generateOopMap.o; -text: .text%__1cNSharedRuntimeDd2i6Fd_i_; -text: .text%__1cSInterpreterRuntimeWslow_signature_handler6FpnKJavaThread_pnNmethodOopDesc_pi5_pC_; -text: .text%__1cXNativeSignatureIteratorJdo_object6Mii_v_: interpreterRT_x86.o; -text: .text%__1cUSlowSignatureHandlerLpass_object6M_v_: interpreterRT_x86.o; -text: .text%__1cXNativeSignatureIteratorIdo_array6Mii_v_: interpreterRT_x86.o; -text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_: interpreterRT_x86.o; -text: .text%__1cUSlowSignatureHandlerIpass_int6M_v_: interpreterRT_x86.o; -text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_: interpreterRT_x86.o; -text: .text%jni_GetFloatArrayRegion: jni.o; -text: .text%jni_GetCharArrayRegion: jni.o; -text: .text%jni_SetFloatField: jni.o; -text: .text%jni_NewFloatArray: jni.o; -text: .text%jni_SetFloatArrayRegion: jni.o; -# SwingSet -text: .text%JVM_GetFieldIxModifiers; -text: .text%JVM_GetCPFieldClassNameUTF; -text: .text%JVM_GetCPFieldModifiers; -text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_; -text: .text%__1cXjava_lang_ref_ReferenceOset_discovered6FpnHoopDesc_2_v_; -text: .text%__1cMStoreIndexedPother_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%JVM_MonitorNotify; -text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; -text: .text%__1cKValueStackElock6MpnHIRScope_pnLInstruction__i_; -text: .text%__1cKValueStackGunlock6M_i_; -text: .text%__1cLLIR_EmitterVmonitorenter_at_entry6MnFRInfo_pnMCodeEmitInfo__v_; -text: .text%__1cLLIR_EmitterNmonitor_enter6MnFRInfo_111ipnMCodeEmitInfo_3_v_; -text: .text%__1cQMonitorEnterStub2t6MnFRInfo_1pnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListbAload_stack_address_monitor6MinFRInfo__v_: c1_LIREmitter.o; -text: .text%__1cILIR_ListLlock_object6MnFRInfo_111pnICodeStub_pnMCodeEmitInfo__v_; -text: .text%__1cIValueGenNsyncTempRInfo6F_nFRInfo__; -text: .text%__1cLLIR_EmitterQreturn_op_prolog6Mi_v_; -text: .text%__1cLLIR_EmitterMmonitor_exit6MnFRInfo_11i_v_; -text: .text%__1cILIR_ListNunlock_object6MnFRInfo_11pnICodeStub__v_; -text: .text%__1cKLIR_OpLockFvisit6MpnQLIR_OpVisitState__v_; -text: .text%__1cQMonitorEnterStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cRMonitorAccessStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cKLIR_OpLockJemit_code6MpnVLIR_AbstractAssembler__v_; -text: .text%__1cNLIR_OptimizerJemit_lock6MpnKLIR_OpLock__v_; -text: .text%__1cNLIR_AssemblerPmonitor_address6MinFRInfo__v_; -text: .text%__1cIFrameMapbEaddress_for_monitor_lock_index6kMi_nHAddress__; -text: .text%__1cIFrameMapbAfp_offset_for_monitor_lock6kMi_i_; -text: .text%__1cNLIR_AssemblerJemit_lock6MpnKLIR_OpLock__v_; -text: .text%__1cRC1_MacroAssemblerLlock_object6MpnMRegisterImpl_22rnFLabel__v_; -text: .text%__1cQMonitorEnterStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cIFrameMapWmonitor_object_regname6kMi_nHOptoRegEName__; -text: .text%__1cIFrameMapbCfp_offset_for_monitor_object6kMi_i_; -text: .text%__1cMCodeEmitInfobHlocation_for_monitor_object_index6Mi_nILocation__; -text: .text%__1cIFrameMapbHlocation_for_monitor_object_index6kMipnILocation__i_; -text: .text%__1cMCodeEmitInfobFlocation_for_monitor_lock_index6Mi_nILocation__; -text: .text%__1cIFrameMapbFlocation_for_monitor_lock_index6kMipnILocation__i_; -text: .text%__1cMMonitorValue2t6MpnKScopeValue_nILocation__v_; -text: .text%__1cMMonitorValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cRC1_MacroAssemblerNunlock_object6MpnMRegisterImpl_22rnFLabel__v_; -text: .text%__1cPMonitorExitStubMis_call_stub6kM_i_: c1_CodeStubs_x86.o; -text: .text%__1cQMonitorEnterStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cNLIR_AssemblerRload_receiver_reg6MpnMRegisterImpl__v_; -text: .text%__1cNLIR_AssemblerLmonitorexit6MnFRInfo_1pnMRegisterImpl_i3_v_; -text: .text%__1cPMonitorExitStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%jni_NewIntArray: jni.o; -text: .text%__1cNCollectedHeapYlarge_typearray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: typeArrayKlass.o; -text: .text%__1cFKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_: objArrayKlassKlass.o; -text: .text%__1cSobjArrayKlassKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cQinstanceRefKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_; -text: .text%__1cRTenuredGenerationKshort_name6kM_pkc_: tenuredGeneration.o; -text: .text%__1cKGenerationIcounters6M_pnRCollectorCounters__: tenuredGeneration.o; -text: .text%__1cRTenuredGenerationHcollect6MiiIii_v_; -text: .text%__1cRTenuredGenerationbJretire_alloc_buffers_before_full_gc6M_v_; -text: .text%__1cbCOneContigSpaceCardGenerationHcollect6MiiIii_v_; -text: .text%__1cMGenMarkSweepTinvoke_at_safepoint6FipnSReferenceProcessor_i_v_; -text: .text%__1cJCodeCacheLgc_prologue6F_v_; -text: .text%__1cHThreadsLgc_prologue6F_v_; -text: .text%__1cKJavaThreadLgc_prologue6M_v_; -text: .text%__1cKJavaThreadJframes_do6MpFpnFframe_pknLRegisterMap__v_v_; -text: .text%__1cRframe_gc_prologue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_prologue6M_v_; -text: .text%__1cQGenCollectedHeapRsave_used_regions6Mii_v_; -text: .text%__1cKGenerationQsave_used_region6M_v_: tenuredGeneration.o; -text: .text%__1cbCOneContigSpaceCardGenerationLused_region6kM_nJMemRegion__; -text: .text%__1cPContiguousSpaceLused_region6kM_nJMemRegion__: space.o; -text: .text%__1cKGenerationQsave_used_region6M_v_: defNewGeneration.o; -text: .text%__1cKGenerationLused_region6kM_nJMemRegion__: defNewGeneration.o; -text: .text%__1cKGenerationQsave_used_region6M_v_: compactingPermGenGen.o; -text: .text%__1cMGenMarkSweepPallocate_stacks6F_v_; -text: .text%__1cQGenCollectedHeapOgather_scratch6MpnKGeneration_I_pnMScratchBlock__; -text: .text%__1cQDefNewGenerationScontribute_scratch6MrpnMScratchBlock_pnKGeneration_I_v_; -text: .text%__1cKGenerationScontribute_scratch6MrpnMScratchBlock_p0I_v_: tenuredGeneration.o; -text: .text%__1cRsort_scratch_list6FrpnMScratchBlock__v_: genCollectedHeap.o; -text: .text%__1cVremoveSmallestScratch6FppnMScratchBlock__1_: genCollectedHeap.o; -text: .text%__1cMGenMarkSweepRmark_sweep_phase16Firii_v_; -text: .text%__1cJEventMark2t6MpkcE_v_: genMarkSweep.o; -text: .text%__1cJMarkSweepRFollowRootClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cJMarkSweepLfollow_root6FppnHoopDesc__v_; -text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cLklassVtableToop_follow_contents6M_v_; -text: .text%__1cJMarkSweepO_mark_and_push6FppnHoopDesc__v_; -text: .text%__1cKklassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJMarkSweepXrevisit_weak_klass_link6FpnFKlass__v_; -text: .text%__1cJMarkSweepMfollow_stack6F_v_; -text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cSinstanceKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNinstanceKlassUfollow_static_fields6M_v_; -text: .text%__1cLklassItableToop_follow_contents6M_v_; -text: .text%__1cJMarkSweepNpreserve_mark6FpnHoopDesc_pnLmarkOopDesc__v_; -text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cOtypeArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cMjniIdMapBaseHoops_do6MpnKOopClosure__v_; -text: .text%__1cIjniIdMapHoops_do6MpnKOopClosure__v_; -text: .text%__1cJMarkSweepSMarkAndPushClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJMarkSweepPmark_and_follow6FppnHoopDesc__v_; -text: .text%__1cSobjArrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cRconstantPoolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWConstantPoolCacheEntryPfollow_contents6M_v_; -text: .text%__1cLmethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryYalways_strong_classes_do6FpnKOopClosure__v_; -text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryPplaceholders_do6FpnKOopClosure__v_; -text: .text%__1cVLoaderConstraintTableYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cJvmSymbolsHoops_do6FpnKOopClosure_i_v_; -text: .text%__1cJMarkSweepOIsAliveClosureLdo_object_b6MpnHoopDesc__i_: markSweep.o; -text: .text%__1cJMarkSweepQKeepAliveClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_: markSweep.o; -text: .text%__1cQSystemDictionaryMdo_unloading6FpnRBoolObjectClosure_pnKOopClosure__i_; -text: .text%__1cKDictionaryMdo_unloading6MpnRBoolObjectClosure_pnKOopClosure__i_; -text: .text%__1cVLoaderConstraintTableYpurge_loader_constraints6MpnRBoolObjectClosure__v_; -text: .text%__1cJCodeCacheMdo_unloading6FpnRBoolObjectClosure_pnKOopClosure_iri_v_; -text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; -text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; -text: .text%__1cICodeHeapJnext_free6kMpnJHeapBlock__pv_; -text: .text%__1cJCodeCacheFalive6FpnICodeBlob__2_; -text: .text%__1cKBufferBlobIis_alive6kM_i_: codeBlob.o; -text: .text%__1cKBufferBlobbIfollow_roots_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_iri_v_: codeBlob.o; -text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_; -text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__; -text: .text%__1cICodeHeapKnext_block6kMpnJHeapBlock__2_; -text: .text%__1cNSingletonBlobIis_alive6kM_i_: codeBlob.o; -text: .text%__1cNSingletonBlobbIfollow_roots_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_iri_v_: codeBlob.o; -text: .text%__1cLRuntimeStubIis_alive6kM_i_: codeBlob.o; -text: .text%__1cLRuntimeStubbIfollow_roots_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_iri_v_: codeBlob.o; -text: .text%__1cHnmethodIis_alive6kM_i_: nmethod.o; -text: .text%__1cHnmethodbIfollow_roots_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_iri_v_; -text: .text%__1cHnmethodOis_not_entrant6kM_i_: nmethod.o; -text: .text%__1cHnmethodbHfollow_root_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_ppnHoopDesc_iri_v_; -text: .text%__1cOoop_RelocationJoop_value6M_pnHoopDesc__; -text: .text%__1cVcompiledICHolderKlassSoop_being_unloaded6MpnRBoolObjectClosure_pnHoopDesc__i_; -text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_; -text: .text%__1cFKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cNinstanceKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; -text: .text%__1cMGenMarkSweepRmark_sweep_phase26F_v_; -text: .text%__1cQGenCollectedHeapWprepare_for_compaction6M_v_; -text: .text%__1cKGenerationWprepare_for_compaction6MpnMCompactPoint__v_; -text: .text%__1cbCOneContigSpaceCardGenerationWfirst_compaction_space6kM_pnQCompactibleSpace__: tenuredGeneration.o; -text: .text%__1cPContiguousSpaceWprepare_for_compaction6MpnMCompactPoint__v_; -text: .text%__1cWOffsetTableContigSpaceUinitialize_threshold6M_pnIHeapWord__; -text: .text%__1cMTenuredSpaceSallowed_dead_ratio6kM_i_; -text: .text%__1cQCompactibleSpaceHforward6MpnHoopDesc_IpnMCompactPoint_pnIHeapWord__6_; -text: .text%__1cWOffsetTableContigSpacePcross_threshold6MpnIHeapWord_2_2_; -text: .text%__1cQCompactibleSpaceQinsert_deadspace6MrIpnIHeapWord_I_i_; -text: .text%__1cQCompactibleSpaceVnext_compaction_space6kM_p0_: space.o; -text: .text%__1cQDefNewGenerationWfirst_compaction_space6kM_pnQCompactibleSpace__: defNewGeneration.o; -text: .text%__1cQCompactibleSpaceSallowed_dead_ratio6kM_i_: space.o; -text: .text%__1cbCOneContigSpaceCardGenerationWfirst_compaction_space6kM_pnQCompactibleSpace__: compactingPermGenGen.o; -text: .text%__1cPContigPermSpaceSallowed_dead_ratio6kM_i_; -text: .text%__1cMGenMarkSweepRmark_sweep_phase36Fi_v_; -text: .text%__1cUCompactingPermGenGenTpre_adjust_pointers6M_v_; -text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cQGenCollectedHeapSprocess_weak_roots6MpnKOopClosure_2_v_; -text: .text%__1cJCodeCacheHoops_do6FpnKOopClosure__v_; -text: .text%__1cKBufferBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cSDeoptimizationBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cLRuntimeStubHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cNSafepointBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cHnmethodHoops_do6MpnKOopClosure__v_; -text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; -text: .text%__1cSReferenceProcessorPoops_do_statics6FpnKOopClosure__v_; -text: .text%__1cSReferenceProcessorHoops_do6MpnKOopClosure__v_; -text: .text%__1cJMarkSweepMadjust_marks6F_v_; -text: .text%__1cYGenAdjustPointersClosureNdo_generation6MpnKGeneration__v_: genMarkSweep.o; -text: .text%__1cKGenerationPadjust_pointers6M_v_; -text: .text%__1cbCOneContigSpaceCardGenerationNspace_iterate6MpnMSpaceClosure_i_v_; -text: .text%__1cVAdjustPointersClosureIdo_space6MpnFSpace__v_: generation.o; -text: .text%__1cQCompactibleSpacePadjust_pointers6M_v_; -text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQinstanceRefKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQDefNewGenerationNspace_iterate6MpnMSpaceClosure_i_v_; -text: .text%__1cUCompactingPermGenGenPadjust_pointers6M_v_; -text: .text%__1cKklassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLsymbolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLklassVtableToop_adjust_pointers6M_v_; -text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cRconstantPoolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQconstMethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSinstanceKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassUadjust_static_fields6M_v_; -text: .text%__1cLklassItableToop_adjust_pointers6M_v_; -text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cWConstantPoolCacheEntryPadjust_pointers6M_v_; -text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cMGenMarkSweepRmark_sweep_phase46F_v_; -text: .text%__1cUCompactingPermGenGenHcompact6M_v_; -text: .text%__1cQCompactibleSpaceHcompact6M_v_; -text: .text%__1cPContiguousSpaceWreset_after_compaction6M_v_: space.o; -text: .text%__1cRGenCompactClosureNdo_generation6MpnKGeneration__v_: genMarkSweep.o; -text: .text%__1cKGenerationHcompact6M_v_; -text: .text%__1cUCompactingPermGenGenMpost_compact6M_v_; -text: .text%__1cJMarkSweepNrestore_marks6F_v_; -text: .text%__1cMGenMarkSweepRdeallocate_stacks6F_v_; -text: .text%__1cLCardTableRSSclear_into_younger6MpnKGeneration_i_v_; -text: .text%__1cLCardTableRSFclear6MnJMemRegion__v_: cardTableRS.o; -text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; -text: .text%__1cRCardTableModRefBSPclear_MemRegion6MnJMemRegion__v_; -text: .text%__1cHThreadsLgc_epilogue6F_v_; -text: .text%__1cKJavaThreadLgc_epilogue6M_v_; -text: .text%__1cRframe_gc_epilogue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_epilogue6M_v_; -text: .text%__1cFframeMpd_gc_epilog6M_v_; -text: .text%__1cJCodeCacheLgc_epilogue6F_v_; -text: .text%__1cICodeBlobTfix_oop_relocations6M_v_; -text: .text%__1cICodeBlobTfix_oop_relocations6MpC1_v_; -text: .text%__1cKRelocationSfix_oop_relocation6M_v_: codeBlob.o; -text: .text%__1cKRelocationSfix_oop_relocation6M_v_: relocInfo.o; -text: .text%__1cICodeBlobKis_nmethod6kM_i_: onStackReplacement.o; -text: .text%__1cQGenCollectedHeapWupdate_time_of_last_gc6Mx_v_: genMarkSweep.o; -text: .text%__1cKGenerationWupdate_time_of_last_gc6Mx_v_: tenuredGeneration.o; -text: .text%__1cKGenerationWupdate_time_of_last_gc6Mx_v_: compactingPermGenGen.o; -text: .text%__1cbCOneContigSpaceCardGenerationVunsafe_max_alloc_nogc6kM_I_; -text: .text%__1cRTenuredGenerationQcompute_new_size6M_v_; -text: .text%__1cKGenerationEspec6M_pnOGenerationSpec__; -text: .text%Unsafe_CompareAndSwapObject; -text: .text%__1cLVtableStubsScreate_itable_stub6Fii_pnKVtableStub__; -text: .text%__1cLLIR_EmitterDnop6M_v_; -text: .text%__1cJAssemblerEmovl6MnHAddress_pnI_jobject__v_; -text: .text%__1cMLinkResolverbEvtable_index_of_miranda_method6FnLKlassHandle_nMsymbolHandle_2pnGThread__i_; -text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; -text: .text%__1cLklassVtableTis_miranda_entry_at6Mi_i_; -text: .text%__1cRPrivilegedElementHoops_do6MpnKOopClosure__v_; -text: .text%__1cJCodeCacheIcontains6Fpv_i_; -text: .text%__1cFframeRoops_code_blob_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cJOopMapSetHoops_do6FpknFframe_pnICodeBlob_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cJOopMapSetGall_do6FpknFframe_pnICodeBlob_pknLRegisterMap_pnKOopClosure_pFppnHoopDesc_9E_v9B9B_v_; -text: .text%__1cICodeBlobbAoop_map_for_return_address6MpCi_pnGOopMap__; -text: .text%__1cJOopMapSetSfind_map_at_offset6kMii_pnGOopMap__; -text: .text%__1cMOopMapStream2t6MpnGOopMap_i_v_; -text: .text%__1cFframeVoopmapreg_to_location6kMnFVMRegEName_pknLRegisterMap__ppnHoopDesc__; -text: .text%__1cKOopClosureLdo_nmethods6kM_ki_: defNewGeneration.o; -text: .text%__1cJOopMapSetTupdate_register_map6FpknFframe_pnICodeBlob_pnLRegisterMap__v_; -text: .text%__1cICodeBlobYcaller_must_gc_arguments6kMpnKJavaThread__i_: nmethod.o; -text: .text%__1cQComputeCallStackIdo_float6M_v_: generateOopMap.o; -text: .text%jni_DeleteWeakGlobalRef: jni.o; -text: .text%__1cKJNIHandlesTdestroy_weak_global6FpnI_jobject__v_; -text: .text%__1cILIR_ListJoop2stack6MpnI_jobject_i_v_: c1_LIREmitter.o; -text: .text%__1cNObjectMonitorREntryQdDueue_unlink6MpnMObjectWaiter__v_; -text: .text%JVM_IsSameClassPackage; -text: .text%__1cTGeneratePairingInfoRpossible_gc_point6MpnOBytecodeStream__i_: ciMethod.o; -text: .text%__1cTGeneratePairingInfoOreport_results6kM_i_: ciMethod.o; -text: .text%__1cMGraphBuilderMmonitorenter6MpnLInstruction__v_; -text: .text%__1cMMonitorEnterFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerPdo_MonitorEnter6MpnMMonitorEnter__v_; -text: .text%__1cNAccessMonitorIcan_trap6kM_i_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderLmonitorexit6MpnLInstruction__v_; -text: .text%__1cLMonitorExitFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerOdo_MonitorExit6MpnLMonitorExit__v_; -text: .text%__1cILongTypeDtag6kM_nIValueTag__: c1_Canonicalizer.o; -text: .text%__1cILongTypeEsize6kM_i_: c1_Canonicalizer.o; -text: .text%__1cNAccessMonitorPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorPdo_MonitorEnter6MpnMMonitorEnter__v_; -text: .text%__1cTNullCheckEliminatorUhandle_AccessMonitor6MpnNAccessMonitor__v_; -text: .text%__1cQNullCheckVisitorOdo_MonitorExit6MpnLMonitorExit__v_; -text: .text%__1cIValueGenPdo_MonitorEnter6MpnMMonitorEnter__v_; -text: .text%__1cNc1_AllocTableMhas_two_free6kM_i_; -text: .text%__1cMLongConstantPas_LongConstant6M_p0_: c1_Canonicalizer.o; -text: .text%__1cFRInfoLas_rinfo_lo6kM_0_; -text: .text%__1cLLIR_EmitterJopr2intLo6MpnLLIR_OprDesc__i_; -text: .text%__1cFRInfoLas_rinfo_hi6kM_0_; -text: .text%__1cLLIR_EmitterJopr2intHi6MpnLLIR_OprDesc__i_; -text: .text%__1cIValueGenOdo_MonitorExit6MpnLMonitorExit__v_; -text: .text%__1cNAccessMonitorQas_AccessMonitor6M_p0_: c1_GraphBuilder.o; -text: .text%__1cJAssemblerFpushl6MpnI_jobject__v_; -text: .text%__1cNLIR_AssemblerNas_Address_hi6MpnLLIR_Address__nHAddress__; -text: .text%__1cFRInfoOas_register_hi6kM_pnMRegisterImpl__; -text: .text%__1cNLIR_AssemblerNas_Address_lo6MpnLLIR_Address__nHAddress__; -text: .text%__1cFRInfoOas_register_lo6kM_pnMRegisterImpl__; -text: .text%__1cCosHrealloc6FpvI_1_; -text: .text%Unsafe_GetNativeFloat; -text: .text%__1cIValueGenQdo_currentThread6MpnJIntrinsic__v_; -text: .text%__1cILIR_ListKget_thread6MnFRInfo__v_: c1_CodeGenerator_x86.o; -text: .text%__1cNLIR_AssemblerKget_thread6MpnLLIR_OprDesc__v_; -text: .text%__1cIValueGenSload_item_patching6MpnHIRScope_ipnEItem_pnKValueStack_pnOExceptionScope__v_; -text: .text%__1cEItemUget_jobject_constant6kM_pnIciObject__; -text: .text%__1cJValueTypeTas_InstanceConstant6M_pnQInstanceConstant__: c1_ValueType.o; -text: .text%__1cIintArrayIindex_of6kMki_i_: c1_CodeGenerator.o; -text: .text%__1cMLinkResolverbEresolve_interface_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cIciObjectTis_type_array_klass6M_i_: ciInstanceKlass.o; -text: .text%__1cGciTypeNis_subtype_of6Mp0_i_; -text: .text%__1cIValueGenOload_byte_item6MpnEItem__v_; -text: .text%__1cIValueGenPlock_free_rinfo6MpnLInstruction_nKc1_RegMask__nFRInfo__; -text: .text%__1cIRegAllocNget_lock_temp6MpnLInstruction_nKc1_RegMask__nFRInfo__; -text: .text%__1cQComputeCallStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cRComputeEntryStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cIFrameMapNis_byte_rinfo6FnFRInfo__i_; -text: .text%Unsafe_AllocateInstance; -text: .text%jni_AllocObject: jni.o; -text: .text%__1cQinstanceRefKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_; -text: .text%__1cNCanonicalizerMset_constant6Mi_v_: c1_Canonicalizer.o; -text: .text%__1cJTypeCheckPother_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cNLIR_AssemblerMcheck_icache6M_i_; -text: .text%__1cRC1_MacroAssemblerTfast_ObjectHashCode6MpnMRegisterImpl_2_v_; -text: .text%__1cNLIR_AssemblerZjobject2reg_with_patching6MpnMRegisterImpl_pnMCodeEmitInfo__v_; -text: .text%__1cHLogicOpIis_equal6kMpnLInstruction__i_: c1_Instruction.o; -text: .text%__1cLAccessFieldKlock_stack6kM_pnKValueStack__: c1_GraphBuilder.o; -text: .text%__1cIRuntime1Mnew_instance6FpnKJavaThread_pnMklassOopDesc__v_; -text: .text%__1cQGenCollectedHeapXhandle_failed_promotion6MpnKGeneration_pnHoopDesc_Ip4_4_; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: instanceRefKlass.o; -text: .text%__1cbCOneContigSpaceCardGenerationTexpand_and_allocate6MIiii_pnIHeapWord__; -text: .text%__1cbCOneContigSpaceCardGenerationGexpand6MII_v_; -text: .text%__1cNGCMutexLocker2t6MpnFMutex__v_; -text: .text%__1cbCOneContigSpaceCardGenerationHgrow_by6MI_i_; -text: .text%__1cPContiguousSpaceNmangle_region6MnJMemRegion__v_; -text: .text%__1cJMarkSweepRFollowRootClosureLdo_nmethods6kM_ki_: markSweep.o; -text: .text%__1cQCompactibleSpaceUinitialize_threshold6M_pnIHeapWord__: space.o; -text: .text%__1cKOopClosureLdo_nmethods6kM_ki_: markSweep.o; -text: .text%__1cRAlwaysTrueClosureLdo_object_b6MpnHoopDesc__i_: genCollectedHeap.o; -text: .text%__1cLCardTableRSTinvalidate_or_clear6MpnKGeneration_ii_v_; -text: .text%__1cJMemRegionFminus6kMk0_0_; -text: .text%__1cLCardTableRSKinvalidate6MnJMemRegion__v_: cardTableRS.o; -text: .text%__1cRCardTableModRefBSKinvalidate6MnJMemRegion__v_; -text: .text%__1cIRuntime1Onew_type_array6FpnKJavaThread_pnMklassOopDesc_i_v_; -text: .text%__1cJFloatTypeDtag6kM_nIValueTag__: c1_Canonicalizer.o; -text: .text%__1cNFloatConstantQas_FloatConstant6M_p0_: c1_Canonicalizer.o; -text: .text%__1cILIR_ListNstore_mem_oop6MpnI_jobject_nFRInfo_inJBasicType_pnMCodeEmitInfo_nHLIR_Op1NLIR_PatchCode__v_; -text: .text%__1cJFloatTypeMas_FloatType6M_p0_: c1_Canonicalizer.o; -text: .text%__1cNConstantTableMappend_float6Mf_v_; -text: .text%__1cRAbstractAssemblerGa_long6Mi_v_; -text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; -text: .text%__1cDCHARprocess_interface6FnTinstanceKlassHandle_pnNGrowableArray4nLKlassHandle___pnNGrowableArray4nMmethodHandle___nMsymbolHandle_6_v_; -text: .text%__1cINewArrayPother_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cLLIR_EmitterQfield_store_byte6MpnLLIR_OprDesc_i2nFRInfo_ipnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerIshift_op6MnILIR_Code_nFRInfo_222_v_; -text: .text%__1cIRuntime1Mmonitorenter6FpnKJavaThread_pnHoopDesc_pnPBasicObjectLock__v_; -text: .text%__1cIRuntime1Lmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cHnmethodPis_dependent_on6MpnMklassOopDesc__i_; -text: .text%__1cHnmethodVis_dependent_on_entry6MpnMklassOopDesc_2pnNmethodOopDesc__i_; -text: .text%__1cNVM_DeoptimizeEname6kM_pkc_: vm_operations.o; -text: .text%__1cNVM_DeoptimizeEdoit6M_v_; -text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; -text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; -text: .text%__1cFframeVshould_be_deoptimized6kM_i_; -text: .text%__1cICodeBlobOis_java_method6kM_i_: codeBlob.o; -text: .text%__1cJCodeCachebGmake_marked_nmethods_not_entrant6F_v_; -text: .text%__1cJCodeCacheNalive_nmethod6FpnICodeBlob__pnHnmethod__; -text: .text%__1cHnmethodbAmake_not_entrant_or_zombie6Mi_v_; -text: .text%__1cHnmethodNis_osr_method6kM_i_: nmethod.o; -text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; -text: .text%__1cHnmethodVmark_as_seen_on_stack6M_v_; -text: .text%__1cTinc_decompile_count6FpnHnmethod__v_: nmethod.o; -text: .text%__1cMVM_OperationNdoit_epilogue6M_v_: vm_operations.o; -text: .text%__1cHThreadsLnmethods_do6F_v_; -text: .text%__1cKJavaThreadLnmethods_do6M_v_; -text: .text%__1cGThreadLnmethods_do6M_v_; -text: .text%__1cFframeLnmethods_do6M_v_; -text: .text%__1cFframeVnmethods_code_blob_do6M_v_; -text: .text%__1cILIR_ListEidiv6MnFRInfo_i11pnMCodeEmitInfo__v_; -text: .text%__1cLlog2_intptr6Fi_i_: c1_LIRAssembler_x86.o; -text: .text%__1cONMethodSweeperPprocess_nmethod6FpnHnmethod__v_; -text: .text%__1cHnmethodPis_locked_by_vm6kM_i_: nmethod.o; -text: .text%__1cHnmethodLis_unloaded6kM_i_: nmethod.o; -text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; -text: .text%__1cKCompiledIC2t6MpnKRelocation__v_; -text: .text%__1cILongTypeDtag6kM_nIValueTag__: c1_ValueType.o; -text: .text%__1cILongTypeEsize6kM_i_: c1_ValueType.o; -text: .text%JVM_HoldsLock; -text: .text%__1cSObjectSynchronizerZcurrent_thread_holds_lock6FpnKJavaThread_nGHandle__i_; -text: .text%__1cIciObjectRis_instance_klass6M_i_: ciObjArrayKlass.o; -text: .text%__1cLLoadIndexedIis_equal6kMpnLInstruction__i_: c1_Instruction.o; -text: .text%__1cFciEnvWis_dependence_violated6FpnMklassOopDesc_pnNmethodOopDesc__i_; -text: .text%__1cFciEnvZcall_has_multiple_targets6FpnNinstanceKlass_nMsymbolHandle_3ri_i_; -text: .text%__1cFMutexbLwait_for_lock_blocking_implementation6MpnKJavaThread__v_; -text: .text%__1cHnmethodbCcan_not_entrant_be_converted6M_i_; -text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_: oopMapCache.o; -text: .text%__1cTMaskFillerForNativeIpass_int6M_v_: oopMapCache.o; -text: .text%__1cGThreadOis_Java_thread6kM_i_: vmThread.o; -text: .text%__1cMLocalMappingDadd6MinFRInfo__v_; -text: .text%__1cILongTypeEbase6kM_pnJValueType__: c1_ValueType.o; -text: .text%__1cLLIR_EmitterQfield_store_long6MpnLLIR_OprDesc_i2ipnMCodeEmitInfo__v_; -text: .text%__1cKScanBlocksMis_long_only6kMi_i_; -text: .text%__1cRLIR_PeepholeStateLreg2indexLo6MpnLLIR_OprDesc__i_; -text: .text%__1cRLIR_PeepholeStateLreg2indexHi6MpnLLIR_OprDesc__i_; -text: .text%__1cNSharedRuntimeDf2l6Ff_x_; -text: .text%__1cIValueGenLdo_getClass6MpnJIntrinsic__v_; -text: .text%__1cLLIR_EmitterIgetClass6MnFRInfo_1pnMCodeEmitInfo__v_; -text: .text%__1cMGraphBuilderKcompare_op6MpnJValueType_nJBytecodesECode__v_; -text: .text%__1cJCompareOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerMdo_CompareOp6MpnJCompareOp__v_; -text: .text%__1cJCompareOpEhash6kM_i_: c1_Instruction.o; -text: .text%__1cJCompareOpEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cJCompareOpMas_CompareOp6M_p0_: c1_Instruction.o; -text: .text%__1cCIf2t6MpnLInstruction_n0BJCondition_i2pnKBlockBegin_5pnKValueStack_i_v_: c1_Canonicalizer.o; -text: .text%__1cGSetRegIdo_float6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIRegAllocLset_fpu_reg6MiipnLInstruction__v_; -text: .text%__1cJIsFreeRegIdo_float6Mi_v_: c1_RegAlloc.o; -text: .text%__1cILIR_ListJfloat2reg6MfnFRInfo__v_: c1_LIREmitter.o; -text: .text%__1cILIR_ListMbranch_float6MnMLIR_OpBranchNLIR_Condition_pnFLabel_4_v_; -text: .text%__1cIValueGenNreturnF0RInfo6F_nFRInfo__; -text: .text%__1cLLIR_EmitterOset_fpu_result6MnFRInfo__v_; -text: .text%__1cILIR_ListIpush_fpu6MnFRInfo__v_: c1_LIREmitter.o; -text: .text%__1cNConstantTableZaddress_of_float_constant6Mf_pC_; -text: .text%__1cNLIR_AssemblerOfpu_two_on_tos6MnFRInfo_1i_v_; -text: .text%__1cIFrameMapLFpuStackSimEswap6M_v_; -text: .text%__1cIFrameMapLFpuStackSimRexchange_with_tos6Mi_v_; -text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; -text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cFVTuneOdelete_nmethod6FpnHnmethod__v_; -text: .text%__1cQPlaceholderEntryHoops_do6MpnKOopClosure__v_; -text: .text%__1cHnmethodFflush6M_v_; -text: .text%__1cJEventMark2t6MpkcE_v_: nmethod.o; -text: .text%__1cICodeBlobFflush6M_v_; -text: .text%__1cJCodeCacheEfree6FpnICodeBlob__v_; -text: .text%__1cICodeHeapKdeallocate6Mpv_v_; -text: .text%__1cICodeHeapPadd_to_freelist6MpnJHeapBlock__v_; -text: .text%__1cICodeHeapPfollowing_block6MpnJFreeBlock__2_; -text: .text%__1cRComputeEntryStackIdo_float6M_v_: generateOopMap.o; -text: .text%__1cICodeHeapMinsert_after6MpnJFreeBlock_2_v_; -text: .text%__1cICodeHeapLmerge_right6MpnJFreeBlock__v_; -text: .text%__1cHnmethodbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cUCompressedReadStreamMraw_read_int6FrpC_i_: nmethod.o; -text: .text%__1cFframebAoops_compiled_arguments_do6MnMsymbolHandle_ipknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cQComputeCallStackJdo_double6M_v_: generateOopMap.o; -text: .text%__1cbCOneContigSpaceCardGenerationGshrink6MI_v_; -text: .text%__1cbCOneContigSpaceCardGenerationJshrink_by6MI_v_; -text: .text%__1cMVirtualSpaceJshrink_by6MI_v_; -text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_: oopMapCache.o; -text: .text%__1cRComputeEntryStackJdo_double6M_v_: generateOopMap.o; -text: .text%__1cKDoubleTypeDtag6kM_nIValueTag__: c1_ValueType.o; -text: .text%__1cKDoubleTypeDtag6kM_nIValueTag__: c1_Canonicalizer.o; -text: .text%__1cODoubleConstantRas_DoubleConstant6M_p0_: c1_Canonicalizer.o; -text: .text%__1cKDoubleTypeEbase6kM_pnJValueType__: c1_ValueType.o; -text: .text%__1cODoubleConstantLis_constant6kM_i_: c1_Canonicalizer.o; -text: .text%__1cKDoubleTypeEsize6kM_i_: c1_ValueType.o; -text: .text%__1cHLockRegJdo_double6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIRegAllocRset_locked_double6MipnLInstruction_i_v_; -text: .text%__1cKDoubleTypeNas_DoubleType6M_p0_: c1_ValueType.o; -text: .text%__1cIFrameMapUare_adjacent_indeces6kMii_i_; -text: .text%__1cQChangeSpillCountJdo_double6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIRegAllocZchange_double_spill_count6Mii_v_; -text: .text%__1cILIR_ListKdouble2reg6MdnFRInfo__v_: c1_LIREmitter.o; -text: .text%__1cHFreeRegJdo_double6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIRegAllocPset_free_double6Mi_v_; -text: .text%__1cILIR_ListDrem6MpnLLIR_OprDesc_22pnMCodeEmitInfo__v_: c1_LIREmitter.o; -text: .text%__1cLGetRefCountJdo_double6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIRegAllocNget_double_rc6kMi_i_; -text: .text%__1cLLIR_EmitterUcheck_double_address6Mi_v_; -text: .text%__1cILIR_ListQreg2double_stack6MnFRInfo_inJBasicType__v_: c1_LIREmitter.o; -text: .text%__1cRLIR_PeepholeStateNstack2indexHi6MpnLLIR_OprDesc__i_; -text: .text%__1cRLIR_PeepholeStateNstack2indexLo6MpnLLIR_OprDesc__i_; -text: .text%__1cKDoubleTypeNas_DoubleType6M_p0_: c1_Canonicalizer.o; -text: .text%__1cNConstantTableNappend_double6Md_v_; -text: .text%__1cNConstantTablebAaddress_of_double_constant6Md_pC_; -text: .text%__1cQGenCollectedHeapHcollect6MnHGCCauseFCause_i_v_; -text: .text%__1cQGenCollectedHeapOcollect_locked6MnHGCCauseFCause_i_v_; -text: .text%__1cRVM_GenCollectFullEname6kM_pkc_: vm_operations.o; -text: .text%__1cRVM_GenCollectFullEdoit6M_v_; -text: .text%__1cQGenCollectedHeapYmust_clear_all_soft_refs6M_i_; -text: .text%__1cQGenCollectedHeapSdo_full_collection6Miipi_v_; -text: .text%__1cKGenerationbHfull_collects_younger_generations6kM_i_: defNewGeneration.o; -text: .text%__1cKDoubleTypeEsize6kM_i_: c1_Canonicalizer.o; -text: .text%__1cKDoubleTypeEbase6kM_pnJValueType__: c1_Canonicalizer.o; -text: .text%__1cIValueMapNresize_bucket6MpnGBucket__v_; -text: .text%__1cNFloatConstantLis_constant6kM_i_: c1_Canonicalizer.o; -text: .text%__1cJNullCheckMas_NullCheck6M_p0_: c1_GraphBuilder.o; -text: .text%__1cLLIR_EmitterIopr2long6MpnLLIR_OprDesc__x_; -text: .text%__1cILIR_ListKlong2stack6Mxi_v_: c1_LIREmitter.o; -text: .text%__1cIValueGenNreturnD0RInfo6F_nFRInfo__; -text: .text%__1cJIsFreeRegJdo_double6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIRegAllocOis_free_double6kMi_i_; -text: .text%__1cGSetRegJdo_double6Mi_v_: c1_RegAlloc.o; -text: .text%__1cIRegAllocOset_double_reg6MiipnLInstruction__v_; -text: .text%__1cLLIR_EmitterNcopy_fpu_item6MnFRInfo_pnLLIR_OprDesc__v_; -text: .text%__1cILIR_ListHdup_fpu6MnFRInfo_1_v_: c1_LIREmitter.o; -text: .text%__1cILIR_ListDdiv6MpnLLIR_OprDesc_22pnMCodeEmitInfo__v_: c1_LIREmitter.o; -text: .text%__1cJAssemblerFfsubp6Mi_v_; -text: .text%__1cNLIR_AssemblerHdup_fpu6MnFRInfo_1_v_; -text: .text%__1cIFrameMapLFpuStackSimLmove_on_tos6Mi_i_; -text: .text%__1cJAssemblerGfdiv_d6MnHAddress__v_; -text: .text%__1cJAssemblerFfdivp6Mi_v_; -text: .text%__1cIValueGenMreturn2RInfo6F_nFRInfo__; -text: .text%__1cJValueTypeQas_FloatConstant6M_pnNFloatConstant__: c1_Canonicalizer.o; -text: .text%__1cIRuntime1Qnew_object_array6FpnKJavaThread_pnMklassOopDesc_i_v_; -text: .text%__1cIValueGenLdivOutRInfo6F_nFRInfo__; -text: .text%__1cILIR_ListEidiv6MnFRInfo_111pnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListVvolatile_load_mem_reg6MnFRInfo_i1nJBasicType_pnMCodeEmitInfo_nHLIR_Op1NLIR_PatchCode__v_; -text: .text%__1cEItemSget_jlong_constant6kM_x_; -text: .text%__1cNLIR_AssemblerQvolatile_move_op6MpnLLIR_OprDesc_2nJBasicType_nHLIR_Op1NLIR_PatchCode_pnMCodeEmitInfo__v_; -text: .text%__1cFKlassNoop_is_method6kM_i_: objArrayKlass.o; -text: .text%__1cFKlassRoop_is_methodData6kM_i_: objArrayKlass.o; -text: .text%__1cIciObjectTis_type_array_klass6M_i_: ciObjArrayKlass.o; -text: .text%__1cMciArrayKlassOis_array_klass6M_i_: ciObjArrayKlass.o; -text: .text%__1cONewObjectArrayKexact_type6kM_pnGciType__; -text: .text%__1cPciObjArrayKlassSis_obj_array_klass6M_i_: ciObjArrayKlass.o; -text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__; -text: .text%__1cIRuntime1Noop_arraycopy6FpnIHeapWord_2i_v_; -text: .text%__1cILongTypeEbase6kM_pnJValueType__: c1_Canonicalizer.o; -text: .text%__1cMLongConstantLis_constant6kM_i_: c1_Canonicalizer.o; -text: .text%__1cIValueGenUdo_ArithmeticOp_Long6MpnMArithmeticOp__v_; -text: .text%__1cLLIR_EmitterSarithmetic_op_long6MnJBytecodesECode_pnLLIR_OprDesc_44pnMCodeEmitInfo__v_; -text: .text%__1cFKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_: compiledICHolderKlass.o; -text: .text%__1cVcompiledICHolderKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cIciObjectRis_instance_klass6M_i_: ciTypeArrayKlass.o; -text: .text%__1cLArrayLengthIis_equal6kMpnLInstruction__i_: c1_GraphBuilder.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: compiledICHolderKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: compiledICHolderKlass.o; -text: .text%__1cTunsafe_intrinsic_id6FpnNsymbolOopDesc_1_nNmethodOopDescLIntrinsicId__; -text: .text%__1cMGraphBuilderVappend_unsafe_put_raw6MpnIciMethod_nJBasicType__i_; -text: .text%__1cMUnsafePutRawFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerPdo_UnsafePutRaw6MpnMUnsafePutRaw__v_; -text: .text%__1cNCanonicalizerOdo_UnsafeRawOp6MpnLUnsafeRawOp__v_; -text: .text%__1cFmatch6FpnLUnsafeRawOp_ppnLInstruction_4pi_i_: c1_Canonicalizer.o; -text: .text%__1cLInstructionPas_ArithmeticOp6M_pnMArithmeticOp__: c1_Instruction.o; -text: .text%__1cIUnsafeOpLas_UnsafeOp6M_p0_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderVappend_unsafe_get_raw6MpnIciMethod_nJBasicType__i_; -text: .text%__1cMUnsafeGetRawFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerPdo_UnsafeGetRaw6MpnMUnsafeGetRaw__v_; -text: .text%__1cMGraphBuilderNlookup_switch6M_v_; -text: .text%__1cIintArray2t6Mki1_v_: c1_GraphBuilder.o; -text: .text%__1cMLookupSwitchFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerPdo_LookupSwitch6MpnMLookupSwitch__v_; -text: .text%__1cMUnsafePutRawPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorPdo_UnsafePutRaw6MpnMUnsafePutRaw__v_; -text: .text%__1cTNullCheckEliminatorPhandle_UnsafeOp6MpnIUnsafeOp__v_; -text: .text%__1cLUnsafeRawOpPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorPdo_UnsafeGetRaw6MpnMUnsafeGetRaw__v_; -text: .text%__1cQNullCheckVisitorPdo_LookupSwitch6MpnMLookupSwitch__v_; -text: .text%__1cIValueGenPdo_UnsafePutRaw6MpnMUnsafePutRaw__v_; -text: .text%__1cLLIR_EmitterOput_raw_unsafe6MpnLLIR_OprDesc_2i2nJBasicType__v_; -text: .text%__1cLLIR_EmitterMlong2address6MpnLLIR_OprDesc__nFRInfo__; -text: .text%__1cILIR_ListNstore_mem_reg6MnFRInfo_pnLLIR_Address_nJBasicType_pnMCodeEmitInfo_nHLIR_Op1NLIR_PatchCode__v_; -text: .text%__1cIValueGenPdo_UnsafeGetRaw6MpnMUnsafeGetRaw__v_; -text: .text%__1cLLIR_EmitterOget_raw_unsafe6MnFRInfo_pnLLIR_OprDesc_3inJBasicType__v_; -text: .text%__1cILIR_ListMload_mem_reg6MpnLLIR_Address_nFRInfo_nJBasicType_pnMCodeEmitInfo_nHLIR_Op1NLIR_PatchCode__v_; -text: .text%__1cIValueGenPdo_LookupSwitch6MpnMLookupSwitch__v_; -text: .text%__1cUcreate_lookup_ranges6FpnMLookupSwitch__pnQLookupRangeArray__: c1_CodeGenerator_x86.o; -text: .text%__1cLLIR_EmitterVlookupswitch_range_op6MpnLLIR_OprDesc_iipnKBlockBegin__v_; -text: .text%__1cNSharedRuntimeEldiv6Fxx_x_; -text: .text%Unsafe_GetObjectVolatile; -text: .text%signalHandler; -text: .text%JVM_handle_solaris_signal; -text: .text%__1cKJavaThreadUin_stack_yellow_zone6MpC_i_: os_solaris_x86.o; -text: .text%__1cICodeBlobRis_at_poll_return6MpC_i_; -text: .text%__1cUSafepointSynchronizebDhandle_polling_page_exception6FpnKJavaThread__pC_; -text: .text%__1cbCCompiledCodeSafepointHandlerbDhandle_polling_page_exception6M_pC_; -text: .text%__1cFframebDsender_for_raw_compiled_frame6kMpnLRegisterMap__0_; -text: .text%__1cNSafepointBlobYcaller_must_gc_arguments6kMpnKJavaThread__i_; -text: .text%__1cUThreadSafepointStateYcaller_must_gc_arguments6kM_i_; -text: .text%__1cbCCompiledCodeSafepointHandlerYcaller_must_gc_arguments6kM_i_: safepoint.o; -text: .text%__1cFframeIpatch_pc6MpnGThread_pC_v_; -text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cSvframeStreamCommonbFfill_in_compiled_inlined_sender6M_i_; -text: .text%__1cJFloatTypeEsize6kM_i_: c1_Canonicalizer.o; -text: .text%__1cIValueGenNrelease_roots6MpnKValueStack__v_; -text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; -text: .text%__1cHciKlassNis_subtype_of6Mp0_i_; -text: .text%__1cNSharedRuntimeDd2l6Fd_x_; -text: .text%__1cOObjectConstantLis_constant6kM_i_: c1_ValueType.o; -text: .text%__1cILIR_ListLstore_array6MipnLLIR_Address_nJBasicType_pnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerLconst2array6MpnJLIR_Const_pnLLIR_Address_nJBasicType_pnMCodeEmitInfo__v_; -text: .text%__1cQInstanceConstantLis_constant6kM_i_: c1_ValueType.o; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_COMPILER1_i486 --- a/make/solaris/makefiles/reorder_COMPILER1_i486 Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2800 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; - - -# Test Null -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: arguments.o; -text: .text%__1cQAgentLibraryList2t6M_v_: arguments.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_Compilation.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_LIR.o; -text: .text%__1cLLIR_OprFactHillegal6F_pnLLIR_OprDesc__: c1_LIR.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_LIRAssembler_x86.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: codeCache.o; -text: .text%__1cICHeapObj2n6FI_pv_; -text: .text%__1cCosGmalloc6FI_pv_; -text: .text%__1cICodeHeap2t6M_v_; -text: .text%__1cMVirtualSpace2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; -text: .text%__1cNCellTypeStateLmake_bottom6F_0_: generateOopMap.o; -text: .text%__1cNCellTypeStateImake_any6Fi_0_: generateOopMap.o; -text: .text%__1cNCellTypeStateImake_top6F_0_: generateOopMap.o; -text: .text%__1cKEntryPoint2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: java.o; -text: .text%__1cLResourceObj2n6FIn0APallocation_type__pv_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEventController.o; -text: .text%__1cRJvmtiEventEnabled2t6M_v_; -text: .text%__1cRJvmtiEventEnabledFclear6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiImpl.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; -text: .text%__1cJTimeStamp2t6M_v_: management.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; -text: .text%__1cQRelocationHolder2t6M_v_: relocInfo.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; -text: .text%__1cTAbstract_VM_VersionKvm_release6F_pkc_; -text: .text%__1cTAbstract_VM_VersionXinternal_vm_info_string6F_pkc_; -text: .text%JNI_CreateJavaVM; -text: .text%__1cCosVatomic_xchg_bootstrap6Fipoi_i_; -text: .text%__1cHThreadsYis_supported_jni_version6Fi_C_; -text: .text%__1cMostream_init6F_v_; -text: .text%__1cMoutputStream2t6Mi_v_; -text: .text%__1cCosEinit6F_v_; -text: .text%__1cCosLinit_random6Fl_v_; -text: .text%__1cCosHSolarisWinitialize_system_info6F_v_; -text: .text%__1cOThreadCriticalKinitialize6F_v_; -text: .text%__1cCosMvm_page_size6F_i_; -text: .text%__1cJArgumentsWinit_system_properties6F_v_; -text: .text%__1cJArgumentsQPropertyList_add6FppnOSystemProperty_2_v_; -text: .text%__1cTAbstract_VM_VersionHvm_name6F_pkc_; -text: .text%__1cTAbstract_VM_VersionJvm_vendor6F_pkc_; -text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_; -text: .text%__1cCosbDinit_system_properties_values6F_v_; -text: .text%__1cCosIjvm_path6Fpci_v_; -text: .text%__1cJArgumentsFparse6FpknOJavaVMInitArgs__i_; -text: .text%__1cJArgumentsSparse_vm_init_args6FpknOJavaVMInitArgs__i_; -text: .text%__1cMSysClassPath2t6Mpkc_v_; -text: .text%__1cCosEfree6Fpv_v_; -text: .text%__1cMSysClassPathPexpand_endorsed6M_v_; -text: .text%__1cJArgumentsMget_property6Fpkc_2_; -text: .text%__1cJArgumentsWPropertyList_get_value6FpnOSystemProperty_pkc_4_; -text: .text%__1cMSysClassPathQadd_jars_to_path6Fpcpkc_1_; -text: .text%__1cMSysClassPath2T6M_v_; -text: .text%__1cMSysClassPathNreset_item_at6Mi_v_: arguments.o; -text: .text%__1cJArgumentsVset_parallel_gc_flags6F_v_; -text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsUset_ergonomics_flags6F_v_; -text: .text%__1cJTimeStampJupdate_to6Mx_v_; -text: .text%__1cCosOjavaTimeMillis6F_x_; -text: .text%__1cCosGinit_26F_i_; -text: .text%__1cCosHSolarisKmmap_chunk6FpcIii_2_; -text: .text%__1cCosXnon_memory_address_word6F_pc_; -text: .text%__1cCosHSolarisOlibthread_init6F_v_; -text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; -text: .text%__1cNpriocntl_stub6FinGidtype_lipc_l_: os_solaris.o; -text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; -text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; -text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; -text: .text%__1cCosHSolarisUsynchronization_init6F_v_; -text: .text%__1cDhpiKinitialize6F_i_; -text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_; -text: .text%__1cQostream_init_log6F_v_; -text: .text%__1cNdefaultStreamEinit6M_v_; -text: .text%__1cSThreadLocalStorageEinit6F_v_; -text: .text%__1cSThreadLocalStorageHpd_init6F_v_; -text: .text%__1cCosbDallocate_thread_local_storage6F_i_; -text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; -text: .text%__1cPvm_init_globals6F_v_; -text: .text%__1cScheck_ThreadShadow6F_v_; -text: .text%__1cNeventlog_init6F_v_; -text: .text%__1cKmutex_init6F_v_; -text: .text%lwp_cond_init: os_solaris.o; -text: .text%lwp_mutex_init: os_solaris.o; -text: .text%__1cOchunkpool_init6F_v_; -text: .text%__1cPperfMemory_init6F_v_; -text: .text%__1cKPerfMemoryKinitialize6F_v_; -text: .text%__1cCosZvm_allocation_granularity6F_i_; -text: .text%__1cKPerfMemoryUcreate_memory_region6FI_v_; -text: .text%__1cCosScurrent_process_id6F_i_; -text: .text%__1cCosSget_temp_directory6F_pkc_; -text: .text%__1cGThread2t6M_v_; -text: .text%__1cFArena2t6M_v_; -text: .text%__1cFChunk2n6FII_pv_; -text: .text%__1cOThreadCritical2t6M_v_; -text: .text%__1cOThreadCritical2T6M_v_; -text: .text%__1cFChunk2t6MI_v_; -text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_; -text: .text%__1cKJavaThreadKinitialize6M_v_; -text: .text%__1cQThreadStatistics2t6M_v_; -text: .text%__1cWThreadLocalAllocBufferKinitialize6M_v_; -text: .text%__1cWThreadLocalAllocBufferKinitialize6MpnIHeapWord_22_v_; -text: .text%__1cWThreadLocalAllocBufferVinitialize_statistics6M_v_; -text: .text%__1cUThreadSafepointStateGcreate6FpnKJavaThread__v_; -text: .text%__1cUThreadSafepointState2t6MpnKJavaThread__v_; -text: .text%__1cGThreadbArecord_stack_base_and_size6M_v_; -text: .text%__1cCosScurrent_stack_base6F_pC_; -text: .text%__1cCosScurrent_stack_size6F_I_; -text: .text%__1cGThreadbFinitialize_thread_local_storage6M_v_; -text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; -text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; -text: .text%__1cCosbBthread_local_storage_at_put6Fipv_v_; -text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_; -text: .text%get_thread; -text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FIi_pnGThread__; -text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; -text: .text%__1cCosXthread_local_storage_at6Fi_pv_; -text: .text%__1cCosVcurrent_stack_pointer6F_pC_; -text: .text%__1cCosRinitialize_thread6F_v_; -text: .text%__1cNReservedSpaceUpage_align_size_down6FI_I_; -text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; -text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; -text: .text%__1cIOSThread2t6MpFpv_i1_v_; -text: .text%__1cIOSThreadNpd_initialize6M_v_; -text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_; -text: .text%__1cCosHSolarisRunblocked_signals6F_pnIsigset_t__; -text: .text%__1cCosHSolarisKvm_signals6F_pnIsigset_t__; -text: .text%__1cKJavaThreadYcreate_stack_guard_pages6M_v_; -text: .text%__1cMinit_globals6F_i_; -text: .text%__1cPmanagement_init6F_v_; -text: .text%__1cKManagementEinit6F_v_; -text: .text%__1cNExceptionMark2t6MrpnGThread__v_; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongVariable__; -text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_; -text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_; -text: .text%__1cIPerfDataMcreate_entry6MnJBasicType_II_v_; -text: .text%__1cKPerfMemoryFalloc6FI_pc_; -text: .text%__1cKPerfMemoryMmark_updated6F_v_; -text: .text%__1cCosLelapsedTime6F_d_; -text: .text%__1cPoldgetTimeNanos6F_x_: os_solaris.o; -text: .text%__1cMPerfDataList2t6Mi_v_; -text: .text%__1cNExceptionMark2T6M_v_; -text: .text%__1cNThreadServiceEinit6F_v_; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnPPerfLongCounter__; -text: .text%__1cORuntimeServiceEinit6F_v_; -text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cObytecodes_init6F_v_; -text: .text%__1cJBytecodesKinitialize6F_v_; -text: .text%__1cJBytecodesNpd_initialize6F_v_; -text: .text%__1cQclassLoader_init6F_v_; -text: .text%__1cLClassLoaderKinitialize6F_v_; -text: .text%__1cLClassLoaderQload_zip_library6F_v_; -text: .text%__1cCosTnative_java_library6F_pv_; -text: .text%JVM_GetInterfaceVersion; -text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_; -text: .text%__1cKHandleMark2T6M_v_; -text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_; -text: .text%__1cCosGstrdup6Fpkc_pc_; -text: .text%__1cCosEstat6FpkcpnEstat__i_; -text: .text%JVM_RawMonitorCreate; -text: .text%JVM_NativePath; -text: .text%JVM_RawMonitorEnter; -text: .text%JVM_RawMonitorExit; -text: .text%JVM_Open; -text: .text%JVM_Lseek; -text: .text%JVM_Close; -text: .text%__1cOClassPathEntry2t6M_v_; -text: .text%__1cLClassLoaderLadd_to_list6FpnOClassPathEntry__v_; -text: .text%__1cOcodeCache_init6F_v_; -text: .text%__1cJCodeCacheKinitialize6F_v_; -text: .text%__1cNReservedSpace2t6MI_v_; -text: .text%__1cMVirtualSpaceQuncommitted_size6kM_I_; -text: .text%__1cMVirtualSpaceNreserved_size6kM_I_; -text: .text%__1cMVirtualSpaceOcommitted_size6kM_I_; -text: .text%__1cICodeHeapFclear6M_v_; -text: .text%__1cICodeHeapTmark_segmap_as_free6MII_v_; -text: .text%__1cNMemoryServiceZadd_code_heap_memory_pool6FpnICodeHeap__v_; -text: .text%__1cICodeHeapIcapacity6kM_I_; -text: .text%__1cICodeHeapMmax_capacity6kM_I_; -text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_; -text: .text%__1cNMemoryManager2t6M_v_; -text: .text%__1cNMemoryManagerIadd_pool6MpnKMemoryPool__v_; -text: .text%__1cKMemoryPoolLadd_manager6MpnNMemoryManager__v_; -text: .text%__1cLicache_init6F_v_; -text: .text%__1cPVM_Version_init6F_v_; -text: .text%__1cKVM_VersionKinitialize6F_v_; -text: .text%__1cKBufferBlobGcreate6Fpkci_p0_; -text: .text%__1cRalign_code_offset6Fi_I_; -text: .text%__1cICodeHeapLheader_size6F_I_; -text: .text%__1cKBufferBlob2n6FII_pv_; -text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__; -text: .text%__1cICodeHeapIallocate6MI_pv_; -text: .text%__1cICodeHeapPsearch_freelist6MI_pnJFreeBlock__; -text: .text%__1cICodeHeapTmark_segmap_as_used6MII_v_; -text: .text%__1cKBufferBlob2t6Mpkci_v_; -text: .text%__1cICodeBlobMset_oop_maps6MpnJOopMapSet__v_; -text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; -text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; -text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cMCodeHeapPoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cICodeHeapSallocated_capacity6kM_I_; -text: .text%__1cXresource_allocate_bytes6FI_pc_; -text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_; -text: .text%__1cYVM_Version_StubGeneratorTgenerate_getPsrInfo6M_pC_: vm_version_x86.o; -text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_; -text: .text%__1cRStubCodeGeneratorLstub_prolog6MpnMStubCodeDesc__v_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerExorl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerExorl6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerDjcc6Mn0AJCondition_rnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerDjmp6MrnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cRAbstractAssemblerEbind6MrnFLabel__v_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cKRelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cJAssemblerEmovl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cJAssemblerDret6Mi_v_; -text: .text%__1cMStubCodeMark2T6M_v_; -text: .text%__1cRAbstractAssemblerFflush6M_v_; -text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; -text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cKVM_VersionWget_processor_features6F_v_; -text: .text%jio_snprintf; -text: .text%jio_vsnprintf; -text: .text%__1cPlocal_vsnprintf6FpcIpkcpv_i_; -text: .text%__1cSstubRoutines_init16F_v_; -text: .text%__1cMStubRoutinesLinitialize16F_v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCi_v_; -text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cJAssemblerJemit_data6MinJrelocInfoJrelocType_i_v_; -text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__; -text: .text%__1cJAssemblerJemit_data6MirknQRelocationHolder_i_v_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_i_v_; -text: .text%__1cOMacroAssemblerKget_thread6MpnMRegisterImpl__v_; -text: .text%__1cSThreadLocalStorageTpd_getTlsAccessMode6F_n0AQpd_tlsAccessMode__; -text: .text%__1cJAssemblerEleal6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerEmovl6MnHAddress_i_v_; -text: .text%__1cOMacroAssemblerKverify_oop6MpnMRegisterImpl_pkc_v_; -text: .text%__1cOMacroAssemblerFenter6M_v_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEdecl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerGfstp_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfstp_d6MnHAddress__v_; -text: .text%__1cOMacroAssemblerOpush_FPU_state6M_v_; -text: .text%__1cJAssemblerGfnsave6MnHAddress__v_; -text: .text%__1cJAssemblerFfwait6M_v_; -text: .text%__1cJAssemblerFfld_d6MnHAddress__v_; -text: .text%__1cJAssemblerFfst_d6MnHAddress__v_; -text: .text%__1cOMacroAssemblerPempty_FPU_stack6M_v_; -text: .text%__1cJAssemblerFffree6Mi_v_; -text: .text%__1cJAssemblerLemit_farith6Miii_v_; -text: .text%__1cOMacroAssemblerNpop_FPU_state6M_v_; -text: .text%__1cJAssemblerGfrstor6MnHAddress__v_; -text: .text%__1cJTraceTime2T6M_v_; -text: .text%__1cNuniverse_init6F_i_; -text: .text%__1cLJavaClassesbAcompute_hard_coded_offsets6F_v_; -text: .text%__1cLFileMapInfoNfail_continue6MpkcE_v_; -text: .text%__1cLFileMapInfoFclose6M_v_; -text: .text%__1cIUniversePinitialize_heap6F_i_; -text: .text%__1cPMarkSweepPolicy2t6M_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyQinitialize_flags6M_v_; -text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__I_; -text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_I_; -text: .text%__1cbCTwoGenerationCollectorPolicyUinitialize_size_info6M_v_; -text: .text%__1cPMarkSweepPolicyWinitialize_generations6M_v_; -text: .text%__1cXPermanentGenerationSpec2t6MnHPermGenEName_IIIIII_v_; -text: .text%__1cQGCPolicyCounters2t6Mpkcii_v_; -text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; -text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; -text: .text%__1cSPerfStringConstant2t6MnJCounterNS_pkc3_v_; -text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; -text: .text%__1cKPerfStringKset_string6Mpkc_v_; -text: .text%__1cPPerfDataManagerUcreate_long_constant6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongConstant__; -text: .text%__1cKSharedHeap2t6MpnPCollectorPolicy__v_; -text: .text%__1cNCollectedHeap2t6M_v_; -text: .text%__1cHGCCauseJto_string6Fn0AFCause__pkc_; -text: .text%__1cPPerfDataManagerWcreate_string_variable6FnJCounterNS_pkci3pnGThread__pnSPerfStringVariable__; -text: .text%__1cMSubTasksDone2t6Mi_v_; -text: .text%__1cMSubTasksDoneFclear6M_v_; -text: .text%__1cQGenCollectedHeapKinitialize6M_i_; -text: .text%__1cXPermanentGenerationSpecFalign6MI_v_; -text: .text%__1cQGenCollectedHeapIallocate6MIpnXPermanentGenerationSpec_pIpipnNReservedSpace__pc_; -text: .text%__1cPCollectorPolicyOcreate_rem_set6MnJMemRegion_i_pnJGenRemSet__; -text: .text%__1cLCardTableRS2t6MnJMemRegion_i_v_; -text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; -text: .text%__1cNReservedSpaceYallocation_align_size_up6FI_I_; -text: .text%__1cJMemRegion2t6M_v_: cardTableModRefBS.o; -text: .text%__1cKSharedHeapPset_barrier_set6MpnKBarrierSet__v_; -text: .text%__1cOGenerationSpecEinit6MnNReservedSpace_ipnJGenRemSet__pnKGeneration__; -text: .text%__1cQDefNewGeneration2t6MnNReservedSpace_Iipkc_v_; -text: .text%__1cKGeneration2t6MnNReservedSpace_Ii_v_; -text: .text%__1cIageTableFclear6M_v_; -text: .text%__1cFArenaEgrow6MI_pv_; -text: .text%__1cFChunkJnext_chop6M_v_; -text: .text%__1cFChunkEchop6M_v_; -text: .text%__1cFChunk2k6Fpv_v_; -text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cRCardTableModRefBSbCfind_covering_region_by_base6MpnIHeapWord__i_; -text: .text%__1cRCardTableModRefBSbAlargest_prev_committed_end6kMi_pnIHeapWord__; -text: .text%__1cWSequentialSubTasksDoneFclear6M_v_; -text: .text%__1cSGenerationCounters2t6MpkciipnMVirtualSpace__v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkci_pc_; -text: .text%__1cRCollectorCounters2t6Mpkci_v_; -text: .text%__1cOCSpaceCounters2t6MpkciIpnPContiguousSpace_pnSGenerationCounters__v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__; -text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_pnUPerfLongSampleHelper__v_; -text: .text%__1cPPerfLongVariantGsample6M_v_; -text: .text%__1cZContiguousSpaceUsedHelperLtake_sample6M_x_: cSpaceCounters.o; -text: .text%__1cJEdenSpaceHset_end6MpnIHeapWord__v_: space.o; -text: .text%__1cFSpaceHset_end6MpnIHeapWord__v_: space.o; -text: .text%__1cQDefNewGenerationPupdate_counters6M_v_; -text: .text%__1cSGenerationCountersKupdate_all6M_v_: generationCounters.o; -text: .text%__1cRTenuredGeneration2t6MnNReservedSpace_IipnJGenRemSet__v_; -text: .text%__1cOCardGeneration2t6MnNReservedSpace_IipnJGenRemSet__v_; -text: .text%__1cWBlockOffsetSharedArray2t6MnJMemRegion_I_v_; -text: .text%__1cWBlockOffsetSharedArrayGresize6MI_v_; -text: .text%__1cNReservedSpaceSpage_align_size_up6FI_I_; -text: .text%__1cLCardTableRSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cHGCStats2t6M_v_; -text: .text%__1cWOffsetTableContigSpace2t6MpnWBlockOffsetSharedArray_nJMemRegion__v_; -text: .text%__1cWOffsetTableContigSpaceKset_bottom6MpnIHeapWord__v_; -text: .text%__1cQBlockOffsetArrayGresize6MI_v_: blockOffsetTable.o; -text: .text%__1cWOffsetTableContigSpaceHset_end6MpnIHeapWord__v_; -text: .text%__1cbBBlockOffsetArrayContigSpaceUinitialize_threshold6M_pnIHeapWord__; -text: .text%__1cXPermanentGenerationSpecEinit6MnNReservedSpace_IpnJGenRemSet__pnHPermGen__; -text: .text%__1cRCompactingPermGen2t6MnNReservedSpace_1IpnJGenRemSet_pnXPermanentGenerationSpec__v_; -text: .text%__1cUCompactingPermGenGen2t6MnNReservedSpace_1IipnJGenRemSet_pnPContiguousSpace_pnXPermanentGenerationSpec__v_; -text: .text%__1cUCompactingPermGenGenbFinitialize_performance_counters6M_v_; -text: .text%__1cbCOneContigSpaceCardGenerationIcapacity6kM_I_; -text: .text%__1cWThreadLocalAllocBufferWstartup_initialization6F_v_; -text: .text%__1cPGlobalTLABStats2t6M_v_; -text: .text%__1cPGlobalTLABStatsKinitialize6M_v_; -text: .text%__1cXAdaptiveWeightedAverageGsample6Mf_v_; -text: .text%__1cXAdaptiveWeightedAverageYcompute_adaptive_average6Mff_f_; -text: .text%__1cQDefNewGenerationNtlab_capacity6kM_I_: defNewGeneration.o; -text: .text%__1cLClassLoaderZcreate_package_info_table6F_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: classLoader.o; -text: .text%__1cQinterpreter_init6F_v_; -text: .text%__1cTAbstractInterpreterKinitialize6F_v_; -text: .text%__1cNTemplateTableKinitialize6F_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF_vc_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; -text: .text%__1cITemplateKinitialize6MinITosState_1pFi_vi_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJOperation__v4_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJCondition__v4_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF3_v3_v_; -text: .text%__1cNTemplateTableNpd_initialize6F_v_; -text: .text%__1cRInvocationCounterDdef6Fn0AFState_ipFnMmethodHandle_pnGThread__pC_v_; -text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; -text: .text%__1cJStubQdDueueOregister_queue6Fp0_v_; -text: .text%__1cUInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; -text: .text%__1cJStubQdDueueHrequest6Mi_pnEStub__; -text: .text%__1cOMacroAssemblerEstop6Mpkc_v_; -text: .text%__1cJAssemblerEcall6MrnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cJAssemblerDhlt6M_v_; -text: .text%__1cOMacroAssemblerFalign6Mi_v_; -text: .text%__1cJStubQdDueueGcommit6Mi_v_; -text: .text%__1cJAssemblerEshll6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_i_v_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; -text: .text%__1cOMacroAssemblerSload_unsigned_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cZInterpreterMacroAssemblerKverify_FPU6MinITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerKverify_oop6MpnMRegisterImpl_nITosState__v_; -text: .text%__1cJAssemblerDjmp6MnHAddress__v_; -text: .text%__1cOMacroAssemblerKverify_FPU6Mipkc_v_; -text: .text%__1cKEntryPoint2t6MpC11111111_v_; -text: .text%__1cJAssemblerEincl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEcmpl6MnHAddress_i_v_; -text: .text%__1cZInterpreterMacroAssemblerZcheck_and_handle_popframe6MpnMRegisterImpl__v_; -text: .text%__1cTAbstractInterpreterSBasicType_as_index6FnJBasicType__i_; -text: .text%__1cOMacroAssemblerGc2bool6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEsetb6Mn0AJCondition_pnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerQsign_extend_byte6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerRsign_extend_short6MpnMRegisterImpl__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEtemp6F_pnMRegisterImpl__; -text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_; -text: .text%__1cbCAbstractInterpreterGeneratorbFgenerate_slow_signature_handler6M_pC_; -text: .text%__1cKEntryPointFentry6kMnITosState__pC_; -text: .text%__1cZInterpreterMacroAssemblerEpush6MnITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_i_v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl_33_v_; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_i_v_; -text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerElock6M_v_; -text: .text%__1cOMacroAssemblerFleave6M_v_; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cUInterpreterGeneratorbDgenerate_stack_overflow_check6M_v_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cZInterpreterMacroAssemblerTnotify_method_entry6M_v_; -text: .text%__1cJAssemblerEnegl6MpnMRegisterImpl__v_; -text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; -text: .text%__1cZInterpreterMacroAssemblerLlock_object6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cUInterpreterGeneratorUgenerate_empty_entry6M_pC_; -text: .text%__1cUInterpreterGeneratorXgenerate_accessor_entry6M_pC_; -text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl_i_v_; -text: .text%__1cOMacroAssemblerQload_signed_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cUInterpreterGeneratorXgenerate_abstract_entry6M_pC_; -text: .text%__1cUInterpreterGeneratorTgenerate_math_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cJAssemblerFfld_s6Mi_v_; -text: .text%__1cJAssemblerEfabs6M_v_; -text: .text%__1cOMacroAssemblerEfcmp6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerHfucomip6Mi_v_; -text: .text%__1cOMacroAssemblerEfpop6M_v_; -text: .text%__1cJAssemblerHfincstp6M_v_; -text: .text%__1cJAssemblerEfsin6M_v_; -text: .text%__1cJAssemblerEfcos6M_v_; -text: .text%__1cJAssemblerFfsqrt6M_v_; -text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_; -text: .text%__1cJAssemblerEaddl6MnHAddress_i_v_; -text: .text%__1cJAssemblerSemit_arith_operand6MipnMRegisterImpl_nHAddress_i_v_; -text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_prolog6MnITosState_i_v_; -text: .text%__1cITemplateIgenerate6MpnZInterpreterMacroAssembler__v_; -text: .text%__1cNTemplateTableDnop6F_v_; -text: .text%__1cNTemplateTableKtransition6FnITosState_1_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_epilog6MnITosState_i_v_; -text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; -text: .text%__1cNTemplateTableLaconst_null6F_v_; -text: .text%__1cNTemplateTableGiconst6Fi_v_; -text: .text%__1cNTemplateTableGlconst6Fi_v_; -text: .text%__1cNTemplateTableGfconst6Fi_v_; -text: .text%__1cJAssemblerEfldz6M_v_; -text: .text%__1cJAssemblerEfld16M_v_; -text: .text%__1cJAssemblerFfaddp6Mi_v_; -text: .text%__1cNTemplateTableGdconst6Fi_v_; -text: .text%__1cNTemplateTableGbipush6F_v_; -text: .text%__1cNTemplateTableGsipush6F_v_; -text: .text%__1cJAssemblerEsarl6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerEmovb6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_; -text: .text%__1cJAssemblerFfld_s6MnHAddress__v_; -text: .text%__1cZInterpreterMacroAssemblerbGget_unsigned_2_byte_index_at_bcp6MpnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableGldc2_w6F_v_; -text: .text%__1cJAssemblerEcmpb6MnHAddress_i_v_; -text: .text%__1cNTemplateTableFiload6F_v_; -text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableKwide_iload6F_v_; -text: .text%__1cNTemplateTableRlocals_index_wide6FpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableFlload6F_v_; -text: .text%__1cNTemplateTableKwide_lload6F_v_; -text: .text%__1cNTemplateTableFfload6F_v_; -text: .text%__1cNTemplateTableKwide_fload6F_v_; -text: .text%__1cNTemplateTableFdload6F_v_; -text: .text%__1cNTemplateTableKwide_dload6F_v_; -text: .text%__1cNTemplateTableFaload6F_v_; -text: .text%__1cNTemplateTableKwide_aload6F_v_; -text: .text%__1cNTemplateTableFiload6Fi_v_; -text: .text%__1cNTemplateTableFlload6Fi_v_; -text: .text%__1cNTemplateTableFfload6Fi_v_; -text: .text%__1cNTemplateTableFdload6Fi_v_; -text: .text%__1cNTemplateTableHaload_06F_v_; -text: .text%__1cNTemplateTableFaload6Fi_v_; -text: .text%__1cNTemplateTableGiaload6F_v_; -text: .text%__1cNTemplateTableLindex_check6FpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableGlaload6F_v_; -text: .text%__1cNTemplateTableGfaload6F_v_; -text: .text%__1cNTemplateTableGdaload6F_v_; -text: .text%__1cNTemplateTableGaaload6F_v_; -text: .text%__1cNTemplateTableGbaload6F_v_; -text: .text%__1cNTemplateTableGcaload6F_v_; -text: .text%__1cNTemplateTableGsaload6F_v_; -text: .text%__1cNTemplateTableGistore6F_v_; -text: .text%__1cNTemplateTableLwide_istore6F_v_; -text: .text%__1cNTemplateTableGlstore6F_v_; -text: .text%__1cNTemplateTableLwide_lstore6F_v_; -text: .text%__1cNTemplateTableGfstore6F_v_; -text: .text%__1cNTemplateTableLwide_fstore6F_v_; -text: .text%__1cNTemplateTableGdstore6F_v_; -text: .text%__1cNTemplateTableLwide_dstore6F_v_; -text: .text%__1cNTemplateTableGastore6F_v_; -text: .text%__1cNTemplateTableLwide_astore6F_v_; -text: .text%__1cNTemplateTableGistore6Fi_v_; -text: .text%__1cNTemplateTableGlstore6Fi_v_; -text: .text%__1cNTemplateTableGfstore6Fi_v_; -text: .text%__1cNTemplateTableGdstore6Fi_v_; -text: .text%__1cNTemplateTableGastore6Fi_v_; -text: .text%__1cNTemplateTableHiastore6F_v_; -text: .text%__1cNTemplateTableHlastore6F_v_; -text: .text%__1cNTemplateTableHfastore6F_v_; -text: .text%__1cNTemplateTableHdastore6F_v_; -text: .text%__1cNTemplateTableHaastore6F_v_; -text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cJAssemblerKrepne_scan6M_v_; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerSstore_check_part_16MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerSstore_check_part_26MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEmovb6MnHAddress_i_v_; -text: .text%__1cNTemplateTableHbastore6F_v_; -text: .text%__1cJAssemblerEmovb6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cNTemplateTableHcastore6F_v_; -text: .text%__1cJAssemblerEmovw6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cNTemplateTableHsastore6F_v_; -text: .text%__1cNTemplateTableDpop6F_v_; -text: .text%__1cNTemplateTableEpop26F_v_; -text: .text%__1cNTemplateTableDdup6F_v_; -text: .text%__1cJAssemblerFpushl6MnHAddress__v_; -text: .text%__1cNTemplateTableGdup_x16F_v_; -text: .text%__1cNTemplateTableGdup_x26F_v_; -text: .text%__1cNTemplateTableEdup26F_v_; -text: .text%__1cNTemplateTableHdup2_x16F_v_; -text: .text%__1cNTemplateTableHdup2_x26F_v_; -text: .text%__1cNTemplateTableEswap6F_v_; -text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; -text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_; -text: .text%__1cJAssemblerEadcl6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_; -text: .text%__1cJAssemblerGfadd_s6MnHAddress__v_; -text: .text%__1cZInterpreterMacroAssemblerGf2ieee6M_v_; -text: .text%__1cNTemplateTableEdop26Fn0AJOperation__v_; -text: .text%__1cJAssemblerGfadd_d6MnHAddress__v_; -text: .text%__1cZInterpreterMacroAssemblerGd2ieee6M_v_; -text: .text%__1cJAssemblerEsbbl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerHfsubr_s6MnHAddress__v_; -text: .text%__1cJAssemblerHfsubr_d6MnHAddress__v_; -text: .text%__1cJAssemblerFimull6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableElmul6F_v_; -text: .text%__1cOMacroAssemblerElmul6Mii_v_; -text: .text%__1cJAssemblerEmull6MnHAddress__v_; -text: .text%__1cJAssemblerEmull6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerGfmul_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfmul_d6MnHAddress__v_; -text: .text%__1cJAssemblerFfld_x6MnHAddress__v_; -text: .text%__1cJAssemblerFfmulp6Mi_v_; -text: .text%__1cNTemplateTableEidiv6F_v_; -text: .text%__1cOMacroAssemblerPcorrected_idivl6MpnMRegisterImpl__i_; -text: .text%__1cJAssemblerEcdql6M_v_; -text: .text%__1cJAssemblerFidivl6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableEldiv6F_v_; -text: .text%__1cZInterpreterMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cJAssemblerHfdivr_s6MnHAddress__v_; -text: .text%__1cJAssemblerHfdivr_d6MnHAddress__v_; -text: .text%__1cJAssemblerGfdivrp6Mi_v_; -text: .text%__1cNTemplateTableEirem6F_v_; -text: .text%__1cNTemplateTableElrem6F_v_; -text: .text%__1cOMacroAssemblerFfremr6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerFfprem6M_v_; -text: .text%__1cJAssemblerJfnstsw_ax6M_v_; -text: .text%__1cJAssemblerEsahf6M_v_; -text: .text%__1cJAssemblerEfxch6Mi_v_; -text: .text%__1cNTemplateTableEineg6F_v_; -text: .text%__1cNTemplateTableElneg6F_v_; -text: .text%__1cOMacroAssemblerElneg6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEadcl6MpnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableEfneg6F_v_; -text: .text%__1cJAssemblerEfchs6M_v_; -text: .text%__1cNTemplateTableEdneg6F_v_; -text: .text%__1cJAssemblerEshll6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableElshl6F_v_; -text: .text%__1cOMacroAssemblerElshl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerFshldl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEsarl6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableElshr6F_v_; -text: .text%__1cJAssemblerFshrdl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableFlushr6F_v_; -text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableEiinc6F_v_; -text: .text%__1cJAssemblerEaddl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cNTemplateTableJwide_iinc6F_v_; -text: .text%__1cNTemplateTableHconvert6F_v_; -text: .text%__1cOMacroAssemblerLextend_sign6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerGfild_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfild_d6MnHAddress__v_; -text: .text%__1cNTemplateTableElcmp6F_v_; -text: .text%__1cOMacroAssemblerIlcmp2int6MpnMRegisterImpl_222_v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fi_v_; -text: .text%__1cNTemplateTableKdouble_cmp6Fi_v_; -text: .text%__1cNTemplateTableHif_0cmp6Fn0AJCondition__v_; -text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_only6MnITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerYprofile_not_taken_branch6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableHif_icmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableHif_acmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableF_goto6F_v_; -text: .text%__1cNTemplateTableDjsr6F_v_; -text: .text%__1cZInterpreterMacroAssemblerWdispatch_only_noverify6MnITosState__v_; -text: .text%__1cNTemplateTableDret6F_v_; -text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableIwide_ret6F_v_; -text: .text%__1cNTemplateTableLtableswitch6F_v_; -text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_22_v_; -text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableMlookupswitch6F_v_; -text: .text%__1cNTemplateTableH_return6FnITosState__v_; -text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cJAssemblerHfistp_d6MnHAddress__v_; -text: .text%__1cNTemplateTableJputstatic6Fi_v_; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cNTemplateTableIgetfield6Fi_v_; -text: .text%__1cNTemplateTableIputfield6Fi_v_; -text: .text%__1cNTemplateTableNinvokevirtual6Fi_v_; -text: .text%__1cNTemplateTableUinvokevirtual_helper6FpnMRegisterImpl_22_v_; -text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableNinvokespecial6Fi_v_; -text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableMinvokestatic6Fi_v_; -text: .text%__1cNTemplateTablePinvokeinterface6Fi_v_; -text: .text%__1cOMacroAssemblerIround_to6MpnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableE_new6F_v_; -text: .text%__1cQGenCollectedHeapItop_addr6kM_ppnIHeapWord__; -text: .text%__1cQDefNewGenerationItop_addr6kM_ppnIHeapWord__; -text: .text%__1cQGenCollectedHeapIend_addr6kM_ppnIHeapWord__; -text: .text%__1cQDefNewGenerationIend_addr6kM_ppnIHeapWord__; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC22_v_; -text: .text%__1cNTemplateTableInewarray6F_v_; -text: .text%__1cNTemplateTableJanewarray6F_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC222_v_; -text: .text%__1cNTemplateTableLarraylength6F_v_; -text: .text%__1cNTemplateTableGathrow6F_v_; -text: .text%__1cNTemplateTableJcheckcast6F_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC_v_; -text: .text%__1cNTemplateTableKinstanceof6F_v_; -text: .text%__1cNTemplateTableMmonitorenter6F_v_; -text: .text%__1cJAssemblerFcmovl6Mn0AJCondition_pnMRegisterImpl_3_v_; -text: .text%__1cNTemplateTableLmonitorexit6F_v_; -text: .text%__1cNTemplateTableEwide6F_v_; -text: .text%__1cNTemplateTableOmultianewarray6F_v_; -text: .text%__1cNTemplateTableKif_nullcmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableGgoto_w6F_v_; -text: .text%__1cNTemplateTableFjsr_w6F_v_; -text: .text%__1cNTemplateTableL_breakpoint6F_v_; -text: .text%__1cZInterpreterMacroAssemblerUdispatch_only_normal6MnITosState__v_; -text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; -text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_; -text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_; -text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_; -text: .text%__1cNTemplateTableKfast_iload6F_v_; -text: .text%__1cNTemplateTableLfast_iload26F_v_; -text: .text%__1cNTemplateTableMfast_icaload6F_v_; -text: .text%__1cNTemplateTableRfast_invokevfinal6Fi_v_; -text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; -text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; -text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_; -text: .text%__1cWinvocationCounter_init6F_v_; -text: .text%__1cOmarksweep_init6F_v_; -text: .text%__1cQaccessFlags_init6F_v_; -text: .text%__1cStemplateTable_init6F_v_; -text: .text%__1cVInterfaceSupport_init6F_v_; -text: .text%__1cOuniverse2_init6F_v_; -text: .text%__1cIUniverseHgenesis6FpnGThread__v_; -text: .text%__1cIUniverseYcompute_base_vtable_size6F_v_; -text: .text%__1cLClassLoaderVcompute_Object_vtable6F_i_; -text: .text%__1cKklassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__; -text: .text%__1cKklassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: klassKlass.o; -text: .text%__1cKKlass_vtbl2n6FIrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cRCompactingPermGenMmem_allocate6MI_pnIHeapWord__; -text: .text%__1cWOffsetTableContigSpaceIallocate6MI_pnIHeapWord__: space.o; -text: .text%__1cPContiguousSpaceIallocate6MI_pnIHeapWord__; -text: .text%__1cbBBlockOffsetArrayContigSpaceLalloc_block6MpnIHeapWord_2_v_: blockOffsetTable.o; -text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; -text: .text%__1cFKlassQset_next_sibling6MpnMklassOopDesc__v_; -text: .text%__1cParrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassRbase_create_klass6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__1_; -text: .text%__1cParrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: arrayKlassKlass.o; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: arrayKlassKlass.o; -text: .text%__1cPjava_lang_ClassNcreate_mirror6FnLKlassHandle_pnGThread__pnHoopDesc__; -text: .text%__1cFKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cSobjArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlassKlass.o; -text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cSinstanceKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlassKlass.o; -text: .text%__1cTtypeArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlassKlass.o; -text: .text%__1cbBBlockOffsetArrayContigSpaceQalloc_block_work6MpnIHeapWord_2_v_; -text: .text%__1cLsymbolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cLsymbolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: symbolKlass.o; -text: .text%__1cLsymbolKlassOset_alloc_size6MI_v_: symbolKlass.o; -text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cJHashtableLhash_symbol6Fpkci_I_: symbolTable.o; -text: .text%__1cLSymbolTableGlookup6MipkciI_pnNsymbolOopDesc__; -text: .text%__1cLSymbolTableJbasic_add6MipCiIpnGThread__pnNsymbolOopDesc__; -text: .text%__1cLsymbolKlassPallocate_symbol6MpCipnGThread__pnNsymbolOopDesc__; -text: .text%__1cJHashtableJnew_entry6MIpnHoopDesc__pnOHashtableEntry__; -text: .text%__1cOBasicHashtableJnew_entry6MI_pnTBasicHashtableEntry__; -text: .text%__1cOtypeArrayKlassNexternal_name6FnJBasicType__pkc_; -text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__; -text: .text%__1cOtypeArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlass.o; -text: .text%__1cLAccessFlagsPatomic_set_bits6Mi_v_; -text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_; -text: .text%__1cKarrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cKarrayKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cKarrayKlassKjava_super6kM_pnMklassOopDesc__; -text: .text%__1cKarrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cLmethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodKlass.o; -text: .text%__1cLmethodKlassOset_alloc_size6MI_v_: methodKlass.o; -text: .text%__1cQconstMethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cQconstMethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassOset_alloc_size6MI_v_: constMethodKlass.o; -text: .text%__1cPmethodDataKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cPmethodDataKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodDataKlass.o; -text: .text%__1cPmethodDataKlassOset_alloc_size6MI_v_: methodDataKlass.o; -text: .text%__1cRconstantPoolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cRconstantPoolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constantPoolKlass.o; -text: .text%__1cWconstantPoolCacheKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cWconstantPoolCacheKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: cpCacheKlass.o; -text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cVcompiledICHolderKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: compiledICHolderKlass.o; -text: .text%__1cVcompiledICHolderKlassOset_alloc_size6MI_v_: compiledICHolderKlass.o; -text: .text%__1cSobjArrayKlassKlassbEallocate_system_objArray_klass6MpnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassXallocate_objArray_klass6MinLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cNsymbolOopDescLas_C_string6kM_pc_; -text: .text%__1cNsymbolOopDescLas_C_string6kMpci_1_; -text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlass.o; -text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNobjArrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cOtypeArrayKlassSallocate_permanent6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cKoopFactoryWnew_permanent_intArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: oopFactory.o; -text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_; -text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_; -text: .text%__1cKDictionary2t6Mi_v_; -text: .text%__1cQPlaceholderTable2t6Mi_v_; -text: .text%__1cVLoaderConstraintTable2t6Mi_v_; -text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cQSystemDictionarybEresolve_instance_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_; -text: .text%__1cHoopDescSslow_identity_hash6M_i_; -text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__i_; -text: .text%__1cCosGrandom6F_l_; -text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cKDictionaryJget_entry6MiInMsymbolHandle_nGHandle__pnPDictionaryEntry__; -text: .text%__1cQSystemDictionarybAcompute_loader_lock_object6FnGHandle_pnGThread__1_; -text: .text%__1cQSystemDictionaryKfind_class6FiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cQSystemDictionaryTload_instance_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cQSystemDictionaryRload_shared_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cQSystemDictionaryRfind_shared_class6FnMsymbolHandle__pnMklassOopDesc__; -text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; -text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; -text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; -text: .text%__1cMstringStream2t6MI_v_; -text: .text%__1cMstringStreamFwrite6MpkcI_v_; -text: .text%__1cMoutputStreamPupdate_position6MpkcI_v_; -text: .text%__1cMstringStreamJas_string6M_pc_; -text: .text%__1cMelapsedTimerFstart6M_v_; -text: .text%__1cCosPelapsed_counter6F_x_; -text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__; -text: .text%__1cPClassFileStream2t6MpCipc_v_; -text: .text%__1cMelapsedTimerEstop6M_v_; -text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_; -text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_; -text: .text%__1cQSystemDictionarySjava_system_loader6F_pnHoopDesc__; -text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__; -text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileStreamGget_u16MpnGThread__C_; -text: .text%__1cPClassFileParserRverify_legal_utf86MpkCipnGThread__v_; -text: .text%__1cPClassFileStreamHskip_u16MipnGThread__v_; -text: .text%__1cTconstantPoolOopDescRname_ref_index_at6Mi_i_; -text: .text%__1cTconstantPoolOopDescWsignature_ref_index_at6Mi_i_; -text: .text%__1cPClassFileParserbCverify_legal_class_modifiers6MipnGThread__v_; -text: .text%__1cUinitialize_hashtable6FppnLNameSigHash__v_; -text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cVCompressedWriteStream2t6Mi_v_; -text: .text%__1cSconstMethodOopDescLobject_size6Fiiii_i_; -text: .text%__1cSconstMethodOopDescZset_inlined_tables_length6Miii_v_; -text: .text%__1cLmethodKlassIallocate6MnRconstMethodHandle_nLAccessFlags_pnGThread__pnNmethodOopDesc__; -text: .text%__1cRInvocationCounterEinit6M_v_; -text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cRInvocationCounterJset_state6Mn0AFState__v_; -text: .text%__1cLmethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cNmethodOopDescbAcompute_size_of_parameters6MpnGThread__v_; -text: .text%__1cRSignatureIterator2t6MnMsymbolHandle__v_; -text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; -text: .text%__1cRSignatureIteratorGexpect6Mc_v_; -text: .text%__1cSconstMethodOopDescbBcompressed_linenumber_table6kM_pC_; -text: .text%__1cPClassFileParserUassemble_annotations6MpCi1ipnGThread__nPtypeArrayHandle__; -text: .text%__1cNmethodOopDescVclear_native_function6M_v_; -text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; -text: .text%__1cVCompressedWriteStreamEgrow6M_v_; -text: .text%__1cRSignatureIteratorKparse_type6M_i_; -text: .text%__1cUArgumentSizeComputerDset6MinJBasicType__v_: frame.o; -text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; -text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; -text: .text%__1cSconstMethodOopDescbEchecked_exceptions_length_addr6kM_pH_; -text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; -text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; -text: .text%method_compare: methodOop.o; -text: .text%__1cLklassVtableQget_num_mirandas6FpnMklassOopDesc_pnPobjArrayOopDesc_4_i_; -text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_; -text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; -text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; -text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o; -text: .text%__1cNinstanceKlassQinit_implementor6M_v_; -text: .text%__1cNinstanceKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cTconstantPoolOopDescNklass_name_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cPClassFileParserbAparse_classfile_attributes6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; -text: .text%__1cNinstanceKlassbBdo_local_static_fields_impl6FnTinstanceKlassHandle_pFpnPfieldDescriptor_pnGThread__v5_v_; -text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; -text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; -text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; -text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__; -text: .text%__1cPClassFileParserYcheck_super_class_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cTClassLoadingServiceScompute_class_size6FpnNinstanceKlass__I_; -text: .text%__1cSinstanceKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cLClassLoaderOlookup_package6Fpkc_pnLPackageInfo__; -text: .text%__1cQPackageHashtableMcompute_hash6Mpkci_I_: classLoader.o; -text: .text%__1cQPackageHashtableJget_entry6MiIpkcI_pnLPackageInfo__: classLoader.o; -text: .text%__1cMstringStream2T6M_v_; -text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cVLoaderConstraintTableWfind_loader_constraint6MnMsymbolHandle_nGHandle__ppnVLoaderConstraintEntry__; -text: .text%__1cQSystemDictionaryQadd_to_hierarchy6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cFKlassWappend_to_sibling_list6M_v_; -text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; -text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_; -text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; -text: .text%__1cQSystemDictionaryRupdate_dictionary6FiIiInTinstanceKlassHandle_nGHandle_pnGThread__v_; -text: .text%__1cQSystemDictionaryQfind_placeholder6FiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cQPlaceholderTableMremove_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; -text: .text%__1cPTwoOopHashtableMcompute_hash6MnMsymbolHandle_nGHandle__I_: dictionary.o; -text: .text%__1cKDictionaryJnew_entry6MIpnMklassOopDesc_pnHoopDesc__pnPDictionaryEntry__; -text: .text%__1cNinstanceKlassQeager_initialize6MpnGThread__v_; -text: .text%__1cMObjectLocker2T6M_v_; -text: .text%__1cSObjectSynchronizerJfast_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cPClassFileStreamGget_u86MpnGThread__X_; -text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbJparse_classfile_signature_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_; -text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__; -text: .text%__1cJFieldTypeKbasic_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cJchar2type6Fc_nJBasicType__: fieldType.o; -text: .text%__1cRSignatureIteratorSskip_optional_size6M_v_; -text: .text%__1cPClassFileParserVparse_exception_table6MIInSconstantPoolHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cLklassVtableYadd_new_mirandas_to_list6FpnNGrowableArray4CpnNmethodOopDesc___pnPobjArrayOopDesc_6pnMklassOopDesc__v_; -text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cPClassFileParserbNparse_classfile_inner_classes_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__H_; -text: .text%__1cPfieldDescriptorKinitialize6MpnMklassOopDesc_i_v_; -text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: classFileParser.o; -text: .text%__1cPfieldDescriptorSlong_initial_value6kM_x_; -text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cNinstanceKlassPadd_implementor6MpnMklassOopDesc__v_; -text: .text%__1cPClassFileParserXjava_lang_Class_fix_pre6MpnOobjArrayHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cPClassFileParserYjava_lang_Class_fix_post6Mpi_v_; -text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; -text: .text%__1cIUniverseNfixup_mirrors6FpnGThread__v_; -text: .text%__1cRCompactingPermGenGas_gen6kM_pnKGeneration__: permGen.o; -text: .text%__1cbCOneContigSpaceCardGenerationOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cPContiguousSpaceOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cPContiguousSpaceTobject_iterate_from6MnJWaterMark_pnNObjectClosure__v_; -text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_: universe.o; -text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_: arrayKlassKlass.o; -text: .text%__1cSobjArrayKlassKlassOklass_oop_size6kM_i_: objArrayKlassKlass.o; -text: .text%__1cSinstanceKlassKlassOklass_oop_size6kM_i_: instanceKlassKlass.o; -text: .text%__1cTtypeArrayKlassKlassOklass_oop_size6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cLsymbolKlassOklass_oop_size6kM_i_: symbolKlass.o; -text: .text%__1cLsymbolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cTtypeArrayKlassKlassIoop_size6kMpnHoopDesc__i_: typeArrayKlassKlass.o; -text: .text%__1cKarrayKlassLobject_size6kMi_i_; -text: .text%__1cLmethodKlassOklass_oop_size6kM_i_: methodKlass.o; -text: .text%__1cQconstMethodKlassOklass_oop_size6kM_i_: constMethodKlass.o; -text: .text%__1cPmethodDataKlassOklass_oop_size6kM_i_: methodDataKlass.o; -text: .text%__1cRconstantPoolKlassOklass_oop_size6kM_i_: constantPoolKlass.o; -text: .text%__1cWconstantPoolCacheKlassOklass_oop_size6kM_i_: cpCacheKlass.o; -text: .text%__1cVcompiledICHolderKlassOklass_oop_size6kM_i_: compiledICHolderKlass.o; -text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_: objArrayKlassKlass.o; -text: .text%__1cQconstMethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cPClassFileParserbFjava_lang_ref_Reference_fix_pre6MpnPtypeArrayHandle_nSconstantPoolHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_; -text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceRefKlass.o; -text: .text%__1cEUTF8Hstrrchr6FpWiW_1_; -text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; -text: .text%__1cPfieldDescriptorUdouble_initial_value6kM_d_; -text: .text%__1cXreferenceProcessor_init6F_v_; -text: .text%__1cSReferenceProcessorMinit_statics6F_v_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJset_clock6Fx_v_; -text: .text%__1cQjni_handles_init6F_v_; -text: .text%__1cKJNIHandlesKinitialize6F_v_; -text: .text%__1cOvmStructs_init6F_v_; -text: .text%__1cIRuntime1Ninitialize_pd6F_v_; -text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; -text: .text%__1cJOopMapSet2t6M_v_; -text: .text%__1cJAssemblerEsubl6MnHAddress_i_v_; -text: .text%__1cJAssemblerGfldenv6MnHAddress__v_; -text: .text%__1cGOopMap2t6Mii_v_; -text: .text%__1cJrelocInfoNfinish_prefix6Mph_p0_; -text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_22pC_v_; -text: .text%__1cJAssemblerEdecl6MnHAddress__v_; -text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; -text: .text%__1cNRelocIteratorTlocs_and_index_size6Fii_i_; -text: .text%__1cSDeoptimizationBlob2n6FII_pv_; -text: .text%__1cSDeoptimizationBlob2t6MpnKCodeBuffer_ipnJOopMapSet_iiii_v_; -text: .text%__1cRAbstractAssemblerOcode_fill_byte6F_i_; -text: .text%__1cNRelocIteratorKset_limits6MpC1_v_; -text: .text%__1cVPatchingRelocIteratorHprepass6M_v_; -text: .text%__1cNRelocIteratorFreloc6M_pnKRelocation__; -text: .text%__1cKNativeCallLdestination6kM_pC_; -text: .text%__1cRNativeInstructionFwrote6Mi_v_; -text: .text%__1cVPatchingRelocIteratorIpostpass6M_v_; -text: .text%__1cJOopMapSetJheap_size6kM_i_; -text: .text%__1cGOopMapJheap_size6kM_i_; -text: .text%__1cJOopMapSetHcopy_to6MpC_v_; -text: .text%__1cGOopMapHcopy_to6MpC_v_; -text: .text%__1cLOopRecorder2t6MpnFArena__v_; -text: .text%__1cIRuntime1Iname_for6Fn0AGStubID__pkc_; -text: .text%__1cLRuntimeStub2n6FII_pv_; -text: .text%__1cNStubAssemblerHcall_RT6MpnMRegisterImpl_2pC2_i_; -text: .text%__1cNStubAssemblerHcall_RT6MpnMRegisterImpl_2pCi_i_; -text: .text%__1cJStubFrame2T6M_v_; -text: .text%__1cOMacroAssemblerLtlab_refill6MrnFLabel_22_v_; -text: .text%__1cOMacroAssemblerNeden_allocate6MpnMRegisterImpl_2i2rnFLabel__v_; -text: .text%__1cOMacroAssemblerLverify_tlab6M_v_; -text: .text%__1cOMacroAssemblerNtlab_allocate6MpnMRegisterImpl_2i22rnFLabel__v_; -text: .text%__1cRC1_MacroAssemblerRinitialize_object6MpnMRegisterImpl_22i22_v_; -text: .text%__1cRC1_MacroAssemblerPinitialize_body6MpnMRegisterImpl_2i2_v_; -text: .text%__1cNStubAssemblerHcall_RT6MpnMRegisterImpl_2pC22_i_; -text: .text%__1cNStubAssemblerHcall_RT6MpnMRegisterImpl_2pC222_i_; -text: .text%__1cIRuntime1Iblob_for6Fn0AGStubID__pnICodeBlob__; -text: .text%__1cRNativeGeneralJumpQjump_destination6kM_pC_; -text: .text%__1cJAssemblerOlocate_operand6FpCn0AMWhichOperand__1_; -text: .text%__1cIRuntime1Rgenerate_patching6FpnNStubAssembler_pC_pnJOopMapSet__; -text: .text%__1cNSafepointBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNSafepointBlob2n6FII_pv_; -text: .text%__1cNSafepointBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cJAssemblerFfldcw6MnHAddress__v_; -text: .text%__1cJAssemblerGfnstcw6MnHAddress__v_; -text: .text%__1cJAssemblerHfcomp_d6MnHAddress__v_; -text: .text%__1cQvtableStubs_init6F_v_; -text: .text%__1cLVtableStubsKinitialize6F_v_; -text: .text%__1cWInlineCacheBuffer_init6F_v_; -text: .text%__1cRInlineCacheBufferKinitialize6F_v_; -text: .text%__1cRInlineCacheBufferOinit_next_stub6F_v_; -text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_; -text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__; -text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_: icBuffer.o; -text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_: icBuffer.o; -text: .text%__1cTcompilerOracle_init6F_v_; -text: .text%__1cOCompilerOraclePparse_from_file6F_v_; -text: .text%__1cWcompilationPolicy_init6F_v_; -text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceKlass.o; -text: .text%__1cLklassVtableVinitialize_from_super6MnLKlassHandle__i_; -text: .text%__1cLklassVtableNput_method_at6MpnNmethodOopDesc_i_v_; -text: .text%__1cLklassVtableQfill_in_mirandas6Mri_v_; -text: .text%__1cFKlassIsubklass6kM_p0_; -text: .text%__1cLklassVtableOcopy_vtable_to6MpnLvtableEntry__v_; -text: .text%__1cFKlassMnext_sibling6kM_p0_; -text: .text%__1cQSystemDictionaryKclasses_do6FpFpnMklassOopDesc__v_v_; -text: .text%__1cKDictionaryKclasses_do6MpFpnMklassOopDesc__v_v_; -text: .text%__1cNinstanceKlassGitable6kM_pnLklassItable__; -text: .text%__1cLklassItable2t6MnTinstanceKlassHandle__v_; -text: .text%__1cRitableMethodEntryKinitialize6MpnNmethodOopDesc__v_; -text: .text%__1cKoopFactoryMnew_objArray6FpnMklassOopDesc_ipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassRallocate_objArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__; -text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__; -text: .text%__1cNCollectedHeapXallocate_from_tlab_slow6FpnGThread_I_pnIHeapWord__; -text: .text%__1cQDefNewGenerationVunsafe_max_tlab_alloc6kM_I_: defNewGeneration.o; -text: .text%__1cQDefNewGenerationVunsafe_max_alloc_nogc6kM_I_; -text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_; -text: .text%__1cQGenCollectedHeapRallocate_new_tlab6MI_pnIHeapWord__; -text: .text%__1cQGenCollectedHeapEheap6F_p0_; -text: .text%__1cJEdenSpaceMpar_allocate6MI_pnIHeapWord__; -text: .text%__1cPContiguousSpaceRpar_allocate_impl6MIkpnIHeapWord__2_: space.o; -text: .text%__1cWThreadLocalAllocBufferEfill6MpnIHeapWord_2I_v_; -text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__; -text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cEUTF8Ounicode_length6Fpkc_i_; -text: .text%__1cEUTF8Enext6FpkcpH_pc_; -text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cQGenCollectedHeapVlarge_typearray_limit6M_I_; -text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_; -text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cNCollectedHeapMobj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: instanceKlass.o; -text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; -text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; -text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_; -text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; -text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__; -text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; -text: .text%__1cMNativeLookupNpure_jni_name6FnMmethodHandle__pc_; -text: .text%__1cMoutputStreamFprint6MpkcE_v_; -text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; -text: .text%__1cMoutputStreamDput6Mc_v_; -text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; -text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; -text: .text%__1cbEinitialize_converter_functions6F_v_; -text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; -text: .text%__1cQGenCollectedHeapIcapacity6kM_I_; -text: .text%__1cQDefNewGenerationIcapacity6kM_I_; -text: .text%__1cQGenCollectedHeapEused6kM_I_; -text: .text%__1cQDefNewGenerationEused6kM_I_; -text: .text%__1cbCOneContigSpaceCardGenerationEused6kM_I_; -text: .text%__1cQGenCollectedHeapPpost_initialize6M_v_; -text: .text%__1cQGenCollectedHeapTref_processing_init6M_v_; -text: .text%__1cKSharedHeapTref_processing_init6M_v_; -text: .text%__1cKGenerationSref_processor_init6M_v_; -text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_; -text: .text%__1cNMemoryServicebBadd_gen_collected_heap_info6FpnQGenCollectedHeap__v_; -text: .text%__1cNMemoryManagerXget_copy_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cPGCMemoryManager2t6M_v_; -text: .text%__1cNMemoryManagerWget_msc_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cNMemoryServicebAadd_generation_memory_pool6FpnKGeneration_pnNMemoryManager_4_v_; -text: .text%__1cQDefNewGenerationEkind6M_nKGenerationEName__: defNewGeneration.o; -text: .text%__1cRTenuredGenerationEkind6M_nKGenerationEName__: tenuredGeneration.o; -text: .text%__1cKGenerationMmax_capacity6kM_I_; -text: .text%__1cNMemoryServicebGadd_compact_perm_gen_memory_pool6FpnUCompactingPermGenGen_pnNMemoryManager__v_; -text: .text%__1cQGenCollectedHeapNgc_threads_do6kMpnNThreadClosure__v_; -text: .text%__1cPGCMemoryManagerXinitialize_gc_stat_info6M_v_; -text: .text%__1cKGCStatInfo2t6Mi_v_; -text: .text%__1cQjavaClasses_init6F_v_; -text: .text%__1cLJavaClassesPcompute_offsets6F_v_; -text: .text%__1cQjava_lang_SystemPcompute_offsets6F_v_; -text: .text%__1cQjava_lang_ThreadPcompute_offsets6F_v_; -text: .text%__1cVjava_lang_ThreadGroupPcompute_offsets6F_v_; -text: .text%__1cbIjava_security_AccessControlContextPcompute_offsets6F_v_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectPcompute_offsets6F_v_; -text: .text%__1cYjava_lang_reflect_MethodPcompute_offsets6F_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldPcompute_offsets6F_v_; -text: .text%__1cPjava_nio_BufferPcompute_offsets6F_v_; -text: .text%__1cYsun_reflect_ConstantPoolPcompute_offsets6F_v_; -text: .text%__1cZsun_misc_AtomicLongCSImplPcompute_offsets6F_v_; -text: .text%__1cSstubRoutines_init26F_v_; -text: .text%__1cMStubRoutinesLinitialize26F_v_; -text: .text%__1cJAssemblerEincl6MnHAddress__v_; -text: .text%__1cLJvmtiExportbMtransition_pending_onload_raw_monitors6F_v_; -text: .text%__1cUJvmtiPendingMonitorsXtransition_raw_monitors6F_v_; -text: .text%__1cIVMThreadGcreate6F_v_; -text: .text%__1cIVMThread2t6M_v_; -text: .text%__1cQVMOperationQdDueue2t6M_v_; -text: .text%__1cCosMstart_thread6FpnGThread__v_; -text: .text%__1cCosPpd_start_thread6FpnGThread__v_; -text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; -text: .text%__1cQset_lwp_priority6Fiii_i_; -text: .text%__1cIVMThreadDrun6M_v_; -text: .text%__1cIVMThreadEloop6M_v_; -text: .text%__1cQVMOperationQdDueueLremove_next6M_pnMVM_Operation__; -text: .text%__1cQVMOperationQdDueueSqueue_remove_front6Mi_pnMVM_Operation__; -text: .text%__1cLJvmtiExportRenter_start_phase6F_v_; -text: .text%__1cLJvmtiExportNpost_vm_start6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_start6F_v_; -text: .text%__1cQinitialize_class6FnMsymbolHandle_pnGThread__v_: thread.o; -text: .text%__1cNinstanceKlassKinitialize6MpnGThread__v_; -text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassWcall_class_initializer6MpnGThread__v_; -text: .text%__1cNinstanceKlassbBcall_class_initializer_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassRclass_initializer6M_pnNmethodOopDesc__; -text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; -text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; -text: .text%__1cPJavaCallWrapper2t6MnMmethodHandle_nGHandle_pnJJavaValue_pnGThread__v_; -text: .text%__1cRJavaCallArgumentsKparameters6M_pi_; -text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__; -text: .text%__1cFframeVinterpreter_frame_bcp6kM_pC_; -text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoolHandle_inJBytecodesECode_pnGThread__v_; -text: .text%__1cMLinkResolverUresolve_invokestatic6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverMresolve_pool6FrnLKlassHandle_rnMsymbolHandle_42nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverNresolve_klass6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__; -text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceKlass.o; -text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPoolHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_; -text: .text%__1cMLinkResolverYlookup_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cMLinkResolverbAcheck_method_accessability6FnLKlassHandle_11nMmethodHandle_pnGThread__v_; -text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; -text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__; -text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_; -text: .text%__1cNSignatureInfoHdo_void6M_v_: bytecode.o; -text: .text%__1cQResultTypeFinderDset6MinJBasicType__v_: bytecode.o; -text: .text%__1cRSignatureIteratorTcheck_signature_end6M_v_; -text: .text%__1cLas_TosState6FnJBasicType__nITosState__: cpCacheOop.o; -text: .text%__1cWConstantPoolCacheEntryOset_bytecode_16MnJBytecodesECode__v_; -text: .text%__1cWConstantPoolCacheEntryGverify6kMpnMoutputStream__v_; -text: .text%__1cSInterpreterRuntimeTprepare_native_call6FpnKJavaThread_pnNmethodOopDesc__v_; -text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_; -text: .text%__1cXSignatureHandlerLibraryKinitialize6F_v_; -text: .text%__1cXSignatureHandlerLibraryQset_handler_blob6F_pC_; -text: .text%__1cRSignatureIterator2t6MpnNsymbolOopDesc__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIgenerate6MX_v_; -text: .text%__1cRSignatureIteratorSiterate_parameters6MX_v_; -text: .text%__1cXSignatureHandlerLibraryLset_handler6FpnKCodeBuffer__pC_; -text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; -text: .text%jni_RegisterNatives: jni.o; -text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; -text: .text%__1cPJavaCallWrapper2T6M_v_; -text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; -text: .text%__1cNinstanceKlassbJset_initialization_state_and_notify6Mn0AKClassState_pnGThread__v_; -text: .text%__1cNinstanceKlassbOset_initialization_state_and_notify_impl6FnTinstanceKlassHandle_n0AKClassState_pnGThread__v_; -text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; -text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; -text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cMLinkResolverZcheck_field_accessability6FnLKlassHandle_11rnPfieldDescriptor_pnGThread__v_; -text: .text%__1cPFieldAccessInfoDset6MnLKlassHandle_nMsymbolHandle_iinJBasicType_nLAccessFlags__v_; -text: .text%__1cWConstantPoolCacheEntryOset_bytecode_26MnJBytecodesECode__v_; -text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_; -text: .text%__1cMLinkResolverVresolve_invokespecial6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_: bytecode.o; -text: .text%__1cNSignatureInfoHdo_long6M_v_: bytecode.o; -text: .text%JVM_CurrentTimeMillis; -text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cTconstantPoolOopDescOstring_at_impl6FnSconstantPoolHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_; -text: .text%__1cEUTF8Ounicode_length6Fpkci_i_; -text: .text%__1cLStringTableGintern6FnGHandle_pHipnGThread__pnHoopDesc__; -text: .text%__1cLStringTableLhash_string6FpHi_i_; -text: .text%__1cLStringTableGlookup6MipHiI_pnHoopDesc__; -text: .text%__1cLStringTableJbasic_add6MinGHandle_pHiIpnGThread__pnHoopDesc__; -text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nGHandle__; -text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; -text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; -text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cNSignatureInfoGdo_int6M_v_: bytecode.o; -text: .text%__1cNSignatureInfoHdo_char6M_v_: bytecode.o; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cLklassVtableIindex_of6kMpnNmethodOopDesc_i_i_; -text: .text%__1cMNativeLookupNlong_jni_name6FnMmethodHandle__pc_; -text: .text%__1cNFingerprinterJdo_object6Mii_v_: dump.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorDbox6Mii_v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEfrom6F_pnMRegisterImpl__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorCto6F_pnMRegisterImpl__; -text: .text%JVM_DoPrivileged; -text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_; -text: .text%__1cSvframeStreamCommonEnext6M_v_; -text: .text%__1cRPrivilegedElementKinitialize6MpnMvframeStream_pnHoopDesc_p0pnGThread__v_; -text: .text%__1cKJNIHandlesKmake_local6FpnHJNIEnv__pnHoopDesc__pnI_jobject__; -text: .text%__1cOJNIHandleBlockPallocate_handle6MpnHoopDesc__pnI_jobject__; -text: .text%__1cSInterpreterRuntimeNquicken_io_cc6FpnKJavaThread__v_; -text: .text%__1cNSignatureInfoHdo_bool6M_v_: bytecode.o; -text: .text%__1cNSharedRuntimeDf2i6Ff_i_; -text: .text%jni_FindClass: jni.o; -text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__; -text: .text%__1cbCfind_class_from_class_loader6FpnHJNIEnv__nMsymbolHandle_CnGHandle_3CpnGThread__pnH_jclass__; -text: .text%__1cRCompilationPolicyUcompleted_vm_startup6F_v_; -text: .text%jni_NewGlobalRef: jni.o; -text: .text%jni_GetStringUTFChars: jni.o; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cHUNICODEHas_utf86FpHi_pc_; -text: .text%__1cHUNICODELutf8_length6FpHi_i_; -text: .text%JVM_FindPrimitiveClass; -text: .text%__1cJname2type6Fpkc_nJBasicType__; -text: .text%jni_ReleaseStringUTFChars; -text: .text%__1cVcreate_initial_thread6FnGHandle_pnKJavaThread_pnGThread__pnHoopDesc__: thread.o; -text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_; -text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_; -text: .text%JVM_CurrentThread; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_: bytecode.o; -text: .text%__1cSInterpreterRuntimeInewarray6FpnKJavaThread_nJBasicType_i_v_; -text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cNFingerprinterGdo_int6M_v_: dump.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEmove6Mii_v_; -text: .text%JVM_ArrayCopy; -text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%JVM_GetStackAccessControlContext; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_; -text: .text%__1cJCodeCacheJfind_blob6Fpv_pnICodeBlob__; -text: .text%__1cICodeHeapKfind_start6kMpv_1_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; -text: .text%__1cTJvmtiEventCollectorYunset_jvmti_thread_state6M_v_; -text: .text%JVM_GetInheritedAccessControlContext; -text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_; -text: .text%JVM_SetThreadPriority; -text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; -text: .text%__1cGThreadMset_priority6Fp0nOThreadPriority__v_; -text: .text%__1cCosMset_priority6FpnGThread_nOThreadPriority__nIOSReturn__; -text: .text%__1cQjava_lang_ThreadRset_thread_status6FpnHoopDesc_n0AMThreadStatus__v_; -text: .text%JVM_IsThreadAlive; -text: .text%JVM_StartThread; -text: .text%__1cQjava_lang_ThreadJstackSize6FpnHoopDesc__x_; -text: .text%__1cKJavaThread2t6MpFp0pnGThread__vI_v_; -text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; -text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; -text: .text%__1cGThreadFstart6Fp0_v_; -text: .text%__1cbAcall_initializeSystemClass6FpnGThread__v_: thread.o; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%__1cKJavaThreadRthread_main_inner6M_v_; -text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cNFingerprinterHdo_long6M_v_: dump.o; -text: .text%JVM_MonitorWait; -text: .text%__1cQjava_lang_ThreadRget_thread_status6FpnHoopDesc__n0AMThreadStatus__; -text: .text%__1cSObjectSynchronizerEwait6FnGHandle_xpnGThread__v_; -text: .text%__1cNObjectMonitor2t6M_v_; -text: .text%__1cNObjectMonitorHRecycle6M_v_; -text: .text%__1cNObjectMonitorEexit6MpnGThread__v_; -text: .text%jni_GetObjectClass: jni.o; -text: .text%jni_GetMethodID: jni.o; -text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; -text: .text%jni_NewStringUTF: jni.o; -text: .text%jni_CallObjectMethod: jni.o; -text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_; -text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6MX_v_: jni.o; -text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_: jni.o; -text: .text%jni_ExceptionOccurred: jni.o; -text: .text%jni_DeleteLocalRef: jni.o; -text: .text%__1cOJNIHandleBlockRrebuild_free_list6M_v_; -text: .text%jni_EnsureLocalCapacity; -text: .text%jni_GetStaticMethodID: jni.o; -text: .text%jni_CallStaticObjectMethodV: jni.o; -text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%jni_ExceptionCheck: jni.o; -text: .text%jni_NewString: jni.o; -text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__; -text: .text%JVM_InitProperties; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; -text: .text%__1cPfieldDescriptorUstring_initial_value6kMpnGThread__pnHoopDesc__; -text: .text%jni_GetFieldID: jni.o; -text: .text%__1cNinstanceKlassSregister_finalizer6FpnPinstanceOopDesc_pnGThread__2_; -text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cJFieldTypeOget_array_info6FpnNsymbolOopDesc_pip2pnGThread__nJBasicType__; -text: .text%__1cJFieldTypeSskip_optional_size6FpnNsymbolOopDesc_pi_v_; -text: .text%JVM_RegisterUnsafeMethods; -text: .text%JVM_IsArrayClass; -text: .text%JVM_GetComponentType; -text: .text%__1cKReflectionUarray_component_type6FpnHoopDesc_pnGThread__2_; -text: .text%__1cKReflectionbFbasic_type_arrayklass_to_mirror6FpnMklassOopDesc_pnGThread__pnHoopDesc__; -text: .text%JVM_IsPrimitiveClass; -text: .text%JVM_GetClassLoader; -text: .text%JVM_DesiredAssertionStatus; -text: .text%__1cOJavaAssertionsLmatch_class6Fpkc_pn0AKOptionList__: javaAssertions.o; -text: .text%__1cOJavaAssertionsNmatch_package6Fpkc_pn0AKOptionList__; -text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%JVM_InternString; -text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_; -text: .text%__1cQjava_lang_StringRas_unicode_string6FpnHoopDesc_ri_pH_; -text: .text%JVM_NanoTime; -text: .text%__1cCosNjavaTimeNanos6F_x_; -text: .text%JVM_GetCallerClass; -text: .text%JVM_SupportsCX8; -text: .text%__1cNFingerprinterHdo_bool6M_v_: dump.o; -text: .text%JVM_GetClassDeclaredFields; -text: .text%__1cKReflectionInew_type6FnMsymbolHandle_nLKlassHandle_pnGThread__nGHandle__; -text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cXjava_lang_reflect_FieldGcreate6FpnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_name6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_type6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectMset_override6FpnHoopDesc_C_v_; -text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cXjava_lang_reflect_FieldPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cLklassItableUcompute_itable_index6FpnNmethodOopDesc__i_; -text: .text%__1cWConstantPoolCacheEntrySset_interface_call6MnMmethodHandle_i_v_; -text: .text%Unsafe_ObjectFieldOffset; -text: .text%__1cRfind_field_offset6FpnI_jobject_ipnGThread__i_; -text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_; -text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldNset_signature6FpnHoopDesc_2_v_; -text: .text%JVM_IHashCode; -text: .text%jni_GetStaticFieldID: jni.o; -text: .text%__1cNinstanceKlassKjni_id_for6Mi_pnFJNIid__; -text: .text%__1cNinstanceKlassPjni_id_for_impl6FnTinstanceKlassHandle_i_pnFJNIid__; -text: .text%__1cFJNIid2t6MpnMklassOopDesc_ip0_v_; -text: .text%jni_SetStaticObjectField: jni.o; -text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: arrayKlass.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: arrayKlass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: arrayKlass.o; -text: .text%jni_GetStringUTFLength: jni.o; -text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; -text: .text%jni_GetStringLength: jni.o; -text: .text%jni_GetStringUTFRegion: jni.o; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; -text: .text%JVM_FindClassFromClassLoader; -text: .text%JVM_FindClassFromBootLoader; -text: .text%JVM_IsInterface; -text: .text%JVM_GetClassDeclaredConstructors; -text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDesc__; -text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; -text: .text%__1cPSignatureStreamEnext6M_v_; -text: .text%__1cKReflectionTget_exception_types6FnMmethodHandle_pnGThread__nOobjArrayHandle__; -text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__; -text: .text%__1cSconstMethodOopDescZchecked_exceptions_length6kM_i_; -text: .text%__1cbDjava_lang_reflect_ConstructorGcreate6FpnGThread__nGHandle__; -text: .text%__1cbDjava_lang_reflect_ConstructorJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cKarrayKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%JVM_Clone; -text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; -text: .text%JVM_GetClassAccessFlags; -text: .text%JVM_GetClassName; -text: .text%__1cFKlassNexternal_name6kM_pkc_; -text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; -text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__; -text: .text%JVM_GetClassModifiers; -text: .text%jni_GetSuperclass: jni.o; -text: .text%__1cKJNIHandlesKmake_local6FpnHoopDesc__pnI_jobject__; -text: .text%__1cNFingerprinterIdo_array6Mii_v_: dump.o; -text: .text%JVM_NewInstanceFromConstructor; -text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_; -text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; -text: .text%__1cKReflectionDbox6FpnGjvalue_nJBasicType_pnGThread__pnHoopDesc__; -text: .text%JVM_MaxMemory; -text: .text%__1cQGenCollectedHeapMmax_capacity6kM_I_; -text: .text%__1cQDefNewGenerationMmax_capacity6kM_I_; -text: .text%Unsafe_AllocateMemory; -text: .text%Unsafe_SetNativeLong; -text: .text%__1cNSignatureInfoHdo_byte6M_v_: bytecode.o; -text: .text%Unsafe_GetNativeByte; -text: .text%Unsafe_FreeMemory; -text: .text%__1cNSignatureInfoIdo_float6M_v_: bytecode.o; -text: .text%__1cFJNIidEfind6Mi_p0_; -text: .text%jni_NewObjectV: jni.o; -text: .text%jni_GetStringRegion: jni.o; -text: .text%jni_GetObjectField: jni.o; -text: .text%jni_GetStringCritical: jni.o; -text: .text%jni_ReleaseStringCritical: jni.o; -text: .text%JVM_LoadLibrary; -text: .text%JVM_FindLibraryEntry; -text: .text%jni_GetJavaVM; -text: .text%JVM_IsSupportedJNIVersion; -text: .text%jni_SetIntField: jni.o; -text: .text%jni_SetLongField: jni.o; -text: .text%JVM_FindSignal; -text: .text%JVM_RegisterSignal; -text: .text%__1cCosMuser_handler6F_pv_; -text: .text%__1cCosGsignal6Fipv_1_; -text: .text%__1cWreset_vm_info_property6FpnGThread__v_: thread.o; -text: .text%__1cVquicken_jni_functions6F_v_; -text: .text%__1cQJNI_FastGetFieldbFgenerate_fast_get_boolean_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_int_field06FnJBasicType__pC_; -text: .text%__1cJAssemblerFtestb6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerMemit_arith_b6MiipnMRegisterImpl_i_v_; -text: .text%__1cYjni_GetBooleanField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_byte_field6F_pC_; -text: .text%__1cVjni_GetByteField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_char_field6F_pC_; -text: .text%__1cVjni_GetCharField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_short_field6F_pC_; -text: .text%__1cWjni_GetShortField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbBgenerate_fast_get_int_field6F_pC_; -text: .text%__1cUjni_GetIntField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_long_field6F_pC_; -text: .text%__1cVjni_GetLongField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_float_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_float_field06FnJBasicType__pC_; -text: .text%__1cJAssemblerFfst_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfstp_d6Mi_v_; -text: .text%__1cWjni_GetFloatField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_double_field6F_pC_; -text: .text%__1cXjni_GetDoubleField_addr6F_pC_; -text: .text%__1cSset_init_completed6F_v_; -text: .text%__1cJTimeStampGupdate6M_v_; -text: .text%__1cQSystemDictionarybAcompute_java_system_loader6FpnGThread__v_; -text: .text%jni_NewObjectArray: jni.o; -text: .text%__1cNobjArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; -text: .text%jni_SetObjectArrayElement: jni.o; -text: .text%jni_GetObjectArrayElement: jni.o; -text: .text%__1cQSimpleCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; -text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cLJvmtiExportQenter_live_phase6F_v_; -text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_; -text: .text%__1cUJvmtiEventControllerHvm_init6F_v_; -text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_; -text: .text%__1cMPeriodicTask2t6MI_v_; -text: .text%__1cMPeriodicTaskGenroll6M_v_; -text: .text%__1cCosLsignal_init6F_v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_; -text: .text%__1cCosOsignal_init_pd6F_v_; -text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; -text: .text%__1cICompiler2t6M_v_; -text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; -text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; -text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; -text: .text%__1cCosFyield6F_v_; -text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; -text: .text%__1cCosLsignal_wait6F_i_; -text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o; -text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%__1cICompilerKinitialize6M_v_; -text: .text%__1cMCompileQdDueueDget6M_pnLCompileTask__; -text: .text%__1cKManagementKinitialize6FpnGThread__v_; -text: .text%__1cRLowMemoryDetectorKinitialize6F_v_; -text: .text%__1cLStatSamplerGengage6F_v_; -text: .text%__1cLStatSamplerKinitialize6F_v_; -text: .text%__1cLStatSamplerUcreate_misc_perfdata6F_v_; -text: .text%__1cCosRelapsed_frequency6F_x_; -text: .text%__1cLStatSamplerbMcreate_system_property_instrumentation6FpnGThread__v_; -text: .text%__1cLStatSamplerTget_system_property6FpkcpnGThread__2_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; -text: .text%__1cLStatSamplerXcreate_sampled_perfdata6F_v_; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnPPerfLongCounter__; -text: .text%__1cSHighResTimeSamplerLtake_sample6M_x_: statSampler.o; -text: .text%__1cPPerfDataManagerHsampled6F_pnMPerfDataList__; -text: .text%__1cMPerfDataListFclone6M_p0_; -text: .text%__1cMPerfDataList2t6Mp0_v_; -text: .text%__1cNWatcherThreadFstart6F_v_; -text: .text%__1cNWatcherThread2t6M_v_; -text: .text%__1cJTimeStampMmilliseconds6kM_x_; -text: .text%__1cKManagementWrecord_vm_startup_time6Fxx_v_; -text: .text%__1cORuntimeServiceYrecord_application_start6F_v_; -text: .text%__1cNWatcherThreadDrun6M_v_; -text: .text%__1cMPeriodicTaskMtime_to_wait6F_I_: thread.o; -text: .text%__1cNgetTimeMillis6F_x_; -text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_; -text: .text%JVM_FindLoadedClass; -text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cQSystemDictionaryEfind6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%jni_CallStaticObjectMethod: jni.o; -text: .text%jni_NewByteArray: jni.o; -text: .text%jni_SetByteArrayRegion: jni.o; -text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; -text: .text%jni_NewObject: jni.o; -text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_; -text: .text%__1cVjava_lang_ClassLoaderGparent6FpnHoopDesc__2_; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcinMsymbolHandle_4nGHandle_6_v_; -text: .text%JVM_FillInStackTrace; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle__v_; -text: .text%__1cVPreserveExceptionMark2t6MrpnGThread__v_; -text: .text%__1cKJavaThreadGactive6F_p0_; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_; -text: .text%__1cTjava_lang_ThrowableNset_backtrace6FpnHoopDesc_2_v_; -text: .text%__1cTjava_lang_ThrowableQclear_stacktrace6FpnHoopDesc__v_; -text: .text%__1cVPreserveExceptionMark2T6M_v_; -text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; -text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; -text: .text%__1cSInterpreterRuntimePset_bcp_and_mdp6FpCpnKJavaThread__v_; -text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_; -text: .text%__1cFframeZinterpreter_frame_set_bcx6Mi_v_; -text: .text%__1cNCompileBrokerRassign_compile_id6FnMmethodHandle_i_I_; -text: .text%__1cNCompileBrokerNallocate_task6F_pnLCompileTask__; -text: .text%__1cMCompileQdDueueDadd6MpnLCompileTask__v_; -text: .text%__1cCosPhint_no_preempt6F_v_; -text: .text%__1cSCompileTaskWrapper2t6MpnLCompileTask__v_; -text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; -text: .text%__1cNCompileBrokerVpush_jni_handle_block6F_v_; -text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; -text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; -text: .text%__1cIciObject2t6MnGHandle__v_; -text: .text%__1cPciObjectFactoryEfind6MpnHoopDesc_pnNGrowableArray4CpnIciObject____i_; -text: .text%__1cPciObjectFactoryNinit_ident_of6MpnIciObject__v_; -text: .text%__1cIciObjectJset_ident6MI_v_; -text: .text%__1cPciObjectFactoryGinsert6MipnIciObject_pnNGrowableArray4C2___v_; -text: .text%__1cGciType2t6MnJBasicType__v_; -text: .text%__1cIciObject2t6M_v_; -text: .text%__1cPciObjectFactoryDget6MpnHoopDesc__pnIciObject__; -text: .text%__1cPciObjectFactoryNfind_non_perm6MpnHoopDesc__rpn0ANNonPermObject__; -text: .text%__1cPciObjectFactoryRcreate_new_object6MpnHoopDesc__pnIciObject__; -text: .text%__1cIciSymbolEmake6Fpkc_p0_; -text: .text%__1cIciSymbolJmake_impl6Fpkc_p0_; -text: .text%__1cHciKlass2t6MnLKlassHandle_pnIciSymbol__v_; -text: .text%__1cGciType2t6MnLKlassHandle__v_; -text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle__v_; -text: .text%__1cPciInstanceKlassFsuper6M_p0_; -text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cHciKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cUciInstanceKlassKlassEmake6F_p0_; -text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; -text: .text%__1cGciType2t6MpnHciKlass__v_; -text: .text%__1cIciObject2t6MpnHciKlass__v_; -text: .text%__1cPciObjArrayKlass2t6MpnIciSymbol_pnHciKlass_i_v_; -text: .text%__1cUciObjArrayKlassKlassEmake6F_p0_; -text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_; -text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cMciArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cFciEnvWget_method_from_handle6MpnI_jobject__pnIciMethod__; -text: .text%__1cIciMethod2t6MnMmethodHandle__v_; -text: .text%__1cLciSignature2t6MpnHciKlass_pnIciSymbol__v_; -text: .text%__1cGciTypeEmake6FnJBasicType__p0_; -text: .text%__1cICompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cWImplicitExceptionTableIset_size6MI_v_; -text: .text%__1cLCompilationOcompile_method6M_v_; -text: .text%__1cLCompilationKinitialize6M_v_; -text: .text%__1cYDebugInformationRecorder2t6MpnLOopRecorder__v_; -text: .text%__1cUDebugInfoWriteStream2t6MpnYDebugInformationRecorder_i_v_; -text: .text%__1cLCompilationTdebug_info_recorder6kM_pnYDebugInformationRecorder__; -text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; -text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; -text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: generateOopMap.o; -text: .text%__1cOGenerateOopMapbImark_bbheaders_and_count_gc_points6M_v_; -text: .text%__1cOGenerateOopMapNinitialize_bb6M_v_; -text: .text%__1cOGenerateOopMapLbb_mark_fct6Fp0ipi_v_; -text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; -text: .text%__1cOGenerateOopMapRinit_basic_blocks6M_v_; -text: .text%__1cOGenerateOopMapKinit_state6M_v_; -text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_; -text: .text%__1cOGenerateOopMapUreachable_basicblock6Fp0ipi_v_; -text: .text%__1cOGenerateOopMapSget_basic_block_at6kMi_pnKBasicBlock__; -text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__; -text: .text%__1cOGenerateOopMapYsetup_method_entry_state6M_v_; -text: .text%__1cOGenerateOopMapbAmake_context_uninitialized6M_v_; -text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_; -text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapKcopy_state6MpnNCellTypeState_2_v_; -text: .text%__1cOGenerateOopMapKinterp_all6M_v_; -text: .text%__1cOGenerateOopMapJinterp_bb6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapNrestore_state6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapQnext_bb_start_pc6MpnKBasicBlock__i_; -text: .text%__1cOGenerateOopMapHinterp16MpnOBytecodeStream__v_; -text: .text%__1cOGenerateOopMapGppload6MpnNCellTypeState_i_v_; -text: .text%__1cOGenerateOopMapHget_var6Mi_nNCellTypeState__; -text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_; -text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_; -text: .text%__1cOGenerateOopMapCpp6MpnNCellTypeState_2_v_; -text: .text%__1cOGenerateOopMapEppop6MpnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapFppop16MnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__; -text: .text%__1cOGenerateOopMapKcheck_type6MnNCellTypeState_1_v_; -text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapGppush16MnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; -text: .text%__1cOGenerateOopMapHset_var6MinNCellTypeState__v_; -text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; -text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; -text: .text%__1cNCellTypeStateFmerge6kM0i_0_; -text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; -text: .text%__1cOGenerateOopMapXdo_return_monitor_check6M_v_; -text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; -text: .text%__1cOGenerateOopMapNreport_result6M_v_; -text: .text%__1cLCompilationJbuild_hir6M_v_; -text: .text%__1cCIR2t6MpnLCompilation_pnIciMethod_i_v_; -text: .text%__1cMciNullObjectEmake6F_p0_; -text: .text%__1cMGraphBuilderKinitialize6F_v_; -text: .text%__1cJXHandlers2t6MpnIciMethod__v_; -text: .text%__1cIciMethodJload_code6M_v_; -text: .text%__1cHIRScopeLbuild_graph6MpnLCompilation_i_pnKBlockBegin__; -text: .text%__1cQBlockListBuilderLset_leaders6M_v_; -text: .text%__1cMGraphBuilderPpush_root_scope6MpnHIRScope_pnJBlockList_pnKBlockBegin__v_; -text: .text%__1cMGraphBuilderJScopeDataJset_scope6MpnHIRScope__v_; -text: .text%__1cIValueMap2t6M_v_; -text: .text%__1cMGraphBuilderJScopeDataQadd_to_work_list6MpnKBlockBegin__v_; -text: .text%__1cNResourceArrayGexpand6MIiri_v_; -text: .text%__1cMGraphBuilderJScopeDataVremove_from_work_list6M_pnKBlockBegin__; -text: .text%__1cIValueMapIkill_all6M_v_; -text: .text%__1cGValuesIpush_all6Mpk0_v_: c1_ValueStack.o; -text: .text%__1cMGraphBuilderbBiterate_bytecodes_for_block6Mi_pnIBlockEnd__; -text: .text%__1cMGraphBuilderJScopeDataIblock_at6Mi_pnKBlockBegin__; -text: .text%__1cMGraphBuilderKload_local6MpnJValueType_i_v_; -text: .text%__1cMGraphBuilderGappend6MpnLInstruction__2_; -text: .text%__1cKValueStackEpush6MpnJValueType_pnLInstruction__v_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderMaccess_field6MnJBytecodesECode__v_; -text: .text%__1cFciEnvSget_field_by_index6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cFciEnvXget_field_by_index_impl6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__; -text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; -text: .text%__1cTconstantPoolOopDescSklass_at_if_loaded6FnSconstantPoolHandle_i_pnMklassOopDesc__; -text: .text%__1cPciInstanceKlassGloader6M_pnHoopDesc__; -text: .text%__1cPciInstanceKlassRprotection_domain6M_pnHoopDesc__; -text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; -text: .text%__1cMas_ValueType6FnJBasicType__pnJValueType__; -text: .text%__1cMLinkResolverXresolve_klass_no_update6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cJLoadFieldFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerMdo_LoadField6MpnJLoadField__v_; -text: .text%__1cJLoadFieldEhash6kM_i_: c1_Instruction.o; -text: .text%__1cJLoadFieldEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cMGraphBuilderLstore_local6MpnJValueType_i_v_; -text: .text%__1cKValueStackDpop6MpnJValueType__pnLInstruction__: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderHif_zero6MpnJValueType_nLInstructionJCondition__v_; -text: .text%__1cIConstantFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerLdo_Constant6MpnIConstant__v_; -text: .text%__1cIConstantEhash6kM_i_; -text: .text%__1cLIntConstantOas_IntConstant6M_p0_: c1_Canonicalizer.o; -text: .text%__1cIConstantEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cMGraphBuilderHif_node6MpnLInstruction_n0BJCondition_2pnKValueStack__v_; -text: .text%__1cCIfFvisit6MpnSInstructionVisitor__v_: c1_Canonicalizer.o; -text: .text%__1cNCanonicalizerFdo_If6MpnCIf__v_; -text: .text%__1cLInstructionOas_AccessField6M_pnLAccessField__: c1_Canonicalizer.o; -text: .text%__1cLInstructionLas_UnsafeOp6M_pnIUnsafeOp__: c1_Canonicalizer.o; -text: .text%__1cLInstructionMas_Intrinsic6M_pnJIntrinsic__: c1_Canonicalizer.o; -text: .text%__1cLInstructionEhash6kM_i_: c1_Canonicalizer.o; -text: .text%__1cKStateSplitNas_StateSplit6M_p0_: c1_Canonicalizer.o; -text: .text%__1cIBlockEndLas_BlockEnd6M_p0_: c1_Canonicalizer.o; -text: .text%__1cLInstructionJas_Return6M_pnGReturn__: c1_Canonicalizer.o; -text: .text%__1cLInstructionIas_Throw6M_pnFThrow__: c1_Canonicalizer.o; -text: .text%__1cMGraphBuilderNmethod_return6MpnLInstruction__v_; -text: .text%__1cGReturnFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerJdo_Return6MpnGReturn__v_; -text: .text%__1cGReturnJas_Return6M_p0_: c1_GraphBuilder.o; -text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cMGraphBuilderHif_same6MpnJValueType_nLInstructionJCondition__v_; -text: .text%__1cNCanonicalizerNdo_StoreField6MpnKStoreField__v_; -text: .text%__1cIValueMapKkill_field6MpnHciField__v_; -text: .text%__1cMGraphBuilderNarithmetic_op6MpnJValueType_nJBytecodesECode_pnKValueStack__v_; -text: .text%__1cJValueTypeEmeet6kMp0_1_; -text: .text%__1cHIntTypeEbase6kM_pnJValueType__: c1_Canonicalizer.o; -text: .text%__1cMArithmeticOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerPdo_ArithmeticOp6MpnMArithmeticOp__v_; -text: .text%__1cNCanonicalizerGdo_Op26MpnDOp2__v_; -text: .text%__1cNCanonicalizerTmove_const_to_right6MpnDOp2__v_; -text: .text%__1cMArithmeticOpEhash6kM_i_: c1_Instruction.o; -text: .text%__1cMArithmeticOpEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cMGraphBuilderJincrement6M_v_; -text: .text%__1cMGraphBuilderMload_indexed6MnJBasicType__v_; -text: .text%__1cLLoadIndexedFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerOdo_LoadIndexed6MpnLLoadIndexed__v_; -text: .text%__1cLLoadIndexedEhash6kM_i_: c1_Instruction.o; -text: .text%__1cLLoadIndexedEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cIConstantLas_Constant6M_p0_: c1_Instruction.o; -text: .text%__1cEGotoFvisit6MpnSInstructionVisitor__v_: c1_Canonicalizer.o; -text: .text%__1cNCanonicalizerHdo_Goto6MpnEGoto__v_; -text: .text%__1cCIRIoptimize6M_v_; -text: .text%__1cJOptimizer2t6MpnCIR__v_; -text: .text%__1cJOptimizerbHeliminate_conditional_expressions6M_v_; -text: .text%__1cCIRQiterate_preorder6MpnMBlockClosure__v_; -text: .text%__1cKBlockBeginQiterate_preorder6MpnMBlockClosure__v_; -text: .text%__1cKBlockBeginQiterate_preorder6MrnJboolArray_pnMBlockClosure__v_; -text: .text%__1cNCE_EliminatorIblock_do6MpnKBlockBegin__v_: c1_Optimizer.o; -text: .text%__1cLInstructionFas_If6M_pnCIf__: c1_Canonicalizer.o; -text: .text%__1cCIfFas_If6M_p0_: c1_Canonicalizer.o; -text: .text%__1cJOptimizerQeliminate_blocks6M_v_; -text: .text%__1cLBlockMergerIblock_do6MpnKBlockBegin__v_: c1_Optimizer.o; -text: .text%__1cEGotoHas_Goto6M_p0_: c1_Canonicalizer.o; -text: .text%__1cLInstructionHas_Goto6M_pnEGoto__: c1_Canonicalizer.o; -text: .text%__1cJOptimizerVeliminate_null_checks6M_v_; -text: .text%__1cTNullCheckEliminatorHiterate6MpnKBlockBegin__v_; -text: .text%__1cTNullCheckEliminatorLiterate_all6M_v_; -text: .text%__1cTNullCheckEliminatorLiterate_one6MpnKBlockBegin__v_; -text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%__1cQNullCheckVisitorNdo_BlockBegin6MpnKBlockBegin__v_; -text: .text%__1cQNullCheckVisitorHdo_Base6MpnEBase__v_; -text: .text%__1cQNullCheckVisitorHdo_Goto6MpnEGoto__v_; -text: .text%__1cFLocalFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorIdo_Local6MpnFLocal__v_; -text: .text%__1cQNullCheckVisitorMdo_LoadField6MpnJLoadField__v_; -text: .text%__1cTNullCheckEliminatorShandle_AccessField6MpnLAccessField__v_; -text: .text%__1cQNullCheckVisitorLdo_Constant6MpnIConstant__v_; -text: .text%__1cQNullCheckVisitorFdo_If6MpnCIf__v_; -text: .text%__1cQNullCheckVisitorPdo_ArithmeticOp6MpnMArithmeticOp__v_; -text: .text%__1cQNullCheckVisitorOdo_LoadIndexed6MpnLLoadIndexed__v_; -text: .text%__1cTNullCheckEliminatorShandle_LoadIndexed6MpnLLoadIndexed__v_; -text: .text%__1cQNullCheckVisitorNdo_StoreField6MpnKStoreField__v_; -text: .text%__1cQNullCheckVisitorJdo_Return6MpnGReturn__v_; -text: .text%__1cGBitMapQset_intersection6M0_v_; -text: .text%__1cLInstructionJas_Invoke6M_pnGInvoke__: c1_Canonicalizer.o; -text: .text%__1cLInstructionLas_NewArray6M_pnINewArray__: c1_Canonicalizer.o; -text: .text%__1cLInstructionOas_NewInstance6M_pnLNewInstance__: c1_Canonicalizer.o; -text: .text%__1cLInstructionQas_AccessMonitor6M_pnNAccessMonitor__: c1_Canonicalizer.o; -text: .text%__1cJBlockListPiterate_forward6MpnMBlockClosure__v_; -text: .text%__1cNResourceArrayEsort6MIpGpkv2_i_v_; -text: .text%__1cKStateSplitFscope6kM_pnHIRScope__; -text: .text%__1cIBlockEndOsubstitute_sux6MpnKBlockBegin_2_v_; -text: .text%__1cCIRMcompute_code6M_v_; -text: .text%__1cJBlockListJblocks_do6MpFpnKBlockBegin__v_v_; -text: .text%__1cFLocalIas_Local6M_p0_: c1_GraphBuilder.o; -text: .text%__1cLCompilationIemit_lir6M_v_; -text: .text%__1cLInstructionGas_Phi6M_pnDPhi__: c1_Canonicalizer.o; -text: .text%__1cMas_BasicType6FpnJValueType__nJBasicType__; -text: .text%__1cJValueTypeRas_ObjectConstant6M_pnOObjectConstant__: c1_Canonicalizer.o; -text: .text%__1cLLIR_OprFactKvalue_type6FpnJValueType__pnLLIR_OprDesc__; -text: .text%__1cJArrayTypeMas_ArrayType6M_p0_: c1_ValueType.o; -text: .text%__1cILIR_ListKshift_left6MpnLLIR_OprDesc_222_v_; -text: .text%__1cLLIR_AddressFscale6FnJBasicType__n0AFScale__; -text: .text%__1cORangeCheckStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cGLIR_OpLas_OpBranch6M_pnMLIR_OpBranch__: c1_LIR.o; -text: .text%__1cHIRScopeJmax_stack6kM_i_; -text: .text%__1cGLIR_OpGas_Op16M_pnHLIR_Op1__: c1_LIR.o; -text: .text%__1cLLIR_OpLabelKas_OpLabel6M_p0_: c1_LIR.o; -text: .text%__1cHLIR_Op1Gas_Op16M_p0_: c1_LIR.o; -text: .text%__1cMLIR_OpBranchLas_OpBranch6M_p0_: c1_LIR.o; -text: .text%__1cNResourceArrayJremove_at6MIi_v_; -text: .text%__1cNLIR_AssemblerJemit_code6MpnJBlockList__v_; -text: .text%__1cLInstructionLas_Constant6M_pnIConstant__: c1_Canonicalizer.o; -text: .text%__1cJValueTypeNas_DoubleType6M_pnKDoubleType__: c1_Canonicalizer.o; -text: .text%__1cJValueTypeMas_FloatType6M_pnJFloatType__: c1_Canonicalizer.o; -text: .text%__1cNLIR_AssemblerPcheck_codespace6M_v_; -text: .text%__1cNLIR_AssemblerMemit_opLabel6MpnLLIR_OpLabel__v_; -text: .text%__1cNLIR_AssemblerIemit_op06MpnHLIR_Op0__v_; -text: .text%__1cNLIR_AssemblerIemit_op26MpnHLIR_Op2__v_; -text: .text%__1cRC1_MacroAssemblerSinline_cache_check6MpnMRegisterImpl_2_v_; -text: .text%__1cRC1_MacroAssemblerOverified_entry6M_v_; -text: .text%__1cNLIR_AssemblerLbuild_frame6M_v_; -text: .text%__1cNLIR_AssemblerbBinitial_frame_size_in_bytes6M_i_; -text: .text%__1cRC1_MacroAssemblerLbuild_frame6Mi_v_; -text: .text%__1cRAbstractAssemblerbDgenerate_stack_overflow_check6Mi_v_; -text: .text%__1cIFrameMapQmake_new_address6kMi_nHAddress__; -text: .text%__1cNLIR_AssemblerIemit_op16MpnHLIR_Op1__v_; -text: .text%__1cNLIR_AssemblerKas_Address6MpnLLIR_Address__nHAddress__; -text: .text%__1cNLIR_AssemblerNemit_opBranch6MpnMLIR_OpBranch__v_; -text: .text%__1cNLIR_AssemblerJstack2reg6MpnLLIR_OprDesc_2nJBasicType__v_; -text: .text%__1cNLIR_AssemblerJmove_regs6MpnMRegisterImpl_2_v_; -text: .text%__1cNLIR_AssemblerbIadd_debug_info_for_null_check_here6MpnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerLcode_offset6kM_i_; -text: .text%__1cNLIR_AssemblerbDadd_debug_info_for_null_check6MipnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerOemit_code_stub6MpnICodeStub__v_; -text: .text%__1cVImplicitNullCheckStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerCpc6kM_pC_; -text: .text%__1cNCodeStubArrayIindex_of6kMkpnICodeStub__i_: c1_LIRAssembler.o; -text: .text%__1cORangeCheckStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerZadd_debug_info_for_branch6MpnMCodeEmitInfo__v_; -text: .text%__1cGOopMapJdeep_copy6M_p0_; -text: .text%__1cGOopMap2t6Mn0ANDeepCopyToken_p0_v_; -text: .text%__1cMOopMapStream2t6MpnGOopMap__v_; -text: .text%__1cMOopMapStreamJfind_next6M_v_; -text: .text%__1cYDebugInformationRecorderTcreate_scope_values6MpnNGrowableArray4CpnKScopeValue____pnKDebugToken__; -text: .text%__1cYDebugInformationRecorderWserialize_scope_values6MpnNGrowableArray4CpnKScopeValue____i_; -text: .text%__1cNLocationValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cILocationIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cYDebugInformationRecorderVcreate_monitor_values6MpnNGrowableArray4CpnMMonitorValue____pnKDebugToken__; -text: .text%__1cYDebugInformationRecorderYserialize_monitor_values6MpnNGrowableArray4CpnMMonitorValue____i_; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cLCompilationQemit_code_epilog6MpnNLIR_Assembler__v_; -text: .text%__1cNLIR_AssemblerUemit_slow_case_stubs6M_v_; -text: .text%__1cNLIR_AssemblerKemit_stubs6MpnMCodeStubList__v_; -text: .text%__1cVImplicitNullCheckStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cWImplicitExceptionTableGappend6MII_v_; -text: .text%__1cZresource_reallocate_bytes6FpcII_0_; -text: .text%__1cFArenaIArealloc6MpvII_1_; -text: .text%__1cNLIR_AssemblerNadd_call_info6MipnMCodeEmitInfo__v_; -text: .text%__1cQConstantIntValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cORangeCheckStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cNLIR_Assembler2T6M_v_; -text: .text%__1cFciEnvbOcheck_for_system_dictionary_modification6MpnIciMethod__v_; -text: .text%__1cLOopRecorderIoop_size6M_i_; -text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_; -text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; -text: .text%__1cHnmethod2n6FIi_pv_; -text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cIUniverseMnon_oop_word6F_pv_; -text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; -text: .text%__1cGPcDesc2t6Miii_v_; -text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cKNativeJumpbEcheck_verified_entry_alignment6FpC1_v_; -text: .text%__1cFciEnvKcompile_id6M_I_; -text: .text%__1cLCompilation2T6M_v_; -text: .text%__1cFArena2T6M_v_; -text: .text%__1cFArenaRdestruct_contents6M_v_; -text: .text%__1cICHeapObj2k6Fpv_v_; -text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; -text: .text%__1cMelapsedTimerDadd6M0_v_; -text: .text%__1cFciEnv2T6M_v_; -text: .text%__1cNCompileBrokerUpop_jni_handle_block6F_v_; -text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTimer_pnLCompileTask__v_; -text: .text%__1cHnmethodKtotal_size6kM_i_; -text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_; -text: .text%__1cSCompileTaskWrapper2T6M_v_; -text: .text%__1cNCompileBrokerJfree_task6FpnLCompileTask__v_; -text: .text%__1cLCompileTaskEfree6M_v_; -text: .text%__1cZget_mirror_from_signature6FnMmethodHandle_pnPSignatureStream_pnGThread__pnHoopDesc__; -text: .text%__1cPjava_lang_ClassQprimitive_mirror6FnJBasicType__pnHoopDesc__; -text: .text%__1cPSignatureStreamJas_symbol6MpnGThread__pnNsymbolOopDesc__; -text: .text%__1cKReflectionbFbasic_type_mirror_to_basic_type6FpnHoopDesc_pnGThread__nJBasicType__; -text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; -text: .text%__1cKReflectionTunbox_for_primitive6FpnHoopDesc_pnGjvalue_pnGThread__nJBasicType__; -text: .text%__1cXjava_lang_boxing_objectJget_value6FpnHoopDesc_pnGjvalue__nJBasicType__; -text: .text%__1cRComputeEntryStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_; -text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_; -text: .text%__1cQComputeCallStackHdo_void6M_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cLciSignatureHtype_at6kMi_pnGciType__; -text: .text%__1cMGraphBuilderMnew_instance6Mi_v_; -text: .text%__1cQciBytecodeStreamPget_klass_index6kM_i_; -text: .text%__1cVLoaderConstraintTableWfind_constrained_klass6MnMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cIciSymbolHbyte_at6Mi_i_; -text: .text%__1cPciInstanceKlassNloader_handle6M_pnI_jobject__; -text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; -text: .text%__1cMGraphBuilderMappend_split6MpnKStateSplit__pnLInstruction__; -text: .text%__1cLNewInstanceFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerOdo_NewInstance6MpnLNewInstance__v_; -text: .text%__1cKValueStackMclear_locals6M_v_; -text: .text%__1cMGraphBuilderIstack_op6MnJBytecodesECode__v_; -text: .text%__1cMGraphBuilderGinvoke6MnJBytecodesECode__v_; -text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__; -text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; -text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; -text: .text%__1cNciMethodKlassEmake6F_p0_; -text: .text%__1cQciBytecodeStreambAget_declared_method_holder6M_pnHciKlass__; -text: .text%__1cQciBytecodeStreamXget_method_holder_index6M_i_; -text: .text%__1cLciSignatureLreturn_type6kM_pnGciType__; -text: .text%__1cKValueStackNpop_arguments6Mi_pnGValues__; -text: .text%__1cGInvokeFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerJdo_Invoke6MpnGInvoke__v_; -text: .text%__1cGInvokeJas_Invoke6M_p0_: c1_Instruction.o; -text: .text%__1cNCanonicalizerIdo_Throw6MpnFThrow__v_; -text: .text%__1cQNullCheckVisitorOdo_NewInstance6MpnLNewInstance__v_; -text: .text%__1cTNullCheckEliminatorShandle_NewInstance6MpnLNewInstance__v_; -text: .text%__1cQNullCheckVisitorJdo_Invoke6MpnGInvoke__v_; -text: .text%__1cTNullCheckEliminatorNhandle_Invoke6MpnGInvoke__v_; -text: .text%__1cQNullCheckVisitorIdo_Throw6MpnFThrow__v_; -text: .text%__1cLInstructionGnegate6Fn0AJCondition__1_; -text: .text%__1cIVoidTypeLas_VoidType6M_p0_: c1_ValueType.o; -text: .text%__1cLNewInstanceKexact_type6kM_pnGciType__; -text: .text%__1cLNewInstanceOas_NewInstance6M_p0_: c1_Instruction.o; -text: .text%__1cPNewInstanceStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cMPatchingStubQalign_patch_site6MpnOMacroAssembler__v_; -text: .text%__1cOoop_RelocationLunpack_data6M_v_; -text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cNLIR_AssemblerUappend_patching_stub6MpnMPatchingStub__v_; -text: .text%__1cPNewInstanceStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerJemit_call6MpnOLIR_OpJavaCall__v_; -text: .text%__1cNLIR_AssemblerKalign_call6MnILIR_Code__v_; -text: .text%__1cICodeStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cJrelocInfoKset_format6Mi_v_; -text: .text%__1cMPatchingStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cRAbstractAssemblerGa_byte6Mi_v_; -text: .text%__1cRNativeGeneralJumpUinsert_unconditional6FpC1_v_; -text: .text%__1cJrelocInfobDchange_reloc_info_for_address6FpnNRelocIterator_pCn0AJrelocType_4_v_; -text: .text%__1cJrelocInfoIset_type6Mn0AJrelocType__v_; -text: .text%__1cPNewInstanceStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cJOopMapSetMgrow_om_data6M_v_; -text: .text%__1cWstatic_stub_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_; -text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_; -text: .text%__1cYinternal_word_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; -text: .text%__1cODataRelocationJset_value6MpC_v_: relocInfo.o; -text: .text%__1cODataRelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cKRelocationRpd_set_data_value6MpCi_v_; -text: .text%__1cKRelocationSpd_address_in_code6M_ppC_; -text: .text%__1cWstatic_stub_RelocationLunpack_data6M_v_; -text: .text%__1cOoop_RelocationIoop_addr6M_ppnHoopDesc__; -text: .text%__1cMPeriodicTaskOreal_time_tick6FI_v_; -text: .text%__1cPStatSamplerTaskEtask6M_v_: statSampler.o; -text: .text%__1cLStatSamplerOcollect_sample6F_v_; -text: .text%__1cLStatSamplerLsample_data6FpnMPerfDataList__v_; -text: .text%jni_GetPrimitiveArrayCritical: jni.o; -text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; -text: .text%jni_SetBooleanField: jni.o; -text: .text%__1cNFingerprinterIdo_float6M_v_: dump.o; -text: .text%JVM_IsNaN; -text: .text%__1cNFingerprinterJdo_double6M_v_: dump.o; -text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_; -text: .text%jni_GetArrayLength: jni.o; -text: .text%JVM_Read; -text: .text%__1cDhpiEread6FipvI_I_: jvm.o; -text: .text%__1cKJNIHandlesKmake_local6FpnGThread_pnHoopDesc__pnI_jobject__; -text: .text%__1cRComputeEntryStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackHdo_char6M_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; -text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cMGraphBuilderUclear_inline_bailout6M_v_; -text: .text%__1cMGraphBuilderWrecursive_inline_level6kMpnIciMethod__i_; -text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; -text: .text%__1cNCanonicalizerMdo_NullCheck6MpnJNullCheck__v_; -text: .text%__1cMGraphBuilderJScopeDataLnum_returns6M_i_; -text: .text%__1cMGraphBuilderJScopeDataXset_inline_cleanup_info6MpnKBlockBegin_pnLInstruction_pnKValueStack__v_; -text: .text%__1cMGraphBuilderJScopeDataQincr_num_returns6M_v_; -text: .text%__1cMGraphBuilderJpop_scope6M_v_; -text: .text%__1cLCompilationVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cMGraphBuilderOinline_bailout6Mpkc_v_; -text: .text%__1cLInstructionEprev6MpnKBlockBegin__p0_; -text: .text%__1cQNullCheckVisitorMdo_NullCheck6MpnJNullCheck__v_; -text: .text%__1cTNullCheckEliminatorQhandle_NullCheck6MpnJNullCheck__v_; -text: .text%__1cNSharedRuntimeQfind_callee_info6FpnKJavaThread_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; -text: .text%__1cLPcDescCacheLadd_pc_desc6MpnGPcDesc__v_; -text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKCompiledIC2t6MpnKNativeCall__v_; -text: .text%__1cKCompiledICOic_destination6kM_pC_; -text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_; -text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_; -text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_; -text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; -text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; -text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%JVM_DefineClassWithSource; -text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; -text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cPDictionaryEntryVadd_protection_domain6MpnHoopDesc__v_; -text: .text%JVM_GetClassCPEntriesCount; -text: .text%JVM_GetClassCPTypes; -text: .text%JVM_GetClassNameUTF; -text: .text%JVM_ReleaseUTF; -text: .text%JVM_FindClassFromClass; -text: .text%jni_IsSameObject: jni.o; -text: .text%JVM_GetClassFieldsCount; -text: .text%JVM_GetClassMethodsCount; -text: .text%JVM_GetMethodIxModifiers; -text: .text%JVM_GetMethodIxByteCodeLength; -text: .text%JVM_GetMethodIxByteCode; -text: .text%JVM_GetMethodIxExceptionTableLength; -text: .text%JVM_GetMethodIxLocalsCount; -text: .text%JVM_GetMethodIxArgsSize; -text: .text%JVM_GetMethodIxSignatureUTF; -text: .text%JVM_GetMethodIxMaxStack; -text: .text%JVM_GetMethodIxExceptionsCount; -text: .text%JVM_GetMethodIxExceptionIndexes; -text: .text%JVM_GetCPMethodNameUTF; -text: .text%JVM_GetCPMethodClassNameUTF; -text: .text%jni_NewLocalRef: jni.o; -text: .text%JVM_GetCPMethodModifiers; -text: .text%JVM_IsConstructorIx; -text: .text%JVM_GetCPMethodSignatureUTF; -text: .text%jni_DeleteGlobalRef: jni.o; -text: .text%__1cVLoaderConstraintTableJnew_entry6MIpnNsymbolOopDesc_pnMklassOopDesc_ii_pnVLoaderConstraintEntry__; -text: .text%jni_ToReflectedMethod: jni.o; -text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__; -text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodPset_return_type6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v_; -text: .text%jni_CallIntMethod: jni.o; -text: .text%jni_CallStaticVoidMethod: jni.o; -text: .text%jni_DetachCurrentThread; -text: .text%__1cQjava_lang_ThreadLthreadGroup6FpnHoopDesc__2_; -text: .text%JVM_MonitorNotifyAll; -text: .text%__1cNThreadServiceWcurrent_thread_exiting6FpnKJavaThread__v_; -text: .text%__1cLensure_join6FpnKJavaThread__v_: thread.o; -text: .text%__1cQjava_lang_ThreadNset_stillborn6FpnHoopDesc__v_; -text: .text%__1cKJavaThreadYremove_stack_guard_pages6M_v_; -text: .text%__1cHThreadsGremove6FpnKJavaThread__v_; -text: .text%__SLIP.DELETER__A: thread.o; -text: .text%__1cKJavaThread2T6M_v_; -text: .text%__1cHMonitor2T6M_v_; -text: .text%__1cFMutex2T6M_v_; -text: .text%lwp_cond_destroy: os_solaris.o; -text: .text%lwp_mutex_destroy: os_solaris.o; -text: .text%__1cUThreadSafepointStateHdestroy6FpnKJavaThread__v_; -text: .text%__1cGThread2T5B6M_v_; -text: .text%__1cCosLfree_thread6FpnIOSThread__v_; -text: .text%__1cIOSThread2T6M_v_; -text: .text%__1cIOSThreadKpd_destroy6M_v_; -text: .text%jni_DestroyJavaVM; -text: .text%jni_AttachCurrentThread; -text: .text%__1cKJavaThreadVinvoke_shutdown_hooks6M_v_; -text: .text%__1cLbefore_exit6FpnKJavaThread__v_; -text: .text%__1cNWatcherThreadEstop6F_v_; -text: .text%__1cLStatSamplerJdisengage6F_v_; -text: .text%__1cMPeriodicTaskJdisenroll6M_v_; -text: .text%__1cMPeriodicTask2T5B6M_v_; -text: .text%__1cLStatSamplerHdestroy6F_v_; -text: .text%__1cMPerfDataList2T6M_v_; -text: .text%__1cLJvmtiExportNpost_vm_death6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_death6F_v_; -text: .text%__1cCosXterminate_signal_thread6F_v_; -text: .text%__1cCosNsigexitnum_pd6F_i_; -text: .text%__1cCosNsignal_notify6Fi_v_; -text: .text%__1cQprint_statistics6F_v_; -text: .text%__1cIVMThreadXwait_for_vm_thread_exit6F_v_; -text: .text%__1cUSafepointSynchronizeFbegin6F_v_; -text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; -text: .text%__1cJTimeStampSticks_since_update6kM_x_; -text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_; -text: .text%__1cCosRcurrent_thread_id6F_i_; -text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fi_v_; -text: .text%__1cCosbCmake_polling_page_unreadable6F_v_; -text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; -text: .text%__1cUSafepointSynchronizeQdo_cleanup_tasks6F_v_; -text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_; -text: .text%__1cNObjectMonitorHis_busy6kM_i_; -text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_; -text: .text%__1cMCounterDecayFdecay6F_v_; -text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; -text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; -text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; -text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cNCompileBrokerQset_should_block6F_v_; -text: .text%__1cHVM_ExitbJwait_for_threads_in_native_to_block6F_i_; -text: .text%__1cIVMThreadHdestroy6F_v_; -text: .text%__SLIP.DELETER__A: vmThread.o; -text: .text%__1cSThreadLocalStorageRpd_invalidate_all6F_v_; -text: .text%__1cHVM_ExitNset_vm_exited6F_i_; -text: .text%__1cMexit_globals6F_v_; -text: .text%__1cPperfMemory_exit6F_v_; -text: .text%__1cPPerfDataManagerHdestroy6F_v_; -text: .text%__1cIPerfData2T6M_v_; -text: .text%__1cKPerfMemoryHdestroy6F_v_; -text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; -text: .text%__1cMostream_exit6F_v_; -text: .text%__SLIP.DELETER__C: ostream.o; -text: .text%JVM_Halt; -text: .text%__1cHvm_exit6Fi_v_; -text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; -text: .text%__1cGThreadMget_priority6Fkpk0_nOThreadPriority__; -text: .text%__1cCosMget_priority6FkpknGThread_rnOThreadPriority__nIOSReturn__; -text: .text%__1cCosTget_native_priority6FkpknGThread_pi_nIOSReturn__; -text: .text%__1cMVM_OperationSset_calling_thread6MpnGThread_nOThreadPriority__v_; -text: .text%__1cQVMOperationQdDueueOqueue_add_back6MipnMVM_Operation__v_; -text: .text%__1cQVMOperationQdDueueGinsert6MpnMVM_Operation_2_v_; -text: .text%__1cQVMOperationQdDueueGunlink6MpnMVM_Operation__v_; -text: .text%__1cCosJyield_all6Fi_v_; -text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_; -text: .text%__1cIVMThreadSevaluate_operation6MpnMVM_Operation__v_; -text: .text%__1cMVM_OperationIevaluate6M_v_; -text: .text%__1cHVM_ExitEdoit6M_v_; -text: .text%JVM_GetCPFieldSignatureUTF; -text: .text%JVM_Write; -text: .text%__1cDhpiFwrite6FipkvI_I_: jvm.o; -text: .text%JVM_GetMethodIxExceptionTableEntry; -text: .text%JVM_GetCPClassNameUTF; -text: .text%JVM_Sleep; -text: .text%__1cCosHSolarisTsetup_interruptible6F_pnKJavaThread__; -text: .text%__1cCosHSolarisTsetup_interruptible6FpnKJavaThread__v_; -text: .text%__1cCosHSolarisVcleanup_interruptible6FpnKJavaThread__v_; -text: .text%__1cQChunkPoolCleanerEtask6M_v_: allocation.o; -text: .text%__1cJChunkPoolMfree_all_but6MI_v_: allocation.o; -text: .text%JVM_GetClassContext; -text: .text%jni_IsAssignableFrom: jni.o; -text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; -text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cMGraphBuilderNload_constant6M_v_; -text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cJValueTypeLas_VoidType6M_pnIVoidType__: c1_Canonicalizer.o; -text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cRComputeEntryStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cEIfOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorHdo_IfOp6MpnEIfOp__v_; -text: .text%__1cOGenerateOopMapMdo_checkcast6M_v_; -text: .text%__1cMGraphBuilderLinstance_of6Mi_v_; -text: .text%__1cKInstanceOfFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerNdo_InstanceOf6MpnKInstanceOf__v_; -text: .text%__1cKInstanceOfNas_InstanceOf6M_p0_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderKcheck_cast6Mi_v_; -text: .text%__1cNCanonicalizerMdo_CheckCast6MpnJCheckCast__v_; -text: .text%__1cQNullCheckVisitorNdo_InstanceOf6MpnKInstanceOf__v_; -text: .text%__1cQNullCheckVisitorMdo_CheckCast6MpnJCheckCast__v_; -text: .text%__1cTSimpleExceptionStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerQemit_opTypeCheck6MpnPLIR_OpTypeCheck__v_; -text: .text%__1cTSimpleExceptionStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cTSimpleExceptionStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cJLoadFieldMas_LoadField6M_p0_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorGdo_Phi6MpnDPhi__v_; -text: .text%jni_GetEnv; -text: .text%jni_CallStaticBooleanMethod: jni.o; -text: .text%__1cOtypeArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_; -text: .text%__1cOGenerateOopMapIppop_any6Mi_v_; -text: .text%__1cYciExceptionHandlerStreamEnext6M_v_: c1_IR.o; -text: .text%__1cMGraphBuilderJScopeDataJxhandlers6kM_pnJXHandlers__; -text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; -text: .text%__1cTciConstantPoolCacheDget6Mi_pv_; -text: .text%__1cTciConstantPoolCacheEfind6Mi_i_; -text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; -text: .text%__1cMGraphBuilderHif_null6MpnJValueType_nLInstructionJCondition__v_; -text: .text%__1cOObjectConstantRas_ObjectConstant6M_p0_: c1_ValueType.o; -text: .text%__1cMas_ValueType6FnKciConstant__pnJValueType__; -text: .text%__1cLInstructionGmirror6Fn0AJCondition__1_; -text: .text%__1cNCanonicalizerNset_canonical6MpnLInstruction__v_; -text: .text%__1cKBlockBeginVadd_exception_handler6Mp0_v_; -text: .text%__1cIciObjectEhash6M_i_; -text: .text%__1cPciObjectFactoryPinsert_non_perm6Mrpn0ANNonPermObject_pnHoopDesc_pnIciObject__v_; -text: .text%__1cNClassConstantQas_ClassConstant6M_p0_: c1_ValueType.o; -text: .text%__1cMGraphBuilderIlogic_op6MpnJValueType_nJBytecodesECode__v_; -text: .text%__1cHLogicOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerKdo_LogicOp6MpnHLogicOp__v_; -text: .text%__1cHLogicOpEhash6kM_i_: c1_Instruction.o; -text: .text%__1cHLogicOpEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cMGraphBuilderHconvert6MnJBytecodesECode_nJBasicType_3_v_; -text: .text%__1cHConvertFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerKdo_Convert6MpnHConvert__v_; -text: .text%__1cHConvertEhash6kM_i_: c1_GraphBuilder.o; -text: .text%__1cHConvertEname6kM_pkc_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderNstore_indexed6MnJBasicType__v_; -text: .text%__1cIValueMapKkill_array6MpnJValueType__v_; -text: .text%__1cNCanonicalizerPdo_StoreIndexed6MpnMStoreIndexed__v_; -text: .text%__1cQNullCheckVisitorKdo_LogicOp6MpnHLogicOp__v_; -text: .text%__1cQNullCheckVisitorKdo_Convert6MpnHConvert__v_; -text: .text%__1cQNullCheckVisitorPdo_StoreIndexed6MpnMStoreIndexed__v_; -text: .text%__1cTNullCheckEliminatorThandle_StoreIndexed6MpnMStoreIndexed__v_; -text: .text%__1cLLIR_OprFactQdummy_value_type6FpnJValueType__pnLLIR_OprDesc__; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_pnI_jobject__v_; -text: .text%__1cNLIR_AssemblerIlogic_op6MnILIR_Code_pnLLIR_OprDesc_33_v_; -text: .text%__1cNLIR_AssemblerOemit_opConvert6MpnNLIR_OpConvert__v_; -text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cUDebugInfoWriteStreamMwrite_handle6MpnI_jobject__v_; -text: .text%jni_CallStaticVoidMethodV: jni.o; -text: .text%JVM_GetLastErrorString; -text: .text%jni_Throw: jni.o; -text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_; -text: .text%JVM_DisableCompiler; -text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%JVM_Available; -text: .text%__1cOGenerateOopMapKpp_new_ref6MpnNCellTypeState_i_v_; -text: .text%__1cLArrayLengthFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerOdo_ArrayLength6MpnLArrayLength__v_; -text: .text%__1cLArrayLengthEhash6kM_i_: c1_GraphBuilder.o; -text: .text%__1cLArrayLengthEname6kM_pkc_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderOnew_type_array6M_v_; -text: .text%__1cMNewTypeArrayFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerPdo_NewTypeArray6MpnMNewTypeArray__v_; -text: .text%__1cNCanonicalizerMdo_Intrinsic6MpnJIntrinsic__v_; -text: .text%__1cQNullCheckVisitorOdo_ArrayLength6MpnLArrayLength__v_; -text: .text%__1cTNullCheckEliminatorShandle_ArrayLength6MpnLArrayLength__v_; -text: .text%__1cQNullCheckVisitorPdo_NewTypeArray6MpnMNewTypeArray__v_; -text: .text%__1cTNullCheckEliminatorPhandle_NewArray6MpnINewArray__v_; -text: .text%__1cQNullCheckVisitorMdo_Intrinsic6MpnJIntrinsic__v_; -text: .text%__1cQciTypeArrayKlassEmake6FnJBasicType__p0_; -text: .text%__1cQciTypeArrayKlassJmake_impl6FnJBasicType__p0_; -text: .text%__1cJLoadFieldKexact_type6kM_pnGciType__; -text: .text%__1cJLoadFieldNdeclared_type6kM_pnGciType__; -text: .text%__1cMNewTypeArrayKexact_type6kM_pnGciType__; -text: .text%__1cLArrayLengthOas_ArrayLength6M_p0_: c1_GraphBuilder.o; -text: .text%__1cILIR_ListUunsigned_shift_right6MpnLLIR_OprDesc_222_v_; -text: .text%__1cQNewTypeArrayStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cNLIR_AssemblerQemit_alloc_array6MpnQLIR_OpAllocArray__v_; -text: .text%__1cNLIR_AssemblerSarray_element_size6kMnJBasicType__nHAddressLScaleFactor__; -text: .text%__1cRC1_MacroAssemblerOallocate_array6MpnMRegisterImpl_222inHAddressLScaleFactor_2rnFLabel__v_; -text: .text%__1cRC1_MacroAssemblerMtry_allocate6MpnMRegisterImpl_2i22rnFLabel__v_; -text: .text%__1cQNewTypeArrayStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerOemit_arraycopy6MpnPLIR_OpArrayCopy__v_; -text: .text%__1cMciArrayKlassMelement_type6M_pnGciType__; -text: .text%__1cNArrayCopyStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cQNewTypeArrayStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cNArrayCopyStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_; -text: .text%__1cKoopFactoryUnew_compiledICHolder6FnMmethodHandle_nLKlassHandle_pnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cVcompiledICHolderKlassIallocate6MpnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cXvirtual_call_RelocationJfirst_oop6M_pC_; -text: .text%__1cXvirtual_call_RelocationJoop_limit6M_pC_; -text: .text%__1cNRelocIteratorJset_limit6MpC_v_; -text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cGICStubIset_stub6MpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_; -text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; -text: .text%__1cRInlineCacheBufferLnew_ic_stub6F_pnGICStub__; -text: .text%JVM_NewArray; -text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__; -text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; -text: .text%__1cMGraphBuilderQnew_object_array6M_v_; -text: .text%__1cONewObjectArrayFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerRdo_NewObjectArray6MpnONewObjectArray__v_; -text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__: ciObjArrayKlass.o; -text: .text%__1cMGraphBuilderIshift_op6MpnJValueType_nJBytecodesECode__v_; -text: .text%__1cHShiftOpFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerKdo_ShiftOp6MpnHShiftOp__v_; -text: .text%__1cHShiftOpEhash6kM_i_: c1_GraphBuilder.o; -text: .text%__1cHShiftOpEname6kM_pkc_: c1_GraphBuilder.o; -text: .text%__1cLLoadIndexedOas_LoadIndexed6M_p0_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorRdo_NewObjectArray6MpnONewObjectArray__v_; -text: .text%__1cQNullCheckVisitorKdo_ShiftOp6MpnHShiftOp__v_; -text: .text%__1cHciKlassMaccess_flags6M_i_; -text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_; -text: .text%__1cPciObjArrayKlassJmake_impl6FpnHciKlass__p0_; -text: .text%__1cSNewObjectArrayStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerOemit_alloc_obj6MpnOLIR_OpAllocObj__v_; -text: .text%__1cRC1_MacroAssemblerPallocate_object6MpnMRegisterImpl_22ii2rnFLabel__v_; -text: .text%__1cNLIR_AssemblerOmembar_release6M_v_; -text: .text%__1cNLIR_AssemblerGmembar6M_v_; -text: .text%__1cSNewObjectArrayStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerOmembar_acquire6M_v_; -text: .text%__1cSNewObjectArrayStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cNSignatureInfoIdo_short6M_v_: bytecode.o; -text: .text%jni_MonitorEnter: jni.o; -text: .text%__1cSObjectSynchronizerJjni_enter6FnGHandle_pnGThread__v_; -text: .text%jni_MonitorExit: jni.o; -text: .text%__1cSObjectSynchronizerIjni_exit6FpnHoopDesc_pnGThread__v_; -text: .text%jni_CallVoidMethod: jni.o; -text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_: jni.o; -text: .text%jni_CallStaticBooleanMethodV: jni.o; -text: .text%JVM_GetStackTraceDepth; -text: .text%__1cTjava_lang_ThrowableVget_stack_trace_depth6FpnHoopDesc_pnGThread__i_; -text: .text%__1cTjava_lang_ThrowableJbacktrace6FpnHoopDesc__2_; -text: .text%JVM_GetStackTraceElement; -text: .text%__1cTjava_lang_ThrowableXget_stack_trace_element6FpnHoopDesc_ipnGThread__2_; -text: .text%__1cbBjava_lang_StackTraceElementGcreate6FnMmethodHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cbBjava_lang_StackTraceElementOset_methodName6FpnHoopDesc_2_v_; -text: .text%__1cbBjava_lang_StackTraceElementMset_fileName6FpnHoopDesc_2_v_; -text: .text%__1cNmethodOopDescUline_number_from_bci6kMi_i_; -text: .text%__1cbECompressedLineNumberReadStream2t6MpC_v_; -text: .text%__1cbBjava_lang_StackTraceElementOset_lineNumber6FpnHoopDesc_i_v_; -text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; -text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_; -text: .text%JVM_EnableCompiler; -text: .text%__1cJStubQdDueueKremove_all6M_v_; -text: .text%__1cJStubQdDueueMremove_first6Mi_v_; -text: .text%__1cJStubQdDueueMremove_first6M_v_; -text: .text%__1cPICStubInterfaceIfinalize6MpnEStub__v_: icBuffer.o; -text: .text%__1cGICStubIfinalize6M_v_; -text: .text%__1cGICStubKcached_oop6kM_pnHoopDesc__; -text: .text%__1cRInlineCacheBufferUic_buffer_cached_oop6FpC_pnHoopDesc__; -text: .text%__1cKCompiledICOset_cached_oop6MpnHoopDesc__v_; -text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_; -text: .text%__1cGICStubLdestination6kM_pC_; -text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_; -text: .text%__1cPICStubInterfaceEsize6kMpnEStub__i_: icBuffer.o; -text: .text%__1cUSafepointSynchronizeDend6F_v_; -text: .text%__1cCosbAmake_polling_page_readable6F_v_; -text: .text%__1cUThreadSafepointStateHrestart6M_v_; -text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; -text: .text%__1cKJavaThreadbScheck_safepoint_and_suspend_for_native_trans6Fp0_v_; -text: .text%__1cIciMethodMnative_entry6M_pC_; -text: .text%__1cOMacroAssemblerHfat_nop6M_v_; -text: .text%jni_CallObjectMethodV: jni.o; -text: .text%jni_SetObjectField: jni.o; -text: .text%jni_IsInstanceOf: jni.o; -text: .text%jni_GetStaticObjectField: jni.o; -text: .text%__1cKGenerationInext_gen6kM_p0_; -text: .text%__1cQDefNewGenerationTallocate_from_space6MI_pnIHeapWord__; -text: .text%__1cPVM_GC_OperationZacquire_pending_list_lock6M_v_; -text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; -text: .text%__1cbAVM_GenCollectForAllocationEdoit6M_v_; -text: .text%__1cKManagementJtimestamp6F_x_; -text: .text%__1cTContiguousSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cTContiguousSpacePoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cbBSurvivorContiguousSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cbBSurvivorContiguousSpacePoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cOGenerationPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cOGenerationPoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cNCollectedHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; -text: .text%__1cPGlobalTLABStatsHpublish6M_v_; -text: .text%__1cSAllocationProfilerViterate_since_last_gc6F_v_; -text: .text%__1cUGenGCPrologueClosureNdo_generation6MpnKGeneration__v_: genCollectedHeap.o; -text: .text%__1cQDefNewGenerationKshort_name6kM_pkc_: defNewGeneration.o; -text: .text%__1cQGenCollectedHeapKsave_marks6M_v_; -text: .text%__1cQDefNewGenerationKsave_marks6M_v_; -text: .text%__1cbCOneContigSpaceCardGenerationKsave_marks6M_v_; -text: .text%__1cKGenerationYmax_contiguous_available6kM_I_; -text: .text%__1cbCOneContigSpaceCardGenerationUcontiguous_available6kM_I_; -text: .text%__1cQDefNewGenerationbIinit_assuming_no_promotion_failure6M_v_; -text: .text%__1cQDefNewGenerationOIsAliveClosure2t6MpnKGeneration__v_; -text: .text%__1cSScanWeakRefClosure2t6MpnQDefNewGeneration__v_; -text: .text%__1cULRUCurrentHeapPolicy2t6M_v_; -text: .text%__1cQDefNewGenerationbCFastEvacuateFollowersClosure2t6MpnQGenCollectedHeap_ip0pnPFastScanClosure_6_v_; -text: .text%__1cKSharedHeapbAchange_strong_roots_parity6M_v_; -text: .text%__1cPFastScanClosureGdo_oop6MppnHoopDesc__v_: defNewGeneration.o; -text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; -text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; -text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; -text: .text%__1cFframebDinterpreter_frame_monitor_end6kM_pnPBasicObjectLock__; -text: .text%__1cFframebFinterpreter_frame_monitor_begin6kM_pnPBasicObjectLock__; -text: .text%__1cRInterpreterOopMap2t6M_v_; -text: .text%__1cRInterpreterOopMapKinitialize6M_v_; -text: .text%__1cNmethodOopDescImask_for6MipnRInterpreterOopMap__v_; -text: .text%__1cNinstanceKlassImask_for6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cLOopMapCache2t6M_v_; -text: .text%__1cLOopMapCacheGlookup6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cLOopMapCacheIentry_at6kMi_pnQOopMapCacheEntry__; -text: .text%__1cQOopMapCacheEntryEfill6MnMmethodHandle_i_v_; -text: .text%__1cQOopMapCacheEntryFflush6M_v_; -text: .text%__1cQOopMapCacheEntryTdeallocate_bit_mask6M_v_; -text: .text%__1cQOopMapCacheEntryRallocate_bit_mask6M_v_; -text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pIi_v_: oopMapCache.o; -text: .text%__1cTMaskFillerForNativeLpass_object6M_v_: oopMapCache.o; -text: .text%__1cRInterpreterOopMapNresource_copy6MpnQOopMapCacheEntry__v_; -text: .text%__1cRInterpreterOopMapLiterate_oop6MpnNOffsetClosure__v_; -text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_: frame.o; -text: .text%__1cRInterpreterOopMap2T6M_v_; -text: .text%__1cTOopMapForCacheEntry2t6MnMmethodHandle_ipnQOopMapCacheEntry__v_; -text: .text%__1cTOopMapForCacheEntryLcompute_map6MpnGThread__v_; -text: .text%__1cOGenerateOopMapVresult_for_basicblock6Mi_v_; -text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; -text: .text%__1cQOopMapCacheEntryIset_mask6MpnNCellTypeState_2i_v_; -text: .text%__1cFframeNoops_entry_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cPJavaCallWrapperHoops_do6MpnKOopClosure__v_; -text: .text%__1cTMaskFillerForNativeJpass_long6M_v_: oopMapCache.o; -text: .text%__1cFframebHnext_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; -text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; -text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_; -text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_; -text: .text%__1cQComputeCallStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; -text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; -text: .text%__1cRComputeEntryStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cQVMOperationQdDueueHoops_do6MpnKOopClosure__v_; -text: .text%__1cQVMOperationQdDueueNqueue_oops_do6MipnKOopClosure__v_; -text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; -text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; -text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_; -text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_; -text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_; -text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; -text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollectorXoops_do_for_all_threads6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; -text: .text%__1cKDictionaryHoops_do6MpnKOopClosure__v_; -text: .text%__1cPDictionaryEntrybDprotection_domain_set_oops_do6MpnKOopClosure__v_: dictionary.o; -text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cVLoaderConstraintTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cUCompactingPermGenGenUyounger_refs_iterate6MpnQOopsInGenClosure__v_; -text: .text%__1cbCOneContigSpaceCardGenerationUyounger_refs_iterate6MpnQOopsInGenClosure__v_; -text: .text%__1cKGenerationbDyounger_refs_in_space_iterate6MpnFSpace_pnQOopsInGenClosure__v_; -text: .text%__1cLCardTableRSbDyounger_refs_in_space_iterate6MpnFSpace_pnQOopsInGenClosure__v_; -text: .text%__1cPContiguousSpaceLnew_dcto_cl6MpnKOopClosure_nRCardTableModRefBSOPrecisionStyle_pnIHeapWord__pnVDirtyCardToOopClosure__; -text: .text%__1cJMemRegionMintersection6kMk0_0_; -text: .text%__1cYClearNoncleanCardWrapperMdo_MemRegion6MnJMemRegion__v_: cardTableRS.o; -text: .text%__1cVDirtyCardToOopClosureMdo_MemRegion6MnJMemRegion__v_; -text: .text%__1cbBBlockOffsetArrayContigSpaceSblock_start_unsafe6kMpkv_pnIHeapWord__; -text: .text%__1cPContiguousSpaceKblock_size6kMpknIHeapWord__I_; -text: .text%__1cUContiguousSpaceDCTOCOget_actual_top6MpnIHeapWord_2_2_; -text: .text%__1cPFiltering_DCTOCPwalk_mem_region6MnJMemRegion_pnIHeapWord_3_v_; -text: .text%__1cUContiguousSpaceDCTOCXwalk_mem_region_with_cl6MnJMemRegion_pnIHeapWord_3pnQFilteringClosure__v_; -text: .text%__1cLmethodKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cSinstanceKlassKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cNinstanceKlassViterate_static_fields6MpnKOopClosure__v_; -text: .text%__1cLklassVtablePoop_oop_iterate6MpnKOopClosure__v_; -text: .text%__1cQFilteringClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cLklassItablePoop_oop_iterate6MpnKOopClosure__v_; -text: .text%__1cKklassKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cNinstanceKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_; -text: .text%__1cWconstantPoolCacheKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cWconstantPoolCacheKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cWConstantPoolCacheEntryLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cSobjArrayKlassKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cParrayKlassKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cNobjArrayKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_; -text: .text%__1cNinstanceKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_; -text: .text%__1cNobjArrayKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_; -text: .text%__1cOtypeArrayKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cQconstMethodKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cLmethodKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cQconstMethodKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cRconstantPoolKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cLsymbolKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cLsymbolKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cRconstantPoolKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cWconstantPoolCacheKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cWConstantPoolCacheEntryNoop_iterate_m6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cOtypeArrayKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cSinstanceKlassKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cNinstanceKlassViterate_static_fields6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cLklassVtableRoop_oop_iterate_m6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cLklassItableRoop_oop_iterate_m6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cKklassKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cRInterpreterOopMapLoop_iterate6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cRInterpreterOopMapLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cVcompiledICHolderKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cVcompiledICHolderKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cLCardTableRSUyounger_refs_iterate6MpnKGeneration_pnQOopsInGenClosure__v_; -text: .text%__1cMSubTasksDoneTall_tasks_completed6M_v_; -text: .text%__1cQDefNewGenerationbCFastEvacuateFollowersClosureHdo_void6M_v_; -text: .text%__1cQGenCollectedHeapbCoop_since_save_marks_iterate6MipnPFastScanClosure_2_v_; -text: .text%__1cQDefNewGenerationbFoop_since_save_marks_iterate_nv6MpnPFastScanClosure__v_; -text: .text%__1cPContiguousSpacebFoop_since_save_marks_iterate_nv6MpnPFastScanClosure__v_; -text: .text%__1cNobjArrayKlassSoop_oop_iterate_nv6MpnHoopDesc_pnPFastScanClosure__i_; -text: .text%__1cNinstanceKlassSoop_oop_iterate_nv6MpnHoopDesc_pnPFastScanClosure__i_; -text: .text%__1cQinstanceRefKlassSoop_oop_iterate_nv6MpnHoopDesc_pnPFastScanClosure__i_; -text: .text%__1cbCOneContigSpaceCardGenerationbFoop_since_save_marks_iterate_nv6MpnPFastScanClosure__v_; -text: .text%__1cQDefNewGenerationUFastKeepAliveClosure2t6Mp0pnSScanWeakRefClosure__v_; -text: .text%__1cQDefNewGenerationQKeepAliveClosure2t6MpnSScanWeakRefClosure__v_; -text: .text%__1cbBjava_lang_ref_SoftReferenceFclock6F_x_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJtimestamp6FpnHoopDesc__x_; -text: .text%__1cQDefNewGenerationUFastKeepAliveClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cOJNIHandleBlockMweak_oops_do6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cQDefNewGenerationLswap_spaces6M_v_; -text: .text%__1cIageTablebAcompute_tenuring_threshold6MI_i_; -text: .text%__1cVAdaptivePaddedAverageGsample6Mf_v_; -text: .text%__1cbCOneContigSpaceCardGenerationEfree6kM_I_; -text: .text%__1cQDefNewGenerationQcompute_new_size6M_v_; -text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; -text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; -text: .text%__1cNCollectedHeapQresize_all_tlabs6M_v_; -text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; -text: .text%__1cWThreadLocalAllocBufferGresize6M_v_; -text: .text%__1cUGenGCEpilogueClosureNdo_generation6MpnKGeneration__v_: genCollectedHeap.o; -text: .text%__1cRTenuredGenerationPupdate_counters6M_v_; -text: .text%__1cUCompactingPermGenGenPupdate_counters6M_v_; -text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; -text: .text%__1cNJvmtiGCMarker2T6M_v_; -text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; -text: .text%__1cPVM_GC_OperationbKrelease_and_notify_pending_list_lock6M_v_; -text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_: jni.o; -text: .text%jni_GetIntArrayRegion: jni.o; -text: .text%jni_SetIntArrayRegion: jni.o; -text: .text%jni_PushLocalFrame: jni.o; -text: .text%jni_PopLocalFrame: jni.o; -text: .text%__1cMGraphBuilderJnegate_op6MpnJValueType__v_; -text: .text%__1cINegateOpFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerLdo_NegateOp6MpnINegateOp__v_; -text: .text%__1cQNullCheckVisitorLdo_NegateOp6MpnINegateOp__v_; -text: .text%__1cILIR_ListLstore_check6MpnLLIR_OprDesc_2222pnMCodeEmitInfo__v_; -text: .text%__1cXArrayStoreExceptionStub2t6MpnMCodeEmitInfo__v_; -text: .text%__1cILIR_ListLshift_right6MpnLLIR_OprDesc_222_v_; -text: .text%__1cXArrayStoreExceptionStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cXArrayStoreExceptionStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerEleal6MpnLLIR_OprDesc_2_v_; -text: .text%__1cNLIR_AssemblerGnegate6MpnLLIR_OprDesc_2_v_; -text: .text%__1cXArrayStoreExceptionStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_; -text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cHciKlassSsuper_check_offset6M_I_; -text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; -text: .text%__1cKCompiledICMset_to_clean6M_v_; -text: .text%__1cKCompiledICMstub_address6kM_pC_; -text: .text%__1cGICStubFclear6M_v_; -text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cRInlineCacheBufferSic_destination_for6FpnKCompiledIC__pC_; -text: .text%__1cIRuntime1Jarraycopy6FpnHoopDesc_i2ii_i_; -text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_; -text: .text%jni_NewWeakGlobalRef: jni.o; -text: .text%__1cKJNIHandlesQmake_weak_global6FnGHandle__pnI_jobject__; -text: .text%__1cMLinkResolverbBlookup_method_in_interfaces6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%jni_CallIntMethodV: jni.o; -text: .text%Unsafe_GetObject; -text: .text%jni_CallBooleanMethod: jni.o; -text: .text%jni_CallVoidMethodV: jni.o; -text: .text%JVM_GetClassDeclaredMethods; -text: .text%JVM_InvokeMethod; -text: .text%__1cKReflectionNinvoke_method6FpnHoopDesc_nGHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; -text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; -text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; -text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; -text: .text%JVM_IsInterrupted; -text: .text%__1cTresource_free_bytes6FpcI_v_; -text: .text%__1cRComputeEntryStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cJAssemblerGfist_s6MnHAddress__v_; -text: .text%__1cNLIR_AssemblerJreset_FPU6M_v_; -text: .text%__1cNLIR_AssemblerIemit_op36MpnHLIR_Op3__v_; -text: .text%__1cNLIR_AssemblerParithmetic_idiv6MnILIR_Code_pnLLIR_OprDesc_333pnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerXadd_debug_info_for_div06MipnMCodeEmitInfo__v_; -text: .text%__1cNDivByZeroStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNDivByZeroStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cNSharedRuntimeVhandle_ic_miss_helper6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2t6M_v_; -text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; -text: .text%__1cKVtableStub2n6FIi_pv_; -text: .text%__1cKVtableStubRpd_code_alignment6F_i_; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_; -text: .text%Unsafe_EnsureClassInitialized; -text: .text%Unsafe_StaticFieldOffset; -text: .text%Unsafe_StaticFieldBaseFromField; -text: .text%Unsafe_GetIntVolatile; -text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; -text: .text%__1cMGraphBuilderMtable_switch6M_v_; -text: .text%__1cLTableSwitchFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerOdo_TableSwitch6MpnLTableSwitch__v_; -text: .text%__1cQNullCheckVisitorOdo_TableSwitch6MpnLTableSwitch__v_; -text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cSCompiledStaticCallMset_to_clean6M_v_; -text: .text%__1cYjava_lang_reflect_MethodNset_signature6FpnHoopDesc_2_v_; -text: .text%JVM_InitializeSocketLibrary; -text: .text%__1cDhpiZinitialize_socket_library6F_i_; -text: .text%JVM_Socket; -text: .text%Unsafe_PageSize; -text: .text%__1cNFingerprinterHdo_byte6M_v_: dump.o; -text: .text%Unsafe_SetMemory; -text: .text%__1cNSharedRuntimeElrem6Fxx_x_; -text: .text%Unsafe_DefineClass1; -text: .text%JVM_DefineClass; -text: .text%__1cVLoaderConstraintTableYextend_loader_constraint6MpnVLoaderConstraintEntry_nGHandle_pnMklassOopDesc__v_; -text: .text%__1cVLoaderConstraintTablebHensure_loader_constraint_capacity6MpnVLoaderConstraintEntry_i_v_; -text: .text%__1cIRuntime1Tprimitive_arraycopy6FpnIHeapWord_2i_v_; -text: .text%__1cRComputeEntryStackHdo_char6M_v_: generateOopMap.o; -text: .text%jni_NewDirectByteBuffer; -text: .text%lookupDirectBufferClasses: jni.o; -text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__: jni.o; -text: .text%jni_GetDoubleArrayRegion: jni.o; -text: .text%__1cNSignatureInfoJdo_double6M_v_: bytecode.o; -text: .text%__1cXJNI_ArgumentPusherVaArgJget_float6M_v_: jni.o; -text: .text%__1cQComputeCallStackHdo_byte6M_v_: generateOopMap.o; -text: .text%__1cFKlassQup_cast_abstract6M_p0_; -text: .text%__1cRComputeEntryStackHdo_byte6M_v_: generateOopMap.o; -text: .text%__1cNSharedRuntimeDd2i6Fd_i_; -text: .text%__1cSInterpreterRuntimeWslow_signature_handler6FpnKJavaThread_pnNmethodOopDesc_pi5_pC_; -text: .text%jni_GetFloatArrayRegion: jni.o; -text: .text%jni_GetCharArrayRegion: jni.o; -text: .text%jni_SetFloatField: jni.o; -text: .text%jni_NewFloatArray: jni.o; -text: .text%jni_SetFloatArrayRegion: jni.o; -text: .text%JVM_GetFieldIxModifiers; -text: .text%JVM_GetCPFieldClassNameUTF; -text: .text%JVM_GetCPFieldModifiers; -text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_; -text: .text%JVM_MonitorNotify; -text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; -text: .text%__1cKValueStackGunlock6M_i_; -text: .text%__1cQMonitorEnterStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerJemit_lock6MpnKLIR_OpLock__v_; -text: .text%__1cQMonitorEnterStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cMMonitorValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cRC1_MacroAssemblerNunlock_object6MpnMRegisterImpl_22rnFLabel__v_; -text: .text%__1cQMonitorEnterStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cPMonitorExitStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%jni_NewIntArray: jni.o; -text: .text%__1cNCollectedHeapYlarge_typearray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: typeArrayKlass.o; -text: .text%__1cSobjArrayKlassKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cQinstanceRefKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_; -text: .text%__1cRTenuredGenerationKshort_name6kM_pkc_: tenuredGeneration.o; -text: .text%__1cRTenuredGenerationbJretire_alloc_buffers_before_full_gc6M_v_; -text: .text%__1cJCodeCacheLgc_prologue6F_v_; -text: .text%__1cHThreadsLgc_prologue6F_v_; -text: .text%__1cKJavaThreadLgc_prologue6M_v_; -text: .text%__1cKJavaThreadJframes_do6MpFpnFframe_pknLRegisterMap__v_v_; -text: .text%__1cRframe_gc_prologue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_prologue6M_v_; -text: .text%__1cbCOneContigSpaceCardGenerationLused_region6kM_nJMemRegion__; -text: .text%__1cMGenMarkSweepPallocate_stacks6F_v_; -text: .text%__1cQGenCollectedHeapOgather_scratch6MpnKGeneration_I_pnMScratchBlock__; -text: .text%__1cQDefNewGenerationScontribute_scratch6MrpnMScratchBlock_pnKGeneration_I_v_; -text: .text%__1cJMarkSweepRFollowRootClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cLklassVtableToop_follow_contents6M_v_; -text: .text%__1cKklassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJMarkSweepXrevisit_weak_klass_link6FpnFKlass__v_; -text: .text%__1cJMarkSweepMfollow_stack6F_v_; -text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cSinstanceKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNinstanceKlassUfollow_static_fields6M_v_; -text: .text%__1cLklassItableToop_follow_contents6M_v_; -text: .text%__1cJMarkSweepNpreserve_mark6FpnHoopDesc_pnLmarkOopDesc__v_; -text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cOtypeArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJMarkSweepSMarkAndPushClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cSobjArrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cRconstantPoolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWConstantPoolCacheEntryPfollow_contents6M_v_; -text: .text%__1cLmethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryYalways_strong_classes_do6FpnKOopClosure__v_; -text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryPplaceholders_do6FpnKOopClosure__v_; -text: .text%__1cVLoaderConstraintTableYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cJMarkSweepQKeepAliveClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_: markSweep.o; -text: .text%__1cVLoaderConstraintTableYpurge_loader_constraints6MpnRBoolObjectClosure__v_; -text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; -text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; -text: .text%__1cICodeHeapJnext_free6kMpnJHeapBlock__pv_; -text: .text%__1cJCodeCacheFalive6FpnICodeBlob__2_; -text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_; -text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__; -text: .text%__1cICodeHeapKnext_block6kMpnJHeapBlock__2_; -text: .text%__1cOoop_RelocationJoop_value6M_pnHoopDesc__; -text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_; -text: .text%__1cFKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cNinstanceKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; -text: .text%__1cMGenMarkSweepRmark_sweep_phase26F_v_; -text: .text%__1cQGenCollectedHeapWprepare_for_compaction6M_v_; -text: .text%__1cKGenerationWprepare_for_compaction6MpnMCompactPoint__v_; -text: .text%__1cPContiguousSpaceWprepare_for_compaction6MpnMCompactPoint__v_; -text: .text%__1cWOffsetTableContigSpaceUinitialize_threshold6M_pnIHeapWord__; -text: .text%__1cQCompactibleSpaceHforward6MpnHoopDesc_IpnMCompactPoint_pnIHeapWord__6_; -text: .text%__1cWOffsetTableContigSpacePcross_threshold6MpnIHeapWord_2_2_; -text: .text%__1cQDefNewGenerationWfirst_compaction_space6kM_pnQCompactibleSpace__: defNewGeneration.o; -text: .text%__1cbCOneContigSpaceCardGenerationWfirst_compaction_space6kM_pnQCompactibleSpace__: compactingPermGenGen.o; -text: .text%__1cMGenMarkSweepRmark_sweep_phase36Fi_v_; -text: .text%__1cUCompactingPermGenGenTpre_adjust_pointers6M_v_; -text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; -text: .text%__1cJMarkSweepMadjust_marks6F_v_; -text: .text%__1cYGenAdjustPointersClosureNdo_generation6MpnKGeneration__v_: genMarkSweep.o; -text: .text%__1cKGenerationPadjust_pointers6M_v_; -text: .text%__1cVAdjustPointersClosureIdo_space6MpnFSpace__v_: generation.o; -text: .text%__1cQCompactibleSpacePadjust_pointers6M_v_; -text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQinstanceRefKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cUCompactingPermGenGenPadjust_pointers6M_v_; -text: .text%__1cKklassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLsymbolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLklassVtableToop_adjust_pointers6M_v_; -text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cRconstantPoolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQconstMethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSinstanceKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassUadjust_static_fields6M_v_; -text: .text%__1cLklassItableToop_adjust_pointers6M_v_; -text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cWConstantPoolCacheEntryPadjust_pointers6M_v_; -text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cMGenMarkSweepRmark_sweep_phase46F_v_; -text: .text%__1cUCompactingPermGenGenHcompact6M_v_; -text: .text%__1cQCompactibleSpaceHcompact6M_v_; -text: .text%__1cRGenCompactClosureNdo_generation6MpnKGeneration__v_: genMarkSweep.o; -text: .text%__1cKGenerationHcompact6M_v_; -text: .text%__1cUCompactingPermGenGenMpost_compact6M_v_; -text: .text%__1cJMarkSweepNrestore_marks6F_v_; -text: .text%__1cMGenMarkSweepRdeallocate_stacks6F_v_; -text: .text%__1cLCardTableRSFclear6MnJMemRegion__v_: cardTableRS.o; -text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; -text: .text%__1cRCardTableModRefBSPclear_MemRegion6MnJMemRegion__v_; -text: .text%__1cHThreadsLgc_epilogue6F_v_; -text: .text%__1cKJavaThreadLgc_epilogue6M_v_; -text: .text%__1cRframe_gc_epilogue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_epilogue6M_v_; -text: .text%__1cFframeMpd_gc_epilog6M_v_; -text: .text%__1cJCodeCacheLgc_epilogue6F_v_; -text: .text%__1cQGenCollectedHeapWupdate_time_of_last_gc6Mx_v_: genMarkSweep.o; -text: .text%__1cbCOneContigSpaceCardGenerationVunsafe_max_alloc_nogc6kM_I_; -text: .text%__1cRTenuredGenerationQcompute_new_size6M_v_; -text: .text%__1cKGenerationEspec6M_pnOGenerationSpec__; -text: .text%Unsafe_CompareAndSwapObject; -text: .text%__1cMLinkResolverbEvtable_index_of_miranda_method6FnLKlassHandle_nMsymbolHandle_2pnGThread__i_; -text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; -text: .text%__1cRPrivilegedElementHoops_do6MpnKOopClosure__v_; -text: .text%__1cMOopMapStream2t6MpnGOopMap_i_v_; -text: .text%__1cQComputeCallStackIdo_float6M_v_: generateOopMap.o; -text: .text%jni_DeleteWeakGlobalRef: jni.o; -text: .text%__1cKJNIHandlesTdestroy_weak_global6FpnI_jobject__v_; -text: .text%JVM_IsSameClassPackage; -text: .text%__1cNCanonicalizerPdo_MonitorEnter6MpnMMonitorEnter__v_; -text: .text%__1cLMonitorExitFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerOdo_MonitorExit6MpnLMonitorExit__v_; -text: .text%__1cQNullCheckVisitorPdo_MonitorEnter6MpnMMonitorEnter__v_; -text: .text%__1cTNullCheckEliminatorUhandle_AccessMonitor6MpnNAccessMonitor__v_; -text: .text%__1cQNullCheckVisitorOdo_MonitorExit6MpnLMonitorExit__v_; -text: .text%__1cMLongConstantPas_LongConstant6M_p0_: c1_Canonicalizer.o; -text: .text%__1cNAccessMonitorQas_AccessMonitor6M_p0_: c1_GraphBuilder.o; -text: .text%__1cNLIR_AssemblerNas_Address_hi6MpnLLIR_Address__nHAddress__; -text: .text%__1cNLIR_AssemblerNas_Address_lo6MpnLLIR_Address__nHAddress__; -text: .text%__1cCosHrealloc6FpvI_1_; -text: .text%Unsafe_GetNativeFloat; -text: .text%__1cNLIR_AssemblerKget_thread6MpnLLIR_OprDesc__v_; -text: .text%__1cMLinkResolverbEresolve_interface_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cQComputeCallStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cRComputeEntryStackIdo_short6M_v_: generateOopMap.o; -text: .text%Unsafe_AllocateInstance; -text: .text%jni_AllocObject: jni.o; -text: .text%__1cQinstanceRefKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_; -text: .text%__1cNCanonicalizerMset_constant6Mi_v_: c1_Canonicalizer.o; -text: .text%__1cNLIR_AssemblerMcheck_icache6M_i_; -text: .text%__1cNLIR_AssemblerZjobject2reg_with_patching6MpnMRegisterImpl_pnMCodeEmitInfo__v_; -text: .text%__1cIRuntime1Mnew_instance6FpnKJavaThread_pnMklassOopDesc__v_; -text: .text%__1cPContiguousSpaceNmangle_region6MnJMemRegion__v_; -text: .text%__1cJMemRegionFminus6kMk0_0_; -text: .text%__1cIRuntime1Onew_type_array6FpnKJavaThread_pnMklassOopDesc_i_v_; -text: .text%__1cNFloatConstantQas_FloatConstant6M_p0_: c1_Canonicalizer.o; -text: .text%__1cJFloatTypeMas_FloatType6M_p0_: c1_Canonicalizer.o; -text: .text%__1cRAbstractAssemblerGa_long6Mi_v_; -text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; -text: .text%__1cIRuntime1Mmonitorenter6FpnKJavaThread_pnHoopDesc_pnPBasicObjectLock__v_; -text: .text%__1cIRuntime1Lmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cNVM_DeoptimizeEdoit6M_v_; -text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; -text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; -text: .text%__1cJCodeCachebGmake_marked_nmethods_not_entrant6F_v_; -text: .text%__1cJCodeCacheNalive_nmethod6FpnICodeBlob__pnHnmethod__; -text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; -text: .text%__1cHnmethodVmark_as_seen_on_stack6M_v_; -text: .text%__1cONMethodSweeperPprocess_nmethod6FpnHnmethod__v_; -text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; -text: .text%__1cKCompiledIC2t6MpnKRelocation__v_; -text: .text%JVM_HoldsLock; -text: .text%__1cTMaskFillerForNativeIpass_int6M_v_: oopMapCache.o; -text: .text%__1cNSharedRuntimeDf2l6Ff_x_; -text: .text%__1cMGraphBuilderKcompare_op6MpnJValueType_nJBytecodesECode__v_; -text: .text%__1cNCanonicalizerMdo_CompareOp6MpnJCompareOp__v_; -text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; -text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cQPlaceholderEntryHoops_do6MpnKOopClosure__v_; -text: .text%__1cHnmethodFflush6M_v_; -text: .text%__1cICodeBlobFflush6M_v_; -text: .text%__1cJCodeCacheEfree6FpnICodeBlob__v_; -text: .text%__1cICodeHeapKdeallocate6Mpv_v_; -text: .text%__1cICodeHeapPadd_to_freelist6MpnJHeapBlock__v_; -text: .text%__1cICodeHeapPfollowing_block6MpnJFreeBlock__2_; -text: .text%__1cRComputeEntryStackIdo_float6M_v_: generateOopMap.o; -text: .text%__1cICodeHeapMinsert_after6MpnJFreeBlock_2_v_; -text: .text%__1cICodeHeapLmerge_right6MpnJFreeBlock__v_; -text: .text%__1cHnmethodbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cQComputeCallStackJdo_double6M_v_: generateOopMap.o; -text: .text%__1cbCOneContigSpaceCardGenerationGshrink6MI_v_; -text: .text%__1cbCOneContigSpaceCardGenerationJshrink_by6MI_v_; -text: .text%__1cMVirtualSpaceJshrink_by6MI_v_; -text: .text%__1cRComputeEntryStackJdo_double6M_v_: generateOopMap.o; -text: .text%__1cODoubleConstantRas_DoubleConstant6M_p0_: c1_Canonicalizer.o; -text: .text%__1cKDoubleTypeNas_DoubleType6M_p0_: c1_Canonicalizer.o; -text: .text%__1cQGenCollectedHeapHcollect6MnHGCCauseFCause_i_v_; -text: .text%__1cQGenCollectedHeapOcollect_locked6MnHGCCauseFCause_i_v_; -text: .text%__1cRVM_GenCollectFullEdoit6M_v_; -text: .text%__1cKDoubleTypeEbase6kM_pnJValueType__: c1_Canonicalizer.o; -text: .text%__1cJAssemblerFfsubp6Mi_v_; -text: .text%__1cJAssemblerGfdiv_d6MnHAddress__v_; -text: .text%__1cJAssemblerFfdivp6Mi_v_; -text: .text%__1cJValueTypeQas_FloatConstant6M_pnNFloatConstant__: c1_Canonicalizer.o; -text: .text%__1cIRuntime1Qnew_object_array6FpnKJavaThread_pnMklassOopDesc_i_v_; -text: .text%__1cONewObjectArrayKexact_type6kM_pnGciType__; -text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__; -text: .text%__1cIRuntime1Noop_arraycopy6FpnIHeapWord_2i_v_; -text: .text%__1cILongTypeEbase6kM_pnJValueType__: c1_Canonicalizer.o; -text: .text%__1cVcompiledICHolderKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cMUnsafePutRawFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerPdo_UnsafePutRaw6MpnMUnsafePutRaw__v_; -text: .text%__1cNCanonicalizerOdo_UnsafeRawOp6MpnLUnsafeRawOp__v_; -text: .text%__1cIUnsafeOpLas_UnsafeOp6M_p0_: c1_GraphBuilder.o; -text: .text%__1cMUnsafeGetRawFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerPdo_UnsafeGetRaw6MpnMUnsafeGetRaw__v_; -text: .text%__1cMGraphBuilderNlookup_switch6M_v_; -text: .text%__1cMLookupSwitchFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerPdo_LookupSwitch6MpnMLookupSwitch__v_; -text: .text%__1cQNullCheckVisitorPdo_UnsafePutRaw6MpnMUnsafePutRaw__v_; -text: .text%__1cQNullCheckVisitorPdo_UnsafeGetRaw6MpnMUnsafeGetRaw__v_; -text: .text%__1cQNullCheckVisitorPdo_LookupSwitch6MpnMLookupSwitch__v_; -text: .text%__1cNSharedRuntimeEldiv6Fxx_x_; -text: .text%Unsafe_GetObjectVolatile; -text: .text%signalHandler; -text: .text%JVM_handle_solaris_signal; -text: .text%__1cFframeIpatch_pc6MpnGThread_pC_v_; -text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; -text: .text%__1cNSharedRuntimeDd2l6Fd_x_; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_COMPILER1_sparc --- a/make/solaris/makefiles/reorder_COMPILER1_sparc Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2356 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; - - -# Test Null -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: arguments.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_Compilation.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: c1_LIR.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: codeCache.o; -text: .text%__1cICHeapObj2n6FI_pv_; -text: .text%__1cCosGmalloc6FI_pv_; -text: .text%__1cICodeHeap2t6M_v_; -text: .text%__1cMVirtualSpace2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: interp_masm_sparc.o; -text: .text%__1cKEntryPoint2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: java.o; -text: .text%__1cLResourceObj2n6FIn0APallocation_type__pv_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEventController.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiImpl.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; -text: .text%JNI_CreateJavaVM; -text: .text%__1cCosUatomic_add_bootstrap6Fipoi_i_; -text: .text%__1cCosVatomic_xchg_bootstrap6Fipoi_i_; -text: .text%__1cMostream_init6F_v_; -text: .text%__1cMoutputStream2t6Mi_v_; -text: .text%__1cCosEinit6F_v_; -text: .text%__1cCosLinit_random6Fl_v_; -text: .text%__1cOThreadCriticalKinitialize6F_v_; -text: .text%__1cJArgumentsWinit_system_properties6F_v_; -text: .text%__1cJArgumentsQPropertyList_add6FppnOSystemProperty_2_v_; -text: .text%__1cTAbstract_VM_VersionKvm_release6F_pkc_; -text: .text%__1cTAbstract_VM_VersionHvm_name6F_pkc_; -text: .text%__1cTAbstract_VM_VersionJvm_vendor6F_pkc_; -text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_; -text: .text%__1cCosbDinit_system_properties_values6F_v_; -text: .text%__1cJArgumentsFparse6FpknOJavaVMInitArgs__i_; -text: .text%__1cCosIjvm_path6Fpci_v_; -text: .text%__1cJArgumentsSparse_vm_init_args6FpknOJavaVMInitArgs__i_; -text: .text%__1cCosEfree6Fpv_v_; -text: .text%__1cMSysClassPathPexpand_endorsed6M_v_; -text: .text%__1cJArgumentsWPropertyList_get_value6FpnOSystemProperty_pkc_4_; -text: .text%__1cMSysClassPathQadd_jars_to_path6Fpcpkc_1_; -text: .text%__1cJArgumentsVset_parallel_gc_flags6F_v_; -text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsUset_ergonomics_flags6F_v_; -text: .text%__1cJTimeStampJupdate_to6Mx_v_; -text: .text%__1cCosOjavaTimeMillis6F_x_; -text: .text%__1cCosGinit_26F_i_; -text: .text%__1cCosHSolarisKmmap_chunk6FpcIii_2_; -text: .text%__1cCosHSolarisOlibthread_init6F_v_; -text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; -text: .text%__1cNpriocntl_stub6FinGidtype_lipc_l_: os_solaris.o; -text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; -text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; -text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; -text: .text%__1cCosHSolarisUsynchronization_init6F_v_; -text: .text%__1cDhpiKinitialize6F_i_; -text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_; -text: .text%__1cQostream_init_log6F_v_; -text: .text%__1cSThreadLocalStorageEinit6F_v_; -text: .text%__1cSThreadLocalStorageHpd_init6F_v_; -text: .text%__1cCosbDallocate_thread_local_storage6F_i_; -text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; -text: .text%__1cPvm_init_globals6F_v_; -text: .text%__1cScheck_ThreadShadow6F_v_; -text: .text%__1cNeventlog_init6F_v_; -text: .text%__1cKmutex_init6F_v_; -text: .text%lwp_cond_init: os_solaris.o; -text: .text%lwp_mutex_init: os_solaris.o; -text: .text%__1cOchunkpool_init6F_v_; -text: .text%__1cPperfMemory_init6F_v_; -text: .text%__1cCosZvm_allocation_granularity6F_i_; -text: .text%__1cKPerfMemoryUcreate_memory_region6FI_v_; -text: .text%__1cCosScurrent_process_id6F_i_; -text: .text%__1cCosSget_temp_directory6F_pkc_; -text: .text%__1cbBcleanup_sharedmem_resources6Fpkc_v_: perfMemory_solaris.o; -text: .text%__1cGThread2t6M_v_; -text: .text%__1cFArena2t6M_v_; -text: .text%__1cOThreadCritical2t6M_v_; -text: .text%__1cOThreadCritical2T6M_v_; -text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_; -text: .text%__1cKJavaThreadKinitialize6M_v_; -text: .text%__1cQThreadStatistics2t6M_v_; -text: .text%__1cWThreadLocalAllocBufferKinitialize6M_v_; -text: .text%__1cUThreadSafepointStateGcreate6FpnKJavaThread__v_; -text: .text%__1cCosScurrent_stack_base6F_pC_; -text: .text%__1cCosScurrent_stack_size6F_I_; -text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; -text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; -text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_; -text: .text%get_thread; -text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FIi_pnGThread__; -text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; -text: .text%__1cCosXthread_local_storage_at6Fi_pv_; -text: .text%__1cCosRinitialize_thread6F_v_; -text: .text%__1cNReservedSpaceUpage_align_size_down6FI_I_; -text: .text%__1cCosMvm_page_size6F_i_; -text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; -text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; -text: .text%__1cQcreate_os_thread6FpnGThread_I_pnIOSThread__: os_solaris.o; -text: .text%__1cIOSThread2t6MpFpv_i1_v_; -text: .text%__1cIOSThreadNpd_initialize6M_v_; -text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_; -text: .text%__1cMinit_globals6F_i_; -text: .text%__1cPmanagement_init6F_v_; -text: .text%__1cNExceptionMark2t6MrpnGThread__v_; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongVariable__; -text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_; -text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_; -text: .text%__1cKPerfMemoryFalloc6FI_pc_; -text: .text%__1cKPerfMemoryMmark_updated6F_v_; -text: .text%__1cCosLelapsedTime6F_d_; -text: .text%__1cPoldgetTimeNanos6F_x_: os_solaris.o; -text: .text%__1cCosYatomic_cmpxchg_bootstrap6Fipoii_i_; -text: .text%__1cNExceptionMark2T6M_v_; -text: .text%__1cNThreadServiceEinit6F_v_; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnPPerfLongCounter__; -text: .text%__1cORuntimeServiceEinit6F_v_; -text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cObytecodes_init6F_v_; -text: .text%__1cJBytecodesKinitialize6F_v_; -text: .text%__1cJBytecodesNpd_initialize6F_v_; -text: .text%__1cQclassLoader_init6F_v_; -text: .text%__1cLClassLoaderKinitialize6F_v_; -text: .text%__1cLClassLoaderQload_zip_library6F_v_; -text: .text%__1cCosTnative_java_library6F_pv_; -text: .text%__1cPJavaFrameAnchorNmake_walkable6MpnKJavaThread__v_; -text: .text%bootstrap_flush_windows; -text: .text%JVM_GetInterfaceVersion; -text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_; -text: .text%__1cKHandleMark2T6M_v_; -text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_; -text: .text%__1cCosGstrdup6Fpkc_pc_; -text: .text%__1cCosEstat6FpkcpnEstat__i_; -text: .text%JVM_RawMonitorCreate; -text: .text%JVM_NativePath; -text: .text%JVM_RawMonitorEnter; -text: .text%JVM_RawMonitorExit; -text: .text%JVM_Open; -text: .text%JVM_Lseek; -text: .text%JVM_Close; -text: .text%__1cOClassPathEntry2t6M_v_; -text: .text%__1cOcodeCache_init6F_v_; -text: .text%__1cNReservedSpace2t6MI_v_; -text: .text%__1cMVirtualSpaceOcommitted_size6kM_I_; -text: .text%__1cMVirtualSpaceNreserved_size6kM_I_; -text: .text%__1cNMemoryServiceZadd_code_heap_memory_pool6FpnICodeHeap__v_; -text: .text%__1cICodeHeapIcapacity6kM_I_; -text: .text%__1cICodeHeapMmax_capacity6kM_I_; -text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_; -text: .text%__1cNMemoryManager2t6M_v_; -text: .text%__1cNMemoryManagerIadd_pool6MpnKMemoryPool__v_; -text: .text%__1cKMemoryPoolLadd_manager6MpnNMemoryManager__v_; -text: .text%__1cLicache_init6F_v_; -text: .text%__1cKBufferBlobGcreate6Fpkci_p0_; -text: .text%__1cICodeHeapLheader_size6F_I_; -text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__; -text: .text%__1cICodeHeapIallocate6MI_pv_; -text: .text%__1cICodeHeapPsearch_freelist6MI_pnJFreeBlock__; -text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; -text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; -text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cMCodeHeapPoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cICodeHeapSallocated_capacity6kM_I_; -text: .text%__1cXresource_allocate_bytes6FI_pc_; -text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_; -text: .text%__1cTICacheStubGeneratorVgenerate_icache_flush6MppFpCii_i_v_; -text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_; -text: .text%__1cRStubCodeGeneratorLstub_prolog6MpnMStubCodeDesc__v_; -text: .text%__1cRAbstractAssemblerEbind6MrnFLabel__v_; -text: .text%__1cKRelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cMStubCodeMark2T6M_v_; -text: .text%__1cRAbstractAssemblerFflush6M_v_; -text: .text%__1cOAbstractICacheQinvalidate_range6FpCi_v_; -text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; -text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cPVM_Version_init6F_v_; -text: .text%jio_snprintf; -text: .text%__1cPlocal_vsnprintf6FpcIpkcpv_i_; -text: .text%__1cSstubRoutines_init16F_v_; -text: .text%__1cNStubGeneratorbAgenerate_forward_exception6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorLstub_prolog6MpnMStubCodeDesc__v_: stubGenerator_sparc.o; -text: .text%__1cOMacroAssemblerKget_thread6M_v_; -text: .text%__1cOMacroAssemblerKsave_frame6Mi_v_; -text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC2_v_; -text: .text%__1cOMacroAssemblerLsave_thread6MkpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerNverify_thread6M_v_; -text: .text%__1cNStubGeneratorSgenerate_call_stub6MrpC_1_: stubGenerator_sparc.o; -text: .text%__1cJAssemblerSbranch_destination6Fii_i_; -text: .text%__1cJAssemblerOpatched_branch6Fiii_i_; -text: .text%__1cNStubGeneratorYgenerate_catch_exception6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorSgenerate_test_stop6M_pC_: stubGenerator_sparc.o; -text: .text%__1cOMacroAssemblerEstop6Mpkc_v_; -text: .text%__1cOMacroAssemblerPstop_subroutine6M_v_; -text: .text%__1cVRegistersForDebuggingOsave_registers6FpnOMacroAssembler__v_: assembler_sparc.o; -text: .text%__1cVRegistersForDebuggingRrestore_registers6FpnOMacroAssembler_pnMRegisterImpl__v_: assembler_sparc.o; -text: .text%__1cNStubGeneratorbNgenerate_flush_callers_register_windows6M_pC_: stubGenerator_sparc.o; -text: .text%__1cOMacroAssemblerNflush_windows6M_v_; -text: .text%__1cNStubGeneratorUgenerate_atomic_xchg6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorTgenerate_atomic_add6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorbCgenerate_atomic_cmpxchg_long6M_pC_: stubGenerator_sparc.o; -text: .text%__1cOMacroAssemblerFalign6Mi_v_; -text: .text%__1cNStubGeneratorbEgenerate_partial_subtype_check6M_pC_: stubGenerator_sparc.o; -text: .text%__1cJTraceTime2T6M_v_; -text: .text%__1cNuniverse_init6F_i_; -text: .text%__1cLJavaClassesbAcompute_hard_coded_offsets6F_v_; -text: .text%__1cTAbstract_VM_VersionXinternal_vm_info_string6F_pkc_; -text: .text%__1cRClassPathZipEntryEname6M_pkc_: classLoader.o; -text: .text%__1cPMarkSweepPolicy2t6M_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyQinitialize_flags6M_v_; -text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__I_; -text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_I_; -text: .text%__1cbCTwoGenerationCollectorPolicyUinitialize_size_info6M_v_; -text: .text%__1cPMarkSweepPolicyWinitialize_generations6M_v_; -text: .text%__1cXPermanentGenerationSpec2t6MnHPermGenEName_IIIIII_v_; -text: .text%__1cQGCPolicyCounters2t6Mpkcii_v_; -text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; -text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; -text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; -text: .text%__1cCosbDatomic_cmpxchg_long_bootstrap6Fxpoxx_x_; -text: .text%__1cPPerfDataManagerUcreate_long_constant6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongConstant__; -text: .text%__1cKSharedHeap2t6MpnPCollectorPolicy__v_; -text: .text%__1cNCollectedHeap2t6M_v_; -text: .text%__1cHGCCauseJto_string6Fn0AFCause__pkc_; -text: .text%__1cPPerfDataManagerWcreate_string_variable6FnJCounterNS_pkci3pnGThread__pnSPerfStringVariable__; -text: .text%__1cMSubTasksDone2t6Mi_v_; -text: .text%__1cQGenCollectedHeapKinitialize6M_i_; -text: .text%__1cXPermanentGenerationSpecFalign6MI_v_; -text: .text%__1cCosZattempt_reserve_memory_at6FIpc_1_; -text: .text%__1cPCollectorPolicyOcreate_rem_set6MnJMemRegion_i_pnJGenRemSet__; -text: .text%__1cLCardTableRS2t6MnJMemRegion_i_v_; -text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; -text: .text%__1cNReservedSpaceYallocation_align_size_up6FI_I_; -text: .text%__1cJMemRegion2t6M_v_: cardTableModRefBS.o; -text: .text%__1cKSharedHeapPset_barrier_set6MpnKBarrierSet__v_; -text: .text%__1cOGenerationSpecEinit6MnNReservedSpace_ipnJGenRemSet__pnKGeneration__; -text: .text%__1cQDefNewGeneration2t6MnNReservedSpace_Iipkc_v_; -text: .text%__1cKGeneration2t6MnNReservedSpace_Ii_v_; -text: .text%__1cFArenaEgrow6MI_pv_; -text: .text%__1cFChunkJnext_chop6M_v_; -text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cWSequentialSubTasksDoneFclear6M_v_; -text: .text%__1cSGenerationCounters2t6MpkciipnMVirtualSpace__v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkci_pc_; -text: .text%__1cRCollectorCounters2t6Mpkci_v_; -text: .text%__1cOCSpaceCounters2t6MpkciIpnPContiguousSpace_pnSGenerationCounters__v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__; -text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_pnUPerfLongSampleHelper__v_; -text: .text%__1cPPerfLongVariantGsample6M_v_; -text: .text%__1cZContiguousSpaceUsedHelperLtake_sample6M_x_: cSpaceCounters.o; -text: .text%__1cJEdenSpaceHset_end6MpnIHeapWord__v_: space.o; -text: .text%__1cFSpaceHset_end6MpnIHeapWord__v_: space.o; -text: .text%__1cQDefNewGenerationPupdate_counters6M_v_; -text: .text%__1cSGenerationCountersKupdate_all6M_v_: generationCounters.o; -text: .text%__1cRTenuredGeneration2t6MnNReservedSpace_IipnJGenRemSet__v_; -text: .text%__1cOCardGeneration2t6MnNReservedSpace_IipnJGenRemSet__v_; -text: .text%__1cWBlockOffsetSharedArray2t6MnJMemRegion_I_v_; -text: .text%__1cNReservedSpaceSpage_align_size_up6FI_I_; -text: .text%__1cLCardTableRSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cHGCStats2t6M_v_; -text: .text%__1cWOffsetTableContigSpace2t6MpnWBlockOffsetSharedArray_nJMemRegion__v_; -text: .text%__1cWOffsetTableContigSpaceKset_bottom6MpnIHeapWord__v_; -text: .text%__1cQBlockOffsetArrayGresize6MI_v_: blockOffsetTable.o; -text: .text%__1cWOffsetTableContigSpaceHset_end6MpnIHeapWord__v_; -text: .text%__1cbBBlockOffsetArrayContigSpaceUinitialize_threshold6M_pnIHeapWord__; -text: .text%__1cXPermanentGenerationSpecEinit6MnNReservedSpace_IpnJGenRemSet__pnHPermGen__; -text: .text%__1cRCompactingPermGen2t6MnNReservedSpace_1IpnJGenRemSet_pnXPermanentGenerationSpec__v_; -text: .text%__1cUCompactingPermGenGen2t6MnNReservedSpace_1IipnJGenRemSet_pnPContiguousSpace_pnXPermanentGenerationSpec__v_; -text: .text%__1cNReservedSpaceHrelease6M_v_; -text: .text%__1cUCompactingPermGenGenbFinitialize_performance_counters6M_v_; -text: .text%__1cbCOneContigSpaceCardGenerationIcapacity6kM_I_; -text: .text%__1cWThreadLocalAllocBufferWstartup_initialization6F_v_; -text: .text%__1cPGlobalTLABStats2t6M_v_; -text: .text%__1cXAdaptiveWeightedAverageGsample6Mf_v_; -text: .text%__1cQDefNewGenerationNtlab_capacity6kM_I_: defNewGeneration.o; -text: .text%__1cUCompactingPermGenGenPinitialize_oops6F_v_; -text: .text%__1cQSystemDictionaryVset_shared_dictionary6FpnPHashtableBucket_ii_v_; -text: .text%__1cKDictionary2t6MipnPHashtableBucket_i_v_; -text: .text%__1cLClassLoaderZcreate_package_info_table6FpnPHashtableBucket_ii_v_; -text: .text%__1cUCompactingPermGenGenOserialize_oops6FpnTSerializeOopClosure__v_; -text: .text%__1cLReadClosureGdo_tag6Mi_v_: restore.o; -text: .text%__1cLReadClosureGdo_int6Mpi_v_: restore.o; -text: .text%__1cQGenCollectedHeapEheap6F_p0_; -text: .text%__1cRCompactingPermGenGas_gen6kM_pnKGeneration__: permGen.o; -text: .text%__1cWBlockOffsetSharedArrayJserialize6MpnTSerializeOopClosure_pnIHeapWord_4_v_; -text: .text%__1cLReadClosureJdo_region6MpCI_v_: restore.o; -text: .text%__1cWOffsetTableContigSpacebKserialize_block_offset_array_offsets6MpnTSerializeOopClosure__v_; -text: .text%__1cbBBlockOffsetArrayContigSpaceJserialize6MpnTSerializeOopClosure__v_; -text: .text%__1cLReadClosureGdo_ptr6MppnIHeapWord__v_: restore.o; -text: .text%__1cLReadClosureGdo_ptr6Mppv_v_: restore.o; -text: .text%__1cLReadClosureJdo_size_t6MpI_v_: restore.o; -text: .text%__1cLReadClosureGdo_oop6MppnHoopDesc__v_: restore.o; -text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; -text: .text%__1cICodeHeapJnext_free6kMpnJHeapBlock__pv_; -text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__; -text: .text%__1cICodeHeapKfind_start6kMpv_1_; -text: .text%__1cICodeHeapKnext_block6kMpnJHeapBlock__2_; -text: .text%__1cLFileMapInfoFclose6M_v_; -text: .text%__1cQinterpreter_init6F_v_; -text: .text%__1cTAbstractInterpreterKinitialize6F_v_; -text: .text%__1cNTemplateTableKinitialize6F_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; -text: .text%__1cITemplateKinitialize6MinITosState_1pFi_vi_v_; -text: .text%__1cNTemplateTableNpd_initialize6F_v_; -text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; -text: .text%__1cUInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; -text: .text%__1cJStubQdDueueHrequest6Mi_pnEStub__; -text: .text%__1cJStubQdDueueGcommit6Mi_v_; -text: .text%__1cZInterpreterMacroAssemblerZget_2_byte_integer_at_bcp6MipnMRegisterImpl_2n0ALsignedOrNot_n0AKsetCCOrNot__v_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; -text: .text%__1cOMacroAssemblerKverify_FPU6Mipkc_v_; -text: .text%__1cZInterpreterMacroAssemblerXget_constant_pool_cache6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerVreset_last_Java_frame6M_v_; -text: .text%__1cOMacroAssemblerbBcheck_and_forward_exception6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerZcheck_and_handle_popframe6MpnMRegisterImpl__v_; -text: .text%__1cTAbstractInterpreterSBasicType_as_index6FnJBasicType__i_; -text: .text%__1cbCAbstractInterpreterGeneratorbFgenerate_slow_signature_handler6M_pC_; -text: .text%__1cZInterpreterMacroAssemblerEpush6MnITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cZInterpreterMacroAssemblerGpush_i6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerIpush_ptr6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerGpush_f6MpnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerWempty_expression_stack6M_v_; -text: .text%__1cOMacroAssemblerNget_vm_result6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerDjmp6MpnMRegisterImpl_ipkci_v_; -text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; -text: .text%__1cQRelocationHolderEplus6kMi_0_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC222_v_; -text: .text%__1cOMacroAssemblerNset_vm_result6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpnMRegisterImpl_pCi_v_; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_; -text: .text%__1cZInterpreterMacroAssemblerbCincrement_invocation_counter6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerTnotify_method_entry6M_v_; -text: .text%__1cZInterpreterMacroAssemblerbIcompute_extra_locals_size_in_bytes6MpnMRegisterImpl_22_v_; -text: .text%__1cOMacroAssemblerIround_to6MpnMRegisterImpl_i_v_: interp_masm_sparc.o; -text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; -text: .text%__1cZInterpreterMacroAssemblerLlock_object6MpnMRegisterImpl_2_v_; -text: .text%__1cUInterpreterGeneratorUgenerate_empty_entry6M_pC_; -text: .text%__1cUInterpreterGeneratorXgenerate_accessor_entry6M_pC_; -text: .text%__1cOMacroAssemblerUcalc_mem_param_words6MpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerOrestore_thread6MkpnMRegisterImpl__v_; -text: .text%__1cUInterpreterGeneratorVrestore_native_result6M_v_; -text: .text%__1cZInterpreterMacroAssemblerQtop_most_monitor6M_nHAddress__; -text: .text%__1cZInterpreterMacroAssemblerGpush_d6MpnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerGpush_l6MpnMRegisterImpl__v_; -text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_prolog6MnITosState_i_v_; -text: .text%__1cITemplateIgenerate6MpnZInterpreterMacroAssembler__v_; -text: .text%__1cNTemplateTableDnop6F_v_; -text: .text%__1cNTemplateTableKtransition6FnITosState_1_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_epilog6MnITosState_i_v_; -text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; -text: .text%__1cNTemplateTableLaconst_null6F_v_; -text: .text%__1cNTemplateTableGiconst6Fi_v_; -text: .text%__1cNTemplateTableGlconst6Fi_v_; -text: .text%__1cNTemplateTableGfconst6Fi_v_; -text: .text%__1cNTemplateTableGdconst6Fi_v_; -text: .text%__1cNTemplateTableGbipush6F_v_; -text: .text%__1cNTemplateTableGsipush6F_v_; -text: .text%__1cZInterpreterMacroAssemblerSget_cpool_and_tags6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_; -text: .text%__1cNTemplateTableGldc2_w6F_v_; -text: .text%__1cNTemplateTableFiload6F_v_; -text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_; -text: .text%__1cZInterpreterMacroAssemblerQaccess_local_int6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableKwide_iload6F_v_; -text: .text%__1cNTemplateTableFlload6F_v_; -text: .text%__1cZInterpreterMacroAssemblerRaccess_local_long6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableKwide_lload6F_v_; -text: .text%__1cNTemplateTableFfload6F_v_; -text: .text%__1cZInterpreterMacroAssemblerSaccess_local_float6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cNTemplateTableKwide_fload6F_v_; -text: .text%__1cNTemplateTableFdload6F_v_; -text: .text%__1cZInterpreterMacroAssemblerTaccess_local_double6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cNTemplateTableKwide_dload6F_v_; -text: .text%__1cNTemplateTableFaload6F_v_; -text: .text%__1cZInterpreterMacroAssemblerQaccess_local_ptr6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableKwide_aload6F_v_; -text: .text%__1cNTemplateTableFiload6Fi_v_; -text: .text%__1cNTemplateTableFlload6Fi_v_; -text: .text%__1cNTemplateTableFfload6Fi_v_; -text: .text%__1cNTemplateTableFdload6Fi_v_; -text: .text%__1cNTemplateTableHaload_06F_v_; -text: .text%__1cNTemplateTableFaload6Fi_v_; -text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerFpop_i6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableGiaload6F_v_; -text: .text%__1cZInterpreterMacroAssemblerLindex_check6MpnMRegisterImpl_2i22_v_; -text: .text%__1cZInterpreterMacroAssemblerXindex_check_without_pop6MpnMRegisterImpl_2i22_v_; -text: .text%__1cNTemplateTableGlaload6F_v_; -text: .text%__1cNTemplateTableGfaload6F_v_; -text: .text%__1cNTemplateTableGdaload6F_v_; -text: .text%__1cNTemplateTableGaaload6F_v_; -text: .text%__1cNTemplateTableGbaload6F_v_; -text: .text%__1cNTemplateTableGcaload6F_v_; -text: .text%__1cNTemplateTableGsaload6F_v_; -text: .text%__1cNTemplateTableGistore6F_v_; -text: .text%__1cZInterpreterMacroAssemblerPstore_local_int6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableLwide_istore6F_v_; -text: .text%__1cNTemplateTableGlstore6F_v_; -text: .text%__1cZInterpreterMacroAssemblerQstore_local_long6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableLwide_lstore6F_v_; -text: .text%__1cZInterpreterMacroAssemblerFpop_l6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableGfstore6F_v_; -text: .text%__1cZInterpreterMacroAssemblerRstore_local_float6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cNTemplateTableLwide_fstore6F_v_; -text: .text%__1cNTemplateTableGdstore6F_v_; -text: .text%__1cZInterpreterMacroAssemblerSstore_local_double6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cNTemplateTableLwide_dstore6F_v_; -text: .text%__1cNTemplateTableGastore6F_v_; -text: .text%__1cZInterpreterMacroAssemblerbCverify_oop_or_return_address6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableLwide_astore6F_v_; -text: .text%__1cNTemplateTableGistore6Fi_v_; -text: .text%__1cNTemplateTableGlstore6Fi_v_; -text: .text%__1cNTemplateTableGfstore6Fi_v_; -text: .text%__1cNTemplateTableGdstore6Fi_v_; -text: .text%__1cNTemplateTableGastore6Fi_v_; -text: .text%__1cNTemplateTableHiastore6F_v_; -text: .text%__1cNTemplateTableHlastore6F_v_; -text: .text%__1cNTemplateTableHfastore6F_v_; -text: .text%__1cNTemplateTableHdastore6F_v_; -text: .text%__1cNTemplateTableHaastore6F_v_; -text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_2222rnFLabel__v_; -text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_x6MnJAssemblerJCondition_pCpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableHbastore6F_v_; -text: .text%__1cNTemplateTableHcastore6F_v_; -text: .text%__1cNTemplateTableHsastore6F_v_; -text: .text%__1cNTemplateTableDpop6F_v_; -text: .text%__1cNTemplateTableEpop26F_v_; -text: .text%__1cNTemplateTableDdup6F_v_; -text: .text%__1cNTemplateTableGdup_x16F_v_; -text: .text%__1cNTemplateTableGdup_x26F_v_; -text: .text%__1cNTemplateTableEdup26F_v_; -text: .text%__1cNTemplateTableHdup2_x16F_v_; -text: .text%__1cNTemplateTableHdup2_x26F_v_; -text: .text%__1cNTemplateTableEswap6F_v_; -text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; -text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_; -text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_; -text: .text%__1cNTemplateTableEdop26Fn0AJOperation__v_; -text: .text%__1cNTemplateTableElmul6F_v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pCi_v_; -text: .text%__1cNTemplateTableEidiv6F_v_; -text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_icc6MnJAssemblerJCondition_pCpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableEldiv6F_v_; -text: .text%__1cNTemplateTableEirem6F_v_; -text: .text%__1cNTemplateTableElrem6F_v_; -text: .text%__1cNTemplateTableEineg6F_v_; -text: .text%__1cNTemplateTableElneg6F_v_; -text: .text%__1cOMacroAssemblerElneg6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableEfneg6F_v_; -text: .text%__1cNTemplateTableEdneg6F_v_; -text: .text%__1cNTemplateTableElshl6F_v_; -text: .text%__1cOMacroAssemblerElshl6MpnMRegisterImpl_22222_v_; -text: .text%__1cNTemplateTableElshr6F_v_; -text: .text%__1cOMacroAssemblerElshr6MpnMRegisterImpl_22222_v_; -text: .text%__1cNTemplateTableFlushr6F_v_; -text: .text%__1cOMacroAssemblerFlushr6MpnMRegisterImpl_22222_v_; -text: .text%__1cNTemplateTableEiinc6F_v_; -text: .text%__1cNTemplateTableJwide_iinc6F_v_; -text: .text%__1cNTemplateTableHconvert6F_v_; -text: .text%__1cNTemplateTableElcmp6F_v_; -text: .text%__1cOMacroAssemblerElcmp6MpnMRegisterImpl_2222_v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fi_v_; -text: .text%__1cNTemplateTableKdouble_cmp6Fi_v_; -text: .text%__1cNTemplateTableHif_0cmp6Fn0AJCondition__v_; -text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerbAincrement_backedge_counter6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerbBtest_backedge_count_for_osr6MpnMRegisterImpl_22_v_; -text: .text%__1cNTemplateTableHif_icmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableHif_acmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableF_goto6F_v_; -text: .text%__1cNTemplateTableDjsr6F_v_; -text: .text%__1cZInterpreterMacroAssemblerbAdispatch_next_noverify_oop6MnITosState_i_v_; -text: .text%__1cNTemplateTableDret6F_v_; -text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MnITosState_pnMRegisterImpl_3_v_; -text: .text%__1cNTemplateTableIwide_ret6F_v_; -text: .text%__1cNTemplateTableLtableswitch6F_v_; -text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_222_v_; -text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableMlookupswitch6F_v_; -text: .text%__1cNTemplateTableH_return6FnITosState__v_; -text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cNTemplateTableJputstatic6Fi_v_; -text: .text%__1cNTemplateTableIgetfield6Fi_v_; -text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableIputfield6Fi_v_; -text: .text%__1cNTemplateTableNinvokevirtual6Fi_v_; -text: .text%__1cNTemplateTableTinvokevfinal_helper6FpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableUgenerate_vtable_call6FpnMRegisterImpl_22_v_; -text: .text%__1cNTemplateTableNinvokespecial6Fi_v_; -text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableMinvokestatic6Fi_v_; -text: .text%__1cNTemplateTablePinvokeinterface6Fi_v_; -text: .text%__1cNTemplateTablebDinvokeinterface_object_method6FpnMRegisterImpl_222_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC_v_; -text: .text%__1cNTemplateTableE_new6F_v_; -text: .text%__1cQGenCollectedHeapItop_addr6kM_ppnIHeapWord__; -text: .text%__1cQDefNewGenerationItop_addr6kM_ppnIHeapWord__; -text: .text%__1cQGenCollectedHeapIend_addr6kM_ppnIHeapWord__; -text: .text%__1cQDefNewGenerationIend_addr6kM_ppnIHeapWord__; -text: .text%__1cZInterpreterMacroAssemblerRget_constant_pool6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC22_v_; -text: .text%__1cNTemplateTableInewarray6F_v_; -text: .text%__1cNTemplateTableJanewarray6F_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC222_v_; -text: .text%__1cNTemplateTableLarraylength6F_v_; -text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_1_x6MnJAssemblerJCondition_rnFLabel__v_; -text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_26MpCpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cNTemplateTableGathrow6F_v_; -text: .text%__1cNTemplateTableJcheckcast6F_v_; -text: .text%__1cNTemplateTableKinstanceof6F_v_; -text: .text%__1cNTemplateTableMmonitorenter6F_v_; -text: .text%__1cNTemplateTableLmonitorexit6F_v_; -text: .text%__1cNTemplateTableEwide6F_v_; -text: .text%__1cNTemplateTableOmultianewarray6F_v_; -text: .text%__1cNTemplateTableKif_nullcmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableGgoto_w6F_v_; -text: .text%__1cZInterpreterMacroAssemblerZget_4_byte_integer_at_bcp6MipnMRegisterImpl_2n0AKsetCCOrNot__v_; -text: .text%__1cNTemplateTableFjsr_w6F_v_; -text: .text%__1cNTemplateTableL_breakpoint6F_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_normal6MnITosState__v_; -text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; -text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_; -text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_; -text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_; -text: .text%__1cNTemplateTableKfast_iload6F_v_; -text: .text%__1cNTemplateTableLfast_iload26F_v_; -text: .text%__1cNTemplateTableMfast_icaload6F_v_; -text: .text%__1cNTemplateTableRfast_invokevfinal6Fi_v_; -text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; -text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; -text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_; -text: .text%__1cWinvocationCounter_init6F_v_; -text: .text%__1cOmarksweep_init6F_v_; -text: .text%__1cQaccessFlags_init6F_v_; -text: .text%__1cStemplateTable_init6F_v_; -text: .text%__1cVInterfaceSupport_init6F_v_; -text: .text%__1cOuniverse2_init6F_v_; -text: .text%__1cIUniverseHgenesis6FpnGThread__v_; -text: .text%__1cLClassLoaderVcompute_Object_vtable6F_i_; -text: .text%__1cIUniversebCinit_self_patching_vtbl_list6Fppvi_v_; -text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_; -text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_; -text: .text%__1cKDictionary2t6Mi_v_; -text: .text%__1cQPlaceholderTable2t6Mi_v_; -text: .text%__1cVLoaderConstraintTable2t6Mi_v_; -text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cRCompactingPermGenMmem_allocate6MI_pnIHeapWord__; -text: .text%__1cWOffsetTableContigSpaceIallocate6MI_pnIHeapWord__: space.o; -text: .text%__1cbBBlockOffsetArrayContigSpaceLalloc_block6MpnIHeapWord_2_v_: blockOffsetTable.o; -text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_; -text: .text%__1cQSystemDictionarybEresolve_instance_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_; -text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cJHashtableJnew_entry6MIpnHoopDesc__pnOHashtableEntry__; -text: .text%__1cQSystemDictionaryTload_instance_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cKDictionaryRfind_shared_class6MiInMsymbolHandle__pnMklassOopDesc__; -text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; -text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; -text: .text%__1cFKlassQset_next_sibling6MpnMklassOopDesc__v_; -text: .text%__1cNmethodOopDescVclear_native_function6M_v_; -text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_; -text: .text%__1cSinstanceKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cFKlassWappend_to_sibling_list6M_v_; -text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; -text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_; -text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; -text: .text%__1cQPlaceholderTableMremove_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; -text: .text%__1cNinstanceKlassQeager_initialize6MpnGThread__v_; -text: .text%__1cMObjectLocker2T6M_v_; -text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cCosVcurrent_stack_pointer6F_pC_; -text: .text%__1cNinstanceKlassPadd_implementor6MpnMklassOopDesc__v_; -text: .text%__1cIUniverseNfixup_mirrors6FpnGThread__v_; -text: .text%__1cbCOneContigSpaceCardGenerationOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cPContiguousSpaceOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cPContiguousSpaceTobject_iterate_from6MnJWaterMark_pnNObjectClosure__v_; -text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_: universe.o; -text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__; -text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cXreferenceProcessor_init6F_v_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJset_clock6Fx_v_; -text: .text%__1cQjni_handles_init6F_v_; -text: .text%__1cOvmStructs_init6F_v_; -text: .text%__1cMRegisterImplEname6kM_pkc_; -text: .text%__1cRFloatRegisterImplEname6kM_pkc_; -text: .text%__1cIRuntime1Ninitialize_pd6F_v_; -text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; -text: .text%__1cOMacroAssemblerZtotal_frame_size_in_bytes6Mi_i_; -text: .text%__1cJOopMapSet2t6M_v_; -text: .text%__1cOMacroAssemblerNsave_frame_c16Mi_v_; -text: .text%__1cGOopMap2t6Mii_v_; -text: .text%__1cVCompressedWriteStream2t6Mi_v_; -text: .text%__1cJrelocInfoNfinish_prefix6Mph_p0_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC22_v_; -text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; -text: .text%__1cNRelocIteratorTlocs_and_index_size6Fii_i_; -text: .text%__1cRAbstractAssemblerOcode_fill_byte6F_i_; -text: .text%__1cNRelocIteratorKset_limits6MpC1_v_; -text: .text%__1cVPatchingRelocIteratorHprepass6M_v_; -text: .text%__1cNRelocIteratorFreloc6M_pnKRelocation__; -text: .text%__1cRNativeInstructionLset_long_at6Mii_v_; -text: .text%__1cOAbstractICachePinvalidate_word6FpC_v_; -text: .text%__1cKRelocationLunpack_data6M_v_: relocInfo.o; -text: .text%__1cVPatchingRelocIteratorIpostpass6M_v_; -text: .text%__1cJOopMapSetJheap_size6kM_i_; -text: .text%__1cJOopMapSetHcopy_to6MpC_v_; -text: .text%__1cLOopRecorder2t6MpnFArena__v_; -text: .text%__1cNStubAssemblerHcall_RT6MpnMRegisterImpl_2pC2_i_; -text: .text%__1cNStubAssemblerHcall_RT6MpnMRegisterImpl_2pCi_i_; -text: .text%__1cOMacroAssemblerPget_vm_result_26MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerLtlab_refill6MrnFLabel_22_v_; -text: .text%__1cOMacroAssemblerNeden_allocate6MpnMRegisterImpl_2i22rnFLabel__v_; -text: .text%__1cOMacroAssemblerNtlab_allocate6MpnMRegisterImpl_2i2rnFLabel__v_; -text: .text%__1cRC1_MacroAssemblerRinitialize_object6MpnMRegisterImpl_22i22_v_; -text: .text%__1cRC1_MacroAssemblerPinitialize_body6MpnMRegisterImpl_2_v_; -text: .text%__1cNStubAssemblerHcall_RT6MpnMRegisterImpl_2pC22_i_; -text: .text%__1cIRuntime1Iblob_for6Fn0AGStubID__pnICodeBlob__; -text: .text%__1cIRuntime1Rgenerate_patching6FpnNStubAssembler_pC_pnJOopMapSet__; -text: .text%__1cNSafepointBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cQvtableStubs_init6F_v_; -text: .text%__1cWInlineCacheBuffer_init6F_v_; -text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_; -text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__; -text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_: icBuffer.o; -text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_: icBuffer.o; -text: .text%__1cTcompilerOracle_init6F_v_; -text: .text%__1cWcompilationPolicy_init6F_v_; -text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__; -text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cEUTF8Ounicode_length6Fpkc_i_; -text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cQGenCollectedHeapVlarge_typearray_limit6M_I_; -text: .text%__1cNCollectedHeapXallocate_from_tlab_slow6FpnGThread_I_pnIHeapWord__; -text: .text%__1cQDefNewGenerationVunsafe_max_tlab_alloc6kM_I_: defNewGeneration.o; -text: .text%__1cQDefNewGenerationVunsafe_max_alloc_nogc6kM_I_; -text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_; -text: .text%__1cQGenCollectedHeapRallocate_new_tlab6MI_pnIHeapWord__; -text: .text%__1cJEdenSpaceMpar_allocate6MI_pnIHeapWord__; -text: .text%__1cWThreadLocalAllocBufferEfill6MpnIHeapWord_2I_v_; -text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_; -text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; -text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; -text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cMstringStream2t6MI_v_; -text: .text%__1cMoutputStreamFprint6MpkcE_v_; -text: .text%__1cMstringStreamFwrite6MpkcI_v_; -text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; -text: .text%__1cEUTF8Enext6FpkcpH_pc_; -text: .text%__1cMoutputStreamDput6Mc_v_; -text: .text%__1cMstringStreamJas_string6M_pc_; -text: .text%__1cMstringStream2T6M_v_; -text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; -text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; -text: .text%__1cbEinitialize_converter_functions6F_v_; -text: .text%__1cQGenCollectedHeapIcapacity6kM_I_; -text: .text%__1cQDefNewGenerationIcapacity6kM_I_; -text: .text%__1cQGenCollectedHeapEused6kM_I_; -text: .text%__1cQDefNewGenerationEused6kM_I_; -text: .text%__1cbCOneContigSpaceCardGenerationEused6kM_I_; -text: .text%__1cQGenCollectedHeapPpost_initialize6M_v_; -text: .text%__1cQGenCollectedHeapTref_processing_init6M_v_; -text: .text%__1cKSharedHeapTref_processing_init6M_v_; -text: .text%__1cKGenerationSref_processor_init6M_v_; -text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_; -text: .text%__1cNMemoryServicebBadd_gen_collected_heap_info6FpnQGenCollectedHeap__v_; -text: .text%__1cNMemoryManagerXget_copy_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cPGCMemoryManager2t6M_v_; -text: .text%__1cNMemoryManagerWget_msc_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cQDefNewGenerationEkind6M_nKGenerationEName__: defNewGeneration.o; -text: .text%__1cRTenuredGenerationEkind6M_nKGenerationEName__: tenuredGeneration.o; -text: .text%__1cKGenerationMmax_capacity6kM_I_; -text: .text%__1cQGenCollectedHeapNgc_threads_do6kMpnNThreadClosure__v_; -text: .text%__1cPGCMemoryManagerXinitialize_gc_stat_info6M_v_; -text: .text%__1cQjavaClasses_init6F_v_; -text: .text%__1cQjava_lang_ThreadPcompute_offsets6F_v_; -text: .text%__1cPfieldDescriptorKinitialize6MpnMklassOopDesc_i_v_; -text: .text%__1cVjava_lang_ThreadGroupPcompute_offsets6F_v_; -text: .text%__1cYjava_lang_reflect_MethodPcompute_offsets6F_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldPcompute_offsets6F_v_; -text: .text%__1cSstubRoutines_init26F_v_; -text: .text%__1cNStubGeneratorbIgenerate_handler_for_unsafe_access6M_pC_: stubGenerator_sparc.o; -text: .text%__1cOMacroAssemblerVverify_oop_subroutine6M_v_; -text: .text%__1cLJvmtiExportbMtransition_pending_onload_raw_monitors6F_v_; -text: .text%__1cUJvmtiPendingMonitorsXtransition_raw_monitors6F_v_; -text: .text%__1cIVMThreadGcreate6F_v_; -text: .text%__1cCosMstart_thread6FpnGThread__v_; -text: .text%__1cCosPpd_start_thread6FpnGThread__v_; -text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; -text: .text%__1cQset_lwp_priority6Fiii_i_; -text: .text%__1cIVMThreadDrun6M_v_; -text: .text%__1cGThreadbFinitialize_thread_local_storage6M_v_; -text: .text%__1cGThreadbArecord_stack_base_and_size6M_v_; -text: .text%__1cLJvmtiExportRenter_start_phase6F_v_; -text: .text%__1cLJvmtiExportNpost_vm_start6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_start6F_v_; -text: .text%__1cNinstanceKlassKinitialize6MpnGThread__v_; -text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cMelapsedTimerFstart6M_v_; -text: .text%__1cCosPelapsed_counter6F_x_; -text: .text%__1cMelapsedTimerEstop6M_v_; -text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_; -text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__; -text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceKlass.o; -text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_; -text: .text%__1cLklassItable2t6MnTinstanceKlassHandle__v_; -text: .text%__1cLklassVtableYadd_new_mirandas_to_list6FpnNGrowableArray4CpnNmethodOopDesc___pnPobjArrayOopDesc_6pnMklassOopDesc__v_; -text: .text%__1cNinstanceKlassbBcall_class_initializer_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; -text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; -text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__; -text: .text%__1cFframeVinterpreter_frame_bcp6kM_pC_; -text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoolHandle_inJBytecodesECode_pnGThread__v_; -text: .text%__1cMLinkResolverMresolve_pool6FrnLKlassHandle_rnMsymbolHandle_42nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__; -text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceKlass.o; -text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_; -text: .text%__1cMLinkResolverbAcheck_method_accessability6FnLKlassHandle_11nMmethodHandle_pnGThread__v_; -text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; -text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__; -text: .text%__1cRSignatureIterator2t6MnMsymbolHandle__v_; -text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_; -text: .text%__1cNSignatureInfoHdo_void6M_v_: bytecode.o; -text: .text%__1cQResultTypeFinderDset6MinJBasicType__v_: bytecode.o; -text: .text%__1cSInterpreterRuntimeTprepare_native_call6FpnKJavaThread_pnNmethodOopDesc__v_; -text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_; -text: .text%__1cRSignatureIterator2t6MpnNsymbolOopDesc__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIgenerate6MX_v_; -text: .text%__1cRSignatureIteratorSiterate_parameters6MX_v_; -text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; -text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; -text: .text%jni_RegisterNatives: jni.o; -text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; -text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; -text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; -text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; -text: .text%__1cKoopFactoryMnew_objArray6FpnMklassOopDesc_ipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassRallocate_objArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cSobjArrayKlassKlassXallocate_objArray_klass6MinLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__; -text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__; -text: .text%__1cNsymbolOopDescLas_C_string6kM_pc_; -text: .text%__1cLSymbolTableJbasic_add6MipCiIpnGThread__pnNsymbolOopDesc__; -text: .text%__1cLsymbolKlassPallocate_symbol6MpCipnGThread__pnNsymbolOopDesc__; -text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__; -text: .text%__1cFKlassRbase_create_klass6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__1_; -text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__; -text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlass.o; -text: .text%__1cKKlass_vtbl2n6FIrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cLAccessFlagsPatomic_set_bits6Mi_v_; -text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_; -text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cKarrayKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cKarrayKlassKjava_super6kM_pnMklassOopDesc__; -text: .text%__1cPjava_lang_ClassNcreate_mirror6FnLKlassHandle_pnGThread__pnHoopDesc__; -text: .text%__1cNobjArrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cNinstanceKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cMLinkResolverZcheck_field_accessability6FnLKlassHandle_11rnPfieldDescriptor_pnGThread__v_; -text: .text%__1cJFieldTypeKbasic_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_; -text: .text%__1cEUTF8Hstrrchr6FpWiW_1_; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_: bytecode.o; -text: .text%__1cNSignatureInfoHdo_long6M_v_: bytecode.o; -text: .text%JVM_CurrentTimeMillis; -text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; -text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; -text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; -text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cTconstantPoolOopDescNklass_name_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cNSignatureInfoGdo_int6M_v_: bytecode.o; -text: .text%__1cNSignatureInfoHdo_char6M_v_: bytecode.o; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_; -text: .text%__1cLklassVtableIindex_of6kMpnNmethodOopDesc_i_i_; -text: .text%__1cXNativeSignatureIteratorJdo_object6Mii_v_: interpreterRT_sparc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_object6M_v_; -text: .text%JVM_DoPrivileged; -text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_; -text: .text%__1cSvframeStreamCommonEnext6M_v_; -text: .text%__1cRPrivilegedElementKinitialize6MpnMvframeStream_pnHoopDesc_p0pnGThread__v_; -text: .text%__1cKJNIHandlesKmake_local6FpnHJNIEnv__pnHoopDesc__pnI_jobject__; -text: .text%__1cOJNIHandleBlockPallocate_handle6MpnHoopDesc__pnI_jobject__; -text: .text%__1cSInterpreterRuntimeNquicken_io_cc6FpnKJavaThread__v_; -text: .text%__1cNSignatureInfoHdo_bool6M_v_: bytecode.o; -text: .text%jni_FindClass: jni.o; -text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__; -text: .text%__1cbCfind_class_from_class_loader6FpnHJNIEnv__nMsymbolHandle_CnGHandle_3CpnGThread__pnH_jclass__; -text: .text%__1cRCompilationPolicyUcompleted_vm_startup6F_v_; -text: .text%jni_NewGlobalRef: jni.o; -text: .text%jni_GetStringUTFChars: jni.o; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cHUNICODEHas_utf86FpHi_pc_; -text: .text%JVM_FindPrimitiveClass; -text: .text%__1cJname2type6Fpkc_nJBasicType__; -text: .text%jni_ReleaseStringUTFChars; -text: .text%__1cVcreate_initial_thread6FnGHandle_pnKJavaThread_pnGThread__pnHoopDesc__: thread.o; -text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_; -text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_; -text: .text%JVM_CurrentThread; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_: bytecode.o; -text: .text%__1cSInterpreterRuntimeInewarray6FpnKJavaThread_nJBasicType_i_v_; -text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_: interpreterRT_sparc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIpass_int6M_v_: interpreterRT_sparc.o; -text: .text%JVM_ArrayCopy; -text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%JVM_GetStackAccessControlContext; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_; -text: .text%__1cJCodeCacheJfind_blob6Fpv_pnICodeBlob__; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; -text: .text%JVM_GetInheritedAccessControlContext; -text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_; -text: .text%JVM_SetThreadPriority; -text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; -text: .text%__1cGThreadMset_priority6Fp0nOThreadPriority__v_; -text: .text%__1cCosMset_priority6FpnGThread_nOThreadPriority__nIOSReturn__; -text: .text%__1cQjava_lang_ThreadRset_thread_status6FpnHoopDesc_n0AMThreadStatus__v_; -text: .text%JVM_IsThreadAlive; -text: .text%JVM_StartThread; -text: .text%__1cQjava_lang_ThreadJstackSize6FpnHoopDesc__x_; -text: .text%__1cKJavaThread2t6MpFp0pnGThread__vI_v_; -text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; -text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; -text: .text%__1cGThreadFstart6Fp0_v_; -text: .text%__1cbAcall_initializeSystemClass6FpnGThread__v_: thread.o; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_: interpreterRT_sparc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorJpass_long6M_v_; -text: .text%__1cOMacroAssemblerOstore_argument6MpnMRegisterImpl_rnIArgument__v_: interpreterRT_sparc.o; -text: .text%JVM_MonitorWait; -text: .text%__1cQjava_lang_ThreadRget_thread_status6FpnHoopDesc__n0AMThreadStatus__; -text: .text%__1cSObjectSynchronizerEwait6FnGHandle_xpnGThread__v_; -text: .text%__1cNObjectMonitor2t6M_v_; -text: .text%__1cNObjectMonitorHRecycle6M_v_; -text: .text%__1cNObjectMonitorEexit6MpnGThread__v_; -text: .text%jni_GetObjectClass: jni.o; -text: .text%jni_GetMethodID: jni.o; -text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; -text: .text%jni_NewStringUTF: jni.o; -text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; -text: .text%jni_CallObjectMethod: jni.o; -text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_; -text: .text%__1cUjni_invoke_nonstatic6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; -text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6MX_v_: jni.o; -text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_: jni.o; -text: .text%jni_ExceptionOccurred: jni.o; -text: .text%jni_DeleteLocalRef: jni.o; -text: .text%jio_vsnprintf; -text: .text%jni_EnsureLocalCapacity; -text: .text%jni_GetStaticMethodID: jni.o; -text: .text%jni_CallStaticObjectMethodV: jni.o; -text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%jni_ExceptionCheck: jni.o; -text: .text%jni_NewString: jni.o; -text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__; -text: .text%JVM_InitProperties; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%jni_GetFieldID: jni.o; -text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cJFieldTypeOget_array_info6FpnNsymbolOopDesc_pip2pnGThread__nJBasicType__; -text: .text%JVM_RegisterUnsafeMethods; -text: .text%JVM_IsArrayClass; -text: .text%JVM_GetComponentType; -text: .text%__1cKReflectionUarray_component_type6FpnHoopDesc_pnGThread__2_; -text: .text%JVM_IsPrimitiveClass; -text: .text%JVM_GetClassLoader; -text: .text%JVM_DesiredAssertionStatus; -text: .text%JVM_InternString; -text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_; -text: .text%__1cQjava_lang_StringRas_unicode_string6FpnHoopDesc_ri_pH_; -text: .text%JVM_NanoTime; -text: .text%__1cCosNjavaTimeNanos6F_x_; -text: .text%JVM_GetCallerClass; -text: .text%JVM_SupportsCX8; -text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_: interpreterRT_sparc.o; -text: .text%JVM_GetClassDeclaredFields; -text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; -text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_; -text: .text%__1cEUTF8Ounicode_length6Fpkci_i_; -text: .text%__1cKReflectionInew_type6FnMsymbolHandle_nLKlassHandle_pnGThread__nGHandle__; -text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cXjava_lang_reflect_FieldGcreate6FpnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_name6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_type6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectMset_override6FpnHoopDesc_C_v_; -text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cXjava_lang_reflect_FieldPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nGHandle__; -text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cOtypeArrayKlassSallocate_permanent6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cLklassItableUcompute_itable_index6FpnNmethodOopDesc__i_; -text: .text%__1cWConstantPoolCacheEntrySset_interface_call6MnMmethodHandle_i_v_; -text: .text%Unsafe_ObjectFieldOffset; -text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_; -text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldNset_signature6FpnHoopDesc_2_v_; -text: .text%JVM_IHashCode; -text: .text%__1cHoopDescSslow_identity_hash6M_i_; -text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__i_; -text: .text%__1cCosGrandom6F_l_; -text: .text%jni_GetStaticFieldID: jni.o; -text: .text%__1cNinstanceKlassKjni_id_for6Mi_pnFJNIid__; -text: .text%jni_SetStaticObjectField: jni.o; -text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%jni_GetStringUTFLength: jni.o; -text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; -text: .text%__1cHUNICODELutf8_length6FpHi_i_; -text: .text%jni_GetStringLength: jni.o; -text: .text%jni_GetStringUTFRegion: jni.o; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; -text: .text%JVM_FindClassFromClassLoader; -text: .text%JVM_FindClassFromBootLoader; -text: .text%JVM_IsInterface; -text: .text%JVM_GetClassDeclaredConstructors; -text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDesc__; -text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; -text: .text%__1cPSignatureStreamEnext6M_v_; -text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__; -text: .text%__1cSconstMethodOopDescZchecked_exceptions_length6kM_i_; -text: .text%__1cbDjava_lang_reflect_ConstructorGcreate6FpnGThread__nGHandle__; -text: .text%__1cbDjava_lang_reflect_ConstructorJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cKarrayKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%JVM_Clone; -text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; -text: .text%JVM_GetClassAccessFlags; -text: .text%JVM_GetClassName; -text: .text%__1cFKlassNexternal_name6kM_pkc_; -text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; -text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cLStringTableJbasic_add6MinGHandle_pHiIpnGThread__pnHoopDesc__; -text: .text%JVM_GetClassModifiers; -text: .text%jni_GetSuperclass: jni.o; -text: .text%__1cKJNIHandlesKmake_local6FpnHoopDesc__pnI_jobject__; -text: .text%JVM_NewInstanceFromConstructor; -text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_; -text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; -text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; -text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; -text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__; -text: .text%__1cPClassFileStream2t6MpCipc_v_; -text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_; -text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_; -text: .text%__1cQSystemDictionarySjava_system_loader6F_pnHoopDesc__; -text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__; -text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileStreamGget_u16MpnGThread__C_; -text: .text%__1cPClassFileParserRverify_legal_utf86MpkCipnGThread__v_; -text: .text%__1cPClassFileStreamHskip_u16MipnGThread__v_; -text: .text%__1cTconstantPoolOopDescRname_ref_index_at6Mi_i_; -text: .text%__1cTconstantPoolOopDescWsignature_ref_index_at6Mi_i_; -text: .text%__1cPClassFileParserbCverify_legal_class_modifiers6MipnGThread__v_; -text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_; -text: .text%__1cPClassFileParserUassemble_annotations6MpCi1ipnGThread__nPtypeArrayHandle__; -text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__; -text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cSconstMethodOopDescLobject_size6Fiiii_i_; -text: .text%__1cSconstMethodOopDescZset_inlined_tables_length6Miii_v_; -text: .text%__1cLmethodKlassIallocate6MnRconstMethodHandle_nLAccessFlags_pnGThread__pnNmethodOopDesc__; -text: .text%__1cRInvocationCounterEinit6M_v_; -text: .text%__1cLmethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cNmethodOopDescbAcompute_size_of_parameters6MpnGThread__v_; -text: .text%__1cSconstMethodOopDescbBcompressed_linenumber_table6kM_pC_; -text: .text%__1cVCompressedWriteStreamEgrow6M_v_; -text: .text%__1cPClassFileParserVparse_exception_table6MIInSconstantPoolHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cKoopFactoryWnew_permanent_intArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; -text: .text%method_compare: methodOop.o; -text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; -text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; -text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o; -text: .text%__1cNinstanceKlassQinit_implementor6M_v_; -text: .text%__1cPClassFileParserbAparse_classfile_attributes6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbNparse_classfile_inner_classes_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__H_; -text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; -text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: classFileParser.o; -text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; -text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; -text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; -text: .text%JVM_MaxMemory; -text: .text%__1cQGenCollectedHeapMmax_capacity6kM_I_; -text: .text%__1cQDefNewGenerationMmax_capacity6kM_I_; -text: .text%Unsafe_AllocateMemory; -text: .text%Unsafe_SetNativeLong; -text: .text%__1cNSignatureInfoHdo_byte6M_v_: bytecode.o; -text: .text%Unsafe_GetNativeByte; -text: .text%Unsafe_FreeMemory; -text: .text%__1cNSignatureInfoIdo_float6M_v_: bytecode.o; -text: .text%jni_NewObjectV: jni.o; -text: .text%jni_GetStringRegion: jni.o; -text: .text%jni_GetObjectField: jni.o; -text: .text%jni_GetStringCritical: jni.o; -text: .text%jni_ReleaseStringCritical: jni.o; -text: .text%__1cQSimpleCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; -text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%JVM_LoadLibrary; -text: .text%JVM_FindLibraryEntry; -text: .text%jni_GetJavaVM; -text: .text%JVM_IsSupportedJNIVersion; -text: .text%jni_SetIntField: jni.o; -text: .text%jni_SetLongField: jni.o; -text: .text%JVM_FindSignal; -text: .text%JVM_RegisterSignal; -text: .text%__1cCosMuser_handler6F_pv_; -text: .text%__1cCosGsignal6Fipv_1_; -text: .text%__1cWreset_vm_info_property6FpnGThread__v_: thread.o; -text: .text%__1cVquicken_jni_functions6F_v_; -text: .text%__1cQJNI_FastGetFieldbFgenerate_fast_get_boolean_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_int_field06FnJBasicType__pC_; -text: .text%__1cYjni_GetBooleanField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_byte_field6F_pC_; -text: .text%__1cVjni_GetByteField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_char_field6F_pC_; -text: .text%__1cVjni_GetCharField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_short_field6F_pC_; -text: .text%__1cWjni_GetShortField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbBgenerate_fast_get_int_field6F_pC_; -text: .text%__1cUjni_GetIntField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_long_field6F_pC_; -text: .text%__1cVjni_GetLongField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_float_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_float_field06FnJBasicType__pC_; -text: .text%__1cWjni_GetFloatField_addr6F_pC_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_double_field6F_pC_; -text: .text%__1cXjni_GetDoubleField_addr6F_pC_; -text: .text%__1cSset_init_completed6F_v_; -text: .text%__1cJTimeStampGupdate6M_v_; -text: .text%__1cQSystemDictionarybAcompute_java_system_loader6FpnGThread__v_; -text: .text%jni_NewObjectArray: jni.o; -text: .text%__1cNobjArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; -text: .text%jni_SetObjectArrayElement: jni.o; -text: .text%jni_GetObjectArrayElement: jni.o; -text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; -text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cLJvmtiExportQenter_live_phase6F_v_; -text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_; -text: .text%__1cUJvmtiEventControllerHvm_init6F_v_; -text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_; -text: .text%__1cMPeriodicTask2t6MI_v_; -text: .text%__1cMPeriodicTaskGenroll6M_v_; -text: .text%__1cCosLsignal_init6F_v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_; -text: .text%__1cCosOsignal_init_pd6F_v_; -text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; -text: .text%__1cICompiler2t6M_v_; -text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; -text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; -text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; -text: .text%__1cCosLsignal_wait6F_i_; -text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; -text: .text%__1cCosFyield6F_v_; -text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o; -text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%__1cICompilerKinitialize6M_v_; -text: .text%__1cKManagementKinitialize6FpnGThread__v_; -text: .text%__1cRLowMemoryDetectorKinitialize6F_v_; -text: .text%__1cLStatSamplerGengage6F_v_; -text: .text%__1cCosRelapsed_frequency6F_x_; -text: .text%__1cLStatSamplerbMcreate_system_property_instrumentation6FpnGThread__v_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnPPerfLongCounter__; -text: .text%__1cSHighResTimeSamplerLtake_sample6M_x_: statSampler.o; -text: .text%__1cPPerfDataManagerHsampled6F_pnMPerfDataList__; -text: .text%__1cJTimeStampMmilliseconds6kM_x_; -text: .text%__1cKManagementWrecord_vm_startup_time6Fxx_v_; -text: .text%__1cORuntimeServiceYrecord_application_start6F_v_; -text: .text%__1cNWatcherThreadDrun6M_v_; -text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_; -text: .text%JVM_FindLoadedClass; -text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%jni_CallStaticObjectMethod: jni.o; -text: .text%__1cCosPhint_no_preempt6F_v_; -text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; -text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_; -text: .text%__1cKPerfStringKset_string6Mpkc_v_; -text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; -text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; -text: .text%__1cIciObject2t6MnGHandle__v_; -text: .text%__1cIciObjectJset_ident6MI_v_; -text: .text%__1cGciType2t6MnJBasicType__v_; -text: .text%__1cIciObject2t6M_v_; -text: .text%__1cPciObjectFactoryEfind6MpnHoopDesc_pnNGrowableArray4CpnIciObject____i_; -text: .text%__1cPciObjectFactoryNfind_non_perm6MpnHoopDesc__rpn0ANNonPermObject__; -text: .text%__1cPciObjectFactoryRcreate_new_object6MpnHoopDesc__pnIciObject__; -text: .text%__1cIciSymbolEmake6Fpkc_p0_; -text: .text%__1cPciObjectFactoryDget6MpnHoopDesc__pnIciObject__; -text: .text%__1cHciKlass2t6MnLKlassHandle_pnIciSymbol__v_; -text: .text%__1cGciType2t6MnLKlassHandle__v_; -text: .text%__1cPciObjectFactoryGinsert6MipnIciObject_pnNGrowableArray4C2___v_; -text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle__v_; -text: .text%__1cFKlassIsubklass6kM_p0_; -text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cHciKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cUciInstanceKlassKlassEmake6F_p0_; -text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; -text: .text%__1cGciType2t6MpnHciKlass__v_; -text: .text%__1cIciObject2t6MpnHciKlass__v_; -text: .text%__1cPciObjArrayKlass2t6MpnIciSymbol_pnHciKlass_i_v_; -text: .text%__1cUciObjArrayKlassKlassEmake6F_p0_; -text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_; -text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cMciArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cFciEnvWget_method_from_handle6MpnI_jobject__pnIciMethod__; -text: .text%__1cIciMethod2t6MnMmethodHandle__v_; -text: .text%__1cLciSignature2t6MpnHciKlass_pnIciSymbol__v_; -text: .text%__1cPSignatureStreamJas_symbol6MpnGThread__pnNsymbolOopDesc__; -text: .text%__1cPciInstanceKlassGloader6M_pnHoopDesc__; -text: .text%__1cPciInstanceKlassRprotection_domain6M_pnHoopDesc__; -text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cGciTypeEmake6FnJBasicType__p0_; -text: .text%__1cICompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cWImplicitExceptionTableIset_size6MI_v_; -text: .text%__1cLCompilationOcompile_method6M_v_; -text: .text%__1cYDebugInformationRecorder2t6MpnLOopRecorder__v_; -text: .text%__1cUDebugInfoWriteStream2t6MpnYDebugInformationRecorder_i_v_; -text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; -text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; -text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: generateOopMap.o; -text: .text%__1cOGenerateOopMapbImark_bbheaders_and_count_gc_points6M_v_; -text: .text%__1cOGenerateOopMapNinitialize_bb6M_v_; -text: .text%__1cOGenerateOopMapLbb_mark_fct6Fp0ipi_v_; -text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; -text: .text%__1cOGenerateOopMapRinit_basic_blocks6M_v_; -text: .text%__1cOGenerateOopMapKinit_state6M_v_; -text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_; -text: .text%__1cOGenerateOopMapUreachable_basicblock6Fp0ipi_v_; -text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__; -text: .text%__1cOGenerateOopMapYsetup_method_entry_state6M_v_; -text: .text%__1cOGenerateOopMapbAmake_context_uninitialized6M_v_; -text: .text%__1cRComputeEntryStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_; -text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapKcopy_state6MpnNCellTypeState_2_v_; -text: .text%__1cOGenerateOopMapKinterp_all6M_v_; -text: .text%__1cOGenerateOopMapJinterp_bb6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapQnext_bb_start_pc6MpnKBasicBlock__i_; -text: .text%__1cOGenerateOopMapHinterp16MpnOBytecodeStream__v_; -text: .text%__1cOGenerateOopMapGppload6MpnNCellTypeState_i_v_; -text: .text%__1cOGenerateOopMapHget_var6Mi_nNCellTypeState__; -text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__; -text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; -text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; -text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_; -text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_; -text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; -text: .text%__1cNCellTypeStateFmerge6kM0i_0_; -text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_; -text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; -text: .text%__1cOGenerateOopMapNreport_result6M_v_; -text: .text%__1cLCompilationJbuild_hir6M_v_; -text: .text%__1cCIR2t6MpnLCompilation_pnIciMethod_i_v_; -text: .text%__1cMciNullObjectEmake6F_p0_; -text: .text%__1cMGraphBuilderKinitialize6F_v_; -text: .text%__1cJXHandlers2t6MpnIciMethod__v_; -text: .text%__1cIciMethodJload_code6M_v_; -text: .text%__1cLCompilationTdebug_info_recorder6kM_pnYDebugInformationRecorder__; -text: .text%__1cHIRScopeLbuild_graph6MpnLCompilation_i_pnKBlockBegin__; -text: .text%__1cQBlockListBuilderLset_leaders6M_v_; -text: .text%__1cLciSignatureHtype_at6kMi_pnGciType__; -text: .text%__1cMas_ValueType6FnJBasicType__pnJValueType__; -text: .text%__1cIValueMap2t6M_v_; -text: .text%__1cNResourceArrayGexpand6MIiri_v_; -text: .text%__1cIValueMapIkill_all6M_v_; -text: .text%__1cMGraphBuilderbBiterate_bytecodes_for_block6Mi_pnIBlockEnd__; -text: .text%__1cMGraphBuilderJScopeDataIblock_at6Mi_pnKBlockBegin__; -text: .text%__1cMGraphBuilderKload_local6MpnJValueType_i_v_; -text: .text%__1cKValueStackEpush6MpnJValueType_pnLInstruction__v_: c1_GraphBuilder.o; -text: .text%__1cKValueStackDpop6MpnJValueType__pnLInstruction__: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderHif_node6MpnLInstruction_n0BJCondition_2pnKValueStack__v_; -text: .text%__1cCIfFvisit6MpnSInstructionVisitor__v_: c1_Canonicalizer.o; -text: .text%__1cNCanonicalizerFdo_If6MpnCIf__v_; -text: .text%__1cLInstructionOas_AccessField6M_pnLAccessField__: c1_Canonicalizer.o; -text: .text%__1cLInstructionLas_UnsafeOp6M_pnIUnsafeOp__: c1_Canonicalizer.o; -text: .text%__1cLInstructionMas_Intrinsic6M_pnJIntrinsic__: c1_Canonicalizer.o; -text: .text%__1cLInstructionEhash6kM_i_: c1_Canonicalizer.o; -text: .text%__1cKStateSplitNas_StateSplit6M_p0_: c1_Canonicalizer.o; -text: .text%__1cIBlockEndLas_BlockEnd6M_p0_: c1_Canonicalizer.o; -text: .text%__1cLInstructionJas_Return6M_pnGReturn__: c1_Canonicalizer.o; -text: .text%__1cLInstructionIas_Throw6M_pnFThrow__: c1_Canonicalizer.o; -text: .text%__1cMGraphBuilderJScopeDataQadd_to_work_list6MpnKBlockBegin__v_; -text: .text%__1cMGraphBuilderLinstance_of6Mi_v_; -text: .text%__1cTconstantPoolOopDescSklass_at_if_loaded6FnSconstantPoolHandle_i_pnMklassOopDesc__; -text: .text%__1cKInstanceOfFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerNdo_InstanceOf6MpnKInstanceOf__v_; -text: .text%__1cKValueStackMclear_locals6M_v_; -text: .text%__1cIConstantFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerLdo_Constant6MpnIConstant__v_; -text: .text%__1cIConstantEhash6kM_i_; -text: .text%__1cLIntConstantOas_IntConstant6M_p0_: c1_Canonicalizer.o; -text: .text%__1cIConstantEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cKInstanceOfNas_InstanceOf6M_p0_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderNmethod_return6MpnLInstruction__v_; -text: .text%__1cGReturnFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerJdo_Return6MpnGReturn__v_; -text: .text%__1cGReturnJas_Return6M_p0_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderKcheck_cast6Mi_v_; -text: .text%__1cNCanonicalizerMdo_CheckCast6MpnJCheckCast__v_; -text: .text%__1cMGraphBuilderMaccess_field6MnJBytecodesECode__v_; -text: .text%__1cFciEnvSget_field_by_index6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__; -text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; -text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; -text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cJLoadFieldFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerMdo_LoadField6MpnJLoadField__v_; -text: .text%__1cJLoadFieldEhash6kM_i_: c1_Instruction.o; -text: .text%__1cJLoadFieldEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cQSystemDictionaryEfind6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cMGraphBuilderIstack_op6MnJBytecodesECode__v_; -text: .text%__1cMGraphBuilderNarithmetic_op6MpnJValueType_nJBytecodesECode_pnKValueStack__v_; -text: .text%__1cJValueTypeEmeet6kMp0_1_; -text: .text%__1cMArithmeticOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerPdo_ArithmeticOp6MpnMArithmeticOp__v_; -text: .text%__1cNCanonicalizerGdo_Op26MpnDOp2__v_; -text: .text%__1cMArithmeticOpEhash6kM_i_: c1_Instruction.o; -text: .text%__1cMArithmeticOpEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cMGraphBuilderJincrement6M_v_; -text: .text%__1cMGraphBuilderMload_indexed6MnJBasicType__v_; -text: .text%__1cLArrayLengthFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerOdo_ArrayLength6MpnLArrayLength__v_; -text: .text%__1cLArrayLengthEhash6kM_i_: c1_GraphBuilder.o; -text: .text%__1cLArrayLengthEname6kM_pkc_: c1_GraphBuilder.o; -text: .text%__1cLLoadIndexedFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerOdo_LoadIndexed6MpnLLoadIndexed__v_; -text: .text%__1cLLoadIndexedEhash6kM_i_: c1_Instruction.o; -text: .text%__1cLLoadIndexedEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cIConstantLas_Constant6M_p0_: c1_Instruction.o; -text: .text%__1cCIRIoptimize6M_v_; -text: .text%__1cJOptimizer2t6MpnCIR__v_; -text: .text%__1cJOptimizerbHeliminate_conditional_expressions6M_v_; -text: .text%__1cCIRQiterate_preorder6MpnMBlockClosure__v_; -text: .text%__1cKBlockBeginQiterate_preorder6MpnMBlockClosure__v_; -text: .text%__1cNCE_EliminatorIblock_do6MpnKBlockBegin__v_: c1_Optimizer.o; -text: .text%__1cLInstructionFas_If6M_pnCIf__: c1_Canonicalizer.o; -text: .text%__1cKBlockBeginQiterate_preorder6MrnJboolArray_pnMBlockClosure__v_; -text: .text%__1cCIfFas_If6M_p0_: c1_Canonicalizer.o; -text: .text%__1cJOptimizerQeliminate_blocks6M_v_; -text: .text%__1cLBlockMergerIblock_do6MpnKBlockBegin__v_: c1_Optimizer.o; -text: .text%__1cEGotoHas_Goto6M_p0_: c1_Canonicalizer.o; -text: .text%__1cLInstructionHas_Goto6M_pnEGoto__: c1_Canonicalizer.o; -text: .text%__1cJOptimizerVeliminate_null_checks6M_v_; -text: .text%__1cTNullCheckEliminatorLiterate_one6MpnKBlockBegin__v_; -text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%__1cQNullCheckVisitorNdo_BlockBegin6MpnKBlockBegin__v_; -text: .text%__1cQNullCheckVisitorHdo_Base6MpnEBase__v_; -text: .text%__1cEGotoFvisit6MpnSInstructionVisitor__v_: c1_Canonicalizer.o; -text: .text%__1cQNullCheckVisitorHdo_Goto6MpnEGoto__v_; -text: .text%__1cFLocalFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cQNullCheckVisitorIdo_Local6MpnFLocal__v_; -text: .text%__1cQNullCheckVisitorFdo_If6MpnCIf__v_; -text: .text%__1cQNullCheckVisitorLdo_Constant6MpnIConstant__v_; -text: .text%__1cQNullCheckVisitorJdo_Return6MpnGReturn__v_; -text: .text%__1cQNullCheckVisitorNdo_InstanceOf6MpnKInstanceOf__v_; -text: .text%__1cQNullCheckVisitorMdo_CheckCast6MpnJCheckCast__v_; -text: .text%__1cQNullCheckVisitorMdo_LoadField6MpnJLoadField__v_; -text: .text%__1cTNullCheckEliminatorShandle_AccessField6MpnLAccessField__v_; -text: .text%__1cQNullCheckVisitorPdo_ArithmeticOp6MpnMArithmeticOp__v_; -text: .text%__1cQNullCheckVisitorOdo_ArrayLength6MpnLArrayLength__v_; -text: .text%__1cTNullCheckEliminatorShandle_ArrayLength6MpnLArrayLength__v_; -text: .text%__1cQNullCheckVisitorOdo_LoadIndexed6MpnLLoadIndexed__v_; -text: .text%__1cTNullCheckEliminatorShandle_LoadIndexed6MpnLLoadIndexed__v_; -text: .text%__1cGBitMapQset_intersection6M0_v_; -text: .text%__1cMArithmeticOpPas_ArithmeticOp6M_p0_: c1_Instruction.o; -text: .text%__1cLInstructionJas_Invoke6M_pnGInvoke__: c1_Canonicalizer.o; -text: .text%__1cLInstructionLas_NewArray6M_pnINewArray__: c1_Canonicalizer.o; -text: .text%__1cLInstructionOas_NewInstance6M_pnLNewInstance__: c1_Canonicalizer.o; -text: .text%__1cLInstructionQas_AccessMonitor6M_pnNAccessMonitor__: c1_Canonicalizer.o; -text: .text%__1cJBlockListPiterate_forward6MpnMBlockClosure__v_; -text: .text%__1cNResourceArrayEsort6MIpGpkv2_i_v_; -text: .text%__1cKStateSplitFscope6kM_pnHIRScope__; -text: .text%__1cIBlockEndOsubstitute_sux6MpnKBlockBegin_2_v_; -text: .text%__1cCIRMcompute_code6M_v_; -text: .text%__1cLInstructionGnegate6Fn0AJCondition__1_; -text: .text%__1cJBlockListJblocks_do6MpFpnKBlockBegin__v_v_; -text: .text%__1cFLocalIas_Local6M_p0_: c1_GraphBuilder.o; -text: .text%__1cLCompilationIemit_lir6M_v_; -text: .text%__1cLInstructionGas_Phi6M_pnDPhi__: c1_Canonicalizer.o; -text: .text%__1cMas_BasicType6FpnJValueType__nJBasicType__; -text: .text%__1cJValueTypeRas_ObjectConstant6M_pnOObjectConstant__: c1_Canonicalizer.o; -text: .text%__1cLLIR_OprFactKvalue_type6FpnJValueType__pnLLIR_OprDesc__; -text: .text%__1cJArrayTypeMas_ArrayType6M_p0_: c1_ValueType.o; -text: .text%__1cILIR_ListKshift_left6MpnLLIR_OprDesc_222_v_; -text: .text%__1cJValueTypeLas_VoidType6M_pnIVoidType__: c1_Canonicalizer.o; -text: .text%__1cORangeCheckStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_sparc.o; -text: .text%__1cTSimpleExceptionStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_sparc.o; -text: .text%__1cGLIR_OpLas_OpBranch6M_pnMLIR_OpBranch__: c1_LIR.o; -text: .text%__1cMLIR_OpBranchLas_OpBranch6M_p0_: c1_LIR.o; -text: .text%__1cNResourceArrayJremove_at6MIi_v_; -text: .text%__1cHIRScopeJmax_stack6kM_i_; -text: .text%__1cGLIR_OpGas_Op16M_pnHLIR_Op1__: c1_LIR.o; -text: .text%__1cLLIR_OpLabelKas_OpLabel6M_p0_: c1_LIR.o; -text: .text%__1cHLIR_Op1Gas_Op16M_p0_: c1_LIR.o; -text: .text%__1cLLIR_OpDelayKas_OpDelay6M_p0_: c1_LIR.o; -text: .text%__1cNLIR_AssemblerJemit_code6MpnJBlockList__v_; -text: .text%__1cLInstructionLas_Constant6M_pnIConstant__: c1_Canonicalizer.o; -text: .text%__1cJValueTypeNas_DoubleType6M_pnKDoubleType__: c1_Canonicalizer.o; -text: .text%__1cJValueTypeMas_FloatType6M_pnJFloatType__: c1_Canonicalizer.o; -text: .text%__1cNLIR_AssemblerMemit_opLabel6MpnLLIR_OpLabel__v_; -text: .text%__1cNLIR_AssemblerIemit_op06MpnHLIR_Op0__v_; -text: .text%__1cNLIR_AssemblerIemit_op26MpnHLIR_Op2__v_; -text: .text%__1cRC1_MacroAssemblerSinline_cache_check6MpnMRegisterImpl_2_v_; -text: .text%__1cRC1_MacroAssemblerOverified_entry6M_v_; -text: .text%__1cNLIR_AssemblerbBinitial_frame_size_in_bytes6M_i_; -text: .text%__1cRC1_MacroAssemblerLbuild_frame6Mi_v_; -text: .text%__1cRAbstractAssemblerbDgenerate_stack_overflow_check6Mi_v_; -text: .text%__1cNLIR_AssemblerNemit_opBranch6MpnMLIR_OpBranch__v_; -text: .text%__1cNLIR_AssemblerKemit_delay6MpnLLIR_OpDelay__v_; -text: .text%__1cNLIR_AssemblerLcode_offset6kM_i_; -text: .text%__1cNLIR_AssemblerQemit_opTypeCheck6MpnPLIR_OpTypeCheck__v_; -text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cNLIR_AssemblerEload6MpnMRegisterImpl_i2nJBasicType_pnMCodeEmitInfo__i_; -text: .text%__1cNLIR_AssemblerIemit_op16MpnHLIR_Op1__v_; -text: .text%__1cNLIR_AssemblerOemit_code_stub6MpnICodeStub__v_; -text: .text%__1cTSimpleExceptionStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o; -text: .text%__1cNLIR_AssemblerbDadd_debug_info_for_null_check6MipnMCodeEmitInfo__v_; -text: .text%__1cVImplicitNullCheckStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o; -text: .text%__1cORangeCheckStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o; -text: .text%__1cNLIR_AssemblerZadd_debug_info_for_branch6MpnMCodeEmitInfo__v_; -text: .text%__1cGOopMapJdeep_copy6M_p0_; -text: .text%__1cGOopMap2t6Mn0ANDeepCopyToken_p0_v_; -text: .text%__1cYDebugInformationRecorderTcreate_scope_values6MpnNGrowableArray4CpnKScopeValue____pnKDebugToken__; -text: .text%__1cNLocationValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cILocationIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cYDebugInformationRecorderVcreate_monitor_values6MpnNGrowableArray4CpnMMonitorValue____pnKDebugToken__; -text: .text%__1cLCompilationQemit_code_epilog6MpnNLIR_Assembler__v_; -text: .text%__1cNLIR_AssemblerUemit_slow_case_stubs6M_v_; -text: .text%__1cTSimpleExceptionStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cNLIR_AssemblerNadd_call_info6MipnMCodeEmitInfo__v_; -text: .text%__1cVImplicitNullCheckStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cWImplicitExceptionTableGappend6MII_v_; -text: .text%__1cZresource_reallocate_bytes6FpcII_0_; -text: .text%__1cFArenaIArealloc6MpvII_1_; -text: .text%__1cQConstantIntValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cORangeCheckStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cNLIR_AssemblerKemit_stubs6MpnMCodeStubList__v_; -text: .text%__1cNLIR_Assembler2T6M_v_; -text: .text%__1cFciEnvbOcheck_for_system_dictionary_modification6MpnIciMethod__v_; -text: .text%__1cLOopRecorderIoop_size6M_i_; -text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_; -text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; -text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_; -text: .text%__1cOoop_RelocationLunpack_data6M_v_; -text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cIUniverseMnon_oop_word6F_pv_; -text: .text%__1cCosXnon_memory_address_word6F_pc_; -text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; -text: .text%__1cGPcDesc2t6Miii_v_; -text: .text%__1cOoop_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cODataRelocationJset_value6MpC_v_: relocInfo.o; -text: .text%__1cOoop_RelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cKRelocationRpd_set_data_value6MpCi_v_; -text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cLCompilation2T6M_v_; -text: .text%__1cFArena2T6M_v_; -text: .text%__1cICHeapObj2k6Fpv_v_; -text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; -text: .text%__1cFciEnv2T6M_v_; -text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTimer_pnLCompileTask__v_; -text: .text%__1cHnmethodKtotal_size6kM_i_; -text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_; -text: .text%jni_NewByteArray: jni.o; -text: .text%jni_SetByteArrayRegion: jni.o; -text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; -text: .text%jni_NewObject: jni.o; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%JVM_FillInStackTrace; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle__v_; -text: .text%__1cVPreserveExceptionMark2t6MrpnGThread__v_; -text: .text%__1cKJavaThreadGactive6F_p0_; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_; -text: .text%__1cVPreserveExceptionMark2T6M_v_; -text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; -text: .text%__1cSThreadLocalStorageGthread6F_pnGThread__: assembler_sparc.o; -text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; -text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_; -text: .text%__1cFframeZinterpreter_frame_set_bcx6Mi_v_; -text: .text%__1cRComputeEntryStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_; -text: .text%__1cQComputeCallStackHdo_void6M_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cMGraphBuilderHif_zero6MpnJValueType_nLInstructionJCondition__v_; -text: .text%__1cMGraphBuilderMnew_instance6Mi_v_; -text: .text%__1cVLoaderConstraintTableWfind_constrained_klass6MnMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cIciSymbolHbyte_at6Mi_i_; -text: .text%__1cPciInstanceKlassNloader_handle6M_pnI_jobject__; -text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; -text: .text%__1cLNewInstanceFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerOdo_NewInstance6MpnLNewInstance__v_; -text: .text%__1cMGraphBuilderGinvoke6MnJBytecodesECode__v_; -text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; -text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; -text: .text%__1cNciMethodKlassEmake6F_p0_; -text: .text%__1cQciBytecodeStreambAget_declared_method_holder6M_pnHciKlass__; -text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__; -text: .text%__1cLciSignatureLreturn_type6kM_pnGciType__; -text: .text%__1cKValueStackNpop_arguments6Mi_pnGValues__; -text: .text%__1cGInvokeFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerJdo_Invoke6MpnGInvoke__v_; -text: .text%__1cGInvokeJas_Invoke6M_p0_: c1_Instruction.o; -text: .text%__1cNCanonicalizerIdo_Throw6MpnFThrow__v_; -text: .text%__1cQNullCheckVisitorOdo_NewInstance6MpnLNewInstance__v_; -text: .text%__1cQNullCheckVisitorJdo_Invoke6MpnGInvoke__v_; -text: .text%__1cTNullCheckEliminatorNhandle_Invoke6MpnGInvoke__v_; -text: .text%__1cQNullCheckVisitorIdo_Throw6MpnFThrow__v_; -text: .text%__1cIVoidTypeLas_VoidType6M_p0_: c1_ValueType.o; -text: .text%__1cLNewInstanceKexact_type6kM_pnGciType__; -text: .text%__1cLNewInstanceOas_NewInstance6M_p0_: c1_Instruction.o; -text: .text%__1cPNewInstanceStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_sparc.o; -text: .text%__1cNLIR_AssemblerZjobject2reg_with_patching6MpnMRegisterImpl_pnMCodeEmitInfo__v_; -text: .text%__1cMPatchingStubQalign_patch_site6MpnOMacroAssembler__v_; -text: .text%__1cPNewInstanceStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o; -text: .text%__1cNLIR_AssemblerJemit_call6MpnOLIR_OpJavaCall__v_; -text: .text%__1cNLIR_AssemblerKalign_call6MnILIR_Code__v_; -text: .text%__1cICodeStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o; -text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cMPatchingStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cRAbstractAssemblerGa_byte6Mi_v_; -text: .text%__1cRNativeGeneralJumpUinsert_unconditional6FpC1_v_; -text: .text%__1cJrelocInfobDchange_reloc_info_for_address6FpnNRelocIterator_pCn0AJrelocType_4_v_; -text: .text%__1cPNewInstanceStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cWstatic_stub_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cOCallRelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_; -text: .text%__1cYinternal_word_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cODataRelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cWstatic_stub_RelocationLunpack_data6M_v_; -text: .text%__1cPjava_lang_ClassQprimitive_mirror6FnJBasicType__pnHoopDesc__; -text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; -text: .text%__1cXjava_lang_boxing_objectJget_value6FpnHoopDesc_pnGjvalue__nJBasicType__; -text: .text%__1cKJNIHandlesKmake_local6FpnGThread_pnHoopDesc__pnI_jobject__; -text: .text%__1cQComputeCallStackHdo_char6M_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; -text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; -text: .text%__1cNCanonicalizerMdo_NullCheck6MpnJNullCheck__v_; -text: .text%__1cMGraphBuilderJScopeDataLnum_returns6M_i_; -text: .text%__1cNCanonicalizerHdo_Goto6MpnEGoto__v_; -text: .text%__1cMGraphBuilderJScopeDataQincr_num_returns6M_v_; -text: .text%__1cGValuesIpush_all6Mpk0_v_: c1_ValueStack.o; -text: .text%__1cLCompilationVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cLInstructionEprev6MpnKBlockBegin__p0_; -text: .text%__1cQNullCheckVisitorMdo_NullCheck6MpnJNullCheck__v_; -text: .text%__1cIFrameMapQmake_new_address6kMi_nHAddress__; -text: .text%__1cNLIR_AssemblerFstore6MpnMRegisterImpl_2inJBasicType_pnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerJstack2reg6MpnLLIR_OprDesc_2nJBasicType__v_; -text: .text%jni_GetPrimitiveArrayCritical: jni.o; -text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; -text: .text%jni_SetBooleanField: jni.o; -text: .text%__1cXNativeSignatureIteratorIdo_float6M_v_: interpreterRT_sparc.o; -text: .text%JVM_IsNaN; -text: .text%__1cXNativeSignatureIteratorJdo_double6M_v_: interpreterRT_sparc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_double6M_v_; -text: .text%__1cEIfOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorHdo_IfOp6MpnEIfOp__v_; -text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; -text: .text%__1cQComputeCallStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cOGenerateOopMapEppop6MpnNCellTypeState__v_; -text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; -text: .text%__1cTciConstantPoolCacheDget6Mi_pv_; -text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; -text: .text%__1cNCanonicalizerNdo_StoreField6MpnKStoreField__v_; -text: .text%__1cIValueMapKkill_field6MpnHciField__v_; -text: .text%__1cMGraphBuilderHif_null6MpnJValueType_nLInstructionJCondition__v_; -text: .text%__1cOObjectConstantRas_ObjectConstant6M_p0_: c1_ValueType.o; -text: .text%__1cFKlassMnext_sibling6kM_p0_; -text: .text%__1cHConvertFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerKdo_Convert6MpnHConvert__v_; -text: .text%__1cHConvertEhash6kM_i_: c1_GraphBuilder.o; -text: .text%__1cHConvertEname6kM_pkc_: c1_GraphBuilder.o; -text: .text%__1cMGraphBuilderOnew_type_array6M_v_; -text: .text%__1cMNewTypeArrayFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerPdo_NewTypeArray6MpnMNewTypeArray__v_; -text: .text%__1cNClassConstantQas_ClassConstant6M_p0_: c1_ValueType.o; -text: .text%__1cHIntTypeEbase6kM_pnJValueType__: c1_Canonicalizer.o; -text: .text%__1cMGraphBuilderIlogic_op6MpnJValueType_nJBytecodesECode__v_; -text: .text%__1cHLogicOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerKdo_LogicOp6MpnHLogicOp__v_; -text: .text%__1cHLogicOpEhash6kM_i_: c1_Instruction.o; -text: .text%__1cHLogicOpEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cQNullCheckVisitorNdo_StoreField6MpnKStoreField__v_; -text: .text%__1cQNullCheckVisitorKdo_Convert6MpnHConvert__v_; -text: .text%__1cQNullCheckVisitorPdo_NewTypeArray6MpnMNewTypeArray__v_; -text: .text%__1cJLoadFieldMas_LoadField6M_p0_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorKdo_LogicOp6MpnHLogicOp__v_; -text: .text%__1cQNullCheckVisitorGdo_Phi6MpnDPhi__v_; -text: .text%__1cHConvertKas_Convert6M_p0_: c1_GraphBuilder.o; -text: .text%__1cQciTypeArrayKlassEmake6FnJBasicType__p0_; -text: .text%__1cHciKlassMaccess_flags6M_i_; -text: .text%__1cLLIR_OprFactQdummy_value_type6FpnJValueType__pnLLIR_OprDesc__; -text: .text%__1cILIR_ListUunsigned_shift_right6MpnLLIR_OprDesc_222_v_; -text: .text%__1cJValueTypeNas_ObjectType6M_pnKObjectType__: c1_Canonicalizer.o; -text: .text%__1cQNewTypeArrayStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_sparc.o; -text: .text%__1cNLIR_AssemblerOemit_opConvert6MpnNLIR_OpConvert__v_; -text: .text%__1cNLIR_AssemblerQemit_alloc_array6MpnQLIR_OpAllocArray__v_; -text: .text%__1cRC1_MacroAssemblerOallocate_array6MpnMRegisterImpl_2222ii2rnFLabel__v_; -text: .text%__1cQNewTypeArrayStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o; -text: .text%__1cNLIR_AssemblerOemit_alloc_obj6MpnOLIR_OpAllocObj__v_; -text: .text%__1cRC1_MacroAssemblerPallocate_object6MpnMRegisterImpl_222ii2rnFLabel__v_; -text: .text%__1cNLIR_AssemblerOmembar_release6M_v_; -text: .text%__1cNLIR_AssemblerGmembar6M_v_; -text: .text%__1cNLIR_AssemblerOmembar_acquire6M_v_; -text: .text%__1cNLIR_AssemblerCpc6kM_pC_; -text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cNLIR_AssemblerIlogic_op6MnILIR_Code_pnLLIR_OprDesc_33_v_; -text: .text%__1cQNewTypeArrayStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_; -text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; -text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cLRegisterMapIpd_clear6M_v_; -text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKCompiledIC2t6MpnKNativeCall__v_; -text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_; -text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_; -text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_; -text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cRNativeMovConstRegIset_data6Mi_v_; -text: .text%__1cOoop_RelocationIoop_addr6M_ppnHoopDesc__; -text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; -text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; -text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; -text: .text%__1cMGraphBuilderNload_constant6M_v_; -text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_; -text: .text%__1cMPeriodicTaskOreal_time_tick6FI_v_; -text: .text%__1cPStatSamplerTaskEtask6M_v_: statSampler.o; -text: .text%jni_GetArrayLength: jni.o; -text: .text%JVM_Read; -text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%JVM_DefineClassWithSource; -text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; -text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%JVM_GetClassCPEntriesCount; -text: .text%JVM_GetClassCPTypes; -text: .text%JVM_GetClassNameUTF; -text: .text%JVM_ReleaseUTF; -text: .text%JVM_FindClassFromClass; -text: .text%jni_IsSameObject: jni.o; -text: .text%JVM_GetClassFieldsCount; -text: .text%JVM_GetClassMethodsCount; -text: .text%JVM_GetMethodIxModifiers; -text: .text%JVM_GetMethodIxByteCodeLength; -text: .text%JVM_GetMethodIxByteCode; -text: .text%JVM_GetMethodIxExceptionTableLength; -text: .text%JVM_GetMethodIxLocalsCount; -text: .text%JVM_GetMethodIxArgsSize; -text: .text%JVM_GetMethodIxSignatureUTF; -text: .text%JVM_GetMethodIxMaxStack; -text: .text%JVM_GetMethodIxExceptionsCount; -text: .text%JVM_GetMethodIxExceptionIndexes; -text: .text%JVM_GetCPMethodNameUTF; -text: .text%JVM_GetCPMethodClassNameUTF; -text: .text%jni_NewLocalRef: jni.o; -text: .text%JVM_GetCPMethodModifiers; -text: .text%JVM_IsConstructorIx; -text: .text%JVM_GetCPMethodSignatureUTF; -text: .text%jni_DeleteGlobalRef: jni.o; -text: .text%jni_ToReflectedMethod: jni.o; -text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__; -text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodPset_return_type6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v_; -text: .text%jni_CallIntMethod: jni.o; -text: .text%jni_CallStaticVoidMethod: jni.o; -text: .text%jni_DetachCurrentThread; -text: .text%__1cQjava_lang_ThreadLthreadGroup6FpnHoopDesc__2_; -text: .text%JVM_MonitorNotifyAll; -text: .text%__1cNThreadServiceWcurrent_thread_exiting6FpnKJavaThread__v_; -text: .text%__1cLensure_join6FpnKJavaThread__v_: thread.o; -text: .text%__1cQjava_lang_ThreadNset_stillborn6FpnHoopDesc__v_; -text: .text%__1cKJavaThreadYremove_stack_guard_pages6M_v_; -text: .text%__1cHThreadsGremove6FpnKJavaThread__v_; -text: .text%__SLIP.DELETER__A: thread.o; -text: .text%__1cKJavaThread2T6M_v_; -text: .text%__1cHMonitor2T6M_v_; -text: .text%__1cFMutex2T6M_v_; -text: .text%lwp_cond_destroy: os_solaris.o; -text: .text%lwp_mutex_destroy: os_solaris.o; -text: .text%__1cUThreadSafepointStateHdestroy6FpnKJavaThread__v_; -text: .text%__1cGThread2T5B6M_v_; -text: .text%__1cCosLfree_thread6FpnIOSThread__v_; -text: .text%__1cIOSThread2T6M_v_; -text: .text%__1cIOSThreadKpd_destroy6M_v_; -text: .text%jni_DestroyJavaVM; -text: .text%jni_AttachCurrentThread; -text: .text%__1cHThreadsYis_supported_jni_version6Fi_C_; -text: .text%__1cKJavaThreadYcreate_stack_guard_pages6M_v_; -text: .text%__1cKJavaThreadVinvoke_shutdown_hooks6M_v_; -text: .text%__1cLbefore_exit6FpnKJavaThread__v_; -text: .text%__1cNWatcherThreadEstop6F_v_; -text: .text%__1cLStatSamplerJdisengage6F_v_; -text: .text%__1cMPeriodicTaskJdisenroll6M_v_; -text: .text%__1cMPeriodicTask2T5B6M_v_; -text: .text%__1cLStatSamplerHdestroy6F_v_; -text: .text%__1cMPerfDataList2T6M_v_; -text: .text%__1cLJvmtiExportNpost_vm_death6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_death6F_v_; -text: .text%__1cCosXterminate_signal_thread6F_v_; -text: .text%__1cCosNsigexitnum_pd6F_i_; -text: .text%__1cCosNsignal_notify6Fi_v_; -text: .text%__1cIVMThreadXwait_for_vm_thread_exit6F_v_; -text: .text%__1cUSafepointSynchronizeFbegin6F_v_; -text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; -text: .text%__1cJTimeStampSticks_since_update6kM_x_; -text: .text%__1cCosbCmake_polling_page_unreadable6F_v_; -text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; -text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_; -text: .text%__1cNObjectMonitorHis_busy6kM_i_; -text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_; -text: .text%__1cMCounterDecayFdecay6F_v_; -text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; -text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; -text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; -text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cNCompileBrokerQset_should_block6F_v_; -text: .text%__1cHVM_ExitbJwait_for_threads_in_native_to_block6F_i_; -text: .text%__1cIVMThreadHdestroy6F_v_; -text: .text%__SLIP.DELETER__A: vmThread.o; -text: .text%__1cSThreadLocalStorageRpd_invalidate_all6F_v_; -text: .text%__1cHVM_ExitNset_vm_exited6F_i_; -text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_; -text: .text%__1cCosRcurrent_thread_id6F_i_; -text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fi_v_; -text: .text%__1cMexit_globals6F_v_; -text: .text%__1cPperfMemory_exit6F_v_; -text: .text%__1cPPerfDataManagerHdestroy6F_v_; -text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; -text: .text%__1cMostream_exit6F_v_; -text: .text%__SLIP.DELETER__C: ostream.o; -text: .text%JVM_Halt; -text: .text%__1cHvm_exit6Fi_v_; -text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; -text: .text%__1cGThreadMget_priority6Fkpk0_nOThreadPriority__; -text: .text%__1cCosMget_priority6FkpknGThread_rnOThreadPriority__nIOSReturn__; -text: .text%__1cCosTget_native_priority6FkpknGThread_pi_nIOSReturn__; -text: .text%__1cMVM_OperationSset_calling_thread6MpnGThread_nOThreadPriority__v_; -text: .text%__1cCosJyield_all6Fi_v_; -text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_; -text: .text%__1cMVM_OperationIevaluate6M_v_; -text: .text%__1cHVM_ExitEdoit6M_v_; -text: .text%JVM_GetCPFieldSignatureUTF; -text: .text%__1cTconstantPoolOopDescOstring_at_impl6FnSconstantPoolHandle_ipnGThread__pnHoopDesc__; -text: .text%JVM_Write; -text: .text%__1cPClassFileStreamGget_u86MpnGThread__X_; -text: .text%JVM_GetMethodIxExceptionTableEntry; -text: .text%JVM_GetCPClassNameUTF; -text: .text%JVM_Sleep; -text: .text%__1cCosHSolarisTsetup_interruptible6FpnKJavaThread__v_; -text: .text%__1cQChunkPoolCleanerEtask6M_v_: allocation.o; -text: .text%JVM_GetClassContext; -text: .text%jni_IsAssignableFrom: jni.o; -text: .text%__1cRComputeEntryStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cRComputeEntryStackHdo_char6M_v_: generateOopMap.o; -text: .text%__1cMGraphBuilderNstore_indexed6MnJBasicType__v_; -text: .text%__1cIValueMapKkill_array6MpnJValueType__v_; -text: .text%__1cNCanonicalizerPdo_StoreIndexed6MpnMStoreIndexed__v_; -text: .text%__1cQNullCheckVisitorPdo_StoreIndexed6MpnMStoreIndexed__v_; -text: .text%__1cKValueStackGunlock6M_i_; -text: .text%__1cQMonitorEnterStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_sparc.o; -text: .text%__1cNLIR_AssemblerJemit_lock6MpnKLIR_OpLock__v_; -text: .text%__1cRC1_MacroAssemblerLlock_object6MpnMRegisterImpl_222rnFLabel__v_; -text: .text%__1cQMonitorEnterStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o; -text: .text%__1cMMonitorValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cRC1_MacroAssemblerNunlock_object6MpnMRegisterImpl_22rnFLabel__v_; -text: .text%__1cQMonitorEnterStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cPMonitorExitStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cRComputeEntryStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cMGraphBuilderIshift_op6MpnJValueType_nJBytecodesECode__v_; -text: .text%__1cHShiftOpFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerKdo_ShiftOp6MpnHShiftOp__v_; -text: .text%__1cHShiftOpEhash6kM_i_: c1_GraphBuilder.o; -text: .text%__1cHShiftOpEname6kM_pkc_: c1_GraphBuilder.o; -text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPoolHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cNCanonicalizerMdo_Intrinsic6MpnJIntrinsic__v_; -text: .text%__1cMas_ValueType6FnKciConstant__pnJValueType__; -text: .text%__1cQNullCheckVisitorMdo_Intrinsic6MpnJIntrinsic__v_; -text: .text%__1cQNullCheckVisitorKdo_ShiftOp6MpnHShiftOp__v_; -text: .text%__1cILIR_ListLshift_right6MpnLLIR_OprDesc_222_v_; -text: .text%__1cMNewTypeArrayKexact_type6kM_pnGciType__; -text: .text%__1cNLIR_AssemblerOemit_arraycopy6MpnPLIR_OpArrayCopy__v_; -text: .text%__1cMciArrayKlassMelement_type6M_pnGciType__; -text: .text%__1cNArrayCopyStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o; -text: .text%__1cNArrayCopyStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%jni_GetEnv; -text: .text%jni_CallStaticBooleanMethod: jni.o; -text: .text%__1cKarrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cOtypeArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_; -text: .text%__1cYciExceptionHandlerStreamEnext6M_v_: c1_IR.o; -text: .text%__1cLInstructionGmirror6Fn0AJCondition__1_; -text: .text%__1cKBlockBeginVadd_exception_handler6Mp0_v_; -text: .text%__1cIciObjectEhash6M_i_; -text: .text%__1cFChunk2n6FII_pv_; -text: .text%jni_CallStaticVoidMethodV: jni.o; -text: .text%JVM_GetLastErrorString; -text: .text%jni_Throw: jni.o; -text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_; -text: .text%JVM_DisableCompiler; -text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%JVM_Available; -text: .text%__1cLArrayLengthOas_ArrayLength6M_p0_: c1_GraphBuilder.o; -text: .text%__1cJLoadFieldKexact_type6kM_pnGciType__; -text: .text%__1cJLoadFieldNdeclared_type6kM_pnGciType__; -text: .text%__1cKoopFactoryUnew_compiledICHolder6FnMmethodHandle_nLKlassHandle_pnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cVcompiledICHolderKlassIallocate6MpnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_; -text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; -text: .text%JVM_NewArray; -text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__; -text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; -text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; -text: .text%__1cMGraphBuilderQnew_object_array6M_v_; -text: .text%__1cONewObjectArrayFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; -text: .text%__1cNCanonicalizerRdo_NewObjectArray6MpnONewObjectArray__v_; -text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__: ciObjArrayKlass.o; -text: .text%__1cLLoadIndexedOas_LoadIndexed6M_p0_: c1_Instruction.o; -text: .text%__1cQNullCheckVisitorRdo_NewObjectArray6MpnONewObjectArray__v_; -text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_; -text: .text%__1cSNewObjectArrayStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_sparc.o; -text: .text%__1cSNewObjectArrayStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o; -text: .text%__1cSNewObjectArrayStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cNSignatureInfoIdo_short6M_v_: bytecode.o; -text: .text%__1cIciMethodMnative_entry6M_pC_; -text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; -text: .text%__1cMGraphBuilderMtable_switch6M_v_; -text: .text%__1cLTableSwitchFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerOdo_TableSwitch6MpnLTableSwitch__v_; -text: .text%__1cQNullCheckVisitorOdo_TableSwitch6MpnLTableSwitch__v_; -text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_; -text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_; -text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cJValueTypeQas_ClassConstant6M_pnNClassConstant__: c1_Canonicalizer.o; -text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; -text: .text%__1cSCompiledStaticCallMset_to_clean6M_v_; -text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cQInstanceConstantTas_InstanceConstant6M_p0_: c1_ValueType.o; -text: .text%__1cIRuntime1Tprimitive_arraycopy6FpnIHeapWord_2i_v_; -text: .text%__1cKCompiledICMset_to_clean6M_v_; -text: .text%jni_MonitorEnter: jni.o; -text: .text%__1cSObjectSynchronizerJjni_enter6FnGHandle_pnGThread__v_; -text: .text%jni_MonitorExit: jni.o; -text: .text%__1cSObjectSynchronizerIjni_exit6FpnHoopDesc_pnGThread__v_; -text: .text%jni_CallVoidMethod: jni.o; -text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_: jni.o; -text: .text%jni_CallStaticBooleanMethodV: jni.o; -text: .text%JVM_GetStackTraceDepth; -text: .text%__1cTjava_lang_ThrowableVget_stack_trace_depth6FpnHoopDesc_pnGThread__i_; -text: .text%JVM_GetStackTraceElement; -text: .text%__1cTjava_lang_ThrowableXget_stack_trace_element6FpnHoopDesc_ipnGThread__2_; -text: .text%__1cbBjava_lang_StackTraceElementGcreate6FnMmethodHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cNmethodOopDescUline_number_from_bci6kMi_i_; -text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; -text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_; -text: .text%JVM_EnableCompiler; -text: .text%__1cJStubQdDueueKremove_all6M_v_; -text: .text%__1cPICStubInterfaceIfinalize6MpnEStub__v_: icBuffer.o; -text: .text%__1cRInlineCacheBufferUic_buffer_cached_oop6FpC_pnHoopDesc__; -text: .text%__1cRNativeMovConstRegEdata6kM_i_; -text: .text%__1cKCompiledICOset_cached_oop6MpnHoopDesc__v_; -text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_; -text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_; -text: .text%__1cPICStubInterfaceEsize6kMpnEStub__i_: icBuffer.o; -text: .text%__1cUSafepointSynchronizeDend6F_v_; -text: .text%__1cCosbAmake_polling_page_readable6F_v_; -text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; -text: .text%__1cKJavaThreadbScheck_safepoint_and_suspend_for_native_trans6Fp0_v_; -text: .text%__1cKCompiledICOic_destination6kM_pC_; -text: .text%jni_CallObjectMethodV: jni.o; -text: .text%jni_SetObjectField: jni.o; -text: .text%jni_IsInstanceOf: jni.o; -text: .text%jni_GetIntArrayRegion: jni.o; -text: .text%jni_SetIntArrayRegion: jni.o; -text: .text%jni_PushLocalFrame: jni.o; -text: .text%jni_PopLocalFrame: jni.o; -text: .text%jni_GetStaticObjectField: jni.o; -text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_: jni.o; -text: .text%__1cINegateOpFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerLdo_NegateOp6MpnINegateOp__v_; -text: .text%__1cQNullCheckVisitorLdo_NegateOp6MpnINegateOp__v_; -text: .text%__1cILIR_ListLstore_check6MpnLLIR_OprDesc_2222pnMCodeEmitInfo__v_; -text: .text%__1cXArrayStoreExceptionStub2t6MpnMCodeEmitInfo__v_; -text: .text%__1cXArrayStoreExceptionStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_sparc.o; -text: .text%__1cNLIR_AssemblerbIadd_debug_info_for_null_check_here6MpnMCodeEmitInfo__v_; -text: .text%__1cXArrayStoreExceptionStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o; -text: .text%__1cNLIR_AssemblerGnegate6MpnLLIR_OprDesc_2_v_; -text: .text%__1cXArrayStoreExceptionStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cIRuntime1Jarraycopy6FpnHoopDesc_i2ii_i_; -text: .text%__1cHciKlassSsuper_check_offset6M_I_; -text: .text%__1cKCompiledICMstub_address6kM_pC_; -text: .text%__1cRInlineCacheBufferSic_destination_for6FpnKCompiledIC__pC_; -text: .text%jni_NewWeakGlobalRef: jni.o; -text: .text%__1cKJNIHandlesQmake_weak_global6FnGHandle__pnI_jobject__; -text: .text%__1cMLinkResolverbBlookup_method_in_interfaces6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%jni_CallIntMethodV: jni.o; -text: .text%__1cNSharedRuntimeVhandle_ic_miss_helper6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2t6M_v_; -text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; -text: .text%__1cKVtableStub2n6FIi_pv_; -text: .text%__1cKVtableStubRpd_code_alignment6F_i_; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_; -text: .text%Unsafe_GetObject; -text: .text%jni_CallBooleanMethod: jni.o; -text: .text%jni_CallVoidMethodV: jni.o; -text: .text%JVM_GetClassDeclaredMethods; -text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; -text: .text%JVM_InvokeMethod; -text: .text%__1cKReflectionNinvoke_method6FpnHoopDesc_nGHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; -text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; -text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; -text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; -text: .text%JVM_IsInterrupted; -text: .text%__1cNLIR_AssemblerIemit_op36MpnHLIR_Op3__v_; -text: .text%__1cNLIR_AssemblerbCadd_debug_info_for_div0_here6MpnMCodeEmitInfo__v_; -text: .text%__1cNDivByZeroStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o; -text: .text%__1cNDivByZeroStubJemit_code6MpnNLIR_Assembler__v_; -text: .text%__1cIFrameMapLnr2floatreg6Fi_pnRFloatRegisterImpl__; -text: .text%Unsafe_EnsureClassInitialized; -text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; -text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; -text: .text%Unsafe_StaticFieldOffset; -text: .text%Unsafe_StaticFieldBaseFromField; -text: .text%Unsafe_GetIntVolatile; -text: .text%JVM_Yield; -text: .text%__1cNSharedRuntimeElmul6Fxx_x_; -text: .text%__1cYjava_lang_reflect_MethodNset_signature6FpnHoopDesc_2_v_; -text: .text%JVM_InitializeSocketLibrary; -text: .text%__1cDhpiZinitialize_socket_library6F_i_; -text: .text%JVM_Socket; -text: .text%Unsafe_PageSize; -text: .text%__1cXNativeSignatureIteratorHdo_byte6M_v_: interpreterRT_sparc.o; -text: .text%Unsafe_SetMemory; -text: .text%__1cNSharedRuntimeElrem6Fxx_x_; -text: .text%__1cRComputeEntryStackHdo_byte6M_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackHdo_byte6M_v_: generateOopMap.o; -text: .text%__1cMLinkResolverbEresolve_interface_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%Unsafe_DefineClass1; -text: .text%JVM_DefineClass; -text: .text%jni_NewDirectByteBuffer; -text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__: jni.o; -text: .text%jni_GetDoubleArrayRegion: jni.o; -text: .text%__1cNSignatureInfoJdo_double6M_v_: bytecode.o; -text: .text%__1cXJNI_ArgumentPusherVaArgJget_float6M_v_: jni.o; -text: .text%__1cFKlassQup_cast_abstract6M_p0_; -text: .text%__1cNSharedRuntimeDd2i6Fd_i_; -text: .text%jni_GetLongField: jni.o; -text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; -text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_; -text: .text%__1cSInterpreterRuntimeWslow_signature_handler6FpnKJavaThread_pnNmethodOopDesc_pi5_pC_; -text: .text%__1cUSlowSignatureHandlerLpass_object6M_v_: interpreterRT_sparc.o; -text: .text%__1cUSlowSignatureHandlerNadd_signature6Mi_v_: interpreterRT_sparc.o; -text: .text%__1cXNativeSignatureIteratorIdo_array6Mii_v_: interpreterRT_sparc.o; -text: .text%__1cUSlowSignatureHandlerIpass_int6M_v_: interpreterRT_sparc.o; -text: .text%jni_GetFloatArrayRegion: jni.o; -text: .text%jni_GetCharArrayRegion: jni.o; -text: .text%jni_SetFloatField: jni.o; -text: .text%jni_NewFloatArray: jni.o; -text: .text%jni_SetFloatArrayRegion: jni.o; -text: .text%__1cOBasicHashtableJnew_entry6MI_pnTBasicHashtableEntry__; -text: .text%JVM_GetFieldIxModifiers; -text: .text%JVM_GetCPFieldClassNameUTF; -text: .text%JVM_GetCPFieldModifiers; -text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_; -text: .text%__1cPfieldDescriptorUstring_initial_value6kMpnGThread__pnHoopDesc__; -text: .text%__1cCosHrealloc6FpvI_1_; -text: .text%JVM_MonitorNotify; -text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; -text: .text%jni_NewIntArray: jni.o; -text: .text%__1cKGenerationInext_gen6kM_p0_; -text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; -text: .text%__1cbAVM_GenCollectForAllocationEdoit6M_v_; -text: .text%__1cKManagementJtimestamp6F_x_; -text: .text%__1cTContiguousSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cTContiguousSpacePoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cbBSurvivorContiguousSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cbBSurvivorContiguousSpacePoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cOGenerationPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cOGenerationPoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cNCollectedHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; -text: .text%__1cSAllocationProfilerViterate_since_last_gc6F_v_; -text: .text%__1cUGenGCPrologueClosureNdo_generation6MpnKGeneration__v_: genCollectedHeap.o; -text: .text%__1cQDefNewGenerationKshort_name6kM_pkc_: defNewGeneration.o; -text: .text%__1cQDefNewGenerationKsave_marks6M_v_; -text: .text%__1cbCOneContigSpaceCardGenerationKsave_marks6M_v_; -text: .text%__1cKGenerationYmax_contiguous_available6kM_I_; -text: .text%__1cbCOneContigSpaceCardGenerationUcontiguous_available6kM_I_; -text: .text%__1cMVirtualSpaceQuncommitted_size6kM_I_; -text: .text%__1cIageTableFclear6M_v_; -text: .text%__1cULRUCurrentHeapPolicy2t6M_v_; -text: .text%__1cKSharedHeapbAchange_strong_roots_parity6M_v_; -text: .text%__1cPFastScanClosureGdo_oop6MppnHoopDesc__v_: defNewGeneration.o; -text: .text%__1cPContiguousSpaceIallocate6MI_pnIHeapWord__; -text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; -text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; -text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; -text: .text%__1cRInterpreterOopMap2t6M_v_; -text: .text%__1cNmethodOopDescImask_for6MipnRInterpreterOopMap__v_; -text: .text%__1cNinstanceKlassImask_for6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cLOopMapCache2t6M_v_; -text: .text%__1cLOopMapCacheGlookup6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cQOopMapCacheEntryEfill6MnMmethodHandle_i_v_; -text: .text%__1cTOopMapForCacheEntryLcompute_map6MpnGThread__v_; -text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; -text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_; -text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; -text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; -text: .text%__1cOGenerateOopMapVresult_for_basicblock6Mi_v_; -text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; -text: .text%__1cQOopMapCacheEntryIset_mask6MpnNCellTypeState_2i_v_; -text: .text%__1cRInterpreterOopMapNresource_copy6MpnQOopMapCacheEntry__v_; -text: .text%__1cRInterpreterOopMapLiterate_oop6MpnNOffsetClosure__v_; -text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_: frame.o; -text: .text%__1cRInterpreterOopMap2T6M_v_; -text: .text%__1cFframeNoops_entry_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cPJavaCallWrapperHoops_do6MpnKOopClosure__v_; -text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pIi_v_: oopMapCache.o; -text: .text%__1cTMaskFillerForNativeLpass_object6M_v_: oopMapCache.o; -text: .text%__1cTMaskFillerForNativeJpass_long6M_v_: oopMapCache.o; -text: .text%__1cRComputeEntryStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; -text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; -text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_; -text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_; -text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_; -text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; -text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; -text: .text%__1cKDictionaryHoops_do6MpnKOopClosure__v_; -text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cVLoaderConstraintTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cUCompactingPermGenGenUyounger_refs_iterate6MpnQOopsInGenClosure__v_; -text: .text%__1cbCOneContigSpaceCardGenerationUyounger_refs_iterate6MpnQOopsInGenClosure__v_; -text: .text%__1cLCardTableRSbDyounger_refs_in_space_iterate6MpnFSpace_pnQOopsInGenClosure__v_; -text: .text%__1cPContiguousSpaceLnew_dcto_cl6MpnKOopClosure_nRCardTableModRefBSOPrecisionStyle_pnIHeapWord__pnVDirtyCardToOopClosure__; -text: .text%__1cJMemRegionMintersection6kMk0_0_; -text: .text%__1cYClearNoncleanCardWrapperMdo_MemRegion6MnJMemRegion__v_: cardTableRS.o; -text: .text%__1cVDirtyCardToOopClosureMdo_MemRegion6MnJMemRegion__v_; -text: .text%__1cbBBlockOffsetArrayContigSpaceSblock_start_unsafe6kMpkv_pnIHeapWord__; -text: .text%__1cPContiguousSpaceKblock_size6kMpknIHeapWord__I_; -text: .text%__1cQconstMethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cWconstantPoolCacheKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cUContiguousSpaceDCTOCOget_actual_top6MpnIHeapWord_2_2_; -text: .text%__1cPFiltering_DCTOCPwalk_mem_region6MnJMemRegion_pnIHeapWord_3_v_; -text: .text%__1cUContiguousSpaceDCTOCXwalk_mem_region_with_cl6MnJMemRegion_pnIHeapWord_3pnQFilteringClosure__v_; -text: .text%__1cQconstMethodKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cLmethodKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cQFilteringClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cSinstanceKlassKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cNinstanceKlassViterate_static_fields6MpnKOopClosure__v_; -text: .text%__1cLklassVtablePoop_oop_iterate6MpnKOopClosure__v_; -text: .text%__1cNinstanceKlassGitable6kM_pnLklassItable__; -text: .text%__1cLklassItablePoop_oop_iterate6MpnKOopClosure__v_; -text: .text%__1cKklassKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cNinstanceKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_; -text: .text%__1cWconstantPoolCacheKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cWConstantPoolCacheEntryNoop_iterate_m6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cLsymbolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cLsymbolKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cOtypeArrayKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cNobjArrayKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_; -text: .text%__1cQconstMethodKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cLmethodKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cRconstantPoolKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cLsymbolKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cWconstantPoolCacheKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cWConstantPoolCacheEntryLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cRconstantPoolKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_: objArrayKlassKlass.o; -text: .text%__1cKarrayKlassLobject_size6kMi_i_; -text: .text%__1cSobjArrayKlassKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cParrayKlassKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cOtypeArrayKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cSobjArrayKlassKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cVcompiledICHolderKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cVcompiledICHolderKlassPoop_oop_iterate6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cSinstanceKlassKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cNinstanceKlassViterate_static_fields6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cLklassVtableRoop_oop_iterate_m6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cLklassItableRoop_oop_iterate_m6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cKklassKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure_nJMemRegion__v_; -text: .text%__1cNinstanceKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_; -text: .text%__1cNobjArrayKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_; -text: .text%__1cLCardTableRSUyounger_refs_iterate6MpnKGeneration_pnQOopsInGenClosure__v_; -text: .text%__1cMSubTasksDoneTall_tasks_completed6M_v_; -text: .text%__1cQGenCollectedHeapbCoop_since_save_marks_iterate6MipnPFastScanClosure_2_v_; -text: .text%__1cQDefNewGenerationbFoop_since_save_marks_iterate_nv6MpnPFastScanClosure__v_; -text: .text%__1cPContiguousSpacebFoop_since_save_marks_iterate_nv6MpnPFastScanClosure__v_; -text: .text%__1cNinstanceKlassSoop_oop_iterate_nv6MpnHoopDesc_pnPFastScanClosure__i_; -text: .text%__1cNobjArrayKlassSoop_oop_iterate_nv6MpnHoopDesc_pnPFastScanClosure__i_; -text: .text%__1cQinstanceRefKlassSoop_oop_iterate_nv6MpnHoopDesc_pnPFastScanClosure__i_; -text: .text%__1cbCOneContigSpaceCardGenerationbFoop_since_save_marks_iterate_nv6MpnPFastScanClosure__v_; -text: .text%__1cQDefNewGenerationQKeepAliveClosure2t6MpnSScanWeakRefClosure__v_; -text: .text%__1cbBjava_lang_ref_SoftReferenceFclock6F_x_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJtimestamp6FpnHoopDesc__x_; -text: .text%__1cQDefNewGenerationUFastKeepAliveClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cQDefNewGenerationbCFastEvacuateFollowersClosureHdo_void6M_v_; -text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cIageTablebAcompute_tenuring_threshold6MI_i_; -text: .text%__1cVAdaptivePaddedAverageGsample6Mf_v_; -text: .text%__1cbCOneContigSpaceCardGenerationEfree6kM_I_; -text: .text%__1cQDefNewGenerationQcompute_new_size6M_v_; -text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; -text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; -text: .text%__1cNCollectedHeapQresize_all_tlabs6M_v_; -text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; -text: .text%__1cUGenGCEpilogueClosureNdo_generation6MpnKGeneration__v_: genCollectedHeap.o; -text: .text%__1cRTenuredGenerationPupdate_counters6M_v_; -text: .text%__1cUCompactingPermGenGenPupdate_counters6M_v_; -text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; -text: .text%__1cNJvmtiGCMarker2T6M_v_; -text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; -text: .text%__1cSObjectSynchronizerJfast_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%Unsafe_CompareAndSwapObject; -text: .text%__1cMLinkResolverbEvtable_index_of_miranda_method6FnLKlassHandle_nMsymbolHandle_2pnGThread__i_; -text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; -text: .text%__1cNCanonicalizerPdo_MonitorEnter6MpnMMonitorEnter__v_; -text: .text%__1cLMonitorExitFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerOdo_MonitorExit6MpnLMonitorExit__v_; -text: .text%__1cQNullCheckVisitorPdo_MonitorEnter6MpnMMonitorEnter__v_; -text: .text%__1cQNullCheckVisitorOdo_MonitorExit6MpnLMonitorExit__v_; -text: .text%__1cMLongConstantPas_LongConstant6M_p0_: c1_Canonicalizer.o; -text: .text%__1cNAccessMonitorQas_AccessMonitor6M_p0_: c1_GraphBuilder.o; -text: .text%JVM_IsSameClassPackage; -text: .text%__1cIRuntime1Mmonitorenter6FpnKJavaThread_pnHoopDesc_pnPBasicObjectLock__v_; -text: .text%__1cIRuntime1Lmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%Unsafe_GetNativeFloat; -text: .text%__1cQComputeCallStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cRComputeEntryStackIdo_short6M_v_: generateOopMap.o; -text: .text%Unsafe_AllocateInstance; -text: .text%jni_AllocObject: jni.o; -text: .text%__1cNCanonicalizerMset_constant6Mi_v_: c1_Canonicalizer.o; -text: .text%__1cQComputeCallStackIdo_float6M_v_: generateOopMap.o; -text: .text%__1cMOopMapStreamJfind_next6M_v_; -text: .text%__1cQinstanceRefKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_; -text: .text%__1cQinstanceRefKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_; -text: .text%__1cWBlockOffsetSharedArrayGresize6MI_v_; -text: .text%__1cPContiguousSpaceNmangle_region6MnJMemRegion__v_; -text: .text%__1cRTenuredGenerationKshort_name6kM_pkc_: tenuredGeneration.o; -text: .text%__1cJCodeCacheLgc_prologue6F_v_; -text: .text%__1cHThreadsLgc_prologue6F_v_; -text: .text%__1cRframe_gc_prologue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_prologue6M_v_; -text: .text%__1cbCOneContigSpaceCardGenerationLused_region6kM_nJMemRegion__; -text: .text%__1cQGenCollectedHeapOgather_scratch6MpnKGeneration_I_pnMScratchBlock__; -text: .text%__1cQDefNewGenerationScontribute_scratch6MrpnMScratchBlock_pnKGeneration_I_v_; -text: .text%__1cJMarkSweepRFollowRootClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cLklassVtableToop_follow_contents6M_v_; -text: .text%__1cKklassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJMarkSweepXrevisit_weak_klass_link6FpnFKlass__v_; -text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cSinstanceKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNinstanceKlassUfollow_static_fields6M_v_; -text: .text%__1cLklassItableToop_follow_contents6M_v_; -text: .text%__1cOtypeArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJMarkSweepSMarkAndPushClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cRconstantPoolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWConstantPoolCacheEntryPfollow_contents6M_v_; -text: .text%__1cLmethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cSobjArrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_; -text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cVLoaderConstraintTableYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cJMarkSweepQKeepAliveClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_: markSweep.o; -text: .text%__1cVLoaderConstraintTableYpurge_loader_constraints6MpnRBoolObjectClosure__v_; -text: .text%__1cJMarkSweepMfollow_stack6F_v_; -text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_; -text: .text%__1cFKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cNinstanceKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; -text: .text%__1cQGenCollectedHeapWprepare_for_compaction6M_v_; -text: .text%__1cKGenerationWprepare_for_compaction6MpnMCompactPoint__v_; -text: .text%__1cPContiguousSpaceWprepare_for_compaction6MpnMCompactPoint__v_; -text: .text%__1cWOffsetTableContigSpaceUinitialize_threshold6M_pnIHeapWord__; -text: .text%__1cQCompactibleSpaceHforward6MpnHoopDesc_IpnMCompactPoint_pnIHeapWord__6_; -text: .text%__1cWOffsetTableContigSpacePcross_threshold6MpnIHeapWord_2_2_; -text: .text%__1cbBBlockOffsetArrayContigSpaceQalloc_block_work6MpnIHeapWord_2_v_; -text: .text%__1cQDefNewGenerationWfirst_compaction_space6kM_pnQCompactibleSpace__: defNewGeneration.o; -text: .text%__1cbCOneContigSpaceCardGenerationWfirst_compaction_space6kM_pnQCompactibleSpace__: compactingPermGenGen.o; -text: .text%__1cUCompactingPermGenGenTpre_adjust_pointers6M_v_; -text: .text%__1cbIRecursiveAdjustSharedObjectClosureGdo_oop6MppnHoopDesc__v_: compactingPermGenGen.o; -text: .text%__1cNinstanceKlassRoop_oop_iterate_v6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNobjArrayKlassRoop_oop_iterate_v6MpnHoopDesc_pnKOopClosure__i_; -text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cSobjArrayKlassKlassOklass_oop_size6kM_i_: objArrayKlassKlass.o; -text: .text%__1cKklassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLklassVtableToop_adjust_pointers6M_v_; -text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cWConstantPoolCacheEntryPadjust_pointers6M_v_; -text: .text%__1cRconstantPoolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSinstanceKlassKlassOklass_oop_size6kM_i_: instanceKlassKlass.o; -text: .text%__1cSinstanceKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassUadjust_static_fields6M_v_; -text: .text%__1cLklassItableToop_adjust_pointers6M_v_; -text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cTtypeArrayKlassKlassIoop_size6kMpnHoopDesc__i_: typeArrayKlassKlass.o; -text: .text%__1cTtypeArrayKlassKlassOklass_oop_size6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cLsymbolKlassOklass_oop_size6kM_i_: symbolKlass.o; -text: .text%__1cLmethodKlassOklass_oop_size6kM_i_: methodKlass.o; -text: .text%__1cQconstMethodKlassOklass_oop_size6kM_i_: constMethodKlass.o; -text: .text%__1cPmethodDataKlassOklass_oop_size6kM_i_: methodDataKlass.o; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_: arrayKlassKlass.o; -text: .text%__1cRconstantPoolKlassOklass_oop_size6kM_i_: constantPoolKlass.o; -text: .text%__1cWconstantPoolCacheKlassOklass_oop_size6kM_i_: cpCacheKlass.o; -text: .text%__1cVcompiledICHolderKlassOklass_oop_size6kM_i_: compiledICHolderKlass.o; -text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryYalways_strong_classes_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryPplaceholders_do6FpnKOopClosure__v_; -text: .text%__1cJMarkSweepMadjust_marks6F_v_; -text: .text%__1cYGenAdjustPointersClosureNdo_generation6MpnKGeneration__v_: genMarkSweep.o; -text: .text%__1cKGenerationPadjust_pointers6M_v_; -text: .text%__1cVAdjustPointersClosureIdo_space6MpnFSpace__v_: generation.o; -text: .text%__1cQCompactibleSpacePadjust_pointers6M_v_; -text: .text%__1cQinstanceRefKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cUCompactingPermGenGenPadjust_pointers6M_v_; -text: .text%__1cLsymbolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQconstMethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cUCompactingPermGenGenHcompact6M_v_; -text: .text%__1cQCompactibleSpaceHcompact6M_v_; -text: .text%__1cRGenCompactClosureNdo_generation6MpnKGeneration__v_: genMarkSweep.o; -text: .text%__1cKGenerationHcompact6M_v_; -text: .text%__1cUCompactingPermGenGenMpost_compact6M_v_; -text: .text%__1cJMarkSweepNrestore_marks6F_v_; -text: .text%__1cQGenCollectedHeapKsave_marks6M_v_; -text: .text%__1cJMemRegionFminus6kMk0_0_; -text: .text%__1cHThreadsLgc_epilogue6F_v_; -text: .text%__1cRframe_gc_epilogue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_epilogue6M_v_; -text: .text%__1cFframeMpd_gc_epilog6M_v_; -text: .text%__1cJCodeCacheLgc_epilogue6F_v_; -text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; -text: .text%__1cRTenuredGenerationQcompute_new_size6M_v_; -text: .text%__1cKGenerationEspec6M_pnOGenerationSpec__; -text: .text%jni_DeleteWeakGlobalRef: jni.o; -text: .text%__1cKJNIHandlesTdestroy_weak_global6FpnI_jobject__v_; -text: .text%__1cNFloatConstantQas_FloatConstant6M_p0_: c1_Canonicalizer.o; -text: .text%__1cJFloatTypeMas_FloatType6M_p0_: c1_Canonicalizer.o; -text: .text%__1cRAbstractAssemblerGa_long6Mi_v_; -text: .text%__1cIRuntime1Onew_type_array6FpnKJavaThread_pnMklassOopDesc_i_v_; -text: .text%__1cVcompiledICHolderKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; -text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; -text: .text%__1cOMacroAssemblerEmult6MpnMRegisterImpl_22_v_; -text: .text%__1cJValueTypeLas_LongType6M_pnILongType__: c1_Canonicalizer.o; -text: .text%__1cNVM_DeoptimizeEdoit6M_v_; -text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; -text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; -text: .text%__1cJCodeCachebGmake_marked_nmethods_not_entrant6F_v_; -text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; -text: .text%signalHandler; -text: .text%JVM_handle_solaris_signal; -text: .text%JVM_HoldsLock; -text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceRefKlass.o; -text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; -text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_; -text: .text%__1cONewObjectArrayKexact_type6kM_pnGciType__; -text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__; -text: .text%__1cIRuntime1Noop_arraycopy6FpnIHeapWord_2i_v_; -text: .text%__1cMGraphBuilderKcompare_op6MpnJValueType_nJBytecodesECode__v_; -text: .text%__1cNCanonicalizerMdo_CompareOp6MpnJCompareOp__v_; -text: .text%__1cJValueTypeOas_IntConstant6M_pnLIntConstant__: c1_Canonicalizer.o; -text: .text%__1cHIntTypeKas_IntType6M_p0_: c1_Canonicalizer.o; -text: .text%__1cNSharedRuntimeDf2l6Ff_x_; -text: .text%__1cJValueTypeQas_FloatConstant6M_pnNFloatConstant__: c1_Canonicalizer.o; -text: .text%__1cODoubleConstantRas_DoubleConstant6M_p0_: c1_Canonicalizer.o; -text: .text%__1cKDoubleTypeEbase6kM_pnJValueType__: c1_Canonicalizer.o; -text: .text%__1cKDoubleTypeNas_DoubleType6M_p0_: c1_Canonicalizer.o; -text: .text%__1cNLIR_AssemblerFstore6MpnRFloatRegisterImpl_pnMRegisterImpl_inJBasicType_pnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerEload6MpnMRegisterImpl_ipnRFloatRegisterImpl_nJBasicType_pnMCodeEmitInfo__v_; -text: .text%__1cNLIR_AssemblerLemit_rtcall6MpnMLIR_OpRTCall__v_; -text: .text%__1cPciObjArrayKlassJmake_impl6FpnHciKlass__p0_; -text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; -text: .text%__1cKCompiledIC2t6MpnKRelocation__v_; -text: .text%__1cRComputeEntryStackIdo_float6M_v_: generateOopMap.o; -text: .text%__1cTMaskFillerForNativeIpass_int6M_v_: oopMapCache.o; -text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; -text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cLCardTableRSFclear6MnJMemRegion__v_: cardTableRS.o; -text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; -text: .text%__1cHnmethodFflush6M_v_; -text: .text%__1cICodeBlobFflush6M_v_; -text: .text%__1cJCodeCacheEfree6FpnICodeBlob__v_; -text: .text%__1cICodeHeapKdeallocate6Mpv_v_; -text: .text%__1cQComputeCallStackJdo_double6M_v_: generateOopMap.o; -text: .text%__1cNSharedRuntimeEdrem6Fdd_d_; -text: .text%__1cRComputeEntryStackJdo_double6M_v_: generateOopMap.o; -text: .text%__1cJValueTypeMas_ArrayType6M_pnJArrayType__: c1_Canonicalizer.o; -text: .text%__1cOMacroAssemblerEfneg6MnRFloatRegisterImplFWidth_p13_v_; -text: .text%__1cHnmethodbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cILongTypeEbase6kM_pnJValueType__: c1_Canonicalizer.o; -text: .text%__1cRPrivilegedElementHoops_do6MpnKOopClosure__v_; -text: .text%__1cMUnsafePutRawFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerPdo_UnsafePutRaw6MpnMUnsafePutRaw__v_; -text: .text%__1cIUnsafeOpLas_UnsafeOp6M_p0_: c1_GraphBuilder.o; -text: .text%__1cMUnsafeGetRawFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerPdo_UnsafeGetRaw6MpnMUnsafeGetRaw__v_; -text: .text%__1cMGraphBuilderNlookup_switch6M_v_; -text: .text%__1cMLookupSwitchFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; -text: .text%__1cNCanonicalizerPdo_LookupSwitch6MpnMLookupSwitch__v_; -text: .text%__1cQNullCheckVisitorPdo_UnsafePutRaw6MpnMUnsafePutRaw__v_; -text: .text%__1cQNullCheckVisitorPdo_UnsafeGetRaw6MpnMUnsafeGetRaw__v_; -text: .text%__1cQNullCheckVisitorPdo_LookupSwitch6MpnMLookupSwitch__v_; -text: .text%__1cIRuntime1Mnew_instance6FpnKJavaThread_pnMklassOopDesc__v_; -text: .text%__1cNSharedRuntimeEldiv6Fxx_x_; -text: .text%Unsafe_GetObjectVolatile; -text: .text%__1cILongTypeLas_LongType6M_p0_: c1_Canonicalizer.o; -text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; -text: .text%__1cbCOneContigSpaceCardGenerationVunsafe_max_alloc_nogc6kM_I_; -text: .text%__1cPfieldDescriptorSlong_initial_value6kM_x_; -text: .text%__1cNSharedRuntimeDd2l6Fd_x_; -text: .text%__1cIRuntime1Qnew_object_array6FpnKJavaThread_pnMklassOopDesc_i_v_; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_COMPILER1_sparcv9 --- a/make/solaris/makefiles/reorder_COMPILER1_sparcv9 Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -# Place holder for LP64 data. diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_COMPILER2_amd64 --- a/make/solaris/makefiles/reorder_COMPILER2_amd64 Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5574 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; - - -text: .text%__1cECopyRpd_disjoint_words6FpnIHeapWord_2L_v_; -text: .text%__1cNinstanceKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOtypeArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQIndexSetIteratorEnext6M_I_; -text: .text%__1cQIndexSetIteratorQadvance_and_next6M_I_; -text: .text%__1cIUniverseMnon_oop_word6F_pv_; -text: .text%__1cNobjArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQObjectStartArrayMobject_start6kMpnIHeapWord__2_; -text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cIPhaseIFGIadd_edge6MII_i_; -text: .text%__1cQIndexSetIterator2t6MpnIIndexSet__v_; -text: .text%__1cOPhaseIdealLoopOidom_no_update6kMpnENode__2_; -text: .text%__1cXresource_allocate_bytes6FL_pc_; -text: .text%__1cNRelocIteratorFreloc6M_pnKRelocation__; -text: .text%__1cHRegMaskESize6kM_I_; -text: .text%__1cIIndexSetLalloc_block6M_pn0AIBitBlock__; -text: .text%__1cWConstantPoolCacheEntryPadjust_pointers6M_v_; -text: .text%__1cWConstantPoolCacheEntryPfollow_contents6M_v_; -text: .text%__1cJMarkSweepSMarkAndPushClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cDLRGOcompute_degree6kMr0_i_; -text: .text%__1cLsymbolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cWPSScavengeRootsClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cLsymbolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cYPSPromotionFailedClosureJdo_object6MpnHoopDesc__v_; -text: .text%__1cENodeEjvms6kM_pnIJVMState__; -text: .text%__1cIIndexSetWalloc_block_containing6MI_pn0AIBitBlock__; -text: .text%__1cENodeHdel_out6Mp0_v_; -text: .text%__1cKRelocationLunpack_data6M_v_; -text: .text%__1cIMachNodeJideal_reg6kM_I_; -text: .text%__1cJAssemblerOlocate_operand6FpCn0AMWhichOperand__1_; -text: .text%__1cKRelocationSpd_address_in_code6M_ppC_; -text: .text%__1cOoop_RelocationIoop_addr6M_ppnHoopDesc__; -text: .text%__1cOPhaseIdealLoopSget_ctrl_no_update6kMpnENode__2_; -text: .text%__1cJCProjNodeNis_block_proj6kM_pknENode__; -text: .text%__1cETypeDcmp6Fpk02_i_; -text: .text%__1cOoop_RelocationLunpack_data6M_v_; -text: .text%__1cHRegMaskJis_bound16kM_i_; -text: .text%__1cOtypeArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cHRegMaskJis_bound26kM_i_; -text: .text%__1cRmethodDataOopDescHdata_at6Mi_pnLProfileData__; -text: .text%__1cNGrowableArray4CI_Hat_grow6MirkI_I_; -text: .text%__1cLmethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cQconstMethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQconstMethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cRmethodDataOopDescJnext_data6MpnLProfileData__2_; -text: .text%__1cOoop_RelocationJoop_value6M_pnHoopDesc__; -text: .text%__1cJrRegPOperEtype6kM_pknEType__; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_LI_v_; -text: .text%__1cJVectorSet2R6MI_rnDSet__; -text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_; -text: .text%__1cSPSPromotionManagerUflush_prefetch_queue6M_v_; -text: .text%__1cPDictionaryEntrybDprotection_domain_set_oops_do6MpnKOopClosure__v_; -text: .text%__1cMOopMapStreamJfind_next6M_v_; -text: .text%__1cMloadConPNodeErule6kM_I_; -text: .text%__1cITypeNodeLbottom_type6kM_pknEType__; -text: .text%__1cDff16FI_i_; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_; -text: .text%__1cIIndexSetKinitialize6MI_v_; -text: .text%__1cMMutableSpaceMcas_allocate6ML_pnIHeapWord__; -text: .text%__1cIMachNodeGOpcode6kM_i_; -text: .text%__1cENodeHadd_req6Mp0_v_; -text: .text%__1cENodeIout_grow6MI_v_; -text: .text%__1cKTypeOopPtrFklass6kM_pnHciKlass__; -text: .text%__1cIIndexSetKfree_block6MI_v_; -text: .text%__1cETypeFuhash6Fpk0_i_; -text: .text%__1cJrRegIOperEtype6kM_pknEType__; -text: .text%__1cMPhaseChaitinLskip_copies6MpnENode__2_; -text: .text%__1cICallNodeKmatch_edge6kMI_I_; -text: .text%__1cNCollectedHeapbDcheck_for_bad_heap_word_value6MpnIHeapWord_L_v_; -text: .text%JVM_CurrentTimeMillis; -text: .text%__1cOPSPromotionLABKinitialize6MnJMemRegion__v_; -text: .text%__1cOPSPromotionLABFflush6M_v_; -text: .text%__1cMPhaseChaitinTinterfere_with_live6MIpnIIndexSet__v_; -text: .text%__1cINodeHashQhash_find_insert6MpnENode__2_; -text: .text%__1cHPhiNodeGOpcode6kM_i_; -text: .text%__1cKjmpDirNodeNis_block_proj6kM_pknENode__; -text: .text%__1cRMachSpillCopyNodeJideal_reg6kM_I_; -text: .text%__1cETypeIhashcons6M_pk0_; -text: .text%__1cENodeEhash6kM_I_; -text: .text%__1cIProjNodeGOpcode6kM_i_; -text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_; -text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_; -text: .text%__1cPVirtualCallDataKcell_count6M_i_; -text: .text%__1cENodeMcisc_operand6kM_i_; -text: .text%__1cRInterpreterOopMapLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cMMachCallNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cHNTarjanEEVAL6M_p0_; -text: .text%__1cNMachIdealNodeErule6kM_I_; -text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_; -text: .text%__1cKHandleMark2T6M_v_; -text: .text%__1cOPhaseIdealLoopUbuild_loop_late_post6MpnENode_pk0_v_; -text: .text%__1cENode2t6MI_v_; -text: .text%__1cJloadPNodeErule6kM_I_; -text: .text%__1cMloadConINodeErule6kM_I_; -text: .text%__1cICodeHeapKfind_start6kMpv_1_; -text: .text%__1cWShouldNotReachHereNodeNis_block_proj6kM_pknENode__; -text: .text%__1cLProfileDataPfollow_contents6M_v_; -text: .text%__1cLProfileDataPadjust_pointers6M_v_; -text: .text%__1cHRegMaskMClearToPairs6M_v_; -text: .text%__1cJPhaseLiveLadd_liveout6MpnFBlock_IrnJVectorSet__v_; -text: .text%__1cLemit_opcode6FrnKCodeBuffer_i_v_; -text: .text%__1cIPhaseIFGQeffective_degree6kMI_i_; -text: .text%__1cFArenaIArealloc6MpvLL_1_; -text: .text%__1cGIfNodeGOpcode6kM_i_; -text: .text%__1cHTypePtrEhash6kM_i_; -text: .text%__1cIPhaseIFGLremove_node6MI_pnIIndexSet__; -text: .text%__1cIPhaseIFGJre_insert6MI_v_; -text: .text%__1cRMachSpillCopyNodeLbottom_type6kM_pknEType__; -text: .text%__1cETypeEmeet6kMpk0_2_; -text: .text%__1cKBranchDataKcell_count6M_i_; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__; -text: .text%__1cOPhaseIdealLoopYsplit_if_with_blocks_pre6MpnENode__2_; -text: .text%__1cNIdealLoopTreeJis_member6kMpk0_i_; -text: .text%__1cOPhaseIdealLoopZsplit_if_with_blocks_post6MpnENode__v_; -text: .text%__1cDfh16FI_i_; -text: .text%__1cDLRGFscore6kM_d_; -text: .text%__1cKTypeOopPtrEhash6kM_i_; -text: .text%__1cIAddPNodeGOpcode6kM_i_; -text: .text%__1cKIfTrueNodeGOpcode6kM_i_; -text: .text%__1cMPhaseChaitinMchoose_color6MrnDLRG_i_i_; -text: .text%__1cMPhaseIterGVNNtransform_old6MpnENode__2_; -text: .text%__1cGcmpkey6Fpkv1_i_; -text: .text%__1cIMachNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cHConNodeGOpcode6kM_i_; -text: .text%__1cUParallelScavengeHeapVlarge_typearray_limit6M_L_; -text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cMPhaseChaitinKbias_color6MrnDLRG_i_i_; -text: .text%__1cICodeHeapKnext_block6kMpnJHeapBlock__2_; -text: .text%__1cICodeHeapJnext_free6kMpnJHeapBlock__pv_; -text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__; -text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_; -text: .text%__1cRMachSpillCopyNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cMMachProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cSCallStaticJavaNodeGOpcode6kM_i_; -text: .text%__1cYCallStaticJavaDirectNodeMideal_Opcode6kM_i_; -text: .text%__1cJCodeCacheFalive6FpnICodeBlob__2_; -text: .text%__1cRMachSpillCopyNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMPhaseIterGVNWadd_users_to_worklist06MpnENode__v_; -text: .text%__1cECopyYconjoint_words_to_higher6FpnIHeapWord_2L_v_; -text: .text%__1cILRG_ListGextend6MII_v_; -text: .text%__1cWstatic_stub_RelocationLunpack_data6M_v_; -text: .text%__1cJPhaseLiveGgetset6MpnFBlock__pnIIndexSet__; -text: .text%__1cIConINodeGOpcode6kM_i_; -text: .text%__1cLIfFalseNodeGOpcode6kM_i_; -text: .text%__1cKNode_ArrayGinsert6MIpnENode__v_; -text: .text%__1cLCounterDataKcell_count6M_i_; -text: .text%__1cMMachProjNodeGOpcode6kM_i_; -text: .text%__1cENodeEgrow6MI_v_; -text: .text%__1cIMachNodePcompute_padding6kMi_i_; -text: .text%__1cIMachNodeSalignment_required6kM_i_; -text: .text%__1cOPhaseIdealLoopEsort6MpnNIdealLoopTree_2_2_; -text: .text%__1cNCollectedHeapXallocate_from_tlab_slow6FpnGThread_L_pnIHeapWord__; -text: .text%__1cHNTarjanICOMPRESS6M_v_; -text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_; -text: .text%__1cIBoolNodeGOpcode6kM_i_; -text: .text%__1cSInterpreterRuntimeInewarray6FpnKJavaThread_nJBasicType_i_v_; -text: .text%__1cUParallelScavengeHeapRallocate_new_tlab6ML_pnIHeapWord__; -text: .text%__1cWThreadLocalAllocBufferKinitialize6MpnIHeapWord_22_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; -text: .text%__1cWThreadLocalAllocBufferEfill6MpnIHeapWord_2L_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; -text: .text%__1cRMachSpillCopyNodePoper_input_base6kM_I_; -text: .text%__1cIIndexSetFclear6M_v_; -text: .text%__1cJPhaseLiveLadd_liveout6MpnFBlock_pnIIndexSet_rnJVectorSet__v_; -text: .text%__1cECopyXconjoint_words_to_lower6FpnIHeapWord_2L_v_; -text: .text%__1cNRelocIteratorKset_limits6MpC1_v_; -text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cSinstanceKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cITypeNodeJideal_reg6kM_I_; -text: .text%__1cHTypeIntEhash6kM_i_; -text: .text%__1cIPhaseGVNJtransform6MpnENode__2_; -text: .text%__1cNinstanceKlassGitable6kM_pnLklassItable__; -text: .text%__1cLklassItable2t6MnTinstanceKlassHandle__v_; -text: .text%__1cIciObjectEhash6M_i_; -text: .text%__1cNCellTypeStateFmerge6kM0i_0_; -text: .text%__1cOPhaseIdealLoopUbuild_loop_tree_impl6MpnENode_i_i_; -text: .text%__1cWNode_Backward_IteratorEnext6M_pnENode__; -text: .text%__1cHemit_rm6FrnKCodeBuffer_iii_v_; -text: .text%__1cITypeNodeEhash6kM_I_; -text: .text%__1cIIndexSetKinitialize6MIpnFArena__v_; -text: .text%__1cJPhaseLiveKgetfreeset6M_pnIIndexSet__; -text: .text%__1cMMachProjNodeJideal_reg6kM_I_; -text: .text%__1cHPhiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNCollectedHeapMobj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cKRegionNodeGOpcode6kM_i_; -text: .text%__1cMMachProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__; -text: .text%__1cIProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLTypeInstPtrEhash6kM_i_; -text: .text%__1cITypeLongEhash6kM_i_; -text: .text%__1cOPhaseIdealLoopOget_early_ctrl6MpnENode__2_; -text: .text%__1cOPhaseIdealLoopOset_early_ctrl6MpnENode__v_; -text: .text%__1cIJumpDataKcell_count6M_i_; -text: .text%__1cHNTarjanELINK6Mp01_v_; -text: .text%__1cENodeIIdentity6MpnOPhaseTransform__p0_; -text: .text%__1cRPSOldPromotionLABFflush6M_v_; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_; -text: .text%__1cOJNIHandleBlockPallocate_handle6MpnHoopDesc__pnI_jobject__; -text: .text%__1cENodeNis_block_proj6kM_pk0_; -text: .text%__1cOPhaseIdealLoopThas_local_phi_input6MpnENode__2_; -text: .text%__1cJVectorSet2F6kMI_i_; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cICallNodeLbottom_type6kM_pknEType__; -text: .text%JVM_ArrayCopy; -text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cIMachNodeLbottom_type6kM_pknEType__; -text: .text%__1cFState2t6M_v_; -text: .text%__1cJPhaseLiveHfreeset6MpknFBlock__v_; -text: .text%__1cOPhaseIdealLoopbIdom_lca_for_get_late_ctrl_internal6MpnENode_22_2_; -text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; -text: .text%__1cRSignatureIteratorGexpect6Mc_v_; -text: .text%__1cIProjNodeEhash6kM_I_; -text: .text%__1cENodeFclone6kM_p0_; -text: .text%__1cILocationIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cIPhaseCCPOtransform_once6MpnENode__2_; -text: .text%__1cHRegMaskPfind_first_pair6kM_i_; -text: .text%__1cENodeKmatch_edge6kMI_I_; -text: .text%__1cKJNIHandlesKmake_local6FpnHJNIEnv__pnHoopDesc__pnI_jobject__; -text: .text%__1cNLocationValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cNPhaseRegAllocKreg2offset6kMi_i_; -text: .text%__1cNPhaseRegAllocUreg2offset_unchecked6kMi_i_; -text: .text%__1cbAfinal_graph_reshaping_impl6FpnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cETypeFxmeet6kMpk0_2_; -text: .text%__1cJStartNodeLbottom_type6kM_pknEType__; -text: .text%__1cICmpPNodeGOpcode6kM_i_; -text: .text%__1cOMethodLivenessKBasicBlockXcompute_gen_kill_single6MpnQciBytecodeStream__v_; -text: .text%__1cKjmpDirNodeMideal_Opcode6kM_i_; -text: .text%__1cOPhaseIdealLoopZremix_address_expressions6MpnENode__2_; -text: .text%__1cGciTypeEmake6FnJBasicType__p0_; -text: .text%__1cQUnique_Node_ListGremove6MpnENode__v_; -text: .text%__1cKNode_Array2t6MpnFArena__v_; -text: .text%__1cRMachSafePointNodeEjvms6kM_pnIJVMState__; -text: .text%__1cNinstanceKlassMclass_loader6kM_pnHoopDesc__; -text: .text%__1cOPhaseIdealLoopNget_late_ctrl6MpnENode_2_2_; -text: .text%__1cKTypeAryPtrEhash6kM_i_; -text: .text%__1cIIndexSet2t6Mp0_v_; -text: .text%__1cNrFlagsRegOperEtype6kM_pknEType__; -text: .text%__1cHTypeInt2t6Miii_v_; -text: .text%__1cMPhaseChaitinSuse_prior_register6MpnENode_I2pnFBlock_rnJNode_List_6_i_; -text: .text%__1cENodeQIdeal_DU_postCCP6MpnIPhaseCCP__p0_; -text: .text%__1cIConLNodeGOpcode6kM_i_; -text: .text%__1cHPhiNodeEhash6kM_I_; -text: .text%__1cENodeHsize_of6kM_I_; -text: .text%__1cHRegMaskMSmearToPairs6M_v_; -text: .text%jni_GetObjectField: jni.o; -text: .text%__1cJMarkSweepXrevisit_weak_klass_link6FpnFKlass__v_; -text: .text%__1cKklassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cKklassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cFKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cKNode_ArrayEgrow6MI_v_; -text: .text%__1cLklassVtableToop_adjust_pointers6M_v_; -text: .text%__1cLklassVtableToop_follow_contents6M_v_; -text: .text%__1cICmpINodeGOpcode6kM_i_; -text: .text%__1cMPhaseChaitinHnew_lrg6MpknENode_I_v_; -text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__; -text: .text%__1cUGenericGrowableArrayMraw_allocate6Mi_pv_; -text: .text%__1cJMarkSweepNpreserve_mark6FpnHoopDesc_pnLmarkOopDesc__v_; -text: .text%__1cIMachNodeKconst_size6kM_i_; -text: .text%__1cINodeHashLhash_insert6MpnENode__v_; -text: .text%JVM_Read; -text: .text%__1cDhpiEread6FipvI_L_; -text: .text%__1cMPhaseIterGVNVadd_users_to_worklist6MpnENode__v_; -text: .text%__1cPClassFileStreamGget_u16MpnGThread__C_; -text: .text%__1cMMergeMemNodeGOpcode6kM_i_; -text: .text%__1cPciObjectFactoryEfind6MpnHoopDesc_pnNGrowableArray4CpnIciObject____i_; -text: .text%__1cHemit_d86FrnKCodeBuffer_i_v_; -text: .text%__1cLOopRecorder2t6MpnFArena__v_; -text: .text%__1cKCodeBuffer2T6M_v_; -text: .text%__1cIMachNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIMachNodeJemit_size6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJloadINodeErule6kM_I_; -text: .text%__1cMOopMapStream2t6MpnGOopMap_i_v_; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode__i_; -text: .text%__1cIAddINodeGOpcode6kM_i_; -text: .text%__1cWShouldNotReachHereNodeMideal_Opcode6kM_i_; -text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cIJVMStateIof_depth6kMi_p0_; -text: .text%__1cJrRegLOperEtype6kM_pknEType__; -text: .text%__1cENode2t6Mp0_v_; -text: .text%__1cHhashptr6Fpkv_i_; -text: .text%__1cLklassItableToop_adjust_pointers6M_v_; -text: .text%__1cLklassItableToop_follow_contents6M_v_; -text: .text%__1cRconstantPoolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cRconstantPoolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSinstanceKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSinstanceKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNinstanceKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cNinstanceKlassUadjust_static_fields6M_v_; -text: .text%__1cNinstanceKlassUfollow_static_fields6M_v_; -text: .text%__1cEDict2F6kMpkv_pv_; -text: .text%__1cIProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cNCatchProjNodeGOpcode6kM_i_; -text: .text%__1cJCodeCacheJfind_blob6Fpv_pnICodeBlob__; -text: .text%__1cICallNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cWconstantPoolCacheKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cKjmpConNodeMideal_Opcode6kM_i_; -text: .text%__1cJLoadPNodeGOpcode6kM_i_; -text: .text%__1cLSymbolTableGlookup6MipkciI_pnNsymbolOopDesc__; -text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cHPhiNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cGIfNodeLbottom_type6kM_pknEType__; -text: .text%__1cENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMachNodeFreloc6kM_i_; -text: .text%__1cPciObjectFactoryDget6MpnHoopDesc__pnIciObject__; -text: .text%__1cOThreadCritical2T6M_v_; -text: .text%__1cOThreadCritical2t6M_v_; -text: .text%__1cIAddPNodeKmatch_edge6kMI_I_; -text: .text%__1cILoadNodeEhash6kM_I_; -text: .text%__1cRMachSpillCopyNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIimmIOperIconstant6kM_l_; -text: .text%__1cENodeHdel_req6MI_v_; -text: .text%__1cJCProjNodeEhash6kM_I_; -text: .text%__1cJMultiNodeEhash6kM_I_; -text: .text%__1cRSignatureIteratorKparse_type6M_i_; -text: .text%__1cIHaltNodeGOpcode6kM_i_; -text: .text%__1cHPhiNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMPhaseIterGVNZremove_globally_dead_node6MpnENode__v_; -text: .text%__1cETypeEhash6kM_i_; -text: .text%__1cJHashtableLhash_symbol6Fpkci_I_; -text: .text%__1cOMachReturnNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cFframeVinterpreter_frame_bcp6kM_pC_; -text: .text%__1cICmpUNodeGOpcode6kM_i_; -text: .text%__1cJOopMapSetSfind_map_at_offset6kMi_pnGOopMap__; -text: .text%__1cICodeBlobbAoop_map_for_return_address6MpC_pnGOopMap__; -text: .text%__1cIConPNodeGOpcode6kM_i_; -text: .text%__1cIMachNodeHtwo_adr6kM_I_; -text: .text%__1cIParmNodeGOpcode6kM_i_; -text: .text%__1cTconvI2L_reg_regNodeErule6kM_I_; -text: .text%__1cHTypeIntFxmeet6kMpknEType__3_; -text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cKoopFactoryKnew_symbol6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cMloadConINodeMideal_Opcode6kM_i_; -text: .text%__1cGTarjanEEVAL6M_p0_; -text: .text%__1cYexternal_word_RelocationLunpack_data6M_v_; -text: .text%__1cJCatchNodeGOpcode6kM_i_; -text: .text%__1cZPhaseConservativeCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cTCreateExceptionNodeErule6kM_I_; -text: .text%__1cIJVMStateLdebug_start6kM_I_; -text: .text%__1cMloadConPNodeMideal_Opcode6kM_i_; -text: .text%__1cIMachNodeNoperand_index6kMI_i_; -text: .text%__1cFBlockIis_Empty6kM_i_; -text: .text%__1cMMachTypeNodeLbottom_type6kM_pknEType__; -text: .text%__1cIAddPNodeLbottom_type6kM_pknEType__; -text: .text%__1cFBlockOcode_alignment6M_I_; -text: .text%__1cGBitMapUclear_range_of_words6MLL_v_; -text: .text%__1cJrRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKCastPPNodeGOpcode6kM_i_; -text: .text%__1cIPhaseIFGMtest_edge_sq6kMII_i_; -text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__; -text: .text%__1cFStateRMachNodeGenerator6MipnHCompile__pnIMachNode__; -text: .text%__1cHMatcherKReduceInst6MpnFState_irpnENode__pnIMachNode__; -text: .text%__1cPClassFileStreamHskip_u16MipnGThread__v_; -text: .text%__1cMMergeMemNodeLbottom_type6kM_pknEType__; -text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cILoadNodeLbottom_type6kM_pknEType__; -text: .text%__1cLConvI2LNodeGOpcode6kM_i_; -text: .text%__1cHTypeIntEmake6Fi_pk0_; -text: .text%__1cJMultiNodeIproj_out6kMI_pnIProjNode__; -text: .text%__1cIBoolNodeEhash6kM_I_; -text: .text%__1cIimmPOperEtype6kM_pknEType__; -text: .text%__1cMloadConPNodeLbottom_type6kM_pknEType__; -text: .text%__1cOrFlagsRegUOperEtype6kM_pknEType__; -text: .text%__1cGIfNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNsymbolOopDescLas_C_string6kM_pc_; -text: .text%__1cNsymbolOopDescLas_C_string6kMpci_1_; -text: .text%__1cITypeLongFxmeet6kMpknEType__3_; -text: .text%__1cNCollectedHeapbHcheck_for_non_bad_heap_word_value6MpnIHeapWord_L_v_; -text: .text%__1cMPhaseChaitinLinsert_proj6MpnFBlock_IpnENode_I_v_; -text: .text%__1cHCompileRprobe_alias_cache6MpknHTypePtr__pn0APAliasCacheEntry__; -text: .text%__1cIMachNodeGExpand6MpnFState_rnJNode_List__p0_; -text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_; -text: .text%__1cENodeIdestruct6M_v_; -text: .text%__1cIAddPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPClassFileParserRverify_legal_utf86MpkCipnGThread__v_; -text: .text%__1cMMachHaltNodeEjvms6kM_pnIJVMState__; -text: .text%__1cKoopFactoryMnew_objArray6FpnMklassOopDesc_ipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassRallocate_objArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cGBitMapJset_union6M0_v_; -text: .text%__1cHTypeIntEmake6Fiii_pk0_; -text: .text%__1cJTypeTupleEhash6kM_i_; -text: .text%__1cFParsePdo_one_bytecode6M_v_; -text: .text%__1cFParseNdo_exceptions6M_v_; -text: .text%__1cKRegionNodeEhash6kM_I_; -text: .text%__1cMMutableSpaceIallocate6ML_pnIHeapWord__; -text: .text%__1cUParallelScavengeHeapWpermanent_mem_allocate6ML_pnIHeapWord__; -text: .text%__1cJPSPermGenSallocate_permanent6ML_pnIHeapWord__; -text: .text%__1cPmethodDataKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cIHaltNodeKmatch_edge6kMI_I_; -text: .text%__1cPmethodDataKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cPmethodDataKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cMPhaseIterGVNKis_IterGVN6M_p0_; -text: .text%__1cGBitMap2t6MpLL_v_; -text: .text%__1cNnew_loc_value6FpnNPhaseRegAlloc_inILocationEType__pnNLocationValue__: output.o; -text: .text%__1cOindOffset8OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cOindOffset8OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cKNode_ArrayGremove6MI_v_; -text: .text%__1cHPhiNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRSignatureIterator2t6MnMsymbolHandle__v_; -text: .text%__1cJloadPNodeMideal_Opcode6kM_i_; -text: .text%__1cPSignatureStreamEnext6M_v_; -text: .text%__1cOindOffset8OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLjmpConUNodeMideal_Opcode6kM_i_; -text: .text%__1cFBlockJfind_node6kMpknENode__I_; -text: .text%__1cHhashkey6Fpkv_i_; -text: .text%__1cNLoadRangeNodeGOpcode6kM_i_; -text: .text%__1cJLoadINodeGOpcode6kM_i_; -text: .text%__1cGTarjanICOMPRESS6M_v_; -text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%JVM_ReleaseUTF; -text: .text%__1cHSubNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFChunk2t6ML_v_; -text: .text%__1cFChunk2n6FLL_pv_; -text: .text%__1cOindOffset8OperFscale6kM_i_; -text: .text%__1cMCreateExNodeGOpcode6kM_i_; -text: .text%__1cFframebCsender_for_interpreter_frame6kMpnLRegisterMap__0_; -text: .text%__1cFChunk2k6Fpv_v_; -text: .text%__1cOMachReturnNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cHMatcherKmatch_tree6MpknENode__pnIMachNode__; -text: .text%__1cLTypeInstPtrFxmeet6kMpknEType__3_; -text: .text%__1cKjmpConNodePoper_input_base6kM_I_; -text: .text%__1cIJVMState2t6MpnIciMethod_p0_v_; -text: .text%__1cMciMethodDataHdata_at6Mi_pnLProfileData__; -text: .text%__1cJrelocInfoNfinish_prefix6Mph_p0_; -text: .text%__1cIProjNodeHsize_of6kM_I_; -text: .text%__1cHBitDataKcell_count6M_i_; -text: .text%__1cFArenaEgrow6ML_pv_; -text: .text%__1cMPhaseIterGVNMsubsume_node6MpnENode_2_v_; -text: .text%__1cJloadBNodeErule6kM_I_; -text: .text%__1cHConNodeEhash6kM_I_; -text: .text%__1cENodeRdisconnect_inputs6Mp0_i_; -text: .text%__1cIHaltNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTconstantPoolOopDescWsignature_ref_index_at6Mi_i_; -text: .text%__1cRMachSpillCopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__; -text: .text%__1cIJVMStateJdebug_end6kM_I_; -text: .text%__1cENode2t6Mp011_v_; -text: .text%__1cNSafePointNodeHsize_of6kM_I_; -text: .text%__1cKPSScavengeUoop_promotion_failed6FpnHoopDesc_pnLmarkOopDesc__v_; -text: .text%__1cHTypePtrLmeet_offset6kMi_i_; -text: .text%__1cSPSPromotionManagerUoop_promotion_failed6MpnHoopDesc_pnLmarkOopDesc__2_; -text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; -text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cLLShiftLNodeGOpcode6kM_i_; -text: .text%__1cOMethodLivenessKBasicBlockIload_one6Mi_v_; -text: .text%__1cHCmpNodeLbottom_type6kM_pknEType__; -text: .text%__1cFDictI2i6M_v_; -text: .text%JVM_GetMethodIxExceptionTableLength; -text: .text%__1cMMachCallNodeLbottom_type6kM_pknEType__; -text: .text%__1cOGenerateOopMapHinterp16MpnOBytecodeStream__v_; -text: .text%__1cMloadConINodeLbottom_type6kM_pknEType__; -text: .text%__1cPCheckCastPPNodeGOpcode6kM_i_; -text: .text%__1cMloadConINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeKreplace_by6Mp0_v_; -text: .text%__1cHPhiNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cIBoolTestKcc2logical6kMpknEType__3_; -text: .text%__1cIBoolNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJrelocInfoKset_format6Mi_v_; -text: .text%__1cXruntime_call_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cNPhaseCoalesceRcombine_these_two6MpnENode_2_v_; -text: .text%__1cNtestP_regNodeMideal_Opcode6kM_i_; -text: .text%__1cICallNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJTypeTupleGfields6FI_ppknEType__; -text: .text%__1cPClassFileParserUassemble_annotations6MpCi1ipnGThread__nPtypeArrayHandle__; -text: .text%method_compare: methodOop.o; -text: .text%__1cMMergeMemNodeEhash6kM_I_; -text: .text%__1cJloadPNodePoper_input_base6kM_I_; -text: .text%__1cILoadNodeKmatch_edge6kMI_I_; -text: .text%__1cFBlockUneeded_for_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; -text: .text%__1cIIndexSetSpopulate_free_list6F_v_; -text: .text%__1cIAddPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIemit_d326FrnKCodeBuffer_i_v_; -text: .text%__1cJStoreNodeKmatch_edge6kMI_I_; -text: .text%__1cITypeNodeDcmp6kMrknENode__I_; -text: .text%__1cMPhaseChaitinFUnion6MpknENode_3_v_; -text: .text%__1cRSignatureIteratorTcheck_signature_end6M_v_; -text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_; -text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cILoadNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNSafePointNodeKmatch_edge6kMI_I_; -text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_; -text: .text%__1cKarrayKlassLobject_size6kMi_i_; -text: .text%__1cKarrayKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cYCallStaticJavaDirectNodePoper_input_base6kM_I_; -text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_; -text: .text%__1cPciInstanceKlassGloader6M_pnHoopDesc__; -text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__; -text: .text%__1cYDebugInformationRecorderWserialize_scope_values6MpnNGrowableArray4CpnKScopeValue____i_; -text: .text%__1cYDebugInformationRecorderTcreate_scope_values6MpnNGrowableArray4CpnKScopeValue____pnKDebugToken__; -text: .text%__1cITypeNodeHsize_of6kM_I_; -text: .text%__1cILoadNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cPPerfLongVariantGsample6M_v_; -text: .text%__1cNloadConI0NodeErule6kM_I_; -text: .text%__1cQciBytecodeStreamMreset_to_bci6Mi_v_; -text: .text%__1cFframeRoops_code_blob_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cHPhiNodeHsize_of6kM_I_; -text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; -text: .text%__1cMPhaseChaitinNFind_compress6MI_I_; -text: .text%__1cIMachNodeRget_base_and_disp6kMrlrpknHTypePtr__pknENode__; -text: .text%__1cLOopMapCacheIentry_at6kMi_pnQOopMapCacheEntry__; -text: .text%__1cOGenerateOopMapKcheck_type6MnNCellTypeState_1_v_; -text: .text%__1cPciInstanceKlassRprotection_domain6M_pnHoopDesc__; -text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cKBufferBlobHoops_do6MpnKOopClosure__v_; -text: .text%__1cLRegisterMapFclear6M_v_; -text: .text%__1cIBoolNodeLbottom_type6kM_pknEType__; -text: .text%__1cITypeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKRegionNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLBlock_Array2t6MpnFArena__v_; -text: .text%__1cKStoreINodeGOpcode6kM_i_; -text: .text%__1cJcmpOpOperJnum_edges6kM_I_; -text: .text%__1cNExceptionMark2t6MrpnGThread__v_; -text: .text%__1cNExceptionMark2T6M_v_; -text: .text%__1cCosMvm_page_size6F_i_; -text: .text%__1cMPhaseChaitinSget_spillcopy_wide6MpnENode_2I_2_; -text: .text%__1cHnmethodHoops_do6MpnKOopClosure__v_; -text: .text%__1cIGraphKitJsync_jvms6kM_pnIJVMState__; -text: .text%__1cFframebFinterpreter_frame_monitor_begin6kM_pnPBasicObjectLock__; -text: .text%__1cNidealize_test6FpnIPhaseGVN_pnGIfNode__3_: ifnode.o; -text: .text%__1cNSafePointNodeLbottom_type6kM_pknEType__; -text: .text%__1cPTwoOopHashtableMcompute_hash6MnMsymbolHandle_nGHandle__I_; -text: .text%__1cRSignatureIterator2t6MpnNsymbolOopDesc__v_; -text: .text%__1cKStorePNodeGOpcode6kM_i_; -text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; -text: .text%__1cHRetNodeNis_block_proj6kM_pknENode__; -text: .text%__1cMPhaseChaitinMyank_if_dead6MpnENode_pnFBlock_pnJNode_List_6_i_; -text: .text%__1cENodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFBlockLfind_remove6MpknENode__v_; -text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_; -text: .text%__1cNSafePointNodeSset_next_exception6Mp0_v_; -text: .text%__1cPloadConUL32NodeErule6kM_I_; -text: .text%__1cFChunkEchop6M_v_; -text: .text%__1cMciMethodDataJnext_data6MpnLProfileData__2_; -text: .text%__1cJStoreNodeLbottom_type6kM_pknEType__; -text: .text%__1cLBlock_StackXmost_frequent_successor6MpnFBlock__I_; -text: .text%__1cFBlockScall_catch_cleanup6MrnLBlock_Array__v_; -text: .text%__1cXPhaseAggressiveCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cOGenerateOopMapFppop16MnNCellTypeState__v_; -text: .text%__1cKstorePNodePoper_input_base6kM_I_; -text: .text%__1cPsplit_flow_path6FpnIPhaseGVN_pnHPhiNode__pnENode__: cfgnode.o; -text: .text%__1cKRegionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGTarjanELINK6Mp01_v_; -text: .text%__1cIsplit_if6FpnGIfNode_pnMPhaseIterGVN__pnENode__: ifnode.o; -text: .text%__1cTremove_useless_bool6FpnGIfNode_pnIPhaseGVN__pnENode__: ifnode.o; -text: .text%__1cMPhaseChaitinNFind_compress6MpknENode__I_; -text: .text%__1cRInterpreterOopMapKinitialize6M_v_; -text: .text%__1cJTypeTupleEmake6FIppknEType__pk0_; -text: .text%__1cKDictionaryJget_entry6MiInMsymbolHandle_nGHandle__pnPDictionaryEntry__; -text: .text%__1cLLShiftINodeGOpcode6kM_i_; -text: .text%__1cQResultTypeFinderDset6MinJBasicType__v_; -text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__; -text: .text%__1cIMachOperOindex_position6kM_i_; -text: .text%__1cOemit_d32_reloc6FrnKCodeBuffer_irknQRelocationHolder_i_v_; -text: .text%__1cLjmpConUNodePoper_input_base6kM_I_; -text: .text%__1cHAddNodeEhash6kM_I_; -text: .text%__1cPcheckCastPPNodePoper_input_base6kM_I_; -text: .text%__1cIRootNodeGOpcode6kM_i_; -text: .text%__1cFframebDinterpreter_frame_monitor_end6kM_pnPBasicObjectLock__; -text: .text%__1cNmethodOopDescImask_for6MipnRInterpreterOopMap__v_; -text: .text%__1cNinstanceKlassImask_for6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cRInterpreterOopMapLiterate_oop6MpnNOffsetClosure__v_; -text: .text%__1cRInterpreterOopMap2T6M_v_; -text: .text%__1cRInterpreterOopMapNresource_copy6MpnQOopMapCacheEntry__v_; -text: .text%__1cLOopMapCacheGlookup6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cRInterpreterOopMap2t6M_v_; -text: .text%__1cOindOffset8OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; -text: .text%__1cKstorePNodeMideal_Opcode6kM_i_; -text: .text%__1cFChunkJnext_chop6M_v_; -text: .text%__1cENode2t6Mp0111_v_; -text: .text%__1cPciObjectFactoryNfind_non_perm6MpnHoopDesc__rpn0ANNonPermObject__; -text: .text%__1cHCmpNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIAddINodeLbottom_type6kM_pknEType__; -text: .text%__1cNloadRangeNodeErule6kM_I_; -text: .text%__1cNrFlagsRegOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIIndexSetJlrg_union6MIIIpknIPhaseIFG_rknHRegMask__I_; -text: .text%__1cISubINodeGOpcode6kM_i_; -text: .text%__1cYciExceptionHandlerStreamEnext6M_v_; -text: .text%__1cOBasicHashtableJnew_entry6MI_pnTBasicHashtableEntry__; -text: .text%__1cJHashtableJnew_entry6MIpnHoopDesc__pnOHashtableEntry__; -text: .text%__1cSCountedLoopEndNodeGOpcode6kM_i_; -text: .text%__1cKstoreINodePoper_input_base6kM_I_; -text: .text%__1cCosVcurrent_stack_pointer6F_pC_; -text: .text%__1cMMergeMemNodePiteration_setup6Mpk0_v_; -text: .text%__1cRMachSafePointNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cJStoreNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMMergeMemNodeJmemory_at6kMI_pnENode__; -text: .text%__1cJloadSNodeErule6kM_I_; -text: .text%__1cLLShiftLNodeLbottom_type6kM_pknEType__; -text: .text%__1cTconstantPoolOopDescSklass_at_if_loaded6FnSconstantPoolHandle_i_pnMklassOopDesc__; -text: .text%__1cKjmpDirNodeHsize_of6kM_I_; -text: .text%__1cJCProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJMultiNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cHOopFlowNcompute_reach6MpnNPhaseRegAlloc_ipnEDict__v_; -text: .text%__1cJCatchNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cGGCTaskKinitialize6M_v_; -text: .text%__1cNGCTaskManagerIget_task6MI_pnGGCTask__; -text: .text%__1cNGCTaskManagerWdecrement_busy_workers6M_I_; -text: .text%__1cLGCTaskQdDueueGremove6M_pnGGCTask__; -text: .text%__1cLGCTaskQdDueueHenqueue6MpnGGCTask__v_; -text: .text%__1cNGCTaskManagerWincrement_busy_workers6M_I_; -text: .text%__1cLGCTaskQdDueueHdequeue6M_pnGGCTask__; -text: .text%__1cNGCTaskManagerPnote_completion6MI_v_; -text: .text%__1cTCreateExceptionNodeMideal_Opcode6kM_i_; -text: .text%__1cKIfTrueNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_; -text: .text%__1cXindIndexScaleOffsetOperJnum_edges6kM_I_; -text: .text%__1cLRShiftINodeGOpcode6kM_i_; -text: .text%Unsafe_CompareAndSwapLong; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__; -text: .text%__1cNtestI_regNodeMideal_Opcode6kM_i_; -text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__; -text: .text%__1cJStoreNodeEhash6kM_I_; -text: .text%__1cKmethodOperGmethod6kM_l_; -text: .text%__1cKstoreINodeMideal_Opcode6kM_i_; -text: .text%__1cGGCTask2t6M_v_; -text: .text%__1cNSafePointNodeOnext_exception6kM_p0_; -text: .text%__1cOindOffset8OperNbase_position6kM_i_; -text: .text%__1cOindOffset8OperNconstant_disp6kM_i_; -text: .text%__1cENodeHset_req6MIp0_v_; -text: .text%__1cTconstantPoolOopDescNklass_name_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cSObjectSynchronizerJfast_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cWShouldNotReachHereNodePoper_input_base6kM_I_; -text: .text%__1cLIfFalseNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cXAdaptiveWeightedAverageYcompute_adaptive_average6Mff_f_; -text: .text%__1cOcompU_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cJloadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTconvI2L_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cSPSPromotionManagerbBgc_thread_promotion_manager6Fi_p0_; -text: .text%__1cQinstanceRefKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cMMergeMemNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLciSignatureLreturn_type6kM_pnGciType__; -text: .text%__1cIGraphKitJclone_map6M_pnNSafePointNode__; -text: .text%__1cLMachNopNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJchar2type6Fc_nJBasicType__; -text: .text%__1cJFieldTypeKbasic_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__; -text: .text%__1cJrRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMObjectLocker2T6M_v_; -text: .text%__1cNloadRangeNodeMideal_Opcode6kM_i_; -text: .text%__1cRInvocationCounterJset_state6Mn0AFState__v_; -text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cRInvocationCounterEinit6M_v_; -text: .text%__1cNSafePointNodeEjvms6kM_pnIJVMState__; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_; -text: .text%__1cTconstantPoolOopDescRname_ref_index_at6Mi_i_; -text: .text%__1cIHaltNodeLbottom_type6kM_pknEType__; -text: .text%__1cSsafePoint_pollNodeMideal_Opcode6kM_i_; -text: .text%__1cYCallStaticJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYCallStaticJavaDirectNodeSalignment_required6kM_i_; -text: .text%__1cMloadConPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; -text: .text%__1cKRegionNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cWConstantPoolCacheEntryRset_initial_state6Mi_v_; -text: .text%__1cKNativeCallGverify6M_v_; -text: .text%__1cNCompileBrokerLmaybe_block6F_v_; -text: .text%__1cFPhase2t6Mn0ALPhaseNumber__v_; -text: .text%__1cJloadINodeMideal_Opcode6kM_i_; -text: .text%__1cNLoadKlassNodeGOpcode6kM_i_; -text: .text%__1cIBoolNodeKmatch_edge6kMI_I_; -text: .text%__1cCosGmalloc6FL_pv_; -text: .text%__1cXAdaptiveWeightedAverageGsample6Mf_v_; -text: .text%__1cFStateM_sub_Op_RegP6MpknENode__v_; -text: .text%__1cPcheckCastPPNodeHtwo_adr6kM_I_; -text: .text%__1cOGenerateOopMapGppush16MnNCellTypeState__v_; -text: .text%__1cGBitMapOset_difference6M0_v_; -text: .text%__1cMvalue_of_loc6FppnHoopDesc__l_; -text: .text%__1cRmethodDataOopDescTbytecode_cell_count6FnJBytecodesECode__i_; -text: .text%__1cRmethodDataOopDescRcompute_data_size6FpnOBytecodeStream__i_; -text: .text%__1cRmethodDataOopDescPinitialize_data6MpnOBytecodeStream_i_i_; -text: .text%__1cLSymbolTableJbasic_add6MipCiIpnGThread__pnNsymbolOopDesc__; -text: .text%__1cLsymbolKlassPallocate_symbol6MpCipnGThread__pnNsymbolOopDesc__; -text: .text%__1cNGrowableArray4CpnKciTypeFlowFBlock__2t6MpnFArena_iirk2_v_; -text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cOcompI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cKTypeAryPtrFxmeet6kMpknEType__3_; -text: .text%__1cOcompU_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cNSafePointNodeGOpcode6kM_i_; -text: .text%__1cMTypeKlassPtrEhash6kM_i_; -text: .text%__1cMLinkResolverYlookup_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cMciMethodDataLbci_to_data6Mi_pnLProfileData__; -text: .text%JVM_GetCPMethodSignatureUTF; -text: .text%__1cPfieldDescriptorKinitialize6MpnMklassOopDesc_i_v_; -text: .text%__1cMMergeMemNodeNset_memory_at6MIpnENode__v_; -text: .text%JVM_CurrentThread; -text: .text%__1cHTypeAryEhash6kM_i_; -text: .text%JVM_GetClassModifiers; -text: .text%JVM_GetClassAccessFlags; -text: .text%__1cRAbstractAssemblerGa_byte6Mi_v_; -text: .text%__1cJAssemblerGprefix6Mn0AGPrefix__v_; -text: .text%__1cKMemBarNodeKmatch_edge6kMI_I_; -text: .text%__1cMMergeMemNodePset_base_memory6MpnENode__v_; -text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_; -text: .text%__1cCosEfree6Fpv_v_; -text: .text%__1cENodeDcmp6kMrk0_I_; -text: .text%__1cMLinkResolverbAcheck_method_accessability6FnLKlassHandle_11nMmethodHandle_pnGThread__v_; -text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cMrax_RegPOperEtype6kM_pknEType__; -text: .text%__1cKTypeRawPtrEhash6kM_i_; -text: .text%__1cXindIndexScaleOffsetOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cVCompressedWriteStream2t6Mi_v_; -text: .text%__1cENode2t6Mp01_v_; -text: .text%__1cHAddNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMURShiftINodeGOpcode6kM_i_; -text: .text%__1cYDebugInformationRecorderVcreate_monitor_values6MpnNGrowableArray4CpnMMonitorValue____pnKDebugToken__; -text: .text%__1cYDebugInformationRecorderYserialize_monitor_values6MpnNGrowableArray4CpnMMonitorValue____i_; -text: .text%__1cMloadConINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMachNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cOMethodLivenessKBasicBlockWcompute_gen_kill_range6MpnQciBytecodeStream__v_; -text: .text%__1cJAssemblerJemit_data6MirknQRelocationHolder_i_v_; -text: .text%__1cIMachOperMdisp_as_type6kM_pknHTypePtr__; -text: .text%__1cOcompU_rRegNodeErule6kM_I_; -text: .text%__1cRMemBarReleaseNodeGOpcode6kM_i_; -text: .text%__1cKRelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cETypeOget_const_type6FpnGciType__pk0_; -text: .text%__1cMPhaseChaitinPset_was_spilled6MpnENode__v_; -text: .text%__1cKcmpOpUOperJnum_edges6kM_I_; -text: .text%__1cIGraphKitMsaved_ex_oop6FpnNSafePointNode__pnENode__; -text: .text%__1cMtlsLoadPNodeErule6kM_I_; -text: .text%__1cIGraphKitGmemory6MI_pnENode__; -text: .text%__1cNRelocIteratorJset_limit6MpC_v_; -text: .text%__1cPcheckCastPPNodeErule6kM_I_; -text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; -text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSobjArrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQciBytecodeStreamPget_field_index6M_i_; -text: .text%__1cGThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cKCompiledIC2t6MpnKRelocation__v_; -text: .text%__1cRaddI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cENodeHins_req6MIp0_v_; -text: .text%__1cIGraphKitLclean_stack6Mi_v_; -text: .text%__1cKRegionNodeHhas_phi6kM_pnHPhiNode__; -text: .text%__1cNloadRangeNodePoper_input_base6kM_I_; -text: .text%__1cWConstantPoolCacheEntryPbytecode_number6FnJBytecodesECode__i_; -text: .text%__1cNtestP_regNodeErule6kM_I_; -text: .text%__1cFStateM_sub_Op_ConI6MpknENode__v_; -text: .text%__1cUArgumentSizeComputerDset6MinJBasicType__v_; -text: .text%__1cHPhiNodeEmake6FpnENode_2pknEType_pknHTypePtr__p0_; -text: .text%__1cNtestI_regNodeErule6kM_I_; -text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__; -text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_; -text: .text%__1cOGenerateOopMapSget_basic_block_at6kMi_pnKBasicBlock__; -text: .text%__1cKJavaThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cFStateM_sub_Op_AddP6MpknENode__v_; -text: .text%__1cICallNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cOcompI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cPciObjectFactoryNinit_ident_of6MpnIciObject__v_; -text: .text%__1cIciObjectJset_ident6MI_v_; -text: .text%__1cLMachNopNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLMachNopNodeMideal_Opcode6kM_i_; -text: .text%__1cKJNIHandlesKmake_local6FpnHoopDesc__pnI_jobject__; -text: .text%__1cITypeFuncEhash6kM_i_; -text: .text%__1cOcompI_rRegNodeErule6kM_I_; -text: .text%__1cJAssemblerJemit_data6MinJrelocInfoJrelocType_i_v_; -text: .text%__1cJLoadSNodeGOpcode6kM_i_; -text: .text%__1cRMemBarAcquireNodeGOpcode6kM_i_; -text: .text%__1cJVectorSet2L6MI_rnDSet__; -text: .text%__1cJVectorSetEgrow6MI_v_; -text: .text%__1cFKlassNlookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cPcheckCastPPNodeMideal_Opcode6kM_i_; -text: .text%__1cJLoadLNodeGOpcode6kM_i_; -text: .text%__1cMLinkResolverNresolve_klass6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__; -text: .text%__1cIAndINodeGOpcode6kM_i_; -text: .text%__1cTCreateExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNArgumentCountDset6MinJBasicType__v_; -text: .text%__1cLBoxLockNodeGOpcode6kM_i_; -text: .text%__1cKStoreBNodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapHget_var6Mi_nNCellTypeState__; -text: .text%__1cWShouldNotReachHereNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHoopDescGverify6M_v_; -text: .text%__1cHTypePtrHget_con6kM_l_; -text: .text%__1cMTypeKlassPtr2t6MnHTypePtrDPTR_pnHciKlass_i_v_; -text: .text%__1cYCallStaticJavaDirectNodeKmethod_set6Ml_v_; -text: .text%__1cWMachCallStaticJavaNodePret_addr_offset6M_i_; -text: .text%__1cYCallStaticJavaDirectNodePcompute_padding6kMi_i_; -text: .text%__1cJVectorSet2t6MpnFArena__v_; -text: .text%__1cFStateM_sub_Op_RegI6MpknENode__v_; -text: .text%__1cICmpPNodeDsub6kMpknEType_3_3_; -text: .text%__1cOAbstractICachePinvalidate_word6FpC_v_; -text: .text%__1cRNativeInstructionFwrote6Mi_v_; -text: .text%__1cMURShiftLNodeGOpcode6kM_i_; -text: .text%__1cOrFlagsRegUOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQciBytecodeStreamQget_method_index6M_i_; -text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__; -text: .text%JVM_GetMethodIxLocalsCount; -text: .text%__1cJlabelOperFlabel6kM_pnFLabel__; -text: .text%__1cGOopMapJheap_size6kM_i_; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cMloadConLNodeErule6kM_I_; -text: .text%__1cLas_TosState6FnJBasicType__nITosState__; -text: .text%__1cNloadKlassNodeMideal_Opcode6kM_i_; -text: .text%__1cWThreadLocalAllocBufferVinitialize_statistics6M_v_; -text: .text%__1cWThreadLocalAllocBufferGresize6M_v_; -text: .text%__1cJloadINodePoper_input_base6kM_I_; -text: .text%__1cIRootNodeLbottom_type6kM_pknEType__; -text: .text%__1cWConstantPoolCacheEntryGverify6kMpnMoutputStream__v_; -text: .text%__1cHCompileYout_preserve_stack_slots6F_I_; -text: .text%__1cFParsePload_state_from6Mpn0AFBlock__v_; -text: .text%__1cFParseMmerge_common6Mpn0AFBlock_i_v_; -text: .text%__1cIGraphKitQkill_dead_locals6M_v_; -text: .text%__1cKMemBarNodeLbottom_type6kM_pknEType__; -text: .text%__1cIciObject2t6MnGHandle__v_; -text: .text%__1cITypeFuncEmake6FpknJTypeTuple_3_pk0_; -text: .text%__1cLConvI2LNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPciObjectFactoryGinsert6MipnIciObject_pnNGrowableArray4C2___v_; -text: .text%__1cRaddP_rReg_immNodePoper_input_base6kM_I_; -text: .text%__1cLBoxLockNodeJideal_reg6kM_I_; -text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cICHeapObj2n6FL_pv_; -text: .text%__1cKInlineTreeJcallee_at6kMipnIciMethod__p0_; -text: .text%__1cOFastUnlockNodeGOpcode6kM_i_; -text: .text%__1cFStateM_sub_Op_ConL6MpknENode__v_; -text: .text%__1cMTypeKlassPtrEmake6FnHTypePtrDPTR_pnHciKlass_i_pk0_; -text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cOCallRelocationFvalue6M_pC_; -text: .text%__1cMmerge_region6FpnKRegionNode_pnIPhaseGVN__pnENode__: cfgnode.o; -text: .text%__1cNloadConP0NodeErule6kM_I_; -text: .text%__1cIGraphKitMreset_memory6M_pnENode__; -text: .text%__1cPciObjectFactoryRcreate_new_object6MpnHoopDesc__pnIciObject__; -text: .text%__1cNloadRangeNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNloadConI0NodeMideal_Opcode6kM_i_; -text: .text%__1cNSignatureInfoGdo_int6M_v_; -text: .text%__1cKjmpDirNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPThreadRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cPThreadRootsTaskEname6M_pc_; -text: .text%__1cUThreadSafepointStateMroll_forward6Mn0AMsuspend_type__v_; -text: .text%__1cUThreadSafepointStateHrestart6M_v_; -text: .text%__1cLciSignatureHtype_at6kMi_pnGciType__; -text: .text%__1cJrRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIAddLNodeGOpcode6kM_i_; -text: .text%__1cJLoadPNodeJideal_reg6kM_I_; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cFParseFBlockRsuccessor_for_bci6Mi_p1_; -text: .text%__1cNGrowableArray4CpnOMethodLivenessKBasicBlock__2t6MpnFArena_iirk2_v_; -text: .text%__1cQSystemDictionaryEfind6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNtestP_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNincI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cHOrINodeGOpcode6kM_i_; -text: .text%__1cMPhaseChaitinJsplit_DEF6MpnENode_pnFBlock_iIp25nNGrowableArray4CI__i_I_; -text: .text%__1cICHeapObj2k6Fpv_v_; -text: .text%__1cRaddP_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cICmpINodeDsub6kMpknEType_3_3_; -text: .text%__1cIAddINodeGadd_id6kM_pknEType__; -text: .text%__1cKStoreCNodeGOpcode6kM_i_; -text: .text%__1cTconvI2L_reg_regNodeMcisc_operand6kM_i_; -text: .text%__1cHMemNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cNFingerprinterLfingerprint6M_L_; -text: .text%__1cOGenerateOopMapGppload6MpnNCellTypeState_i_v_; -text: .text%__1cKBlock_ListGremove6MI_v_; -text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; -text: .text%__1cKciTypeFlowGJsrSetJcopy_into6Mp1_v_; -text: .text%__1cICmpLNodeGOpcode6kM_i_; -text: .text%__1cTciConstantPoolCacheEfind6Mi_i_; -text: .text%__1cOPhaseIdealLoopGspinup6MpnENode_2222pnLsmall_cache__2_; -text: .text%__1cMVirtualSpaceOcommitted_size6kM_L_; -text: .text%__1cNGrowableArray4CpnIciObject__Praw_at_put_grow6Mirk14_v_; -text: .text%__1cIRootNodeNis_block_proj6kM_pknENode__; -text: .text%__1cHOopFlowEmake6FpnFArena_i_p0_; -text: .text%__1cJloadLNodeErule6kM_I_; -text: .text%__1cNloadConI0NodeLbottom_type6kM_pknEType__; -text: .text%__1cJimmI0OperIconstant6kM_l_; -text: .text%__1cScompI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cLBoxLockNodeLbottom_type6kM_pknEType__; -text: .text%__1cNaddI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cOPhaseIdealLoopKhandle_use6MpnENode_2pnLsmall_cache_22222_v_; -text: .text%__1cOPhaseIdealLoopOfind_use_block6MpnENode_22222_2_; -text: .text%__1cJStoreNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNSignatureInfoHdo_void6M_v_; -text: .text%JVM_GetCPMethodClassNameUTF; -text: .text%__1cHOopFlowFclone6Mp0i_v_; -text: .text%__1cRSignatureIteratorSiterate_parameters6ML_v_; -text: .text%__1cPindOffset32OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cPindOffset32OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMCallLeafNodeGOpcode6kM_i_; -text: .text%__1cPadd_derived_oop6FppnHoopDesc_2_v_: oopMap.o; -text: .text%__1cTDerivedPointerTableDadd6FppnHoopDesc_3_v_; -text: .text%__1cFParseFBlockJinit_node6Mp0i_v_; -text: .text%__1cFParseFBlockKinit_graph6Mp0_v_; -text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cKjmpDirNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJTraceTime2T6M_v_; -text: .text%__1cNmethodOopDescbAcompute_size_of_parameters6MpnGThread__v_; -text: .text%__1cSconstMethodOopDescLobject_size6Fiiii_i_; -text: .text%__1cSconstMethodOopDescZset_inlined_tables_length6Miii_v_; -text: .text%__1cLmethodKlassIallocate6MnRconstMethodHandle_nLAccessFlags_pnGThread__pnNmethodOopDesc__; -text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__; -text: .text%__1cFciEnvXget_field_by_index_impl6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cFciEnvSget_field_by_index6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cWConstantPoolCacheEntryOset_bytecode_16MnJBytecodesECode__v_; -text: .text%__1cMMergeMemNodeNgrow_to_match6Mpk0_v_; -text: .text%__1cTCreateExceptionNodePoper_input_base6kM_I_; -text: .text%__1cPciInstanceKlassYunique_concrete_subklass6M_p0_; -text: .text%__1cLStringTableGlookup6MipHiI_pnHoopDesc__; -text: .text%__1cLBoxLockNodeHsize_of6kM_I_; -text: .text%__1cIciObjectIencoding6M_pnI_jobject__; -text: .text%__1cIPhaseGVNUtransform_no_reclaim6MpnENode__2_; -text: .text%__1cNloadKlassNodePoper_input_base6kM_I_; -text: .text%__1cNObjectMonitorEexit6MpnGThread__v_; -text: .text%__1cMMergeMemNode2t6MpnENode__v_; -text: .text%__1cMMergeMemNodeRmake_empty_memory6F_pnENode__; -text: .text%__1cMindIndexOperJnum_edges6kM_I_; -text: .text%__1cRInterpretedRFrameKtop_method6kM_nMmethodHandle__; -text: .text%__1cXmembar_acquire_lockNodeLbottom_type6kM_pknEType__; -text: .text%__1cQPreserveJVMState2T6M_v_; -text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; -text: .text%__1cKjmpConNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIemit_d646FrnKCodeBuffer_l_v_; -text: .text%__1cFParseFmerge6Mi_v_; -text: .text%__1cOPhaseIdealLoopIset_idom6MpnENode_2I_v_; -text: .text%__1cFParseMdo_one_block6M_v_; -text: .text%__1cFParseFBlockMrecord_state6Mp0_v_; -text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__; -text: .text%__1cIPhaseIFGFUnion6MII_v_; -text: .text%__1cWConstantPoolCacheEntryOset_bytecode_26MnJBytecodesECode__v_; -text: .text%__1cOcompP_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cIBoolNodeJideal_reg6kM_I_; -text: .text%__1cHCmpNodeJideal_reg6kM_I_; -text: .text%__1cFStateM_sub_Op_Bool6MpknENode__v_; -text: .text%__1cJLoadBNodeGOpcode6kM_i_; -text: .text%__1cENodeHlatency6MI_I_; -text: .text%__1cIGraphKit2t6MpnIJVMState__v_; -text: .text%__1cKTypeAryPtrFklass6kM_pnHciKlass__; -text: .text%__1cTciConstantPoolCacheDget6Mi_pv_; -text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; -text: .text%__1cKTypeOopPtrHget_con6kM_l_; -text: .text%__1cIJVMStateLdebug_depth6kM_I_; -text: .text%__1cENodeNadd_req_batch6Mp0I_v_; -text: .text%__1cFStateK_sub_Op_If6MpknENode__v_; -text: .text%__1cXindIndexScaleOffsetOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cXindIndexScaleOffsetOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMelapsedTimerFstart6M_v_; -text: .text%__1cJStartNodeGOpcode6kM_i_; -text: .text%__1cMelapsedTimerEstop6M_v_; -text: .text%__1cOPhaseIdealLoopQconditional_move6MpnENode__2_; -text: .text%__1cJloadLNodeMideal_Opcode6kM_i_; -text: .text%__1cOMethodLivenessKBasicBlockJstore_one6Mi_v_; -text: .text%__1cPFieldAccessInfoDset6MnLKlassHandle_nMsymbolHandle_iinJBasicType_nLAccessFlags__v_; -text: .text%__1cMLinkResolverZcheck_field_accessability6FnLKlassHandle_11rnPfieldDescriptor_pnGThread__v_; -text: .text%__1cNsubI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cPindOffset32OperFscale6kM_i_; -text: .text%__1cHAddNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSconstMethodOopDescbBcompressed_linenumber_table6kM_pC_; -text: .text%__1cHTypePtrLdual_offset6kM_i_; -text: .text%__1cNMachIdealNodePoper_input_base6kM_I_; -text: .text%__1cSObjectSynchronizerOinflate_helper6FpnHoopDesc__pnNObjectMonitor__; -text: .text%__1cKciTypeFlowIblock_at6Mipn0AGJsrSet_n0AMCreateOption__pn0AFBlock__; -text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cPJavaCallWrapperHoops_do6MpnKOopClosure__v_; -text: .text%__1cFframeNoops_entry_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cXindIndexScaleOffsetOperFscale6kM_i_; -text: .text%__1cFciEnvTget_method_by_index6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cFciEnvYget_method_by_index_impl6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; -text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_; -text: .text%__1cNstoreImmBNodePoper_input_base6kM_I_; -text: .text%__1cNLoadRangeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cITypeFuncEmake6FpnIciMethod__pk0_; -text: .text%__1cKCompiledICOic_destination6kM_pC_; -text: .text%__1cTconvI2L_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cICmpUNodeDsub6kMpknEType_3_3_; -text: .text%__1cPSignatureStreamJas_symbol6MpnGThread__pnNsymbolOopDesc__; -text: .text%__1cRshrL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__; -text: .text%__1cETypeFwiden6kMpk0_2_; -text: .text%__1cKciTypeFlowLStateVector2t6Mp0_v_; -text: .text%__1cNCatchProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cOcompU_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCatchProjNodeHsize_of6kM_I_; -text: .text%__1cNCatchProjNodeEhash6kM_I_; -text: .text%__1cSvframeStreamCommonEnext6M_v_; -text: .text%__1cFKlassIsubklass6kM_p0_; -text: .text%__1cJimmI8OperIconstant6kM_l_; -text: .text%__1cIAddPNodeQmach_bottom_type6FpknIMachNode__pknEType__; -text: .text%__1cILoadNodeHsize_of6kM_I_; -text: .text%__1cURethrowExceptionNodeNis_block_proj6kM_pknENode__; -text: .text%__1cKPerfStringKset_string6Mpkc_v_; -text: .text%__1cENodeLnonnull_req6kM_p0_; -text: .text%__1cQSystemDictionaryKfind_class6FiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cQUnique_Node_ListEpush6MpnENode__v_; -text: .text%__1cILoopNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitTadd_exception_state6MpnNSafePointNode__v_; -text: .text%__1cJloadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopRregister_new_node6MpnENode_2_v_; -text: .text%__1cQPSGenerationPoolImax_size6kM_L_; -text: .text%__1cQPSGenerationPoolNused_in_bytes6M_L_; -text: .text%__1cQPSGenerationPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cOMethodLivenessNwork_list_get6M_pn0AKBasicBlock__; -text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cHTypeAryFxmeet6kMpknEType__3_; -text: .text%__1cNstoreImmBNodeMideal_Opcode6kM_i_; -text: .text%__1cNaddI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cHMatcherKmatch_sfpt6MpnNSafePointNode__pnIMachNode__; -text: .text%__1cOcompP_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cMPhaseChaitinKFind_const6kMpknENode__I_; -text: .text%__1cMPhaseChaitinKFind_const6kMI_I_; -text: .text%__1cNinstanceKlassKinitialize6MpnGThread__v_; -text: .text%__1cRInterpretedRFrameEinit6M_v_; -text: .text%__1cHemit_cc6FrnKCodeBuffer_ii_v_; -text: .text%__1cNtestI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFframeMpd_gc_epilog6M_v_; -text: .text%__1cFframeLgc_epilogue6M_v_; -text: .text%__1cRframe_gc_prologue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cRframe_gc_epilogue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_prologue6M_v_; -text: .text%__1cOGenerateOopMapUreachable_basicblock6Fp0ipi_v_; -text: .text%__1cXvirtual_call_RelocationJfirst_oop6M_pC_; -text: .text%__1cXvirtual_call_RelocationJoop_limit6M_pC_; -text: .text%__1cMciMethodDataLhas_trap_at6MpnLProfileData_i_i_; -text: .text%__1cKciTypeFlowLStateVectorOpush_translate6MpnGciType__v_; -text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_; -text: .text%__1cMloadConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIimmPOperIconstant6kM_l_; -text: .text%__1cHGCCauseJto_string6Fn0AFCause__pkc_; -text: .text%__1cTleaPIdxScaleOffNodeErule6kM_I_; -text: .text%JVM_IsNaN; -text: .text%__1cJloadINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHCompileKTracePhase2T6M_v_; -text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_; -text: .text%__1cHMatcherPc_frame_pointer6kM_i_; -text: .text%__1cFBlockKsched_call6MrnHMatcher_rnLBlock_Array_IrnJNode_List_pipnMMachCallNode_rnJVectorSet__I_; -text: .text%__1cICallNodeJideal_reg6kM_I_; -text: .text%__1cOleaPIdxOffNodeErule6kM_I_; -text: .text%__1cOGenerateOopMapEppop6MpnNCellTypeState__v_; -text: .text%__1cSCallLeafDirectNodeMideal_Opcode6kM_i_; -text: .text%__1cOcompP_rRegNodeErule6kM_I_; -text: .text%__1cMany_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cScompI_rReg_immNodeErule6kM_I_; -text: .text%__1cLBoxLockNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cIGraphKitOset_all_memory6MpnENode__v_; -text: .text%__1cLRegisterMap2t6Mpk0_v_; -text: .text%__1cGvframe2t6MpknFframe_pknLRegisterMap_pnKJavaThread__v_; -text: .text%__1cKstoreCNodePoper_input_base6kM_I_; -text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_; -text: .text%__1cHi2sNodeErule6kM_I_; -text: .text%__1cIMulLNodeGOpcode6kM_i_; -text: .text%__1cKciTypeFlowGJsrSet2t6MpnFArena_i_v_; -text: .text%__1cIAddINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIMachOperNconstant_disp6kM_i_; -text: .text%__1cIMachOperFscale6kM_i_; -text: .text%__1cOMethodLivenessKBasicBlockJpropagate6Mp0_v_; -text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; -text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; -text: .text%__1cNloadKlassNodeErule6kM_I_; -text: .text%__1cKCompiledICKcached_oop6kM_pnHoopDesc__; -text: .text%__1cGOopMap2t6Mii_v_; -text: .text%__1cJOopMapSetKadd_gc_map6MipnGOopMap__v_; -text: .text%__1cNincI_rRegNodeErule6kM_I_; -text: .text%__1cYDebugInformationRecorderNadd_safepoint6MipnGOopMap__v_; -text: .text%__1cHCompileTProcess_OopMap_Node6MpnIMachNode_i_v_; -text: .text%__1cYDebugInformationRecorderKadd_oopmap6MipnGOopMap__v_; -text: .text%__1cHOopFlowNbuild_oop_map6MpnENode_ipnNPhaseRegAlloc_pi_pnGOopMap__; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNsubI_rRegNodeMcisc_operand6kM_i_; -text: .text%JVM_GetCPFieldClassNameUTF; -text: .text%__1cRaddI_rReg_immNodeErule6kM_I_; -text: .text%__1cRMachNullCheckNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cHRetNodeMideal_Opcode6kM_i_; -text: .text%__1cGvframeKnew_vframe6FpknFframe_pknLRegisterMap_pnKJavaThread__p0_; -text: .text%__1cNsubI_rRegNodeErule6kM_I_; -text: .text%__1cRaddP_rReg_immNodeErule6kM_I_; -text: .text%__1cJloadLNodePoper_input_base6kM_I_; -text: .text%__1cITypeLongFxdual6kM_pknEType__; -text: .text%__1cENodeJset_req_X6MIp0pnMPhaseIterGVN__v_; -text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cIAndLNodeGOpcode6kM_i_; -text: .text%__1cMindIndexOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cOtypeArrayKlassSallocate_permanent6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cOGenerateOopMapCpp6MpnNCellTypeState_2_v_; -text: .text%__1cHCompileSflatten_alias_type6kMpknHTypePtr__3_; -text: .text%__1cYCallStaticJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateW_sub_Op_CallStaticJava6MpknENode__v_; -text: .text%__1cIGraphKitbDtransfer_exceptions_into_jvms6M_pnIJVMState__; -text: .text%__1cLConvL2INodeGOpcode6kM_i_; -text: .text%__1cOcompI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQSystemDictionarybEresolve_instance_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNaddI_rRegNodeErule6kM_I_; -text: .text%__1cYCallStaticJavaDirectNodeFreloc6kM_i_; -text: .text%__1cRcmpFastUnlockNodeMideal_Opcode6kM_i_; -text: .text%__1cWstatic_stub_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cIGraphKitQset_saved_ex_oop6FpnNSafePointNode_pnENode__v_; -text: .text%__1cIGraphKitUmake_exception_state6MpnENode__pnNSafePointNode__; -text: .text%__1cJloadBNodeMideal_Opcode6kM_i_; -text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoolHandle_inJBytecodesECode_pnGThread__v_; -text: .text%__1cMLinkResolverMresolve_pool6FrnLKlassHandle_rnMsymbolHandle_42nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cGOopMapHcopy_to6MpC_v_; -text: .text%__1cVLoaderConstraintTableWfind_loader_constraint6MnMsymbolHandle_nGHandle__ppnVLoaderConstraintEntry__; -text: .text%__1cJTimeStampGupdate6M_v_; -text: .text%__1cFframeZinterpreter_frame_set_bcx6Ml_v_; -text: .text%__1cRaddP_rReg_immNodeLbottom_type6kM_pknEType__; -text: .text%__1cMCreateExNodeKmatch_edge6kMI_I_; -text: .text%__1cLPCTableNodeLbottom_type6kM_pknEType__; -text: .text%__1cLOptoRuntimeSuncommon_trap_Type6F_pknITypeFunc__; -text: .text%__1cIHaltNode2t6MpnENode_2_v_; -text: .text%__1cNSafePointNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKciTypeFlowLStateVectorJcopy_into6kMp1_v_; -text: .text%__1cXmembar_release_lockNodeMideal_Opcode6kM_i_; -text: .text%__1cMoutputStreamPupdate_position6MpkcL_v_; -text: .text%__1cMstringStreamFwrite6MpkcL_v_; -text: .text%__1cKciTypeFlowQadd_to_work_list6Mpn0AFBlock__v_; -text: .text%__1cKciTypeFlowKflow_block6Mpn0AFBlock_pn0ALStateVector_pn0AGJsrSet__v_; -text: .text%__1cKciTypeFlowFBlockKsuccessors6MpnQciBytecodeStream_pn0ALStateVector_pn0AGJsrSet__pnNGrowableArray4Cp1___; -text: .text%__1cKciTypeFlowOwork_list_next6M_pn0AFBlock__; -text: .text%__1cIPipelineXfunctional_unit_latency6kMIpk0_I_; -text: .text%__1cMPhaseIterGVNJtransform6MpnENode__2_; -text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNGrowableArray4CpnKciTypeFlowJJsrRecord__2t6MpnFArena_iirk2_v_; -text: .text%__1cNmodI_rRegNodeErule6kM_I_; -text: .text%__1cNGrowableArray4CpnPciInstanceKlass__2t6MpnFArena_iirk1_v_; -text: .text%__1cKciTypeFlowFBlockScompute_exceptions6M_v_; -text: .text%__1cYciExceptionHandlerStreamFcount6M_i_; -text: .text%__1cINodeHashJhash_find6MpknENode__p1_; -text: .text%__1cPThreadLocalNodeLbottom_type6kM_pknEType__; -text: .text%__1cKciTypeFlowPflow_successors6MpnNGrowableArray4Cpn0AFBlock___pn0ALStateVector__v_; -text: .text%__1cRsalI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cJloadFNodeErule6kM_I_; -text: .text%__1cSMemBarCPUOrderNodeGOpcode6kM_i_; -text: .text%__1cLklassVtableNput_method_at6MpnNmethodOopDesc_i_v_; -text: .text%__1cHi2sNodeMideal_Opcode6kM_i_; -text: .text%__1cKstoreCNodeMideal_Opcode6kM_i_; -text: .text%__1cRshrI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cNloadConI0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHCompileKalias_type6MpnHciField__pn0AJAliasType__; -text: .text%__1cLStringTableGintern6FnGHandle_pHipnGThread__pnHoopDesc__; -text: .text%__1cLStringTableLhash_string6FpHi_i_; -text: .text%__1cNloadKlassNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRScavengeRootsTaskEname6M_pc_; -text: .text%__1cRScavengeRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cPCountedLoopNodeGOpcode6kM_i_; -text: .text%__1cJloadSNodeMideal_Opcode6kM_i_; -text: .text%__1cIregFOperEtype6kM_pknEType__; -text: .text%__1cLLShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%JVM_GetCPMethodNameUTF; -text: .text%__1cLTypeInstPtrFxdual6kM_pknEType__; -text: .text%__1cIGraphKitOreplace_in_map6MpnENode_2_v_; -text: .text%__1cMPhaseChaitinLclone_projs6MpnFBlock_IpnENode_4rI_i_; -text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPoolHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cOMethodLivenessNwork_list_add6Mpn0AKBasicBlock__v_; -text: .text%__1cFParseFBlockNlocal_type_at6kMi_pknEType__; -text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; -text: .text%__1cHTypeIntFxdual6kM_pknEType__; -text: .text%__1cEUTF8Hstrrchr6FpWiW_1_; -text: .text%__1cQConstantIntValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cNLoadKlassNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJVectorSetFClear6M_v_; -text: .text%__1cMMergeMemNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_; -text: .text%__1cICodeHeapSallocated_capacity6kM_L_; -text: .text%__1cIMachOperEtype6kM_pknEType__; -text: .text%__1cLjmpConUNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cNCallGenerator2t6MpnIciMethod__v_; -text: .text%__1cLStatSamplerLsample_data6FpnMPerfDataList__v_; -text: .text%__1cPStatSamplerTaskEtask6M_v_; -text: .text%__1cMPeriodicTaskMtime_to_wait6F_L_; -text: .text%__1cMPeriodicTaskOreal_time_tick6FL_v_; -text: .text%__1cLStatSamplerOcollect_sample6F_v_; -text: .text%__1cJloadBNodePoper_input_base6kM_I_; -text: .text%__1cMVM_OperationPevaluation_mode6kM_n0AEMode__; -text: .text%__1cIGraphKit2t6M_v_; -text: .text%__1cOemit_d64_reloc6FrnKCodeBuffer_lnJrelocInfoJrelocType_i_v_; -text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; -text: .text%__1cIGraphKitNset_map_clone6MpnNSafePointNode__v_; -text: .text%__1cENodeHget_ptr6kM_l_; -text: .text%__1cFStateM_sub_Op_ConP6MpknENode__v_; -text: .text%__1cJloadPNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOcompU_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cQciBytecodeStreamWget_field_holder_index6M_i_; -text: .text%__1cQciBytecodeStreamZget_declared_field_holder6M_pnPciInstanceKlass__; -text: .text%__1cRinterpretedVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cIciSymbol2t6MnMsymbolHandle__v_; -text: .text%__1cNdecI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cJLoadINodeJideal_reg6kM_I_; -text: .text%__1cPindOffset32OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cHAddNodePadd_of_identity6kMpknEType_3_3_; -text: .text%__1cMFastLockNodeGOpcode6kM_i_; -text: .text%__1cLBuildCutout2T6M_v_; -text: .text%__1cLBuildCutout2t6MpnIGraphKit_pnENode_ff_v_; -text: .text%__1cTconstantPoolOopDescOstring_at_impl6FnSconstantPoolHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cICodeHeapIcapacity6kM_L_; -text: .text%__1cKMemoryPoolImax_size6kM_L_; -text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cMCodeHeapPoolNused_in_bytes6M_L_; -text: .text%__1cJcmpOpOperFccode6kM_i_; -text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_; -text: .text%__1cEUTF8Enext6FpkcpH_pc_; -text: .text%__1cOcompL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cbAPSEvacuateFollowersClosureHdo_void6M_v_; -text: .text%__1cHMulNodeEhash6kM_I_; -text: .text%__1cGRFrame2t6MnFframe_pnKJavaThread_p0_v_; -text: .text%__1cOGenerateOopMapLbb_mark_fct6Fp0ipi_v_; -text: .text%__1cScompU_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cNFingerprinterJdo_object6Mii_v_; -text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_; -text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cKjmpConNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMethodLivenessKBasicBlockQcompute_gen_kill6MpnIciMethod__v_; -text: .text%__1cOMethodLivenessKBasicBlock2t6Mp0ii_v_; -text: .text%__1cMloadConFNodeErule6kM_I_; -text: .text%__1cIMachOperIconstant6kM_l_; -text: .text%__1cPcheckCastPPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUEdenMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cYSurvivorMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cYSurvivorMutableSpacePoolImax_size6kM_L_; -text: .text%__1cUEdenMutableSpacePoolNused_in_bytes6M_L_; -text: .text%__1cUEdenMutableSpacePoolImax_size6kM_L_; -text: .text%__1cYSurvivorMutableSpacePoolNused_in_bytes6M_L_; -text: .text%__1cHConNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTemit_java_to_interp6FrnKCodeBuffer__v_; -text: .text%__1cKciTypeFlowGJsrSetNapply_control6Mp0pnQciBytecodeStream_pn0ALStateVector__v_; -text: .text%__1cRSignatureIteratorSskip_optional_size6M_v_; -text: .text%__1cRaddI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHTypeIntFwiden6kMpknEType__3_; -text: .text%__1cTCompareAndSwapLNodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_; -text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_; -text: .text%__1cPloadConUL32NodeMideal_Opcode6kM_i_; -text: .text%__1cEUTF8Ounicode_length6Fpkci_i_; -text: .text%__1cIciMethodRget_flow_analysis6M_pnKciTypeFlow__; -text: .text%__1cSmembar_acquireNodeMideal_Opcode6kM_i_; -text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__l_; -text: .text%__1cHoopDescSslow_identity_hash6M_l_; -text: .text%__1cKMemBarNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; -text: .text%__1cIMachNodeOpipeline_class6F_pknIPipeline__; -text: .text%__1cIMachNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRMachNullCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXindIndexScaleOffsetOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__; -text: .text%__1cETypeRget_typeflow_type6FpnGciType__pk0_; -text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_; -text: .text%__1cKstorePNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKReturnNodeKmatch_edge6kMI_I_; -text: .text%__1cIHaltNodeJideal_reg6kM_I_; -text: .text%__1cFStateM_sub_Op_Halt6MpknENode__v_; -text: .text%__1cWShouldNotReachHereNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKReturnNodeGOpcode6kM_i_; -text: .text%__1cJTypeTupleKmake_range6FpnLciSignature__pk0_; -text: .text%__1cKStoreLNodeGOpcode6kM_i_; -text: .text%__1cJTypeTupleLmake_domain6FpnPciInstanceKlass_pnLciSignature__pk0_; -text: .text%__1cMindirectOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMindirectOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cLProfileDataOtranslate_from6Mp0_v_; -text: .text%__1cKstorePNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKstoreINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSPSKeepAliveClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cNloadConI0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvI2L_reg_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cMWarmCallInfoKalways_hot6F_p0_; -text: .text%__1cNprefetchwNodeMideal_Opcode6kM_i_; -text: .text%__1cIAddINodeJideal_reg6kM_I_; -text: .text%__1cLBoxLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIProjNodeDcmp6kMrknENode__I_; -text: .text%__1cNCatchProjNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_GetCPFieldSignatureUTF; -text: .text%__1cHCompileFstart6kM_pnJStartNode__; -text: .text%__1cNmulL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cLPCTableNodeEhash6kM_I_; -text: .text%__1cIGraphKitZadd_exception_states_from6MpnIJVMState__v_; -text: .text%__1cQComputeCallStackHdo_void6M_v_; -text: .text%__1cNaddI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIciMethodTcall_profile_at_bci6Mi_nNciCallProfile__; -text: .text%__1cMindIndexOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMindIndexOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%jni_GetPrimitiveArrayCritical: jni.o; -text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; -text: .text%__1cNinstanceKlassSlookup_osr_nmethod6kMpnNmethodOopDesc_i_pnHnmethod__; -text: .text%__1cIAddINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cLPCTableNodeHsize_of6kM_I_; -text: .text%__1cNincI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKJNIHandlesKmake_local6FpnGThread_pnHoopDesc__pnI_jobject__; -text: .text%__1cQciBytecodeStreamXget_method_holder_index6M_i_; -text: .text%__1cMorI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cIGraphKitWround_double_arguments6MpnIciMethod__v_; -text: .text%__1cFParseHdo_call6M_v_; -text: .text%__1cIGraphKitTround_double_result6MpnIciMethod__v_; -text: .text%__1cQciBytecodeStreambAget_declared_method_holder6M_pnHciKlass__; -text: .text%__1cFParseMprofile_call6MpnENode__v_; -text: .text%__1cScompP_mem_rRegNodePoper_input_base6kM_I_; -text: .text%__1cICodeHeapLheader_size6F_L_; -text: .text%__1cENodeLbottom_type6kM_pknEType__; -text: .text%__1cXindIndexScaleOffsetOperNconstant_disp6kM_i_; -text: .text%__1cSindIndexOffsetOperJnum_edges6kM_I_; -text: .text%__1cFKlassMnext_sibling6kM_p0_; -text: .text%__1cOGenerateOopMapNrestore_state6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapQnext_bb_start_pc6MpnKBasicBlock__i_; -text: .text%__1cOGenerateOopMapJinterp_bb6MpnKBasicBlock__v_; -text: .text%__1cKciTypeFlowLStateVectorStype_meet_internal6FpnGciType_3p0_3_; -text: .text%__1cRcmpFastUnlockNodeErule6kM_I_; -text: .text%__1cIBoolNodeHsize_of6kM_I_; -text: .text%__1cLLShiftINodeLbottom_type6kM_pknEType__; -text: .text%jni_DeleteLocalRef: jni.o; -text: .text%__1cJloadSNodePoper_input_base6kM_I_; -text: .text%__1cOcompI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%jni_SetIntField: jni.o; -text: .text%__1cMURShiftLNodeLbottom_type6kM_pknEType__; -text: .text%__1cNtestI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nGHandle__; -text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cLStringTableJbasic_add6MinGHandle_pHiIpnGThread__pnHoopDesc__; -text: .text%__1cNprefetchwNodePoper_input_base6kM_I_; -text: .text%__1cTCreateExceptionNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cHMulNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cVExceptionHandlerTableJadd_entry6MnRHandlerTableEntry__v_; -text: .text%__1cPsalI_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%__1cRaddP_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQComputeCallStackJdo_object6Mii_v_; -text: .text%__1cTconvL2I_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cKPSYoungGenNused_in_bytes6kM_L_; -text: .text%__1cOGenerateOopMapHset_var6MinNCellTypeState__v_; -text: .text%__1cGIfNodeHsize_of6kM_I_; -text: .text%__1cPciInstanceKlassFsuper6M_p0_; -text: .text%__1cOcompL_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cLLShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cScompI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMMergeMemNodeJideal_reg6kM_I_; -text: .text%__1cTleaPIdxScaleOffNodeMideal_Opcode6kM_i_; -text: .text%__1cTleaPIdxScaleOffNodePoper_input_base6kM_I_; -text: .text%__1cKMemBarNodeEhash6kM_I_; -text: .text%__1cOcompP_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNsubI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIXorINodeGOpcode6kM_i_; -text: .text%__1cTStackWalkCompPolicyRcompilation_level6MnMmethodHandle_i_i_; -text: .text%__1cMoutputStreamDput6Mc_v_; -text: .text%__1cPindOffset32OperNbase_position6kM_i_; -text: .text%__1cPindOffset32OperNconstant_disp6kM_i_; -text: .text%__1cOcompU_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPBytecode_invokeFindex6kM_i_; -text: .text%__1cLRShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cZPhaseConservativeCoalesceKupdate_ifg6MIIpnIIndexSet_2_v_; -text: .text%__1cZPhaseConservativeCoalesceMunion_helper6MpnENode_2II222pnFBlock_I_v_; -text: .text%__1cIIndexSetEswap6Mp0_v_; -text: .text%__1cOPhaseIdealLoopIsink_use6MpnENode_2_v_; -text: .text%__1cRshrL_rReg_immNodeErule6kM_I_; -text: .text%__1cKInlineTreeMok_to_inline6MpnIciMethod_pnIJVMState_rnNciCallProfile_pnMWarmCallInfo__8_; -text: .text%__1cScompU_rReg_immNodeErule6kM_I_; -text: .text%__1cKjmpDirNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cKjmpDirNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMindirectOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cILoadNodeDcmp6kMrknENode__I_; -text: .text%__1cLTypeInstPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cIGraphKitHjava_bc6kM_nJBytecodesECode__; -text: .text%__1cRAbstractAssemblerEbind6MrnFLabel__v_; -text: .text%__1cNloadConL0NodeErule6kM_I_; -text: .text%__1cJStoreNodeSIdeal_masked_input6MpnIPhaseGVN_I_pnENode__; -text: .text%__1cIGraphKitNbuiltin_throw6MnODeoptimizationLDeoptReason_pnENode__v_; -text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cMindIndexOperFscale6kM_i_; -text: .text%__1cScompP_mem_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; -text: .text%__1cRandI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cMMachProjNodeHsize_of6kM_I_; -text: .text%__1cJStoreNodeZIdeal_sign_extended_input6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cTconvF2D_reg_memNodeErule6kM_I_; -text: .text%__1cPindOffset32OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFStateM_sub_Op_CmpP6MpknENode__v_; -text: .text%__1cPciInstanceKlassUget_canonical_holder6Mi_p0_; -text: .text%__1cMloadConLNodeMideal_Opcode6kM_i_; -text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_; -text: .text%__1cIciSymbolEmake6Fpkc_p0_; -text: .text%__1cIciSymbolJmake_impl6Fpkc_p0_; -text: .text%__1cKimmL32OperIconstant6kM_l_; -text: .text%__1cKimmL32OperJnum_edges6kM_I_; -text: .text%__1cMMonitorValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cLBoxLockNodeKstack_slot6FpnENode__i_; -text: .text%__1cIBoolNodeDcmp6kMrknENode__I_; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_; -text: .text%__1cKDataLayoutKinitialize6MCHi_v_; -text: .text%__1cJloadLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFframebHnext_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; -text: .text%__1cLRuntimeStubHoops_do6MpnKOopClosure__v_; -text: .text%__1cPshrI_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%__1cOcompL_rRegNodeErule6kM_I_; -text: .text%__1cNGrowableArray4Cpv_Praw_at_put_grow6Mirk03_v_; -text: .text%__1cNGrowableArray4Cl_Praw_at_put_grow6Mirkl2_v_; -text: .text%__1cISubINodeLbottom_type6kM_pknEType__; -text: .text%__1cIGraphKitTset_all_memory_call6MpnENode__v_; -text: .text%__1cMtlsLoadPNodeLbottom_type6kM_pknEType__; -text: .text%__1cJAssemblerEmovq6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cNloadRangeNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGRFrameMset_distance6Mi_v_; -text: .text%__1cFframeLreal_sender6kMpnLRegisterMap__0_; -text: .text%__1cGRFrameGcaller6M_p0_; -text: .text%__1cTStackWalkCompPolicyIsenderOf6MpnGRFrame_pnNGrowableArray4C2___2_; -text: .text%__1cGRFrameKnew_RFrame6FnFframe_pnKJavaThread_p0_4_; -text: .text%__1cKstoreLNodePoper_input_base6kM_I_; -text: .text%__1cTconstantPoolOopDescMklass_at_put6MipnMklassOopDesc__v_; -text: .text%__1cNFingerprinterGdo_int6M_v_; -text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cRshrL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHPhiNodeEmake6FpnENode_2_p0_; -text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cIciObjectFklass6M_pnHciKlass__; -text: .text%__1cNloadConP0NodeMideal_Opcode6kM_i_; -text: .text%__1cOPhaseIdealLoopOsplit_thru_phi6MpnENode_2i_2_; -text: .text%__1cLklassVtableIindex_of6kMpnNmethodOopDesc_i_i_; -text: .text%__1cKEntryPointFentry6kMnITosState__pC_; -text: .text%__1cKJavaThreadJframes_do6MpFpnFframe_pknLRegisterMap__v_v_; -text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_; -text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cFStateM_sub_Op_RegL6MpknENode__v_; -text: .text%__1cNdecI_rRegNodeErule6kM_I_; -text: .text%__1cKjmpConNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcmpFastLockNodeMideal_Opcode6kM_i_; -text: .text%__1cKjmpConNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fl_v_; -text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_; -text: .text%__1cCosRcurrent_thread_id6F_l_; -text: .text%__1cKciTypeFlowLStateVectorMdo_getstatic6MpnQciBytecodeStream__v_; -text: .text%__1cNSignatureInfoHdo_bool6M_v_; -text: .text%__1cLLShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKstoreLNodeMideal_Opcode6kM_i_; -text: .text%__1cHPhiNodeMslice_memory6kMpknHTypePtr__p0_; -text: .text%__1cLSymbolTableFprobe6Fpkci_pnNsymbolOopDesc__; -text: .text%__1cPcmpFastLockNodePoper_input_base6kM_I_; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__; -text: .text%__1cNPhaseRegAllocKoffset2reg6kMi_i_; -text: .text%__1cQjmpCon_shortNodeMideal_Opcode6kM_i_; -text: .text%__1cQjmpCon_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_pnGRFrame__v_; -text: .text%__1cTconvI2L_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNGrowableArray4CI_Praw_at_put_grow6MirkI2_v_; -text: .text%__1cXmembar_acquire_lockNodeMideal_Opcode6kM_i_; -text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cXindIndexScaleOffsetOperOindex_position6kM_i_; -text: .text%__1cXindIndexScaleOffsetOperNbase_position6kM_i_; -text: .text%__1cIGraphKitJpush_node6MnJBasicType_pnENode__v_; -text: .text%__1cSconstMethodOopDescbEchecked_exceptions_length_addr6kM_pH_; -text: .text%__1cPThreadLocalNodeGOpcode6kM_i_; -text: .text%__1cRsubI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; -text: .text%__1cCosXthread_local_storage_at6Fi_pv_; -text: .text%__1cIAddPNodeJideal_reg6kM_I_; -text: .text%__1cRaddI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cFParseNthrow_to_exit6MpnNSafePointNode__v_; -text: .text%__1cQCallLeafNoFPNodeGOpcode6kM_i_; -text: .text%__1cKTypeRawPtrHget_con6kM_l_; -text: .text%__1cOClearArrayNodeGOpcode6kM_i_; -text: .text%__1cFStateM_sub_Op_CmpI6MpknENode__v_; -text: .text%__1cJimmP0OperEtype6kM_pknEType__; -text: .text%__1cNloadConP0NodeLbottom_type6kM_pknEType__; -text: .text%__1cPloadConUL32NodeLbottom_type6kM_pknEType__; -text: .text%__1cNloadConI0NodeHsize_of6kM_I_; -text: .text%JVM_handle_solaris_signal; -text: .text%signalHandler; -text: .text%__1cQJNI_FastGetFieldQfind_slowcase_pc6FpC_1_; -text: .text%__1cFStateN_sub_Op_LoadP6MpknENode__v_; -text: .text%__1cISubINodeDsub6kMpknEType_3_3_; -text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; -text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cUPSGenerationCountersKupdate_all6M_v_; -text: .text%__1cTStackWalkCompPolicyMshouldInline6FnMmethodHandle_fi_pkc_; -text: .text%__1cFArenaRdestruct_contents6M_v_; -text: .text%__1cXPhaseAggressiveCoalesceYinsert_copy_with_overlap6MpnFBlock_pnENode_II_v_; -text: .text%__1cULinearLeastSquareFitGupdate6Mdd_v_; -text: .text%__1cENodeIadd_prec6Mp0_v_; -text: .text%__1cIMulINodeGOpcode6kM_i_; -text: .text%__1cLciSignature2t6MpnHciKlass_pnIciSymbol__v_; -text: .text%__1cNGrowableArray4CpnGciType__2t6MpnFArena_iirk1_v_; -text: .text%__1cIciMethod2t6MnMmethodHandle__v_; -text: .text%__1cJAssemblerDjcc6Mn0AJCondition_rnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cMelapsedTimerHseconds6kM_d_; -text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; -text: .text%__1cJArrayDataKcell_count6M_i_; -text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%__1cPBytecode_invokeJsignature6kM_pnNsymbolOopDesc__; -text: .text%__1cKType_ArrayEgrow6MI_v_; -text: .text%JVM_Write; -text: .text%__1cDhpiFwrite6FipkvI_L_; -text: .text%__1cSindIndexOffsetOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; -text: .text%__1cIAddLNodeLbottom_type6kM_pknEType__; -text: .text%__1cKMemBarNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cIParmNodeJideal_reg6kM_I_; -text: .text%__1cVAdaptivePaddedAverageGsample6Mf_v_; -text: .text%__1cMtlsLoadPNodeMideal_Opcode6kM_i_; -text: .text%__1cRshrI_rReg_immNodeErule6kM_I_; -text: .text%__1cJcmpOpOperGnegate6M_v_; -text: .text%__1cHTypeAryEmake6FpknEType_pknHTypeInt__pk0_; -text: .text%__1cPCheckCastPPNodeJideal_reg6kM_I_; -text: .text%__1cJAssemblerEmovq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cUSafepointSynchronizebDhandle_polling_page_exception6FpnKJavaThread__v_; -text: .text%__1cUThreadSafepointStatebDhandle_polling_page_exception6M_v_; -text: .text%__1cLjmpConUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNandL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cKcmpOpUOperFccode6kM_i_; -text: .text%__1cIPipelinePoperand_latency6kMIpk0_I_; -text: .text%__1cWCallLeafNoFPDirectNodeMideal_Opcode6kM_i_; -text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cURethrowExceptionNodeMideal_Opcode6kM_i_; -text: .text%__1cJloadPNodeFreloc6kM_i_; -text: .text%__1cTno_rax_rbx_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKjmpConNodeGnegate6M_v_; -text: .text%__1cMindirectOperFscale6kM_i_; -text: .text%__1cRsubI_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; -text: .text%__1cQComputeCallStackGdo_int6M_v_; -text: .text%__1cNloadRangeNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNtestP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadRangeNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPCheckCastPPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQjmpDir_shortNodeMideal_Opcode6kM_i_; -text: .text%__1cQjmpDir_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKciTypeFlowLStateVectorLdo_getfield6MpnQciBytecodeStream__v_; -text: .text%__1cNaddI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cScompP_mem_rRegNodeErule6kM_I_; -text: .text%__1cPSignatureStreamRas_symbol_or_null6M_pnNsymbolOopDesc__; -text: .text%__1cNSafePointNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJloadSNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOjmpLoopEndNodeMideal_Opcode6kM_i_; -text: .text%__1cKCastPPNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cOGenerateOopMapKcopy_state6MpnNCellTypeState_2_v_; -text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; -text: .text%__1cQVMOperationQdDueueSqueue_remove_front6Mi_pnMVM_Operation__; -text: .text%__1cOcompI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVCompressedWriteStreamEgrow6M_v_; -text: .text%JVM_RawMonitorEnter; -text: .text%JVM_RawMonitorExit; -text: .text%__1cHUNICODELutf8_length6FpHi_i_; -text: .text%__1cRaddP_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cPCountedLoopNodeDphi6kM_pnENode__; -text: .text%__1cLBoxLockNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSmembar_releaseNodeMideal_Opcode6kM_i_; -text: .text%__1cQciBytecodeStreamSget_constant_index6kM_i_; -text: .text%__1cFParseOreturn_current6MpnENode__v_; -text: .text%__1cLConvI2LNodeJideal_reg6kM_I_; -text: .text%__1cJStartNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cMorI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cMloadConPNodeFreloc6kM_i_; -text: .text%__1cSPSPromotionManagerFreset6M_v_; -text: .text%__1cNPrefetchQdDueueFclear6M_v_; -text: .text%__1cSPSPromotionManagerKflush_labs6M_v_; -text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; -text: .text%__1cNincI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cTJvmtiEventCollectorYunset_jvmti_thread_state6M_v_; -text: .text%__1cLRShiftINodeLbottom_type6kM_pknEType__; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; -text: .text%__1cJTypeTupleFxdual6kM_pknEType__; -text: .text%__1cOcompP_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cHi2sNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_2_v_; -text: .text%__1cRciVirtualCallDataOtranslate_from6MpnLProfileData__v_; -text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: classFileParser.o; -text: .text%__1cKstoreCNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNloadKlassNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJMultiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMURShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRcmpFastUnlockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHSubNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQjava_lang_StringGlength6FpnHoopDesc__i_; -text: .text%__1cLRethrowNodeGOpcode6kM_i_; -text: .text%__1cFParseQcreate_entry_map6M_pnNSafePointNode__; -text: .text%__1cFParseIdo_exits6M_v_; -text: .text%__1cFParseLbuild_exits6M_v_; -text: .text%__1cFParseLinit_blocks6M_v_; -text: .text%__1cFParse2t6MpnIJVMState_pnIciMethod_f_v_; -text: .text%__1cFParseNdo_all_blocks6M_v_; -text: .text%__1cOParseGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cFArenaEused6kM_L_; -text: .text%__1cRandI_rReg_immNodeErule6kM_I_; -text: .text%jni_GetSuperclass: jni.o; -text: .text%__1cPno_rax_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFStateM_sub_Op_AddI6MpknENode__v_; -text: .text%__1cFParsePdo_method_entry6M_v_; -text: .text%__1cNCallGeneratorKfor_inline6FpnIciMethod_f_p0_; -text: .text%__1cLOpaque1NodeGOpcode6kM_i_; -text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; -text: .text%__1cPJavaCallWrapper2t6MnMmethodHandle_nGHandle_pnJJavaValue_pnGThread__v_; -text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; -text: .text%__1cRJavaCallArgumentsKparameters6M_pl_; -text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cPJavaCallWrapper2T6M_v_; -text: .text%__1cVPreserveExceptionMark2T6M_v_; -text: .text%__1cVPreserveExceptionMark2t6MrpnGThread__v_; -text: .text%__1cMrax_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cITypeFuncFxdual6kM_pknEType__; -text: .text%__1cLRShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJloadPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNCompileBrokerOcompile_method6FnMmethodHandle_i1ipkcpnGThread__pnHnmethod__; -text: .text%__1cTconstantPoolOopDescbDresolve_string_constants_impl6FnSconstantPoolHandle_pnGThread__v_; -text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; -text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cMLinkResolverXresolve_klass_no_update6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cISubINodeGadd_id6kM_pknEType__; -text: .text%__1cNsubI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cGciType2t6MnLKlassHandle__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle__v_; -text: .text%__1cKInlineTree2t6MpnHCompile_pk0pnIciMethod_pnIJVMState_if_v_; -text: .text%__1cJEventMark2t6MpkcE_v_; -text: .text%__1cNaddI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cQComputeCallStackHdo_long6M_v_; -text: .text%__1cMindirectOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cRaddI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; -text: .text%__1cQVMOperationQdDueueNqueue_oops_do6MipnKOopClosure__v_; -text: .text%__1cMCreateExNodeJideal_reg6kM_I_; -text: .text%__1cRmethodDataOopDescLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cNSCMemProjNodeGOpcode6kM_i_; -text: .text%__1cNSignatureInfoHdo_long6M_v_; -text: .text%__1cMCreateExNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRinterpretedVFrameDbci6kM_i_; -text: .text%__1cKInlineTreeYcompute_callee_frequency6kMi_f_; -text: .text%__1cKInlineTreebCbuild_inline_tree_for_callee6MpnIciMethod_pnIJVMState_i_p0_; -text: .text%__1cRinterpretedVFrameDbcp6kM_pC_; -text: .text%__1cRInterpretedRFrameKtop_vframe6kM_pnKjavaVFrame__; -text: .text%__1cIciMethodbBinterpreter_call_site_count6Mi_i_; -text: .text%__1cLRShiftLNodeGOpcode6kM_i_; -text: .text%__1cPsarI_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%__1cNsubI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cOMethodLivenessKBasicBlockIload_two6Mi_v_; -text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__; -text: .text%__1cNmulL_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_; -text: .text%__1cNCatchProjNodeDcmp6kMrknENode__I_; -text: .text%__1cTcompareAndSwapLNodePoper_input_base6kM_I_; -text: .text%__1cMloadConINodeHsize_of6kM_I_; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_i_v_; -text: .text%__1cNstoreImmINodeMideal_Opcode6kM_i_; -text: .text%__1cHOrINodeLbottom_type6kM_pknEType__; -text: .text%__1cPstoreImmI16NodeMideal_Opcode6kM_i_; -text: .text%__1cMindIndexOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cFStateQ_sub_Op_CreateEx6MpknENode__v_; -text: .text%__1cRshrL_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cLjmpConUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLjmpConUNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cRaddI_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; -text: .text%__1cHCompileXin_preserve_stack_slots6M_I_; -text: .text%__1cNdecI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cTtypeArrayKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cRalign_code_offset6Fi_I_; -text: .text%__1cMURShiftINodeLbottom_type6kM_pknEType__; -text: .text%__1cMorI_rRegNodeErule6kM_I_; -text: .text%__1cMLinkResolverVresolve_invokespecial6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cHMulNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cTconvL2I_reg_regNodeErule6kM_I_; -text: .text%__1cRmethodDataOopDescJbci_to_dp6Mi_pC_; -text: .text%__1cIAddLNodeGadd_id6kM_pknEType__; -text: .text%__1cRaddL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cFTypeFEhash6kM_i_; -text: .text%__1cPsalI_rReg_1NodeErule6kM_I_; -text: .text%__1cIJVMState2t6Mi_v_; -text: .text%__1cScompU_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcompP_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTCreateExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMURShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKRegionNodeOhas_unique_phi6kM_pnHPhiNode__; -text: .text%__1cIMulINodeLbottom_type6kM_pknEType__; -text: .text%__1cKTypeAryPtrFxdual6kM_pknEType__; -text: .text%__1cVExceptionHandlerTableMadd_subtable6MipnNGrowableArray4Cl__22_v_; -text: .text%__1cNandL_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cNObjectMonitorHis_busy6kM_l_; -text: .text%__1cEDict2t6MpFpkv2_ipF2_i_v_; -text: .text%__1cJAssemblerElock6M_v_; -text: .text%__1cJAssemblerIcmpxchgq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cSsafePoint_pollNodePoper_input_base6kM_I_; -text: .text%__1cLRuntimeStubbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cPshrI_rReg_1NodeErule6kM_I_; -text: .text%__1cRmethodDataOopDescKmileage_of6FpnNmethodOopDesc__i_; -text: .text%__1cIPSOldGenPupdate_counters6M_v_; -text: .text%__1cIregDOperEtype6kM_pknEType__; -text: .text%__1cTStackWalkCompPolicyPshouldNotInline6FnMmethodHandle__pkc_; -text: .text%__1cPcmpFastLockNodeErule6kM_I_; -text: .text%__1cFArena2t6M_v_; -text: .text%__1cSCallLeafDirectNodePoper_input_base6kM_I_; -text: .text%__1cQleaPIdxScaleNodeMideal_Opcode6kM_i_; -text: .text%__1cJcmpOpOperFequal6kM_i_; -text: .text%__1cScompI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_IsSameObject: jni.o; -text: .text%__1cIGraphKitYcombine_exception_states6MpnNSafePointNode_2_v_; -text: .text%__1cJloadBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulLNodeLbottom_type6kM_pknEType__; -text: .text%__1cONMethodSweeperPprocess_nmethod6FpnHnmethod__v_; -text: .text%__1cRaddP_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMrep_stosNodePoper_input_base6kM_I_; -text: .text%__1cRsalI_rReg_immNodeErule6kM_I_; -text: .text%__1cJFieldTypeSskip_optional_size6FpnNsymbolOopDesc_pi_v_; -text: .text%__1cMloadConPNodeHsize_of6kM_I_; -text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; -text: .text%__1cIGraphKitTcreate_and_xform_if6MpnENode_2ff_pnGIfNode__; -text: .text%__1cRaddI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; -text: .text%__1cSconstMethodOopDescZchecked_exceptions_length6kM_i_; -text: .text%__1cNIdealLoopTreeIset_nest6MI_i_; -text: .text%__1cNIdealLoopTreeMcounted_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cIGraphKitZset_results_for_java_call6MpnMCallJavaNode__pnENode__; -text: .text%__1cFStateM_sub_Op_CmpU6MpknENode__v_; -text: .text%__1cLRethrowNodeKmatch_edge6kMI_I_; -text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; -text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cKTypeRawPtrFxmeet6kMpknEType__3_; -text: .text%__1cJFieldTypeOget_array_info6FpnNsymbolOopDesc_pip2pnGThread__nJBasicType__; -text: .text%__1cNincI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIciObject2t6M_v_; -text: .text%__1cPstoreImmI16NodePoper_input_base6kM_I_; -text: .text%__1cPClassFileParserbCverify_legal_class_modifiers6MipnGThread__v_; -text: .text%__1cPciObjectFactoryUget_empty_methodData6M_pnMciMethodData__; -text: .text%__1cMciMethodData2t6M_v_; -text: .text%__1cNstoreImmBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFTypeDEhash6kM_i_; -text: .text%__1cPloadConUL32NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOpaque1NodeEhash6kM_I_; -text: .text%JVM_GetMethodIxModifiers; -text: .text%__1cJloadBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; -text: .text%__1cTCallDynamicJavaNodeGOpcode6kM_i_; -text: .text%__1cJloadINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKklassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cIHaltNodeEhash6kM_I_; -text: .text%__1cNstoreImmINodePoper_input_base6kM_I_; -text: .text%__1cLAccessFlagsPatomic_set_bits6Mi_v_; -text: .text%__1cNinstanceKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cNinstanceKlassScopy_static_fields6MpnSPSPromotionManager__v_; -text: .text%__1cSinstanceKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cOcompL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQVMOperationQdDueueLremove_next6M_pnMVM_Operation__; -text: .text%__1cRsubI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFStateP_sub_Op_LShiftL6MpknENode__v_; -text: .text%__1cLjmpConUNodeGnegate6M_v_; -text: .text%__1cKcmpOpUOperGnegate6M_v_; -text: .text%__1cLGCTaskQdDueueKinitialize6M_v_; -text: .text%__1cJStealTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cTOldToYoungRootsTaskEname6M_pc_; -text: .text%__1cTOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cNGCTaskManagerMnote_release6MI_v_; -text: .text%__1cJStealTaskEname6M_pc_; -text: .text%__1cSCardTableExtensionbAscavenge_contents_parallel6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager_I_v_; -text: .text%__1cFciEnvbAget_constant_by_index_impl6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cQciBytecodeStreamMget_constant6M_nKciConstant__; -text: .text%__1cFciEnvVget_constant_by_index6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cMrep_stosNodeMideal_Opcode6kM_i_; -text: .text%__1cKJavaThreadLgc_epilogue6M_v_; -text: .text%__1cKJavaThreadLgc_prologue6M_v_; -text: .text%__1cTsize_java_to_interp6F_I_; -text: .text%__1cUreloc_java_to_interp6F_I_; -text: .text%__1cQinit_input_masks6FIrnHRegMask_1_p0_: matcher.o; -text: .text%__1cRCompilationPolicybIreset_counter_for_invocation_event6MnMmethodHandle__v_; -text: .text%__1cRitableMethodEntryKinitialize6MpnNmethodOopDesc__v_; -text: .text%__1cTcompareAndSwapLNodeMideal_Opcode6kM_i_; -text: .text%__1cIGraphKitbBset_arguments_for_java_call6MpnMCallJavaNode__v_; -text: .text%__1cNCallGeneratorCtf6kM_pknITypeFunc__; -text: .text%__1cMloadConLNodeLbottom_type6kM_pknEType__; -text: .text%__1cNaddL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cFStateO_sub_Op_StoreI6MpknENode__v_; -text: .text%__1cQleaPIdxScaleNodePoper_input_base6kM_I_; -text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_; -text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_; -text: .text%__1cNloadConP0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; -text: .text%__1cbAjni_check_async_exceptions6FpnKJavaThread__v_: jni.o; -text: .text%__1cRsalI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMindIndexOperNbase_position6kM_i_; -text: .text%__1cMindIndexOperOindex_position6kM_i_; -text: .text%__1cMindIndexOperNconstant_disp6kM_i_; -text: .text%__1cKstoreINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCallGeneratorPfor_direct_call6FpnIciMethod__p0_; -text: .text%__1cTDirectCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cMWarmCallInfoLalways_cold6F_p0_; -text: .text%__1cFframeIpatch_pc6MpnGThread_pC_v_; -text: .text%JVM_IsInterface; -text: .text%__1cFKlassQset_next_sibling6MpnMklassOopDesc__v_; -text: .text%__1cRshrL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjmpCon_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjmpCon_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cKJavaThreadNpd_last_frame6M_nFframe__; -text: .text%__1cTStackWalkCompPolicyVfindTopInlinableFrame6MpnNGrowableArray4CpnGRFrame____2_; -text: .text%__1cKJavaThreadQlast_java_vframe6MpnLRegisterMap__pnKjavaVFrame__; -text: .text%__1cTStackWalkCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; -text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_nMmethodHandle__v_; -text: .text%__1cRMachNullCheckNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsarI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cKstorePNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cWImplicitExceptionTableGappend6MII_v_; -text: .text%__1cHUNICODEHas_utf86FpHi_pc_; -text: .text%__1cIMinINodeGOpcode6kM_i_; -text: .text%__1cFArena2T6M_v_; -text: .text%__1cKmethodOperJnum_edges6kM_I_; -text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; -text: .text%__1cISubLNodeGOpcode6kM_i_; -text: .text%__1cFStateO_sub_Op_StoreP6MpknENode__v_; -text: .text%__1cRshrI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsarL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cNstoreImmBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKstorePNodeFreloc6kM_i_; -text: .text%__1cYCallStaticJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQleaPIdxScaleNodeErule6kM_I_; -text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; -text: .text%__1cIGraphKitTuse_exception_state6MpnNSafePointNode__pnENode__; -text: .text%__1cIGraphKitSclear_saved_ex_oop6FpnNSafePointNode__pnENode__; -text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cKcmpOpUOperNgreater_equal6kM_i_; -text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; -text: .text%__1cXcopy_u2_with_conversion6FpH0i_v_: classFileParser.o; -text: .text%__1cJAssemblerFtestq6MpnMRegisterImpl_2_v_; -text: .text%__1cJCMoveNodeLis_cmove_id6FpnOPhaseTransform_pnENode_44pnIBoolNode__4_; -text: .text%__1cZresource_reallocate_bytes6FpcLL_0_; -text: .text%__1cKstoreINodeFreloc6kM_i_; -text: .text%__1cLsymbolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cIDivINodeGOpcode6kM_i_; -text: .text%__1cPshrI_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMorI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFParseQarray_addressing6MnJBasicType_ippknEType__pnENode__; -text: .text%__1cPsalI_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHciField2t6MpnPfieldDescriptor__v_; -text: .text%__1cIModINodeGOpcode6kM_i_; -text: .text%__1cNmulL_rRegNodeErule6kM_I_; -text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cQconstMethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; -text: .text%__1cLConvL2INodeLbottom_type6kM_pknEType__; -text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cScompP_mem_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreBNodePoper_input_base6kM_I_; -text: .text%__1cRandI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCallLeafDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cUDebugInfoWriteStreamMwrite_handle6MpnI_jobject__v_; -text: .text%__1cLmethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cNaddI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvL2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitPpush_pair_local6Mi_v_; -text: .text%__1cOjmpLoopEndNodePoper_input_base6kM_I_; -text: .text%__1cMURShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cHCompileSregister_intrinsic6MpnNCallGenerator__v_; -text: .text%__1cIAddLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNloadKlassNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQjava_lang_StringRas_unicode_string6FpnHoopDesc_ri_pH_; -text: .text%__1cHCmpNodeGadd_id6kM_pknEType__; -text: .text%JVM_InternString; -text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_; -text: .text%__1cFKlassQup_cast_abstract6M_p0_; -text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cSCountedLoopEndNodeKstride_con6kM_i_; -text: .text%__1cPCheckCastPPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; -text: .text%__1cLOpaque1NodeLbottom_type6kM_pknEType__; -text: .text%__1cOPhaseIdealLoopRsplit_thru_region6MpnENode_2_2_; -text: .text%__1cFciEnvRfind_system_klass6MpnIciSymbol__pnHciKlass__; -text: .text%__1cNandL_rRegNodeErule6kM_I_; -text: .text%__1cQjmpDir_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cQjmpDir_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLBlock_ArrayEgrow6MI_v_; -text: .text%__1cMPhaseChaitinVfind_base_for_derived6MppnENode_2rI_2_; -text: .text%__1cSindIndexOffsetOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cSindIndexOffsetOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cNGrowableArray4CI_Egrow6Mi_v_; -text: .text%__1cFStateP_sub_Op_ConvI2L6MpknENode__v_; -text: .text%__1cNsubI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRcmpFastUnlockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcheckCastPPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPciInstanceKlassLfind_method6MpnIciSymbol_2_pnIciMethod__; -text: .text%__1cILoopNodeHsize_of6kM_I_; -text: .text%__1cSindIndexOffsetOperFscale6kM_i_; -text: .text%__1cLBoxLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_; -text: .text%__1cKstoreBNodeMideal_Opcode6kM_i_; -text: .text%__1cHi2bNodeErule6kM_I_; -text: .text%__1cFStateN_sub_Op_LoadI6MpknENode__v_; -text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__; -text: .text%__1cICmpLNodeDsub6kMpknEType_3_3_; -text: .text%__1cRjmpConU_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRjmpConU_shortNodeMideal_Opcode6kM_i_; -text: .text%__1cOClearArrayNodeKmatch_edge6kMI_I_; -text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; -text: .text%__1cXmembar_release_lockNodeLbottom_type6kM_pknEType__; -text: .text%__1cPThreadLocalNodeJideal_reg6kM_I_; -text: .text%__1cTleaPIdxScaleOffNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPsarI_rReg_1NodeErule6kM_I_; -text: .text%__1cOPhaseIdealLoopPis_counted_loop6MpnENode_pnNIdealLoopTree__2_; -text: .text%__1cMloadConDNodeErule6kM_I_; -text: .text%__1cHCompileQsync_stack_slots6kM_i_; -text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; -text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNdecI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cJScopeDescJstream_at6kMi_pnTDebugInfoReadStream__; -text: .text%__1cVjava_lang_ClassLoaderGparent6FpnHoopDesc__2_; -text: .text%__1cIPhaseIFGEinit6MI_v_; -text: .text%__1cJPhaseLiveHcompute6MI_v_; -text: .text%JVM_GetCPClassNameUTF; -text: .text%__1cMLinkResolverUresolve_invokestatic6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cHRetNodePoper_input_base6kM_I_; -text: .text%jni_GetStringLength: jni.o; -text: .text%__1cPloadConUL32NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOFastUnlockNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__; -text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cNaddL_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cOcompL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cJScopeDesc2t6MpknHnmethod_i_v_; -text: .text%__1cFStateR_sub_Op_LoadRange6MpknENode__v_; -text: .text%__1cOcompiledVFrame2t6MpknFframe_pknLRegisterMap_pnKJavaThread_pnJScopeDesc__v_; -text: .text%__1cOcompU_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNsubL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cJMarkSweepMfollow_stack6F_v_; -text: .text%__1cNloadRangeNodeFreloc6kM_i_; -text: .text%__1cTcompareAndSwapLNodeErule6kM_I_; -text: .text%__1cZCallDynamicJavaDirectNodeMideal_Opcode6kM_i_; -text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cNxorI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cKciTypeFlow2t6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_; -text: .text%__1cKciTypeFlowKmap_blocks6M_v_; -text: .text%__1cKciTypeFlowHdo_flow6M_v_; -text: .text%__1cKciTypeFlowPget_start_state6M_pkn0ALStateVector__; -text: .text%__1cKciTypeFlowKflow_types6M_v_; -text: .text%__1cIAndINodeGadd_id6kM_pknEType__; -text: .text%__1cMURShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKPSYoungGenRcapacity_in_bytes6kM_L_; -text: .text%__1cYciExceptionHandlerStreamPcount_remaining6M_i_; -text: .text%__1cFParseXcatch_inline_exceptions6MpnNSafePointNode__v_; -text: .text%__1cMciMethodDataJload_data6M_v_; -text: .text%__1cIciMethodJload_code6M_v_; -text: .text%__1cJCmpL3NodeGOpcode6kM_i_; -text: .text%__1cIAndINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cUParallelScavengeHeapEused6kM_L_; -text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; -text: .text%__1cMTypeKlassPtrFxdual6kM_pknEType__; -text: .text%__1cIMaxINodeGOpcode6kM_i_; -text: .text%__1cOPhaseTransform2t6MnFPhaseLPhaseNumber__v_; -text: .text%__1cQSystemDictionarybAcompute_loader_lock_object6FnGHandle_pnGThread__1_; -text: .text%__1cIMulLNodeGadd_id6kM_pknEType__; -text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; -text: .text%__1cIVMThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; -text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; -text: .text%__1cQVMOperationQdDueueHoops_do6MpnKOopClosure__v_; -text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cOJNIHandleBlockMweak_oops_do6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; -text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_; -text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; -text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollectorXoops_do_for_all_threads6FpnKOopClosure__v_; -text: .text%__1cRindIndexScaleOperJnum_edges6kM_I_; -text: .text%__1cRindIndexScaleOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNSignatureInfoJdo_double6M_v_; -text: .text%__1cJAssemblerEmovl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cRsalI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cMrdx_RegIOperEtype6kM_pknEType__; -text: .text%__1cMciMethodData2t6MnQmethodDataHandle__v_; -text: .text%__1cRshrI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%jni_ExceptionOccurred: jni.o; -text: .text%jni_SetObjectArrayElement: jni.o; -text: .text%__1cISubINodeJideal_reg6kM_I_; -text: .text%__1cICodeHeapIallocate6ML_pv_; -text: .text%__1cICodeHeapPsearch_freelist6ML_pnJFreeBlock__; -text: .text%__1cPcmpFastLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmulL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; -text: .text%jni_GetStringUTFRegion: jni.o; -text: .text%jni_GetStringUTFLength: jni.o; -text: .text%__1cOMacroAssemblerWbang_stack_with_offset6Mi_v_; -text: .text%__1cScompU_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMoutputStream2t6Mi_v_; -text: .text%__1cMstringStreamJas_string6M_pc_; -text: .text%__1cMstringStream2t6ML_v_; -text: .text%__1cJloadINodeFreloc6kM_i_; -text: .text%__1cMstringStream2T6M_v_; -text: .text%__1cOMethodLivenessKBasicBlockJstore_two6Mi_v_; -text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cOAbstractICacheQinvalidate_range6FpCi_v_; -text: .text%__1cOAbstractICachePcall_flush_stub6FpCi_v_; -text: .text%__1cICodeBlobMset_oop_maps6MpnJOopMapSet__v_; -text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__; -text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__; -text: .text%__1cICodeHeapPfollowing_block6MpnJFreeBlock__2_; -text: .text%__1cOClearArrayNodeLbottom_type6kM_pknEType__; -text: .text%__1cEDictIdoubhash6M_v_; -text: .text%__1cTleaPIdxScaleOffNodeLbottom_type6kM_pknEType__; -text: .text%__1cIProjNodeJideal_reg6kM_I_; -text: .text%__1cHi2sNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLimmI_16OperJnum_edges6kM_I_; -text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; -text: .text%__1cMloadConLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRaddL_rReg_immNodeErule6kM_I_; -text: .text%__1cJLoadLNodeJideal_reg6kM_I_; -text: .text%__1cHCompileTset_cached_top_node6MpnENode__v_; -text: .text%__1cENodeMsetup_is_top6M_v_; -text: .text%__1cIGotoNodeGOpcode6kM_i_; -text: .text%__1cOMachPrologNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cNFingerprinterIdo_array6Mii_v_; -text: .text%jni_GetArrayLength: jni.o; -text: .text%__1cJloadSNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKReturnNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_; -text: .text%__1cMorI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cPsalI_rReg_1NodeHtwo_adr6kM_I_; -text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cHRetNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPGlobalTLABStatsKinitialize6M_v_; -text: .text%__1cTDerivedPointerTableFclear6F_v_; -text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; -text: .text%__1cNCollectedHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cTDerivedPointerTablePupdate_pointers6F_v_; -text: .text%__1cKDictionaryHoops_do6MpnKOopClosure__v_; -text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; -text: .text%__1cQLRUMaxHeapPolicy2t6M_v_; -text: .text%__1cPGCMemoryManagerIgc_begin6M_v_; -text: .text%__1cPGCMemoryManagerGgc_end6M_v_; -text: .text%__1cVLoaderConstraintTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cUParallelScavengeHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cKPSYoungGenPupdate_counters6M_v_; -text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; -text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; -text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cUParallelScavengeHeapPupdate_counters6M_v_; -text: .text%__1cQPlaceholderTableMremove_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cNCollectedHeapQresize_all_tlabs6M_v_; -text: .text%__1cUParallelScavengeHeapQresize_all_tlabs6M_v_; -text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersPupdate_counters6M_v_; -text: .text%__1cYGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; -text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; -text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cKstoreLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cUPSAdaptiveSizePolicybPeden_increment_with_supplement_aligned_up6ML_L_; -text: .text%__1cIPSOldGenMmax_gen_size6M_L_; -text: .text%__1cUPSAdaptiveSizePolicybHclear_generation_free_space_flags6M_v_; -text: .text%__1cUPSAdaptiveSizePolicyOeden_increment6MLI_L_; -text: .text%__1cQSystemDictionaryTload_instance_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cPjava_lang_ClassNcreate_mirror6FnLKlassHandle_pnGThread__pnHoopDesc__; -text: .text%__1cJAssemblerDjmp6MrnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cPshrI_rReg_1NodeHtwo_adr6kM_I_; -text: .text%__1cRmulI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cOMachEpilogNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLklassVtableVinitialize_from_super6MnLKlassHandle__i_; -text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; -text: .text%__1cLklassVtableOcopy_vtable_to6MpnLvtableEntry__v_; -text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; -text: .text%__1cPVM_GC_OperationbKrelease_and_notify_pending_list_lock6M_v_; -text: .text%__1cPVM_GC_OperationZacquire_pending_list_lock6M_v_; -text: .text%__1cMTypeKlassPtrFxmeet6kMpknEType__3_; -text: .text%__1cKReturnNodeEhash6kM_I_; -text: .text%__1cLlog2_intptr6Fl_i_; -text: .text%__1cKKlass_vtbl2n6FLrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_; -text: .text%__1cFKlassRbase_create_klass6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__1_; -text: .text%__1cSCallLeafDirectNodeKmethod_set6Ml_v_; -text: .text%__1cJcmpOpOperJnot_equal6kM_i_; -text: .text%__1cJloadLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRAbstractAssemblerbDgenerate_stack_overflow_check6Mi_v_; -text: .text%__1cNandL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftINodeJideal_reg6kM_I_; -text: .text%__1cJLoadSNodeJideal_reg6kM_I_; -text: .text%__1cIPhaseIFGISquareUp6M_v_; -text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; -text: .text%__1cCosJyield_all6Fi_v_; -text: .text%__1cCosbCmake_polling_page_unreadable6F_v_; -text: .text%__1cONMethodSweeperFsweep6F_v_; -text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_; -text: .text%__1cMCounterDecayFdecay6F_v_; -text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; -text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; -text: .text%__1cCosXserialize_thread_states6F_v_; -text: .text%__1cUSafepointSynchronizeFbegin6F_v_; -text: .text%__1cUSafepointSynchronizeQdo_cleanup_tasks6F_v_; -text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_; -text: .text%__1cNloadConP0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cCosbAmake_polling_page_readable6F_v_; -text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; -text: .text%__1cUSafepointSynchronizeDend6F_v_; -text: .text%__1cQVMOperationQdDueueGinsert6MpnMVM_Operation_2_v_; -text: .text%__1cQVMOperationQdDueueGunlink6MpnMVM_Operation__v_; -text: .text%__1cMVM_OperationIevaluate6M_v_; -text: .text%__1cMVM_OperationSset_calling_thread6MpnGThread_nOThreadPriority__v_; -text: .text%__1cCosMget_priority6FpknGThread_rnOThreadPriority__nIOSReturn__; -text: .text%__1cQVMOperationQdDueueOqueue_add_back6MipnMVM_Operation__v_; -text: .text%__1cGThreadMget_priority6Fpk0_nOThreadPriority__; -text: .text%__1cCosTget_native_priority6FpknGThread_pi_nIOSReturn__; -text: .text%__1cIVMThreadSevaluate_operation6MpnMVM_Operation__v_; -text: .text%__1cSmembar_releaseNodeLbottom_type6kM_pknEType__; -text: .text%__1cCosGrandom6F_l_; -text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; -text: .text%__1cPGlobalTLABStatsHpublish6M_v_; -text: .text%__1cUinitialize_hashtable6FppnLNameSigHash__v_; -text: .text%__1cNtestP_regNodeFreloc6kM_i_; -text: .text%__1cbDVM_ParallelGCFailedAllocationEdoit6M_v_; -text: .text%__1cKDictionaryJnew_entry6MIpnMklassOopDesc_pnHoopDesc__pnPDictionaryEntry__; -text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; -text: .text%__1cQSystemDictionaryRupdate_dictionary6FiIiInTinstanceKlassHandle_nGHandle_pnGThread__v_; -text: .text%__1cQSystemDictionaryQfind_placeholder6FiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cPsarI_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKciTypeFlowPflow_exceptions6MpnNGrowableArray4Cpn0AFBlock___pnNGrowableArray4CpnPciInstanceKlass___pn0ALStateVector__v_; -text: .text%__1cNIdealLoopTreeNDCE_loop_body6M_v_; -text: .text%__1cNprefetchwNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXmembar_release_lockNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFStateP_sub_Op_LShiftI6MpknENode__v_; -text: .text%__1cNIdealLoopTreeVadjust_loop_exit_prob6MpnOPhaseIdealLoop__v_; -text: .text%__1cKstoreCNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMPhaseChaitinMreset_uf_map6MI_v_; -text: .text%__1cMPhaseChaitinSbuild_ifg_physical6MpnMResourceArea__I_; -text: .text%__1cNPhaseCoalescePcoalesce_driver6M_v_; -text: .text%__1cNdecI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; -text: .text%__1cSTailCalljmpIndNodeNis_block_proj6kM_pknENode__; -text: .text%__1cMrcx_RegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIMulLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cHPhiNodeKmake_blank6FpnENode_2_p0_; -text: .text%JVM_GetMethodIxSignatureUTF; -text: .text%JVM_GetMethodIxMaxStack; -text: .text%JVM_GetMethodIxArgsSize; -text: .text%JVM_GetMethodIxByteCodeLength; -text: .text%JVM_GetMethodIxByteCode; -text: .text%JVM_GetMethodIxExceptionIndexes; -text: .text%JVM_GetMethodIxExceptionsCount; -text: .text%__1cOPhaseIdealLoopMdominated_by6MpnENode_2_v_; -text: .text%__1cNaddL_rRegNodeErule6kM_I_; -text: .text%__1cGGCTask2t6Mn0AEKindEkind__v_; -text: .text%__1cZSerialOldToYoungRootsTaskEname6M_pc_; -text: .text%__1cZSerialOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cSPSPromotionManagerNpost_scavenge6F_v_; -text: .text%__1cSPSPromotionManagerMpre_scavenge6F_v_; -text: .text%__1cUWaitForBarrierGCTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cSPSPromotionManagerbBvm_thread_promotion_manager6F_p0_; -text: .text%__1cSAdaptiveSizePolicyWminor_collection_begin6M_v_; -text: .text%__1cSAdaptiveSizePolicyUminor_collection_end6MnHGCCauseFCause__v_; -text: .text%__1cUWaitForBarrierGCTaskEname6M_pc_; -text: .text%__1cNMonitorSupplyHrelease6FpnHMonitor__v_; -text: .text%__1cNMonitorSupplyHreserve6F_pnHMonitor__; -text: .text%__1cUWaitForBarrierGCTaskIwait_for6M_v_; -text: .text%__1cUWaitForBarrierGCTaskIdestruct6M_v_; -text: .text%__1cUWaitForBarrierGCTaskHdestroy6Fp0_v_; -text: .text%__1cUWaitForBarrierGCTaskGcreate6F_p0_; -text: .text%__1cNBarrierGCTaskIdestruct6M_v_; -text: .text%__1cNBarrierGCTaskOdo_it_internal6MpnNGCTaskManager_I_v_; -text: .text%__1cNGCTaskManagerVrelease_all_resources6M_v_; -text: .text%__1cNGCTaskManagerIadd_list6MpnLGCTaskQdDueue__v_; -text: .text%__1cLGCTaskQdDueueHenqueue6Mp0_v_; -text: .text%__1cLGCTaskQdDueueGcreate6F_p0_; -text: .text%__1cGGCTaskIdestruct6M_v_; -text: .text%__1cSCardTableExtensionRscavenge_contents6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager__v_; -text: .text%__1cHThreadsZcreate_thread_roots_tasks6FpnLGCTaskQdDueue__v_; -text: .text%__1cKPSYoungGenLswap_spaces6M_v_; -text: .text%__1cUParallelScavengeHeapQresize_young_gen6MLL_v_; -text: .text%__1cKPSYoungGenGresize6MLL_v_; -text: .text%__1cKPSYoungGenNresize_spaces6MLL_v_; -text: .text%__1cSAdaptiveSizePolicybIupdate_minor_pause_young_estimator6Md_v_; -text: .text%__1cUPSAdaptiveSizePolicybGupdate_minor_pause_old_estimator6Md_v_; -text: .text%__1cNsubL_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cMStartOSRNodeGOpcode6kM_i_; -text: .text%__1cRsubI_rReg_memNodeErule6kM_I_; -text: .text%__1cQinstanceRefKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cNandI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cMURShiftINodeJideal_reg6kM_I_; -text: .text%__1cMorI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cLRShiftINodeJideal_reg6kM_I_; -text: .text%__1cLklassVtableQfill_in_mirandas6Mri_v_; -text: .text%__1cRandI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cFStateR_sub_Op_LoadKlass6MpknENode__v_; -text: .text%__1cJcmpOpOperEless6kM_i_; -text: .text%__1cFKlassWappend_to_sibling_list6M_v_; -text: .text%__1cOcompL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQSystemDictionarySjava_system_loader6F_pnHoopDesc__; -text: .text%__1cNloadKlassNodeFreloc6kM_i_; -text: .text%__1cRshrI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIAndINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cTjava_lang_ThrowableNset_backtrace6FpnHoopDesc_2_v_; -text: .text%__1cIAndINodeGmul_id6kM_pknEType__; -text: .text%__1cTClassLoadingServiceScompute_class_size6FpnNinstanceKlass__L_; -text: .text%__1cLklassVtableQget_num_mirandas6FpnMklassOopDesc_pnPobjArrayOopDesc_4_i_; -text: .text%__1cPClassFileParserbAparse_classfile_attributes6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cQSystemDictionaryQadd_to_hierarchy6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserUcompute_oop_map_size6MnTinstanceKlassHandle_ii_i_; -text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserYcheck_super_class_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cSinstanceKlassKlassXallocate_instance_klass6MiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_; -text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; -text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileStream2t6MpCipc_v_; -text: .text%__1cNinstanceKlassbBdo_local_static_fields_impl6FnTinstanceKlassHandle_pFpnPfieldDescriptor_pnGThread__v5_v_; -text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; -text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; -text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; -text: .text%__1cNinstanceKlassQinit_implementor6M_v_; -text: .text%__1cNinstanceKlassQeager_initialize6MpnGThread__v_; -text: .text%__1cKoopFactoryRnew_instanceKlass6FiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cKTypeRawPtrEmake6FpC_pk0_; -text: .text%__1cScompI_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cScompI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cOMethodLiveness2t6MpnFArena_pnIciMethod__v_; -text: .text%__1cOMethodLivenessSpropagate_liveness6M_v_; -text: .text%__1cOMethodLivenessRinit_basic_blocks6M_v_; -text: .text%__1cOMethodLivenessNinit_gen_kill6M_v_; -text: .text%__1cOMethodLivenessQcompute_liveness6M_v_; -text: .text%__1cFVTuneQstart_class_load6F_v_; -text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; -text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cFVTuneOend_class_load6F_v_; -text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; -text: .text%__1cQSystemDictionaryRload_shared_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cQSystemDictionaryRfind_shared_class6FnMsymbolHandle__pnMklassOopDesc__; -text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cSMemBarVolatileNodeGOpcode6kM_i_; -text: .text%__1cRaddL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cKciTypeFlowLStateVectorGdo_ldc6MpnQciBytecodeStream__v_; -text: .text%__1cMPhaseIterGVNIoptimize6M_v_; -text: .text%__1cNmulL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cRsalI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLklassVtableYadd_new_mirandas_to_list6FpnNGrowableArray4CpnNmethodOopDesc___pnPobjArrayOopDesc_6pnMklassOopDesc__v_; -text: .text%__1cQPackageHashtableMcompute_hash6Mpkci_I_; -text: .text%__1cWconstantPoolCacheKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cRsalL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_; -text: .text%__1cLOpaque2NodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_; -text: .text%__1cJloadBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPClassFileStreamGget_u86MpnGThread__X_; -text: .text%__1cKstoreINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cScompP_mem_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_; -text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; -text: .text%__1cFframeWsender_for_entry_frame6kMpnLRegisterMap__0_; -text: .text%__1cHPhiNodeDcmp6kMrknENode__I_; -text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; -text: .text%__1cKoopFactoryWnew_permanent_intArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cPClassFileParserVparse_exception_table6MIInSconstantPoolHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_; -text: .text%__1cMtlsLoadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmodI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cNtestL_regNodeMideal_Opcode6kM_i_; -text: .text%__1cRaddI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIConFNodeGOpcode6kM_i_; -text: .text%__1cLOpaque1NodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNSharedRuntimebOraw_exception_handler_for_return_address6FpC_1_; -text: .text%__1cNSharedRuntimebKexception_handler_for_return_address6FpC_1_; -text: .text%__1cIAndINodeKmul_opcode6kM_i_; -text: .text%__1cIAndINodeKadd_opcode6kM_i_; -text: .text%__1cKCMoveINodeGOpcode6kM_i_; -text: .text%__1cIRootNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPloadConUL32NodeHsize_of6kM_I_; -text: .text%__1cJAssemblerEandq6MpnMRegisterImpl_i_v_; -text: .text%__1cLClassLoaderOlookup_package6Fpkc_pnLPackageInfo__; -text: .text%__1cQPackageHashtableJget_entry6MiIpkcL_pnLPackageInfo__; -text: .text%JVM_Clone; -text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; -text: .text%__1cPsalI_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSTailCalljmpIndNodeMideal_Opcode6kM_i_; -text: .text%__1cQComputeCallStackJdo_double6M_v_; -text: .text%__1cKciTypeFlowLStateVectorMdo_putstatic6MpnQciBytecodeStream__v_; -text: .text%__1cIGraphKitHopt_iff6MpnENode_2_2_; -text: .text%__1cGEventsDlog6FpkcE_v_; -text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cSsafePoint_pollNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_; -text: .text%__1cPshrI_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseWensure_phis_everywhere6M_v_; -text: .text%__1cNsubL_rRegNodeErule6kM_I_; -text: .text%__1cUPSMarkSweepDecoratorVdestination_decorator6F_p0_; -text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_; -text: .text%__1cKBufferBlob2n6FLI_pv_; -text: .text%__1cFParseKarray_load6MnJBasicType__v_; -text: .text%__1cKBufferBlob2t6Mpkci_v_; -text: .text%__1cKBufferBlobGcreate6Fpkci_p0_; -text: .text%__1cKciTypeFlowLStateVectorLdo_putfield6MpnQciBytecodeStream__v_; -text: .text%__1cHnmethodNscope_desc_at6MpC_pnJScopeDesc__; -text: .text%__1cOPhaseIdealLoopQset_subtree_ctrl6MpnENode__v_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_i_v_; -text: .text%__1cRconstantPoolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cNinstanceKlassbBcall_class_initializer_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassRclass_initializer6M_pnNmethodOopDesc__; -text: .text%__1cNinstanceKlassWcall_class_initializer6MpnGThread__v_; -text: .text%__1cNinstanceKlassbOset_initialization_state_and_notify_impl6FnTinstanceKlassHandle_n0AKClassState_pnGThread__v_; -text: .text%__1cNinstanceKlassbJset_initialization_state_and_notify6Mn0AKClassState_pnGThread__v_; -text: .text%__1cNRelocIteratorTlocs_and_index_size6Fii_i_; -text: .text%__1cMrdi_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cTStackWalkCompPolicyYmethod_back_branch_event6MnMmethodHandle_iipnGThread__v_; -text: .text%__1cTconvL2I_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRCompilationPolicybJreset_counter_for_back_branch_event6MnMmethodHandle__v_; -text: .text%__1cMrax_RegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNSignatureInfoIdo_short6M_v_; -text: .text%JVM_GetFieldIxModifiers; -text: .text%__1cNandL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cTMachCallRuntimeNodePret_addr_offset6M_i_; -text: .text%__1cOcompiledVFrameEcode6kM_pnHnmethod__; -text: .text%__1cICodeHeapTmark_segmap_as_used6MLL_v_; -text: .text%__1cMorI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIAddLNodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cHOrINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_IsConstructorIx; -text: .text%__1cEDict2t6MpFpkv2_ipF2_ipnFArena_i_v_; -text: .text%__1cHMatcherLfind_shared6MpnENode__v_; -text: .text%__1cHMatcherFxform6MpnENode_i_2_; -text: .text%__1cJStartNodeHsize_of6kM_I_; -text: .text%__1cILRG_List2t6MI_v_; -text: .text%__1cHMatcherLreturn_addr6kM_i_; -text: .text%__1cSindIndexOffsetOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cOMachPrologNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cHMemNodeHsize_of6kM_I_; -text: .text%__1cNSignatureInfoIdo_float6M_v_; -text: .text%__1cRaddI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseNadd_safepoint6M_v_; -text: .text%__1cFStateT_sub_Op_CheckCastPP6MpknENode__v_; -text: .text%__1cRaddI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOCompiledRFrameEinit6M_v_; -text: .text%__1cGvframeDtop6kM_p0_; -text: .text%__1cRmethodDataOopDescYcompute_extra_data_count6Fii_i_; -text: .text%__1cPcheckCastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateM_sub_Op_SubI6MpknENode__v_; -text: .text%__1cRxorI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cNloadConP0NodeHsize_of6kM_I_; -text: .text%__1cJAssemblerEaddq6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerEsubq6MpnMRegisterImpl_2_v_; -text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6ML_v_; -text: .text%__1cTresource_free_bytes6FpcL_v_; -text: .text%__1cUPSMarkSweepDecoratorPadjust_pointers6M_v_; -text: .text%__1cUPSMarkSweepDecoratorKprecompact6M_v_; -text: .text%__1cRindIndexScaleOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cRindIndexScaleOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cPCountedLoopNodeHsize_of6kM_I_; -text: .text%__1cENodeHrm_prec6MI_v_; -text: .text%__1cHCompilebAvarargs_C_out_slots_killed6kM_I_; -text: .text%__1cICodeHeapLmerge_right6MpnJFreeBlock__v_; -text: .text%__1cNaddI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNmulL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cWandI_rReg_imm65535NodeMideal_Opcode6kM_i_; -text: .text%__1cRjmpConU_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRjmpConU_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; -text: .text%__1cSindIndexOffsetOperNconstant_disp6kM_i_; -text: .text%__1cIAndLNodeGadd_id6kM_pknEType__; -text: .text%__1cLConvL2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQleaPIdxScaleNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIAndLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cRaddP_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cMloadConLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateV_sub_Op_MemBarRelease6MpknENode__v_; -text: .text%__1cOleaPIdxOffNodeMideal_Opcode6kM_i_; -text: .text%__1cJAssemblerDorq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cScompI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPcmpFastLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXmembar_release_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTcompareAndSwapLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKciTypeFlowLStateVectorJhalf_type6FpnGciType__3_; -text: .text%__1cUjni_invoke_nonstatic6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; -text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; -text: .text%__1cNaddL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNxorI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cWCallLeafNoFPDirectNodePoper_input_base6kM_I_; -text: .text%__1cJLoadFNodeGOpcode6kM_i_; -text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNincI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJAssemblerEleaq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJloadINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHTypePtrFxmeet6kMpknEType__3_; -text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__; -text: .text%__1cIPhaseIFGYCompute_Effective_Degree6M_v_; -text: .text%__1cbCfind_class_from_class_loader6FpnHJNIEnv__nMsymbolHandle_CnGHandle_3CpnGThread__pnH_jclass__; -text: .text%__1cMPhaseChaitinOcache_lrg_info6M_v_; -text: .text%__1cMPhaseChaitinISimplify6M_v_; -text: .text%__1cMPhaseChaitinGSelect6M_I_; -text: .text%__1cRsarL_rReg_immNodeErule6kM_I_; -text: .text%__1cKcmpOpUOperJnot_equal6kM_i_; -text: .text%__1cScompU_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cScompU_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cRNativeGeneralJumpQjump_destination6kM_pC_; -text: .text%__1cLRethrowNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNSafepointBlobHoops_do6MpnKOopClosure__v_; -text: .text%__1cNandL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cTleaPIdxScaleOffNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNmulL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cODataRelocationGoffset6M_i_; -text: .text%__1cODataRelocationJset_value6MpC_v_; -text: .text%__1cKRelocationRpd_set_data_value6MpCl_v_; -text: .text%__1cLOptoRuntimeJstub_name6FpC_pkc_; -text: .text%__1cFStateO_sub_Op_StoreB6MpknENode__v_; -text: .text%__1cRaddL_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cRandI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIRootNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOleaPIdxOffNodePoper_input_base6kM_I_; -text: .text%__1cJcmpOpOperKless_equal6kM_i_; -text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; -text: .text%__1cIMulLNodeGmul_id6kM_pknEType__; -text: .text%__1cHMemNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cNsubI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cHMemNodeScalculate_adr_type6FpknEType_pknHTypePtr__6_; -text: .text%__1cRmulI_rReg_immNodeErule6kM_I_; -text: .text%__1cURethrowExceptionNodePoper_input_base6kM_I_; -text: .text%__1cNaddP_rRegNodePoper_input_base6kM_I_; -text: .text%__1cFStateP_sub_Op_RShiftI6MpknENode__v_; -text: .text%__1cNnegI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cbFloadConL_0x6666666666666667NodeErule6kM_I_; -text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; -text: .text%__1cNloadKlassNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmembar_acquireNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMoutputStreamFprint6MpkcE_v_; -text: .text%__1cMURShiftLNodeJideal_reg6kM_I_; -text: .text%__1cZPhaseConservativeCoalesce2t6MrnMPhaseChaitin__v_; -text: .text%__1cMPhaseChaitinFSplit6MI_I_; -text: .text%__1cMPhaseChaitinHcompact6M_v_; -text: .text%__1cMPhaseChaitinZcompress_uf_map_for_nodes6M_v_; -text: .text%__1cZPhaseConservativeCoalesceGverify6M_v_; -text: .text%__1cQComputeCallStackIdo_short6M_v_; -text: .text%__1cNFingerprinterHdo_long6M_v_; -text: .text%__1cIciMethodRinstructions_size6M_i_; -text: .text%__1cSsafePoint_pollNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNloadConL0NodeLbottom_type6kM_pknEType__; -text: .text%__1cIAndINodeJideal_reg6kM_I_; -text: .text%__1cZInterpreterMacroAssemblerKverify_oop6MpnMRegisterImpl_nITosState__v_; -text: .text%__1cOemit_d32_reloc6FrnKCodeBuffer_inJrelocInfoJrelocType_i_v_; -text: .text%__1cYexternal_word_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cNstoreImmBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateQ_sub_Op_URShiftL6MpknENode__v_; -text: .text%__1cJNode_ListEyank6MpnENode__v_; -text: .text%jni_ExceptionCheck: jni.o; -text: .text%__1cMFastLockNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMalloc_object6FpnH_jclass_pnGThread__pnPinstanceOopDesc__: jni.o; -text: .text%__1cRshrL_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIXorINodeLbottom_type6kM_pknEType__; -text: .text%__1cJAssemblerEsubq6MpnMRegisterImpl_i_v_; -text: .text%__1cNloadConL0NodeMideal_Opcode6kM_i_; -text: .text%__1cKBlock_ListGinsert6MIpnFBlock__v_; -text: .text%__1cQleaPIdxScaleNodeLbottom_type6kM_pknEType__; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_; -text: .text%__1cRxorI_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cKTypeAryPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cKTypeRawPtrEmake6FnHTypePtrDPTR__pk0_; -text: .text%__1cJCodeCacheEfree6FpnICodeBlob__v_; -text: .text%__1cICodeHeapPadd_to_freelist6MpnJHeapBlock__v_; -text: .text%__1cICodeHeapKdeallocate6Mpv_v_; -text: .text%__1cFframeLnmethods_do6M_v_; -text: .text%__1cJVectorSetGslamin6Mrk0_v_; -text: .text%__1cFStateQ_sub_Op_URShiftI6MpknENode__v_; -text: .text%__1cScompI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRaddI_rReg_memNodeErule6kM_I_; -text: .text%__1cKRelocationYpd_get_address_from_code6M_pC_; -text: .text%__1cRxorI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_; -text: .text%__1cNandL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNstoreImmBNodeFreloc6kM_i_; -text: .text%__1cJcmpOpOperNgreater_equal6kM_i_; -text: .text%__1cKBufferBlobEfree6Fp0_v_; -text: .text%__1cZInterpreterMacroAssemblerKverify_FPU6MinITosState__v_; -text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; -text: .text%__1cOGenerateOopMapIppop_any6Mi_v_; -text: .text%__1cKNode_ArrayFclear6M_v_; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cIJumpDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cRsalL_rReg_immNodeErule6kM_I_; -text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_; -text: .text%jni_NewObject: jni.o; -text: .text%__1cNaddP_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cPsarI_rReg_1NodeHtwo_adr6kM_I_; -text: .text%__1cFciEnvKcompile_id6M_I_; -text: .text%__1cOPhaseIdealLoopNreorg_offsets6MpnNIdealLoopTree__v_; -text: .text%__1cNtestL_regNodeErule6kM_I_; -text: .text%__1cLOptoRuntimebAcomplete_monitor_exit_Type6F_pknITypeFunc__; -text: .text%__1cIGraphKitNshared_unlock6MpnENode_2_v_; -text: .text%__1cNSafePointNodeLpop_monitor6M_v_; -text: .text%__1cRsarI_rReg_immNodeErule6kM_I_; -text: .text%__1cRsarL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMindirectOperNbase_position6kM_i_; -text: .text%__1cMindirectOperNconstant_disp6kM_i_; -text: .text%__1cMTailCallNodeKmatch_edge6kMI_I_; -text: .text%__1cKciTypeFlowLStateVectorGdo_new6MpnQciBytecodeStream__v_; -text: .text%__1cGIfNodeMdominated_by6MpnENode_pnMPhaseIterGVN__v_; -text: .text%__1cFStateV_sub_Op_MemBarAcquire6MpknENode__v_; -text: .text%__1cNSharedRuntimeQfind_callee_info6FpnKJavaThread_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cFKlassDLCA6Mp0_1_; -text: .text%__1cHciKlassVleast_common_ancestor6Mp0_1_; -text: .text%__1cNSCMemProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cJScopeDescGsender6kM_p0_; -text: .text%__1cSindIndexOffsetOperOindex_position6kM_i_; -text: .text%__1cSindIndexOffsetOperNbase_position6kM_i_; -text: .text%__1cNSafePointNodeMpush_monitor6MpknMFastLockNode__v_; -text: .text%__1cOcompiledVFrameGsender6kM_pnGvframe__; -text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; -text: .text%__1cNGrowableArray4Cpv_2t6MpnFArena_iirk0_v_; -text: .text%__1cKstoreFNodePoper_input_base6kM_I_; -text: .text%__1cNGrowableArray4Cl_2t6MpnFArena_iirkl_v_; -text: .text%__1cNstoreImmINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOMachEpilogNodeFreloc6kM_i_; -text: .text%__1cOMachEpilogNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovI_regNodeMideal_Opcode6kM_i_; -text: .text%__1cKCompiledIC2t6MpnKNativeCall__v_; -text: .text%__1cFStateN_sub_Op_LoadL6MpknENode__v_; -text: .text%__1cSCallLeafDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSignatureInfoHdo_char6M_v_; -text: .text%__1cNtestU_regNodeMideal_Opcode6kM_i_; -text: .text%__1cFStateQ_sub_Op_CallLeaf6MpknENode__v_; -text: .text%__1cRAbstractAssemblerFflush6M_v_; -text: .text%__1cJloadLNodeFreloc6kM_i_; -text: .text%__1cSCallLeafDirectNodeFreloc6kM_i_; -text: .text%__1cIGraphKitNgen_checkcast6MpnENode_2p2_2_; -text: .text%__1cIGraphKitRgen_subtype_check6MpnENode_2_2_; -text: .text%__1cNsubL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXmembar_release_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cJAssemblerEmovq6MpnMRegisterImpl_2_v_; -text: .text%__1cRmulL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cFframeRretrieve_receiver6MpnLRegisterMap__pnHoopDesc__; -text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__; -text: .text%jni_NewGlobalRef: jni.o; -text: .text%__1cOPhaseIdealLoopLdo_split_if6MpnENode__v_; -text: .text%__1cNandI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cHOrINodeGadd_id6kM_pknEType__; -text: .text%__1cIPhaseCFGOinsert_goto_at6MII_v_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_tree6M_v_; -text: .text%__1cRsubI_rReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMinINodeLbottom_type6kM_pknEType__; -text: .text%__1cJLoadBNodeJideal_reg6kM_I_; -text: .text%__1cFStateS_sub_Op_FastUnlock6MpknENode__v_; -text: .text%__1cXmembar_release_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRcmpFastUnlockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cMVirtualSpaceNreserved_size6kM_L_; -text: .text%__1cScompU_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRsarI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKStoreFNodeGOpcode6kM_i_; -text: .text%__1cPcmovI_reg_gNodeErule6kM_I_; -text: .text%__1cScompU_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cQjava_lang_ThreadRset_thread_status6FpnHoopDesc_n0AMThreadStatus__v_; -text: .text%__1cWCallLeafNoFPDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKstoreFNodeMideal_Opcode6kM_i_; -text: .text%__1cIimmFOperJconstantF6kM_f_; -text: .text%__1cKTypeOopPtrSmake_from_constant6FpnIciObject__pk0_; -text: .text%__1cIDivINodeLbottom_type6kM_pknEType__; -text: .text%__1cHOrINodeJideal_reg6kM_I_; -text: .text%__1cNcmovI_regNodeMcisc_operand6kM_i_; -text: .text%__1cIAndLNodeGmul_id6kM_pknEType__; -text: .text%__1cIAndLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cJloadFNodeMideal_Opcode6kM_i_; -text: .text%__1cbFunnecessary_membar_volatileNodeMideal_Opcode6kM_i_; -text: .text%__1cSmembar_acquireNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cIAndLNodeKadd_opcode6kM_i_; -text: .text%__1cFStateO_sub_Op_StoreC6MpknENode__v_; -text: .text%__1cIAndLNodeKmul_opcode6kM_i_; -text: .text%__1cRaddL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMrep_stosNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXmembar_acquire_lockNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMrcx_RegIOperEtype6kM_pknEType__; -text: .text%__1cOPhaseIdealLoopKDominators6M_v_; -text: .text%__1cHNTarjanDDFS6Fp0rnJVectorSet_pnOPhaseIdealLoop_pI_i_; -text: .text%__1cHNTarjanIsetdepth6MIpI_v_; -text: .text%__1cIMulLNodeKmul_opcode6kM_i_; -text: .text%__1cIMulLNodeKadd_opcode6kM_i_; -text: .text%jni_SetLongField: jni.o; -text: .text%__1cOPhaseIdealLoopQbuild_loop_early6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_late6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; -text: .text%__1cOPhaseIdealLoopRinit_dom_lca_tags6M_v_; -text: .text%__1cKstoreLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLPcDescCacheLadd_pc_desc6MpnGPcDesc__v_; -text: .text%__1cJloadSNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRsubI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMloadConFNodeMideal_Opcode6kM_i_; -text: .text%__1cNaddP_rRegNodeErule6kM_I_; -text: .text%__1cNmethodOopDescVclear_native_function6M_v_; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_; -text: .text%__1cTjava_lang_ThrowableQclear_stacktrace6FpnHoopDesc__v_; -text: .text%__1cKJavaThreadGactive6F_p0_; -text: .text%JVM_FillInStackTrace; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle__v_; -text: .text%__1cSInterpreterRuntimePset_bcp_and_mdp6FpCpnKJavaThread__v_; -text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_; -text: .text%jni_DeleteGlobalRef: jni.o; -text: .text%__1cLOpaque2NodeEhash6kM_I_; -text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; -text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; -text: .text%__1cFParseGdo_new6M_v_; -text: .text%__1cFParseFBlockMadd_new_path6M_i_; -text: .text%__1cJimmI0OperJnum_edges6kM_I_; -text: .text%__1cRmulI_rReg_immNodeMcisc_operand6kM_i_; -text: .text%__1cICodeHeapMmax_capacity6kM_L_; -text: .text%__1cMciMethodDataStrap_recompiled_at6MpnLProfileData__i_; -text: .text%__1cRindIndexScaleOperFscale6kM_i_; -text: .text%__1cNxorI_rRegNodeErule6kM_I_; -text: .text%__1cFParseFBlockNstack_type_at6kMi_pknEType__; -text: .text%__1cLConvL2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFTypeFEmake6Ff_pk0_; -text: .text%__1cIModINodeLbottom_type6kM_pknEType__; -text: .text%__1cJcmpOpOperHgreater6kM_i_; -text: .text%__1cQComputeCallStackHdo_bool6M_v_; -text: .text%__1cJMemRegionMintersection6kM0_0_; -text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cRmulI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHciKlassGloader6M_pnHoopDesc__; -text: .text%__1cIConDNodeGOpcode6kM_i_; -text: .text%__1cLRethrowNodeEhash6kM_I_; -text: .text%__1cIDivLNodeGOpcode6kM_i_; -text: .text%__1cSmembar_releaseNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cHMatcherQinline_cache_reg6F_i_; -text: .text%__1cbBInterpreterCodeletInterfaceRcode_size_to_size6kMi_i_; -text: .text%__1cbBInterpreterCodeletInterfaceKinitialize6MpnEStub_i_v_; -text: .text%jni_NewLocalRef: jni.o; -text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_; -text: .text%__1cPstoreImmI16NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLRShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIemit_d166FrnKCodeBuffer_i_v_; -text: .text%__1cKimmI16OperIconstant6kM_l_; -text: .text%__1cPClassFileParserbNparse_classfile_inner_classes_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__H_; -text: .text%__1cMloadConFNodeLbottom_type6kM_pknEType__; -text: .text%__1cJCodeCacheNalive_nmethod6FpnICodeBlob__pnHnmethod__; -text: .text%__1cJAssemblerGmovzbl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cMloadConLNodeHsize_of6kM_I_; -text: .text%__1cOMacroAssemblerSload_unsigned_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cNaddL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cNaddL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cLLShiftLNodeJideal_reg6kM_I_; -text: .text%__1cPlocal_vsnprintf6FpcLpkcpnR__va_list_element__i_; -text: .text%jio_vsnprintf; -text: .text%__1cNstoreImmINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIAndLNodeJideal_reg6kM_I_; -text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; -text: .text%jio_snprintf; -text: .text%__1cNSafePointNodeKgrow_stack6MpnIJVMState_I_v_; -text: .text%__1cURethrowExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTcompareAndSwapLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetCPMethodModifiers; -text: .text%__1cFStateR_sub_Op_SafePoint6MpknENode__v_; -text: .text%__1cSsafePoint_pollNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cQorI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cPsarI_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLRShiftLNodeLbottom_type6kM_pknEType__; -text: .text%__1cKReturnNodeJideal_reg6kM_I_; -text: .text%__1cNinstanceKlassPadd_implementor6MpnMklassOopDesc__v_; -text: .text%__1cRPrivilegedElementKinitialize6MpnMvframeStream_pnHoopDesc_p0pnGThread__v_; -text: .text%JVM_DoPrivileged; -text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_; -text: .text%__1cPpoll_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cSsafePoint_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSsafePoint_pollNodeFreloc6kM_i_; -text: .text%__1cLStrCompNodeGOpcode6kM_i_; -text: .text%__1cJOopMapSet2t6M_v_; -text: .text%__1cKstoreCNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeGOpcode6kM_i_; -text: .text%__1cNFingerprinterHdo_bool6M_v_; -text: .text%__1cOPhaseIdealLoopUsplit_if_with_blocks6MrnJVectorSet_rnKNode_Stack__v_; -text: .text%__1cNmethodOopDescbDbuild_interpreter_method_data6FnMmethodHandle_pnGThread__v_; -text: .text%__1cQLibraryIntrinsicIgenerate6MpnIJVMState__2_; -text: .text%__1cLOopRecorderIoop_size6M_i_; -text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_; -text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; -text: .text%__1cHnmethodKtotal_size6kM_i_; -text: .text%__1cNtestU_regNodeErule6kM_I_; -text: .text%__1cJOopMapSetJheap_size6kM_i_; -text: .text%__1cRAbstractAssemblerOcode_fill_byte6F_i_; -text: .text%__1cMrdx_RegLOperEtype6kM_pknEType__; -text: .text%__1cVPatchingRelocIteratorHprepass6M_v_; -text: .text%__1cVPatchingRelocIteratorIpostpass6M_v_; -text: .text%__1cJOopMapSetHcopy_to6MpC_v_; -text: .text%__1cLPhaseValues2t6Mp0_v_; -text: .text%__1cINodeHash2t6Mp0_v_; -text: .text%__1cOPhaseTransform2t6Mp0nFPhaseLPhaseNumber__v_; -text: .text%__1cJAssemblerDjmp6MnHAddress__v_; -text: .text%__1cOJNIHandleBlockRrebuild_free_list6M_v_; -text: .text%jni_GetObjectArrayElement: jni.o; -text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_; -text: .text%__1cVCallRuntimeDirectNodeMideal_Opcode6kM_i_; -text: .text%__1cICmpDNodeGOpcode6kM_i_; -text: .text%__1cPcmovI_reg_gNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_AndI6MpknENode__v_; -text: .text%__1cHCompilebBregister_library_intrinsics6M_v_; -text: .text%__1cETypeKInitialize6FpnHCompile__v_; -text: .text%__1cYDebugInformationRecorder2t6MpnLOopRecorder__v_; -text: .text%__1cOCompileWrapper2t6MpnHCompile__v_; -text: .text%__1cHCompileEInit6Mi_v_; -text: .text%__1cVExceptionHandlerTable2t6Mi_v_; -text: .text%__1cFDictIFreset6MpknEDict__v_; -text: .text%__1cUDebugInfoWriteStream2t6MpnYDebugInformationRecorder_i_v_; -text: .text%JVM_FindLoadedClass; -text: .text%__1cHMatcherZnumber_of_saved_registers6F_i_; -text: .text%__1cXPhaseAggressiveCoalesceNinsert_copies6MrnHMatcher__v_; -text: .text%__1cIPhaseCFGDDFS6MpnGTarjan__I_; -text: .text%__1cFArenaNmove_contents6Mp0_1_; -text: .text%__1cIPhaseIFG2t6MpnFArena__v_; -text: .text%__1cHMatcherUvalidate_null_checks6M_v_; -text: .text%__1cHCompileOcompute_old_SP6M_i_; -text: .text%__1cJPhaseLive2t6MrknIPhaseCFG_rnILRG_List_pnFArena__v_; -text: .text%__1cMPhaseChaitinRbuild_ifg_virtual6M_v_; -text: .text%__1cXPhaseAggressiveCoalesceGverify6M_v_; -text: .text%__1cJStartNodeJideal_reg6kM_I_; -text: .text%__1cHMatcher2t6MrnJNode_List__v_; -text: .text%__1cFArena2t6ML_v_; -text: .text%__1cWNode_Backward_Iterator2t6MpnENode_rnJVectorSet_rnJNode_List_rnLBlock_Array__v_; -text: .text%__1cHMatcherFmatch6M_v_; -text: .text%__1cFStateM_sub_Op_Goto6MpknENode__v_; -text: .text%__1cIPhaseCFGQGlobalCodeMotion6MrnHMatcher_IrnJNode_List__v_; -text: .text%__1cIPhaseCFGYEstimate_Block_Frequency6M_v_; -text: .text%__1cIPhaseCFGJbuild_cfg6M_I_; -text: .text%__1cHCompileICode_Gen6M_v_; -text: .text%__1cMPhaseChaitin2t6MIrnIPhaseCFG_rnHMatcher__v_; -text: .text%__1cMPhaseChaitinRRegister_Allocate6M_v_; -text: .text%__1cMPhaseChaitinGde_ssa6M_v_; -text: .text%__1cNPhaseRegAllocTpd_preallocate_hook6M_v_; -text: .text%__1cHMatcherPinit_spill_mask6MpnENode__v_; -text: .text%__1cHMatcherTFixup_Save_On_Entry6M_v_; -text: .text%__1cHMatcherVinit_first_stack_mask6M_v_; -text: .text%__1cIPhaseCFG2t6MpnFArena_pnIRootNode_rnHMatcher__v_; -text: .text%__1cGTarjanIsetdepth6MI_v_; -text: .text%__1cIPhaseCFGKDominators6M_v_; -text: .text%__1cNPhaseRegAlloc2t6MIrnIPhaseCFG_rnHMatcher_pF_v_v_; -text: .text%__1cIPhaseCFGVschedule_pinned_nodes6MrnJVectorSet__v_; -text: .text%__1cHCompileTframe_size_in_words6kM_i_; -text: .text%__1cOCompileWrapper2T6M_v_; -text: .text%__1cHCompileYinit_scratch_buffer_blob6M_v_; -text: .text%__1cNPhasePeephole2t6MpnNPhaseRegAlloc_rnIPhaseCFG__v_; -text: .text%__1cHCompileGOutput6M_v_; -text: .text%__1cHCompileQShorten_branches6MpnFLabel_ri333_v_; -text: .text%__1cHCompileLFill_buffer6M_v_; -text: .text%__1cHCompileTFillExceptionTables6MIpI1pnFLabel__v_; -text: .text%__1cHCompileRScheduleAndBundle6M_v_; -text: .text%__1cOMachPrologNodeFreloc6kM_i_; -text: .text%__1cWsize_exception_handler6F_I_; -text: .text%__1cWImplicitExceptionTableIset_size6MI_v_; -text: .text%__1cNPhasePeepholeMdo_transform6M_v_; -text: .text%__1cMPhaseChaitinMfixup_spills6M_v_; -text: .text%__1cNPhaseRegAllocPalloc_node_regs6Mi_v_; -text: .text%__1cLdo_liveness6FpnNPhaseRegAlloc_pnIPhaseCFG_pnKBlock_List_ipnFArena_pnEDict__v_: buildOopMap.o; -text: .text%__1cHCompileMBuildOopMaps6M_v_; -text: .text%__1cMPhaseChaitinbApost_allocate_copy_removal6M_v_; -text: .text%__1cRsarL_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; -text: .text%__1cFStateM_sub_Op_CmpL6MpknENode__v_; -text: .text%__1cJloadSNodeFreloc6kM_i_; -text: .text%__1cFStateN_sub_Op_LoadS6MpknENode__v_; -text: .text%__1cSInterpreterRuntimeOprofile_method6FpnKJavaThread_pC_i_; -text: .text%__1cOCompiledRFrame2t6MnFframe_pnKJavaThread_pnGRFrame__v_; -text: .text%__1cOCompiledRFrameKtop_method6kM_nMmethodHandle__; -text: .text%__1cKoopFactoryOnew_methodData6FnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cPmethodDataKlassIallocate6MnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cNxorI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRmethodDataOopDescPpost_initialize6MpnOBytecodeStream__v_; -text: .text%__1cHRetNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateO_sub_Op_Return6MpknENode__v_; -text: .text%__1cHRetNodeFreloc6kM_i_; -text: .text%__1cKScopeValueJread_from6FpnTDebugInfoReadStream__p0_; -text: .text%__1cOcompiledVFrameScreate_stack_value6kMpnKScopeValue__pnKStackValue__; -text: .text%__1cQleaPIdxScaleNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRindIndexScaleOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cNSignatureInfoHdo_byte6M_v_; -text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; -text: .text%__1cNandI_rRegNodeErule6kM_I_; -text: .text%__1cIMulINodeGadd_id6kM_pknEType__; -text: .text%__1cVcompiledICHolderKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cNmodI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cKloadUBNodeMideal_Opcode6kM_i_; -text: .text%__1cQsalI_rReg_CLNodeMideal_Opcode6kM_i_; -text: .text%__1cJAssemblerEcmpq6MnHAddress_i_v_; -text: .text%__1cNloadConP0NodeFreloc6kM_i_; -text: .text%__1cSmembar_acquireNodeLbottom_type6kM_pknEType__; -text: .text%__1cOMacroAssemblerKincrementq6MpnMRegisterImpl_i_v_; -text: .text%__1cRsarI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; -text: .text%__1cLConvL2INodeJideal_reg6kM_I_; -text: .text%JVM_GetClassNameUTF; -text: .text%__1cKCodeBuffer2t6MpCi_v_; -text: .text%__1cNprefetchwNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOjmpLoopEndNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNprefetchwNodeFreloc6kM_i_; -text: .text%__1cIAddLNodeJideal_reg6kM_I_; -text: .text%__1cILocation2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cKstoreCNodeFreloc6kM_i_; -text: .text%__1cNdecI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cWCallLeafNoFPDirectNodeKmethod_set6Ml_v_; -text: .text%__1cOPhaseIdealLoopOplace_near_use6kMpnENode__2_; -text: .text%__1cHi2bNodeMideal_Opcode6kM_i_; -text: .text%__1cNLocationValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cIMulLNodeJideal_reg6kM_I_; -text: .text%__1cNsubL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cFStateN_sub_Op_LoadB6MpknENode__v_; -text: .text%__1cNnegI_rRegNodeErule6kM_I_; -text: .text%__1cNFingerprinterJdo_double6M_v_; -text: .text%JVM_FindClassFromClass; -text: .text%__1cKcmpOpUOperEless6kM_i_; -text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cITypeLongFwiden6kMpknEType__3_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_; -text: .text%__1cKReflectionDbox6FpnGjvalue_nJBasicType_pnGThread__pnHoopDesc__; -text: .text%__1cLBoxLockNodeEhash6kM_I_; -text: .text%__1cJOopMapSetMgrow_om_data6M_v_; -text: .text%__1cWandI_rReg_imm65535NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cWandI_rReg_imm65535NodeErule6kM_I_; -text: .text%__1cZInterpreterMacroAssemblerGpush_i6MpnMRegisterImpl__v_; -text: .text%__1cNcmovI_regNodeErule6kM_I_; -text: .text%__1cRsalL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNGrowableArray4CpnKInlineTree__Egrow6Mi_v_; -text: .text%__1cLConvF2DNodeGOpcode6kM_i_; -text: .text%__1cISubLNodeLbottom_type6kM_pknEType__; -text: .text%__1cSmembar_acquireNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmembar_acquireNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNaddP_rRegNodeLbottom_type6kM_pknEType__; -text: .text%__1cNmodL_rRegNodeErule6kM_I_; -text: .text%__1cRsalI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJAssemblerDret6Mi_v_; -text: .text%__1cRshrI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; -text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; -text: .text%JVM_NewInstanceFromConstructor; -text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_; -text: .text%__1cFStateL_sub_Op_OrI6MpknENode__v_; -text: .text%JVM_IHashCode; -text: .text%__1cMtlsLoadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cEUTF8Ounicode_length6Fpkc_i_; -text: .text%__1cHTypePtrEmake6FnETypeFTYPES_n0ADPTR_i_pk0_; -text: .text%__1cPfieldDescriptorUstring_initial_value6kMpnGThread__pnHoopDesc__; -text: .text%__1cNxorI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cIregFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLMachUEPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLOpaque2NodeLbottom_type6kM_pknEType__; -text: .text%__1cNtestL_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadFNodePoper_input_base6kM_I_; -text: .text%__1cHRetDataKcell_count6M_i_; -text: .text%__1cSinstanceKlassKlassOklass_oop_size6kM_i_; -text: .text%__1cSobjArrayKlassKlassOklass_oop_size6kM_i_; -text: .text%__1cPCallRuntimeNodeGOpcode6kM_i_; -text: .text%__1cLsymbolKlassOklass_oop_size6kM_i_; -text: .text%__1cLmethodKlassOklass_oop_size6kM_i_; -text: .text%__1cMdecI_memNodePoper_input_base6kM_I_; -text: .text%__1cRconstantPoolKlassOklass_oop_size6kM_i_; -text: .text%__1cVcompiledICHolderKlassOklass_oop_size6kM_i_; -text: .text%__1cTtypeArrayKlassKlassOklass_oop_size6kM_i_; -text: .text%__1cWconstantPoolCacheKlassOklass_oop_size6kM_i_; -text: .text%__1cQconstMethodKlassOklass_oop_size6kM_i_; -text: .text%__1cPmethodDataKlassOklass_oop_size6kM_i_; -text: .text%__1cHThreadsHoops_do6FpnKOopClosure__v_; -text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; -text: .text%__1cSsafePoint_pollNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIPSOldGenHcompact6M_v_; -text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_; -text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; -text: .text%__1cQObjectStartArrayFreset6M_v_; -text: .text%__1cIPSOldGenPadjust_pointers6M_v_; -text: .text%__1cScompP_mem_rRegNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJloadBNodeFreloc6kM_i_; -text: .text%__1cUandI_rReg_imm255NodeMideal_Opcode6kM_i_; -text: .text%__1cScompP_mem_rRegNodeFreloc6kM_i_; -text: .text%__1cKciTypeFlowLStateVectorJdo_aaload6MpnQciBytecodeStream__v_; -text: .text%__1cNaddL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRaddI_rReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsubI_rReg_memNodeHtwo_adr6kM_I_; -text: .text%__1cIModLNodeGOpcode6kM_i_; -text: .text%__1cIMaxINodeLbottom_type6kM_pknEType__; -text: .text%__1cFParseMdo_checkcast6M_v_; -text: .text%__1cIMulINodeGmul_id6kM_pknEType__; -text: .text%__1cIregDOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIMulDNodeGOpcode6kM_i_; -text: .text%__1cRsarL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNsubL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cFParseLarray_store6MnJBasicType__v_; -text: .text%JVM_FindClassFromClassLoader; -text: .text%JVM_FindClassFromBootLoader; -text: .text%__1cRmulL_rReg_immNodeMcisc_operand6kM_i_; -text: .text%__1cMMergeMemNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cMadjust_check6FpnENode_11iipnMPhaseIterGVN__v_: ifnode.o; -text: .text%__1cPsalI_rReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLPhaseValuesKis_IterGVN6M_pnMPhaseIterGVN__; -text: .text%__1cQciTypeArrayKlassJmake_impl6FnJBasicType__p0_; -text: .text%__1cFStateM_sub_Op_AddL6MpknENode__v_; -text: .text%__1cQciTypeArrayKlassEmake6FnJBasicType__p0_; -text: .text%__1cNSCMemProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKciTypeFlowLStateVectorMdo_checkcast6MpnQciBytecodeStream__v_; -text: .text%__1cMorI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cMrax_RegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%lwp_mutex_init: os_solaris.o; -text: .text%__1cJStubQdDueueGcommit6Mi_v_; -text: .text%__1cJStubQdDueueHrequest6Mi_pnEStub__; -text: .text%__1cNmodL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cQjava_lang_ThreadRget_thread_status6FpnHoopDesc__n0AMThreadStatus__; -text: .text%__1cMincI_memNodePoper_input_base6kM_I_; -text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; -text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; -text: .text%__1cJAssemblerEmovl6MnHAddress_i_v_; -text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cPshrI_rReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cNandI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIModINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTno_rax_rdx_RegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cJAssemblerGmovzwl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cRmulL_rReg_immNodeErule6kM_I_; -text: .text%__1cZCallDynamicJavaDirectNodePoper_input_base6kM_I_; -text: .text%__1cOGenerateOopMapXdo_return_monitor_check6M_v_; -text: .text%__1cFStateP_sub_Op_ConvL2I6MpknENode__v_; -text: .text%__1cLOptoRuntimebBcomplete_monitor_enter_Type6F_pknITypeFunc__; -text: .text%__1cIGraphKitMnext_monitor6M_i_; -text: .text%__1cLBoxLockNode2t6Mi_v_; -text: .text%__1cIGraphKitLshared_lock6MpnENode__pnMFastLockNode__; -text: .text%__1cMloadConDNodeMideal_Opcode6kM_i_; -text: .text%__1cNCompileBrokerNallocate_task6F_pnLCompileTask__; -text: .text%__1cMCompileQdDueueDadd6MpnLCompileTask__v_; -text: .text%__1cRxorI_rReg_memNodeErule6kM_I_; -text: .text%__1cMCompileQdDueueDget6M_pnLCompileTask__; -text: .text%__1cRsarI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCompileTaskWrapper2t6MpnLCompileTask__v_; -text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; -text: .text%__1cXmembar_acquire_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_MulL6MpknENode__v_; -text: .text%__1cCosPhint_no_preempt6F_v_; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_i_v_; -text: .text%__1cNCompileBrokerJfree_task6FpnLCompileTask__v_; -text: .text%__1cSCompileTaskWrapper2T6M_v_; -text: .text%__1cLCompileTaskEfree6M_v_; -text: .text%__1cNnegI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMincI_memNodeMideal_Opcode6kM_i_; -text: .text%__1cRandL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cRaddI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__; -text: .text%jni_NewString: jni.o; -text: .text%__1cFStateM_sub_Op_AndL6MpknENode__v_; -text: .text%__1cKloadUBNodePoper_input_base6kM_I_; -text: .text%__1cPcmovI_reg_lNodeErule6kM_I_; -text: .text%__1cNSharedRuntimebJcontinuation_for_implicit_exception6FpnKJavaThread_pCn0AVImplicitExceptionKind__3_; -text: .text%__1cIimmDOperJconstantD6kM_d_; -text: .text%__1cFParsePmerge_exception6Mi_v_; -text: .text%__1cXmembar_acquire_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cNGrowableArray4CpnIciObject__2t6MpnFArena_iirk1_v_; -text: .text%__1cNGrowableArray4CpnIciObject__JappendAll6Mpk2_v_; -text: .text%__1cNGrowableArray4CpnIciMethod__2t6MpnFArena_iirk1_v_; -text: .text%__1cNGrowableArray4CpnHciKlass__2t6MpnFArena_iirk1_v_; -text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; -text: .text%__1cNGrowableArray4CpnPciReturnAddress__2t6MpnFArena_iirk1_v_; -text: .text%__1cFciEnvWget_method_from_handle6MpnI_jobject__pnIciMethod__; -text: .text%__1cNCompileBrokerVpush_jni_handle_block6F_v_; -text: .text%__1cIJVMStateNmonitor_depth6kM_i_; -text: .text%__1cHciKlassSsuper_check_offset6M_I_; -text: .text%__1cFciEnv2T6M_v_; -text: .text%__1cKstoreBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNCompileBrokerUpop_jni_handle_block6F_v_; -text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cPcmpFastLockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cFStateQ_sub_Op_FastLock6MpknENode__v_; -text: .text%__1cXmembar_acquire_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvD2I_reg_regNodeErule6kM_I_; -text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; -text: .text%__1cWImplicitExceptionTableCat6kMI_I_; -text: .text%__1cWImplicitExceptionTable2t6MpknHnmethod__v_; -text: .text%__1cLVtableStubsPstub_containing6FpC_pnKVtableStub__; -text: .text%__1cNFingerprinterIdo_float6M_v_; -text: .text%__1cHnmethodbJcontinuation_for_implicit_exception6MpC_1_; -text: .text%__1cLRShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cUjmpLoopEnd_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cUjmpLoopEnd_shortNodeMideal_Opcode6kM_i_; -text: .text%__1cKEntryPoint2t6MpC11111111_v_; -text: .text%jni_GetObjectClass: jni.o; -text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_; -text: .text%__1cRandI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cISubLNodeDsub6kMpknEType_3_3_; -text: .text%__1cJloadSNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRtestI_reg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cSstring_compareNodePoper_input_base6kM_I_; -text: .text%__1cNcmovI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMdecI_memNodeMideal_Opcode6kM_i_; -text: .text%__1cMrax_RegLOperEtype6kM_pknEType__; -text: .text%__1cIXorINodeGadd_id6kM_pknEType__; -text: .text%__1cNtestP_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPcmovI_reg_gNodeHtwo_adr6kM_I_; -text: .text%__1cKBinaryNodeGOpcode6kM_i_; -text: .text%__1cNxorI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cFStateO_sub_Op_Binary6MpknENode__v_; -text: .text%JVM_GetClassLoader; -text: .text%__1cMstoreSSPNodeMideal_Opcode6kM_i_; -text: .text%__1cNmulL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cINodeHashIround_up6FI_I_; -text: .text%__1cHCompileKinit_start6MpnJStartNode__v_; -text: .text%__1cOPhaseTransform2t6MpnFArena_nFPhaseLPhaseNumber__v_; -text: .text%__1cLPhaseValues2t6MpnFArena_I_v_; -text: .text%__1cRaddP_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cINodeHash2t6MpnFArena_I_v_; -text: .text%__1cRaddI_rReg_memNodeHtwo_adr6kM_I_; -text: .text%__1cOMacroAssemblerFalign6Mi_v_; -text: .text%__1cFVTuneNregister_stub6FpkcpC3_v_; -text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%lwp_cond_init: os_solaris.o; -text: .text%__1cSmembar_releaseNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmembar_releaseNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOPhaseIdealLoopVclone_up_backedge_goo6MpnENode_22_2_; -text: .text%__1cSInterpreterCodeletKinitialize6MpkcnJBytecodesECode__v_; -text: .text%__1cNxorI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNaddP_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerZcheck_and_handle_popframe6MpnMRegisterImpl__v_; -text: .text%__1cOloadConL32NodeErule6kM_I_; -text: .text%__1cFframeVnmethods_code_blob_do6M_v_; -text: .text%__1cHi2bNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKcmpOpUOperKless_equal6kM_i_; -text: .text%__1cFParseTprofile_switch_case6Mi_v_; -text: .text%__1cKNativeJumpbEcheck_verified_entry_alignment6FpC1_v_; -text: .text%__1cFParseSjump_switch_ranges6MpnENode_pnLSwitchRange_4i_v_; -text: .text%__1cFParseOmerge_new_path6Mi_v_; -text: .text%__1cUBytecode_tableswitchGlength6M_i_; -text: .text%__1cNandI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cOleaPIdxOffNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNCompileBrokerRassign_compile_id6FnMmethodHandle_i_I_; -text: .text%__1cIMulFNodeGOpcode6kM_i_; -text: .text%__1cNtestU_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; -text: .text%__1cITemplateIgenerate6MpnZInterpreterMacroAssembler__v_; -text: .text%__1cITemplateKinitialize6MinITosState_1pFi_vi_v_; -text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_; -text: .text%__1cNloadConL0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEcall6MrnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; -text: .text%__1cKC2CompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cQshrI_rReg_CLNodeMideal_Opcode6kM_i_; -text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_; -text: .text%__1cFciEnvbOcheck_for_system_dictionary_modification6MpnIciMethod__v_; -text: .text%__1cMelapsedTimerDadd6M0_v_; -text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTimer_pnLCompileTask__v_; -text: .text%__1cICodeHeapMinsert_after6MpnJFreeBlock_2_v_; -text: .text%__1cKloadUBNodeErule6kM_I_; -text: .text%__1cQsalL_rReg_CLNodeMideal_Opcode6kM_i_; -text: .text%__1cPstoreImmI16NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; -text: .text%__1cRmulL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVExceptionHandlerTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cFVTuneOcreate_nmethod6FpnHnmethod__v_; -text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cPcmovI_reg_lNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHnmFlagsFclear6M_v_; -text: .text%__1cHnmethod2n6FLi_pv_; -text: .text%__1cKTypeRawPtrFxdual6kM_pknEType__; -text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; -text: .text%__1cLOopRecorderHcopy_to6MpnICodeBlob__v_; -text: .text%__1cFParseQjump_if_fork_int6MpnENode_2nIBoolTestEmask__pnGIfNode__; -text: .text%__1cWandI_rReg_imm65535NodeHtwo_adr6kM_I_; -text: .text%__1cINodeHashUremove_useless_nodes6MrnJVectorSet__v_; -text: .text%__1cQUnique_Node_ListUremove_useless_nodes6MrnJVectorSet__v_; -text: .text%__1cKInlineTreeWbuild_inline_tree_root6F_p0_; -text: .text%__1cHCompileWprint_compile_messages6M_v_; -text: .text%__1cQsalI_rReg_CLNodeErule6kM_I_; -text: .text%__1cHCompileRbuild_start_state6MpnJStartNode_pknITypeFunc__pnIJVMState__; -text: .text%__1cHCompileVidentify_useful_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cIciMethodRbuild_method_data6M_v_; -text: .text%__1cHCompileIOptimize6M_v_; -text: .text%__1cHCompileUremove_useless_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cSPhaseRemoveUseless2t6MpnIPhaseGVN_pnQUnique_Node_List__v_; -text: .text%__1cHCompileLFinish_Warm6M_v_; -text: .text%__1cHCompileLInline_Warm6M_i_; -text: .text%__1cMPhaseIterGVN2t6MpnIPhaseGVN__v_; -text: .text%__1cIciMethodRbuild_method_data6MnMmethodHandle__v_; -text: .text%__1cSstring_compareNodeErule6kM_I_; -text: .text%__1cbAfinal_graph_reshaping_walk6FrnKNode_Stack_pnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cScompI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cJStartNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNTemplateTableKtransition6FnITosState_1_v_; -text: .text%__1cIPhaseCCPJtransform6MpnENode__2_; -text: .text%__1cHCompileNreturn_values6MpnIJVMState__v_; -text: .text%__1cMPhaseIterGVN2t6Mp0_v_; -text: .text%__1cIPhaseCCP2t6MpnMPhaseIterGVN__v_; -text: .text%__1cIPhaseCCPHanalyze6M_v_; -text: .text%__1cIPhaseCCPMdo_transform6M_v_; -text: .text%__1cOcompI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNsubL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKExceptionsG_throw6FpnGThread_pkcinGHandle__v_; -text: .text%__1cNandL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLklassItableUcompute_itable_index6FpnNmethodOopDesc__i_; -text: .text%__1cWpoll_return_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cWConstantPoolCacheEntrySset_interface_call6MnMmethodHandle_i_v_; -text: .text%__1cJloadFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_; -text: .text%__1cPsalL_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; -text: .text%__1cOClearArrayNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cHMatcherbDinterpreter_frame_pointer_reg6F_i_; -text: .text%__1cQorI_rReg_immNodeErule6kM_I_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_; -text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; -text: .text%__1cKcmpOpUOperHgreater6kM_i_; -text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cRmulI_rReg_immNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_epilog6MnITosState_i_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_prolog6MnITosState_i_v_; -text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__; -text: .text%__1cLBoxLockNodeDcmp6kMrknENode__I_; -text: .text%__1cMTailCallNodeGOpcode6kM_i_; -text: .text%__1cJChunkPoolMfree_all_but6ML_v_; -text: .text%__1cRsalL_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cNdecL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__; -text: .text%__1cZCallDynamicJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOemit_d64_reloc6FrnKCodeBuffer_lrknQRelocationHolder_i_v_; -text: .text%__1cRtestI_reg_immNodeErule6kM_I_; -text: .text%__1cIAddFNodeGOpcode6kM_i_; -text: .text%__1cSstring_compareNodeMideal_Opcode6kM_i_; -text: .text%__1cZCallDynamicJavaDirectNodeSalignment_required6kM_i_; -text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cQorI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUParallelScavengeHeapIcapacity6kM_L_; -text: .text%__1cJAssemblerEcmpq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cPDictionaryEntryVadd_protection_domain6MpnHoopDesc__v_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectMset_override6FpnHoopDesc_C_v_; -text: .text%__1cRCardTableModRefBSPclear_MemRegion6MnJMemRegion__v_; -text: .text%__1cOleaPIdxOffNodeLbottom_type6kM_pknEType__; -text: .text%__1cNdivL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cFParsebLincrement_and_test_invocation_counter6Mi_v_; -text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%JVM_IsInterrupted; -text: .text%__1cFParseRarray_store_check6M_v_; -text: .text%__1cNobjArrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cScompL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cTmembar_volatileNodeMideal_Opcode6kM_i_; -text: .text%__1cXSignatureHandlerLibraryKinitialize6F_v_; -text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_; -text: .text%__1cSInterpreterRuntimeTprepare_native_call6FpnKJavaThread_pnNmethodOopDesc__v_; -text: .text%__1cNGrowableArray4CL_Efind6kMrkL_i_; -text: .text%__1cSInterpreterRuntimeNquicken_io_cc6FpnKJavaThread__v_; -text: .text%__1cHOrINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cSobjArrayKlassKlassXallocate_objArray_klass6MinLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cNloadConI0NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cKPerfMemoryFalloc6FL_pc_; -text: .text%__1cIPerfData2T6M_v_; -text: .text%__1cIPerfDataMcreate_entry6MnJBasicType_LL_v_; -text: .text%__1cKPerfMemoryMmark_updated6F_v_; -text: .text%__1cPcmovI_reg_gNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEfrom6F_pnMRegisterImpl__; -text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_; -text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_; -text: .text%__1cLStrCompNodeKmatch_edge6kMI_I_; -text: .text%__1cOjmpLoopEndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_ReleaseStringUTFChars: jni.o; -text: .text%jni_GetStringUTFChars: jni.o; -text: .text%__1cFStateW_sub_Op_CountedLoopEnd6MpknENode__v_; -text: .text%__1cNFingerprinterIdo_short6M_v_; -text: .text%__1cJAssemblerEincq6MpnMRegisterImpl__v_; -text: .text%__1cFTypeDEmake6Fd_pk0_; -text: .text%__1cScompU_rReg_memNodeFreloc6kM_i_; -text: .text%__1cNtestL_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseLdo_newarray6MnJBasicType__v_; -text: .text%__1cWCallLeafNoFPDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cWCallLeafNoFPDirectNodeFreloc6kM_i_; -text: .text%__1cFStateU_sub_Op_CallLeafNoFP6MpknENode__v_; -text: .text%JVM_FindLibraryEntry; -text: .text%JVM_GetMethodIxExceptionTableEntry; -text: .text%__1cNObjectMonitorHRecycle6M_v_; -text: .text%__1cISubLNodeGadd_id6kM_pknEType__; -text: .text%__1cNmodI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRxorI_rReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMachNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRmulI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMachOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cIMachOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_; -text: .text%__1cNandI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cIDivINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNnegI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cFStateS_sub_Op_ClearArray6MpknENode__v_; -text: .text%__1cRaddL_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIXorINodeJideal_reg6kM_I_; -text: .text%__1cMrep_stosNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMrep_stosNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cFStateO_sub_Op_StoreL6MpknENode__v_; -text: .text%__1cQjava_lang_StringFvalue6FpnHoopDesc__pnQtypeArrayOopDesc__; -text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__; -text: .text%__1cIMinINodeGadd_id6kM_pknEType__; -text: .text%__1cQjava_lang_StringGoffset6FpnHoopDesc__i_; -text: .text%__1cKstoreLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGThreadLnmethods_do6M_v_; -text: .text%__1cKstoreLNodeFreloc6kM_i_; -text: .text%__1cMstoreSSPNodeLbottom_type6kM_pknEType__; -text: .text%__1cRsubI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cTconvF2D_reg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_; -text: .text%__1cScompU_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNFingerprinterHdo_char6M_v_; -text: .text%__1cMloadConDNodeLbottom_type6kM_pknEType__; -text: .text%__1cNGrowableArray4CpnHoopDesc__Uclear_and_deallocate6M_v_; -text: .text%__1cLMachUEPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZget_mirror_from_signature6FnMmethodHandle_pnPSignatureStream_pnGThread__pnHoopDesc__; -text: .text%__1cNGrowableArray4CpnJNode_List__Egrow6Mi_v_; -text: .text%__1cMciArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cKarrayKlassKjava_super6kM_pnMklassOopDesc__; -text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; -text: .text%__1cJCodeCacheLgc_prologue6F_v_; -text: .text%__1cJCodeCacheLgc_epilogue6F_v_; -text: .text%__1cVLoaderConstraintTableYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_; -text: .text%__1cJMarkSweepMadjust_marks6F_v_; -text: .text%__1cJMarkSweepNrestore_marks6F_v_; -text: .text%__1cHThreadsLgc_epilogue6F_v_; -text: .text%__1cHThreadsLgc_prologue6F_v_; -text: .text%__1cQSystemDictionaryPplaceholders_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryYalways_strong_classes_do6FpnKOopClosure__v_; -text: .text%__1cUPSAdaptiveSizePolicyWmajor_collection_begin6M_v_; -text: .text%__1cUPSAdaptiveSizePolicyUmajor_collection_end6MLnHGCCauseFCause__v_; -text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_; -text: .text%__1cNGrowableArray4CpnFKlass__Uclear_and_deallocate6M_v_; -text: .text%__1cKPSYoungGenHcompact6M_v_; -text: .text%__1cKPSYoungGenPadjust_pointers6M_v_; -text: .text%__1cKPSYoungGenKprecompact6M_v_; -text: .text%__1cLPSMarkSweepPallocate_stacks6F_v_; -text: .text%__1cLPSMarkSweepRdeallocate_stacks6F_v_; -text: .text%__1cLPSMarkSweepRmark_sweep_phase26F_v_; -text: .text%__1cLPSMarkSweepRmark_sweep_phase36F_v_; -text: .text%__1cLPSMarkSweepRmark_sweep_phase46F_v_; -text: .text%__1cLPSMarkSweepbAreset_millis_since_last_gc6F_v_; -text: .text%__1cUPSMarkSweepDecoratorbHset_destination_decorator_tenured6F_v_; -text: .text%__1cUPSMarkSweepDecoratorbIset_destination_decorator_perm_gen6F_v_; -text: .text%__1cNExceptionBlobHoops_do6MpnKOopClosure__v_; -text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cQUncommonTrapBlobHoops_do6MpnKOopClosure__v_; -text: .text%__1cSDeoptimizationBlobHoops_do6MpnKOopClosure__v_; -text: .text%__1cIPSOldGenKprecompact6M_v_; -text: .text%__1cVLoaderConstraintTableYpurge_loader_constraints6MpnRBoolObjectClosure__v_; -text: .text%__1cJPSPermGenQcompute_new_size6ML_v_; -text: .text%__1cJPSPermGenKprecompact6M_v_; -text: .text%__1cJCodeCacheHoops_do6FpnKOopClosure__v_; -text: .text%__1cIDivINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIciSymbolHas_utf86M_pkc_; -text: .text%__1cQorI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cKJavaThreadLnmethods_do6M_v_; -text: .text%__1cCosTnative_java_library6F_pv_; -text: .text%__1cSTailCalljmpIndNodePoper_input_base6kM_I_; -text: .text%__1cOstackSlotPOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cOstackSlotPOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cNandI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cPstoreImmI16NodeFreloc6kM_i_; -text: .text%__1cPstoreImmI16NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; -text: .text%jni_ReleaseStringCritical: jni.o; -text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; -text: .text%jni_GetStringCritical: jni.o; -text: .text%__1cIPSOldGenOgen_size_limit6M_L_; -text: .text%__1cUPSAdaptiveSizePolicybQpromo_increment_with_supplement_aligned_up6ML_L_; -text: .text%__1cUParallelScavengeHeapOresize_old_gen6ML_v_; -text: .text%__1cUPSAdaptiveSizePolicyPpromo_increment6MLI_L_; -text: .text%__1cWandI_rReg_imm65535NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIPSOldGenGresize6ML_v_; -text: .text%__1cKConv2BNodeGOpcode6kM_i_; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_; -text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__; -text: .text%__1cNstoreImmINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cLConvI2FNodeGOpcode6kM_i_; -text: .text%__1cNcmovI_regNodeHtwo_adr6kM_I_; -text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__; -text: .text%__1cIGraphKitbKcombine_and_pop_all_exception_states6M_pnNSafePointNode__; -text: .text%__1cLRethrowNode2t6MpnENode_22222_v_; -text: .text%__1cHCompileSrethrow_exceptions6MpnIJVMState__v_; -text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; -text: .text%__1cKReflectionTget_exception_types6FnMmethodHandle_pnGThread__nOobjArrayHandle__; -text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_i_v_; -text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; -text: .text%__1cFStateP_sub_Op_Rethrow6MpknENode__v_; -text: .text%__1cQComputeCallStackIdo_array6Mii_v_; -text: .text%__1cNdecL_rRegNodeErule6kM_I_; -text: .text%__1cLRethrowNodeJideal_reg6kM_I_; -text: .text%__1cNstoreImmINodeFreloc6kM_i_; -text: .text%__1cURethrowExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMNativeLookupNpure_jni_name6FnMmethodHandle__pc_; -text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_; -text: .text%__1cURethrowExceptionNodeFreloc6kM_i_; -text: .text%__1cTcompareAndSwapLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cTcompareAndSwapLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateX_sub_Op_CompareAndSwapL6MpknENode__v_; -text: .text%__1cNSCMemProjNodeJideal_reg6kM_I_; -text: .text%__1cTcompareAndSwapLNodeFreloc6kM_i_; -text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_; -text: .text%__1cOcompP_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPsarI_rReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; -text: .text%__1cMmulD_immNodeMideal_Opcode6kM_i_; -text: .text%__1cPmethodDataKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cPcmpD_cc_regNodeMideal_Opcode6kM_i_; -text: .text%__1cJLoadPNodeMstore_Opcode6kM_i_; -text: .text%__1cJCMoveNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKciTypeFlowLStateVectorEtrap6MpnQciBytecodeStream_pnHciKlass_i_v_; -text: .text%__1cIDivLNodeLbottom_type6kM_pknEType__; -text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_; -text: .text%__1cOGenerateOopMapKinterp_all6M_v_; -text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; -text: .text%__1cOGenerateOopMapRinit_basic_blocks6M_v_; -text: .text%__1cOGenerateOopMapYsetup_method_entry_state6M_v_; -text: .text%__1cFframeZinterpreter_frame_set_mdx6Ml_v_; -text: .text%__1cOGenerateOopMapbAmake_context_uninitialized6M_v_; -text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_; -text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cOGenerateOopMapKinit_state6M_v_; -text: .text%__1cOGenerateOopMapNinitialize_bb6M_v_; -text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; -text: .text%__1cQciBytecodeStreamFtable6MnJBytecodesECode__2_; -text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; -text: .text%__1cOGenerateOopMapbImark_bbheaders_and_count_gc_points6M_v_; -text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; -text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; -text: .text%__1cRxorI_rReg_memNodeHtwo_adr6kM_I_; -text: .text%__1cFStateM_sub_Op_XorI6MpknENode__v_; -text: .text%__1cISubLNodeJideal_reg6kM_I_; -text: .text%__1cLStrCompNodeLbottom_type6kM_pknEType__; -text: .text%__1cQOopMapCacheEntryFflush6M_v_; -text: .text%__1cQOopMapCacheEntryRallocate_bit_mask6M_v_; -text: .text%__1cQOopMapCacheEntryTdeallocate_bit_mask6M_v_; -text: .text%__1cQOopMapCacheEntryEfill6MnMmethodHandle_i_v_; -text: .text%__1cRsalL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopOadd_constraint6MiipnENode_22p23_v_; -text: .text%jni_IsAssignableFrom: jni.o; -text: .text%__1cOstackSlotPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFParseWcheck_interpreter_type6MpnENode_pknEType_rpnNSafePointNode__2_; -text: .text%__1cNaddP_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; -text: .text%__1cOGenerateOopMapKpp_new_ref6MpnNCellTypeState_i_v_; -text: .text%__1cNcmovI_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cQOopMapCacheEntryIset_mask6MpnNCellTypeState_2i_v_; -text: .text%__1cOGenerateOopMapVresult_for_basicblock6Mi_v_; -text: .text%__1cTOopMapForCacheEntry2t6MnMmethodHandle_ipnQOopMapCacheEntry__v_; -text: .text%__1cPcmpD_cc_immNodeMideal_Opcode6kM_i_; -text: .text%__1cTOopMapForCacheEntryLcompute_map6MpnGThread__v_; -text: .text%__1cTconvF2D_reg_memNodePoper_input_base6kM_I_; -text: .text%__1cNdivL_rRegNodeErule6kM_I_; -text: .text%__1cRmulL_rReg_immNodeQuse_cisc_RegMask6M_v_; -text: .text%JVM_GetCallerClass; -text: .text%__1cQsalL_rReg_CLNodeErule6kM_I_; -text: .text%__1cJloadLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNloadConP0NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cXMachCallDynamicJavaNodePret_addr_offset6M_i_; -text: .text%__1cRxorI_rReg_immNodeErule6kM_I_; -text: .text%__1cZCallDynamicJavaDirectNodePcompute_padding6kMi_i_; -text: .text%__1cZCallDynamicJavaDirectNodeKmethod_set6Ml_v_; -text: .text%__1cPcmovI_reg_lNodeHtwo_adr6kM_I_; -text: .text%__1cLConvD2INodeGOpcode6kM_i_; -text: .text%__1cNcmovP_regNodeMideal_Opcode6kM_i_; -text: .text%__1cTconvI2F_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cKstorePNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQorI_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; -text: .text%__1cUjmpLoopEnd_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cFParseSjump_if_false_fork6MpnGIfNode_ii_v_; -text: .text%__1cJAssemblerEshll6MpnMRegisterImpl_i_v_; -text: .text%__1cUjmpLoopEnd_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPCountedLoopNodeGstride6kM_pnENode__; -text: .text%__1cHTypeAryFxdual6kM_pknEType__; -text: .text%__1cOMacroAssemblerKverify_oop6MpnMRegisterImpl_pkc_v_; -text: .text%__1cNnegI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLencode_copy6FrnKCodeBuffer_ii_v_; -text: .text%__1cPcmpD_cc_regNodeMcisc_operand6kM_i_; -text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_; -text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_; -text: .text%__1cPcmpD_cc_regNodeErule6kM_I_; -text: .text%__1cNtestU_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRandL_rReg_immNodeErule6kM_I_; -text: .text%__1cIMulINodeKmul_opcode6kM_i_; -text: .text%__1cIMulINodeKadd_opcode6kM_i_; -text: .text%__1cRxorI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTno_rax_rdx_RegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQsalI_rReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSobjArrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cLRShiftLNodeJideal_reg6kM_I_; -text: .text%jni_SetBooleanField: jni.o; -text: .text%__1cVLoaderConstraintTableWfind_constrained_klass6MnMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cIModLNodeLbottom_type6kM_pknEType__; -text: .text%__1cRxorI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGHandle2t6MpnGThread_pnHoopDesc__v_; -text: .text%__1cQorI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cODeoptimizationVtrap_state_has_reason6Fii_i_; -text: .text%__1cOloadConL32NodeMideal_Opcode6kM_i_; -text: .text%__1cNGrowableArray4Cpv_Egrow6Mi_v_; -text: .text%jni_GetFieldID: jni.o; -text: .text%__1cNGrowableArray4Cl_Egrow6Mi_v_; -text: .text%__1cLResourceObj2n6FLn0APallocation_type__pv_; -text: .text%__1cFframeZinterpreter_frame_set_mdp6MpC_v_; -text: .text%__1cFBlockNset_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; -text: .text%__1cIciObject2t6MpnHciKlass__v_; -text: .text%__1cScompL_rReg_immNodeErule6kM_I_; -text: .text%__1cQshrI_rReg_CLNodeErule6kM_I_; -text: .text%__1cNaddL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cFStateT_sub_Op_ThreadLocal6MpknENode__v_; -text: .text%__1cQSystemDictionaryTresolve_from_stream6FnMsymbolHandle_nGHandle_2pnPClassFileStream_pnGThread__pnMklassOopDesc__; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcinMsymbolHandle_4nGHandle_6_v_; -text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_; -text: .text%__1cMmulF_immNodeMideal_Opcode6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerbAget_cache_and_index_at_bcp6MpnMRegisterImpl_2i_v_; -text: .text%__1cRandL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMloadConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUandI_rReg_imm255NodeErule6kM_I_; -text: .text%__1cRmulL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadConL0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMethodLivenessKBasicBlockFsplit6Mi_p1_; -text: .text%__1cFStateP_sub_Op_RShiftL6MpknENode__v_; -text: .text%__1cPClassFileParserbJparse_classfile_signature_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNaddP_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseHdo_irem6M_v_; -text: .text%__1cRsarL_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_2_v_; -text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cZInterpreterMacroAssemblerYtest_method_data_pointer6MpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cRtestI_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHMatcherbAinterpreter_method_oop_reg6F_i_; -text: .text%__1cIciMethodRinterpreter_entry6M_pC_; -text: .text%__1cSTailCalljmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_SetByteArrayRegion: jni.o; -text: .text%__1cIMulINodeJideal_reg6kM_I_; -text: .text%__1cKCMovePNodeGOpcode6kM_i_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF_vc_v_; -text: .text%__1cGciType2t6MpnHciKlass__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_object6M_v_; -text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; -text: .text%__1cFParseTjump_if_always_fork6Mii_v_; -text: .text%__1cKloadUBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUciInstanceKlassKlassEmake6F_p0_; -text: .text%__1cJAssemblerDhlt6M_v_; -text: .text%__1cOMacroAssemblerEstop6Mpkc_v_; -text: .text%__1cQComputeCallStackIdo_float6M_v_; -text: .text%__1cKciTypeFlowLStateVectorLdo_newarray6MpnQciBytecodeStream__v_; -text: .text%__1cJloadFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcmovI_reg_lNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIciSymbolHbyte_at6Mi_i_; -text: .text%__1cNFingerprinterHdo_byte6M_v_; -text: .text%__1cENode2t6Mp0111111_v_; -text: .text%__1cIMaxINodeGadd_id6kM_pknEType__; -text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; -text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_; -text: .text%__1cMmulD_immNodeErule6kM_I_; -text: .text%__1cMaddF_regNodeMideal_Opcode6kM_i_; -text: .text%__1cbDjava_lang_reflect_ConstructorIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDesc__; -text: .text%__1cbDjava_lang_reflect_ConstructorPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorNset_modifiers6FpnHoopDesc_i_v_; -text: .text%JVM_DefineClassWithSource; -text: .text%__1cbDjava_lang_reflect_ConstructorZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cPciInstanceKlassNloader_handle6M_pnI_jobject__; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; -text: .text%__1cbDjava_lang_reflect_ConstructorJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorGcreate6FpnGThread__nGHandle__; -text: .text%__1cKstoreFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKstoreBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRxorI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cJAssemblerExorl6MpnMRegisterImpl_2_v_; -text: .text%__1cINegDNodeGOpcode6kM_i_; -text: .text%__1cNdecL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPjava_lang_ClassQprimitive_mirror6FnJBasicType__pnHoopDesc__; -text: .text%__1cRsarI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_; -text: .text%__1cMloadConDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMrsi_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cRindIndexScaleOperNconstant_disp6kM_i_; -text: .text%jni_NewStringUTF: jni.o; -text: .text%__1cTAbstractInterpreterSBasicType_as_index6FnJBasicType__i_; -text: .text%__1cNtestI_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerGpush_l6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerFpop_i6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerIpush_ptr6MpnMRegisterImpl__v_; -text: .text%__1cOleaPIdxOffNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_i_v_; -text: .text%__1cNmulI_rRegNodeErule6kM_I_; -text: .text%__1cNGrowableArray4Ci_Uclear_and_deallocate6M_v_; -text: .text%__1cJloadDNodeMideal_Opcode6kM_i_; -text: .text%__1cENodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIDivLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIModINodeJideal_reg6kM_I_; -text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; -text: .text%__1cPshrL_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%JVM_GetClassCPTypes; -text: .text%__1cQComputeCallStackHdo_byte6M_v_; -text: .text%JVM_GetClassCPEntriesCount; -text: .text%JVM_GetClassFieldsCount; -text: .text%JVM_GetClassMethodsCount; -text: .text%__1cINodeHashEgrow6M_v_; -text: .text%__1cJloadBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKmul_hiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEnegq6MpnMRegisterImpl__v_; -text: .text%__1cNmodL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVCallRuntimeDirectNodePoper_input_base6kM_I_; -text: .text%__1cSstring_compareNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNsubL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOjmpLoopEndNodeGnegate6M_v_; -text: .text%__1cQorI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVCallRuntimeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPsalL_rReg_1NodeErule6kM_I_; -text: .text%__1cPcmpD_cc_immNodeErule6kM_I_; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_2_v_; -text: .text%__1cHCompileQgrow_alias_types6M_v_; -text: .text%__1cUandI_rReg_imm255NodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_CallIntMethod: jni.o; -text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cPno_rax_RegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMrdx_RegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNmulI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cNxorI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cTconvF2D_reg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJLoadINodeMstore_Opcode6kM_i_; -text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cbFunnecessary_membar_volatileNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cENodeEgetd6kM_d_; -text: .text%__1cICmpFNodeGOpcode6kM_i_; -text: .text%__1cNGrowableArray4CpnOMethodLivenessKBasicBlock__Egrow6Mi_v_; -text: .text%__1cKstoreFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%JVM_SetClassSigners; -text: .text%__1cNdivL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cScompI_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZCallDynamicJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOstackSlotPOperFscale6kM_i_; -text: .text%__1cNmulI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cOstackSlotPOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cPsarL_rReg_2NodeErule6kM_I_; -text: .text%__1cOPhaseIdealLoopUpeeled_dom_test_elim6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%jni_NewByteArray: jni.o; -text: .text%__1cYinternal_word_RelocationFvalue6M_pC_; -text: .text%__1cFStateM_sub_Op_SubL6MpknENode__v_; -text: .text%__1cJAssemblerSemit_arith_operand6MipnMRegisterImpl_nHAddress_i_v_; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cMaddF_regNodeMcisc_operand6kM_i_; -text: .text%__1cRsubI_rReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOstackSlotPOperEtype6kM_pknEType__; -text: .text%__1cTconvD2I_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cMstoreSSPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreBNodeFreloc6kM_i_; -text: .text%__1cQshrI_rReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_SystemTout_offset_in_bytes6F_i_; -text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; -text: .text%__1cQjava_lang_SystemSin_offset_in_bytes6F_i_; -text: .text%__1cRandL_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_2_v_; -text: .text%__1cIAddFNodeLbottom_type6kM_pknEType__; -text: .text%__1cPciObjectFactoryPinsert_non_perm6Mrpn0ANNonPermObject_pnHoopDesc_pnIciObject__v_; -text: .text%__1cKmul_hiNodeErule6kM_I_; -text: .text%__1cFJNIidEfind6Mi_p0_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIgenerate6ML_v_; -text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; -text: .text%__1cILogDNodeGOpcode6kM_i_; -text: .text%__1cXSignatureHandlerLibraryLset_handler6FpnKCodeBuffer__pC_; -text: .text%JVM_IsPrimitiveClass; -text: .text%__1cIDivDNodeGOpcode6kM_i_; -text: .text%__1cMnegD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cPciObjArrayKlassJmake_impl6FpnHciKlass__p0_; -text: .text%__1cJAssemblerEcmpl6MnHAddress_i_v_; -text: .text%__1cHi2bNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLimmI_24OperJnum_edges6kM_I_; -text: .text%__1cRxorI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPsalI_rReg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIModLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cXPipeline_Use_Cycle_Mask2t6MI_v_; -text: .text%__1cKCompiledICMset_to_clean6M_v_; -text: .text%__1cIciMethodOresolve_invoke6MpnHciKlass_2_p0_; -text: .text%__1cQChunkPoolCleanerEtask6M_v_; -text: .text%__1cICmpDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPsalL_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_MulI6MpknENode__v_; -text: .text%__1cZCallDynamicJavaDirectNodeFreloc6kM_i_; -text: .text%__1cFStateX_sub_Op_CallDynamicJava6MpknENode__v_; -text: .text%jni_FindClass: jni.o; -text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cIMinINodeJideal_reg6kM_I_; -text: .text%__1cJCMoveNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cTconvI2F_reg_regNodeErule6kM_I_; -text: .text%__1cNcmovP_regNodeErule6kM_I_; -text: .text%__1cWPredictedCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%JVM_MonitorWait; -text: .text%__1cUVirtualCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cUPSMarkSweepDecoratorbDadvance_destination_decorator6F_v_; -text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_; -text: .text%JVM_GetClassDeclaredConstructors; -text: .text%__1cJLoadFNodeJideal_reg6kM_I_; -text: .text%__1cJAssemblerEaddq6MpnMRegisterImpl_2_v_; -text: .text%__1cTconvF2D_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cMstoreSSPNodeErule6kM_I_; -text: .text%__1cOloadConL32NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKcmpOpUOperFequal6kM_i_; -text: .text%__1cHRegMask2t6M_v_; -text: .text%__1cIGraphKitPdstore_rounding6MpnENode__2_; -text: .text%__1cNGrowableArray4Ci_2t6MpnFArena_iirki_v_; -text: .text%__1cNloadConL0NodeHsize_of6kM_I_; -text: .text%__1cQset_lwp_priority6Fiii_i_; -text: .text%__1cJCmpD3NodeGOpcode6kM_i_; -text: .text%__1cKloadUBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvL2DNodeGOpcode6kM_i_; -text: .text%__1cRmulI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJAssemblerFcmovq6Mn0AJCondition_pnMRegisterImpl_3_v_; -text: .text%__1cNminI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cMmulD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cFStateM_sub_Op_MinI6MpknENode__v_; -text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; -text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__; -text: .text%__1cScompL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGICStubIfinalize6M_v_; -text: .text%__1cNCallGeneratorRfor_uncommon_trap6FpnIciMethod_nODeoptimizationLDeoptReason_n0CLDeoptAction__p0_; -text: .text%__1cUandI_rReg_imm255NodeHtwo_adr6kM_I_; -text: .text%__1cJStubQdDueueMremove_first6M_v_; -text: .text%__1cOPhaseIdealLoopOdo_range_check6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cPICStubInterfaceIfinalize6MpnEStub__v_; -text: .text%__1cZUncommonTrapCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cPICStubInterfaceEsize6kMpnEStub__i_; -text: .text%__1cJAssemblerEcmpq6MpnMRegisterImpl_2_v_; -text: .text%__1cNGrowableArray4CpnIciObject__Egrow6Mi_v_; -text: .text%__1cFStateM_sub_Op_ModI6MpknENode__v_; -text: .text%__1cNObjectMonitor2t6M_v_; -text: .text%__1cNmodI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cFParseNdo_instanceof6M_v_; -text: .text%__1cPcmpD_cc_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cIGraphKitOgen_instanceof6MpnENode_2_2_; -text: .text%__1cHciKlassOsuper_of_depth6MI_p0_; -text: .text%__1cJLoadDNodeGOpcode6kM_i_; -text: .text%__1cMdecI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRaddI_rReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cXNativeSignatureIteratorJdo_object6Mii_v_; -text: .text%__1cQsalL_rReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNandI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cbFunnecessary_membar_volatileNodeLbottom_type6kM_pknEType__; -text: .text%__1cYjava_lang_reflect_MethodZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cJloadDNodePoper_input_base6kM_I_; -text: .text%__1cENodeEgetf6kM_f_; -text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodPset_return_type6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__; -text: .text%__1cYjava_lang_reflect_MethodPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cVCallRuntimeDirectNodeKmethod_set6Ml_v_; -text: .text%__1cKstoreFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRaddI_mem_rRegNodePoper_input_base6kM_I_; -text: .text%__1cMmulF_immNodeErule6kM_I_; -text: .text%__1cCosbBthread_local_storage_at_put6Fipv_v_; -text: .text%__1cOjmpLoopEndNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cNinstanceKlassSregister_finalizer6FpnPinstanceOopDesc_pnGThread__2_; -text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; -text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FLi_pnGThread__; -text: .text%__1cMrax_RegIOperEtype6kM_pknEType__; -text: .text%__1cOjmpLoopEndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateW_sub_Op_MemBarVolatile6MpknENode__v_; -text: .text%jni_GetMethodID: jni.o; -text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_; -text: .text%get_thread; -text: .text%__1cMincI_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; -text: .text%__1cCosHSolarisKmmap_chunk6FpcLii_2_; -text: .text%__1cbFloadConL_0x6666666666666667NodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_MonitorNotifyAll; -text: .text%__1cOloadConL32NodeLbottom_type6kM_pknEType__; -text: .text%__1cRxorI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cMmulD_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNcmovP_regNodeLbottom_type6kM_pknEType__; -text: .text%__1cJScopeDescTdecode_scope_values6Mi_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cLconvI2BNodeMideal_Opcode6kM_i_; -text: .text%__1cIDivLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQsalI_rReg_CLNodeHtwo_adr6kM_I_; -text: .text%__1cPsarL_rReg_2NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVLoaderConstraintTableYextend_loader_constraint6MpnVLoaderConstraintEntry_nGHandle_pnMklassOopDesc__v_; -text: .text%__1cIimmIOperJnum_edges6kM_I_; -text: .text%__1cRtestI_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRandL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNGrowableArray4CpnKciTypeFlowFBlock__Gremove6Mrk2_v_; -text: .text%__1cVLoaderConstraintTablebHensure_loader_constraint_capacity6MpnVLoaderConstraintEntry_i_v_; -text: .text%__1cMnegD_regNodeHtwo_adr6kM_I_; -text: .text%__1cIBytecodeIset_code6MnJBytecodesECode__v_; -text: .text%__1cMdivD_immNodeMideal_Opcode6kM_i_; -text: .text%__1cTconvI2F_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsarL_rReg_63NodeErule6kM_I_; -text: .text%__1cRsubL_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cMVirtualSpaceQuncommitted_size6kM_L_; -text: .text%__1cRsubL_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cNstoreImmPNodeMideal_Opcode6kM_i_; -text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_; -text: .text%__1cLOopMapCache2t6M_v_; -text: .text%__1cQComputeCallStackHdo_char6M_v_; -text: .text%__1cZInterpreterMacroAssemblerEpush6MnITosState__v_; -text: .text%__1cSvframeArrayElementDbci6kM_i_; -text: .text%__1cMaddF_regNodeErule6kM_I_; -text: .text%__1cNdecL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cMdecI_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFStateN_sub_Op_LoadF6MpknENode__v_; -text: .text%__1cIMulDNodeLbottom_type6kM_pknEType__; -text: .text%__1cNaddI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJAssemblerEdecl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerGbswapl6MpnMRegisterImpl__v_; -text: .text%__1cRInlineCacheBufferLnew_ic_stub6F_pnGICStub__; -text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cIAddDNodeGOpcode6kM_i_; -text: .text%__1cMincI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIpass_int6M_v_; -text: .text%__1cGICStubIset_stub6MpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_; -text: .text%__1cTconvD2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerHpop_ptr6MpnMRegisterImpl__v_; -text: .text%__1cMelapsedTimer2t6M_v_; -text: .text%__1cMdivD_immNodeErule6kM_I_; -text: .text%__1cTconvI2D_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cFTypeFFxmeet6kMpknEType__3_; -text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl_i_v_; -text: .text%__1cGICStubLdestination6kM_pC_; -text: .text%__1cRsalL_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_; -text: .text%__1cPcmpD_cc_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMaddD_immNodeMideal_Opcode6kM_i_; -text: .text%__1cNdivI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cNobjArrayKlassKinitialize6MpnGThread__v_; -text: .text%jni_NewObjectArray: jni.o; -text: .text%__1cIMulFNodeLbottom_type6kM_pknEType__; -text: .text%__1cTmembar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovP_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUandI_rReg_imm255NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNdivL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cKcastPPNodePoper_input_base6kM_I_; -text: .text%__1cFTypeDFxmeet6kMpknEType__3_; -text: .text%__1cKloadUBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJloadDNodeErule6kM_I_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cPsarL_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%__1cKCompiledICMstub_address6kM_pC_; -text: .text%__1cMmulD_regNodeMcisc_operand6kM_i_; -text: .text%__1cMmulF_memNodePoper_input_base6kM_I_; -text: .text%lwp_cond_destroy: os_solaris.o; -text: .text%lwp_mutex_destroy: os_solaris.o; -text: .text%__1cISubFNodeGOpcode6kM_i_; -text: .text%__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; -text: .text%__1cOJavaAssertionsNmatch_package6Fpkc_pn0AKOptionList__; -text: .text%__1cOJavaAssertionsLmatch_class6Fpkc_pn0AKOptionList__; -text: .text%JVM_DesiredAssertionStatus; -text: .text%__1cHTypePtrFxdual6kM_pknEType__; -text: .text%__1cQjava_lang_ThreadLthreadGroup6FpnHoopDesc__2_; -text: .text%__1cLConvI2FNodeLbottom_type6kM_pknEType__; -text: .text%__1cXjava_lang_reflect_FieldNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cMaddF_immNodeMideal_Opcode6kM_i_; -text: .text%__1cQshrL_rReg_CLNodeMideal_Opcode6kM_i_; -text: .text%__1cKReflectionInew_type6FnMsymbolHandle_nLKlassHandle_pnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_name6FpnHoopDesc_2_v_; -text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cMloadConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNnegI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cXjava_lang_reflect_FieldIset_type6FpnHoopDesc_2_v_; -text: .text%__1cKJavaThreadbScheck_safepoint_and_suspend_for_native_trans6Fp0_v_; -text: .text%__1cXjava_lang_reflect_FieldPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldGcreate6FpnGThread__nGHandle__; -text: .text%__1cISubDNodeGOpcode6kM_i_; -text: .text%__1cJloadFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cRaddI_mem_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cMmulF_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; -text: .text%JVM_MonitorNotify; -text: .text%__1cQsarL_rReg_63NodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_GetStaticFieldID: jni.o; -text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; -text: .text%__1cKReflectionbFbasic_type_mirror_to_basic_type6FpnHoopDesc_pnGThread__nJBasicType__; -text: .text%__1cPcmpF_cc_regNodeMideal_Opcode6kM_i_; -text: .text%__1cNinstanceKlassKjni_id_for6Mi_pnFJNIid__; -text: .text%__1cJLoadSNodeMstore_Opcode6kM_i_; -text: .text%__1cPcmpD_cc_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cMlogD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cbFunnecessary_membar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvL2FNodeGOpcode6kM_i_; -text: .text%__1cFKlassNexternal_name6kM_pkc_; -text: .text%__1cMPipeline_Use2t6MIIIpnUPipeline_Use_Element__v_; -text: .text%__1cKstorePNodeErule6kM_I_; -text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; -text: .text%__1cbFunnecessary_membar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRComputeEntryStackGdo_int6M_v_; -text: .text%__1cMstoreSSPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSMachBreakpointNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRsubL_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNtestU_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPsalL_rReg_1NodeHtwo_adr6kM_I_; -text: .text%__1cNmodL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvF2D_reg_regNodeErule6kM_I_; -text: .text%__1cQsalI_rReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQorI_rReg_memNodeErule6kM_I_; -text: .text%__1cLConvF2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMaddF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRxorI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cKCMoveLNodeGOpcode6kM_i_; -text: .text%__1cICodeHeapTmark_segmap_as_free6MLL_v_; -text: .text%__1cRaddL_rReg_memNodePoper_input_base6kM_I_; -text: .text%JVM_IsArrayClass; -text: .text%__1cJAssemblerEsbbq6MnHAddress_i_v_; -text: .text%__1cZInterpreterMacroAssemblerFpop_l6MpnMRegisterImpl__v_; -text: .text%__1cLConvF2DNodeLbottom_type6kM_pknEType__; -text: .text%__1cJAssemblerEaddq6MnHAddress_i_v_; -text: .text%JVM_GetClassName; -text: .text%__1cTconvF2D_reg_regNodeMcisc_operand6kM_i_; -text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cNmulI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQorI_rReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; -text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_; -text: .text%__1cRsubL_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRaddL_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cPshrL_rReg_1NodeErule6kM_I_; -text: .text%__1cQshrI_rReg_CLNodeHtwo_adr6kM_I_; -text: .text%__1cFStateO_sub_Op_CMoveI6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_RegD6MpknENode__v_; -text: .text%__1cQorI_rReg_memNodeHtwo_adr6kM_I_; -text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_; -text: .text%__1cIMaxINodeJideal_reg6kM_I_; -text: .text%__1cFJNIid2t6MpnMklassOopDesc_ip0_v_; -text: .text%__1cNinstanceKlassPjni_id_for_impl6FnTinstanceKlassHandle_i_pnFJNIid__; -text: .text%__1cJAssemblerEaddq6MpnMRegisterImpl_nHAddress__v_; -text: .text%JVM_Open; -text: .text%__1cHRegMask2t6Miiiiiii_v_; -text: .text%__1cNsubI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRmulL_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cPsarL_rReg_2NodeHtwo_adr6kM_I_; -text: .text%__1cQConstantIntValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cRxorI_rReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cFStateM_sub_Op_ConD6MpknENode__v_; -text: .text%__1cLConvI2DNodeGOpcode6kM_i_; -text: .text%__1cVLoaderConstraintTableJnew_entry6MIpnNsymbolOopDesc_pnMklassOopDesc_ii_pnVLoaderConstraintEntry__; -text: .text%__1cNaddP_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cPcmpF_cc_regNodeMcisc_operand6kM_i_; -text: .text%__1cJAssemblerFcmovl6Mn0AJCondition_pnMRegisterImpl_3_v_; -text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; -text: .text%__1cMmulF_memNodeMideal_Opcode6kM_i_; -text: .text%__1cKConv2BNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFStateM_sub_Op_RegF6MpknENode__v_; -text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; -text: .text%__1cNcmovP_regNodeHtwo_adr6kM_I_; -text: .text%jni_GetStaticObjectField: jni.o; -text: .text%__1cIGraphKitSprecision_rounding6MpnENode__2_; -text: .text%__1cScompL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSTailCalljmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTconvD2F_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cTconvF2D_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMmulD_immNodeHtwo_adr6kM_I_; -text: .text%__1cOMacroAssemblerFleave6M_v_; -text: .text%__1cMloadConDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMTailCallNode2t6MpnENode_222222_v_; -text: .text%__1cXPartialSubtypeCheckNodeGOpcode6kM_i_; -text: .text%__1cSTailCalljmpIndNodeFreloc6kM_i_; -text: .text%__1cOloadConL32NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegD_regNodeErule6kM_I_; -text: .text%__1cLvframeArrayRregister_location6kMi_pC_; -text: .text%__1cQorI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateQ_sub_Op_TailCall6MpknENode__v_; -text: .text%__1cIOSThreadNpd_initialize6M_v_; -text: .text%__1cCosScurrent_process_id6F_i_; -text: .text%__1cMaddD_immNodeErule6kM_I_; -text: .text%__1cPshrL_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmaxI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIMaxINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cCosRinitialize_thread6F_v_; -text: .text%__1cCosHSolarisKvm_signals6F_pnIsigset_t__; -text: .text%__1cCosHSolarisRunblocked_signals6F_pnIsigset_t__; -text: .text%__1cMaddF_immNodeErule6kM_I_; -text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_; -text: .text%__1cFStateM_sub_Op_MaxI6MpknENode__v_; -text: .text%__1cGThread2t6M_v_; -text: .text%__1cGThreadbFinitialize_thread_local_storage6M_v_; -text: .text%__1cGThreadbArecord_stack_base_and_size6M_v_; -text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; -text: .text%__1cIOSThread2t6MpFpv_i1_v_; -text: .text%jni_CallStaticVoidMethod: jni.o; -text: .text%__1cCosScurrent_stack_size6F_L_; -text: .text%__1cCosScurrent_stack_base6F_pC_; -text: .text%__1cJloadFNodeFreloc6kM_i_; -text: .text%__1cCosMstart_thread6FpnGThread__v_; -text: .text%__1cKstoreFNodeFreloc6kM_i_; -text: .text%__1cKstoreLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_; -text: .text%__1cNcmovL_memNodeErule6kM_I_; -text: .text%__1cFStateO_sub_Op_StoreF6MpknENode__v_; -text: .text%__1cHnmethodbAmake_not_entrant_or_zombie6Mi_v_; -text: .text%__1cCosPpd_start_thread6FpnGThread__v_; -text: .text%__1cNcmovL_regNodeMcisc_operand6kM_i_; -text: .text%__1cOGenerateOopMapMdo_checkcast6M_v_; -text: .text%JVM_SetThreadPriority; -text: .text%__1cLOptoRuntimeMrethrow_Type6F_pknITypeFunc__; -text: .text%JVM_GetStackAccessControlContext; -text: .text%JVM_IsThreadAlive; -text: .text%__1cTconvL2D_reg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cSstring_compareNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNdivI_rRegNodeErule6kM_I_; -text: .text%__1cNdecL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNGrowableArray4CpknEType__2t6MpnFArena_iirk2_v_; -text: .text%__1cFParseVcatch_call_exceptions6MrnYciExceptionHandlerStream__v_; -text: .text%jni_CallObjectMethod: jni.o; -text: .text%__1cJAssemblerExorq6MpnMRegisterImpl_2_v_; -text: .text%__1cLOptoRuntimeYcurrent_time_millis_Type6F_pknITypeFunc__; -text: .text%__1cOcmovI_regUNodeMideal_Opcode6kM_i_; -text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; -text: .text%__1cMsubD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cPcmpF_cc_regNodeErule6kM_I_; -text: .text%__1cNmodI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTconvL2D_reg_memNodePoper_input_base6kM_I_; -text: .text%__1cLConvD2FNodeGOpcode6kM_i_; -text: .text%__1cWThreadLocalAllocBufferKinitialize6M_v_; -text: .text%__1cJloadDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEtemp6F_pnMRegisterImpl__; -text: .text%__1cMmulF_immNodeHtwo_adr6kM_I_; -text: .text%__1cQsarL_rReg_63NodeHtwo_adr6kM_I_; -text: .text%__1cMsubF_regNodeMideal_Opcode6kM_i_; -text: .text%__1cTconvI2L_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorJpass_long6M_v_; -text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_; -text: .text%__1cTconvF2I_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cRandI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cRandI_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%JVM_NativePath; -text: .text%__1cKJavaThreadKinitialize6M_v_; -text: .text%__1cOPhaseIdealLoopKdo_peeling6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cUThreadSafepointStateGcreate6FpnKJavaThread__v_; -text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cKJavaThreadYcreate_stack_guard_pages6M_v_; -text: .text%__1cUThreadSafepointState2t6MpnKJavaThread__v_; -text: .text%__1cMnegD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHnmethodTinc_decompile_count6M_v_; -text: .text%__1cIMinINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cMResourceMarkNreset_to_mark6M_v_; -text: .text%__1cQThreadStatistics2t6M_v_; -text: .text%__1cMmulD_regNodeErule6kM_I_; -text: .text%__1cMdivD_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKJavaThread2t6MpFp0pnGThread__vL_v_; -text: .text%__1cPcmpD_cc_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvI2D_reg_regNodeErule6kM_I_; -text: .text%__1cNcmovL_memNodePoper_input_base6kM_I_; -text: .text%__1cNdivL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcmpD_cc_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateT_sub_Op_CallRuntime6MpknENode__v_; -text: .text%__1cXJNI_ArgumentPusherVaArgJget_float6M_v_; -text: .text%__1cKcastPPNodeHtwo_adr6kM_I_; -text: .text%__1cKarrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cMsubD_regNodeMcisc_operand6kM_i_; -text: .text%__1cGThreadFstart6Fp0_v_; -text: .text%__1cVCallRuntimeDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsalL_rReg_CLNodeHtwo_adr6kM_I_; -text: .text%__1cVCallRuntimeDirectNodeFreloc6kM_i_; -text: .text%__1cIGraphKitIset_jvms6MpnIJVMState__v_; -text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%__1cOsalI_mem_1NodePoper_input_base6kM_I_; -text: .text%__1cMLinkResolverbEresolve_interface_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cMrdi_RegIOperEtype6kM_pknEType__; -text: .text%__1cVThreadStateTransitionKtransition6FpnKJavaThread_nPJavaThreadState_3_v_; -text: .text%__1cKJavaThreadRthread_main_inner6M_v_; -text: .text%__1cQorI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cPsalL_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMResourceMark2t6M_v_; -text: .text%__1cQshrI_rReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJScopeDescGlocals6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cJScopeDescVdecode_monitor_values6Mi_pnNGrowableArray4CpnMMonitorValue____; -text: .text%__1cOcompiledVFrameLexpressions6kM_pnUStackValueCollection__; -text: .text%__1cOcompiledVFrameImonitors6kM_pnNGrowableArray4CpnLMonitorInfo____; -text: .text%__1cOcompiledVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cSvframeArrayElementHfill_in6MpnOcompiledVFrame__v_; -text: .text%__1cOcompiledVFrameHraw_bci6kM_i_; -text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; -text: .text%__1cOMacroAssemblerKincrementl6MpnMRegisterImpl_i_v_; -text: .text%__1cFframebCinterpreter_frame_set_locals6Mpl_v_; -text: .text%__1cFframebHinterpreter_frame_set_monitor_end6MpnPBasicObjectLock__v_; -text: .text%__1cSPerfStringConstant2t6MnJCounterNS_pkc3_v_; -text: .text%__1cFframebCinterpreter_frame_set_method6MpnNmethodOopDesc__v_; -text: .text%__1cMmulF_regNodeMideal_Opcode6kM_i_; -text: .text%__1cFframebBinterpreter_frame_sender_sp6kM_pl_; -text: .text%__1cMaddF_regNodeHtwo_adr6kM_I_; -text: .text%__1cKCompiledICOset_cached_oop6MpnHoopDesc__v_; -text: .text%__1cKstoreINodeErule6kM_I_; -text: .text%__1cJScopeDescImonitors6M_pnNGrowableArray4CpnMMonitorValue____; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_i_v_; -text: .text%__1cOcompiledVFrameGlocals6kM_pnUStackValueCollection__; -text: .text%__1cJScopeDescLexpressions6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cXjava_lang_boxing_objectJget_value6FpnHoopDesc_pnGjvalue__nJBasicType__; -text: .text%__1cPcmovI_reg_gNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKReflectionTunbox_for_primitive6FpnHoopDesc_pnGjvalue_pnGThread__nJBasicType__; -text: .text%__1cCosMset_priority6FpnGThread_nOThreadPriority__nIOSReturn__; -text: .text%__1cIMulDNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cODeoptimizationVtrap_state_add_reason6Fii_i_; -text: .text%__1cDhpiFclose6Fi_i_; -text: .text%__1cJMemRegionFminus6kM0_0_; -text: .text%__1cMmulD_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_i_v_; -text: .text%__1cNcmovL_regNodeMideal_Opcode6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerWupdate_mdp_by_constant6MpnMRegisterImpl_i_v_; -text: .text%__1cOtailjmpIndNodeNis_block_proj6kM_pknENode__; -text: .text%__1cTconvI2F_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvL2F_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cGICStubKcached_oop6kM_pnHoopDesc__; -text: .text%__1cRInlineCacheBufferUic_buffer_cached_oop6FpC_pnHoopDesc__; -text: .text%JVM_Close; -text: .text%__1cRComputeEntryStackJdo_object6Mii_v_; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cGThreadMset_priority6Fp0nOThreadPriority__v_; -text: .text%jni_NewObjectV: jni.o; -text: .text%__1cKConv2BNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQshrL_rReg_CLNodeErule6kM_I_; -text: .text%__1cTconvF2D_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSafePointNodeQpeek_monitor_obj6kM_pnENode__; -text: .text%__1cOcmovI_regUNodeMcisc_operand6kM_i_; -text: .text%__1cNSafePointNodeQpeek_monitor_box6kM_pnENode__; -text: .text%__1cJLoadBNodeMstore_Opcode6kM_i_; -text: .text%__1cLConvF2INodeGOpcode6kM_i_; -text: .text%__1cPMultiBranchDataScompute_cell_count6FpnOBytecodeStream__i_; -text: .text%__1cFParsePdo_monitor_exit6M_v_; -text: .text%__1cMStubCodeMark2T6M_v_; -text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_; -text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; -text: .text%__1cRStubCodeGeneratorLstub_prolog6MpnMStubCodeDesc__v_; -text: .text%__1cKcastPPNodeErule6kM_I_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF3_v3_v_; -text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; -text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; -text: .text%__1cJAssemblerGmovslq6MpnMRegisterImpl_2_v_; -text: .text%__1cRandI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRConstantLongValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%JVM_StartThread; -text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; -text: .text%__1cMsubD_regNodeErule6kM_I_; -text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; -text: .text%__1cNmulI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cIMulFNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cLRuntimeStub2n6FLI_pv_; -text: .text%__1cRxorI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cMmulF_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbFloadConL_0x6666666666666667NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOloadConL32NodeHsize_of6kM_I_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJOperation__v4_v_; -text: .text%__1cRaddL_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivLNodeJideal_reg6kM_I_; -text: .text%__1cGICStubFclear6M_v_; -text: .text%__1cNdecI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFTypeFFxdual6kM_pknEType__; -text: .text%__1cFStateM_sub_Op_ConF6MpknENode__v_; -text: .text%__1cMloadConFNodeHsize_of6kM_I_; -text: .text%__1cPsarL_rReg_2NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQsarL_rReg_63NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPoldgetTimeNanos6F_x_; -text: .text%__1cKmul_hiNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHMonitor2T6M_v_; -text: .text%__1cINegDNodeLbottom_type6kM_pknEType__; -text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_; -text: .text%__1cHThreadsGremove6FpnKJavaThread__v_; -text: .text%__1cODeoptimizationTuncommon_trap_inner6FpnKJavaThread_i_v_; -text: .text%__1cLensure_join6FpnKJavaThread__v_: thread.o; -text: .text%__1cIOSThread2T6M_v_; -text: .text%__1cODeoptimizationNuncommon_trap6FpnKJavaThread_i_pn0ALUnrollBlock__; -text: .text%__1cTconvI2D_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cODeoptimizationRgather_statistics6Fn0ALDeoptReason_n0ALDeoptAction_nJBytecodesECode__v_; -text: .text%__1cUThreadSafepointStateHdestroy6FpnKJavaThread__v_; -text: .text%__1cIGraphKitTdprecision_rounding6MpnENode__2_; -text: .text%__1cOcmovI_regUNodeErule6kM_I_; -text: .text%__1cCosLfree_thread6FpnIOSThread__v_; -text: .text%__1cXpartialSubtypeCheckNodeMideal_Opcode6kM_i_; -text: .text%JVM_GetInheritedAccessControlContext; -text: .text%__1cNThreadServiceWcurrent_thread_exiting6FpnKJavaThread__v_; -text: .text%__1cLvframeArrayZdeallocate_monitor_chunks6M_v_; -text: .text%__1cGThread2T5B6M_v_; -text: .text%__1cIAddDNodeLbottom_type6kM_pknEType__; -text: .text%__1cKJavaThread2T6M_v_; -text: .text%__1cQjava_lang_ThreadNset_stillborn6FpnHoopDesc__v_; -text: .text%__1cMmulD_memNodePoper_input_base6kM_I_; -text: .text%__1cRInlineCacheBufferSic_destination_for6FpnKCompiledIC__pC_; -text: .text%__1cLvframeArrayPunpack_to_stack6MrnFframe_i_v_; -text: .text%__1cOcompL_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIOSThreadKpd_destroy6M_v_; -text: .text%__1cMaddF_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cODeoptimizationYfetch_unroll_info_helper6FpnKJavaThread__pn0ALUnrollBlock__; -text: .text%__1cODeoptimizationRlast_frame_adjust6Fii_i_; -text: .text%__1cKJavaThreadYremove_stack_guard_pages6M_v_; -text: .text%__1cODeoptimizationNunpack_frames6FpnKJavaThread_i_nJBasicType__; -text: .text%__1cNnmethodLocker2t6MpC_v_; -text: .text%__1cOtailjmpIndNodeMideal_Opcode6kM_i_; -text: .text%__1cLconvI2BNodeErule6kM_I_; -text: .text%__1cTconvF2I_reg_regNodeErule6kM_I_; -text: .text%__1cIciMethodVget_osr_flow_analysis6Mi_pnKciTypeFlow__; -text: .text%__1cSCallLeafDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRaddL_mem_rRegNodePoper_input_base6kM_I_; -text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_; -text: .text%__1cMmulL_memNodePoper_input_base6kM_I_; -text: .text%__1cODeoptimizationLUnrollBlock2T6M_v_; -text: .text%__1cHciKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cMaddF_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cSCompiledStaticCallMset_to_clean6M_v_; -text: .text%__1cMincL_memNodePoper_input_base6kM_I_; -text: .text%jni_NewDirectByteBuffer; -text: .text%__1cMmulL_memNodeMideal_Opcode6kM_i_; -text: .text%__1cMaddD_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__; -text: .text%__1cJAssemblerEmovb6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cJSubFPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_only6MnITosState__v_; -text: .text%__1cRcmpFastUnlockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKloadUBNodeFreloc6kM_i_; -text: .text%__1cMStartOSRNodeKosr_domain6F_pknJTypeTuple__; -text: .text%__1cMmulD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_; -text: .text%__1cNCallGeneratorHfor_osr6FpnIciMethod_i_p0_; -text: .text%__1cKstoreINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOstackSlotDOperKin_RegMask6kMi_pknHRegMask__; -text: .text%jni_GetFloatArrayRegion: jni.o; -text: .text%__1cPfieldDescriptorUdouble_initial_value6kM_d_; -text: .text%__1cKEntryPoint2t6M_v_; -text: .text%__1cJAssemblerEsarl6MpnMRegisterImpl_i_v_; -text: .text%__1cSCardTableExtensionbEresize_covered_region_by_start6MnJMemRegion__v_; -text: .text%__1cQshrL_rReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRaddL_mem_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cIAddFNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJloadDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMlogD_regNodeErule6kM_I_; -text: .text%__1cNmulI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cMdecI_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsalL_rReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKemit_break6FrnKCodeBuffer__v_; -text: .text%jni_GetStaticMethodID: jni.o; -text: .text%__1cMsubF_regNodeMcisc_operand6kM_i_; -text: .text%__1cMdecI_memNodeFreloc6kM_i_; -text: .text%__1cMdecI_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cRCardTableModRefBSbCfind_covering_region_by_base6MpnIHeapWord__i_; -text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cINegFNodeGOpcode6kM_i_; -text: .text%__1cRCardTableModRefBSbAlargest_prev_committed_end6kMi_pnIHeapWord__; -text: .text%__1cSMachBreakpointNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCardTableExtensionVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cNstoreImmPNodePoper_input_base6kM_I_; -text: .text%__1cKReflectionUarray_component_type6FpnHoopDesc_pnGThread__2_; -text: .text%__1cKoopFactoryUnew_compiledICHolder6FnMmethodHandle_nLKlassHandle_pnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cTconvL2F_reg_regNodeMcisc_operand6kM_i_; -text: .text%__1cKarrayKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cFStateM_sub_Op_CmpD6MpknENode__v_; -text: .text%__1cNloadConL0NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cKcastPPNodeMideal_Opcode6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_; -text: .text%__1cPshrL_rReg_1NodeHtwo_adr6kM_I_; -text: .text%__1cbDcatch_cleanup_find_cloned_def6FpnFBlock_pnENode_1rnLBlock_Array_i_3_: lcm.o; -text: .text%__1cVcompiledICHolderKlassIallocate6MpnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cISubDNodeLbottom_type6kM_pknEType__; -text: .text%__1cISubFNodeLbottom_type6kM_pknEType__; -text: .text%__1cNdivI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_GetComponentType; -text: .text%__1cIMulDNodeJideal_reg6kM_I_; -text: .text%__1cJAssemblerEsbbq6MpnMRegisterImpl_i_v_; -text: .text%__1cNcmovL_memNodeMideal_Opcode6kM_i_; -text: .text%jni_GetStringRegion: jni.o; -text: .text%jni_EnsureLocalCapacity: jni.o; -text: .text%__1cMaddF_memNodePoper_input_base6kM_I_; -text: .text%__1cFParseMdo_anewarray6M_v_; -text: .text%__1cLConvI2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLconvI2BNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsYis_supported_jni_version6Fi_C_; -text: .text%__1cRandL_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cKarrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%JVM_NewArray; -text: .text%JVM_FreeMemory; -text: .text%JVM_TotalMemory; -text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cMincI_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__; -text: .text%__1cMmulF_memNodeErule6kM_I_; -text: .text%__1cODeoptimizationbJupdate_method_data_from_interpreter6FnQmethodDataHandle_ii_v_; -text: .text%__1cLClassLoaderSget_system_package6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cMTailJumpNodeKmatch_edge6kMI_I_; -text: .text%__1cRaddL_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cTconvL2F_reg_regNodeErule6kM_I_; -text: .text%__1cKPSYoungGenLpost_resize6M_v_; -text: .text%__1cNcmovL_regNodeErule6kM_I_; -text: .text%__1cRandI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegF_regNodeHtwo_adr6kM_I_; -text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_; -text: .text%__1cKstoreBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPBytecode_invokeLresult_type6kMpnGThread__nJBasicType__; -text: .text%__1cMincL_memNodeMideal_Opcode6kM_i_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cSInterpreterRuntimeJnote_trap6FpnKJavaThread_ipnGThread__v_; -text: .text%__1cRSignatureIteratorHiterate6M_v_; -text: .text%__1cIModLNodeJideal_reg6kM_I_; -text: .text%__1cLConvD2INodeLbottom_type6kM_pknEType__; -text: .text%__1cMaddF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateM_sub_Op_DivL6MpknENode__v_; -text: .text%__1cTconvL2D_reg_memNodeErule6kM_I_; -text: .text%JVM_GetSystemPackage; -text: .text%__1cOMacroAssemblerFenter6M_v_; -text: .text%__1cLConvF2DNodeJideal_reg6kM_I_; -text: .text%__1cNTemplateTableLindex_check6FpnMRegisterImpl_2_v_; -text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; -text: .text%__1cLMoveL2DNodeGOpcode6kM_i_; -text: .text%__1cMincI_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cFStateP_sub_Op_ConvF2D6MpknENode__v_; -text: .text%__1cMmulL_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%Unsafe_DefineClass1; -text: .text%__1cFTypeDFxdual6kM_pknEType__; -text: .text%__1cMincI_memNodeFreloc6kM_i_; -text: .text%__1cPcmpF_cc_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMsubF_memNodeMideal_Opcode6kM_i_; -text: .text%__1cMsubF_memNodePoper_input_base6kM_I_; -text: .text%__1cTconvF2D_reg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%JVM_DefineClass; -text: .text%__1cMaddF_memNodeMideal_Opcode6kM_i_; -text: .text%__1cJAssemblerEshrq6MpnMRegisterImpl_i_v_; -text: .text%__1cPcmpFastLockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerYprofile_not_taken_branch6MpnMRegisterImpl__v_; -text: .text%__1cTleaPIdxScaleOffNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; -text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; -text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; -text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; -text: .text%JVM_GetCPFieldModifiers; -text: .text%JVM_InvokeMethod; -text: .text%__1cFKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cOsalI_mem_1NodeMideal_Opcode6kM_i_; -text: .text%__1cMmulF_regNodeMcisc_operand6kM_i_; -text: .text%__1cMmulD_regNodeHtwo_adr6kM_I_; -text: .text%__1cTconvD2F_reg_regNodeMcisc_operand6kM_i_; -text: .text%jni_AllocObject: jni.o; -text: .text%__1cTconvF2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFParseOdo_tableswitch6M_v_; -text: .text%__1cTmembar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKReflectionNinvoke_method6FpnHoopDesc_nGHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cICmpFNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJCondition__v4_v_; -text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_; -text: .text%__1cTconvF2D_reg_regNodeQuse_cisc_RegMask6M_v_; -text: .text%Unsafe_AllocateInstance; -text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; -text: .text%__1cOcmovD_regUNodeMideal_Opcode6kM_i_; -text: .text%__1cMsubD_immNodeMideal_Opcode6kM_i_; -text: .text%__1cRInlineCacheBufferOinit_next_stub6F_v_; -text: .text%__1cPshrL_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMsubD_immNodeErule6kM_I_; -text: .text%__1cNTemplateTableHconvert6F_v_; -text: .text%__1cMnegD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQorI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLMoveF2INodeGOpcode6kM_i_; -text: .text%__1cNcmovL_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_2_v_; -text: .text%__1cOcmovD_regUNodeErule6kM_I_; -text: .text%__1cKConv2BNodeLbottom_type6kM_pknEType__; -text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; -text: .text%__1cMorL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cTconvD2I_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cScompL_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cXpartialSubtypeCheckNodeErule6kM_I_; -text: .text%__1cOstackSlotDOperEtype6kM_pknEType__; -text: .text%__1cHThreadsLnmethods_do6F_v_; -text: .text%__1cLloadSSDNodeErule6kM_I_; -text: .text%__1cMsubD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRComputeEntryStackIdo_short6M_v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorCto6F_pnMRegisterImpl__; -text: .text%__1cTconvF2D_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMmulL_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; -text: .text%__1cLTypeInstPtrOxmeet_unloaded6kMpk0_2_; -text: .text%__1cMloadConFNodeKconst_size6kM_i_; -text: .text%__1cMorL_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cMmulD_memNodeMideal_Opcode6kM_i_; -text: .text%__1cMaddD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cMnegF_regNodeMideal_Opcode6kM_i_; -text: .text%__1cMloadConFNodeFreloc6kM_i_; -text: .text%__1cILogDNodeLbottom_type6kM_pknEType__; -text: .text%__1cLConvI2DNodeLbottom_type6kM_pknEType__; -text: .text%__1cNstoreImmPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLStrCompNodeJideal_reg6kM_I_; -text: .text%__1cMlogD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFVTuneOdelete_nmethod6FpnHnmethod__v_; -text: .text%__1cMaddD_regNodeMcisc_operand6kM_i_; -text: .text%__1cMaddD_regNodeErule6kM_I_; -text: .text%__1cScompL_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cIAddFNodeJideal_reg6kM_I_; -text: .text%__1cJimmP0OperIconstant6kM_l_; -text: .text%__1cNciMethodKlassEmake6F_p0_; -text: .text%__1cHnmethodFflush6M_v_; -text: .text%JVM_GetClassContext; -text: .text%__1cRfind_field_offset6FpnI_jobject_ipnGThread__i_; -text: .text%__1cXPartialSubtypeCheckNodeLbottom_type6kM_pknEType__; -text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; -text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; -text: .text%__1cMsubF_regNodeErule6kM_I_; -text: .text%__1cRsubL_rReg_memNodeFreloc6kM_i_; -text: .text%__1cTconvL2F_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMmulF_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJStubQdDueueKremove_all6M_v_; -text: .text%__1cIDivDNodeLbottom_type6kM_pknEType__; -text: .text%__1cLStatSamplerTget_system_property6FpkcpnGThread__2_; -text: .text%__1cICodeBlobFflush6M_v_; -text: .text%__1cVMoveF2I_reg_stackNodeMideal_Opcode6kM_i_; -text: .text%__1cNmodL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJArgumentsQPropertyList_add6FppnOSystemProperty_2_v_; -text: .text%__1cKstoreCNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmembar_releaseNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cQsalI_rReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cSInterpreterRuntimeQcreate_exception6FpnKJavaThread_pc3_v_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_2_v_; -text: .text%__1cJStubQdDueueMremove_first6Mi_v_; -text: .text%__1cQinitialize_class6FnMsymbolHandle_pnGThread__v_: thread.o; -text: .text%__1cJAssemblerFcmovq6Mn0AJCondition_pnMRegisterImpl_nHAddress__v_; -text: .text%__1cMmulD_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cMaddF_immNodeHtwo_adr6kM_I_; -text: .text%__1cIMulDNodeGmul_id6kM_pknEType__; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cTconvL2D_reg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTconvD2F_reg_regNodeErule6kM_I_; -text: .text%__1cVMoveL2D_reg_stackNodeMideal_Opcode6kM_i_; -text: .text%__1cFStateM_sub_Op_MulD6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_ModL6MpknENode__v_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; -text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%__1cQshrL_rReg_CLNodeHtwo_adr6kM_I_; -text: .text%__1cKJavaThreadbOcheck_special_condition_for_native_trans6Fp0_v_; -text: .text%__1cODeoptimizationYreset_invocation_counter6FpnJScopeDesc_i_v_; -text: .text%__1cZCallDynamicJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHOrLNodeGOpcode6kM_i_; -text: .text%__1cIMulFNodeGmul_id6kM_pknEType__; -text: .text%__1cMnegF_regNodeErule6kM_I_; -text: .text%__1cMsubF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTconvD2F_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_RawMonitorCreate; -text: .text%__1cMMutableSpaceOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cKCMoveDNodeGOpcode6kM_i_; -text: .text%__1cFParseQdo_monitor_enter6M_v_; -text: .text%__1cPMultiBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cXpartialSubtypeCheckNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvD2INodeJideal_reg6kM_I_; -text: .text%__1cKcastPPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%Unsafe_CompareAndSwapInt; -text: .text%__1cOstackSlotIOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cOstackSlotIOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMmulD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNmulI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_22pC_v_; -text: .text%__1cScompL_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cNTemplateTableRlocals_index_wide6FpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerPset_mdp_data_at6MpnMRegisterImpl_i2_v_; -text: .text%__1cJAssemblerEincl6MnHAddress__v_; -text: .text%__1cMmulF_regNodeErule6kM_I_; -text: .text%__1cIMulFNodeJideal_reg6kM_I_; -text: .text%__1cFStateM_sub_Op_MulF6MpknENode__v_; -text: .text%__1cJOopMapSetQsingular_oop_map6M_pnGOopMap__; -text: .text%__1cHnmethodVmark_as_seen_on_stack6M_v_; -text: .text%__1cMloadConDNodeHsize_of6kM_I_; -text: .text%__1cOcmovI_regUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQorI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cMaddD_immNodeHtwo_adr6kM_I_; -text: .text%__1cMloadConDNodeKconst_size6kM_i_; -text: .text%__1cLConvL2FNodeLbottom_type6kM_pknEType__; -text: .text%__1cLConvL2DNodeLbottom_type6kM_pknEType__; -text: .text%__1cOstackSlotDOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cTconvF2D_reg_memNodeFreloc6kM_i_; -text: .text%__1cLConvD2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMloadConDNodeFreloc6kM_i_; -text: .text%JVM_Lseek; -text: .text%__1cPsarL_rReg_1NodeErule6kM_I_; -text: .text%__1cPsarL_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVcompiledICHolderKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cOstackSlotDOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMmulF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMlogD_regNodeHtwo_adr6kM_I_; -text: .text%__1cFStateM_sub_Op_AddF6MpknENode__v_; -text: .text%__1cIXorINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cSstring_compareNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cFStateP_sub_Op_StrComp6MpknENode__v_; -text: .text%__1cGciType2t6MnJBasicType__v_; -text: .text%__1cScompL_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_; -text: .text%__1cPcmpF_cc_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_; -text: .text%__1cQmulI_mem_immNodePoper_input_base6kM_I_; -text: .text%__1cZInterpreterMacroAssemblerTnotify_method_entry6M_v_; -text: .text%__1cNdecL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJAssemblerEsubq6MpnMRegisterImpl_nHAddress__v_; -text: .text%jni_GetEnv; -text: .text%JVM_NanoTime; -text: .text%__1cRmulI_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cETypeEmake6Fn0AFTYPES__pk0_; -text: .text%__1cQmulI_mem_immNodeMideal_Opcode6kM_i_; -text: .text%__1cParrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cJAssemblerFpushq6MnHAddress__v_; -text: .text%__1cRComputeEntryStackIdo_array6Mii_v_; -text: .text%__1cPcmpD_cc_immNodeKconst_size6kM_i_; -text: .text%__1cMorL_rRegNodeErule6kM_I_; -text: .text%__1cScompP_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cScompP_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cNdivI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cMnegF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKciTypeFlowLStateVectorOdo_null_assert6MpnHciKlass__v_; -text: .text%__1cMsubD_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cJLoadLNodeMstore_Opcode6kM_i_; -text: .text%__1cNGrowableArray4CpnGciType__Egrow6Mi_v_; -text: .text%__1cMdivD_immNodeHtwo_adr6kM_I_; -text: .text%__1cLConvI2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIciMethodMnative_entry6M_pC_; -text: .text%__1cPcmpD_cc_immNodeFreloc6kM_i_; -text: .text%__1cMmulD_memNodeErule6kM_I_; -text: .text%jni_CallVoidMethod: jni.o; -text: .text%__1cQorI_rReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cMmulF_regNodeHtwo_adr6kM_I_; -text: .text%__1cPsalL_rReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cQshrI_rReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNTemplateTableQvolatile_barrier6FnJAssemblerQMembar_mask_bits__v_; -text: .text%__1cNdivL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cVMoveL2D_reg_stackNodeErule6kM_I_; -text: .text%__1cRsalI_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJBasicLockHmove_to6MpnHoopDesc_p0_v_; -text: .text%__1cOstackSlotIOperEtype6kM_pknEType__; -text: .text%__1cKPSYoungGenRavailable_to_live6M_L_; -text: .text%__1cOstackSlotIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNcmovL_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cSstore_to_stackslot6FrnKCodeBuffer_iii_v_; -text: .text%__1cQshrL_rReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUInterpreterGeneratorbDgenerate_stack_overflow_check6M_v_; -text: .text%__1cRComputeEntryStackHdo_bool6M_v_; -text: .text%__1cMmulD_immNodeFreloc6kM_i_; -text: .text%__1cQmulI_mem_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%JVM_FindPrimitiveClass; -text: .text%JVM_IsSameClassPackage; -text: .text%__1cRaddI_mem_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMaddF_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLconvI2BNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMaddD_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMlogD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRCardTableModRefBSYcommitted_unique_to_self6kMinJMemRegion__1_; -text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; -text: .text%__1cFStateN_sub_Op_LoadD6MpknENode__v_; -text: .text%__1cTconvL2F_reg_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cPcmpF_cc_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKPSYoungGenUavailable_to_min_gen6M_L_; -text: .text%__1cJAssemblerKrepne_scan6M_v_; -text: .text%__1cJname2type6Fpkc_nJBasicType__; -text: .text%__1cKPSYoungGenbCreset_survivors_after_shrink6M_v_; -text: .text%__1cKPSYoungGenQlimit_gen_shrink6ML_L_; -text: .text%__1cTconvI2D_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateP_sub_Op_ConvI2F6MpknENode__v_; -text: .text%__1cMmulD_immNodeKconst_size6kM_i_; -text: .text%__1cMmulF_immNodeFreloc6kM_i_; -text: .text%__1cJloadBNodeHsize_of6kM_I_; -text: .text%__1cOcompI_rRegNodeHsize_of6kM_I_; -text: .text%__1cPPerfDataManagerWcreate_string_variable6FnJCounterNS_pkci3pnGThread__pnSPerfStringVariable__; -text: .text%__1cJloadPNodeHsize_of6kM_I_; -text: .text%__1cOtypeArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cOtypeArrayKlassNexternal_name6FnJBasicType__pkc_; -text: .text%Unsafe_StaticFieldOffset; -text: .text%__1cNcmovL_regNodeHtwo_adr6kM_I_; -text: .text%__1cLloadSSDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateO_sub_Op_CMoveP6MpknENode__v_; -text: .text%__1cVVM_ParallelGCSystemGCEdoit6M_v_; -text: .text%__1cETypeFxdual6kM_pk0_; -text: .text%__1cVVM_ParallelGCSystemGC2t6MIInHGCCauseFCause__v_; -text: .text%__1cJCmpF3NodeGOpcode6kM_i_; -text: .text%Unsafe_GetObjectVolatile; -text: .text%__1cMsubD_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%Unsafe_EnsureClassInitialized; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cOcmovI_regUNodeHtwo_adr6kM_I_; -text: .text%__1cMaddD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEmovw6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cJAssemblerGmovsbl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cMorL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUParallelScavengeHeapHcollect6MnHGCCauseFCause__v_; -text: .text%__1cJLoadDNodeJideal_reg6kM_I_; -text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cQmulI_mem_immNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCi_v_; -text: .text%__1cPcheckCastPPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmembar_acquireNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKimmL10OperJnum_edges6kM_I_; -text: .text%Unsafe_StaticFieldBaseFromField; -text: .text%__1cMsubD_regNodeHtwo_adr6kM_I_; -text: .text%__1cRsubI_rReg_memNodeHsize_of6kM_I_; -text: .text%__1cKmul_hiNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cQsarL_rReg_63NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJAssemblerMemit_arith_b6MiipnMRegisterImpl_i_v_; -text: .text%__1cPsarL_rReg_2NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLdivL_10NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNTemplateTableXresolve_cache_and_index6FipnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_; -text: .text%JVM_GC; -text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_; -text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; -text: .text%__1cIPSOldGenGexpand6ML_v_; -text: .text%__1cIPSOldGenXexpand_and_cas_allocate6ML_pnIHeapWord__; -text: .text%__1cPsarL_rReg_1NodeHtwo_adr6kM_I_; -text: .text%__1cJAssemblerFtestb6MpnMRegisterImpl_i_v_; -text: .text%__1cMsubF_regNodeHtwo_adr6kM_I_; -text: .text%__1cRaddL_rReg_memNodeFreloc6kM_i_; -text: .text%__1cVMoveL2D_reg_stackNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cScompP_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOGenerateOopMapGdo_jsr6Mi_v_; -text: .text%__1cMmulF_memNodeHtwo_adr6kM_I_; -text: .text%__1cOcmovD_regUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNcmovL_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMmulF_immNodeKconst_size6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerbGget_unsigned_2_byte_index_at_bcp6MpnMRegisterImpl_i_v_; -text: .text%__1cZInterpreterMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cNTemplateTableGiconst6Fi_v_; -text: .text%__1cMdecI_memNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cCosMuser_handler6F_pv_; -text: .text%__1cJloadDNodeFreloc6kM_i_; -text: .text%__1cMincL_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNinstanceKlassSremove_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cTconvD2F_reg_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cKMemoryPoolLadd_manager6MpnNMemoryManager__v_; -text: .text%__1cMmulD_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMsubF_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovI_regUNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkci_pc_; -text: .text%jni_RegisterNatives: jni.o; -text: .text%Unsafe_GetNativeFloat; -text: .text%JVM_GetClassDeclaredFields; -text: .text%__1cMsubF_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cJMemRegion2t6M_v_; -text: .text%jni_SetStaticObjectField: jni.o; -text: .text%__1cQsalL_rReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cCosEstat6FpkcpnEstat__i_; -text: .text%__1cLOptoRuntimeTmultianewarray_Type6Fi_pknITypeFunc__; -text: .text%__1cRComputeEntryStackHdo_long6M_v_; -text: .text%__1cHnmethodVinvalidate_osr_method6M_v_; -text: .text%__1cNMemoryManagerIadd_pool6MpnKMemoryPool__v_; -text: .text%jni_SetObjectField: jni.o; -text: .text%__1cJloadDNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLConvD2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOBasicHashtable2t6Mii_v_; -text: .text%__1cOPhaseIdealLoopJclone_iff6MpnHPhiNode_pnNIdealLoopTree__pnIBoolNode__; -text: .text%__1cMTailJumpNodeGOpcode6kM_i_; -text: .text%__1cCosHSolarisVcleanup_interruptible6FpnKJavaThread__v_; -text: .text%__1cCosHSolarisTsetup_interruptible6F_pnKJavaThread__; -text: .text%__1cCosHSolarisTsetup_interruptible6FpnKJavaThread__v_; -text: .text%__1cMdivD_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_IsSupportedJNIVersion; -text: .text%JVM_LoadLibrary; -text: .text%JVM_Sleep; -text: .text%__1cHOrLNodeLbottom_type6kM_pknEType__; -text: .text%__1cOstackSlotIOperFscale6kM_i_; -text: .text%__1cLConvD2FNodeLbottom_type6kM_pknEType__; -text: .text%__1cLConvF2INodeLbottom_type6kM_pknEType__; -text: .text%jint_cmp: parse2.o; -text: .text%__1cOstackSlotIOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cLloadSSINodeErule6kM_I_; -text: .text%__1cLConvI2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLConvL2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIDivDNodeJideal_reg6kM_I_; -text: .text%__1cRandI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_int_field06FnJBasicType__pC_; -text: .text%jni_GetJavaVM: jni.o; -text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_pnUPerfLongSampleHelper__v_; -text: .text%jni_MonitorExit: jni.o; -text: .text%jni_MonitorEnter: jni.o; -text: .text%__1cHciKlass2t6MnLKlassHandle_pnIciSymbol__v_; -text: .text%__1cNGrowableArray4CpnIPerfData__Praw_at_put_grow6Mirk14_v_; -text: .text%__1cFciEnvOrecord_failure6Mpkc_v_; -text: .text%__1cMciArrayKlassRbase_element_type6M_pnGciType__; -text: .text%__1cLConvL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOstackSlotDOperFscale6kM_i_; -text: .text%__1cOstackSlotDOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cOcmovI_regUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovL_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvD2F_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTconvF2I_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvL2F_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRaddI_mem_rRegNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNTemplateTableH_return6FnITosState__v_; -text: .text%__1cNTemplateTableHif_icmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableHif_0cmp6Fn0AJCondition__v_; -text: .text%__1cTconvL2D_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXpartialSubtypeCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNSharedRuntimeEdrem6Fdd_d_; -text: .text%__1cRaddI_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cScompP_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJAssemblerGmovswl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cMsubF_memNodeErule6kM_I_; -text: .text%__1cOMacroAssemblerQload_signed_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cNdivI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRMachSpillCopyNodeHsize_of6kM_I_; -text: .text%__1cFframebFset_interpreter_frame_sender_sp6Mpl_v_; -text: .text%__1cPsarL_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cULinearLeastSquareFit2t6MI_v_; -text: .text%__1cSObjectSynchronizerIjni_exit6FpnHoopDesc_pnGThread__v_; -text: .text%__1cSObjectSynchronizerJjni_enter6FnGHandle_pnGThread__v_; -text: .text%__1cMaddF_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMsubF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMsubD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMmulF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMmulF_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cCosZvm_allocation_granularity6F_i_; -text: .text%Unsafe_ObjectFieldOffset; -text: .text%__1cNSpaceCounters2t6MpkciLpnMMutableSpace_pnSGenerationCounters__v_; -text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; -text: .text%__1cOcompiledVFrameUresolve_monitor_lock6kMnILocation__pnJBasicLock__; -text: .text%__1cTconvD2I_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; -text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; -text: .text%__1cNCellTypeStateImake_any6Fi_0_; -text: .text%__1cMorL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cNTemplateTableFaload6Fi_v_; -text: .text%__1cXNativeSignatureIteratorJdo_double6M_v_; -text: .text%__1cISubDNodeGadd_id6kM_pknEType__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_double6M_v_; -text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_; -text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_; -text: .text%__1cNTemplateTableEdop26Fn0AJOperation__v_; -text: .text%__1cMaddD_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cMMonitorChunk2t6Mi_v_; -text: .text%__1cLMoveL2DNodeLbottom_type6kM_pknEType__; -text: .text%__1cZCompiledArgumentOopFinderDset6MinJBasicType__v_; -text: .text%__1cNstoreImmPNodeFreloc6kM_i_; -text: .text%__1cNSharedRuntimeVhandle_ic_miss_helper6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cKJavaThreadUremove_monitor_chunk6MpnMMonitorChunk__v_; -text: .text%__1cKJavaThreadRadd_monitor_chunk6MpnMMonitorChunk__v_; -text: .text%__1cNReservedSpace2t6ML_v_; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__; -text: .text%__1cNmulI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%Unsafe_GetNativeByte; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_; -text: .text%__1cFframebLprevious_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2t6M_v_; -text: .text%__1cFStateP_sub_Op_ConvD2I6MpknENode__v_; -text: .text%__1cKVtableStubRpd_code_alignment6F_i_; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_2_v_; -text: .text%__1cINegDNodeJideal_reg6kM_I_; -text: .text%__1cPshrL_rReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cTconvF2D_reg_memNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_; -text: .text%__1cNandI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pLi_v_; -text: .text%__1cMsubF_memNodeHtwo_adr6kM_I_; -text: .text%__1cINegFNodeLbottom_type6kM_pknEType__; -text: .text%__1cMmulL_memNodeFreloc6kM_i_; -text: .text%__1cMMonitorValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cFStateM_sub_Op_NegD6MpknENode__v_; -text: .text%__1cOtailjmpIndNodePoper_input_base6kM_I_; -text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_; -text: .text%__1cNstoreImmPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIDivINodeJideal_reg6kM_I_; -text: .text%__1cRInvocationCounterDdef6Fn0AFState_ipFnMmethodHandle_pnGThread__pC_v_; -text: .text%__1cMNativeLookupNlong_jni_name6FnMmethodHandle__pc_; -text: .text%__1cMaddF_memNodeErule6kM_I_; -text: .text%__1cOcmovD_regUNodeHtwo_adr6kM_I_; -text: .text%__1cMaddF_memNodeHtwo_adr6kM_I_; -text: .text%__1cOGenerateOopMapTret_jump_targets_do6MpnOBytecodeStream_pFp0ipi_vi4_v_; -text: .text%__1cOClassPathEntry2t6M_v_; -text: .text%__1cMorL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cOMacroAssemblerNpop_CPU_state6M_v_; -text: .text%__1cOMacroAssemblerOpush_CPU_state6M_v_; -text: .text%__1cOMacroAssemblerNpop_FPU_state6M_v_; -text: .text%__1cOMacroAssemblerOpush_FPU_state6M_v_; -text: .text%__1cOMacroAssemblerMpop_IU_state6M_v_; -text: .text%__1cOMacroAssemblerNpush_IU_state6M_v_; -text: .text%__1cOMacroAssemblerSstore_check_part_26MpnMRegisterImpl__v_; -text: .text%__1cTconvL2D_reg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOMacroAssemblerSstore_check_part_16MpnMRegisterImpl__v_; -text: .text%__1cRaddL_rReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMaddF_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNTemplateTableOprepare_invoke6FpnMRegisterImpl_2inJBytecodesECode__v_; -text: .text%__1cVMoveF2I_reg_stackNodeErule6kM_I_; -text: .text%__1cJAssemblerEandq6MpnMRegisterImpl_2_v_; -text: .text%__1cFParsePdo_lookupswitch6M_v_; -text: .text%__1cLConvF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFParseRjump_if_true_fork6MpnGIfNode_ii_v_; -text: .text%__1cIAddDNodeJideal_reg6kM_I_; -text: .text%__1cJloadFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRComputeEntryStackJdo_double6M_v_; -text: .text%__1cMaddD_regNodeHtwo_adr6kM_I_; -text: .text%__1cLConvD2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJAssemblerEcmpb6MnHAddress_i_v_; -text: .text%__1cCosGsignal6Fipv_1_; -text: .text%__1cMsubD_immNodeHtwo_adr6kM_I_; -text: .text%__1cKPSScavengeZclean_up_failed_promotion6F_v_; -text: .text%JVM_Available; -text: .text%__1cIAddDNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJAssemblerFimulq6MpnMRegisterImpl_2_v_; -text: .text%__1cIRetTableUfind_jsrs_for_target6Mi_pnNRetTableEntry__; -text: .text%__1cNRegisterSaverWrestore_live_registers6FpnOMacroAssembler__v_; -text: .text%__1cLClassLoaderLadd_to_list6FpnOClassPathEntry__v_; -text: .text%__1cNTemplateTableGastore6Fi_v_; -text: .text%__1cNTemplateTableGdstore6Fi_v_; -text: .text%__1cNTemplateTableGfstore6Fi_v_; -text: .text%__1cNTemplateTableGlstore6Fi_v_; -text: .text%__1cNRegisterSaverTsave_live_registers6FpnOMacroAssembler_ipi_pnGOopMap__; -text: .text%__1cNTemplateTableGistore6Fi_v_; -text: .text%__1cIRetTableHadd_jsr6Mii_v_; -text: .text%__1cKPSYoungGenOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cISubDNodeJideal_reg6kM_I_; -text: .text%__1cNTemplateTableFdload6Fi_v_; -text: .text%__1cNTemplateTableFfload6Fi_v_; -text: .text%__1cNTemplateTableFlload6Fi_v_; -text: .text%__1cNTemplateTableFiload6Fi_v_; -text: .text%__1cMmulI_memNodePoper_input_base6kM_I_; -text: .text%__1cNGrowableArray4CpnLmarkOopDesc__Uclear_and_deallocate6M_v_; -text: .text%__1cMLinkResolverbBlookup_method_in_interfaces6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_; -text: .text%__1cRaddL_rReg_memNodeErule6kM_I_; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl__v_; -text: .text%__1cHRetNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRaddL_rReg_memNodeHtwo_adr6kM_I_; -text: .text%__1cMmulF_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cMaddF_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEmovb6MnHAddress_i_v_; -text: .text%Unsafe_AllocateMemory; -text: .text%__1cVMoveF2I_reg_stackNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerHfxrstor6MnHAddress__v_; -text: .text%__1cJAssemblerGfxsave6MnHAddress__v_; -text: .text%__1cJAssemblerEsetb6Mn0AJCondition_pnMRegisterImpl__v_; -text: .text%__1cNGCTaskManagerGthread6MI_pnMGCTaskThread__; -text: .text%__1cRConstantLongValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cMmulD_memNodeHtwo_adr6kM_I_; -text: .text%jni_CallStaticObjectMethod: jni.o; -text: .text%__1cNcmovL_memNodeHtwo_adr6kM_I_; -text: .text%__1cFStateM_sub_Op_AddD6MpknENode__v_; -text: .text%__1cMmulI_memNodeMideal_Opcode6kM_i_; -text: .text%__1cScompL_rReg_memNodeFreloc6kM_i_; -text: .text%__1cLloadSSINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; -text: .text%__1cMPerfDataList2T6M_v_; -text: .text%__1cMmulI_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOcmovD_regUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; -text: .text%__1cNnegI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJAssemblerEnegl6MpnMRegisterImpl__v_; -text: .text%__1cOGenerateOopMapRdo_multianewarray6Mii_v_; -text: .text%__1cLconvI2BNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUPSGenerationCounters2t6MpkciipnOPSVirtualSpace__v_; -text: .text%__1cMPerfDataList2t6Mi_v_; -text: .text%__1cFStateP_sub_Op_ConvI2D6MpknENode__v_; -text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; -text: .text%__1cJCodeCachebCmake_marked_nmethods_zombies6F_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_; -text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cFStateM_sub_Op_CmpF6MpknENode__v_; -text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; -text: .text%__1cQshrL_rReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJAssemblerGmovzbl6MpnMRegisterImpl_2_v_; -text: .text%__1cILogDNodeJideal_reg6kM_I_; -text: .text%__1cRaddL_mem_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMincL_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateO_sub_Op_Conv2B6MpknENode__v_; -text: .text%__1cNcmovL_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_CallStaticObjectMethodV: jni.o; -text: .text%__1cMmulD_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNMemoryManager2t6M_v_; -text: .text%__1cMaddF_immNodeKconst_size6kM_i_; -text: .text%__1cVMoveL2D_reg_stackNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFciEnvbNArrayIndexOutOfBoundsException_instance6M_pnKciInstance__; -text: .text%__1cMsubD_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMmulI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMaddF_immNodeFreloc6kM_i_; -text: .text%__1cMaddD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMaddD_immNodeFreloc6kM_i_; -text: .text%jni_IsInstanceOf: jni.o; -text: .text%__1cMaddD_immNodeKconst_size6kM_i_; -text: .text%jni_Throw: jni.o; -text: .text%__1cOsalI_mem_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSPSPromotionManager2t6M_v_; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cOLibraryCallKitXgenerate_current_thread6MrpnENode__2_; -text: .text%__1cMsubF_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetLastErrorString; -text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_22_v_; -text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; -text: .text%__1cFStateM_sub_Op_SubF6MpknENode__v_; -text: .text%JVM_GetInterfaceVersion; -text: .text%__1cKstoreBNodeErule6kM_I_; -text: .text%__1cKVtableStub2n6FLi_pv_; -text: .text%__1cJAssemblerEdecq6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerUprofile_virtual_call6MpnMRegisterImpl_22_v_; -text: .text%__1cOtailjmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cCosFyield6F_v_; -text: .text%__1cRaddI_mem_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOPSVirtualSpace2t6MnNReservedSpace_L_v_; -text: .text%Unsafe_SetMemory; -text: .text%__1cCosIjvm_path6Fpci_v_; -text: .text%__1cJTimeStamp2t6M_v_; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_2i_v_; -text: .text%__1cLconvI2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorKpass_float6M_v_; -text: .text%__1cISubFNodeJideal_reg6kM_I_; -text: .text%__1cNGrowableArray4CpnIPerfData__Egrow6Mi_v_; -text: .text%__1cMSysClassPathNreset_item_at6Mi_v_; -text: .text%__1cFStateM_sub_Op_LogD6MpknENode__v_; -text: .text%__1cJlookupOne6FpnHJNIEnv__pkcpnGThread__pnH_jclass__: jni.o; -text: .text%__1cLloadSSINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerLlock_object6MpnMRegisterImpl__v_; -text: .text%__1cISubFNodeGadd_id6kM_pknEType__; -text: .text%__1cFStateM_sub_Op_SubD6MpknENode__v_; -text: .text%JVM_RegisterSignal; -text: .text%JVM_FindSignal; -text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o; -text: .text%__1cMorL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_; -text: .text%__1cKConv2BNodeJideal_reg6kM_I_; -text: .text%__1cXNativeSignatureIteratorIdo_float6M_v_; -text: .text%jni_GetDoubleArrayRegion: jni.o; -text: .text%__1cLloadSSDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJArgumentsObuild_jvm_args6Fpkc_v_; -text: .text%__1cOLibraryCallKitMpop_math_arg6M_pnENode__; -text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cFStateO_sub_Op_CMoveL6MpknENode__v_; -text: .text%__1cMVM_OperationNdoit_epilogue6M_v_; -text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; -text: .text%__1cRaddI_mem_rRegNodeFreloc6kM_i_; -text: .text%__1cSInterpreterRuntimebKthrow_ArrayIndexOutOfBoundsException6FpnKJavaThread_pci_v_; -text: .text%__1cVMoveF2I_reg_stackNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableGfconst6Fi_v_; -text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%__1cQmulI_mem_immNodeFreloc6kM_i_; -text: .text%__1cNincI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNVM_DeoptimizeEdoit6M_v_; -text: .text%__1cLMoveF2INodeLbottom_type6kM_pknEType__; -text: .text%__1cUConstantOopReadValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cRaddI_mem_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMdivD_immNodeKconst_size6kM_i_; -text: .text%__1cQObjectStartArrayKinitialize6MnJMemRegion__v_; -text: .text%__1cQObjectStartArraySset_covered_region6MnJMemRegion__v_; -text: .text%__1cUGcThreadCountClosureJdo_thread6MpnGThread__v_; -text: .text%__1cNGrowableArray4CpnTDerivedPointerEntry__Egrow6Mi_v_; -text: .text%__1cPGCMemoryManagerXinitialize_gc_stat_info6M_v_; -text: .text%__1cPGCMemoryManager2t6M_v_; -text: .text%__1cKGCStatInfo2t6Mi_v_; -text: .text%__1cTMaskFillerForNativeLpass_object6M_v_; -text: .text%__1cTMaskFillerForNativeJpass_long6M_v_; -text: .text%__1cCosHrealloc6FpvL_1_; -text: .text%__1cCosWactive_processor_count6F_i_; -text: .text%__1cCosNsigexitnum_pd6F_i_; -text: .text%__1cMLinkResolverbEvtable_index_of_miranda_method6FnLKlassHandle_nMsymbolHandle_2pnGThread__i_; -text: .text%__1cZcatch_cleanup_intra_block6FpnENode_1pnFBlock_ii_v_: lcm.o; -text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; -text: .text%__1cRalign_object_size6Fl_l_; -text: .text%__1cMarrayOopDescLheader_size6FnJBasicType__i_; -text: .text%__1cNstoreImmBNodeErule6kM_I_; -text: .text%__1cNstoreImmINodeErule6kM_I_; -text: .text%__1cFParseMjump_if_join6MpnENode_2_2_; -text: .text%__1cKJNIHandlesQmake_weak_global6FnGHandle__pnI_jobject__; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_float_field06FnJBasicType__pC_; -text: .text%__1cFParseRdo_multianewarray6M_v_; -text: .text%jni_NewWeakGlobalRef: jni.o; -text: .text%jni_CallStaticVoidMethodV: jni.o; -text: .text%jni_CallStaticBooleanMethod: jni.o; -text: .text%__1cNGrowableArray4CpnNmethodOopDesc__Egrow6Mi_v_; -text: .text%__1cXpartialSubtypeCheckNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cTconvF2I_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; -text: .text%__1cNGrowableArray4CpC_Egrow6Mi_v_; -text: .text%__1cNGrowableArray4CL_Egrow6Mi_v_; -text: .text%__1cPsarL_rReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIPSOldGenKinitialize6MnNReservedSpace_Lpkci_v_; -text: .text%__1cIPSOldGenYinitialize_virtual_space6MnNReservedSpace_L_v_; -text: .text%__1cIPSOldGenPinitialize_work6Mpkci_v_; -text: .text%__1cNdivI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cTAbstractInterpreterKinitialize6F_v_; -text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; -text: .text%__1cOPSVirtualSpace2t6M_v_; -text: .text%__1cZInterpreterMacroAssemblerSupdate_mdp_for_ret6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerPset_mdp_flag_at6MpnMRegisterImpl_i_v_; -text: .text%__1cZInterpreterMacroAssemblerWdispatch_only_noverify6MnITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl__v_; -text: .text%__1cKReflectionbFbasic_type_arrayklass_to_mirror6FpnMklassOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cJArgumentsVset_parallel_gc_flags6F_v_; -text: .text%__1cQAgentLibraryList2t6M_v_; -text: .text%__1cMmulF_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJAssemblerGmovsbl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerGmovswl6MpnMRegisterImpl_2_v_; -text: .text%__1cRaddL_mem_rRegNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJAssemblerGmovzwl6MpnMRegisterImpl_2_v_; -text: .text%__1cRComputeEntryStackIdo_float6M_v_; -text: .text%__1cJAssemblerFcmovl6Mn0AJCondition_pnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerEaddl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cOGenerateOopMapTadd_to_ref_init_set6Mi_v_; -text: .text%__1cJAssemblerEcmpq6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerFidivl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerFidivq6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEcdql6M_v_; -text: .text%__1cJAssemblerEcdqq6M_v_; -text: .text%__1cJAssemblerEleal6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerDorq6MnHAddress_i_v_; -text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; -text: .text%__1cMGCTaskThreadDrun6M_v_; -text: .text%__1cMGCTaskThreadFstart6M_v_; -text: .text%__1cMGCTaskThread2t6MpnNGCTaskManager_II_v_; -text: .text%__1cJStubQdDueueOregister_queue6Fp0_v_; -text: .text%__1cISubFNodeDsub6kMpknEType_3_3_; -text: .text%__1cJAssemblerFxaddl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cNGCTaskManagerKset_thread6MIpnMGCTaskThread__v_; -text: .text%__1cJAssemblerHldmxcsr6MnHAddress__v_; -text: .text%__1cKcastPPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMPeriodicTask2t6ML_v_; -text: .text%__1cMPeriodicTaskGenroll6M_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC22_v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fi_v_; -text: .text%__1cNTemplateTableKdouble_cmp6Fi_v_; -text: .text%__1cNTemplateTableKinitialize6F_v_; -text: .text%__1cNTemplateTableGlconst6Fi_v_; -text: .text%__1cNTemplateTableGdconst6Fi_v_; -text: .text%__1cNTemplateTableHcastore6F_v_; -text: .text%__1cNTemplateTableKif_nullcmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableHif_acmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableUinvokevirtual_helper6FpnMRegisterImpl_22_v_; -text: .text%__1cEMIN24CL_6FTA0_0_; -text: .text%__1cRCardTableModRefBSbCpar_chunk_heapword_alignment6F_L_; -text: .text%__1cOMacroAssemblerPcorrected_idivl6MpnMRegisterImpl__i_; -text: .text%__1cOMacroAssemblerPcorrected_idivq6MpnMRegisterImpl__i_; -text: .text%__1cLNamedThread2t6M_v_; -text: .text%__1cLNamedThreadIset_name6MpkcE_v_; -text: .text%__1cIDivDNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFStatebB_sub_Op_PartialSubtypeCheck6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_DivI6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_DivD6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_ConvL2F6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_ConvL2D6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_ConvF2I6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_ConvD2F6MpknENode__v_; -text: .text%__1cScompP_rReg_memNodeFreloc6kM_i_; -text: .text%__1cKCastPPNodeJideal_reg6kM_I_; -text: .text%__1cLMoveF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLMoveL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTconvL2D_reg_memNodeFreloc6kM_i_; -text: .text%__1cMdivD_immNodeFreloc6kM_i_; -text: .text%__1cMmulF_memNodeFreloc6kM_i_; -text: .text%__1cMaddF_memNodeFreloc6kM_i_; -text: .text%__1cLConvF2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLConvD2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKciTypeFlowLStateVectorRdo_multianewarray6MpnQciBytecodeStream__v_; -text: .text%__1cRCollectorCounters2t6Mpkci_v_; -text: .text%Unsafe_CompareAndSwapObject; -text: .text%__1cNSafepointBlob2n6FLI_pv_; -text: .text%__1cNSafepointBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNSafepointBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cINegFNodeJideal_reg6kM_I_; -text: .text%__1cMVirtualSpace2t6M_v_; -text: .text%__1cLConvD2FNodeJideal_reg6kM_I_; -text: .text%__1cLConvF2INodeJideal_reg6kM_I_; -text: .text%__1cLConvL2DNodeJideal_reg6kM_I_; -text: .text%__1cLConvL2FNodeJideal_reg6kM_I_; -text: .text%__1cXPartialSubtypeCheckNodeJideal_reg6kM_I_; -text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_; -text: .text%__1cTAbstract_VM_VersionKvm_release6F_pkc_; -text: .text%__1cTAbstract_VM_VersionXinternal_vm_info_string6F_pkc_; -text: .text%__1cJAssemblerEshrq6MpnMRegisterImpl__v_; -text: .text%__1cMsubF_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cParrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerEsubq6MnHAddress_i_v_; -text: .text%__1cLOptoRuntimeIgenerate6FpnFciEnv__v_; -text: .text%__1cMmulD_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cParrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: arguments.o; -text: .text%__1cJArgumentsWPropertyList_get_value6FpnOSystemProperty_pkc_4_; -text: .text%__1cJArgumentsFparse6FpknOJavaVMInitArgs__i_; -text: .text%__1cKNoopGCTaskQcreate_on_c_heap6F_p0_; -text: .text%__1cJAssemblerFxchgl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerFxchgq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJArgumentsSparse_vm_init_args6FpknOJavaVMInitArgs__i_; -text: .text%__1cJAssemblerIcmpxchgl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cICodeHeap2t6M_v_; -text: .text%__1cHVM_ExitNset_vm_exited6F_i_; -text: .text%__1cQRelocationHolder2t6M_v_; -text: .text%__1cICodeHeapFclear6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; -text: .text%__1cLsymbolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cJArgumentsSset_bytecode_flags6F_v_; -text: .text%__1cJArgumentsUset_ergonomics_flags6F_v_; -text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsMget_property6Fpkc_2_; -text: .text%__1cLsymbolKlassOset_alloc_size6MI_v_; -text: .text%__1cLsymbolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cNGCTaskManagerKthreads_do6MpnNThreadClosure__v_; -text: .text%__1cNGCTaskManagerKinitialize6M_v_; -text: .text%__1cNGCTaskManager2t6MI_v_; -text: .text%__1cDhpiKinitialize6F_i_; -text: .text%__1cDhpiZinitialize_socket_library6F_i_; -text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_; -text: .text%__1cRInlineCacheBufferKinitialize6F_v_; -text: .text%__1cWInlineCacheBuffer_init6F_v_; -text: .text%__1cJAssemblerHclflush6MnHAddress__v_; -text: .text%__1cOAbstractICacheKinitialize6F_v_; -text: .text%__1cLGCTaskQdDueueQcreate_on_c_heap6F_p0_; -text: .text%__1cMSysClassPathQadd_jars_to_path6Fpcpkc_1_; -text: .text%__1cHGCStats2t6M_v_; -text: .text%__1cQGCPolicyCounters2t6Mpkcii_v_; -text: .text%__1cMSysClassPathPexpand_endorsed6M_v_; -text: .text%__1cMSysClassPath2T6M_v_; -text: .text%__1cLicache_init6F_v_; -text: .text%__1cYGCAdaptivePolicyCounters2t6MpkciipnSAdaptiveSizePolicy__v_; -text: .text%__1cHVM_ExitbJwait_for_threads_in_native_to_block6F_i_; -text: .text%__1cJAssemblerHstmxcsr6MnHAddress__v_; -text: .text%__1cTICacheStubGeneratorVgenerate_icache_flush6MppFpCii_i_v_; -text: .text%__1cMSysClassPath2t6Mpkc_v_; -text: .text%__1cJArgumentsWinit_system_properties6F_v_; -text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_; -text: .text%__1cOchunkpool_init6F_v_; -text: .text%__1cQSystemDictionarybAcompute_java_system_loader6FpnGThread__v_; -text: .text%__1cHVM_ExitEdoit6M_v_; -text: .text%__1cWAdjoiningVirtualSpaces2t6MnNReservedSpace_LLL_v_; -text: .text%__1cUAdjoiningGenerations2t6MnNReservedSpace_LLLLLLL_v_; -text: .text%__1cHOrLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cZCompiledArgumentOopFinderRhandle_oop_offset6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: adaptiveSizePolicy.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: regmask.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: indexSet.o; -text: .text%__1cFframeVinterpreter_frame_mdp6kM_pC_; -text: .text%__1cPvm_init_globals6F_v_; -text: .text%__1cQSystemDictionaryKclasses_do6FpFpnMklassOopDesc__v_v_; -text: .text%__1cQSystemDictionaryKmethods_do6FpFpnNmethodOopDesc__v_v_; -text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_; -text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_; -text: .text%__1cMinit_globals6F_i_; -text: .text%__1cMexit_globals6F_v_; -text: .text%__1cOMacroAssemblerKdecrementl6MpnMRegisterImpl_i_v_; -text: .text%__1cKcastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; -text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_; -text: .text%__1cMPeriodicTask2T5B6M_v_; -text: .text%__1cNMemoryServicebFadd_parallel_scavenge_heap_info6FpnUParallelScavengeHeap__v_; -text: .text%__1cMPeriodicTaskJdisenroll6M_v_; -text: .text%__1cSset_init_completed6F_v_; -text: .text%__1cNMemoryServiceXadd_psYoung_memory_pool6FpnKPSYoungGen_pnNMemoryManager_4_v_; -text: .text%__1cTAbstract_VM_VersionHvm_name6F_pkc_; -text: .text%__1cTAbstract_VM_VersionJvm_vendor6F_pkc_; -text: .text%__1cSobjArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC222_v_; -text: .text%__1cKmutex_init6F_v_; -text: .text%__1cHnmethodbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cNTemplateTableF_goto6F_v_; -text: .text%__1cNTemplateTableGgoto_w6F_v_; -text: .text%__1cNTemplateTableFjsr_w6F_v_; -text: .text%__1cNTemplateTableDjsr6F_v_; -text: .text%__1cNinstanceKlassZrelease_C_heap_structures6M_v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCpnMRegisterImpl_3_v_; -text: .text%__1cFJNIidKdeallocate6Fp0_v_; -text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; -text: .text%__1cStemplateTable_init6F_v_; -text: .text%__1cNTemplateTableNpd_initialize6F_v_; -text: .text%__1cNTemplateTableDnop6F_v_; -text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_; -text: .text%__1cNTemplateTableLaconst_null6F_v_; -text: .text%__1cSinstanceKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cKVM_VersionKinitialize6F_v_; -text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_; -text: .text%__1cPVM_Version_init6F_v_; -text: .text%__1cNTemplateTableGbipush6F_v_; -text: .text%__1cNTemplateTableGsipush6F_v_; -text: .text%__1cYVM_Version_StubGeneratorTgenerate_getPsrInfo6M_pC_; -text: .text%__1cNTemplateTableGldc2_w6F_v_; -text: .text%__1cNTemplateTableFiload6F_v_; -text: .text%__1cNTemplateTableLfast_iload26F_v_; -text: .text%__1cNTemplateTableKfast_iload6F_v_; -text: .text%__1cNTemplateTableFlload6F_v_; -text: .text%__1cNTemplateTableFfload6F_v_; -text: .text%__1cNTemplateTableFdload6F_v_; -text: .text%__1cNTemplateTableFaload6F_v_; -text: .text%__1cVInterfaceSupport_init6F_v_; -text: .text%__1cNTemplateTableKwide_iload6F_v_; -text: .text%__1cNTemplateTableKwide_lload6F_v_; -text: .text%__1cNTemplateTableKwide_fload6F_v_; -text: .text%__1cNTemplateTableKwide_dload6F_v_; -text: .text%__1cNTemplateTableKwide_aload6F_v_; -text: .text%__1cScheck_ThreadShadow6F_v_; -text: .text%__1cNTemplateTableGiaload6F_v_; -text: .text%__1cNTemplateTableGlaload6F_v_; -text: .text%__1cNTemplateTableGfaload6F_v_; -text: .text%__1cNTemplateTableGdaload6F_v_; -text: .text%__1cNTemplateTableGaaload6F_v_; -text: .text%__1cNTemplateTableGbaload6F_v_; -text: .text%__1cNTemplateTableGcaload6F_v_; -text: .text%__1cNTemplateTableMfast_icaload6F_v_; -text: .text%__1cNTemplateTableGsaload6F_v_; -text: .text%__1cSReferenceProcessorMinit_statics6F_v_; -text: .text%__1cXreferenceProcessor_init6F_v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl_33_v_; -text: .text%__1cZInterpreterMacroAssemblerUdispatch_only_normal6MnITosState__v_; -text: .text%__1cNTemplateTableHaload_06F_v_; -text: .text%__1cNTemplateTableGistore6F_v_; -text: .text%__1cNTemplateTableGlstore6F_v_; -text: .text%__1cNTemplateTableGfstore6F_v_; -text: .text%__1cNTemplateTableGdstore6F_v_; -text: .text%__1cNTemplateTableGastore6F_v_; -text: .text%__1cNTemplateTableLwide_istore6F_v_; -text: .text%__1cNTemplateTableLwide_lstore6F_v_; -text: .text%__1cNTemplateTableLwide_fstore6F_v_; -text: .text%__1cNTemplateTableLwide_dstore6F_v_; -text: .text%__1cNTemplateTableLwide_astore6F_v_; -text: .text%__1cNTemplateTableHiastore6F_v_; -text: .text%__1cNTemplateTableHlastore6F_v_; -text: .text%__1cNTemplateTableHfastore6F_v_; -text: .text%__1cNTemplateTableHdastore6F_v_; -text: .text%__1cNTemplateTableHaastore6F_v_; -text: .text%__1cNTemplateTableHbastore6F_v_; -text: .text%__1cNMemoryServiceVadd_psOld_memory_pool6FpnIPSOldGen_pnNMemoryManager__v_; -text: .text%__1cNTemplateTableHsastore6F_v_; -text: .text%__1cZInterpreterMacroAssemblerbFset_method_data_pointer_for_bcp6M_v_; -text: .text%__1cKPSYoungGenUset_space_boundaries6MLL_v_; -text: .text%__1cKPSYoungGenbGcompute_initial_space_boundaries6M_v_; -text: .text%__1cKPSYoungGenPinitialize_work6M_v_; -text: .text%__1cKPSYoungGenKinitialize6MnNReservedSpace_L_v_; -text: .text%__1cNTemplateTableDpop6F_v_; -text: .text%__1cNTemplateTableEpop26F_v_; -text: .text%__1cNTemplateTableDdup6F_v_; -text: .text%__1cNTemplateTableGdup_x16F_v_; -text: .text%__1cNTemplateTableGdup_x26F_v_; -text: .text%__1cNTemplateTableEdup26F_v_; -text: .text%__1cNTemplateTableHdup2_x16F_v_; -text: .text%__1cNTemplateTableHdup2_x26F_v_; -text: .text%__1cNTemplateTableEswap6F_v_; -text: .text%__1cKPSYoungGenYinitialize_virtual_space6MnNReservedSpace_L_v_; -text: .text%__1cKPSYoungGen2t6MLLL_v_; -text: .text%__1cNTemplateTableEidiv6F_v_; -text: .text%__1cNTemplateTableEirem6F_v_; -text: .text%__1cNTemplateTableElmul6F_v_; -text: .text%__1cNTemplateTableEldiv6F_v_; -text: .text%__1cNTemplateTableElrem6F_v_; -text: .text%__1cNTemplateTableElshl6F_v_; -text: .text%__1cNTemplateTableElshr6F_v_; -text: .text%__1cNTemplateTableFlushr6F_v_; -text: .text%__1cRaddL_rReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cRaddL_mem_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNTemplateTableEineg6F_v_; -text: .text%__1cNTemplateTableElneg6F_v_; -text: .text%__1cLVtableStubsKinitialize6F_v_; -text: .text%__1cNTemplateTableEfneg6F_v_; -text: .text%__1cNTemplateTableEdneg6F_v_; -text: .text%__1cNTemplateTableEiinc6F_v_; -text: .text%__1cNTemplateTableJwide_iinc6F_v_; -text: .text%__1cMincL_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNTemplateTableElcmp6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o; -text: .text%__1cKPSScavengeKinitialize6F_v_; -text: .text%__1cQinterpreter_init6F_v_; -text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cNMemoryServiceWadd_psPerm_memory_pool6FpnJPSPermGen_pnNMemoryManager__v_; -text: .text%__1cNMemoryServiceZadd_code_heap_memory_pool6FpnICodeHeap__v_; -text: .text%__1cNTemplateTableDret6F_v_; -text: .text%__1cNTemplateTableIwide_ret6F_v_; -text: .text%__1cNTemplateTableLtableswitch6F_v_; -text: .text%__1cNTemplateTableMlookupswitch6F_v_; -text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; -text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; -text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; -text: .text%__1cOsalI_mem_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cSPSPromotionManagerKinitialize6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o; -text: .text%__1cNTemplateTableIgetfield6Fi_v_; -text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cNTemplateTableIputfield6Fi_v_; -text: .text%__1cNTemplateTableJputstatic6Fi_v_; -text: .text%__1cJPSPermGen2t6MnNReservedSpace_LLLLpkci_v_; -text: .text%__1cXNativeSignatureIteratorHdo_byte6M_v_; -text: .text%__1cIPSOldGen2t6MLLLpkci_v_; -text: .text%__1cPmethodDataKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cNTemplateTableNinvokevirtual6Fi_v_; -text: .text%__1cNTemplateTableNinvokespecial6Fi_v_; -text: .text%__1cNTemplateTableMinvokestatic6Fi_v_; -text: .text%__1cNTemplateTableRfast_invokevfinal6Fi_v_; -text: .text%__1cNTemplateTablePinvokeinterface6Fi_v_; -text: .text%__1cNTemplateTableE_new6F_v_; -text: .text%__1cNTemplateTableInewarray6F_v_; -text: .text%__1cNTemplateTableJanewarray6F_v_; -text: .text%__1cNTemplateTableLarraylength6F_v_; -text: .text%__1cNTemplateTableJcheckcast6F_v_; -text: .text%__1cNTemplateTableKinstanceof6F_v_; -text: .text%__1cNTemplateTableL_breakpoint6F_v_; -text: .text%__1cNTemplateTableGathrow6F_v_; -text: .text%__1cNTemplateTableMmonitorenter6F_v_; -text: .text%__1cNTemplateTableLmonitorexit6F_v_; -text: .text%__1cNTemplateTableEwide6F_v_; -text: .text%__1cNTemplateTableOmultianewarray6F_v_; -text: .text%__1cIPSOldGen2t6MnNReservedSpace_LLLLpkci_v_; -text: .text%__1cQvtableStubs_init6F_v_; -text: .text%__1cQaccessFlags_init6F_v_; -text: .text%__1cSInterpreterRuntimeYthrow_ClassCastException6FpnKJavaThread_pnHoopDesc__v_; -text: .text%__1cSInterpreterRuntimeSupdate_mdp_for_ret6FpnKJavaThread_i_v_; -text: .text%__1cNeventlog_init6F_v_; -text: .text%__1cOMacroAssemblerGc2bool6MpnMRegisterImpl__v_; -text: .text%__1cPmethodDataKlassOset_alloc_size6MI_v_; -text: .text%__1cFVTuneEexit6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cXSignatureHandlerLibraryQset_handler_blob6F_pC_; -text: .text%__1cOMacroAssemblerRsign_extend_short6MpnMRegisterImpl__v_; -text: .text%__1cLPSMarkSweepKinitialize6F_v_; -text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o; -text: .text%__1cVcreate_initial_thread6FnGHandle_pnKJavaThread_pnGThread__pnHoopDesc__: thread.o; -text: .text%__1cbAcall_initializeSystemClass6FpnGThread__v_: thread.o; -text: .text%__1cWreset_vm_info_property6FpnGThread__v_: thread.o; -text: .text%__1cPmethodDataKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cHRetDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cNWatcherThread2t6M_v_; -text: .text%__1cNWatcherThreadDrun6M_v_; -text: .text%__1cNWatcherThreadFstart6F_v_; -text: .text%__1cNWatcherThreadEstop6F_v_; -text: .text%__1cOMacroAssemblerQsign_extend_byte6MpnMRegisterImpl__v_; -text: .text%__1cHRetDataJfixup_ret6MinQmethodDataHandle__pC_; -text: .text%__1cKvtune_init6F_v_; -text: .text%__1cLmethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cbAPSGCAdaptivePolicyCounters2t6MpkciipnUPSAdaptiveSizePolicy__v_; -text: .text%__1cKDictionaryKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cKDictionaryKclasses_do6MpFpnMklassOopDesc__v_v_; -text: .text%__1cbCAbstractInterpreterGeneratorbFgenerate_slow_signature_handler6M_pC_; -text: .text%__1cUInterpreterGeneratorTgenerate_math_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cUInterpreterGeneratorXgenerate_abstract_entry6M_pC_; -text: .text%__1cUInterpreterGeneratorUgenerate_empty_entry6M_pC_; -text: .text%__1cKDictionaryKfree_entry6MpnPDictionaryEntry__v_; -text: .text%__1cUInterpreterGeneratorXgenerate_accessor_entry6M_pC_; -text: .text%__1cKDictionary2t6Mi_v_; -text: .text%__1cJBytecodesKinitialize6F_v_; -text: .text%__1cObytecodes_init6F_v_; -text: .text%__1cJBytecodesNpd_initialize6F_v_; -text: .text%__1cHCompileRpd_compiler2_init6F_v_; -text: .text%__1cKC2CompilerKinitialize6M_v_; -text: .text%__1cFStateQ_sub_Op_TailJump6MpknENode__v_; -text: .text%__1cMorL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cUInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cWinvocationCounter_init6F_v_; -text: .text%__1cQPlaceholderTable2t6Mi_v_; -text: .text%__1cFStateL_sub_Op_OrL6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_NegF6MpknENode__v_; -text: .text%__1cQprint_statistics6F_v_; -text: .text%__1cLbefore_exit6FpnKJavaThread__v_; -text: .text%__1cFStateP_sub_Op_MoveL2D6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_MoveF2I6MpknENode__v_; -text: .text%__1cHvm_exit6Fi_v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cQjava_lang_ThreadPcompute_offsets6F_v_; -text: .text%__1cVjava_lang_ThreadGroupPcompute_offsets6F_v_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectPcompute_offsets6F_v_; -text: .text%__1cYjava_lang_reflect_MethodPcompute_offsets6F_v_; -text: .text%__1cOThreadCriticalKinitialize6F_v_; -text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; -text: .text%__1cYjava_lang_reflect_MethodNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cYsun_reflect_ConstantPoolPcompute_offsets6F_v_; -text: .text%__1cbIjava_security_AccessControlContextPcompute_offsets6F_v_; -text: .text%__1cQjava_lang_SystemPcompute_offsets6F_v_; -text: .text%__1cPjava_nio_BufferPcompute_offsets6F_v_; -text: .text%__1cFStateO_sub_Op_CMoveD6MpknENode__v_; -text: .text%__1cZsun_misc_AtomicLongCSImplPcompute_offsets6F_v_; -text: .text%__1cFStateO_sub_Op_CastPP6MpknENode__v_; -text: .text%__1cWThreadLocalAllocBufferWstartup_initialization6F_v_; -text: .text%__1cLJavaClassesbAcompute_hard_coded_offsets6F_v_; -text: .text%__1cLJavaClassesPcompute_offsets6F_v_; -text: .text%__1cPGlobalTLABStats2t6M_v_; -text: .text%__1cQjavaClasses_init6F_v_; -text: .text%jni_ToReflectedMethod: jni.o; -text: .text%__1cSThreadLocalStorageEinit6F_v_; -text: .text%__1cNThreadServiceEinit6F_v_; -text: .text%__1cYjni_GetBooleanField_addr6F_pC_; -text: .text%__1cVjni_GetByteField_addr6F_pC_; -text: .text%__1cVjni_GetCharField_addr6F_pC_; -text: .text%__1cWjni_GetShortField_addr6F_pC_; -text: .text%__1cUjni_GetIntField_addr6F_pC_; -text: .text%__1cVjni_GetLongField_addr6F_pC_; -text: .text%__1cWjni_GetFloatField_addr6F_pC_; -text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; -text: .text%__1cXjni_GetDoubleField_addr6F_pC_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: phase.o; -text: .text%__1cTConstantDoubleValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; -text: .text%__1cKPerfMemoryUcreate_memory_region6FL_v_; -text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_L_; -text: .text%__1cOtailjmpIndNodeFreloc6kM_i_; -text: .text%__1cETypeRInitialize_shared6FpnHCompile__v_; -text: .text%__1cWconstantPoolCacheKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cWconstantPoolCacheKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_; -text: .text%__1cRconstantPoolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cFciEnvXget_or_create_exception6MrpnI_jobject_nMsymbolHandle__pnKciInstance__; -text: .text%__1cRconstantPoolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cKPerfMemoryHdestroy6F_v_; -text: .text%__1cQconstMethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cKPerfMemoryKinitialize6F_v_; -text: .text%__1cPperfMemory_exit6F_v_; -text: .text%__1cQconstMethodKlassOset_alloc_size6MI_v_; -text: .text%__1cPperfMemory_init6F_v_; -text: .text%__1cNGrowableArray4CpnIPerfData__JappendAll6Mpk2_v_; -text: .text%__1cMPerfDataListFclone6M_p0_; -text: .text%__1cQconstMethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cMciKlassKlassEmake6F_p0_; -text: .text%__1cMPerfDataList2t6Mp0_v_; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnPPerfLongCounter__; -text: .text%__1cPPerfDataManagerHsampled6F_pnMPerfDataList__; -text: .text%__1cMmulD_memNodeFreloc6kM_i_; -text: .text%__1cPPerfDataManagerHdestroy6F_v_; -text: .text%__1cMsubD_immNodeFreloc6kM_i_; -text: .text%__1cMsubF_memNodeFreloc6kM_i_; -text: .text%lookupDirectBufferClasses: jni.o; -text: .text%__1cVquicken_jni_functions6F_v_; -text: .text%JNI_CreateJavaVM; -text: .text%__1cFParseWprofile_null_checkcast6M_v_; -text: .text%__1cQJNI_FastGetFieldbFgenerate_fast_get_boolean_field6F_pC_; -text: .text%__1cOsalI_mem_1NodeFreloc6kM_i_; -text: .text%__1cIciMethodMvtable_index6M_i_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_byte_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_char_field6F_pC_; -text: .text%__1cMmulI_memNodeFreloc6kM_i_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_short_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbBgenerate_fast_get_int_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_long_field6F_pC_; -text: .text%__1cMincL_memNodeFreloc6kM_i_; -text: .text%__1cRaddL_mem_rRegNodeFreloc6kM_i_; -text: .text%__1cRaddL_mem_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMincL_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_float_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_double_field6F_pC_; -text: .text%__1cNcmovL_memNodeFreloc6kM_i_; -text: .text%__1cKJNIHandlesKinitialize6F_v_; -text: .text%__1cQjni_handles_init6F_v_; -text: .text%JVM_InitProperties; -text: .text%JVM_Halt; -text: .text%JVM_MaxMemory; -text: .text%JVM_GetClassDeclaredMethods; -text: .text%__1cOsalI_mem_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_InitializeSocketLibrary; -text: .text%JVM_Socket; -text: .text%__1cPciObjArrayKlass2t6MpnIciSymbol_pnHciKlass_i_v_; -text: .text%__1cbEinitialize_converter_functions6F_v_; -text: .text%JVM_SupportsCX8; -text: .text%__1cUciObjArrayKlassKlassEmake6F_p0_; -text: .text%__1cTcompilerOracle_init6F_v_; -text: .text%__1cOCompilerOraclePparse_from_file6F_v_; -text: .text%__1cKTypeOopPtrEmake6FnHTypePtrDPTR_i_pk0_; -text: .text%__1cKTypeOopPtrFxdual6kM_pknEType__; -text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; -text: .text%__1cVcompiledICHolderKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cVcompiledICHolderKlassOset_alloc_size6MI_v_; -text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cRJvmtiEventEnabled2t6M_v_; -text: .text%__1cRJvmtiEventEnabledFclear6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; -text: .text%__1cNGrowableArray4CpnIciMethod__Egrow6Mi_v_; -text: .text%__1cNCompileBrokerQset_should_block6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_start6F_v_; -text: .text%__1cPGenerationSizerQinitialize_flags6M_v_; -text: .text%__1cUJvmtiEventControllerHvm_init6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_death6F_v_; -text: .text%__1cNCompileBrokerVinit_compiler_threads6Fi_v_; -text: .text%__1cUParallelScavengeHeapItop_addr6kM_ppnIHeapWord__; -text: .text%__1cUParallelScavengeHeapIend_addr6kM_ppnIHeapWord__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEventController.o; -text: .text%__1cLJvmtiExportRenter_start_phase6F_v_; -text: .text%__1cUParallelScavengeHeapEheap6F_p0_; -text: .text%__1cUParallelScavengeHeapNgc_threads_do6kMpnNThreadClosure__v_; -text: .text%__1cUParallelScavengeHeapYpermanent_object_iterate6MpnNObjectClosure__v_; -text: .text%__1cLJvmtiExportQenter_live_phase6F_v_; -text: .text%__1cLJvmtiExportNpost_vm_start6F_v_; -text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_; -text: .text%__1cLJvmtiExportNpost_vm_death6F_v_; -text: .text%__1cLJvmtiExportbMtransition_pending_onload_raw_monitors6F_v_; -text: .text%__1cUParallelScavengeHeapMmax_capacity6kM_L_; -text: .text%__1cUJvmtiPendingMonitorsXtransition_raw_monitors6F_v_; -text: .text%__1cUParallelScavengeHeapPpost_initialize6M_v_; -text: .text%__1cUParallelScavengeHeapKinitialize6M_i_; -text: .text%__1cHoopDescLheader_size6F_i_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o; -text: .text%__1cPClassFileParserbFjava_lang_ref_Reference_fix_pre6MpnPtypeArrayHandle_nSconstantPoolHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cPClassFileParserXjava_lang_Class_fix_pre6MpnOobjArrayHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cPClassFileParserYjava_lang_Class_fix_post6Mpi_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiImpl.o; -text: .text%__1cNGrowableArray4CpnPJvmtiRawMonitor__Uclear_and_deallocate6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o; -text: .text%__1cRCompilationPolicyUcompleted_vm_startup6F_v_; -text: .text%__1cOtypeArrayKlassKinitialize6MpnGThread__v_; -text: .text%__SLIP.DELETER__C: ostream.o; -text: .text%__1cWcompilationPolicy_init6F_v_; -text: .text%__1cMostream_exit6F_v_; -text: .text%__1cTtypeArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cbCTwoGenerationCollectorPolicyMrem_set_name6M_nJGenRemSetEName__; -text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cQostream_init_log6F_v_; -text: .text%__1cIUniversePcheck_alignment6FLLpkc_v_; -text: .text%__1cIUniverseHgenesis6FpnGThread__v_; -text: .text%__1cIUniverseNfixup_mirrors6FpnGThread__v_; -text: .text%__1cMostream_init6F_v_; -text: .text%__1cNdefaultStreamEinit6M_v_; -text: .text%__1cKklassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cKklassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cNuniverse_init6F_i_; -text: .text%__1cIUniversePinitialize_heap6F_i_; -text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_; -text: .text%__1cOuniverse2_init6F_v_; -text: .text%__1cIUniverseYcompute_base_vtable_size6F_v_; -text: .text%__1cCosXnon_memory_address_word6F_pc_; -text: .text%__1cCosGinit_26F_i_; -text: .text%__1cbCTwoGenerationCollectorPolicyUinitialize_size_info6M_v_; -text: .text%__1cCosEinit6F_v_; -text: .text%__1cCosHSolarisUsynchronization_init6F_v_; -text: .text%Unsafe_SetNativeLong; -text: .text%__1cCosHSolarisOlibthread_init6F_v_; -text: .text%__1cJLoadFNodeMstore_Opcode6kM_i_; -text: .text%Unsafe_FreeMemory; -text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; -text: .text%Unsafe_PageSize; -text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; -text: .text%__1cNpriocntl_stub6FinGidtype_iipc_l_: os_solaris.o; -text: .text%__1cbCTwoGenerationCollectorPolicyQinitialize_flags6M_v_; -text: .text%__1cCosLsignal_wait6F_i_; -text: .text%JVM_RegisterUnsafeMethods; -text: .text%__1cCosNsignal_notify6Fi_v_; -text: .text%__1cCosOsignal_init_pd6F_v_; -text: .text%__1cLClassLoaderQload_zip_library6F_v_; -text: .text%__1cLClassLoaderZcreate_package_info_table6F_v_; -text: .text%__1cLClassLoaderKinitialize6F_v_; -text: .text%__1cLClassLoaderVcompute_Object_vtable6F_i_; -text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; -text: .text%__1cNCollectedHeap2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: codeCache.o; -text: .text%__1cQclassLoader_init6F_v_; -text: .text%__1cCosSget_temp_directory6F_pkc_; -text: .text%__1cVLoaderConstraintTable2t6Mi_v_; -text: .text%__1cCosbDallocate_thread_local_storage6F_i_; -text: .text%__1cOcodeCache_init6F_v_; -text: .text%__1cJCodeCacheKinitialize6F_v_; -text: .text%__1cNIdealLoopTreeQsplit_outer_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cKfix_parent6FpnNIdealLoopTree_1_v_: loopnode.o; -text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; -text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cNIdealLoopTreeUmerge_many_backedges6MpnOPhaseIdealLoop__v_; -text: .text%__1cRLowMemoryDetectorKinitialize6F_v_; -text: .text%__1cLmethodKlassOset_alloc_size6MI_v_; -text: .text%__1cNExceptionBlob2n6FLI_pv_; -text: .text%__1cNExceptionBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNExceptionBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cQUncommonTrapBlob2n6FLI_pv_; -text: .text%__1cQUncommonTrapBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cQUncommonTrapBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cSDeoptimizationBlob2n6FLI_pv_; -text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; -text: .text%__1cSDeoptimizationBlob2t6MpnKCodeBuffer_ipnJOopMapSet_iiii_v_; -text: .text%__1cCosbDinit_system_properties_values6F_v_; -text: .text%__1cCosHSolarisWinitialize_system_info6F_v_; -text: .text%__1cCosPphysical_memory6F_X_; -text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_; -text: .text%__1cSThreadLocalStorageHpd_init6F_v_; -text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: machnode.o; -text: .text%__1cPmanagement_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: cmsAdaptiveSizePolicy.o; -text: .text%__1cKManagementEinit6F_v_; -text: .text%__1cKManagementKinitialize6FpnGThread__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; -text: .text%__1cOmarksweep_init6F_v_; -text: .text%__1cCosZset_memory_serialize_page6FpC_v_; -text: .text%__1cNReservedSpaceUpage_align_size_down6FL_L_; -text: .text%__1cNReservedSpaceYallocation_align_size_up6FL_L_; -text: .text%__1cCosLinit_random6Fl_v_; -text: .text%__1cHOrLNodeJideal_reg6kM_I_; -text: .text%__1cOvmStructs_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; -text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; -text: .text%__1cQVMOperationQdDueue2t6M_v_; -text: .text%__1cCosGstrdup6Fpkc_pc_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: methodLiveness.o; -text: .text%__1cCosXterminate_signal_thread6F_v_; -text: .text%__1cCosLsignal_init6F_v_; -text: .text%__1cMsubD_immNodeKconst_size6kM_i_; -text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; -text: .text%__1cOtailjmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSobjArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cIVMThreadGcreate6F_v_; -text: .text%__1cIVMThread2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cIVMThreadDrun6M_v_; -text: .text%__1cWResolveOopMapConflictsUdo_potential_rewrite6MpnGThread__nMmethodHandle__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; -text: .text%__1cNCellTypeStateImake_top6F_0_; -text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_2_v_; -text: .text%__1cNCellTypeStateLmake_bottom6F_0_; -text: .text%__1cNcmovL_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNSharedRuntimebBgenerate_class_cast_message6FpnKJavaThread_pkc_pc_; -text: .text%__1cIVMThreadEloop6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: matcher.o; -text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_; -text: .text%__1cNMemoryManagerbDget_psScavenge_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cNMemoryManagerbEget_psMarkSweep_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cJAssemblerFimull6MpnMRegisterImpl_2_v_; -text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; -text: .text%__1cNRegisterSaverYrestore_result_registers6FpnOMacroAssembler__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o; -text: .text%__1cORuntimeServiceYrecord_application_start6F_v_; -text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__L_; -text: .text%__1cORuntimeServiceEinit6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_i_v_; -text: .text%__1cLStatSamplerKinitialize6F_v_; -text: .text%__1cLStatSamplerGengage6F_v_; -text: .text%__1cLStatSamplerJdisengage6F_v_; -text: .text%__1cLStatSamplerHdestroy6F_v_; -text: .text%__1cSobjArrayKlassKlassbEallocate_system_objArray_klass6MpnGThread__pnMklassOopDesc__; -text: .text%__1cLOptoRuntimeUmultianewarray5_Type6F_pknITypeFunc__; -text: .text%__1cLStatSamplerbMcreate_system_property_instrumentation6FpnGThread__v_; -text: .text%__1cLStatSamplerUcreate_misc_perfdata6F_v_; -text: .text%__1cLStatSamplerXcreate_sampled_perfdata6F_v_; -text: .text%__1cJAssemblerDorq6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEsarl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEsarq6MpnMRegisterImpl__v_; -text: .text%__1cLOptoRuntimeUmultianewarray4_Type6F_pknITypeFunc__; -text: .text%__1cJAssemblerEshll6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEshlq6MpnMRegisterImpl__v_; -text: .text%__1cNStubGeneratorQgenerate_initial6M_v_; -text: .text%__1cNStubGeneratorYgenerate_catch_exception6M_pC_; -text: .text%__1cNStubGeneratorSgenerate_call_stub6MrpC_1_; -text: .text%__1cNStubGeneratorbAgenerate_forward_exception6M_pC_; -text: .text%__1cNStubGeneratorMgenerate_all6M_v_; -text: .text%__1cNStubGeneratorSgenerate_d2l_fixup6M_pC_; -text: .text%__1cNStubGeneratorSgenerate_d2i_fixup6M_pC_; -text: .text%__1cNStubGeneratorSgenerate_f2l_fixup6M_pC_; -text: .text%__1cNStubGeneratorSgenerate_f2i_fixup6M_pC_; -text: .text%__1cLOptoRuntimeUmultianewarray3_Type6F_pknITypeFunc__; -text: .text%__1cNStubGeneratorTgenerate_verify_oop6M_pC_; -text: .text%__1cNStubGeneratorVgenerate_verify_mxcsr6M_pC_; -text: .text%__1cMStubRoutinesLinitialize16F_v_; -text: .text%__1cMStubRoutinesLinitialize26F_v_; -text: .text%__1cSstubRoutines_init16F_v_; -text: .text%__1cSstubRoutines_init26F_v_; -text: .text%__1cLMoveL2DNodeJideal_reg6kM_I_; -text: .text%__1cLMoveF2INodeJideal_reg6kM_I_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cLOptoRuntimeUmultianewarray2_Type6F_pknITypeFunc__; -text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl__v_; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_COMPILER2_i486 --- a/make/solaris/makefiles/reorder_COMPILER2_i486 Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8395 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; - - -text: .text%__1cQIndexSetIteratorEnext6M_I_: ifg.o; -text: .text%__1cSPSPromotionManagerWcopy_to_survivor_space6MpnHoopDesc__2_; -text: .text%__1cNinstanceKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cQIndexSetIteratorQadvance_and_next6M_I_; -text: .text%__1cQIndexSetIteratorEnext6M_I_: indexSet.o; -text: .text%__1cNSharedRuntimeElrem6Fxx_x_; -text: .text%__1cCosOjavaTimeMillis6F_x_; -text: .text%__1cJMarkSweepO_mark_and_push6FppnHoopDesc__v_; -text: .text%__1cQIndexSetIteratorEnext6M_I_: chaitin.o; -text: .text%__1cNSharedRuntimeEldiv6Fxx_x_; -text: .text%__1cIPhaseIFGIadd_edge6MII_i_; -text: .text%__1cQIndexSetIterator2t6MpnIIndexSet__v_; -text: .text%__1cIMachNodeNrematerialize6kM_i_; -text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cMOopTaskQdDueueKpop_global6MrpnHoopDesc__i_; -text: .text%__1cPOopTaskQdDueueSetPsteal_best_of_26MipirpnHoopDesc__i_; -text: .text%__1cQIndexSetIteratorEnext6M_I_: live.o; -text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOtypeArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cIIndexSetLalloc_block6M_pn0AIBitBlock__; -text: .text%__1cHRegMaskFis_UP6kM_i_; -text: .text%__1cIMachNodeHis_Mach6M_p0_: ad_i486_misc.o; -text: .text%__1cDLRGOcompute_degree6kMr0_i_; -text: .text%__1cIIndexSetWalloc_block_containing6MI_pn0AIBitBlock__; -text: .text%__1cRMachSpillCopyNodeMis_SpillCopy6M_p0_: ad_i486.o; -text: .text%__1cENodeEjvms6kM_pnIJVMState__; -text: .text%__1cIMachNodeJideal_reg6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeHis_Mach6M_pnIMachNode__: classes.o; -text: .text%__1cJMarkSweepPmark_and_follow6FppnHoopDesc__v_; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: ad_i486_misc.o; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: classes.o; -text: .text%__1cHRegMaskJis_bound16kM_i_; -text: .text%__1cJCProjNodeNis_block_proj6kM_pknENode__: classes.o; -text: .text%__1cENodeHis_Copy6kM_I_: classes.o; -text: .text%__1cQObjectStartArrayMobject_start6MpnIHeapWord__2_: cardTableExtension.o; -text: .text%__1cRMachSpillCopyNodeHis_Copy6kM_I_: ad_i486.o; -text: .text%__1cNobjArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cENodeHis_Copy6kM_I_: ad_i486_misc.o; -text: .text%__1cETypeDcmp6Fkpk03_i_; -text: .text%__1cOPhaseIdealLoopOidom_no_update6kMpnENode__2_: loopnode.o; -text: .text%__1cHRegMaskJis_bound26kM_i_; -text: .text%__1cENodeMis_SpillCopy6M_pnRMachSpillCopyNode__: ad_i486_misc.o; -text: .text%__1cHRegMaskESize6kM_I_; -text: .text%__1cNRelocIteratorEnext6M_i_: relocInfo.o; -text: .text%__1cJeRegIOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cUGenericGrowableArrayLraw_at_grow6MipknEGrET__pv_; -text: .text%__1cJVectorSet2R6MI_rnDSet__; -text: .text%__1cIMachNodeHis_Mach6M_p0_: ad_i486.o; -text: .text%__1cXresource_allocate_bytes6FI_pc_; -text: .text%__1cDff16FI_i_; -text: .text%__1cJeRegPOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cIProjNodeHis_Proj6M_p0_; -text: .text%__1cENodeGis_CFG6kM_i_: classes.o; -text: .text%__1cOPhaseIdealLoopSget_ctrl_no_update6kMpnENode__2_: loopopts.o; -text: .text%__1cIIndexSetKinitialize6MI_v_; -text: .text%__1cMloadConINodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMloadConINodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cPOopTaskQdDueueSetFsteal6MipirpnHoopDesc__i_; -text: .text%__1cOPhaseIdealLoopSget_ctrl_no_update6kMpnENode__2_: loopnode.o; -text: .text%__1cMloadConINodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cHPhiNodeGis_Phi6M_p0_: cfgnode.o; -text: .text%__1cENodeGpinned6kM_i_: classes.o; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: ad_i486.o; -text: .text%__1cIIndexSetKfree_block6MI_v_; -text: .text%__1cIMachNodeGOpcode6kM_i_; -text: .text%__1cWPSScavengeRootsClosureGdo_oop6MppnHoopDesc__v_: psTasks.o; -text: .text%__1cITypeNodeLbottom_type6kM_pknEType__; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: ad_i486_misc.o; -text: .text%__1cENodeIout_grow6MI_v_; -text: .text%__1cNSafePointNodeGis_CFG6kM_i_: callnode.o; -text: .text%__1cENodeHadd_req6Mp0_v_; -text: .text%__1cKTypeOopPtrFklass6kM_pnHciKlass__: type.o; -text: .text%__1cMPhaseChaitinTinterfere_with_live6MIpnIIndexSet__v_; -text: .text%__1cNRelocIteratorEnext6M_i_: nmethod.o; -text: .text%__1cETypeFuhash6Fkpk0_i_; -text: .text%__1cJCProjNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cENodeNrematerialize6kM_i_: classes.o; -text: .text%__1cJloadPNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cIrc_class6FnHOptoRegEName__nCRC__: ad_i486.o; -text: .text%__1cNMachIdealNodeErule6kM_I_: ad_i486.o; -text: .text%__1cKjmpDirNodeNis_block_proj6kM_pknENode__: ad_i486_misc.o; -text: .text%__1cRMachSpillCopyNodeJideal_reg6kM_I_: ad_i486.o; -text: .text%__1cOlower_pressure6FpnDLRG_IpnFBlock_pI4_v_: ifg.o; -text: .text%__1cMget_live_bit6Fpii_i_: buildOopMap.o; -text: .text%__1cMPhaseChaitinLskip_copies6MpnENode__2_; -text: .text%__1cIMachNodeQis_MachNullCheck6M_pnRMachNullCheckNode__: ad_i486_misc.o; -text: .text%__1cINodeHashLhash_delete6MpknENode__i_; -text: .text%__1cEDictGInsert6Mpv1i_1_; -text: .text%__1cICallNodeKmatch_edge6kMI_I_; -text: .text%__1cJMultiNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cHTypeIntCeq6kMpknEType__i_; -text: .text%__1cENodeGis_CFG6kM_i_: cfgnode.o; -text: .text%__1cNMachIdealNodeMideal_Opcode6kM_i_: ad_i486.o; -text: .text%__1cETypeJtype_dict6F_pnEDict__; -text: .text%__1cHPhiNodeGOpcode6kM_i_; -text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cENodeHdel_out6Mp0_v_: matcher.o; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: classes.o; -text: .text%__1cFArenaIcontains6kMpkv_i_; -text: .text%__1cINodeHashQhash_find_insert6MpnENode__2_; -text: .text%__1cKRegionNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cIPhaseIFGQeffective_degree6kMI_i_; -text: .text%__1cIProjNodeGis_CFG6kM_i_; -text: .text%__1cIUniverseMnon_oop_word6F_pv_; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: classes.o; -text: .text%__1cIPhaseIFGLremove_node6MI_pnIIndexSet__; -text: .text%__1cIPhaseIFGJre_insert6MI_v_; -text: .text%__1cJraw_score6Fdd_d_: chaitin.o; -text: .text%__1cDLRGFscore6kM_d_; -text: .text%__1cJMarkSweepOIsAliveClosureLdo_object_b6MpnHoopDesc__i_: markSweep.o; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: classes.o; -text: .text%__1cETypeIhashcons6M_pk0_; -text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_; -text: .text%__1cENodeEhash6kM_I_; -text: .text%__1cIProjNodeGpinned6kM_i_; -text: .text%__1cMloadConPNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMloadConPNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cMPhaseChaitinKelide_copy6MpnENode_ipnFBlock_rnJNode_List_6i_i_; -text: .text%__1cHNTarjanEEVAL6M_p0_; -text: .text%__1cMloadConPNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: classes.o; -text: .text%__1cQIndexSetIteratorEnext6M_I_: coalesce.o; -text: .text%__1cWShouldNotReachHereNodeNis_block_proj6kM_pknENode__: ad_i486_misc.o; -text: .text%__1cMMachCallNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cMset_live_bit6Fpii_v_: buildOopMap.o; -text: .text%__1cHCompileRvalid_bundle_info6MpknENode__i_; -text: .text%__1cOPhaseIdealLoopUbuild_loop_late_post6MpnENode_pk0_v_; -text: .text%__1cIProjNodeGOpcode6kM_i_; -text: .text%__1cENodeHdel_out6Mp0_v_: phaseX.o; -text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJPhaseLiveLadd_liveout6MpnFBlock_IrnJVectorSet__v_; -text: .text%__1cDfh16FI_i_; -text: .text%__1cRMachSpillCopyNodeLbottom_type6kM_pknEType__: ad_i486.o; -text: .text%__1cMPhaseChaitinMchoose_color6MrnDLRG_i_nHOptoRegEName__; -text: .text%__1cNIdealLoopTreeJis_member6kMpk0_i_; -text: .text%__1cUCompressedReadStreamIread_int6M_i_: oopMap.o; -text: .text%__1cENodeHis_Copy6kM_I_: cfgnode.o; -text: .text%__1cIMachNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cIConINodeGOpcode6kM_i_; -text: .text%__1cGIfNodeGOpcode6kM_i_; -text: .text%__1cOtypeArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cHTypePtrEhash6kM_i_; -text: .text%__1cMPhaseChaitinQis_high_pressure6MpnFBlock_pnDLRG_I_i_; -text: .text%__1cENode2t6MI_v_; -text: .text%__1cMPhaseChaitinKbias_color6MrnDLRG_i_nHOptoRegEName__; -text: .text%__1cENodeMcisc_operand6kM_i_: classes.o; -text: .text%__1cMOopTaskQdDueueOpop_local_slow6MInOTaskQdDueueSuperDAge__i_; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: typeArrayKlass.o; -text: .text%JVM_ArrayCopy; -text: .text%__1cOtypeArrayKlassQoop_is_typeArray6kM_i_: typeArrayKlass.o; -text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cOPhaseIdealLoopYsplit_if_with_blocks_pre6MpnENode__2_; -text: .text%__1cOPhaseIdealLoopZsplit_if_with_blocks_post6MpnENode__v_; -text: .text%__1cETypeEmeet6kMpk0_2_; -text: .text%__1cETypeLisa_oop_ptr6kM_i_; -text: .text%__1cFArenaIArealloc6MpvII_1_; -text: .text%__1cRMachSpillCopyNodeKin_RegMask6kMI_rknHRegMask__: ad_i486.o; -text: .text%__1cKTypeOopPtrEhash6kM_i_; -text: .text%__1cRMachSpillCopyNodeLout_RegMask6kM_rknHRegMask__: ad_i486.o; -text: .text%__1cIMachNodeMcisc_operand6kM_i_: ad_i486.o; -text: .text%__1cIMachNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: ad_i486_misc.o; -text: .text%__1cKIfTrueNodeGOpcode6kM_i_; -text: .text%__1cIAddPNodeGOpcode6kM_i_; -text: .text%__1cENodeHdel_out6Mp0_v_: graphKit.o; -text: .text%__1cPDictionaryEntrybDprotection_domain_set_oops_do6MpnKOopClosure__v_: dictionary.o; -text: .text%__1cHTypeIntEhash6kM_i_; -text: .text%__1cSPSPromotionManagerUflush_prefetch_queue6M_v_: psPromotionManager.o; -text: .text%__1cMMachProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cMPhaseIterGVNNtransform_old6MpnENode__2_; -text: .text%__1cMMachProjNodeGOpcode6kM_i_; -text: .text%__1cETypeJsingleton6kM_i_; -text: .text%__1cRMachSpillCopyNodePoper_input_base6kM_I_: ad_i486.o; -text: .text%__1cJleaP8NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJleaP8NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cMclr_live_bit6Fpii_v_: buildOopMap.o; -text: .text%__1cJCProjNodeNis_block_proj6kM_pknENode__: cfgnode.o; -text: .text%__1cIMachNodeQis_MachNullCheck6M_pnRMachNullCheckNode__: ad_i486.o; -text: .text%__1cIMachNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cJPhaseLiveGgetset6MpnFBlock__pnIIndexSet__; -text: .text%__1cHConNodeGOpcode6kM_i_; -text: .text%__1cJMarkSweepSMarkAndPushClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cJloadINodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cSis_single_register6FI_i_: postaloc.o; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_: relocInfo.o; -text: .text%__1cILRG_ListGextend6MII_v_; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: classes.o; -text: .text%__1cLIfFalseNodeGOpcode6kM_i_; -text: .text%__1cECopyYconjoint_words_to_higher6FpnIHeapWord_2I_v_: node.o; -text: .text%__1cHTypeIntJsingleton6kM_i_; -text: .text%__1cSCallStaticJavaNodeGOpcode6kM_i_; -text: .text%__1cMPhaseIterGVNWadd_users_to_worklist06MpnENode__v_; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cOPhaseIdealLoopEsort6MpnNIdealLoopTree_2_2_; -text: .text%__1cJPhaseLiveLadd_liveout6MpnFBlock_pnIIndexSet_rnJVectorSet__v_; -text: .text%__1cENodeHis_Mach6M_pnIMachNode__: cfgnode.o; -text: .text%__1cMMutableSpaceMcas_allocate6MI_pnIHeapWord__; -text: .text%__1cHNTarjanICOMPRESS6M_v_; -text: .text%__1cLsymbolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cIciObjectGequals6Mp0_i_; -text: .text%__1cKNode_ArrayGinsert6MIpnENode__v_; -text: .text%__1cKTypeOopPtrCeq6kMpknEType__i_; -text: .text%__1cIBoolNodeGOpcode6kM_i_; -text: .text%__1cNRelocIteratorFreloc6M_pnKRelocation__; -text: .text%__1cENodeEgrow6MI_v_; -text: .text%__1cHTypePtrCeq6kMpknEType__i_; -text: .text%__1cYCallStaticJavaDirectNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNRelocIteratorEnext6M_i_: codeBlob.o; -text: .text%__1cWConstantPoolCacheEntryPfollow_contents6M_v_; -text: .text%__1cWConstantPoolCacheEntryPadjust_pointers6M_v_; -text: .text%__1cJeRegIOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cLemit_opcode6FrnKCodeBuffer_i_v_; -text: .text%__1cMMachProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cENodeNrematerialize6kM_i_: cfgnode.o; -text: .text%__1cIMachNodeLis_MachCall6M_pnMMachCallNode__: ad_i486_misc.o; -text: .text%__1cKup_one_dom6FpnENode__1_: ifnode.o; -text: .text%__1cJMultiNodeIis_Multi6M_p0_; -text: .text%__1cLsymbolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cIIndexSetKinitialize6MIpnFArena__v_; -text: .text%__1cJPhaseLiveKgetfreeset6M_pnIIndexSet__; -text: .text%__1cHnmethodbHfollow_root_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_ppnHoopDesc_iri_v_; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: classes.o; -text: .text%__1cMMachProjNodeLout_RegMask6kM_rknHRegMask__: classes.o; -text: .text%__1cOPhaseIdealLoopUbuild_loop_tree_impl6MpnENode_i_i_; -text: .text%__1cFState2T6M_v_; -text: .text%__1cIParmNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cHTypeInt2t6Miii_v_; -text: .text%__1cIMachNodeQis_MachSafePoint6M_pnRMachSafePointNode__: ad_i486_misc.o; -text: .text%__1cECopyXconjoint_words_to_lower6FpnIHeapWord_2I_v_: node.o; -text: .text%__1cEUTF8Enext6FpkcpH_pc_; -text: .text%__1cHemit_rm6FrnKCodeBuffer_iii_v_; -text: .text%__1cIciObjectEhash6M_i_; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: typeArrayKlass.o; -text: .text%__1cKRegionNodeGOpcode6kM_i_; -text: .text%__1cWNode_Backward_IteratorEnext6M_pnENode__; -text: .text%__1cIMachNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cOPhaseIdealLoopOget_early_ctrl6MpnENode__2_; -text: .text%__1cNCollectedHeapYcommon_mem_allocate_init6FIipnGThread__pnIHeapWord__: typeArrayKlass.o; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: typeArrayKlass.o; -text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cUParallelScavengeHeapVlarge_typearray_limit6M_I_: parallelScavengeHeap.o; -text: .text%__1cOPhaseIdealLoopOset_early_ctrl6MpnENode__v_; -text: .text%__1cHPhiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeLis_MergeMem6M_pnMMergeMemNode__: cfgnode.o; -text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cHNTarjanELINK6Mp01_v_; -text: .text%__1cENodeHdel_out6Mp0_v_: node.o; -text: .text%__1cLuse_dom_lca6FpnFBlock_pnENode_3rnLBlock_Array__1_: gcm.o; -text: .text%__1cIPhaseGVNJtransform6MpnENode__2_; -text: .text%__1cIIndexSetFclear6M_v_: live.o; -text: .text%__1cOPSPromotionLABKinitialize6MnJMemRegion__v_; -text: .text%__1cOPSPromotionLABFflush6M_v_; -text: .text%__1cITypeNodeEhash6kM_I_; -text: .text%__1cJVectorSet2F6kMI_i_; -text: .text%__1cJPhaseLiveHfreeset6MpknFBlock__v_; -text: .text%__1cENodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOPhaseIdealLoopThas_local_phi_input6MpnENode__2_; -text: .text%__1cIBoolNodeHis_Bool6M_p0_: subnode.o; -text: .text%__1cTleaPIdxScaleOffNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNPhaseRegAllocUreg2offset_unchecked6kMnHOptoRegEName__i_; -text: .text%__1cNPhaseRegAllocKreg2offset6kMnHOptoRegEName__i_; -text: .text%__1cTleaPIdxScaleOffNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cIMachNode2t6M_v_; -text: .text%__1cITypeNodeJideal_reg6kM_I_; -text: .text%__1cLTypeInstPtrEhash6kM_i_; -text: .text%__1cFStateRMachOperGenerator6MipnIMachNode_pnHCompile__pnIMachOper__; -text: .text%__1cENodeHis_Loop6M_pnILoopNode__: classes.o; -text: .text%__1cHdom_lca6FpnFBlock_1_1_: gcm.o; -text: .text%__1cENodeNis_block_proj6kM_pk0_; -text: .text%__1cSInterpreterRuntimeInewarray6FpnKJavaThread_nJBasicType_i_v_; -text: .text%__1cPClassFileParserOcheck_property6MipkcipnGThread__v_; -text: .text%__1cKRegionNodeGpinned6kM_i_: classes.o; -text: .text%__1cFMutexGunlock6M_v_; -text: .text%__1cHPhiNodeGpinned6kM_i_: cfgnode.o; -text: .text%__1cIMachNodeQis_MachSafePoint6M_pnRMachSafePointNode__: ad_i486.o; -text: .text%__1cIMachNodeLis_MachCall6M_pnMMachCallNode__: ad_i486.o; -text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; -text: .text%__1cFStateDDFA6MipknENode__i_; -text: .text%__1cFState2t6M_v_; -text: .text%__1cENodeMis_SpillCopy6M_pnRMachSpillCopyNode__: classes.o; -text: .text%__1cKRelocationLunpack_data6M_v_: ad_i486.o; -text: .text%__1cHRegMaskMSmearToPairs6M_v_; -text: .text%__1cKjmpDirNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIIndexSet2t6Mp0_v_; -text: .text%__1cENodeFclone6kM_p0_; -text: .text%__1cENodeMis_SpillCopy6M_pnRMachSpillCopyNode__: cfgnode.o; -text: .text%__1cRmethodDataOopDescHdata_at6Mi_pnLProfileData__; -text: .text%__1cETypeFxmeet6kMpk0_2_; -text: .text%__1cOPhaseIdealLoopZremix_address_expressions6MpnENode__2_; -text: .text%__1cENodeKmatch_edge6kMI_I_; -text: .text%__1cIPhaseCCPOtransform_once6MpnENode__2_; -text: .text%__1cICallNodeLbottom_type6kM_pknEType__; -text: .text%__1cKTypeAryPtrEhash6kM_i_; -text: .text%__1cENodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cbAfinal_graph_reshaping_impl6FpnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cOPhaseIdealLoopNget_late_ctrl6MpnENode_2_2_; -text: .text%__1cLmethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cOMethodLivenessKBasicBlockXcompute_gen_kill_single6MpnQciByteCodeStream__v_; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: callnode.o; -text: .text%__1cICallNodeHis_Call6M_p0_: callnode.o; -text: .text%__1cRMachSpillCopyNodeOimplementation6kMpnKCodeBuffer_pnNPhaseRegAlloc_i_I_; -text: .text%__1cIProjNodeEhash6kM_I_; -text: .text%__1cHemit_d86FrnKCodeBuffer_i_v_; -text: .text%__1cENodeIIdentity6MpnOPhaseTransform__p0_; -text: .text%__1cRMachSafePointNodeEjvms6kM_pnIJVMState__: ad_i486_misc.o; -text: .text%__1cENodeFIdeal6MpnIPhaseGVN_i_p0_; -text: .text%__1cVCompressedWriteStreamJwrite_int6Mi_v_: debugInfo.o; -text: .text%__1cGIfNodeGpinned6kM_i_: classes.o; -text: .text%__1cRSignatureIteratorGexpect6Mc_v_; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: memnode.o; -text: .text%__1cENodeGpinned6kM_i_: ad_i486_misc.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: instanceKlass.o; -text: .text%__1cNeFlagsRegOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cQUnique_Node_ListGremove6MpnENode__v_; -text: .text%__1cICmpPNodeGOpcode6kM_i_; -text: .text%__1cVCompressedWriteStreamJwrite_int6Mi_v_: location.o; -text: .text%__1cILocationIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cHPhiNodeEhash6kM_I_; -text: .text%__1cRmethodDataOopDescJnext_data6MpnLProfileData__2_; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: callnode.o; -text: .text%__1cQconstMethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cTCreateExceptionNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cGciTypeEmake6FnJBasicType__p0_; -text: .text%__1cNLocationValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: cfgnode.o; -text: .text%__1cOis_diamond_phi6FpnENode__i_: cfgnode.o; -text: .text%__1cHCompileMFillLocArray6MpnENode_pnNGrowableArray4CpnKScopeValue____i_; -text: .text%__1cKRelocationSfix_oop_relocation6M_v_: ad_i486.o; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: ad_i486.o; -text: .text%__1cENodeQIdeal_DU_postCCP6MpnIPhaseCCP__p0_; -text: .text%__1cLTypeInstPtrCeq6kMpknEType__i_; -text: .text%__1cENodeHis_Mach6M_pnIMachNode__: memnode.o; -text: .text%__1cMPhaseChaitinSuse_prior_register6MpnENode_I2pnFBlock_rnJNode_List_6_i_; -text: .text%__1cLimpl_helper6FpnKCodeBuffer_iiiiipkci_i_: ad_i486.o; -text: .text%__1cKTypeOopPtrJsingleton6kM_i_; -text: .text%__1cENodeHsize_of6kM_I_; -text: .text%__1cMOopMapStreamJfind_next6M_v_; -text: .text%__1cKJavaThreadPcook_last_frame6MnFframe__1_; -text: .text%__1cIAddINodeGOpcode6kM_i_; -text: .text%__1cIGraphKitHstopped6M_i_; -text: .text%__1cJStartNodeLbottom_type6kM_pknEType__; -text: .text%__1cGIfNodeFis_If6M_p0_: classes.o; -text: .text%__1cMPhaseChaitinHnew_lrg6MpknENode_I_v_; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: callnode.o; -text: .text%__1cFMutexElock6MpnGThread__v_; -text: .text%__1cTconstantPoolOopDescbAname_and_type_ref_index_at6Mi_i_; -text: .text%__1cENodeSremove_dead_region6MpnIPhaseGVN_i_i_; -text: .text%__1cKTypeOopPtrLxadd_offset6kMi_i_; -text: .text%__1cIJVMStateOis_monitor_use6kMI_i_: coalesce.o; -text: .text%__1cHMatcherKLabel_Root6MpknENode_pnFState_p16_6_; -text: .text%__1cJAssemblerOlocate_operand6FpCn0AMWhichOperand__1_; -text: .text%__1cPClassFileStreamGget_u16MpnGThread__C_; -text: .text%__1cHTypeIntFxmeet6kMpknEType__3_; -text: .text%__1cKRelocationSpd_address_in_code6M_ppC_; -text: .text%__1cNSafePointNodeGpinned6kM_i_: callnode.o; -text: .text%__1cOoop_RelocationIoop_addr6M_ppnHoopDesc__; -text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cLmethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQconstMethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cICmpINodeGOpcode6kM_i_; -text: .text%__1cFBlockLis_uncommon6kMrnLBlock_Array__i_; -text: .text%__1cKRelocationNunpack_2_ints6Mri1_v_: relocInfo.o; -text: .text%__1cIMachNodePcompute_padding6kMi_i_: ad_i486_misc.o; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: classes.o; -text: .text%JVM_CurrentTimeMillis; -text: .text%__1cSCallStaticJavaNodeEhash6kM_I_: callnode.o; -text: .text%__1cMPhaseIterGVNVadd_users_to_worklist6MpnENode__v_; -text: .text%__1cIMachNodeSalignment_required6kM_i_: ad_i486_misc.o; -text: .text%__1cOoop_RelocationLunpack_data6M_v_; -text: .text%__1cIHaltNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: classes.o; -text: .text%__1cNSharedRuntimeDd2i6Fd_i_; -text: .text%__1cGcmpkey6Fpkv1_i_; -text: .text%__1cMMergeMemNodeGOpcode6kM_i_; -text: .text%__1cIMachNodeIpeephole6MpnFBlock_ipnNPhaseRegAlloc_ri_p0_; -text: .text%__1cJCProjNodeGis_CFG6kM_i_: cfgnode.o; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: cfgnode.o; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: classes.o; -text: .text%__1cPciObjectFactoryEfind6MpnHoopDesc_pnNGrowableArray4CpnIciObject____i_; -text: .text%__1cOmatch_into_reg6FpnENode_iii1_i_: matcher.o; -text: .text%__1cENodeHdel_out6Mp0_v_: reg_split.o; -text: .text%__1cVCompressedWriteStreamJwrite_int6Mi_v_: debugInfoRec.o; -text: .text%__1cIMachNodePcompute_padding6kMi_i_: ad_i486.o; -text: .text%__1cIMachNodeSalignment_required6kM_i_: ad_i486.o; -text: .text%__1cINodeHashLhash_insert6MpnENode__v_; -text: .text%__1cKTypeAryPtrCeq6kMpknEType__i_; -text: .text%__1cENodeHis_Mach6M_pnIMachNode__: callnode.o; -text: .text%__1cOindOffset8OperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cPciObjectFactoryLis_found_at6MipnHoopDesc_pnNGrowableArray4CpnIciObject____i_; -text: .text%__1cLTypeInstPtr2t6MnHTypePtrDPTR_pnHciKlass_ipnIciObject_i_v_; -text: .text%__1cENode2t6Mp0_v_; -text: .text%__1cIimmIOperIconstant6kM_i_: ad_i486_clone.o; -text: .text%__1cLSymbolTableGlookup6MipkciI_pnNsymbolOopDesc__; -text: .text%__1cENodeFis_If6M_pnGIfNode__: classes.o; -text: .text%__1cIProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cETypeKhas_memory6kM_i_; -text: .text%__1cNloadRangeNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLTypeInstPtrEmake6FnHTypePtrDPTR_pnHciKlass_ipnIciObject_i_pk0_; -text: .text%__1cKjmpConNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIJVMStateIof_depth6kMi_p0_; -text: .text%__1cKNode_ArrayEgrow6MI_v_; -text: .text%__1cJStartNodeGpinned6kM_i_: callnode.o; -text: .text%__1cRPSOldPromotionLABFflush6M_v_; -text: .text%__1cNCatchProjNodeGOpcode6kM_i_; -text: .text%__1cENodeGis_CFG6kM_i_: connode.o; -text: .text%__1cHMatcherKReduceOper6MpnFState_ipnIMachNode_rpnENode__v_; -text: .text%__1cWShouldNotReachHereNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIPhaseIFGMtest_edge_sq6kMII_i_; -text: .text%__1cGIfNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIConPNodeGOpcode6kM_i_; -text: .text%__1cHTypeIntEmake6Fiii_pk0_; -text: .text%__1cRMachSpillCopyNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFframeVoopmapreg_to_location6kMnFVMRegEName_pknLRegisterMap__ppnHoopDesc__; -text: .text%__1cHPhiNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cICallNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: instanceKlass.o; -text: .text%__1cJTypeTupleJsingleton6kM_i_; -text: .text%__1cJLoadPNodeGOpcode6kM_i_; -text: .text%__1cKCodeBuffer2t6MiiiiiipnKBufferBlob_pnJrelocInfo_pnORelocateBuffer_ipnLOopRecorder_pkcii_v_; -text: .text%__1cLOopRecorder2t6MpnFArena__v_; -text: .text%__1cKCodeBuffer2T6M_v_; -text: .text%__1cKCodeBufferQalloc_relocation6MI_v_; -text: .text%__1cIAddPNodeKmatch_edge6kMI_I_; -text: .text%__1cIMachNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIMachNodeJemit_size6kMpnNPhaseRegAlloc__I_; -text: .text%__1cZPhaseConservativeCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cHCmpNodeGis_Cmp6kM_pk0_: classes.o; -text: .text%__1cFMutexElock6M_v_; -text: .text%__1cNCollectedHeapYcommon_mem_allocate_init6FIipnGThread__pnIHeapWord__: instanceKlass.o; -text: .text%__1cHTypeIntEmake6Fi_pk0_; -text: .text%__1cPciObjectFactoryDget6MpnHoopDesc__pnIciObject__; -text: .text%__1cENodeRis_cisc_alternate6kM_i_: ad_i486.o; -text: .text%__1cENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNencode_RegMem6FrnKCodeBuffer_iiiiii_v_; -text: .text%__1cMloadConINodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cILoadNodeEhash6kM_I_; -text: .text%__1cKTypeAryPtrEmake6FnHTypePtrDPTR_pnIciObject_pknHTypeAry_pnHciKlass_ii_pk0_; -text: .text%__1cENodeMcisc_operand6kM_i_: cfgnode.o; -text: .text%__1cJeRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cICmpUNodeGOpcode6kM_i_; -text: .text%__1cJHashtableLhash_symbol6Fpkci_I_: symbolTable.o; -text: .text%__1cFframeUis_interpreted_frame6kM_i_; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: cfgnode.o; -text: .text%__1cJCProjNodeEhash6kM_I_: classes.o; -text: .text%__1cHPhiNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__; -text: .text%__1cJMultiNodeEhash6kM_I_: classes.o; -text: .text%__1cENodeHdel_req6MI_v_; -text: .text%__1cHCompileJcan_alias6MpknHTypePtr_i_i_; -text: .text%__1cSPSPromotionManagerMdrain_stacks6M_v_; -text: .text%__1cETypeEhash6kM_i_; -text: .text%__1cLOptoRuntimeXdeoptimize_caller_frame6FpnKJavaThread_i_v_; -text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cKoopFactoryKnew_symbol6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cIHaltNodeGOpcode6kM_i_; -text: .text%__1cZPhaseConservativeCoalesceJcopy_copy6MpnENode_2pnFBlock_I_i_; -text: .text%__1cENodeGis_CFG6kM_i_: subnode.o; -text: .text%__1cMPhaseIterGVNZremove_globally_dead_node6MpnENode__v_; -text: .text%__1cIParmNodeGOpcode6kM_i_; -text: .text%__1cIJVMStateLdebug_start6kM_I_; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: classes.o; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: multnode.o; -text: .text%__1cGTarjanEEVAL6M_p0_; -text: .text%__1cOThreadCritical2T6M_v_; -text: .text%__1cOThreadCritical2t6M_v_; -text: .text%__1cRSignatureIteratorKparse_type6M_i_; -text: .text%__1cFframeVinterpreter_frame_bcp6kM_pC_; -text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_; -text: .text%__1cOPhaseIdealLoopbIdom_lca_for_get_late_ctrl_internal6MpnENode_22_2_; -text: .text%__1cTconstantPoolOopDescSklass_ref_index_at6Mi_i_; -text: .text%__1cOeFlagsRegUOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cKRegionNodeJis_Region6kM_pk0_: classes.o; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: cfgnode.o; -text: .text%__1cFBlockGselect6MrnJNode_List_rnLBlock_Array_pirnJVectorSet_IrnNGrowableArray4CI___pnENode__; -text: .text%__1cKMachIfNodeJis_MachIf6kM_pk0_: ad_i486_misc.o; -text: .text%__1cEDict2F6kMpkv_pv_; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_: nmethod.o; -text: .text%__1cENodeLis_MergeMem6M_pnMMergeMemNode__: multnode.o; -text: .text%__1cICodeHeapKfind_start6kMpv_1_; -text: .text%__1cKTypeAryPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cIMachNodeHtwo_adr6kM_I_: ad_i486.o; -text: .text%__1cHhashptr6Fpkv_i_; -text: .text%__1cIAddPNodeLbottom_type6kM_pknEType__; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cENodeHget_int6kM_i_; -text: .text%__1cMMachTypeNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cJCatchNodeGOpcode6kM_i_; -text: .text%__1cPClassFileStreamHskip_u16MipnGThread__v_; -text: .text%__1cOoop_RelocationJoop_value6M_pnHoopDesc__; -text: .text%__1cHConNodeGis_Con6kM_I_: classes.o; -text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__; -text: .text%__1cFBlockIis_Empty6kM_i_; -text: .text%__1cWThreadLocalAllocBufferFreset6M_v_; -text: .text%__1cENodeGis_Con6kM_I_: classes.o; -text: .text%__1cGBitMapUclear_range_of_words6MII_v_: bitMap.o; -text: .text%__1cGBitMapFclear6M_v_; -text: .text%__1cbFCompressedLineNumberWriteStreamKwrite_pair6Mii_v_; -text: .text%__1cOPhaseIdealLoopOidom_no_update6kMpnENode__2_: split_if.o; -text: .text%__1cFframeOis_entry_frame6kM_i_; -text: .text%__1cYDebugInformationRecorderLcheck_phase6Mn0AFPhase__v_; -text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cMMergeMemNodeLbottom_type6kM_pknEType__: memnode.o; -text: .text%__1cLLShiftINodeGOpcode6kM_i_; -text: .text%__1cRCardTableModRefBSEkind6M_nKBarrierSetEName__: cardTableExtension.o; -text: .text%__1cFBlockOcode_alignment6M_I_; -text: .text%__1cMPhaseChaitinLinsert_proj6MpnFBlock_IpnENode_I_v_; -text: .text%__1cKCastPPNodeGOpcode6kM_i_; -text: .text%__1cMMachCallNodeGpinned6kM_i_: ad_i486_misc.o; -text: .text%__1cFStateRMachNodeGenerator6MipnHCompile__pnIMachNode__; -text: .text%__1cHMatcherKReduceInst6MpnFState_irpnENode__pnIMachNode__; -text: .text%__1cVCompressedWriteStreamJwrite_int6Mi_v_: oopMap.o; -text: .text%__1cNCollectedHeapXallocate_from_tlab_slow6FpnGThread_I_pnIHeapWord__; -text: .text%__1cENodeHis_Copy6kM_I_: memnode.o; -text: .text%__1cNsymbolOopDescGequals6kMpkci_i_; -text: .text%__1cUParallelScavengeHeapVunsafe_max_tlab_alloc6kM_I_; -text: .text%__1cJMultiNodeIproj_out6kMI_pnIProjNode__; -text: .text%__1cILoadNodeLbottom_type6kM_pknEType__; -text: .text%__1cIMachNodeKconst_size6kM_i_: ad_i486_misc.o; -text: .text%__1cENodeOis_CountedLoop6M_pnPCountedLoopNode__: classes.o; -text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_; -text: .text%__1cENodeGpinned6kM_i_: connode.o; -text: .text%__1cWThreadLocalAllocBufferKinitialize6MpnIHeapWord_22_v_; -text: .text%__1cUParallelScavengeHeapRallocate_new_tlab6MI_pnIHeapWord__; -text: .text%__1cWThreadLocalAllocBufferEfill6MpnIHeapWord_2I_v_; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: collectedHeap.o; -text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: sharedHeap.o; -text: .text%__1cKSharedHeapXfill_region_with_object6FnJMemRegion__v_; -text: .text%__1cIBoolNodeEhash6kM_I_; -text: .text%__1cQciByteCodeStreamEjava6MnJBytecodesECode__2_; -text: .text%__1cSinstanceKlassKlassMoop_is_klass6kM_i_: instanceKlassKlass.o; -text: .text%__1cOindOffset8OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKjmpDirNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKCodeBufferIrelocate6MpCrknQRelocationHolder_i_v_; -text: .text%__1cGIfNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: subnode.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: cfgnode.o; -text: .text%__1cPClassFileParserRverify_legal_utf86MpkCipnGThread__v_; -text: .text%__1cPClassFileParserbEparse_constant_pool_utf8_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMMachHaltNodeEjvms6kM_pnIJVMState__; -text: .text%__1cIMachNodeHis_Mach6M_p0_: machnode.o; -text: .text%__1cKjmpConNodeGpinned6kM_i_: ad_i486_misc.o; -text: .text%__1cUGenericGrowableArray2t6Mii_v_; -text: .text%__1cOPhaseIdealLoopOidom_no_update6kMpnENode__2_: loopopts.o; -text: .text%__1cNsymbolOopDescLas_C_string6kMpci_1_; -text: .text%__1cNsymbolOopDescLas_C_string6kM_pc_; -text: .text%__1cHMatcherTReduceInst_Interior6MpnFState_ipnIMachNode_IrpnENode__I_; -text: .text%__1cENodeJis_Branch6kM_I_: ad_i486.o; -text: .text%__1cIAddPNodeHis_AddP6M_p0_: classes.o; -text: .text%__1cIMachNodeNis_MachEpilog6M_pnOMachEpilogNode__: ad_i486.o; -text: .text%__1cPSignatureStreamEnext6M_v_; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode__i_; -text: .text%__1cJloadSNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cJPSPermGenSallocate_permanent6MI_pnIHeapWord__; -text: .text%__1cMMutableSpaceIallocate6MI_pnIHeapWord__; -text: .text%__1cUParallelScavengeHeapWpermanent_mem_allocate6MI_pnIHeapWord__; -text: .text%__1cHCompileRprobe_alias_cache6MpknHTypePtr__pn0APAliasCacheEntry__; -text: .text%__1cENodeIdestruct6M_v_; -text: .text%__1cMloadConINodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cIMachNodeNoperand_index6kMI_i_; -text: .text%__1cNSafePointNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cKRegionNodeEhash6kM_I_: classes.o; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: multnode.o; -text: .text%__1cOMachReturnNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cGBitMapJset_union6M0_v_; -text: .text%__1cIMachNodeGExpand6MpnFState_rnJNode_List__p0_: ad_i486_misc.o; -text: .text%__1cIAddPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNCollectedHeapMobj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: instanceKlass.o; -text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cMPhaseIterGVNKis_IterGVN6M_p0_: phaseX.o; -text: .text%__1cENodeOis_block_start6kM_i_; -text: .text%__1cPciInstanceKlassMis_interface6M_i_: ciInstanceKlass.o; -text: .text%__1cJeRegLOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cHPhiNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cJTypeTupleEhash6kM_i_; -text: .text%__1cNCellTypeStateFmerge6kM0i_0_; -text: .text%__1cHPhiNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKjmpConNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cFParseNdo_exceptions6M_v_; -text: .text%__1cFParsePdo_one_bytecode6M_v_; -text: .text%__1cFBlockJfind_node6kMpknENode__I_; -text: .text%__1cRSignatureIterator2t6MnMsymbolHandle__v_; -text: .text%__1cLjmpConUNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cGBitMap2t6MpII_v_; -text: .text%__1cLOptoRuntimeFnew_C6FpnMklassOopDesc_pnKJavaThread__v_; -text: .text%method_compare: methodOop.o; -text: .text%__1cIHaltNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cENodeLis_MergeMem6M_pnMMergeMemNode__: classes.o; -text: .text%__1cKis_x2logic6FpnIPhaseGVN_pnENode__3_: cfgnode.o; -text: .text%__1cHAbsNodeLis_absolute6FpnIPhaseGVN_pnENode__4_; -text: .text%__1cJloadPNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNLoadRangeNodeGOpcode6kM_i_; -text: .text%__1cLPhaseValuesGintcon6Mi_pnIConINode__; -text: .text%__1cHCompilePfind_alias_type6MpknHTypePtr_i_pn0AJAliasType__; -text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_; -text: .text%__1cKHandleMark2T6M_v_; -text: .text%__1cJloadLNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cOMachReturnNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cGTarjanICOMPRESS6M_v_; -text: .text%__1cTconstantPoolOopDescQsignature_ref_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cHRegMaskMClearToPairs6M_v_; -text: .text%__1cENodeHdel_out6Mp0_v_: block.o; -text: .text%__1cENodeHdel_out6Mp0_v_: parse1.o; -text: .text%__1cMMachCallNodeLis_MachCall6M_p0_: ad_i486_misc.o; -text: .text%__1cNSafePointNodebBneeds_polling_address_input6F_i_; -text: .text%__1cIJVMStateJdebug_end6kM_I_; -text: .text%__1cIMachNodeKconst_size6kM_i_: ad_i486.o; -text: .text%__1cHSubNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJLoadINodeGOpcode6kM_i_; -text: .text%__1cPjava_lang_ClassMis_primitive6FpnHoopDesc__i_; -text: .text%__1cIMachNodeFreloc6kM_i_: ad_i486.o; -text: .text%__1cIProjNodeHsize_of6kM_I_; -text: .text%__1cHMatcherQis_save_on_entry6Mi_i_; -text: .text%__1cLBoxLockNodeNrematerialize6kM_i_: classes.o; -text: .text%__1cRMachSpillCopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPVirtualCallDataKcell_count6M_i_: methodDataOop.o; -text: .text%__1cHMatcherKmatch_tree6MpknENode__pnIMachNode__; -text: .text%__1cOindOffset8OperFscale6kM_i_: ad_i486.o; -text: .text%__1cNloadConI0NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cIIndexSetSpopulate_free_list6F_v_; -text: .text%__1cLPCTableNodeGpinned6kM_i_: classes.o; -text: .text%__1cNnew_loc_value6FpnNPhaseRegAlloc_nHOptoRegEName_nILocationEType__pnNLocationValue__: output.o; -text: .text%__1cMloadConINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUGenericGrowableArray2t6MpnFArena_iipnEGrET__v_; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: cfgnode.o; -text: .text%__1cENodeGis_Con6kM_I_: ad_i486_misc.o; -text: .text%JVM_ReleaseUTF; -text: .text%__1cKutf8_write6FpCH_0_: utf8.o; -text: .text%__1cKNode_ArrayGremove6MI_v_; -text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOis_range_check6FpnENode_r12ri_i_: ifnode.o; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: methodDataOop.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: multnode.o; -text: .text%__1cMPhaseIterGVNMsubsume_node6MpnENode_2_v_; -text: .text%__1cJrelocInfo2t6Mn0AJrelocType_ii_v_; -text: .text%__1cMciMethodDataHdata_at6Mi_pnLProfileData__; -text: .text%__1cENodeJis_Branch6kM_I_: ad_i486_misc.o; -text: .text%__1cIMachNodeNis_MachEpilog6M_pnOMachEpilogNode__: ad_i486_misc.o; -text: .text%__1cJrelocInfoNfinish_prefix6Mph_p0_; -text: .text%__1cMCreateExNodeGOpcode6kM_i_; -text: .text%__1cSloadL_volatileNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cGOopMapbEmap_compiler_reg_to_oopmap_reg6MnHOptoRegEName_ii_nFVMRegEName__; -text: .text%__1cHhashkey6Fpkv_i_; -text: .text%__1cLTypeInstPtrFxmeet6kMpknEType__3_; -text: .text%__1cIJVMState2t6MpnIciMethod_p0_v_; -text: .text%__1cGOopMapHset_xxx6MnHOptoRegEName_nLOopMapValueJoop_types_ii2_v_; -text: .text%__1cLTypeInstPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cENodeHdel_out6Mp0_v_: coalesce.o; -text: .text%__1cGBitMapGat_put6MIi_v_; -text: .text%__1cJloadBNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeHdel_out6Mp0_v_: parse2.o; -text: .text%__1cHMatcherTcollect_null_checks6MpnENode__v_; -text: .text%__1cNloadConI0NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cENode2t6Mp011_v_; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: generateOopMap.o; -text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cHMemNodeMIdeal_common6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cITypeLongCeq6kMpknEType__i_; -text: .text%__1cHCmpNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMMachCallNodeLbottom_type6kM_pknEType__; -text: .text%__1cRMachSafePointNodeQis_MachSafePoint6M_p0_: ad_i486_misc.o; -text: .text%__1cOMethodLivenessKBasicBlockIload_one6Mi_v_; -text: .text%__1cNSafePointNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cENodeIis_Start6M_pnJStartNode__: ad_i486_misc.o; -text: .text%__1cENodeMis_SafePoint6M_pnNSafePointNode__: classes.o; -text: .text%__1cIemit_d326FrnKCodeBuffer_i_v_; -text: .text%__1cFDictI2i6M_v_; -text: .text%__1cIJVMStateNclone_shallow6kM_p0_; -text: .text%__1cNloadConI0NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeGis_Con6kM_I_: subnode.o; -text: .text%__1cIMachNodeFreloc6kM_i_: ad_i486_misc.o; -text: .text%__1cFciEnvIis_in_vm6F_i_; -text: .text%__1cNSafePointNodeHsize_of6kM_I_; -text: .text%__1cPCheckCastPPNodeGOpcode6kM_i_; -text: .text%__1cJCodeCacheQfind_blob_unsafe6Fpv_pnICodeBlob__; -text: .text%__1cHTypePtrLmeet_offset6kMi_i_; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: connode.o; -text: .text%__1cIHaltNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFChunk2t6MI_v_; -text: .text%__1cFChunk2n6FII_pv_; -text: .text%__1cKciTypeFlowLStateVectorSapply_one_bytecode6MpnQciByteCodeStream__i_; -text: .text%__1cGOopMapJset_value6MnHOptoRegEName_ii_v_; -text: .text%__1cIMachOperLdisp_is_oop6kM_i_; -text: .text%__1cJloadPNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cFChunk2k6Fpv_v_; -text: .text%__1cOcompU_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeRdisconnect_inputs6Mp0_i_; -text: .text%__1cIIndexSetFclear6M_v_: indexSet.o; -text: .text%__1cIIndexSetJlrg_union6MIIkIpknIPhaseIFG_rknHRegMask__I_; -text: .text%JVM_GetMethodIxExceptionTableLength; -text: .text%__1cETypeFempty6kM_i_; -text: .text%__1cPClassFileParserUassemble_annotations6MpCi1ipnGThread__nPtypeArrayHandle__; -text: .text%__1cJTypeTupleCeq6kMpknEType__i_; -text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; -text: .text%__1cOPhaseIdealLoopSget_ctrl_no_update6kMpnENode__2_: split_if.o; -text: .text%__1cENodeHdel_out6Mp0_v_: memnode.o; -text: .text%__1cNPhaseCoalesceRcombine_these_two6MpnENode_2_v_; -text: .text%__1cFMutexbClock_without_safepoint_check6M_v_; -text: .text%__1cPSignatureStreamHis_done6kM_i_; -text: .text%__1cJStoreNodeKmatch_edge6kMI_I_; -text: .text%__1cIBoolNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIBoolTestKcc2logical6kMpknEType__3_; -text: .text%__1cIAddPNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cFArenaEgrow6MI_pv_; -text: .text%__1cQCompressedStream2t6MpCi_v_; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: multnode.o; -text: .text%__1cJeRegPOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cUParallelScavengeHeapPis_in_permanent6kMpkv_i_: parallelScavengeHeap.o; -text: .text%__1cOJNIHandleBlockPallocate_handle6MpnHoopDesc__pnI_jobject__; -text: .text%__1cXruntime_call_RelocationEtype6M_nJrelocInfoJrelocType__: ad_i486.o; -text: .text%__1cENodeHdel_out6Mp0_v_: loopopts.o; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: cfgnode.o; -text: .text%__1cKBranchDataKcell_count6M_i_: methodDataOop.o; -text: .text%__1cENodeGis_CFG6kM_i_: memnode.o; -text: .text%__1cKjmpDirNodeGpinned6kM_i_: ad_i486_misc.o; -text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_; -text: .text%__1cFBlockUneeded_for_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; -text: .text%__1cTconstantPoolOopDescWsignature_ref_index_at6Mi_i_; -text: .text%__1cFKlassMoop_is_array6kM_i_: instanceKlass.o; -text: .text%__1cILoadNodeKmatch_edge6kMI_I_; -text: .text%__1cYCallStaticJavaDirectNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cHMemNodeGis_Mem6M_p0_: classes.o; -text: .text%__1cMPhaseIterGVNbGregister_new_node_with_optimizer6MpnENode__2_; -text: .text%__1cENodeKreplace_by6Mp0_v_; -text: .text%__1cNPhaseRegAllocGis_oop6kMpknENode__i_; -text: .text%__1cGIfNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: classes.o; -text: .text%__1cSCountedLoopEndNodeGOpcode6kM_i_; -text: .text%__1cKjmpDirNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cHPhiNodeIadr_type6kM_pknHTypePtr__: cfgnode.o; -text: .text%__1cHPhiNodeHsize_of6kM_I_: cfgnode.o; -text: .text%__1cNobjArrayKlassQarray_klass_impl6MiipnGThread__pnMklassOopDesc__; -text: .text%__1cNobjArrayKlassQarray_klass_impl6FnTobjArrayKlassHandle_iipnGThread__pnMklassOopDesc__; -text: .text%__1cJTypeTupleGfields6FI_ppknEType__; -text: .text%__1cMPhaseChaitinFUnion6MpknENode_3_v_; -text: .text%__1cJdo_method6FpnNmethodOopDesc__v_: recompilationMonitor.o; -text: .text%__1cZload_can_see_stored_value6FpnILoadNode_pnENode_pnOPhaseTransform__3_: memnode.o; -text: .text%__1cFframeGsender6kMpnLRegisterMap_pnICodeBlob__0_; -text: .text%__1cNtestP_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKRegionNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLrecord_bias6FpknIPhaseIFG_ii_v_: coalesce.o; -text: .text%__1cMPhaseChaitinSget_spillcopy_wide6MpnENode_2I_2_; -text: .text%__1cKNativeCallLdestination6kM_pC_; -text: .text%__1cNinstanceKlassQarray_klass_impl6FnTinstanceKlassHandle_iipnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassQarray_klass_impl6MiipnGThread__pnMklassOopDesc__; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: memnode.o; -text: .text%__1cICallNodeIIdentity6MpnOPhaseTransform__pnENode__: callnode.o; -text: .text%__1cSCallStaticJavaNodeRis_CallStaticJava6kM_pk0_: callnode.o; -text: .text%__1cIAddPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cMMergeMemNodeEhash6kM_I_; -text: .text%__1cJcmpOpOperJnum_edges6kM_I_: ad_i486_clone.o; -text: .text%__1cUPSMarkSweepDecoratorQinsert_deadspace6MripnIHeapWord_I_i_; -text: .text%__1cMMergeMemNodeLis_MergeMem6M_p0_: memnode.o; -text: .text%__1cKoopFactoryMnew_objArray6FpnMklassOopDesc_ipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: instanceKlass.o; -text: .text%__1cNinstanceKlassRallocate_objArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cPciInstanceKlassRis_instance_klass6M_i_: ciInstanceKlass.o; -text: .text%__1cILoadNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIBoolNodeLbottom_type6kM_pknEType__: subnode.o; -text: .text%__1cMPhaseChaitinNFind_compress6MI_I_; -text: .text%__1cKStorePNodeGOpcode6kM_i_; -text: .text%__1cTconstantPoolOopDescLname_ref_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cVCompressedWriteStreamJwrite_int6Mi_v_: methodOop.o; -text: .text%__1cNmethodOopDescPis_empty_method6kM_i_; -text: .text%__1cLjmpConUNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPciInstanceKlassGloader6M_pnHoopDesc__; -text: .text%__1cOno_flip_branch6FpnFBlock__i_: block.o; -text: .text%__1cICodeHeapKnext_block6kMpnJHeapBlock__2_; -text: .text%__1cNmethodOopDescRis_not_compilable6kMi_i_; -text: .text%__1cICodeHeapJnext_free6kMpnJHeapBlock__pv_; -text: .text%__1cKRelocationJpack_data6M_i_: ad_i486.o; -text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__; -text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_; -text: .text%__1cNmethodOopDescLis_accessor6kM_i_; -text: .text%__1cILoadNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cISubINodeGOpcode6kM_i_; -text: .text%__1cKStoreINodeGOpcode6kM_i_; -text: .text%__1cNeFlagsRegOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cQciByteCodeStreamMreset_to_bci6Mi_v_; -text: .text%__1cHRetNodeNis_block_proj6kM_pknENode__: ad_i486_misc.o; -text: .text%__1cKNode_Array2t6MpnFArena__v_: lcm.o; -text: .text%__1cJStoreNodeLbottom_type6kM_pknEType__; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: machnode.o; -text: .text%__1cRSignatureIteratorTcheck_signature_end6M_v_; -text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_; -text: .text%__1cENodeHis_Goto6kM_I_: classes.o; -text: .text%__1cILoadNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cPciInstanceKlassRprotection_domain6M_pnHoopDesc__; -text: .text%__1cNinstanceKlassPoop_is_instance6kM_i_: instanceKlass.o; -text: .text%__1cITypeLongEhash6kM_i_; -text: .text%__1cLBlock_Array2t6MpnFArena__v_: block.o; -text: .text%__1cKRelocationSfix_oop_relocation6M_v_: relocInfo.o; -text: .text%__1cJloadPNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cMPhaseIterGVNFwiden6kMpknEType_3_3_: phaseX.o; -text: .text%__1cLis_cond_add6FpnIPhaseGVN_pnHPhiNode__pnENode__; -text: .text%__1cPsplit_flow_path6FpnIPhaseGVN_pnHPhiNode__pnENode__: cfgnode.o; -text: .text%__1cENodeGis_Mem6M_pnHMemNode__: classes.o; -text: .text%__1cKRegionNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cKRelocationLunpack_data6M_v_: relocInfo.o; -text: .text%__1cKNode_Array2t6MpnFArena__v_: block.o; -text: .text%__1cITypeNodeHsize_of6kM_I_; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: memnode.o; -text: .text%__1cFMutexNowned_by_self6kM_i_; -text: .text%__1cIMachNodeRget_base_and_disp6kMrirpknHTypePtr__pknENode__; -text: .text%__1cIAddINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIIndexSetFclear6M_v_: chaitin.o; -text: .text%__1cXPhaseAggressiveCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cFBlockOschedule_local6MrnHMatcher_rnLBlock_Array_pirnJVectorSet_rnNGrowableArray4CI___i_; -text: .text%__1cFBlockScall_catch_cleanup6MrnLBlock_Array__v_; -text: .text%__1cLBlock_StackXmost_frequent_successor6MpnFBlock__I_; -text: .text%__1cNidealize_test6FpnIPhaseGVN_pnGIfNode__3_: ifnode.o; -text: .text%__1cFKlassMoop_is_klass6kM_i_: symbolKlass.o; -text: .text%__1cENodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQSystemDictionaryXcheck_signature_loaders6FnMsymbolHandle_nGHandle_2ipnGThread__v_; -text: .text%__1cENodeGpinned6kM_i_: subnode.o; -text: .text%__1cLLShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cLCounterDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cKRegionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGTarjanELINK6Mp01_v_; -text: .text%__1cMPhaseChaitinMyank_if_dead6MpnENode_pnFBlock_pnJNode_List_6_i_; -text: .text%__1cYDebugInformationRecorderWserialize_scope_values6MpnNGrowableArray4CpnKScopeValue____i_; -text: .text%__1cYDebugInformationRecorderTcreate_scope_values6MpnNGrowableArray4CpnKScopeValue____pnKDebugToken__; -text: .text%__1cIGraphKitJsync_jvms6kM_pnIJVMState__; -text: .text%__1cENodeGis_Con6kM_I_: cfgnode.o; -text: .text%__1cMciMethodDataJnext_data6MpnLProfileData__2_; -text: .text%__1cENodeGpinned6kM_i_: memnode.o; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: subnode.o; -text: .text%__1cIBoolNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cNSafePointNodeSset_next_exception6Mp0_v_; -text: .text%__1cQResultTypeFinderDset6MinJBasicType__v_: bytecode.o; -text: .text%__1cOcompU_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJCodeCacheJfind_blob6Fpv_pnICodeBlob__; -text: .text%__1cMPhaseChaitinNFind_compress6MpknENode__I_; -text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__; -text: .text%__1cFStateM_sub_Op_ConI6MpknENode__v_; -text: .text%__1cNRelocIteratorKset_limits6MpC1_v_; -text: .text%__1cNRelocIteratorKinitialize6MipnICodeBlob_pC3_v_; -text: .text%__1cLsymbolKlassNoop_is_symbol6kM_i_: symbolKlass.o; -text: .text%__1cOMergeMemStreamOnext_non_empty6Mi_i_: parse1.o; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: ad_i486.o; -text: .text%__1cIsplit_if6FpnGIfNode_pnMPhaseIterGVN__pnENode__: ifnode.o; -text: .text%__1cIGraphKitEstop6M_v_; -text: .text%__1cTremove_useless_bool6FpnGIfNode_pnIPhaseGVN__pnENode__: ifnode.o; -text: .text%__1cPciObjectFactorySget_unloaded_klass6MpnHciKlass_pnIciSymbol_i_2_; -text: .text%__1cJeRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: subnode.o; -text: .text%__1cPTwoOopHashtableMcompute_hash6MnMsymbolHandle_nGHandle__I_: systemDictionary.o; -text: .text%__1cMloadConLNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cILoadNodeHis_Load6M_p0_: classes.o; -text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; -text: .text%__1cKjmpConNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cHAddNodeEhash6kM_I_; -text: .text%__1cNSafePointNodeLbottom_type6kM_pknEType__: callnode.o; -text: .text%__1cOemit_d32_reloc6FrnKCodeBuffer_irknQRelocationHolder_i_v_; -text: .text%__1cNSafePointNodeKmatch_edge6kMI_I_; -text: .text%__1cMURShiftINodeGOpcode6kM_i_; -text: .text%__1cOcompI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cLjmpConUNodeGpinned6kM_i_: ad_i486_misc.o; -text: .text%__1cIRootNodeGOpcode6kM_i_; -text: .text%__1cFChunkEchop6M_v_; -text: .text%__1cIMachOperOindex_position6kM_i_; -text: .text%__1cMloadConPNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cIimmPOperEtype6kM_pknEType__: ad_i486_clone.o; -text: .text%__1cPcheckCastPPNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cOindOffset8OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cOindOffset8OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cOindOffset8OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cHRegMaskQis_aligned_Pairs6kM_i_; -text: .text%__1cMloadConLNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cOcompU_eRegNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cHSubNodeGis_Sub6M_p0_: classes.o; -text: .text%__1cJTypeTupleEmake6FIppknEType__pk0_; -text: .text%__1cYCallStaticJavaDirectNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNeFlagsRegOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKReflectionTverify_field_access6FpnMklassOopDesc_22nLAccessFlags_ii_i_; -text: .text%__1cIregDOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cSInterpreterRuntimeLcache_entry6FpnKJavaThread__pnWConstantPoolCacheEntry__: interpreterRuntime.o; -text: .text%__1cJStoreNodeIis_Store6kM_pk0_: classes.o; -text: .text%__1cKDictionaryJget_entry6MiInMsymbolHandle_nGHandle__pnPDictionaryEntry__; -text: .text%__1cHCmpNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRSignatureIterator2t6MpnNsymbolOopDesc__v_; -text: .text%__1cOBasicHashtableJnew_entry6MI_pnTBasicHashtableEntry__; -text: .text%__1cHi2sNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNtestI_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJHashtableJnew_entry6MIpnHoopDesc__pnOHashtableEntry__; -text: .text%__1cJloadPNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cMloadConLNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cPimpl_mov_helper6FpnKCodeBuffer_iiii_i_: ad_i486.o; -text: .text%__1cHConNodeEhash6kM_I_; -text: .text%__1cKjmpDirNodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cKstoreINodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%Unsafe_CompareAndSwapLong; -text: .text%__1cJStoreNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPciObjectFactoryNfind_non_perm6MpnHoopDesc__rpn0ANNonPermObject__; -text: .text%__1cFBlockLfind_remove6MpknENode__v_; -text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cKTypeRawPtrJsingleton6kM_i_; -text: .text%__1cMloadConDNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMloadConDNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJStoreNodeEhash6kM_I_; -text: .text%__1cMPhaseChaitinJsplit_USE6MpnENode_pnFBlock_2IIiinNGrowableArray4CI__i_I_; -text: .text%__1cMloadConDNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cENode2t6Mp0111_v_; -text: .text%__1cXindIndexScaleOffsetOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cWShouldNotReachHereNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKTypeRawPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__; -text: .text%__1cGOopMapHset_oop6MnHOptoRegEName_ii_v_; -text: .text%__1cHMatcherXadjust_outgoing_stk_arg6MinHOptoRegEName_r2_2_; -text: .text%__1cMMergeMemNodePiteration_setup6Mpk0_v_; -text: .text%__1cJeRegLOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cJMultiNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cJCProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstorePNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; -text: .text%__1cLRegisterMapFclear6Mpi_v_; -text: .text%__1cNtestI_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cFframeOis_first_frame6kM_i_; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: cfgnode.o; -text: .text%__1cENodeMcisc_operand6kM_i_: memnode.o; -text: .text%__1cNtestP_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cFChunkJnext_chop6M_v_; -text: .text%__1cHTypeAryRary_must_be_exact6kM_i_; -text: .text%__1cRMachNullCheckNodeQis_MachNullCheck6M_p0_: machnode.o; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: callnode.o; -text: .text%__1cKIfTrueNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJCodeCacheFalive6FpnICodeBlob__2_; -text: .text%__1cLRShiftINodeGOpcode6kM_i_; -text: .text%__1cOcompU_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIJVMStateOis_monitor_use6kMI_i_: reg_split.o; -text: .text%__1cLRegisterMap2t6MpnKJavaThread_i_v_; -text: .text%__1cHTypeIntFempty6kM_i_; -text: .text%__1cKJNIHandlesKmake_local6FpnHJNIEnv__pnHoopDesc__pnI_jobject__; -text: .text%__1cJloadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJchar2type6Fc_nJBasicType__: fieldType.o; -text: .text%__1cJFieldTypeKbasic_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cSinstanceKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cNmethodOopDescMintrinsic_id6kM_n0ALIntrinsicId__; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceKlass.o; -text: .text%__1cMMergeMemNodeJmemory_at6kMI_pnENode__; -text: .text%__1cNloadRangeNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: subnode.o; -text: .text%__1cITypeNodeRraise_bottom_type6MpknEType__v_; -text: .text%__1cTconstantPoolOopDescSklass_at_if_loaded6FnSconstantPoolHandle_i_pnMklassOopDesc__; -text: .text%__1cFciEnvXget_klass_by_index_impl6MpnPciInstanceKlass_iri_pnHciKlass__; -text: .text%__1cNExceptionMark2T6M_v_; -text: .text%__1cNExceptionMark2t6MrpnGThread__v_; -text: .text%__1cMgetTimeNanos6F_x_: os_solaris.o; -text: .text%__1cMloadConPNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cHOopFlowNcompute_reach6MpnNPhaseRegAlloc_ipnEDict__v_; -text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cRInvocationCounterJset_state6Mn0AFState__v_; -text: .text%__1cLOptoRuntimePnew_typeArray_C6FnJBasicType_ipnKJavaThread__v_; -text: .text%__1cRInvocationCounterEinit6M_v_; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: multnode.o; -text: .text%__1cRMachSafePointNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cUGenericGrowableArrayPraw_at_put_grow6MipknEGrET_3_v_; -text: .text%__1cMMergeMemNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%JVM_GetClassModifiers; -text: .text%__1cTconstantPoolOopDescNklass_name_at6Mi_pnNsymbolOopDesc__; -text: .text%JVM_GetClassAccessFlags; -text: .text%__1cOcompU_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cTCreateExceptionNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJCatchNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLIfFalseNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cICodeBlobKis_nmethod6kM_i_: codeBlob.o; -text: .text%__1cKstoreINodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKjmpDirNodeHis_Goto6kM_I_: ad_i486_misc.o; -text: .text%__1cSObjectSynchronizerJfast_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cSObjectSynchronizerKfast_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cNSafePointNodeOnext_exception6kM_p0_; -text: .text%__1cTconstantPoolOopDescRname_ref_index_at6Mi_i_; -text: .text%__1cMMergeMemNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cENodeHdel_out6Mp0_v_: split_if.o; -text: .text%__1cLMachNopNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKRegionNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLPhaseValuesFwiden6kMpknEType_3_3_: phaseX.o; -text: .text%__1cENodeHis_AddP6M_pnIAddPNode__: connode.o; -text: .text%__1cOcompU_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNloadKlassNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cICallNodeLis_CallLeaf6kM_pknMCallLeafNode__: callnode.o; -text: .text%__1cMObjectLocker2t6MnGHandle_pnGThread__v_; -text: .text%__1cMObjectLocker2T6M_v_; -text: .text%__1cKmethodOperGmethod6kM_i_: ad_i486.o; -text: .text%__1cWConstantPoolCacheEntryRset_initial_state6Mi_v_; -text: .text%__1cPSignatureStreamJis_object6kM_i_; -text: .text%__1cJloadINodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOPhaseIdealLoopOidom_no_update6kMpnENode__2_: loopTransform.o; -text: .text%__1cLProfileDataPfollow_contents6M_v_: methodDataOop.o; -text: .text%__1cLProfileDataPadjust_pointers6M_v_: methodDataOop.o; -text: .text%__1cENodeHis_AddP6M_pnIAddPNode__: classes.o; -text: .text%__1cOindOffset8OperNconstant_disp6kM_i_: ad_i486.o; -text: .text%__1cOcompI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNaddI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cRmethodDataOopDescPinitialize_data6MpnOBytecodeStream_i_i_; -text: .text%__1cRmethodDataOopDescTbytecode_cell_count6FnJBytecodesECode__i_; -text: .text%__1cRmethodDataOopDescRcompute_data_size6FpnOBytecodeStream__i_; -text: .text%__1cMMergeMemNodeQclone_all_memory6FpnENode__p0_; -text: .text%__1cIGraphKitJclone_map6M_pnNSafePointNode__; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: multnode.o; -text: .text%__1cGOopMapQset_callee_saved6MnHOptoRegEName_ii2_v_; -text: .text%__1cOPhaseIdealLoopIsplit_up6MpnENode_22_i_; -text: .text%__1cKTypeOopPtrWmake_from_klass_common6FpnHciKlass_ii_pk0_; -text: .text%__1cWstatic_stub_RelocationLunpack_data6M_v_; -text: .text%__1cENodeHdel_out6Mp0_v_: postaloc.o; -text: .text%__1cOcompU_eRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cMOopMapStream2t6MpnGOopMap_i_v_; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: subnode.o; -text: .text%__1cNtestI_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cIBoolNodeKmatch_edge6kMI_I_: subnode.o; -text: .text%__1cLklassItable2t6MnTinstanceKlassHandle__v_; -text: .text%__1cNinstanceKlassGitable6kM_pnLklassItable__; -text: .text%__1cNCompileBrokerLmaybe_block6F_v_; -text: .text%__1cFStateM_sub_Op_RegP6MpknENode__v_; -text: .text%__1cFPhase2t6Mn0ALPhaseNumber__v_; -text: .text%__1cLciSignatureLreturn_type6kM_pnGciType__; -text: .text%__1cIJumpDataKcell_count6M_i_: methodDataOop.o; -text: .text%__1cKstorePNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: symbolKlass.o; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: symbolKlass.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: symbolKlass.o; -text: .text%__1cLsymbolKlassPallocate_symbol6MpCipnGThread__pnNsymbolOopDesc__; -text: .text%__1cLSymbolTableJbasic_add6MipCiIpnGThread__pnNsymbolOopDesc__; -text: .text%__1cNSafePointNodeEjvms6kM_pnIJVMState__: callnode.o; -text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__; -text: .text%__1cNMachIdealNodeMideal_Opcode6kM_i_: machnode.o; -text: .text%__1cHRegMaskPfind_first_pair6kM_nHOptoRegEName__; -text: .text%__1cIHaltNodeLbottom_type6kM_pknEType__; -text: .text%__1cRMachSafePointNodeRis_safepoint_node6kM_i_: ad_i486_misc.o; -text: .text%__1cKRegionNodeOis_block_start6kM_i_: classes.o; -text: .text%__1cKTypeAryPtrFxmeet6kMpknEType__3_; -text: .text%__1cMMergeMemNodeNset_memory_at6MIpnENode__v_; -text: .text%__1cRMemBarReleaseNodeGOpcode6kM_i_; -text: .text%__1cOeFlagsRegUOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cKcmpOpUOperJnum_edges6kM_I_: ad_i486_clone.o; -text: .text%__1cENodeHdel_out6Mp0_v_: cfgnode.o; -text: .text%__1cCosPelapsed_counter6F_x_; -text: .text%__1cMtlsLoadPNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cPClassFileParserbLparse_constant_pool_nameandtype_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cGBitMapOset_difference6M0_v_; -text: .text%__1cPcheckCastPPNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cKMemBarNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cYCallStaticJavaDirectNodeSalignment_required6kM_i_: ad_i486_misc.o; -text: .text%__1cYCallStaticJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNtestP_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: memnode.o; -text: .text%__1cKstorePNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOindOffset8OperNbase_position6kM_i_: ad_i486.o; -text: .text%__1cXindIndexScaleOffsetOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cRaddI_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKstoreINodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOcompI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: memnode.o; -text: .text%__1cOcompI_eRegNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cKRegionNodeGis_CFG6kM_i_: loopnode.o; -text: .text%__1cNloadRangeNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cQciByteCodeStreamFEOBCs6M_nJBytecodesECode__; -text: .text%__1cITypeNodeDcmp6kMrknENode__I_; -text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_: frame.o; -text: .text%__1cMPhaseChaitinPset_was_spilled6MpnENode__v_; -text: .text%__1cHTypeAryEhash6kM_i_; -text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cPfieldDescriptorKinitialize6MpnMklassOopDesc_i_v_; -text: .text%__1cNsubI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cMLinkResolverYlookup_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cPVirtualCallDataPadjust_pointers6M_v_; -text: .text%__1cPVirtualCallDataPfollow_contents6M_v_; -text: .text%__1cMMergeMemNodePset_base_memory6MpnENode__v_; -text: .text%__1cSsafePoint_pollNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNLoadKlassNodeGOpcode6kM_i_; -text: .text%__1cLOopRecorderOallocate_index6MpnI_jobject__i_; -text: .text%__1cYDebugInformationRecorderNappend_handle6MpnI_jobject__i_; -text: .text%__1cKTypeRawPtrEhash6kM_i_; -text: .text%__1cIciObjectIencoding6M_pnI_jobject__; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: machnode.o; -text: .text%__1cPPerfLongVariantGsample6M_v_; -text: .text%__1cENodeHis_Copy6kM_I_: machnode.o; -text: .text%__1cIAndINodeGOpcode6kM_i_; -text: .text%__1cRCompilationPolicyNcanBeCompiled6FnMmethodHandle__i_; -text: .text%__1cENodeFis_If6M_pnGIfNode__: multnode.o; -text: .text%__1cVCompressedWriteStream2t6Mi_v_; -text: .text%__1cHAddNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJlabelOperFclone6kM_pnIMachOper__; -text: .text%__1cMLinkResolverbAcheck_method_accessability6FnLKlassHandle_11nMmethodHandle_pnGThread__v_; -text: .text%__1cNCatchProjNodeMis_CatchProj6kM_pk0_: cfgnode.o; -text: .text%__1cENode2t6Mp01_v_; -text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_; -text: .text%__1cNtestI_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: subnode.o; -text: .text%__1cKTypeOopPtrHget_con6kM_i_; -text: .text%__1cMloadConINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMUniverseOperFclone6kM_pnIMachOper__; -text: .text%__1cKRelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: multnode.o; -text: .text%__1cJloadINodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMTypeKlassPtrEhash6kM_i_; -text: .text%__1cKRegionNodeHhas_phi6kM_pnHPhiNode__; -text: .text%__1cIMachNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cENodeHins_req6MIp0_v_; -text: .text%__1cPconvI2L_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cIciMethodbCinterpreter_invocation_count6M_i_; -text: .text%__1cMciMethodDataLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cKStoreCNodeGOpcode6kM_i_; -text: .text%JVM_GetCPMethodSignatureUTF; -text: .text%__1cOcompI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cRshrI_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJAssemblerJemit_data6MirknQRelocationHolder_i_v_; -text: .text%__1cFframeQoops_do_internal6MpnKOopClosure_pnLRegisterMap_i_v_; -text: .text%__1cRInterpreterOopMapLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cOeFlagsRegUOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLjmpConUNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNSafePointNodeGOpcode6kM_i_; -text: .text%__1cJVectorSet2L6MI_rnDSet__; -text: .text%__1cJVectorSetEgrow6MI_v_; -text: .text%__1cOMethodLivenessKBasicBlockWcompute_gen_kill_range6MpnQciByteCodeStream__v_; -text: .text%__1cHnmethodJis_zombie6kM_i_: nmethod.o; -text: .text%__1cKNode_Array2t6MpnFArena__v_: gcm.o; -text: .text%__1cKStoreBNodeGOpcode6kM_i_; -text: .text%__1cPClassFileParserbJparse_constant_pool_methodref_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: connode.o; -text: .text%__1cOFastUnlockNodeGOpcode6kM_i_; -text: .text%__1cHPhiNodeEmake6FpnENode_2pknEType_pknHTypePtr__p0_; -text: .text%__1cLeAXRegPOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cUArgumentSizeComputerDset6MinJBasicType__v_: frame.o; -text: .text%__1cENodeHdel_out6Mp0_v_: gcm.o; -text: .text%__1cETypeOget_const_type6FpnGciType__pk0_; -text: .text%__1cPcheckCastPPNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cJVectorSet2t6MpnFArena__v_; -text: .text%__1cIGraphKitGmemory6MI_pnENode__; -text: .text%__1cITypeLong2t6Mxxi_v_; -text: .text%__1cKCastPPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQciByteCodeStreamPget_field_index6M_i_; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: memnode.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: memnode.o; -text: .text%__1cCosMvm_page_size6F_i_; -text: .text%__1cENodeDcmp6kMrk0_I_; -text: .text%__1cKReflectionTverify_class_access6FpnMklassOopDesc_2i_i_; -text: .text%__1cNloadRangeNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_RegI6MpknENode__v_; -text: .text%__1cJloadINodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: methodOop.o; -text: .text%__1cFKlassNlookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cKjmpConNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cFStateM_sub_Op_AddP6MpknENode__v_; -text: .text%__1cMPhaseChaitinVmay_be_copy_of_callee6kMpnENode__i_; -text: .text%__1cXroundDouble_mem_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cIGraphKitMsaved_ex_oop6FpnNSafePointNode__pnENode__; -text: .text%__1cIPhaseCCPFwiden6kMpknEType_3_3_: phaseX.o; -text: .text%__1cFParseKensure_phi6Mii_pnHPhiNode__; -text: .text%__1cJloadFNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKNode_Array2t6MpnFArena__v_: postaloc.o; -text: .text%__1cOMachReturnNodeNis_MachReturn6M_p0_: ad_i486_misc.o; -text: .text%__1cIMachOperMdisp_as_type6kM_pknHTypePtr__: ad_i486.o; -text: .text%__1cPcheckCastPPNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIciObjectJset_ident6MI_v_; -text: .text%__1cPciObjectFactoryNinit_ident_of6MpnIciObject__v_; -text: .text%__1cQPreserveJVMState2T6M_v_; -text: .text%__1cQPreserveJVMState2t6MpnIGraphKit_i_v_; -text: .text%__1cNtestP_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKJNIHandlesKmake_local6FpnHoopDesc__pnI_jobject__; -text: .text%__1cIGraphKitLclean_stack6Mi_v_; -text: .text%__1cYDebugInformationRecorderYserialize_monitor_values6MpnNGrowableArray4CpnMMonitorValue____i_; -text: .text%__1cYDebugInformationRecorderVcreate_monitor_values6MpnNGrowableArray4CpnMMonitorValue____pnKDebugToken__; -text: .text%__1cYDebugInformationRecorderOdescribe_scope6MpnIciMethod_ipnKDebugToken_44_v_; -text: .text%__1cWMutableSpaceUsedHelperLtake_sample6M_x_: spaceCounters.o; -text: .text%__1cICallNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cFciEnvSget_klass_by_index6MpnPciInstanceKlass_iri_pnHciKlass__; -text: .text%__1cLcastP2INodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cRCompilationPolicyOmustBeCompiled6FnMmethodHandle__i_; -text: .text%__1cLBoxLockNodeGOpcode6kM_i_; -text: .text%__1cHTypePtrHget_con6kM_i_; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: callnode.o; -text: .text%__1cITypeFuncEhash6kM_i_; -text: .text%__1cJAssemblerJemit_data6MinJrelocInfoJrelocType_i_v_; -text: .text%__1cJAssemblerMemit_operand6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerMemit_operand6MpnMRegisterImpl_22nHAddressLScaleFactor_irknQRelocationHolder__v_; -text: .text%__1cLBoxLockNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMLinkResolverNresolve_klass6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__; -text: .text%__1cNloadRangeNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cLPhaseValuesHmakecon6MpknEType__pnHConNode__; -text: .text%__1cOcompI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cIciMethodPliveness_at_bci6Mi_nGBitMap__; -text: .text%__1cOMethodLivenessPget_liveness_at6Mi_nGBitMap__; -text: .text%__1cOMethodLivenessKBasicBlockPget_liveness_at6MpnIciMethod_i_nGBitMap__; -text: .text%__1cPSignatureStream2t6MnMsymbolHandle_i_v_; -text: .text%__1cITypeLongJsingleton6kM_i_; -text: .text%__1cOcompI_eRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cRMemBarAcquireNodeGOpcode6kM_i_; -text: .text%__1cJOopMapSetSfind_map_at_offset6kMii_pnGOopMap__; -text: .text%__1cICodeBlobbAoop_map_for_return_address6MpCi_pnGOopMap__; -text: .text%__1cLCounterDataOis_CounterData6M_i_: ciMethodData.o; -text: .text%__1cHnmethodKis_nmethod6kM_i_: nmethod.o; -text: .text%__1cOGenerateOopMapHinterp16MpnOBytecodeStream__v_; -text: .text%__1cLCastP2INodeGOpcode6kM_i_; -text: .text%__1cKCodeBufferOadd_stub_reloc6MpCrknQRelocationHolder_i_v_; -text: .text%__1cKCodeBufferOalloc_relocate6M_pnORelocateBuffer__; -text: .text%__1cMCallLeafNodeGOpcode6kM_i_; -text: .text%__1cJLoadSNodeGOpcode6kM_i_; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: subnode.o; -text: .text%__1cKjmpDirNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHTypePtrJsingleton6kM_i_; -text: .text%__1cJAssemblerEcall6MpCnJrelocInfoJrelocType__v_; -text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_; -text: .text%__1cIGraphKitObasic_plus_adr6MpnENode_2i_2_; -text: .text%__1cKMemBarNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIimmPOperIconstant6kM_i_: ad_i486_clone.o; -text: .text%__1cMmerge_region6FpnKRegionNode_pnIPhaseGVN__pnENode__: cfgnode.o; -text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cTCreateExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRshrI_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMPhaseIterGVNHmakecon6MpknEType__pnHConNode__; -text: .text%__1cMTypeKlassPtrCeq6kMpknEType__i_; -text: .text%__1cRaddI_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%JVM_GetMethodIxLocalsCount; -text: .text%__1cRNativeInstructionFwrote6Mi_v_; -text: .text%__1cWShouldNotReachHereNodeGpinned6kM_i_: ad_i486_misc.o; -text: .text%__1cICmpPNodeDsub6kMpknEType_3_3_; -text: .text%__1cWConstantPoolCacheEntryPbytecode_number6FnJBytecodesECode__i_: interpreterRuntime.o; -text: .text%__1cWConstantPoolCacheEntryLis_resolved6kMnJBytecodesECode__i_: interpreterRuntime.o; -text: .text%__1cWConstantPoolCacheEntryIas_flags6MnITosState_iiiii_i_; -text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cQMachCallJavaNodePis_MachCallJava6M_p0_: ad_i486_misc.o; -text: .text%__1cWShouldNotReachHereNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJimmI0OperIconstant6kM_i_: ad_i486_clone.o; -text: .text%__1cNloadConI0NodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cHMatcherWis_short_branch_offset6Mi_i_; -text: .text%__1cWConstantPoolCacheEntryGverify6kMpnMoutputStream__v_; -text: .text%__1cNloadKlassNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cITypeFuncCeq6kMpknEType__i_; -text: .text%__1cNSafePointNode2t6MIpnIJVMState__v_; -text: .text%__1cOGenerateOopMapPjump_targets_do6MpnOBytecodeStream_pFp0ipi_v4_i_; -text: .text%__1cHcommute6FpnENode_ii_i_: addnode.o; -text: .text%__1cJeRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: cfgnode.o; -text: .text%__1cGOopMapJheap_size6kM_i_; -text: .text%__1cHAddNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cLMachNopNodeMideal_Opcode6kM_i_: ad_i486.o; -text: .text%__1cLMachNopNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHCompileYout_preserve_stack_slots6F_I_; -text: .text%__1cIAddINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cKjmpDirNodeFclone6kM_pnENode__; -text: .text%__1cIciObject2t6MnGHandle__v_; -text: .text%__1cJTraceTime2T6M_v_; -text: .text%__1cPciObjectFactoryGinsert6MipnIciObject_pnNGrowableArray4C2___v_; -text: .text%__1cWShouldNotReachHereNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKRelocationTpd_call_destination6M_pC_; -text: .text%__1cOCallRelocationWfix_relocation_at_move6Mi_v_; -text: .text%__1cKRelocationXpd_set_call_destination6MpCi_v_; -text: .text%__1cOCallRelocationPset_destination6MpCi_v_; -text: .text%__1cJlabelOperFlabel6kM_pnFLabel__: ad_i486.o; -text: .text%__1cIHaltNodeGpinned6kM_i_: classes.o; -text: .text%__1cITypeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIRootNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cWMachCallStaticJavaNodePret_addr_offset6M_i_; -text: .text%__1cYCallStaticJavaDirectNodePcompute_padding6kMi_i_; -text: .text%__1cYCallStaticJavaDirectNodeKmethod_set6Mi_v_; -text: .text%__1cJStartNodeGpinned6kM_i_: classes.o; -text: .text%__1cMTypeKlassPtr2t6MnHTypePtrDPTR_pnHciKlass_i_v_; -text: .text%__1cJloadPNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%JVM_IsNaN; -text: .text%__1cJStoreNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cLBoxLockNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQciByteCodeStreamQget_method_index6M_i_; -text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__; -text: .text%__1cRInterpretedRFrameKtop_method6kM_nMmethodHandle__: rframe.o; -text: .text%__1cITypeFuncEmake6FpknJTypeTuple_3_pk0_; -text: .text%__1cPciObjectFactoryRcreate_new_object6MpnHoopDesc__pnIciObject__; -text: .text%__1cIGraphKitQkill_dead_locals6M_v_; -text: .text%__1cCosVcurrent_stack_pointer6F_pC_; -text: .text%__1cICallNodeHis_Call6M_p0_: classes.o; -text: .text%__1cJTraceTime2t6MpkcpnMelapsedTimer_iipnMoutputStream__v_; -text: .text%__1cNaddI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cXmembar_acquire_lockNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cJLoadPNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIGraphKitMreset_memory6M_pnENode__; -text: .text%__1cLklassVtableTupdate_super_vtable6MpnNinstanceKlass_pnNmethodOopDesc_i_i_; -text: .text%__1cNinstanceKlassQfind_local_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__i_; -text: .text%__1cNaddI_eRegNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cENodeQlatency_from_use6kMrnLBlock_Array_rnNGrowableArray4CI__pk0p0_i_; -text: .text%__1cMPhaseChaitinKprompt_use6MpnFBlock_I_i_; -text: .text%__1cICallInfoDset6MnLKlassHandle_1nMmethodHandle_2ipnGThread__v_; -text: .text%__1cOkill_dead_code6FpnENode_pnMPhaseIterGVN__i_: node.o; -text: .text%__1cFParsePload_state_from6Mpn0AFBlock__v_; -text: .text%__1cFParseMmerge_common6Mpn0AFBlock_i_v_; -text: .text%__1cNloadConI0NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJStartNodeIis_Start6M_p0_: callnode.o; -text: .text%__1cICmpINodeDsub6kMpknEType_3_3_; -text: .text%__1cHMemNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cIAddINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cLProfileDataPfollow_contents6M_v_: ciMethodData.o; -text: .text%__1cLProfileDataPadjust_pointers6M_v_: ciMethodData.o; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cNsubI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cICodeBlobJis_zombie6kM_i_: codeBlob.o; -text: .text%__1cJStoreNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNmethodOopDescbGupdate_compiled_code_entry_point6Mi_v_; -text: .text%__1cSvframeStreamCommonPfill_from_frame6M_i_; -text: .text%__1cNloadRangeNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cFBlockUhoist_LCA_above_defs6Mp01IrnLBlock_Array__1_; -text: .text%__1cLciSignatureHtype_at6kMi_pnGciType__; -text: .text%__1cIciMethodLscale_count6Mi_i_; -text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_; -text: .text%__1cHMonitorKnotify_all6M_i_; -text: .text%__1cKklassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cKklassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cJMarkSweepXrevisit_weak_klass_link6FpnFKlass__v_; -text: .text%__1cFKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cOCallRelocationFvalue6M_pC_: ad_i486.o; -text: .text%__1cNtestP_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMTypeKlassPtrEmake6FnHTypePtrDPTR_pnHciKlass_i_pk0_; -text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cScompP_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRSignatureIteratorSiterate_parameters6MX_v_; -text: .text%__1cOPhaseIdealLoopIset_idom6MpnENode_2I_v_; -text: .text%__1cNSafePointNodeGpinned6kM_i_: classes.o; -text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__; -text: .text%__1cWconstantPoolCacheKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cLklassVtableToop_follow_contents6M_v_; -text: .text%__1cLklassVtableToop_adjust_pointers6M_v_; -text: .text%__1cIRootNodeNis_block_proj6kM_pknENode__: classes.o; -text: .text%__1cENodeHis_Type6M_pnITypeNode__: classes.o; -text: .text%__1cNmethodOopDescPis_final_method6kM_i_; -text: .text%__1cOPhaseIdealLoopQconditional_move6MpnENode__2_; -text: .text%__1cNSignatureInfoHdo_void6M_v_: bytecode.o; -text: .text%__1cNloadKlassNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cIGraphKitRnull_check_common6MpnENode_nJBasicType_i_2_; -text: .text%__1cICmpLNodeGOpcode6kM_i_; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: constMethodKlass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: constMethodKlass.o; -text: .text%__1cSconstMethodOopDescLobject_size6Fiiii_i_; -text: .text%__1cKoopFactoryPnew_constMethod6FiiiipnGThread__pnSconstMethodOopDesc__; -text: .text%__1cPClassFileParserMparse_method6MnSconstantPoolHandle_ipnLAccessFlags_pnPtypeArrayHandle_55pnGThread__nMmethodHandle__; -text: .text%__1cKoopFactoryKnew_method6FinLAccessFlags_iiipnGThread__pnNmethodOopDesc__; -text: .text%__1cLklassVtableWneeds_new_vtable_entry6FpnNmethodOopDesc_pnMklassOopDesc_pnHoopDesc_pnNsymbolOopDesc_nLAccessFlags__i_; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: constMethodKlass.o; -text: .text%__1cQconstMethodKlassIallocate6MiiiipnGThread__pnSconstMethodOopDesc__; -text: .text%__1cSconstMethodOopDescZset_inlined_tables_length6Miii_v_; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: methodKlass.o; -text: .text%__1cNmethodOopDescLobject_size6Fi_i_; -text: .text%__1cNmethodOopDescJinit_code6M_v_; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: methodKlass.o; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: methodKlass.o; -text: .text%__1cLmethodKlassIallocate6MnRconstMethodHandle_nLAccessFlags_pnGThread__pnNmethodOopDesc__; -text: .text%__1cNmethodOopDescbAcompute_size_of_parameters6MpnGThread__v_; -text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_; -text: .text%__1cOcompU_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTciConstantPoolCacheEfind6Mi_i_; -text: .text%__1cKciTypeFlowGJsrSetJcopy_into6Mp1_v_; -text: .text%__1cJLoadLNodeGOpcode6kM_i_; -text: .text%__1cHOrINodeGOpcode6kM_i_; -text: .text%__1cILoadNodeRraise_bottom_type6MpknEType__v_; -text: .text%__1cJMarkSweepNpreserve_mark6FpnHoopDesc_pnLmarkOopDesc__v_; -text: .text%__1cIRewriterOrewrite_method6FnMmethodHandle_rnIintArray_pnGThread__1_; -text: .text%__1cNmethodOopDescLlink_method6FnMmethodHandle__v_; -text: .text%__1cPClassFileParserbDverify_legal_method_modifiers6MiinMsymbolHandle_pnGThread__v_; -text: .text%__1cJloadINodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cQSystemDictionaryEfind6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cFParseFBlockRsuccessor_for_bci6Mi_p1_; -text: .text%__1cQleaPIdxScaleNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKTypeOopPtrFempty6kM_i_; -text: .text%__1cJleaP8NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%JVM_CurrentThread; -text: .text%__1cPindOffset32OperFscale6kM_i_: ad_i486.o; -text: .text%__1cKBranchDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cLOopMapCacheIentry_at6kMi_pnQOopMapCacheEntry__; -text: .text%__1cRInlineCacheBufferIcontains6FpC_i_; -text: .text%__1cKCompiledICWis_in_transition_state6kM_i_; -text: .text%__1cHOopFlowEmake6FpnFArena_i_p0_; -text: .text%__1cOGenerateOopMapKcheck_type6MnNCellTypeState_1_v_; -text: .text%__1cMMergeMemNodeNgrow_to_match6Mpk0_v_; -text: .text%__1cVeADXRegL_low_onlyOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cVloadConL_low_onlyNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cQleaPIdxScaleNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cHTypeIntFxdual6kM_pknEType__; -text: .text%__1cVloadConL_low_onlyNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNMachIdealNodePoper_input_base6kM_I_: machnode.o; -text: .text%__1cNSharedRuntimeDf2i6Ff_i_; -text: .text%__1cLLShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cVloadConL_low_onlyNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKTypeAryPtrFklass6kM_pnHciKlass__; -text: .text%__1cRaddI_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cRRawBytecodeStreamMset_interval6Mii_v_; -text: .text%__1cRInterpretedRFrameEinit6M_v_; -text: .text%__1cMMergeMemNodeRmake_empty_memory6F_pnENode__; -text: .text%__1cMMergeMemNode2t6MpnENode__v_; -text: .text%__1cNSafePointNodeMis_SafePoint6M_p0_: callnode.o; -text: .text%__1cHciFieldJwill_link6MpnPciInstanceKlass_nJBytecodesECode__i_; -text: .text%__1cFciEnvXget_field_by_index_impl6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__; -text: .text%__1cFciEnvSget_field_by_index6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cQciByteCodeStreamJget_field6Mri_pnHciField__; -text: .text%__1cKBlock_ListGremove6MI_v_; -text: .text%__1cECopyXconjoint_words_to_lower6FpnIHeapWord_2I_v_: block.o; -text: .text%__1cXvirtual_call_RelocationIparse_ic6FrpnICodeBlob_rpC5rppnHoopDesc_pi_nNRelocIterator__; -text: .text%__1cWConstantPoolCacheEntryOset_bytecode_16MnJBytecodesECode__v_; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: connode.o; -text: .text%__1cIPhaseGVNUtransform_no_reclaim6MpnENode__2_; -text: .text%__1cMLinkResolverbFlinktime_resolve_virtual_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%JVM_GetCPMethodClassNameUTF; -text: .text%__1cKCastPPNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNstoreImmBNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cHOopFlowFclone6Mp0i_v_; -text: .text%__1cSCallLeafDirectNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKCompiledICOic_destination6kM_pC_; -text: .text%__1cMPhaseChaitinJsplit_DEF6MpnENode_pnFBlock_iIp25nNGrowableArray4CI__i_I_; -text: .text%__1cNGCTaskManagerNresource_flag6MI_i_; -text: .text%__1cNGCTaskManagerYshould_release_resources6MI_i_; -text: .text%__1cNtestP_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cLStringTableGlookup6MipHiI_pnHoopDesc__; -text: .text%__1cIBoolNodeJideal_reg6kM_I_: subnode.o; -text: .text%__1cFStateM_sub_Op_Bool6MpknENode__v_; -text: .text%__1cHCmpNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cPSignatureStreamJas_symbol6MpnGThread__pnNsymbolOopDesc__; -text: .text%__1cPciInstanceKlassYunique_concrete_subklass6M_p0_; -text: .text%__1cRcmpFastUnlockNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKCastPPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cHAddNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cENodeFis_If6M_pnGIfNode__: subnode.o; -text: .text%__1cKciTypeFlowNmake_range_at6Mi_pn0AFRange__; -text: .text%__1cTCreateExceptionNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKjmpDirNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNaddI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNinstanceKlassVshould_be_initialized6kM_i_; -text: .text%__1cGThreadLis_in_stack6kMpC_i_; -text: .text%__1cKJavaThreadNis_lock_owned6kMpC_i_; -text: .text%__1cJStartNodeGOpcode6kM_i_; -text: .text%__1cPconvF2D_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: subnode.o; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: subnode.o; -text: .text%__1cOMethodLivenessKBasicBlockJstore_one6Mi_v_; -text: .text%__1cbFCompressedLineNumberWriteStream2t6Mi_v_; -text: .text%__1cSconstMethodOopDescbBcompressed_linenumber_table6kM_pC_; -text: .text%__1cPClassFileParserWparse_linenumber_table6MIIpipnGThread__pC_; -text: .text%__1cNsubI_eRegNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cMWarmCallInfoHis_cold6kM_i_; -text: .text%__1cFStateK_sub_Op_If6MpknENode__v_; -text: .text%__1cJleaP8NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cFParseFBlockJinit_node6Mp0i_v_; -text: .text%__1cFParseFBlockKinit_graph6Mp0_v_; -text: .text%__1cGBitMapVset_union_with_result6M0_i_; -text: .text%__1cOPhaseIdealLoopRregister_new_node6MpnENode_2_v_; -text: .text%__1cNtestI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIPhaseIFGFUnion6MII_v_; -text: .text%__1cIGraphKit2t6MpnIJVMState__v_; -text: .text%__1cKCompiledIC2t6MpnKRelocation__v_; -text: .text%__1cLcastP2INodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNloadKlassNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cWConstantPoolCacheEntryOset_bytecode_26MnJBytecodesECode__v_; -text: .text%__1cJStartNodeGis_CFG6kM_i_: callnode.o; -text: .text%__1cLBoxLockNodeHsize_of6kM_I_; -text: .text%__1cNinstanceKlassUfollow_static_fields6M_v_; -text: .text%__1cNinstanceKlassUadjust_static_fields6M_v_; -text: .text%__1cRconstantPoolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cLklassItableToop_adjust_pointers6M_v_; -text: .text%__1cSinstanceKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cLklassItableToop_follow_contents6M_v_; -text: .text%__1cSinstanceKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cRconstantPoolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cICmpUNodeDsub6kMpknEType_3_3_; -text: .text%__1cNincI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKjmpConNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOMergeMemStreamOnext_non_empty6Mi_i_: graphKit.o; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cTciConstantPoolCacheDget6Mi_pv_; -text: .text%__1cScompI_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cENodeHis_Goto6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: memnode.o; -text: .text%__1cOGenerateOopMapFppop16MnNCellTypeState__v_; -text: .text%__1cNLoadRangeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cScompI_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: subnode.o; -text: .text%__1cHTypePtrLdual_offset6kM_i_; -text: .text%__1cNGCTaskManagerIget_task6MI_pnGGCTask__; -text: .text%__1cGGCTaskKinitialize6M_v_; -text: .text%__1cNGCTaskManagerWdecrement_busy_workers6M_I_; -text: .text%__1cLGCTaskQdDueueGremove6M_pnGGCTask__; -text: .text%__1cNGCTaskManagerWincrement_busy_workers6M_I_; -text: .text%__1cLGCTaskQdDueueHdequeue6M_pnGGCTask__; -text: .text%__1cLGCTaskQdDueueHenqueue6MpnGGCTask__v_; -text: .text%__1cNGCTaskManagerPnote_completion6MI_v_; -text: .text%__1cENodeHlatency6MI_I_; -text: .text%__1cNsubI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cScompP_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNtestI_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cFframeZsender_for_compiled_frame6kMpnLRegisterMap_pnICodeBlob_i_0_; -text: .text%__1cPClassFileParserbFparse_constant_pool_class_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cNstoreImmPNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cICodeBlobLlink_offset6M_i_; -text: .text%__1cFParseFBlockMrecord_state6Mp0_v_; -text: .text%__1cFParseMdo_one_block6M_v_; -text: .text%__1cJCatchNodeIis_Catch6kM_pk0_: classes.o; -text: .text%__1cENodeHdel_out6Mp0_v_: addnode.o; -text: .text%__1cOMethodLivenessKBasicBlockMmerge_normal6MnGBitMap__i_; -text: .text%__1cLConvI2LNodeGOpcode6kM_i_; -text: .text%__1cPClassFileParserZskip_over_field_signature6MpciIpnGThread__1_; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: callnode.o; -text: .text%__1cIGraphKitTadd_safepoint_edges6MpnNSafePointNode_i_v_; -text: .text%__1cIJVMStateKclone_deep6kM_p0_; -text: .text%__1cENodeNadd_req_batch6Mp0I_v_; -text: .text%__1cIJVMStateLdebug_depth6kM_I_; -text: .text%__1cSvframeStreamCommonbBfill_from_interpreter_frame6M_v_; -text: .text%__1cJloadINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFParseFmerge6Mi_v_; -text: .text%__1cMLinkResolverZcheck_field_accessability6FnLKlassHandle_11rnPfieldDescriptor_pnGThread__v_; -text: .text%__1cPFieldAccessInfoDset6MnLKlassHandle_nMsymbolHandle_iinJBasicType_nLAccessFlags__v_; -text: .text%__1cMLinkResolverNresolve_field6FrnPFieldAccessInfo_nSconstantPoolHandle_inJBytecodesECode_iipnGThread__v_; -text: .text%__1cNaddI_eRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cICmpPNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cKBufferBlobIis_alive6kM_i_: codeBlob.o; -text: .text%__1cFframebFinterpreter_frame_monitor_begin6kM_pnPBasicObjectLock__; -text: .text%__1cGGCTask2t6M_v_; -text: .text%__1cOMacroAssemblerZneeds_explicit_null_check6Fi_i_; -text: .text%__1cNstoreImmBNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cETypeFwiden6kMpk0_2_: type.o; -text: .text%__1cIAddPNodeQmach_bottom_type6FpknIMachNode__pknEType__; -text: .text%__1cJLoadBNodeGOpcode6kM_i_; -text: .text%__1cRsalI_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cQleaPIdxScaleNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cScompP_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cFframeNis_java_frame6kM_i_; -text: .text%__1cOPhaseIdealLoopGspinup6MpnENode_2222pnLsmall_cache__2_; -text: .text%__1cRcmpFastUnlockNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: callnode.o; -text: .text%__1cJloadCNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNSafePointNodeEhash6kM_I_: callnode.o; -text: .text%__1cMnabxRegPOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cPCountedLoopNodeGOpcode6kM_i_; -text: .text%__1cKciTypeFlowIblock_at6Mipn0AGJsrSet_n0AMCreateOption__pn0AFBlock__; -text: .text%__1cKciTypeFlowFRangeNget_block_for6Mpn0AGJsrSet_n0AMCreateOption__pn0AFBlock__; -text: .text%__1cHTypeAryFxmeet6kMpknEType__3_; -text: .text%__1cLjmpConUNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNaddI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cTCreateExceptionNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cGvframe2t6MpknFframe_pknLRegisterMap_pnKJavaThread__v_; -text: .text%__1cLRegisterMap2t6Mpk0_v_; -text: .text%__1cUGenericGrowableArrayMraw_contains6kMpknEGrET__i_; -text: .text%__1cSvframeStreamCommonEnext6M_v_; -text: .text%__1cIMachNodeMcisc_operand6kM_i_: machnode.o; -text: .text%__1cITypeFuncEmake6FpnIciMethod__pk0_; -text: .text%__1cENodeLnonnull_req6kM_p0_; -text: .text%__1cSPSPromotionManagerbBgc_thread_promotion_manager6Fi_p0_; -text: .text%__1cITypeLongFxmeet6kMpknEType__3_; -text: .text%__1cRcmpFastUnlockNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIAddINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKstoreCNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKciTypeFlowLStateVector2t6Mp0_v_; -text: .text%__1cOMethodLivenessNwork_list_get6M_pn0AKBasicBlock__; -text: .text%__1cIIndexSetFclear6M_v_: coalesce.o; -text: .text%__1cOPhaseIdealLoopKhandle_use6MpnENode_2pnLsmall_cache_22222_v_; -text: .text%__1cOPhaseIdealLoopOfind_use_block6MpnENode_22222_2_; -text: .text%__1cXmembar_release_lockNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cGvframeKnew_vframe6FpknFframe_pknLRegisterMap_pnKJavaThread__p0_; -text: .text%__1cCosGmalloc6FI_pv_; -text: .text%__1cNmethodOopDescWwas_executed_more_than6kMi_i_; -text: .text%__1cRInterpreterOopMapKinitialize6M_v_; -text: .text%__1cENodeMis_SpillCopy6M_pnRMachSpillCopyNode__: machnode.o; -text: .text%__1cRMachNullCheckNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cILoopNodeGOpcode6kM_i_; -text: .text%__1cICmpINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_: bytecode.o; -text: .text%__1cHCompileKTracePhase2t6MpkcpnMelapsedTimer_i_v_; -text: .text%__1cHCompileKTracePhase2T6M_v_; -text: .text%__1cILoadNodeHsize_of6kM_I_; -text: .text%__1cKciTypeFlowFBlockPis_simpler_than6Mp1_i_; -text: .text%__1cRshrI_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_; -text: .text%__1cFciEnvYget_method_by_index_impl6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cFciEnvTget_method_by_index6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cQciByteCodeStreamKget_method6Mri_pnIciMethod__; -text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; -text: .text%__1cQleaPIdxScaleNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNCatchProjNodeLbottom_type6kM_pknEType__: cfgnode.o; -text: .text%__1cXindIndexScaleOffsetOperFscale6kM_i_: ad_i486.o; -text: .text%__1cNCatchProjNodeHsize_of6kM_I_: cfgnode.o; -text: .text%__1cKciTypeFlowLStateVectorEmeet6Mpk1_i_; -text: .text%__1cTOopMapForCacheEntryRpossible_gc_point6MpnOBytecodeStream__i_; -text: .text%__1cRMachSafePointNode2t6M_v_; -text: .text%__1cHMatcherKmatch_sfpt6MpnNSafePointNode__pnIMachNode__; -text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; -text: .text%__1cQleaPIdxScaleNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOcompI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHemit_cc6FrnKCodeBuffer_ii_v_; -text: .text%__1cJloadLNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cNCatchProjNodeEhash6kM_I_; -text: .text%__1cNincI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cURethrowExceptionNodeNis_block_proj6kM_pknENode__: ad_i486_misc.o; -text: .text%__1cOPhaseIdealLoopHdom_lca6kMpnENode_2_2_; -text: .text%__1cHMatcherScalling_convention6FpnLRegPair_Ii_v_; -text: .text%__1cIGraphKitTadd_exception_state6MpnNSafePointNode__v_; -text: .text%__1cQindOffset32XOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cICallNodeOis_CallRuntime6kM_pknPCallRuntimeNode__: callnode.o; -text: .text%__1cXinsert_anti_dependences6FrpnFBlock_pnENode_rnLBlock_Array__i_: gcm.o; -text: .text%__1cIimmLOperJconstantL6kM_x_: ad_i486_clone.o; -text: .text%__1cWflagsReg_long_LTGEOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cENodeHdel_out6Mp0_v_: lcm.o; -text: .text%__1cXAdaptiveWeightedAverageYcompute_adaptive_average6Mff_f_; -text: .text%__1cIGraphKitOset_all_memory6MpnENode__v_; -text: .text%__1cFKlassIsubklass6kM_p0_; -text: .text%__1cFframebDinterpreter_frame_monitor_end6kM_pnPBasicObjectLock__; -text: .text%__1cHMatcherVReduceInst_Chain_Rule6MpnFState_ipnIMachNode_rpnENode__v_; -text: .text%__1cMciMethodDataLhas_trap_at6MpnLProfileData_i_i_; -text: .text%__1cICodeBlobTfix_oop_relocations6MpC1_v_; -text: .text%__1cICodeBlobTfix_oop_relocations6M_v_; -text: .text%__1cNmethodOopDescImask_for6MipnRInterpreterOopMap__v_; -text: .text%__1cLOopMapCacheGlookup6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cRInterpreterOopMap2t6M_v_; -text: .text%__1cRInterpreterOopMap2T6M_v_; -text: .text%__1cRInterpreterOopMapLiterate_oop6MpnNOffsetClosure__v_; -text: .text%__1cRInterpreterOopMapNresource_copy6MpnQOopMapCacheEntry__v_; -text: .text%__1cNinstanceKlassImask_for6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cFframeToops_interpreted_do6MpnKOopClosure_pknLRegisterMap_i_v_; -text: .text%__1cNinstanceKlassKinitialize6MpnGThread__v_; -text: .text%__1cHMatcherPc_frame_pointer6kM_nHOptoRegEName__; -text: .text%__1cMMachCallNode2t6M_v_; -text: .text%__1cFBlockKsched_call6MrnHMatcher_rnLBlock_Array_IrnJNode_List_pipnMMachCallNode_rnJVectorSet__I_; -text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; -text: .text%__1cHTypeIntEmake6Fii_pk0_; -text: .text%__1cOMethodLivenessKBasicBlockJpropagate6Mp0_v_; -text: .text%__1cNsubI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cJOopMapSetTupdate_register_map6FpknFframe_pnICodeBlob_pnLRegisterMap__v_; -text: .text%__1cNsubI_eRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cQSystemDictionaryKfind_class6FiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cIGraphKitbLset_predefined_input_for_runtime_call6MpnNSafePointNode__v_; -text: .text%JVM_GetCPFieldClassNameUTF; -text: .text%__1cLcastP2INodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cYciExceptionHandlerStreamEnext6M_v_: ciStreams.o; -text: .text%__1cHRetNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cHBitDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cScompP_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKciTypeFlowLStateVectorOpush_translate6MpnGciType__v_; -text: .text%__1cQSystemDictionarybEresolve_instance_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cKciTypeFlowGJsrSet2t6MpnFArena_i_v_; -text: .text%__1cENodeJset_req_X6MIp0pnMPhaseIterGVN__v_; -text: .text%__1cOcompU_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: typeArrayKlass.o; -text: .text%__1cOtypeArrayKlassSallocate_permanent6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cNstoreImmPNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cRcmpFastUnlockNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cScompI_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: connode.o; -text: .text%__1cPindOffset32OperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_: frame.o; -text: .text%__1cLBoxLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHnmethodIis_alive6kM_i_: nmethod.o; -text: .text%__1cPClassFileParserbGparse_constant_pool_string_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cNloadConI0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: connode.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: connode.o; -text: .text%__1cHCompileSflatten_alias_type6kMpknHTypePtr__3_; -text: .text%__1cNincI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: callnode.o; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: memnode.o; -text: .text%__1cLBoxLockNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cMorI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cGOopMap2t6Mii_v_; -text: .text%__1cJOopMapSetKadd_gc_map6MiipnGOopMap__v_; -text: .text%__1cYDebugInformationRecorderKadd_oopmap6MiipnGOopMap__v_; -text: .text%__1cMoutputStreamPupdate_position6MpkcI_v_; -text: .text%__1cMstringStreamFwrite6MpkcI_v_; -text: .text%__1cMFastLockNodeGOpcode6kM_i_; -text: .text%__1cIciMethodRhas_compiled_code6M_i_; -text: .text%__1cMLinkResolverMresolve_pool6FrnLKlassHandle_rnMsymbolHandle_42nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoolHandle_inJBytecodesECode_pnGThread__v_; -text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; -text: .text%__1cICallInfoDset6MnLKlassHandle_nMmethodHandle_pnGThread__v_; -text: .text%__1cKstoreCNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNloadKlassNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvL2INodeGOpcode6kM_i_; -text: .text%__1cRMachSafePointNodeSis_MachCallRuntime6M_pnTMachCallRuntimeNode__: ad_i486_misc.o; -text: .text%__1cHnmethodOis_not_entrant6kM_i_: nmethod.o; -text: .text%__1cIGraphKitbDtransfer_exceptions_into_jvms6M_pnIJVMState__; -text: .text%__1cITypeLongEmake6Fx_pk0_; -text: .text%__1cYciExceptionHandlerStreamEnext6M_v_: ciTypeFlow.o; -text: .text%__1cJloadSNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cICallNodeJideal_reg6kM_I_: callnode.o; -text: .text%__1cRMachSafePointNodePis_MachCallLeaf6M_pnQMachCallLeafNode__: ad_i486_misc.o; -text: .text%__1cRMachSafePointNodeLset_oop_map6MpnGOopMap__v_: ad_i486_misc.o; -text: .text%__1cYDebugInformationRecorderNadd_safepoint6MiipnGOopMap__v_; -text: .text%__1cHOopFlowNbuild_oop_map6MpnENode_ipnNPhaseRegAlloc_pi_pnGOopMap__; -text: .text%__1cHCompileTProcess_OopMap_Node6MpnIMachNode_i_v_; -text: .text%__1cENodeGis_Con6kM_I_: callnode.o; -text: .text%__1cILoopNodeHis_Loop6M_p0_: classes.o; -text: .text%__1cOoop_RelocationJpack_data6M_i_; -text: .text%__1cJVectorSetFClear6M_v_; -text: .text%__1cENodeFis_If6M_pnGIfNode__: cfgnode.o; -text: .text%__1cMCallJavaNodeLis_CallJava6kM_pk0_: callnode.o; -text: .text%__1cICallNodeScalling_convention6kMpnLRegPair_I_v_; -text: .text%__1cMLinkResolverNresolve_field6FrnPFieldAccessInfo_nSconstantPoolHandle_inJBytecodesECode_ipnGThread__v_; -text: .text%__1cWConstantPoolCacheEntryJset_field6MnJBytecodesECode_2nLKlassHandle_iinITosState_ii_v_; -text: .text%__1cLas_TosState6FnJBasicType__nITosState__: interpreterRuntime.o; -text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cYCallStaticJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMachOperIconstant6kM_i_; -text: .text%__1cRaddI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXAdaptiveWeightedAverageGsample6Mf_v_; -text: .text%__1cWMachCallStaticJavaNodeVis_MachCallStaticJava6M_p0_: ad_i486_misc.o; -text: .text%__1cFStateW_sub_Op_CallStaticJava6MpknENode__v_; -text: .text%__1cRinterpretedVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cLklassVtableNput_method_at6MpnNmethodOopDesc_i_v_; -text: .text%__1cMloadConPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNdecI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cPVirtualCallDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cENodeHdel_out6Mp0_v_: parse3.o; -text: .text%__1cMloadConLNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNloadKlassNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cJleaP8NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cKRelocationLunpack_data6M_v_: codeBlob.o; -text: .text%__1cJimmI8OperIconstant6kM_i_: ad_i486_clone.o; -text: .text%__1cKstoreCNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cGOopMapHcopy_to6MpC_v_; -text: .text%__1cRMachSafePointNodeWis_MachCallInterpreter6M_pnXMachCallInterpreterNode__: ad_i486_misc.o; -text: .text%__1cLPhaseValuesHzerocon6MnJBasicType__pnHConNode__; -text: .text%__1cScompI_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeHis_Root6M_pnIRootNode__: classes.o; -text: .text%__1cOGenerateOopMapGppush16MnNCellTypeState__v_; -text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cLas_TosState6FnJBasicType__nITosState__: cpCacheOop.o; -text: .text%__1cMPhaseChaitinLclone_projs6MpnFBlock_IpnENode_4rI_i_; -text: .text%__1cCosEfree6Fpv_v_; -text: .text%__1cKInlineTreeJcallee_at6kMipnIciMethod__p0_; -text: .text%__1cKJavaThreadOis_Java_thread6kM_i_: thread.o; -text: .text%__1cRcmpFastUnlockNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cOleaPIdxOffNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJCodeCacheIcontains6Fpv_i_; -text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cMVirtualSpaceOcommitted_size6kM_I_; -text: .text%__1cNinstanceKlassSlookup_osr_nmethod6kMkpnNmethodOopDesc_i_pnHnmethod__; -text: .text%__1cGRFrame2t6MnFframe_pnKJavaThread_kp0_v_; -text: .text%__1cYCallStaticJavaDirectNodeFreloc6kM_i_; -text: .text%__1cKciTypeFlowLStateVectorJcopy_into6kMp1_v_; -text: .text%__1cPThreadLocalNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJLoadCNodeGOpcode6kM_i_; -text: .text%__1cKciTypeFlowFBlockKsuccessors6MpnQciByteCodeStream_pn0ALStateVector_pn0AGJsrSet__pnNGrowableArray4Cp1___; -text: .text%__1cKciTypeFlowQadd_to_work_list6Mpn0AFBlock__v_; -text: .text%__1cKciTypeFlowOwork_list_next6M_pn0AFBlock__; -text: .text%__1cKciTypeFlowKflow_block6Mpn0AFBlock_pn0ALStateVector_pn0AGJsrSet__v_; -text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; -text: .text%__1cJOopMapSetGall_do6FpknFframe_pnICodeBlob_pknLRegisterMap_pnKOopClosure_pFppnHoopDesc_9E_v9B9B_v_; -text: .text%__1cFframeRoops_code_blob_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cIGraphKitNuncommon_trap6MipnHciKlass_pkci_v_; -text: .text%__1cJOopMapSetHoops_do6FpknFframe_pnICodeBlob_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cIGraphKitJmake_load6MpnENode_2pknEType_nJBasicType_i_2_; -text: .text%__1cILoadNodeEmake6FpnENode_22pknHTypePtr_pknEType_nJBasicType__p0_; -text: .text%__1cOleaPIdxOffNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLOptoRuntimeSuncommon_trap_Type6F_pknITypeFunc__; -text: .text%__1cIHaltNode2t6MpnENode_2_v_; -text: .text%__1cMindirectOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cKciTypeFlowFBlock2t6Mp0pn0AFRange_pn0AGJsrSet__v_; -text: .text%__1cJloadLNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cLPCTableNodeLbottom_type6kM_pknEType__; -text: .text%__1cMCreateExNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cYciExceptionHandlerStreamFcount6M_i_; -text: .text%__1cKciTypeFlowFBlockScompute_exceptions6M_v_; -text: .text%__1cScompU_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cFciEnvWget_klass_by_name_impl6MpnHciKlass_pnIciSymbol_i_2_; -text: .text%__1cKOopClosureLdo_nmethods6kM_ki_: psTasks.o; -text: .text%__1cWstatic_stub_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cIimmPOperPconstant_is_oop6kM_i_: ad_i486_clone.o; -text: .text%__1cLanyRegPOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cLanyRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cOMethodLivenessNwork_list_add6Mpn0AKBasicBlock__v_; -text: .text%__1cMURShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFParsePdo_field_access6Mii_v_; -text: .text%__1cPCountedLoopNodeOis_CountedLoop6M_p0_: classes.o; -text: .text%__1cIAndLNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitQset_saved_ex_oop6FpnNSafePointNode_pnENode__v_; -text: .text%__1cKciTypeFlowPflow_successors6MpnNGrowableArray4Cpn0AFBlock___pn0ALStateVector__v_; -text: .text%__1cIGraphKitUmake_exception_state6MpnENode__pnNSafePointNode__; -text: .text%__1cLcastP2INodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRshrI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGPcDesc2t6Miii_v_; -text: .text%__1cHnmethodKcopy_pc_at6MipnGPcDesc__v_; -text: .text%__1cIPipelineXfunctional_unit_latency6kMIpk0_I_; -text: .text%__1cLTypeInstPtrFxdual6kM_pknEType__; -text: .text%__1cIJumpDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cNdecI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cFTypeDCeq6kMpknEType__i_; -text: .text%__1cSindIndexOffsetOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cIMulLNodeGOpcode6kM_i_; -text: .text%__1cOMethodLivenessNmake_block_at6Mipn0AKBasicBlock__2_; -text: .text%__1cENodeHis_Goto6kM_I_: cfgnode.o; -text: .text%__1cHCompileKalias_type6MpnHciField__pn0AJAliasType__; -text: .text%__1cINodeHashJhash_find6MpknENode__p1_; -text: .text%__1cNloadConL0NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cQSystemDictionaryPresolve_or_fail6FnMsymbolHandle_nGHandle_2ipnGThread__pnMklassOopDesc__; -text: .text%__1cLLShiftINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cRsalI_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cJLoadINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLnaxRegPOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cFParseFBlockNlocal_type_at6kMi_pknEType__; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: methodKlass.o; -text: .text%__1cXjava_lang_ref_ReferenceNreferent_addr6FpnHoopDesc__p2_; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: connode.o; -text: .text%__1cENodeOis_CountedLoop6M_pnPCountedLoopNode__: loopnode.o; -text: .text%__1cMelapsedTimerFstart6M_v_; -text: .text%__1cMelapsedTimerEstop6M_v_; -text: .text%__1cNaddI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cYciExceptionHandlerStreamEnext6M_v_: methodLiveness.o; -text: .text%__1cNloadConL0NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cLStringTableGintern6FnGHandle_pHipnGThread__pnHoopDesc__; -text: .text%__1cLStringTableLhash_string6FpHi_i_; -text: .text%__1cMMergeMemNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cEUTF8Hstrrchr6FpWiW_1_; -text: .text%__1cPshlI_eReg_1NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cMCreateExNodeGpinned6kM_i_: classes.o; -text: .text%__1cIXorINodeGOpcode6kM_i_; -text: .text%__1cRindIndexScaleOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cNloadConL0NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cVLoaderConstraintTableWfind_loader_constraint6MnMsymbolHandle_nGHandle__ppnVLoaderConstraintEntry__; -text: .text%__1cMPhaseIterGVNJtransform6MpnENode__2_; -text: .text%__1cHi2sNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cLLShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRindIndexScaleOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMPhaseChaitinTsplit_Rematerialize6MpnENode_pnFBlock_IrInNGrowableArray4CI__ipIp2i_2_; -text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; -text: .text%__1cENodeHis_Call6M_pnICallNode__: ad_i486_misc.o; -text: .text%__1cIConLNodeGOpcode6kM_i_; -text: .text%__1cHCompileZintrinsic_insertion_index6MpnIciMethod_i_i_; -text: .text%__1cNstoreImmBNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cILoopNodeHis_Loop6M_p0_: loopnode.o; -text: .text%__1cRandI_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKstoreINodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cGciTypeMis_classless6kM_i_: ciType.o; -text: .text%__1cTleaPIdxScaleOffNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cHTypeIntFwiden6kMpknEType__3_; -text: .text%__1cNCallGenerator2t6MpnIciMethod__v_; -text: .text%__1cIGraphKit2t6M_v_; -text: .text%__1cHMulNodeEhash6kM_I_; -text: .text%__1cFStateM_sub_Op_ConP6MpknENode__v_; -text: .text%__1cIciSymbol2t6MnMsymbolHandle__v_; -text: .text%__1cKRelocationSfix_oop_relocation6M_v_: codeBlob.o; -text: .text%__1cIAddLNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitNset_map_clone6MpnNSafePointNode__v_; -text: .text%__1cIGraphKitOreplace_in_map6MpnENode_2_v_; -text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_; -text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cScompU_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cHCompilebAallow_range_check_smearing6kM_i_; -text: .text%__1cITypeLongEmake6Fxxi_pk0_; -text: .text%JVM_GetCPMethodNameUTF; -text: .text%__1cPmethodDataKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cNmodI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLjmpConUNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNLoadKlassNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJeRegIOperFclone6kM_pnIMachOper__; -text: .text%__1cQciByteCodeStreamZget_declared_field_holder6M_pnPciInstanceKlass__; -text: .text%__1cQciByteCodeStreamWget_field_holder_index6M_i_; -text: .text%__1cNSafePointNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cENodeIis_Start6M_pnJStartNode__: classes.o; -text: .text%__1cTconstantPoolOopDescOstring_at_impl6FnSconstantPoolHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPoolHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cNdecI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLOptoRuntimeOnew_objArray_C6FpnMklassOopDesc_ipnKJavaThread__v_; -text: .text%__1cQjava_lang_StringQbasic_create_oop6FpnQtypeArrayOopDesc_ipnGThread__pnHoopDesc__; -text: .text%__1cPcheckCastPPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadSNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKReturnNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cMLinkResolverbNlinktime_resolve_virtual_method_or_null6FnLKlassHandle_nMsymbolHandle_21i_nMmethodHandle__; -text: .text%__1cNmethodOopDescbHhas_unloaded_classes_in_signature6FnMmethodHandle_pnGThread__i_; -text: .text%__1cPindOffset32OperNbase_position6kM_i_: ad_i486.o; -text: .text%__1cPindOffset32OperNconstant_disp6kM_i_: ad_i486.o; -text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: instanceKlass.o; -text: .text%__1cQmark_inner_loops6FpnIPhaseCFG_pnFBlock__v_: block.o; -text: .text%__1cPindOffset32OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cPindOffset32OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cPindOffset32OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cOemit_d32_reloc6FrnKCodeBuffer_inJrelocInfoJrelocType_i_v_; -text: .text%__1cJloadLNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadSNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_; -text: .text%__1cKjmpConNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeFis_If6M_pnGIfNode__: memnode.o; -text: .text%__1cLBuildCutout2t6MpnIGraphKit_pnENode_ff_v_; -text: .text%__1cLBuildCutout2T6M_v_; -text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__: graphKit.o; -text: .text%__1cPDictionaryEntrybAcontains_protection_domain6kMpnHoopDesc__i_; -text: .text%__1cNPhaseRegAllocKoffset2reg6kMi_nHOptoRegEName__; -text: .text%__1cFParseRensure_memory_phi6Mii_pnHPhiNode__; -text: .text%__1cHTypeAryCeq6kMpknEType__i_; -text: .text%__1cMorI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNloadRangeNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIAddINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOPhaseIdealLoopIsink_use6MpnENode_2_v_; -text: .text%__1cOMergeMemStreamOnext_non_empty6Mi_i_: memnode.o; -text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; -text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; -text: .text%__1cTStackWalkCompPolicyRcompilation_level6MnMmethodHandle_i_i_; -text: .text%__1cIMachNodeTmay_be_short_branch6kM_i_: ad_i486_misc.o; -text: .text%__1cKRegionNodeGpinned6kM_i_: loopnode.o; -text: .text%__1cJloadINodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cKBranchDataNis_BranchData6M_i_: ciMethodData.o; -text: .text%__1cJloadBNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKMemBarNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIJumpDataLis_JumpData6M_i_: ciMethodData.o; -text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNSignatureInfoGdo_int6M_v_: frame.o; -text: .text%__1cJxRegIOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__; -text: .text%__1cUSafepointSynchronizeOsafepoint_safe6FpnKJavaThread_nPJavaThreadState__i_; -text: .text%__1cUThreadSafepointStateXexamine_state_of_thread6Mi_v_; -text: .text%__1cNsubI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMethodLivenessKBasicBlockQcompute_gen_kill6MpnIciMethod__v_; -text: .text%__1cOMethodLivenessKBasicBlock2t6Mp0ii_v_; -text: .text%__1cOcompI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cJcmpOpOperFccode6kM_i_: ad_i486_clone.o; -text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__; -text: .text%__1cIciMethodRget_flow_analysis6M_pnKciTypeFlow__; -text: .text%__1cENodeHdel_out6Mp0_v_: ifnode.o; -text: .text%__1cEUTF8Ounicode_length6Fpkci_i_; -text: .text%__1cRSignatureIteratorSskip_optional_size6M_v_; -text: .text%__1cKjmpDirNodeOis_pc_relative6kM_i_: ad_i486_misc.o; -text: .text%__1cKjmpDirNodeTmay_be_short_branch6kM_i_: ad_i486_misc.o; -text: .text%__1cKRegionNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cFParseKdo_get_xxx6MpknHTypePtr_pnENode_pnHciField_i_v_; -text: .text%__1cScompP_mem_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cOGenerateOopMapSget_basic_block_at6kMi_pnKBasicBlock__; -text: .text%__1cJleaP8NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cISubINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cRaddI_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cKReturnNodeKmatch_edge6kMI_I_; -text: .text%__1cRshrI_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cPcmpFastLockNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_LTGENodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cKciTypeFlowGJsrSetNapply_control6Mp0pnQciByteCodeStream_pn0ALStateVector__v_; -text: .text%__1cPClassFileParserWparse_field_attributes6MnSconstantPoolHandle_iHpHpi2pnPtypeArrayHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCverify_legal_field_modifiers6MiipnGThread__v_; -text: .text%__1cKReturnNodeGOpcode6kM_i_; -text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cNchunk_oops_do6FpnKOopClosure_pnFChunk_pc_I_: handles.o; -text: .text%__1cGThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cMLinkResolverbEruntime_resolve_virtual_method6FrnICallInfo_nMmethodHandle_nLKlassHandle_nGHandle_4ipnGThread__v_; -text: .text%__1cMLinkResolverUresolve_virtual_call6FrnICallInfo_nGHandle_nLKlassHandle_4nMsymbolHandle_54iipnGThread__v_; -text: .text%__1cKstorePNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_; -text: .text%__1cFKlassXcan_be_statically_bound6FpnNmethodOopDesc__i_; -text: .text%__1cQjava_lang_StringMbasic_create6FpnQtypeArrayOopDesc_ipnGThread__nGHandle__; -text: .text%__1cIMachNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMachNodeOpipeline_class6F_pknIPipeline__; -text: .text%__1cUParallelScavengeHeapNtlab_capacity6kM_I_; -text: .text%__1cKjmpConNodeOis_pc_relative6kM_i_: ad_i486_misc.o; -text: .text%__1cKjmpConNodeTmay_be_short_branch6kM_i_: ad_i486_misc.o; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: connode.o; -text: .text%__1cPshlI_eReg_1NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cIMachNodeHtwo_adr6kM_I_: machnode.o; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: machnode.o; -text: .text%__1cHi2sNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: memnode.o; -text: .text%__1cENodeRis_cisc_alternate6kM_i_: machnode.o; -text: .text%__1cICallNodeSis_CallDynamicJava6kM_pknTCallDynamicJavaNode__: callnode.o; -text: .text%__1cKTypeRawPtrHget_con6kM_i_; -text: .text%__1cIMachNodeQis_MachSafePoint6M_pnRMachSafePointNode__: machnode.o; -text: .text%__1cKStoreLNodeGOpcode6kM_i_; -text: .text%__1cPClassFileParserbIparse_constant_pool_fieldref_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cScompU_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cHConNodeLout_RegMask6kM_rknHRegMask__: classes.o; -text: .text%__1cETypeRget_typeflow_type6FpnGciType__pk0_; -text: .text%__1cHPhiNodeEmake6FpnENode_2_p0_; -text: .text%__1cHAddNodePadd_of_identity6kMpknEType_3_3_; -text: .text%__1cQindOffset32XOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cRandI_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMWarmCallInfoKalways_hot6F_p0_; -text: .text%__1cMWarmCallInfoGis_hot6kM_i_; -text: .text%__1cMTypeKlassPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cMPhaseChaitinKFind_const6kMI_I_; -text: .text%__1cMPhaseChaitinKFind_const6kMpknENode__I_; -text: .text%__1cOPhaseIdealLoopSget_ctrl_no_update6kMpnENode__2_: loopTransform.o; -text: .text%__1cHCompileFstart6kM_pnJStartNode__; -text: .text%JVM_GetCPFieldSignatureUTF; -text: .text%__1cTemit_java_to_interp6FrnKCodeBuffer__v_; -text: .text%__1cKRelocationJpack_data6M_i_: relocInfo.o; -text: .text%__1cKCodeBufferMstart_a_stub6M_v_; -text: .text%__1cKCodeBufferKend_a_stub6M_v_; -text: .text%__1cPThreadRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cPThreadRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cIBoolNodeHsize_of6kM_I_; -text: .text%__1cFParseUprofile_taken_branch6Mi_v_; -text: .text%__1cPmethodDataKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cPmethodDataKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cMloadConLNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cTleaPIdxScaleOffNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cFframeNis_glue_frame6kM_i_; -text: .text%__1cPcmpFastLockNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cXjava_lang_ref_ReferenceJnext_addr6FpnHoopDesc__p2_; -text: .text%__1cKstoreLNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cRMachNullCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMachNodeLis_MachCall6M_pnMMachCallNode__: machnode.o; -text: .text%__1cICodeHeapLheader_size6F_I_; -text: .text%__1cScompU_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPVirtualCallDataSis_VirtualCallData6M_i_: methodDataOop.o; -text: .text%__1cXjava_lang_ref_ReferencePdiscovered_addr6FpnHoopDesc__p2_; -text: .text%__1cKJavaThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cTleaPIdxScaleOffNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cJTypeTupleKmake_range6FpnLciSignature__pk0_; -text: .text%__1cPcheckCastPPNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cJStoreNodeSIdeal_masked_input6MpnIPhaseGVN_I_pnENode__; -text: .text%__1cIAddINodeIadd_ring6kMpknEType_3_3_; -text: .text%jni_DeleteLocalRef: jni.o; -text: .text%__1cJTypeTupleLmake_domain6FpnPciInstanceKlass_pnLciSignature__pk0_; -text: .text%__1cSMemBarCPUOrderNodeGOpcode6kM_i_; -text: .text%__1cWShouldNotReachHereNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_Halt6MpknENode__v_; -text: .text%__1cIHaltNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cWflagsReg_long_EQdDNEOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cMoutputStreamDput6Mc_v_; -text: .text%__1cJStoreNodeZIdeal_sign_extended_input6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cWThreadLocalAllocBufferVinitialize_statistics6M_v_; -text: .text%__1cWThreadLocalAllocBufferImax_size6F_I_; -text: .text%__1cWThreadLocalAllocBufferFclear6M_v_; -text: .text%__1cSInterpreterRuntimeDldc6FpnKJavaThread_i_v_; -text: .text%__1cLProfileDataOtranslate_from6Mp0_v_: ciMethodData.o; -text: .text%__1cFframeLreal_sender6kMpnLRegisterMap__0_; -text: .text%__1cTStackWalkCompPolicyIsenderOf6MpnGRFrame_pnNGrowableArray4C2___2_; -text: .text%__1cENodeLbottom_type6kM_pknEType__; -text: .text%__1cFframeTis_first_java_frame6kM_i_; -text: .text%__1cGRFrameGcaller6M_p0_; -text: .text%__1cGRFrameMset_distance6Mi_v_; -text: .text%__1cGRFrameKnew_RFrame6FnFframe_pnKJavaThread_kp0_4_; -text: .text%__1cHConNodeEmake6FpknEType__p0_; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: instanceKlassKlass.o; -text: .text%__1cWThreadLocalAllocBufferVaccumulate_statistics6MIi_v_; -text: .text%__1cWThreadLocalAllocBufferGresize6M_v_; -text: .text%__1cJloadPNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIGraphKitOtoo_many_traps6MnODeoptimizationLDeoptReason__i_; -text: .text%__1cWflagsReg_long_LEGTOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cKJNIHandlesKmake_local6FpnGThread_pnHoopDesc__pnI_jobject__; -text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cQindOffset32XOperFscale6kM_i_: ad_i486.o; -text: .text%__1cUThreadSafepointStateMroll_forward6Mn0AMsuspend_type_pnHnmethod_i_v_; -text: .text%__1cGThreadQunboost_priority6Fp0_v_; -text: .text%__1cUThreadSafepointStateHrestart6M_v_; -text: .text%__1cIGraphKitTtoo_many_recompiles6MnODeoptimizationLDeoptReason__i_; -text: .text%__1cGIfNodeHsize_of6kM_I_: classes.o; -text: .text%__1cZPhaseConservativeCoalesceKupdate_ifg6MIIpnIIndexSet_2_v_; -text: .text%__1cIIndexSetEswap6Mp0_v_; -text: .text%__1cZPhaseConservativeCoalesceMunion_helper6MpnENode_2II222pnFBlock_I_v_; -text: .text%__1cLcastP2INodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cIGraphKitZadd_exception_states_from6MpnIJVMState__v_; -text: .text%__1cScompP_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nGHandle__; -text: .text%__1cLStringTableJbasic_add6MinGHandle_pHiIpnGThread__pnHoopDesc__; -text: .text%__1cPcmpFastLockNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cScompP_mem_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cOGenerateOopMapHget_var6Mi_nNCellTypeState__; -text: .text%__1cXcmpL_reg_flags_LTGENodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKRelocationWfix_relocation_at_move6Mi_v_: relocInfo.o; -text: .text%__1cQCallLeafNoFPNodeGOpcode6kM_i_; -text: .text%__1cHCompileOcall_generator6MpnIciMethod_ipnIJVMState_if_pnNCallGenerator__; -text: .text%__1cNciCallProfileRapply_prof_factor6Mf_v_; -text: .text%__1cIciMethodTcall_profile_at_bci6Mi_nNciCallProfile__; -text: .text%__1cHCompileOfind_intrinsic6MpnIciMethod_i_pnNCallGenerator__; -text: .text%__1cXmembar_acquire_lockNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cENodeGis_Con6kM_I_: multnode.o; -text: .text%__1cENodeHdel_out6Mp0_v_: compile.o; -text: .text%__1cICodeBlobPis_runtime_stub6kM_i_: codeBlob.o; -text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_kpnGRFrame__v_; -text: .text%__1cMLinkResolverbEruntime_resolve_special_method6FrnICallInfo_nMmethodHandle_nLKlassHandle_4ipnGThread__v_; -text: .text%__1cMLinkResolverbFlinktime_resolve_special_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cMLinkResolverUresolve_special_call6FrnICallInfo_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cXindIndexScaleOffsetOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cXindIndexScaleOffsetOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cXindIndexScaleOffsetOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cPBytecode_invokeFindex6kM_i_; -text: .text%__1cNCatchProjNode2t6MpnENode_Ii_v_; -text: .text%__1cPVirtualCallDataSis_VirtualCallData6M_i_: ciMethodData.o; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: cfgnode.o; -text: .text%__1cQciByteCodeStreamXget_method_holder_index6M_i_; -text: .text%__1cFParseHdo_call6M_v_; -text: .text%__1cIGraphKitWround_double_arguments6MpnIciMethod__v_; -text: .text%__1cIGraphKitTround_double_result6MpnIciMethod__v_; -text: .text%__1cFParseZcan_not_compile_call_site6MpnIciMethod_pnPciInstanceKlass__i_; -text: .text%__1cQciByteCodeStreambAget_declared_method_holder6M_pnHciKlass__; -text: .text%__1cFParseMprofile_call6MpnENode__v_; -text: .text%__1cKstorePNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cMMachProjNodeHsize_of6kM_I_: classes.o; -text: .text%__1cPciInstanceKlassFsuper6M_p0_; -text: .text%__1cNCatchProjNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFKlassOis_subclass_of6kMpnMklassOopDesc__i_; -text: .text%__1cSindIndexOffsetOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMeADXRegLOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cKciTypeFlowLStateVectorJdo_invoke6MpnQciByteCodeStream_i_v_; -text: .text%__1cHMulNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMtlsLoadPNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cNstoreImmPNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cLPCTableNodeHsize_of6kM_I_: classes.o; -text: .text%__1cLPCTableNodeKis_PCTable6kM_pk0_: classes.o; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: cfgnode.o; -text: .text%__1cJStartNodeIis_Start6M_p0_: classes.o; -text: .text%__1cLPCTableNodeEhash6kM_I_; -text: .text%__1cMURShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNObjectMonitorEexit6MpnGThread__v_; -text: .text%__1cIProjNodeDcmp6kMrknENode__I_; -text: .text%__1cXindIndexScaleOffsetOperNconstant_disp6kM_i_: ad_i486.o; -text: .text%__1cSmembar_acquireNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKDataLayoutKinitialize6MCHi_v_; -text: .text%__1cKDataLayoutPneeds_array_len6FC_i_; -text: .text%__1cScompP_mem_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNincI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cScompI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMindirectOperKin_RegMask6kMi_pknHRegMask__; -text: .text%jni_GetObjectField: jni.o; -text: .text%__1cSCompareAndSwapNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cJloadBNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cRAbstractAssemblerHbind_to6MrnFLabel_i_v_; -text: .text%__1cRAbstractAssemblerEbind6MrnFLabel__v_; -text: .text%__1cOCompilerOracleOshould_exclude6FnMmethodHandle__i_; -text: .text%__1cMnabxRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; -text: .text%__1cENodeHis_Root6M_pnIRootNode__: ad_i486_misc.o; -text: .text%__1cFframeUentry_frame_is_first6kM_i_; -text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; -text: .text%__1cHPhiNodeMslice_memory6kMpknHTypePtr__p0_; -text: .text%__1cKMemBarNodeEhash6kM_I_; -text: .text%__1cPstoreImmI16NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIciSymbolJmake_impl6Fpkc_p0_; -text: .text%__1cIciSymbolEmake6Fpkc_p0_; -text: .text%__1cXcmpL_reg_flags_LTGENodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNloadConI0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNtestI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIGraphKitNcast_not_null6MpnENode__2_; -text: .text%__1cKEntryPointFentry6kMnITosState__pC_; -text: .text%__1cICodeBlobYcaller_must_gc_arguments6kMpnKJavaThread__i_: nmethod.o; -text: .text%__1cKNode_Array2t6MpnFArena__v_: loopnode.o; -text: .text%__1cJleaP8NodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cKGCStatInfoMset_gc_usage6MinLMemoryUsage_i_v_; -text: .text%__1cWCallLeafNoFPDirectNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cScompP_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cGRFrameLis_compiled6kM_i_: rframe.o; -text: .text%__1cRInterpretedRFrameOis_interpreted6kM_i_: rframe.o; -text: .text%__1cENodeFis_If6M_pnGIfNode__: callnode.o; -text: .text%__1cRsalI_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cPciInstanceKlassUget_canonical_holder6Mi_p0_; -text: .text%__1cENodeHdel_out6Mp0_v_: callnode.o; -text: .text%__1cISubINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cILoadNodeDcmp6kMrknENode__I_; -text: .text%__1cMDisplacementEbind6MrnFLabel_ipnRAbstractAssembler__v_; -text: .text%__1cTStackWalkCompPolicyMshouldInline6FnMmethodHandle_fi_pkc_; -text: .text%__1cTconstantPoolOopDescMklass_at_put6MipnMklassOopDesc__v_: constantPoolOop.o; -text: .text%__1cFTypeDEhash6kM_i_; -text: .text%__1cIGraphKitHjava_bc6kM_nJBytecodesECode__; -text: .text%__1cKarrayKlassLobject_size6kMi_i_; -text: .text%__1cIGraphKitNbuiltin_throw6MnODeoptimizationLDeoptReason_pnENode__v_; -text: .text%__1cIciMethodOshould_exclude6M_i_; -text: .text%__1cKInlineTreeWfind_subtree_from_root6Fp0pnIJVMState_pnIciMethod_i_1_; -text: .text%__1cIciMethodNshould_inline6M_i_; -text: .text%__1cKInlineTreeMshouldInline6kMpnIciMethod_irnNciCallProfile_pnMWarmCallInfo__pkc_; -text: .text%__1cTpass_initial_checks6FpnIciMethod_i1_i_; -text: .text%__1cOCompilerOracleNshould_inline6FnMmethodHandle__i_; -text: .text%__1cIciMethodbAinterpreter_throwout_count6kM_i_; -text: .text%__1cKInlineTreeMok_to_inline6MpnIciMethod_pnIJVMState_rnNciCallProfile_pnMWarmCallInfo__8_; -text: .text%__1cKInlineTreeNtry_to_inline6MpnIciMethod_irnNciCallProfile_pnMWarmCallInfo__pkc_; -text: .text%__1cVExceptionHandlerTableJadd_entry6MnRHandlerTableEntry__v_; -text: .text%__1cKstoreINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLRShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRaddI_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cTCreateExceptionNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOjmpLoopEndNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKstoreLNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cGThreadXclear_pending_exception6M_v_; -text: .text%__1cLRethrowNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cLklassVtableIindex_of6kMpnNmethodOopDesc_i_i_; -text: .text%__1cFStateM_sub_Op_CmpP6MpknENode__v_; -text: .text%__1cMorI_eRegNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cLTypeInstPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cIciMethodWwas_executed_more_than6Mi_i_; -text: .text%__1cRshrI_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cMloadConINodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cKstoreLNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cHMonitorEwait6Mil_i_; -text: .text%__1cOGenerateOopMapGppload6MpnNCellTypeState_i_v_; -text: .text%__1cTCompareAndSwapLNodeGOpcode6kM_i_; -text: .text%__1cScompP_mem_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cKarrayKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cJAssemblerEmovl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cLOpaque1NodeGOpcode6kM_i_; -text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cPcmpFastLockNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cLnaxRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNCompileBrokerYcheck_compilation_result6FnMmethodHandle_iippnHnmethod__i_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: instanceKlass.o; -text: .text%__1cJloadCNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKJavaThreadbHcheck_and_handle_async_exceptions6Mi_v_; -text: .text%__1cbAjni_check_async_exceptions6FpnKJavaThread__v_: jni.o; -text: .text%__1cKciTypeFlowLStateVectorStype_meet_internal6FpnGciType_3p0_3_; -text: .text%__1cLeDXRegIOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cKTypeAryPtrEmake6FnHTypePtrDPTR_pknHTypeAry_pnHciKlass_ii_pk0_; -text: .text%__1cJFieldTypeSskip_optional_size6FpnNsymbolOopDesc_pi_v_; -text: .text%__1cQjmpCon_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQjmpCon_shortNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_: objArrayKlassKlass.o; -text: .text%__1cIGraphKitZset_all_rewritable_memory6MpnENode__v_; -text: .text%__1cIGraphKitTset_all_memory_call6MpnENode__v_; -text: .text%__1cJloadSNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKjmpDirNodeJis_Branch6kM_I_: ad_i486_misc.o; -text: .text%__1cKjmpDirNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIBoolNodeDcmp6kMrknENode__I_; -text: .text%__1cKjmpDirNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cScompI_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cICodeBlobLoop_addr_at6kMi_ppnHoopDesc__; -text: .text%__1cRaddI_eReg_memNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cNloadRangeNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJFieldTypeYis_valid_array_signature6FpnNsymbolOopDesc__i_; -text: .text%__1cJFieldTypeOget_array_info6FpnNsymbolOopDesc_pip2pnGThread__nJBasicType__; -text: .text%__1cFKlassMnext_sibling6kM_p0_; -text: .text%__1cPCheckCastPPNodeJideal_reg6kM_I_: connode.o; -text: .text%__1cJloadCNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cOClearArrayNodeGOpcode6kM_i_; -text: .text%__1cPThreadLocalNodeGOpcode6kM_i_; -text: .text%__1cRcmpFastUnlockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMeADXRegLOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cFParseRbranch_prediction6Mrf_f_; -text: .text%__1cRandI_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLeAXRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLeAXRegPOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cPshlI_eReg_1NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKciTypeFlowLStateVectorMdo_getstatic6MpnQciByteCodeStream__v_; -text: .text%__1cISubINodeDsub6kMpknEType_3_3_; -text: .text%__1cNCompileBrokerXcompilation_is_in_queue6FnMmethodHandle_i_i_; -text: .text%__1cSInterpreterRuntimebAfrequency_counter_overflow6FpnKJavaThread_pC_x_; -text: .text%__1cRindIndexScaleOperFscale6kM_i_: ad_i486.o; -text: .text%__1cNaddI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cLmethodKlassNoop_is_method6kM_i_: methodKlass.o; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceKlass.o; -text: .text%__1cENodeHdel_out6Mp0_v_: loopnode.o; -text: .text%__1cJxRegIOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKRegionNodeJis_Region6kM_pk0_: loopnode.o; -text: .text%__1cIParmNodeJideal_reg6kM_I_; -text: .text%__1cICodeHeapSallocated_capacity6kM_I_; -text: .text%__1cHciKlassNis_subtype_of6Mp0_i_; -text: .text%__1cNtestP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICHeapObj2n6FI_pv_; -text: .text%__1cENodeHdel_out6Mp0_v_: loopTransform.o; -text: .text%__1cQleaPIdxScaleNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCallGeneratorKis_virtual6kM_i_: callGenerator.o; -text: .text%__1cNloadConI0NodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cHTypeAryFempty6kM_i_; -text: .text%__1cKTypeAryPtrFempty6kM_i_; -text: .text%__1cCosFsleep6FpnGThread_xi_i_; -text: .text%__1cNgetTimeMillis6F_x_; -text: .text%__1cUCompressedReadStreamIread_int6M_i_: scopeDesc.o; -text: .text%__1cIos_sleep6Fxi_i_: os_solaris.o; -text: .text%__1cOPhaseIdealLoopOsplit_thru_phi6MpnENode_2i_2_; -text: .text%__1cENodeRlatency_from_uses6kMrnLBlock_Array_rnNGrowableArray4CI___i_; -text: .text%__1cXPhaseAggressiveCoalesceYinsert_copy_with_overlap6MpnFBlock_pnENode_II_v_; -text: .text%__1cCosOis_interrupted6FpnGThread_i_i_; -text: .text%__1cNaddI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_LTGENodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_i_v_; -text: .text%__1cNloadKlassNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cFStateN_sub_Op_LoadP6MpknENode__v_; -text: .text%__1cNmethodOopDescWload_signature_classes6FnMmethodHandle_pnGThread__i_; -text: .text%__1cTconstantPoolOopDescbDresolve_string_constants_impl6FnSconstantPoolHandle_pnGThread__v_; -text: .text%__1cNCompileBrokerOcompile_method6FnMmethodHandle_i1ipkcpnGThread__pnHnmethod__; -text: .text%__1cNCompileBrokerTcompile_method_base6FnMmethodHandle_ii1ipkcpnGThread__pnHnmethod__; -text: .text%__1cITypeLongFempty6kM_i_; -text: .text%__1cJloadINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFArenaRdestruct_contents6M_v_; -text: .text%__1cJloadSNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cFStateM_sub_Op_CmpI6MpknENode__v_; -text: .text%__1cFKlassMoop_is_klass6kM_i_: methodKlass.o; -text: .text%__1cIAddPNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJAssemblerDjcc6Mn0AJCondition_rnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cPcmpFastLockNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNmulL_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJStoreNodeEmake6FpnENode_22pknHTypePtr_2nJBasicType__p0_; -text: .text%__1cIGraphKitPstore_to_memory6MpnENode_22nJBasicType_i_2_; -text: .text%__1cHi2sNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_; -text: .text%__1cLSymbolTableFprobe6Fpkci_pnNsymbolOopDesc__; -text: .text%__1cLcastP2INodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cScompP_mem_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNincI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNdecI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIciObjectFklass6M_pnHciKlass__; -text: .text%__1cQPSGenerationPoolImax_size6kM_I_: memoryPool.o; -text: .text%__1cQPSGenerationPoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cQPSGenerationPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cFParseYprofile_not_taken_branch6M_v_; -text: .text%__1cLRShiftLNodeGOpcode6kM_i_; -text: .text%__1cKMemBarNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cMURShiftLNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__: parse2.o; -text: .text%__1cENodeHis_AddP6M_pnIAddPNode__: cfgnode.o; -text: .text%__1cIMulINodeGOpcode6kM_i_; -text: .text%__1cPBytecode_invokeJsignature6kM_pnNsymbolOopDesc__; -text: .text%__1cIConDNodeGOpcode6kM_i_; -text: .text%__1cKInlineTreePshouldNotInline6kMpnIciMethod_pnMWarmCallInfo__pkc_; -text: .text%__1cNSignatureInfoGdo_int6M_v_: bytecode.o; -text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; -text: .text%__1cNandL_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: typeArrayKlass.o; -text: .text%__1cOtypeArrayKlassQarray_klass_impl6FnUtypeArrayKlassHandle_iipnGThread__pnMklassOopDesc__; -text: .text%__1cOtypeArrayKlassQarray_klass_impl6MiipnGThread__pnMklassOopDesc__; -text: .text%__1cKciTypeFlowIcan_trap6MrnQciByteCodeStream__i_; -text: .text%__1cNxorI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cZload_long_indOffset32OperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cFParseNthrow_to_exit6MpnNSafePointNode__v_; -text: .text%__1cJloadLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadLNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cKjmpConNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cKjmpConNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKjmpConNodeJis_Branch6kM_I_: ad_i486_misc.o; -text: .text%__1cMLinkResolverbElinktime_resolve_static_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cLencode_Copy6FrnKCodeBuffer_ii_v_; -text: .text%__1cQjmpDir_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQjmpDir_shortNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; -text: .text%__1cENodeIadd_prec6Mp0_v_; -text: .text%__1cLjmpConUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMachNodeSalignment_required6kM_i_: machnode.o; -text: .text%__1cIMachNodePcompute_padding6kMi_i_: machnode.o; -text: .text%__1cKType_ArrayEgrow6MI_v_; -text: .text%__1cMorI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cMorI_eRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cUmembar_cpu_orderNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cSconstMethodOopDescbEchecked_exceptions_length_addr6kM_pH_; -text: .text%__1cFParseFdo_if6MpnENode_2nIBoolTestEmask_2_v_; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: ciMethodData.o; -text: .text%__1cLBoxLockNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJxRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLciSignature2t6MpnHciKlass_pnIciSymbol__v_; -text: .text%__1cIciMethod2t6MnMmethodHandle__v_; -text: .text%__1cIConINodeHget_int6kMpi_i_: classes.o; -text: .text%__1cIciMethodbHhas_unloaded_classes_in_signature6M_i_; -text: .text%__1cNinstanceKlassVis_same_class_package6FpnHoopDesc_pnNsymbolOopDesc_24_i_; -text: .text%__1cNloadRangeNodeIpipeline6kM_pknIPipeline__; -text: .text%jni_ExceptionOccurred: jni.o; -text: .text%__1cQConstantIntValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cHTypeAryEmake6FpknEType_pknHTypeInt__pk0_; -text: .text%__1cJloadCNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNsubI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cEUTF8Fequal6FpWi1i_i_; -text: .text%__1cSHighResTimeSamplerLtake_sample6M_x_: statSampler.o; -text: .text%__1cLStatSamplerLsample_data6FpnMPerfDataList__v_; -text: .text%__1cRis_error_reported6F_i_; -text: .text%__1cMPeriodicTaskOreal_time_tick6FI_v_; -text: .text%__1cLStatSamplerOcollect_sample6F_v_; -text: .text%__1cPStatSamplerTaskEtask6M_v_: statSampler.o; -text: .text%__1cNWatcherThreadRis_Watcher_thread6kM_i_: thread.o; -text: .text%__1cMPeriodicTaskMtime_to_wait6F_I_: thread.o; -text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%__1cSCallLeafDirectNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvL2I_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cOoop_RelocationHoops_do6MpFppnHoopDesc__v_v_; -text: .text%__1cKBufferBlobbIfollow_roots_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_iri_v_: codeBlob.o; -text: .text%__1cKBufferBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cSdivD_reg_roundNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cQleaPIdxScaleNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cKstorePNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateP_sub_Op_LShiftI6MpknENode__v_; -text: .text%jni_GetArrayLength: jni.o; -text: .text%__1cICodeHeapIcapacity6kM_I_; -text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cKMemoryPoolImax_size6kM_I_: memoryPool.o; -text: .text%__1cMCodeHeapPoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cRresolve_and_patch6FppnHoopDesc__v_; -text: .text%__1cMorI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cIPipelinePoperand_latency6kMIpk0_I_; -text: .text%__1cIMachOperEtype6kM_pknEType__; -text: .text%__1cVCompressedWriteStreamEgrow6M_v_; -text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; -text: .text%__1cIregFOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cNloadRangeNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJAssemblerFpushl6MpnMRegisterImpl__v_; -text: .text%JVM_Write; -text: .text%__1cDhpiFwrite6FipkvI_I_: jvm.o; -text: .text%__1cPstoreImmI16NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPCheckCastPPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJStartNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cKciTypeFlowLStateVectorLdo_getfield6MpnQciByteCodeStream__v_; -text: .text%__1cFParseMvisit_blocks6M_v_; -text: .text%__1cNsubI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cMLinkResolverTresolve_static_call6FrnICallInfo_rnLKlassHandle_nMsymbolHandle_53iipnGThread__v_; -text: .text%__1cRsalI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTconvD2I_reg_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKciTypeFlowGJsrSetSis_compatible_with6Mp1_i_; -text: .text%__1cOcompU_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadBNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cLOpaque1NodeEhash6kM_I_; -text: .text%__1cXcmpL_reg_flags_LTGENodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cPCallRuntimeNodeEhash6kM_I_: classes.o; -text: .text%__1cJcmpOpOperGnegate6M_v_: ad_i486_clone.o; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_2_v_; -text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%__1cGThreadSis_Compiler_thread6kM_i_: thread.o; -text: .text%__1cKMemBarNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cKjmpConNodeGnegate6M_v_: ad_i486_misc.o; -text: .text%__1cFMutexMjvm_raw_lock6M_v_; -text: .text%__1cFMutexOjvm_raw_unlock6M_v_; -text: .text%JVM_RawMonitorEnter; -text: .text%JVM_RawMonitorExit; -text: .text%__1cXmembar_release_lockNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cITypeLongEmake6Fxx_pk0_; -text: .text%__1cNaddL_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKcmpOpUOperFccode6kM_i_: ad_i486_clone.o; -text: .text%__1cPClassFileParserUskip_over_field_name6MpciI_1_; -text: .text%__1cLjmpConUNodeOis_pc_relative6kM_i_: ad_i486_misc.o; -text: .text%__1cLjmpConUNodeTmay_be_short_branch6kM_i_: ad_i486_misc.o; -text: .text%__1cNstoreImmPNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cURethrowExceptionNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cFParseOreturn_current6MpnENode__v_; -text: .text%__1cETypeCeq6kMpk0_i_; -text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: classFileParser.o; -text: .text%__1cHSubNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKReflectionVis_same_class_package6FpnMklassOopDesc_2_i_; -text: .text%__1cNinstanceKlassVis_same_class_package6MpnMklassOopDesc__i_; -text: .text%__1cNSignatureInfoHdo_bool6M_v_: bytecode.o; -text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; -text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_; -text: .text%__1cRaddI_eReg_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cLeCXRegIOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cMMonitorValue2t6MpnKScopeValue_nILocation__v_; -text: .text%__1cMMonitorValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cLBoxLockNodeKis_BoxLock6kM_pk0_: classes.o; -text: .text%__1cLBoxLockNodeKstack_slot6FpnENode__nHOptoRegEName__; -text: .text%__1cKCastPPNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cFParseRoptimize_inlining6MpnIciMethod_ipnPciInstanceKlass_24irnKInlineTreeLInlineStyle_r2_v_; -text: .text%__1cQimprove_receiver6FpnPciInstanceKlass_pknLTypeInstPtr_ri_1_; -text: .text%__1cJloadPNodeFreloc6kM_i_; -text: .text%__1cQStackFrameStream2t6MpnKJavaThread_i_v_; -text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; -text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; -text: .text%__1cLRShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFParseSmerge_memory_edges6MpnMMergeMemNode_ii_v_; -text: .text%__1cJloadBNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cFBlockTimplicit_null_check6MrnLBlock_Array_rnNGrowableArray4CI__pnENode_6_v_; -text: .text%__1cJTypeTupleFxdual6kM_pknEType__; -text: .text%__1cJTimeStampJupdate_to6Mx_v_; -text: .text%__1cJTimeStampGupdate6M_v_; -text: .text%__1cMloadConLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmulL_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cSmembar_releaseNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cRaddI_eReg_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cISubINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: loopnode.o; -text: .text%__1cRsarI_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cFStateM_sub_Op_AddI6MpknENode__v_; -text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__: loopnode.o; -text: .text%__1cOGenerateOopMapEppop6MpnNCellTypeState__v_; -text: .text%__1cLCastP2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIciMethodLis_accessor6kM_i_; -text: .text%__1cRScavengeRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cRScavengeRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cOGenerateOopMapUreachable_basicblock6Fp0ipi_v_; -text: .text%__1cPsarI_eReg_1NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cXindIndexScaleOffsetOperOindex_position6kM_i_: ad_i486.o; -text: .text%__1cXindIndexScaleOffsetOperNbase_position6kM_i_: ad_i486.o; -text: .text%__1cNSafePointNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRmethodDataOopDescLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cZload_long_indOffset32OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMloadConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cScompU_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cHUNICODELutf8_length6FpHi_i_; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: memnode.o; -text: .text%__1cRInterpretedRFrameKtop_vframe6kM_pnKjavaVFrame__: rframe.o; -text: .text%__1cRinterpretedVFrameDbcp6kM_pC_; -text: .text%__1cRinterpretedVFrameDbci6kM_i_; -text: .text%__1cMCallLeafNodeLis_CallLeaf6kM_pk0_: classes.o; -text: .text%__1cJAssemblerEpopl6MpnMRegisterImpl__v_; -text: .text%__1cKStoreCNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cLRethrowNodeGOpcode6kM_i_; -text: .text%__1cENodeHis_Mach6M_pnIMachNode__: loopnode.o; -text: .text%__1cPsarI_eReg_1NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cIMulINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cZload_long_indOffset32OperFscale6kM_i_: ad_i486.o; -text: .text%__1cIciMethodVhas_balanced_monitors6M_i_; -text: .text%__1cFArenaEused6kM_I_; -text: .text%__1cFParseNdo_all_blocks6M_v_; -text: .text%__1cOParseGeneratorJcan_parse6FpnIciMethod_i_i_; -text: .text%__1cFParseLbuild_exits6M_v_; -text: .text%__1cFParseIdo_exits6M_v_; -text: .text%__1cFParse2t6MpnIJVMState_pnIciMethod_f_v_; -text: .text%__1cFParseQcreate_entry_map6M_pnNSafePointNode__; -text: .text%__1cOParseGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cFParseLinit_blocks6M_v_; -text: .text%__1cIciMethodPcan_be_compiled6M_i_; -text: .text%__1cFframeNoops_entry_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cPJavaCallWrapperHoops_do6MpnKOopClosure__v_; -text: .text%__1cRRawBytecodeStream2t6MnMmethodHandle__v_; -text: .text%__1cNCallGeneratorKfor_inline6FpnIciMethod_f_p0_; -text: .text%__1cFParsePdo_method_entry6M_v_; -text: .text%__1cKstoreCNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQComputeCallStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cTStackWalkCompPolicyPshouldNotInline6FnMmethodHandle__pkc_; -text: .text%__1cRaddI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTcompareAndSwapLNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPSignatureStreamRas_symbol_or_null6M_pnNsymbolOopDesc__; -text: .text%__1cYDebugInformationRecorderNadd_dependent6MpnPciInstanceKlass_pnIciMethod__v_; -text: .text%__1cHi2sNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeIget_long6kM_x_; -text: .text%__1cQciByteCodeStreamSget_constant_index6kM_i_; -text: .text%__1cICHeapObj2k6Fpv_v_; -text: .text%__1cFArena2T6M_v_; -text: .text%jni_GetSuperclass: jni.o; -text: .text%__1cLklassVtableXvtable_accessibility_at6Mi_n0AKAccessType__; -text: .text%__1cXcmpL_reg_flags_EQdDNENodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNstoreImmBNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeIis_CMove6M_pnJCMoveNode__: cfgnode.o; -text: .text%__1cENodeHis_Bool6M_pnIBoolNode__: cfgnode.o; -text: .text%__1cNdecI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cScompU_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNstoreImmINodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cPJavaCallWrapper2t6MnMmethodHandle_nGHandle_pnJJavaValue_pnGThread__v_; -text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; -text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cRJavaCallArgumentsKparameters6M_pi_; -text: .text%__1cCosbCstack_shadow_pages_available6FpnGThread_nMmethodHandle__i_; -text: .text%__1cRruntime_type_from6FpnJJavaValue__nJBasicType__: javaCalls.o; -text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; -text: .text%__1cJMultiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPJavaCallWrapper2T6M_v_; -text: .text%__1cUGenericGrowableArrayEgrow6Mi_v_; -text: .text%__1cSCallLeafDirectNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cKciTypeFlowFBlockPclone_loop_head6Mp0ip1pn0AGJsrSet__3_; -text: .text%__1cITypeFuncFxdual6kM_pknEType__; -text: .text%__1cNxorI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cHMatcherPstack_alignment6F_I_; -text: .text%__1cKInlineTree2t6MpnHCompile_pk0pnIciMethod_pnIJVMState_if_v_; -text: .text%__1cMLinkResolverXresolve_klass_no_update6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; -text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cMURShiftINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cLeSIRegPOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cQSystemDictionaryVadd_loader_constraint6FnMsymbolHandle_nGHandle_2pnGThread__v_; -text: .text%__1cVLoaderConstraintTableJadd_entry6MnMsymbolHandle_pnMklassOopDesc_nGHandle_34pnGThread__i_; -text: .text%__1cNloadKlassNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSloadL_volatileNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOGenerateOopMapCpp6MpnNCellTypeState_2_v_; -text: .text%__1cDCHANprocess_class6FnLKlassHandle_pnNGrowableArray4n0B___pnNGrowableArray4nMmethodHandle___nMsymbolHandle_6_v_; -text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__i_; -text: .text%__1cQjava_lang_StringGlength6FpnHoopDesc__i_; -text: .text%__1cHoopDescSslow_identity_hash6M_i_; -text: .text%__1cQindOffset32XOperLdisp_is_oop6kM_i_: ad_i486.o; -text: .text%__1cQindOffset32XOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cQindOffset32XOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cQindOffset32XOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cIMulINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cGciType2t6MnLKlassHandle__v_; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: methodDataKlass.o; -text: .text%__1cHciKlass2t6MnLKlassHandle__v_; -text: .text%__1cLRShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKInlineTreeYcompute_callee_frequency6kMi_f_; -text: .text%__1cTInlineCallGeneratorJis_inline6kM_i_: callGenerator.o; -text: .text%__1cKInlineTreebCbuild_inline_tree_for_callee6MpnIciMethod_pnIJVMState_i_p0_; -text: .text%__1cIciMethodbBinterpreter_call_site_count6Mi_i_; -text: .text%__1cHciKlassOis_subclass_of6Mp0_i_; -text: .text%__1cMtlsLoadPNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cHnmethodHoops_do6MpnKOopClosure__v_; -text: .text%__1cJGC_lockerNlock_critical6FpnKJavaThread__v_: jni.o; -text: .text%__1cJAssemblerElock6M_v_; -text: .text%__1cRindIndexScaleOperNconstant_disp6kM_i_: ad_i486.o; -text: .text%__1cKRegionNodeEhash6kM_I_: loopnode.o; -text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__; -text: .text%__1cXmembar_release_lockNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cHnmethodbIfollow_roots_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_iri_v_; -text: .text%__1cLklassVtableKis_miranda6FpnNmethodOopDesc_pnPobjArrayOopDesc_pnMklassOopDesc__i_; -text: .text%__1cENodeHdel_out6Mp0_v_: library_call.o; -text: .text%__1cRandI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNIdealLoopTreeIset_nest6MI_i_; -text: .text%__1cNIdealLoopTreeMcounted_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cPshlI_eReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: instanceKlass.o; -text: .text%__1cRalign_code_offset6Fi_I_; -text: .text%__1cRciVirtualCallDataOtranslate_from6MpnLProfileData__v_; -text: .text%__1cMLinkResolverVresolve_invokespecial6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cJAssemblerHcmpxchg6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cHnmethodPis_locked_by_vm6kM_i_: nmethod.o; -text: .text%__1cONMethodSweeperPprocess_nmethod6FpnHnmethod__v_; -text: .text%__1cKTypeAryPtrFxdual6kM_pknEType__; -text: .text%__1cRmethodDataOopDescJbci_to_dp6Mi_pC_; -text: .text%__1cOjmpLoopEndNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeGis_Con6kM_I_: ad_i486.o; -text: .text%__1cMVM_OperationPevaluation_mode6kM_n0AEMode__: vm_operations.o; -text: .text%__1cRsalI_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cbAPSEvacuateFollowersClosureHdo_void6M_v_: psScavenge.o; -text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; -text: .text%__1cIDivINodeGOpcode6kM_i_; -text: .text%__1cMURShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cHnmethodLis_unloaded6kM_i_: nmethod.o; -text: .text%__1cIimmDOperJconstantD6kM_d_: ad_i486_clone.o; -text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cXcmpL_reg_flags_EQdDNENodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvL2I_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cScompU_eReg_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cScompU_eReg_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; -text: .text%jni_GetPrimitiveArrayCritical: jni.o; -text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; -text: .text%__1cXcmpL_reg_flags_LEGTNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cMrep_stosNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cJStartNodeOis_block_start6kM_i_: callnode.o; -text: .text%__1cSsafePoint_pollNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cWConstantPoolCacheEntryPbytecode_number6FnJBytecodesECode__i_: cpCacheOop.o; -text: .text%__1cWConstantPoolCacheEntryLis_resolved6kMnJBytecodesECode__i_: cpCacheOop.o; -text: .text%__1cOMethodLivenessKBasicBlockIload_two6Mi_v_; -text: .text%__1cIGraphKitMarray_length6MpnENode__2_; -text: .text%__1cJloadCNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cXmembar_release_lockNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cMCreateExNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNincI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRaddL_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cFArena2t6M_v_; -text: .text%__1cMindirectOperFscale6kM_i_: ad_i486.o; -text: .text%__1cHMulNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLsymbolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cLPCTableNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cMCreateExNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cLRShiftINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cJcmpOpOperFclone6kM_pnIMachOper__; -text: .text%__1cIJVMState2t6Mi_v_; -text: .text%__1cKPerfStringKset_string6Mpkc_v_; -text: .text%__1cJStartNodeOis_block_start6kM_i_: classes.o; -text: .text%__1cPciObjArrayKlassSis_obj_array_klass6M_i_: ciObjArrayKlass.o; -text: .text%__1cNeFlagsRegOperFclone6kM_pnIMachOper__; -text: .text%__1cMMachCallNodeHis_Call6M_pnICallNode__: ad_i486_misc.o; -text: .text%__1cKTypeRawPtrCeq6kMpknEType__i_; -text: .text%__1cFStateQ_sub_Op_CreateEx6MpknENode__v_; -text: .text%__1cIciObjectRis_instance_klass6M_i_: ciObjectFactory.o; -text: .text%__1cIciObjectSis_obj_array_klass6M_i_: ciObjectFactory.o; -text: .text%__1cLjmpConUNodeJis_Branch6kM_I_: ad_i486_misc.o; -text: .text%__1cLjmpConUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLjmpConUNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cLOpaque1NodeLbottom_type6kM_pknEType__: connode.o; -text: .text%__1cEDict2t6MpFpkv2_ipF2_i_v_; -text: .text%__1cEDict2T6M_v_; -text: .text%__1cNCatchProjNodeDcmp6kMrknENode__I_; -text: .text%__1cIGraphKitRmake_slow_call_ex6MpnENode_pnPciInstanceKlass__v_; -text: .text%__1cSCountedLoopEndNodeKstride_con6kM_i_; -text: .text%__1cRmethodDataOopDescKmileage_of6FpnNmethodOopDesc__i_; -text: .text%__1cQconstMethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cHCompileXin_preserve_stack_slots6M_I_; -text: .text%__1cFKlassPoop_is_instance6kM_i_: symbolKlass.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: symbolKlass.o; -text: .text%__1cPconvL2I_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cLmethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cKTypeRawPtrFxmeet6kMpknEType__3_; -text: .text%__1cTJvmtiEventCollectorYunset_jvmti_thread_state6M_v_; -text: .text%__1cZload_long_indOffset32OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cZload_long_indOffset32OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cZload_long_indOffset32OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_; -text: .text%__1cIMinINodeGOpcode6kM_i_; -text: .text%__1cHMemNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cHMemNodeScalculate_adr_type6FpknEType_pknHTypePtr__6_; -text: .text%__1cHMatcherXadjust_incoming_stk_arg6MnHOptoRegEName__2_; -text: .text%__1cFStateM_sub_Op_CmpU6MpknENode__v_; -text: .text%__1cSPSKeepAliveClosureGdo_oop6MppnHoopDesc__v_: psScavenge.o; -text: .text%__1cFTypeDEmake6Fd_pk0_; -text: .text%jni_IsSameObject: jni.o; -text: .text%__1cRCompilationPolicybIreset_counter_for_invocation_event6MnMmethodHandle__v_; -text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_; -text: .text%__1cQindOffset32XOperMdisp_as_type6kM_pknHTypePtr__: ad_i486.o; -text: .text%__1cQindOffset32XOperNbase_position6kM_i_: ad_i486.o; -text: .text%__1cQindOffset32XOperNconstant_disp6kM_i_: ad_i486.o; -text: .text%__1cNstoreImmBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cTcompareAndSwapLNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLlog2_intptr6Fi_i_: mulnode.o; -text: .text%__1cHOrINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMloadConDNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cScompP_mem_eRegNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cHMulNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cRaddI_eReg_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNstoreImmINodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_LEGTNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKJavaThreadQlast_java_vframe6MpnLRegisterMap__pnKjavaVFrame__; -text: .text%__1cKjavaVFrameNis_java_frame6kM_i_: vframe.o; -text: .text%__1cTStackWalkCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; -text: .text%__1cTStackWalkCompPolicyVfindTopInlinableFrame6MpnNGrowableArray4CpnGRFrame____2_; -text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_nMmethodHandle__v_; -text: .text%__1cRMachSafePointNodeLis_MachCall6M_pnMMachCallNode__: ad_i486_misc.o; -text: .text%__1cKStoreBNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNandL_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cLCounterDataOis_CounterData6M_i_: methodDataOop.o; -text: .text%__1cPClassFileParserbCverify_legal_class_modifiers6MipnGThread__v_; -text: .text%__1cENodeHget_int6kMpi_i_; -text: .text%__1cOcompI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNinstanceKlassbDcheck_valid_for_instantiation6MipnGThread__v_; -text: .text%__1cYSurvivorMutableSpacePoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cUEdenMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cYSurvivorMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cYSurvivorMutableSpacePoolImax_size6kM_I_: memoryPool.o; -text: .text%__1cUEdenMutableSpacePoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cUEdenMutableSpacePoolImax_size6kM_I_: memoryPool.o; -text: .text%__1cTleaPIdxScaleOffNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJcmpOpOperFequal6kM_i_: ad_i486_clone.o; -text: .text%__1cMorI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; -text: .text%__1cKRegionNodeOhas_unique_phi6kM_pnHPhiNode__; -text: .text%__1cNnegI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cRsarI_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPsarI_eReg_1NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLRethrowNodeKmatch_edge6kMI_I_; -text: .text%__1cNinstanceKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cPshrI_eReg_1NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cLAccessFlagsPatomic_set_bits6Mi_v_; -text: .text%__1cQVMOperationQdDueueLqueue_empty6Mi_i_; -text: .text%__1cTCreateExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFTypeFEhash6kM_i_; -text: .text%__1cVExceptionHandlerTableMadd_subtable6MipnNGrowableArray4Ci__2_v_; -text: .text%__1cQLibraryIntrinsicKis_virtual6kM_i_: library_call.o; -text: .text%__1cScompP_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNxorI_eRegNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cScompI_eReg_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cScompI_eReg_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cUCompressedReadStreamMraw_read_int6FrpC_i_: vframe.o; -text: .text%__1cRMachSafePointNodePis_MachCallJava6M_pnQMachCallJavaNode__: ad_i486_misc.o; -text: .text%__1cPCallRuntimeNodeOis_CallRuntime6kM_pk0_: classes.o; -text: .text%__1cIimmIOperFclone6kM_pnIMachOper__; -text: .text%__1cJleaP8NodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cIciObject2t6M_v_; -text: .text%__1cMloadConINodeFclone6kM_pnENode__; -text: .text%__1cIMulLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIGraphKitYcombine_exception_states6MpnNSafePointNode_2_v_; -text: .text%__1cNinstanceKlassPlink_class_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cMciMethodData2t6M_v_; -text: .text%__1cPciObjectFactoryUget_empty_methodData6M_pnMciMethodData__; -text: .text%__1cRitableMethodEntryKinitialize6MpnNmethodOopDesc__v_; -text: .text%__1cRaddL_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQinstanceRefKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cJloadBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIHaltNodeEhash6kM_I_: classes.o; -text: .text%__1cNmulL_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cQinit_input_masks6FIrnHRegMask_1_p0_: matcher.o; -text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_; -text: .text%__1cSconstMethodOopDescZchecked_exceptions_length6kM_i_; -text: .text%__1cNIdealLoopTreeObeautify_loops6MpnOPhaseIdealLoop__i_; -text: .text%__1cOjmpLoopEndNodeGpinned6kM_i_: ad_i486_misc.o; -text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_; -text: .text%__1cMrep_stosNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOGenerateOopMapLbb_mark_fct6Fp0ipi_v_; -text: .text%__1cFStateO_sub_Op_StoreP6MpknENode__v_; -text: .text%__1cKNode_Array2t6MpnFArena__v_: phaseX.o; -text: .text%__1cENodeHis_Loop6M_pnILoopNode__: callnode.o; -text: .text%__1cPshlI_eReg_1NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; -text: .text%__1cSindIndexOffsetOperFscale6kM_i_: ad_i486.o; -text: .text%__1cIciObjectSis_obj_array_klass6M_i_: ciTypeArrayKlass.o; -text: .text%__1cPCountedLoopNodeDphi6kM_pnENode__: cfgnode.o; -text: .text%__1cNaddL_eRegNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_: jni.o; -text: .text%__1cMMutableSpaceFclear6M_v_; -text: .text%__1cQjmpCon_shortNodeJis_Branch6kM_I_: ad_i486_misc.o; -text: .text%__1cQjmpCon_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIciObjectRis_instance_klass6M_i_: ciTypeArrayKlass.o; -text: .text%__1cQjmpCon_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cKjmpConNodeUshort_branch_version6M_pnIMachNode__; -text: .text%__1cPshrI_eReg_1NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMindirectOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cMindirectOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cMindirectOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cYmulI_imm_RShift_highNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNstoreImmPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPstoreImmI16NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cFKlassQset_next_sibling6MpnMklassOopDesc__v_; -text: .text%__1cUParallelScavengeHeapMmem_allocate6MIii_pnIHeapWord__; -text: .text%__1cNstoreImmBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIciObjectSis_obj_array_klass6M_i_: ciInstanceKlass.o; -text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_; -text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_; -text: .text%__1cIGraphKitXset_edges_for_java_call6MpnMCallJavaNode_i_v_; -text: .text%__1cQciTypeArrayKlassTis_type_array_klass6M_i_: ciTypeArrayKlass.o; -text: .text%__1cIVerifierRshould_verify_for6FpnHoopDesc__i_; -text: .text%__1cKcmpOpUOperGnegate6M_v_: ad_i486_clone.o; -text: .text%__1cLjmpConUNodeGnegate6M_v_: ad_i486_misc.o; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: loopnode.o; -text: .text%__1cRandI_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cKstoreBNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cOGenerateOopMapTmerge_state_vectors6MpnNCellTypeState_2_i_; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_2_v_; -text: .text%__1cNnegI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cIGraphKitZset_results_for_java_call6MpnMCallJavaNode__pnENode__; -text: .text%__1cOstackSlotDOperEtype6kM_pknEType__: ad_i486.o; -text: .text%JVM_GetMethodIxModifiers; -text: .text%__1cNSCMemProjNodeGOpcode6kM_i_; -text: .text%__1cNandL_eRegNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cJleaP8NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjava_lang_StringGequals6FpnHoopDesc_pHi_i_; -text: .text%__1cENodeGis_Sub6M_pnHSubNode__: classes.o; -text: .text%__1cTcompareAndSwapLNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cScompU_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cScompU_eReg_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cScompU_eReg_memNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cYmulI_imm_RShift_highNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cPcmpFastLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNinstanceKlassbCfind_local_field_from_offset6kMiipnPfieldDescriptor__i_; -text: .text%__1cFStateO_sub_Op_StoreI6MpknENode__v_; -text: .text%__1cJLoadSNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%JVM_IsInterface; -text: .text%__1cNinstanceKlassWfind_field_from_offset6kMiipnPfieldDescriptor__i_; -text: .text%__1cPciInstanceKlassTget_field_by_offset6Mii_pnHciField__; -text: .text%__1cFStateM_sub_Op_RegL6MpknENode__v_; -text: .text%__1cRMachNullCheckNodeLout_RegMask6kM_rknHRegMask__: machnode.o; -text: .text%__1cRshrI_eReg_immNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cScompP_mem_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadSNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cXconvI2L_reg_reg_zexNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMvframeStream2t6MpnKJavaThread_i_v_; -text: .text%__1cRsalI_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJimmI0OperFclone6kM_pnIMachOper__; -text: .text%__1cNloadConI0NodeFclone6kM_pnENode__; -text: .text%__1cWflagsReg_long_LTGEOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cQciByteCodeStreamMget_constant6M_nKciConstant__; -text: .text%__1cFciEnvbAget_constant_by_index_impl6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cFciEnvVget_constant_by_index6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cRMachNullCheckNode2t6MpnENode_2I_v_; -text: .text%__1cNMachIdealNodeJnum_opnds6kM_I_: machnode.o; -text: .text%__1cENodeHis_Root6M_pnIRootNode__: machnode.o; -text: .text%__1cXconvI2L_reg_reg_zexNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLLShiftLNodeGOpcode6kM_i_; -text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; -text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSobjArrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cEhash6Fpkc1_I_; -text: .text%__1cQput_after_lookup6FnMsymbolHandle_0ppnLNameSigHash__i_; -text: .text%__1cICallNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cZresource_reallocate_bytes6FpcII_0_; -text: .text%__1cLeCXRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cScompI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLCastP2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cUreloc_java_to_interp6F_I_; -text: .text%__1cTsize_java_to_interp6F_I_; -text: .text%__1cKstoreINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cScompU_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOstackSlotLOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cIGraphKitTcreate_and_xform_if6MpnENode_2ff_pnGIfNode__: graphKit.o; -text: .text%__1cSCallLeafDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCallLeafDirectNodeRis_safepoint_node6kM_i_: ad_i486_misc.o; -text: .text%__1cQciByteCodeStreamPget_klass_index6M_i_; -text: .text%__1cQComputeCallStackHdo_void6M_v_: generateOopMap.o; -text: .text%__1cMnadxRegIOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cJCHAResultOis_monomorphic6kM_i_; -text: .text%__1cJCHAResult2t6MnLKlassHandle_nMsymbolHandle_2pnNGrowableArray4n0B___pnNGrowableArray4nMmethodHandle___n0E_i_v_; -text: .text%__1cIciMethodXfind_monomorphic_target6MpnHciKlass_22_p0_; -text: .text%__1cDCHAManalyze_call6FnLKlassHandle_11nMsymbolHandle_2_pnJCHAResult__; -text: .text%__1cRaddL_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKMemBarNode2t6M_v_; -text: .text%__1cHciField2t6MpnPfieldDescriptor__v_; -text: .text%__1cKMemBarNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMloadConFNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKPSYoungGenNused_in_bytes6kM_I_; -text: .text%__1cNSafepointBlobYcaller_must_gc_arguments6kMpnKJavaThread__i_; -text: .text%__1cbCCompiledCodeSafepointHandlerYcaller_must_gc_arguments6kM_i_: safepoint.o; -text: .text%__1cUThreadSafepointStateYcaller_must_gc_arguments6kM_i_; -text: .text%__1cWstatic_stub_RelocationJpack_data6M_i_; -text: .text%__1cMloadConFNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cSReferenceProcessorOprocess_phase36MppnHoopDesc_ipnRBoolObjectClosure_pnKOopClosure_pnLVoidClosure__v_; -text: .text%__1cSReferenceProcessorOprocess_phase26MppnHoopDesc_pnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cSReferenceProcessorbAprocess_discovered_reflist6MppnHoopDesc_pnPReferencePolicy_i_v_; -text: .text%__1cSReferenceProcessorbAenqueue_discovered_reflist6MpnHoopDesc_p2_v_; -text: .text%__1cNandL_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLLShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOFastUnlockNodeFValue6kMpnOPhaseTransform__pknEType__: classes.o; -text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; -text: .text%__1cMnegF_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cIModINodeGOpcode6kM_i_; -text: .text%__1cHUNICODEHas_utf86FpHi_pc_; -text: .text%__1cKcmpOpUOperNgreater_equal6kM_i_: ad_i486_clone.o; -text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cIMaxINodeGOpcode6kM_i_; -text: .text%__1cQjmpDir_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKjmpDirNodeUshort_branch_version6M_pnIMachNode__; -text: .text%__1cQjmpDir_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cQjmpDir_shortNodeJis_Branch6kM_I_: ad_i486_misc.o; -text: .text%__1cMloadConFNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKMemBarNodeJis_MemBar6kM_pk0_: classes.o; -text: .text%__1cIMachNodeKconst_size6kM_i_: machnode.o; -text: .text%__1cIMachNodeFreloc6kM_i_: machnode.o; -text: .text%__1cIMachNodeTmay_be_short_branch6kM_i_: machnode.o; -text: .text%__1cWImplicitExceptionTableGappend6MII_v_; -text: .text%__1cIGraphKitOinsert_mem_bar6MpnKMemBarNode__v_; -text: .text%__1cIGraphKitbBset_arguments_for_java_call6MpnMCallJavaNode__v_; -text: .text%__1cIGraphKitJpush_node6MnJBasicType_pnENode__v_: callGenerator.o; -text: .text%__1cNCallGeneratorCtf6kM_pknITypeFunc__; -text: .text%__1cNCallGeneratorJis_inline6kM_i_: callGenerator.o; -text: .text%__1cLOptoRuntimebCcomplete_monitor_unlocking_C6FpnHoopDesc_pnJBasicLock__v_; -text: .text%__1cITypeNodeHis_Type6M_p0_: classes.o; -text: .text%__1cNdecI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeHdel_out6Mp0_v_: chaitin.o; -text: .text%__1cYmulI_imm_RShift_highNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cICodeBlobRis_at_poll_return6MpC_i_; -text: .text%__1cHGCCauseJto_string6Fn0AFCause__pkc_; -text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; -text: .text%__1cLBoxLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTleaPIdxScaleOffNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_EQdDNENodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNGCTaskManagerRset_resource_flag6MIi_v_; -text: .text%__1cScompI_eReg_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cScompI_eReg_memNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cScompI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFParseQarray_addressing6MnJBasicType_ippknEType__pnENode__; -text: .text%__1cHCompileSregister_intrinsic6MpnNCallGenerator__v_; -text: .text%__1cNmulL_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cMeADXRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cRcmpFastUnlockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQleaPIdxScaleNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cXcopy_u2_with_conversion6FpH0i_v_: classFileParser.o; -text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; -text: .text%__1cLOptoRuntimebAcomplete_monitor_locking_C6FpnHoopDesc_pnJBasicLock_pnKJavaThread__v_; -text: .text%__1cSvframeStreamCommonbHskip_method_invoke_and_aux_frames6M_v_; -text: .text%__1cIGraphKitbMset_predefined_output_for_runtime_call6MpnENode_pnMMergeMemNode__v_; -text: .text%__1cNminI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cPciInstanceKlassLfind_method6MpnIciSymbol_2_pnIciMethod__; -text: .text%__1cJloadLNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIGraphKitJpush_node6MnJBasicType_pnENode__v_: parse1.o; -text: .text%__1cJCHAResultSmonomorphic_target6kM_nMmethodHandle__; -text: .text%__1cNCallGeneratorPfor_direct_call6FpnIciMethod__p0_; -text: .text%__1cTDirectCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cMWarmCallInfoLalways_cold6F_p0_; -text: .text%__1cNaddL_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cMrep_stosNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cFciEnvRfind_system_klass6MpnIciSymbol__pnHciKlass__; -text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; -text: .text%__1cZCallInterpreterDirectNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOClearArrayNodeKmatch_edge6kMI_I_; -text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_: methodDataOop.o; -text: .text%__1cLConvI2LNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPThreadLocalNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLBlock_ArrayEgrow6MI_v_; -text: .text%__1cLConvL2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQciByteCodeStreamJget_klass6Mri_pnHciKlass__; -text: .text%__1cNandL_eRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cNandL_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cHi2sNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cMjniIdSupportNto_method_oop6FpnK_jmethodID__pnNmethodOopDesc__; -text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_; -text: .text%__1cIAndINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cOGenerateOopMapQnext_bb_start_pc6MpnKBasicBlock__i_; -text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cENodeHis_Bool6M_pnIBoolNode__: callnode.o; -text: .text%__1cENodeIis_CMove6M_pnJCMoveNode__: callnode.o; -text: .text%__1cOGenerateOopMapNrestore_state6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapJinterp_bb6MpnKBasicBlock__v_; -text: .text%__1cPCheckCastPPNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cISubINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIAndINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cTCallDynamicJavaNodeGOpcode6kM_i_; -text: .text%__1cXcmpL_reg_flags_LEGTNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPCheckCastPPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKRegionNodeOis_block_start6kM_i_: loopnode.o; -text: .text%__1cSloadL_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; -text: .text%__1cJPhaseLiveHcompute6MI_v_; -text: .text%__1cLBlock_Array2t6MpnFArena__v_: live.o; -text: .text%__1cIPhaseIFGEinit6MI_v_; -text: .text%__1cMPhaseChaitinQgather_lrg_masks6Mi_v_; -text: .text%__1cRjmpConU_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRjmpConU_shortNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cVmerge_point_too_heavy6FpnHCompile_pnENode__i_: loopopts.o; -text: .text%__1cMloadConPNodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cNstoreImmINodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cHRetNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: loopnode.o; -text: .text%__1cNandI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cIAddLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFStateN_sub_Op_LoadI6MpknENode__v_; -text: .text%__1cPsarI_eReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXmembar_acquire_lockNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cHCmpNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cKstoreBNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cXconvI2L_reg_reg_zexNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cENodeGis_Con6kM_I_: connode.o; -text: .text%__1cNinstanceKlassXmark_dependent_nmethods6MpnMklassOopDesc__i_; -text: .text%__1cOPhaseIdealLoopPis_counted_loop6MpnENode_pnNIdealLoopTree__2_; -text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: oopFactory.o; -text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: oopFactory.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: oopFactory.o; -text: .text%__1cOGenerateOopMapHset_var6MinNCellTypeState__v_; -text: .text%__1cOleaPIdxOffNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNmethodOopDescOis_initializer6kM_i_; -text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__; -text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_: universe.o; -text: .text%__1cNloadKlassNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIGraphKitPpush_pair_local6Mi_v_: parse2.o; -text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; -text: .text%__1cPshlI_eReg_1NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cPClassFileParserbHparse_constant_pool_integer_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKstoreBNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJAssemblerFpushl6Mi_v_; -text: .text%__1cKmethodOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cKNode_Array2t6MpnFArena__v_: reg_split.o; -text: .text%__1cMLinkResolverUresolve_invokestatic6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKklassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cNxorI_eRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cNxorI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_LTGENodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHMatcherMreturn_value6Fii_nLRegPair__; -text: .text%__1cNinstanceKlassScopy_static_fields6MpnSPSPromotionManager__v_; -text: .text%__1cSinstanceKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cbACallCompiledJavaDirectNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cRandI_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadCNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSsafePoint_pollNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cSloadL_volatileNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cLcastP2INodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_: frame.o; -text: .text%__1cFStateR_sub_Op_LoadRange6MpknENode__v_; -text: .text%__1cOcompU_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cICmpLNodeDsub6kMpknEType_3_3_; -text: .text%__1cHMemNodeHsize_of6kM_I_; -text: .text%__1cYCallStaticJavaDirectNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cYCallStaticJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNRelocIteratorJset_limit6MpC_v_; -text: .text%__1cIMachNodeTmay_be_short_branch6kM_i_: ad_i486.o; -text: .text%__1cRsarI_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cHPhiNodeDcmp6kMrknENode__I_; -text: .text%jni_SetObjectArrayElement: jni.o; -text: .text%__1cNnmethodLocker2T6M_v_; -text: .text%__1cVjava_lang_ClassLoaderGparent6FpnHoopDesc__2_; -text: .text%__1cLOpaque2NodeGOpcode6kM_i_; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_: bytecode.o; -text: .text%__1cMloadConLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLCastP2INodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cIGraphKitSclear_saved_ex_oop6FpnNSafePointNode__pnENode__; -text: .text%__1cIGraphKitTuse_exception_state6MpnNSafePointNode__pnENode__; -text: .text%__1cKstoreINodeFreloc6kM_i_; -text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; -text: .text%__1cNnmethodLocker2t6MpnHnmethod__v_; -text: .text%__1cNaddL_eRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cNaddL_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cIGraphKitOmake_slow_call6MpknITypeFunc_pCpkcpnENode_88_8_; -text: .text%__1cPcheckCastPPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cUGenericGrowableArray2t6MiipnEGrET_i_v_; -text: .text%__1cSReferenceProcessorSdiscover_reference6MpnHoopDesc_nNReferenceType__i_; -text: .text%__1cTStackWalkCompPolicyYmethod_back_branch_event6MnMmethodHandle_iipnGThread__v_; -text: .text%__1cRCompilationPolicybJreset_counter_for_back_branch_event6MnMmethodHandle__v_; -text: .text%__1cNnegI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cJStartNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cKciTypeFlowHdo_flow6M_v_; -text: .text%__1cKciTypeFlowKmap_blocks6M_v_; -text: .text%__1cKciTypeFlowKflow_types6M_v_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_i_v_; -text: .text%__1cKciTypeFlowLfind_ranges6M_v_; -text: .text%__1cKciTypeFlowXmark_known_range_starts6M_v_; -text: .text%__1cKciTypeFlow2t6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cKciTypeFlowPget_start_state6M_pkn0ALStateVector__; -text: .text%__1cXjava_lang_ref_ReferenceIset_next6FpnHoopDesc_2_v_; -text: .text%__1cOeFlagsRegUOperFclone6kM_pnIMachOper__; -text: .text%__1cSReferenceProcessorTget_discovered_list6MnNReferenceType__ppnHoopDesc__; -text: .text%__1cOPhaseIdealLoopRsplit_thru_region6MpnENode_2_2_; -text: .text%__1cOPhaseTransform2t6MnFPhaseLPhaseNumber__v_; -text: .text%__1cFKlassQup_cast_abstract6M_p0_; -text: .text%__1cFframebHnext_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; -text: .text%__1cNsubL_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMorI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cVPreserveExceptionMark2t6MrpnGThread__v_; -text: .text%__1cVPreserveExceptionMark2T6M_v_; -text: .text%__1cIciMethodJload_code6M_v_; -text: .text%__1cMciMethodDataJload_data6M_v_; -text: .text%__1cPconvL2I_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJimmI0OperJnum_edges6kM_I_: ad_i486_clone.o; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: multnode.o; -text: .text%__1cOCallRelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cPconvI2L_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJCMoveNodeLis_cmove_id6FpnOPhaseTransform_pnENode_44pnIBoolNode__4_; -text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_; -text: .text%JVM_GetCPClassNameUTF; -text: .text%__1cLConvI2LNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNIdealLoopTreeNDCE_loop_body6M_v_; -text: .text%__1cNIdealLoopTreeVadjust_loop_exit_prob6MpnOPhaseIdealLoop__v_; -text: .text%__1cJAssemblerEleal6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cKstoreCNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_EQdDNENodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%jni_GetStringLength: jni.o; -text: .text%__1cICodeHeapPsearch_freelist6MI_pnJFreeBlock__; -text: .text%__1cICodeHeapIallocate6MI_pv_; -text: .text%__1cKstorePNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQSystemDictionarybAcompute_loader_lock_object6FnGHandle_pnGThread__1_; -text: .text%__1cLeAXRegIOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cFParseKdo_put_xxx6MpknHTypePtr_pnENode_pnHciField_i_v_; -text: .text%__1cPmethodDataKlassRoop_is_methodData6kM_i_: methodDataKlass.o; -text: .text%__1cMciMethodData2t6MnQmethodDataHandle__v_; -text: .text%__1cFKlassMoop_is_klass6kM_i_: methodDataKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: methodDataKlass.o; -text: .text%__1cTcompareAndSwapLNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cOLibraryCallKitOgenerate_guard6MpnENode_pnKRegionNode_f_v_; -text: .text%__1cLOpaque1NodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKJNIHandlesLmake_global6FnGHandle_i_pnI_jobject__; -text: .text%__1cOClearArrayNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: jvm.o; -text: .text%__1cUPSGenerationCountersKupdate_all6M_v_: psGenerationCounters.o; -text: .text%__1cMoutputStream2t6Mi_v_; -text: .text%__1cWflagsReg_long_LTGEOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNloadRangeNodeFreloc6kM_i_; -text: .text%__1cFParseNpush_constant6MnKciConstant__i_; -text: .text%__1cMstringStream2t6MI_v_; -text: .text%__1cMstringStreamJas_string6M_pc_; -text: .text%__1cNSafePointNodeMis_SafePoint6M_p0_: classes.o; -text: .text%__1cMstringStream2T6M_v_; -text: .text%__1cNaddL_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cMURShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMloadConDNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJrelocInfoKset_format6Mi_v_; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: objArrayKlass.o; -text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; -text: .text%__1cJTimeStampSticks_since_update6kM_x_; -text: .text%__1cISubLNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: parse2.o; -text: .text%__1cNminI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOcompP_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cRconstantPoolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cICodeBlobMset_oop_maps6MpnJOopMapSet__v_; -text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__; -text: .text%__1cQVMOperationQdDueueSqueue_remove_front6Mi_pnMVM_Operation__; -text: .text%__1cLProfileDataSis_VirtualCallData6M_i_: ciMethodData.o; -text: .text%__1cJScopeDescGis_top6kM_i_; -text: .text%__1cMorI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cOjmpLoopEndNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cKTypeRawPtrFempty6kM_i_; -text: .text%__1cTCallInterpreterNodeGOpcode6kM_i_; -text: .text%__1cJMultiNodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%__1cScompI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRxorI_eReg_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cVAdaptivePaddedAverageGsample6Mf_v_; -text: .text%__1cXmembar_acquire_lockNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNPrefetchQdDueueFclear6M_v_: psPromotionManager.o; -text: .text%__1cSPSPromotionManagerFreset6M_v_; -text: .text%__1cXconvI2L_reg_reg_zexNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cSPSPromotionManagerKflush_labs6M_v_; -text: .text%__1cRaddI_eReg_memNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cIAndINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cJloadSNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIregDOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cKBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__; -text: .text%__1cSCompareAndSwapNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cICodeHeapPfollowing_block6MpnJFreeBlock__2_; -text: .text%__1cLRuntimeStubIis_alive6kM_i_: codeBlob.o; -text: .text%__1cFStateQ_sub_Op_URShiftI6MpknENode__v_; -text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_; -text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fi_v_; -text: .text%__1cIciObjectMis_obj_array6M_i_: ciInstanceKlass.o; -text: .text%__1cFciEnvZcheck_klass_accessibility6MpnHciKlass_pnMklassOopDesc__i_; -text: .text%__1cCosRcurrent_thread_id6F_i_; -text: .text%__1cMTypeKlassPtrFxdual6kM_pknEType__; -text: .text%__1cHciKlassMis_interface6M_i_: ciObjArrayKlass.o; -text: .text%__1cNtestP_regNodeFreloc6kM_i_; -text: .text%__1cHCompileTset_cached_top_node6MpnENode__v_; -text: .text%__1cIGotoNodeGOpcode6kM_i_; -text: .text%__1cENodeMsetup_is_top6M_v_; -text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; -text: .text%__1cOleaPIdxOffNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cPconvL2I_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cHCompilePneed_stack_bang6kMi_i_; -text: .text%__1cOMachPrologNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cULinearLeastSquareFitGupdate6Mdd_v_; -text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_; -text: .text%__1cNsubI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSmembar_acquireNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cHRetNodeGpinned6kM_i_: ad_i486_misc.o; -text: .text%__1cNobjArrayKlassPoop_is_objArray6kM_i_: objArrayKlass.o; -text: .text%__1cHRetNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cKimmL32OperJconstantL6kM_x_: ad_i486_clone.o; -text: .text%__1cRindIndexScaleOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cRindIndexScaleOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cHRetNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRindIndexScaleOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cQleaPIdxScaleNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLklassVtableRinitialize_vtable6MpnGThread__v_; -text: .text%__1cOPhaseIdealLoopQset_subtree_ctrl6MpnENode__v_; -text: .text%__1cRxorI_eReg_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cOMethodLivenessKBasicBlockJstore_two6Mi_v_; -text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cJloadINodeIpeephole6MpnFBlock_ipnNPhaseRegAlloc_ri_pnIMachNode__; -text: .text%__1cJloadINodeFreloc6kM_i_; -text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cKReturnNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOleaPIdxOffNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_EQdDNENodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cPjava_lang_ClassNcreate_mirror6FnLKlassHandle_pnGThread__pnHoopDesc__; -text: .text%__1cLklassVtableVinitialize_from_super6MnLKlassHandle__i_; -text: .text%__1cLklassVtableOcopy_vtable_to6MpnLvtableEntry__v_; -text: .text%__1cJloadBNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cSCallLeafDirectNodeKmethod_set6Mi_v_; -text: .text%__1cKReturnNodeEhash6kM_I_: classes.o; -text: .text%__1cTleaPIdxScaleOffNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; -text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cIPhaseIFGISquareUp6M_v_; -text: .text%__1cYmulI_imm_RShift_highNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_LEGTNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNxorI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKKlass_vtbl2n6FIrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: klass.o; -text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: klass.o; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: klass.o; -text: .text%jni_GetStringUTFLength: jni.o; -text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; -text: .text%__1cFKlassRbase_create_klass6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__1_; -text: .text%jni_GetStringUTFRegion: jni.o; -text: .text%__1cIAndINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNSafePointNodeEjvms6kM_pnIJVMState__: classes.o; -text: .text%__1cQPlaceholderTableJnew_entry6MipnNsymbolOopDesc_pnHoopDesc__pnQPlaceholderEntry__; -text: .text%__1cQPlaceholderTableMremove_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cQPlaceholderTableJadd_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cJcmpOpOperJnot_equal6kM_i_: ad_i486_clone.o; -text: .text%__1cIAndINodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cKCMoveINodeGOpcode6kM_i_; -text: .text%__1cOMachEpilogNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPCountedLoopNodeNstride_is_con6kM_i_: loopnode.o; -text: .text%__1cPCountedLoopNodeDphi6kM_pnENode__: loopnode.o; -text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__: loopnode.o; -text: .text%__1cMPhaseChaitinSbuild_ifg_physical6MpnMResourceArea__I_; -text: .text%__1cMPhaseChaitinMreset_uf_map6MI_v_; -text: .text%__1cPsarI_eReg_1NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cRaddI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNPhaseCoalescePcoalesce_driver6M_v_; -text: .text%__1cHnmethodKpc_desc_at6MpCi_pnGPcDesc__; -text: .text%__1cHCompileQsync_stack_slots6kM_i_; -text: .text%__1cPindOffset32OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cJloadLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQSystemDictionaryTload_instance_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cUDebugInfoWriteStreamMwrite_handle6MpnI_jobject__v_; -text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cPconvI2D_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNIdealLoopTreeTcheck_inner_safepts6MpnOPhaseIdealLoop__v_; -text: .text%__1cOMacroAssemblerWbang_stack_with_offset6Mi_v_: assembler_i486.o; -text: .text%__1cRAbstractAssemblerbDgenerate_stack_overflow_check6Mi_v_; -text: .text%__1cRaddI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNIdealLoopTreeUiteration_split_impl6MpnOPhaseIdealLoop_rnJNode_List__v_; -text: .text%__1cNIdealLoopTreeOpolicy_peeling6kMpnOPhaseIdealLoop__i_; -text: .text%__1cNIdealLoopTreebBpolicy_do_remove_empty_loop6MpnOPhaseIdealLoop__i_; -text: .text%__1cbBjava_lang_ref_SoftReferenceFclock6F_x_; -text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_; -text: .text%JVM_InternString; -text: .text%__1cXcmpL_reg_flags_LEGTNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cQjava_lang_StringRas_unicode_string6FpnHoopDesc_ri_pH_; -text: .text%__1cCosGrandom6F_l_; -text: .text%__1cNget_next_hash6F_i_: synchronizer.o; -text: .text%__1cPshrI_eReg_1NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cUimpl_fp_store_helper6FpnKCodeBuffer_iiiiiii_i_: ad_i486.o; -text: .text%__1cVloadConL_low_onlyNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cXmembar_release_lockNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOMacroAssemblerJincrement6MpnMRegisterImpl_i_v_; -text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cENodeHdel_out6Mp0_v_: callGenerator.o; -text: .text%__1cJCmpL3NodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapKcopy_state6MpnNCellTypeState_2_v_; -text: .text%__1cPclear_hashtable6FppnLNameSigHash__v_; -text: .text%__1cWflagsReg_long_LEGTOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cEDictIdoubhash6M_v_; -text: .text%__1cUinitialize_hashtable6FppnLNameSigHash__v_; -text: .text%__1cRcmpOp_commuteOperJnum_edges6kM_I_: ad_i486_clone.o; -text: .text%__1cScompU_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSshrL_eReg_1_31NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cPCountedLoopNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cRMachSafePointNodeGpinned6kM_i_: ad_i486_misc.o; -text: .text%__1cUmembar_cpu_orderNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; -text: .text%__1cNmodI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cLRShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMMutableSpaceKinitialize6MnJMemRegion_i_v_; -text: .text%__1cKstoreLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%jni_SetIntField: jni.o; -text: .text%__1cENodeHis_Copy6kM_I_: ad_i486.o; -text: .text%__1cKstorePNodeFreloc6kM_i_; -text: .text%__1cNincI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPCountedLoopNodeHsize_of6kM_I_: classes.o; -text: .text%__1cNcmovI_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cTresource_free_bytes6FpcI_v_; -text: .text%__1cVLoaderConstraintTablePcheck_or_update6MnTinstanceKlassHandle_nGHandle_nMsymbolHandle__pkc_; -text: .text%__1cQSystemDictionaryRupdate_dictionary6FiIiInTinstanceKlassHandle_nGHandle_pnGThread__v_; -text: .text%__1cPTwoOopHashtableMcompute_hash6MnMsymbolHandle_nGHandle__I_: dictionary.o; -text: .text%__1cQSystemDictionaryRcheck_constraints6FiInTinstanceKlassHandle_nGHandle_pnGThread__v_; -text: .text%__1cQSystemDictionaryQfind_placeholder6FiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cIProjNodeJideal_reg6kM_I_; -text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; -text: .text%__1cKDictionaryJnew_entry6MIpnMklassOopDesc_pnHoopDesc__pnPDictionaryEntry__; -text: .text%__1cVloadConL_low_onlyNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cPstoreImmI16NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cFKlassMoop_is_klass6kM_i_: instanceKlass.o; -text: .text%__1cWflagsReg_long_EQdDNEOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cIAndINodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIAndINodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cRandI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLRuntimeStubYcaller_must_gc_arguments6kMpnKJavaThread__i_: codeBlob.o; -text: .text%__1cTGeneratePairingInfoRpossible_gc_point6MpnOBytecodeStream__i_: ciMethod.o; -text: .text%__1cJLoadBNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cFKlassXsearch_secondary_supers6kMpnMklassOopDesc__i_; -text: .text%__1cNmodI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cRshrI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJLoadSNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOGenerateOopMapOset_bbmark_bit6Mi_v_; -text: .text%__1cIGraphKitOhas_ex_handler6M_i_; -text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_: ciMethodData.o; -text: .text%__1cRaddI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cRsubI_eReg_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cOPhaseIdealLoopMdominated_by6MpnENode_2_v_; -text: .text%__1cPRoundDoubleNodeGOpcode6kM_i_; -text: .text%__1cRsarI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cICallNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_i_v_; -text: .text%__1cYciExceptionHandlerStreamEnext6M_v_: doCall.o; -text: .text%__1cENodeFis_If6M_pnGIfNode__: connode.o; -text: .text%__1cLklassVtableQfill_in_mirandas6Mri_v_; -text: .text%__1cLklassItableRinitialize_itable6M_v_; -text: .text%__1cZCallDynamicJavaDirectNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cSshlL_eReg_1_31NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cCosXthread_local_storage_at6Fi_pv_; -text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; -text: .text%__1cLregFPR1OperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cQinstanceRefKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cSmembar_releaseNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cLeDIRegPOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cLregFPR1OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cSmembar_acquireNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIGraphKitRmerge_fast_memory6MpnENode_2i_v_; -text: .text%__1cFKlassZcan_be_primary_super_slow6kM_i_; -text: .text%__1cSCompareAndSwapNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cSindIndexOffsetOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cSindIndexOffsetOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cSindIndexOffsetOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cNstoreImmBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIGraphKitOmake_merge_mem6MpnENode_22_v_; -text: .text%__1cFKlassWappend_to_sibling_list6M_v_; -text: .text%__1cIGraphKitHopt_iff6MpnENode_2_2_; -text: .text%__1cOcompP_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cQSystemDictionarySjava_system_loader6F_pnHoopDesc__; -text: .text%__1cSmembar_releaseNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNdivL_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeHis_Bool6M_pnIBoolNode__: classes.o; -text: .text%__1cJLoadFNodeGOpcode6kM_i_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_2_v_; -text: .text%__1cFframeRis_compiled_frame6kMpi_i_; -text: .text%__1cTjava_lang_ThrowableNset_backtrace6FpnHoopDesc_2_v_; -text: .text%__1cKstoreCNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMStartOSRNodeGOpcode6kM_i_; -text: .text%__1cHPhiNodeKmake_blank6FpnENode_2_p0_; -text: .text%__1cGThreadMis_VM_thread6kM_i_: thread.o; -text: .text%__1cTClassLoadingServiceScompute_class_size6FpnNinstanceKlass__I_; -text: .text%__1cTClassLoadingServiceTnotify_class_loaded6FpnNinstanceKlass_i_v_; -text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNmethodOopDescMsort_methods6FpnPobjArrayOopDesc_222_v_; -text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cIVerifierQrelax_verify_for6FpnHoopDesc__i_; -text: .text%__1cNinstanceKlassQeager_initialize6MpnGThread__v_; -text: .text%__1cPClassFileStream2t6MpCipc_v_; -text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; -text: .text%__1cNinstanceKlassQinit_implementor6M_v_; -text: .text%__1cNinstanceKlassbBdo_local_static_fields_impl6FnTinstanceKlassHandle_pFpnPfieldDescriptor_pnGThread__v5_v_; -text: .text%__1cRconstantPoolKlassIallocate6MipnGThread__pnTconstantPoolOopDesc__; -text: .text%__1cSinstanceKlassKlassXallocate_instance_klass6MiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cKoopFactoryRnew_instanceKlass6FiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cLklassVtableQget_num_mirandas6FpnMklassOopDesc_pnPobjArrayOopDesc_4_i_; -text: .text%__1cKoopFactoryQnew_constantPool6FipnGThread__pnTconstantPoolOopDesc__; -text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; -text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_; -text: .text%__1cLklassVtablebKcompute_vtable_size_and_num_mirandas6Fri1pnMklassOopDesc_pnPobjArrayOopDesc_nLAccessFlags_pnHoopDesc_pnNsymbolOopDesc_5_v_; -text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; -text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: constantPoolKlass.o; -text: .text%__1cVjava_lang_ClassLoaderRis_trusted_loader6FpnHoopDesc__i_; -text: .text%__1cQSystemDictionaryQadd_to_hierarchy6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserNparse_methods6MnSconstantPoolHandle_ipnLAccessFlags_ppnPobjArrayOopDesc_66pnGThread__nOobjArrayHandle__; -text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: constantPoolKlass.o; -text: .text%__1cPClassFileParserUcompute_oop_map_size6MnTinstanceKlassHandle_ii_i_; -text: .text%__1cPClassFileParserNfill_oop_maps6MnTinstanceKlassHandle_ii_v_; -text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__; -text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cPClassFileParserYcheck_super_class_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserMparse_fields6MnSconstantPoolHandle_ipnUFieldAllocationCount_pnOobjArrayHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbAparse_classfile_attributes6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: constantPoolKlass.o; -text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; -text: .text%__1cPClassFileParserQparse_interfaces6MnSconstantPoolHandle_nGHandle_2pnGThread__nOobjArrayHandle__; -text: .text%__1cPClassFileParserOparseClassFile6MnMsymbolHandle_nGHandle_2r1pnGThread__nTinstanceKlassHandle__; -text: .text%__1cQSystemDictionaryVresolve_super_or_fail6FnMsymbolHandle_1nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassZcan_be_primary_super_slow6kM_i_; -text: .text%__1cLloadSSFNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNObjectMonitorHis_busy6kM_i_; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o; -text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o; -text: .text%__1cSindIndexOffsetOperNconstant_disp6kM_i_: ad_i486.o; -text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; -text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; -text: .text%__1cFVTuneOend_class_load6F_v_; -text: .text%__1cFVTuneQstart_class_load6F_v_; -text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cENodeHis_Call6M_pnICallNode__: loopnode.o; -text: .text%__1cQSystemDictionaryRfind_shared_class6FnMsymbolHandle__pnMklassOopDesc__; -text: .text%__1cQSystemDictionaryRload_shared_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; -text: .text%__1cHMatcherNfind_receiver6Fi_nFVMRegEName__; -text: .text%__1cNnegI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFframeZinterpreter_frame_set_bcx6Mi_v_; -text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cENodeHdel_out6Mp0_v_: generateOptoStub.o; -text: .text%__1cRsubI_eReg_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNandI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cILoopNode2t6MpnENode_2_v_; -text: .text%__1cVeADXRegL_low_onlyOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cENodeGis_Con6kM_I_: memnode.o; -text: .text%__1cUCompressedReadStreamIread_int6M_i_: debugInfo.o; -text: .text%__1cMPhaseIterGVNIoptimize6M_v_; -text: .text%__1cJloadFNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cQPackageHashtableMcompute_hash6Mpkci_I_: classLoader.o; -text: .text%__1cOMethodLivenessRinit_basic_blocks6M_v_; -text: .text%__1cOMethodLivenessNinit_gen_kill6M_v_; -text: .text%__1cWCallLeafNoFPDirectNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cOMethodLivenessSpropagate_liveness6M_v_; -text: .text%__1cOMethodLiveness2t6MpnFArena_pnIciMethod__v_; -text: .text%__1cOMethodLivenessQcompute_liveness6M_v_; -text: .text%__1cHCompilebAvarargs_C_out_slots_killed6kM_I_; -text: .text%__1cSMemBarVolatileNodeGOpcode6kM_i_; -text: .text%__1cTMachCallRuntimeNodeSis_MachCallRuntime6M_p0_: ad_i486_misc.o; -text: .text%__1cMloadConPNodeFreloc6kM_i_; -text: .text%__1cSTailCalljmpIndNodeNis_block_proj6kM_pknENode__: ad_i486_misc.o; -text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; -text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: cpCacheKlass.o; -text: .text%__1cNinstanceKlassLverify_code6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cIVerifierRverify_byte_codes6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_; -text: .text%__1cNinstanceKlassWadd_loader_constraints6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cLklassVtableYadd_new_mirandas_to_list6FpnNGrowableArray4CpnNmethodOopDesc___pnPobjArrayOopDesc_6pnMklassOopDesc__v_; -text: .text%__1cIRewriterScompute_index_maps6FnSconstantPoolHandle_rpnIintArray_rpnIintStack__v_; -text: .text%__1cKoopFactoryVnew_constantPoolCache6FipnGThread__pnYconstantPoolCacheOopDesc__; -text: .text%__1cIintArray2t6Mki1_v_: rewriter.o; -text: .text%__1cWconstantPoolCacheKlassIallocate6MipnGThread__pnYconstantPoolCacheOopDesc__; -text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: cpCacheKlass.o; -text: .text%__1cIRewriterXnew_constant_pool_cache6FrnIintArray_pnGThread__nXconstantPoolCacheHandle__; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: cpCacheKlass.o; -text: .text%__1cRmethodDataOopDescJis_mature6kM_i_; -text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; -text: .text%__1cQciByteCodeStreamUis_unresolved_string6kM_i_; -text: .text%__1cFciEnvUis_unresolved_string6kMpnPciInstanceKlass_i_i_; -text: .text%JVM_GetMethodIxExceptionIndexes; -text: .text%JVM_GetMethodIxSignatureUTF; -text: .text%JVM_GetMethodIxExceptionsCount; -text: .text%JVM_GetMethodIxMaxStack; -text: .text%JVM_GetMethodIxByteCode; -text: .text%JVM_GetMethodIxArgsSize; -text: .text%JVM_GetMethodIxByteCodeLength; -text: .text%__1cFciEnvZis_unresolved_string_impl6kMpnNinstanceKlass_i_i_; -text: .text%__1cKoopFactoryWnew_permanent_intArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cKTypeRawPtrEmake6FpC_pk0_; -text: .text%__1cPClassFileParserVparse_exception_table6MIInSconstantPoolHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cIciObjectRis_instance_klass6M_i_: ciObjArrayKlass.o; -text: .text%__1cFParseXcatch_inline_exceptions6MpnNSafePointNode__v_; -text: .text%__1cNmulL_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNminI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cICallNodeSis_CallInterpreter6kM_pknTCallInterpreterNode__: classes.o; -text: .text%__1cYciExceptionHandlerStreamPcount_remaining6M_i_; -text: .text%__1cPconvI2L_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cSshrL_eReg_1_31NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cJLoadLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cPshrI_eReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cWconstantPoolCacheKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cYmulI_imm_RShift_highNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHMatcherUc_calling_convention6FpnLRegPair_I_v_; -text: .text%__1cPCallRuntimeNodeScalling_convention6kMpnLRegPair_I_v_; -text: .text%__1cICallNodeRis_CallStaticJava6kM_pknSCallStaticJavaNode__: classes.o; -text: .text%__1cHAddNodeGis_Add6kM_pk0_: classes.o; -text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; -text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; -text: .text%__1cCosRelapsed_frequency6F_x_; -text: .text%__1cRshrI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMelapsedTimerHseconds6kM_d_; -text: .text%__1cRaddL_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNaddI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIciObjectMhas_encoding6M_i_; -text: .text%__1cSloadL_volatileNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNandI_eRegNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cQPackageHashtableJget_entry6MiIpkcI_pnLPackageInfo__: classLoader.o; -text: .text%__1cLClassLoaderOlookup_package6Fpkc_pnLPackageInfo__; -text: .text%__1cLeDIRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cENodeUdepends_only_on_test6kM_i_: connode.o; -text: .text%__1cFStateR_sub_Op_LoadKlass6MpknENode__v_; -text: .text%__1cQVMOperationQdDueueNqueue_oops_do6MipnKOopClosure__v_; -text: .text%__1cUCallCompiledJavaNodeGOpcode6kM_i_; -text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; -text: .text%__1cUmembar_cpu_orderNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cPClassFileParserbSparse_constant_pool_interfacemethodref_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cRsalI_eReg_immNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLClassLoaderLadd_package6Fpkci_i_; -text: .text%__1cNloadKlassNodeFreloc6kM_i_; -text: .text%__1cFStateV_sub_Op_MemBarRelease6MpknENode__v_; -text: .text%__1cMloadConLNodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cHMatcherQpost_fast_unlock6FpknENode__i_; -text: .text%__1cZInterpreterMacroAssemblerKverify_oop6MpnMRegisterImpl_nITosState__v_; -text: .text%__1cFStateM_sub_Op_SubI6MpknENode__v_; -text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; -text: .text%__1cLeSIRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKciTypeFlowLStateVectorMdo_putstatic6MpnQciByteCodeStream__v_; -text: .text%__1cIRootNodeFValue6kMpnOPhaseTransform__pknEType__: classes.o; -text: .text%__1cIXorINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNaddP_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cLregFPR1OperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cFKlassRoop_is_methodData6kM_i_: instanceKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: instanceKlass.o; -text: .text%__1cKciTypeFlowLStateVectorGdo_ldc6MpnQciByteCodeStream__v_; -text: .text%__1cbDReferenceProcessorInitializerIis_clean6kM_v_: concurrentMarkSweepGeneration.o; -text: .text%__1cKManagementJtimestamp6F_x_; -text: .text%__1cOMergeMemStreamOnext_non_empty6Mi_i_: cfgnode.o; -text: .text%__1cIPSOldGenPupdate_counters6M_v_; -text: .text%__1cNSharedRuntimebOraw_exception_handler_for_return_address6FpC_1_; -text: .text%__1cNSharedRuntimebKexception_handler_for_return_address6FpC_1_; -text: .text%__1cNaddI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cHOrINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cMnegF_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cMnegF_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cOcompP_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKciTypeFlowLStateVectorLdo_putfield6MpnQciByteCodeStream__v_; -text: .text%__1cXjava_lang_ref_ReferenceWpending_list_lock_addr6F_ppnHoopDesc__; -text: .text%__1cIciObjectOis_null_object6kM_i_: ciInstance.o; -text: .text%__1cSshlL_eReg_1_31NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%signalHandler; -text: .text%JVM_handle_solaris_signal; -text: .text%__1cMnegF_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNinstanceKlassbBcall_class_initializer_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassRclass_initializer6M_pnNmethodOopDesc__; -text: .text%__1cNinstanceKlassbOset_initialization_state_and_notify_impl6FnTinstanceKlassHandle_n0AKClassState_pnGThread__v_; -text: .text%__1cNinstanceKlassbJset_initialization_state_and_notify6Mn0AKClassState_pnGThread__v_; -text: .text%__1cNinstanceKlassWcall_class_initializer6MpnGThread__v_; -text: .text%__1cKcopy_table6FppC1i_v_: interpreter.o; -text: .text%__1cMtlsLoadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQVMOperationQdDueueLremove_next6M_pnMVM_Operation__; -text: .text%__1cOPhaseIdealLoopNreorg_offsets6MpnNIdealLoopTree__v_; -text: .text%__1cPCountedLoopNodeDphi6kM_pnENode__: loopopts.o; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_i_v_; -text: .text%__1cPcmpFastLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKBufferBlob2t6Mpkci_v_; -text: .text%__1cKBufferBlobGcreate6Fpkci_p0_; -text: .text%__1cNaddL_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKBufferBlob2n6FII_pv_; -text: .text%__1cICodeBlob2t6Mpkcii_v_; -text: .text%__1cMeBCXRegLOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_; -text: .text%__1cNRelocIteratorTlocs_and_index_size6Fii_i_; -text: .text%__1cKNode_Array2t6MpnFArena__v_: compile.o; -text: .text%__1cScompP_mem_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbCCompiledCodeSafepointHandlerbDhandle_polling_page_exception6M_pC_; -text: .text%__1cKJavaThreadUin_stack_yellow_zone6MpC_i_: os_solaris_i486.o; -text: .text%__1cFframebDsender_for_raw_compiled_frame6kMpnLRegisterMap__0_; -text: .text%__1cMVM_OperationSis_cheap_allocated6kM_i_: vm_operations.o; -text: .text%__1cUSafepointSynchronizebDhandle_polling_page_exception6FpnKJavaThread__pC_; -text: .text%__1cKloadUBNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cLGCTaskQdDueueKinitialize6M_v_; -text: .text%__1cSCardTableExtensionbAscavenge_contents_parallel6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager_I_v_; -text: .text%__1cTOldToYoungRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cJStealTaskEname6M_pc_: psTasks.o; -text: .text%__1cTOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cJStealTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cJStealTask2t6Mi_v_; -text: .text%__1cNGCTaskManagerMnote_release6MI_v_; -text: .text%__1cHnmethodJcode_size6kM_i_: nmethod.o; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: memnode.o; -text: .text%__1cJcmpOpOperEless6kM_i_: ad_i486_clone.o; -text: .text%__1cSaddD_reg_roundNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cSmembar_releaseNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cICodeHeapTmark_segmap_as_used6MII_v_; -text: .text%__1cJloadCNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadConL0NodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cNsubL_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJimmL0OperJconstantL6kM_x_: ad_i486_clone.o; -text: .text%__1cFParseWensure_phis_everywhere6M_v_; -text: .text%__1cLConvL2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNxorI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNandL_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJStartNodeHsize_of6kM_I_; -text: .text%__1cHMatcherFxform6MpnENode_i_2_; -text: .text%__1cHMatcherLfind_shared6MpnENode__v_; -text: .text%__1cTMachCallRuntimeNodePret_addr_offset6M_i_; -text: .text%__1cILRG_List2t6MI_v_; -text: .text%__1cILoopNodeHsize_of6kM_I_: classes.o; -text: .text%__1cEDict2t6MpFpkv2_ipF2_ipnFArena_i_v_; -text: .text%__1cGBundlePinitialize_nops6FppnIMachNode__v_; -text: .text%__1cOMachPrologNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNstoreImmPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLeAXRegIOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cNsubL_eRegNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cHi2bNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cRmethodDataOopDescYcompute_extra_data_count6Fii_i_; -text: .text%__1cWCallLeafNoFPDirectNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: parse3.o; -text: .text%__1cYcmpL_zero_flags_EQdDNENodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6MX_v_: jni.o; -text: .text%__1cNFingerprinterLfingerprint6M_X_: jni.o; -text: .text%__1cKimmI16OperIconstant6kM_i_: ad_i486_clone.o; -text: .text%__1cSshrL_eReg_1_31NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPstoreImmI16NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIemit_d166FrnKCodeBuffer_i_v_; -text: .text%__1cRxorI_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cRsubI_eReg_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cJeRegPOperFclone6kM_pnIMachOper__; -text: .text%__1cJAssemblerEmovl6MnHAddress_i_v_; -text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cFStateT_sub_Op_CheckCastPP6MpknENode__v_; -text: .text%__1cKciTypeFlowLStateVectorJhalf_type6FpnGciType__3_: ciTypeFlow.o; -text: .text%__1cJAssemblerDnop6M_v_; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: connode.o; -text: .text%__1cMFastLockNodeFValue6kMpnOPhaseTransform__pknEType__: classes.o; -text: .text%JVM_GetFieldIxModifiers; -text: .text%__1cNmodI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cIMulINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cKReturnNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cRsarI_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cFParseKarray_load6MnJBasicType__v_; -text: .text%__1cRjmpConU_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cRjmpConU_shortNodeJis_Branch6kM_I_: ad_i486_misc.o; -text: .text%__1cLjmpConUNodeUshort_branch_version6M_pnIMachNode__; -text: .text%__1cRjmpConU_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKcmpOpUOperFclone6kM_pnIMachOper__; -text: .text%__1cFStateO_sub_Op_StoreB6MpknENode__v_; -text: .text%__1cFTypeFCeq6kMpknEType__i_; -text: .text%__1cFParseNadd_safepoint6M_v_; -text: .text%__1cLOpaque2NodeEhash6kM_I_; -text: .text%JVM_IsConstructorIx; -text: .text%__1cIimmPOperFclone6kM_pnIMachOper__; -text: .text%__1cMloadConPNodeFclone6kM_pnENode__; -text: .text%__1cSshrL_eReg_1_31NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeMis_SafePoint6M_pnNSafePointNode__: connode.o; -text: .text%__1cRxorI_eReg_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cXmembar_release_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNinstanceKlassQarray_klass_impl6MipnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__; -text: .text%__1cKadd_n_reqs6FpnENode_1_v_: graphKit.o; -text: .text%__1cNdecI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cILoopNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cICodeHeapLmerge_right6MpnJFreeBlock__v_; -text: .text%__1cIregDOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNsubI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cXconvI2L_reg_reg_zexNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmethodOopDescTset_native_function6MpC_v_; -text: .text%__1cIPhaseIFGYCompute_Effective_Degree6M_v_; -text: .text%__1cMPhaseChaitinISimplify6M_v_; -text: .text%__1cMPhaseChaitinGSelect6M_I_; -text: .text%__1cMPhaseChaitinOcache_lrg_info6M_v_; -text: .text%__1cNtestU_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJScopeDescJstream_at6kMi_pnTDebugInfoReadStream__; -text: .text%__1cTDebugInfoReadStream2t6MpknHnmethod_i_v_; -text: .text%__1cLOptoRuntimeJstub_name6FpC_pkc_; -text: .text%__1cNSignatureInfoHdo_long6M_v_: frame.o; -text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_; -text: .text%__1cENodeHrm_prec6MI_v_; -text: .text%__1cUjni_invoke_nonstatic6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; -text: .text%__1cKciTypeFlowLStateVectorOmeet_exception6MpnPciInstanceKlass_pk1_i_; -text: .text%__1cKloadUBNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cWflagsReg_long_EQdDNEOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKciTypeFlowPflow_exceptions6MpnNGrowableArray4Cpn0AFBlock___pnNGrowableArray4CpnPciInstanceKlass___pn0ALStateVector__v_; -text: .text%__1cIBoolNodeZis_counted_loop_exit_test6M_i_; -text: .text%__1cPciInstanceKlassTis_java_lang_Object6M_i_; -text: .text%__1cRaddL_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cXmembar_release_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cQsalI_eReg_CLNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNnegI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOcompP_eRegNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cILoopNodeHsize_of6kM_I_: loopnode.o; -text: .text%__1cMPhaseChaitinFSplit6MI_I_; -text: .text%__1cZPhaseConservativeCoalesce2t6MrnMPhaseChaitin__v_; -text: .text%__1cMPhaseChaitinHcompact6M_v_; -text: .text%__1cMPhaseChaitinZcompress_uf_map_for_nodes6M_v_; -text: .text%__1cZPhaseConservativeCoalesceGverify6M_v_; -text: .text%__1cHTypePtrFxmeet6kMpknEType__3_; -text: .text%__1cOcompP_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cHMatcherQis_spillable_arg6Fi_i_; -text: .text%__1cSsafePoint_pollNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cHMatcherKcan_be_arg6Fi_i_; -text: .text%__1cSTailCalljmpIndNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIregFOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cTDebugInfoReadStreamLread_handle6M_nGHandle__; -text: .text%__1cJScopeDesc2t6MpknHnmethod_i_v_; -text: .text%__1cYcmpL_zero_flags_LEGTNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOcompiledVFrame2t6MpknFframe_pknLRegisterMap_pnKJavaThread_pnJScopeDesc__v_; -text: .text%__1cNSignatureInfoHdo_long6M_v_: bytecode.o; -text: .text%__1cXvirtual_call_RelocationJfirst_oop6M_pC_; -text: .text%__1cXvirtual_call_RelocationJoop_limit6M_pC_; -text: .text%__1cQComputeCallStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cHnmethodOis_java_method6kM_i_: nmethod.o; -text: .text%__1cNminI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cSCallLeafDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cYcmpL_zero_flags_LEGTNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cOcompiledVFrameGis_top6kM_i_; -text: .text%__1cFStateQ_sub_Op_CallLeaf6MpknENode__v_; -text: .text%__1cKJNIHandlesOdestroy_global6FpnI_jobject_i_v_; -text: .text%__1cHi2sNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRNativeGeneralJumpQjump_destination6kM_pC_; -text: .text%__1cMoutputStreamFprint6MpkcE_v_; -text: .text%__1cIciObjectIis_klass6M_i_: ciInstance.o; -text: .text%__1cMoutputStreamMdo_vsnprintf6FpcIpkcpvirI_3_; -text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; -text: .text%__1cRaddI_eReg_memNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cITypeLongFxdual6kM_pknEType__; -text: .text%__1cSloadL_volatileNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cScompP_eReg_immNodeFreloc6kM_i_; -text: .text%__1cPcheckCastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSvframeStreamCommonYfill_from_compiled_frame6MpnHnmethod_i_v_; -text: .text%__1cHnmethodQis_native_method6kM_i_: nmethod.o; -text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__: cfgnode.o; -text: .text%__1cPCountedLoopNodeNstride_is_con6kM_i_: cfgnode.o; -text: .text%__1cTshrL_eReg_32_63NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKarrayKlassMoop_is_array6kM_i_: objArrayKlass.o; -text: .text%__1cPClassFileStreamGget_u86MpnGThread__X_; -text: .text%__1cPshrI_eReg_1NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cbBjava_lang_ref_SoftReferenceJtimestamp6FpnHoopDesc__x_; -text: .text%__1cJNode_ListEyank6MpnENode__v_; -text: .text%__1cQLRUMaxHeapPolicyWshould_clear_reference6MpnHoopDesc__i_; -text: .text%__1cIGraphKitNstore_barrier6MpnENode_22_v_; -text: .text%__1cMrep_stosNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cWflagsReg_long_LEGTOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cSThreadLocalStorageTpd_getTlsAccessMode6F_n0AQpd_tlsAccessMode__; -text: .text%__1cOMacroAssemblerKget_thread6MpnMRegisterImpl__v_; -text: .text%__1cKloadUBNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLRethrowNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cHMonitorGnotify6M_i_; -text: .text%__1cIRootNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cRcmpFastUnlockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIGraphKitNshared_unlock6MpnENode_2_v_; -text: .text%__1cNSafePointNodeLpop_monitor6M_v_; -text: .text%__1cLOptoRuntimebAcomplete_monitor_exit_Type6F_pknITypeFunc__; -text: .text%__1cIRootNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cFStateS_sub_Op_FastUnlock6MpknENode__v_; -text: .text%__1cJloadFNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cOstackSlotFOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cSstore_to_stackslot6FrnKCodeBuffer_iii_v_; -text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; -text: .text%__1cMnadxRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cJMultiNodeUdepends_only_on_test6kM_i_: callnode.o; -text: .text%__1cIAndINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cUmembar_cpu_orderNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMloadConINodeGis_Con6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: cfgnode.o; -text: .text%__1cPconvI2L_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; -text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cOjmpLoopEndNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRmulI_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cPsarI_eReg_1NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%jni_ExceptionCheck: jni.o; -text: .text%__1cURethrowExceptionNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cIMulLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cKstoreLNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cFStateP_sub_Op_RShiftI6MpknENode__v_; -text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; -text: .text%__1cIMulLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cOcompP_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cMvalue_of_loc6FppnHoopDesc__i_; -text: .text%__1cNSafePointNodeMpush_monitor6MpknMFastLockNode__v_; -text: .text%__1cTcompareAndSwapLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNandI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cTshrL_eReg_32_63NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cSshlL_eReg_1_31NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKcmpOpUOperJnot_equal6kM_i_: ad_i486_clone.o; -text: .text%__1cOcompP_eRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cNSCMemProjNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cNandI_eRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cNaddP_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNstoreImmPNodeFreloc6kM_i_; -text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; -text: .text%__1cYcmpL_zero_flags_EQdDNENodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKtype2basic6FpknEType__nJBasicType__; -text: .text%__1cIAndLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cIAndLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cNstoreImmBNodeFreloc6kM_i_; -text: .text%__1cNCollectedHeapYcommon_mem_allocate_init6FIipnGThread__pnIHeapWord__: jvm.o; -text: .text%JVM_Clone; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: jvm.o; -text: .text%__1cNcmovI_regNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cNloadKlassNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVeADXRegL_low_onlyOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: objArrayKlass.o; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: objArrayKlass.o; -text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNCollectedHeapYcommon_mem_allocate_init6FIipnGThread__pnIHeapWord__: objArrayKlass.o; -text: .text%__1cMeBCXRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNimmI_1_31OperIconstant6kM_i_: ad_i486_clone.o; -text: .text%__1cLPhaseValues2T5B6M_v_; -text: .text%__1cNtestU_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJLoadCNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cRsubI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIJumpDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cMalloc_object6FpnH_jclass_pnGThread__pnPinstanceOopDesc__: jni.o; -text: .text%__1cIGraphKitOnull_check_oop6MpnKRegionNode_pnENode_i_4_; -text: .text%__1cRmulI_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cHOrINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKTypeRawPtrEmake6FnHTypePtrDPTR__pk0_; -text: .text%__1cKTypeAryPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cFKlassDLCA6Mp0_1_; -text: .text%__1cHciKlassVleast_common_ancestor6Mp0_1_; -text: .text%__1cPconvL2I_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJeRegLOperFclone6kM_pnIMachOper__; -text: .text%__1cbCfind_class_from_class_loader6FpnHJNIEnv__nMsymbolHandle_CnGHandle_3CpnGThread__pnH_jclass__; -text: .text%__1cNstoreImmINodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cPshlI_eReg_1NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNmaxI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cIMinINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cHnmethodVis_dependent_on_entry6MpnMklassOopDesc_2pnNmethodOopDesc__i_; -text: .text%__1cFKlassPoop_is_instance6kM_i_: typeArrayKlass.o; -text: .text%__1cKloadUBNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMTypeKlassPtrFxmeet6kMpknEType__3_; -text: .text%__1cYcmpL_zero_flags_EQdDNENodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cICodeHeapPadd_to_freelist6MpnJHeapBlock__v_; -text: .text%__1cICodeHeapKdeallocate6Mpv_v_; -text: .text%__1cJCodeCacheEfree6FpnICodeBlob__v_; -text: .text%__1cJVectorSetGslamin6Mrk0_v_; -text: .text%__1cQsalI_eReg_CLNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKNode_ArrayFclear6M_v_; -text: .text%__1cKBufferBlobEfree6Fp0_v_; -text: .text%__1cIRootNodeHis_Root6M_p0_: classes.o; -text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_: jni.o; -text: .text%__1cOMethodLivenessKBasicBlockPmerge_exception6MnGBitMap__i_; -text: .text%__1cNminI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNsubI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_; -text: .text%__1cMorI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNtestU_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%jni_NewObject: jni.o; -text: .text%__1cMTailCallNodeKmatch_edge6kMI_I_; -text: .text%__1cIciMethodRinstructions_size6M_i_; -text: .text%__1cRsarI_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cPshrI_eReg_1NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cKStoreFNodeGOpcode6kM_i_; -text: .text%__1cFStateO_sub_Op_StoreC6MpknENode__v_; -text: .text%__1cNobjArrayKlassOmulti_allocate6MipiipnGThread__pnHoopDesc__; -text: .text%__1cFciEnvKcompile_id6M_I_; -text: .text%__1cRAbstractAssemblerFflush6M_v_; -text: .text%__1cJloadINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRaddL_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNloadConL0NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNsubL_eRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cNsubL_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOcompU_eRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cScompU_eReg_memNodeFreloc6kM_i_; -text: .text%__1cTleaPIdxScaleOffNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMURShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNSharedRuntimeQfind_callee_info6FpnKJavaThread_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cNsubL_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cSCallLeafDirectNodeFreloc6kM_i_; -text: .text%__1cNSharedRuntimeOresolve_helper6FpnKJavaThread_iipnGThread__nMmethodHandle__; -text: .text%__1cNSharedRuntimeSresolve_sub_helper6FpnKJavaThread_iipnGThread__nMmethodHandle__; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cKCompiledIC2t6MpnKNativeCall__v_; -text: .text%__1cNcmovI_regNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cNcmovI_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cGIfNodeMdominated_by6MpnENode_pnMPhaseIterGVN__v_; -text: .text%__1cIMulDNodeGOpcode6kM_i_; -text: .text%__1cHMatcherPprior_fast_lock6FpknENode__i_; -text: .text%__1cFStateV_sub_Op_MemBarAcquire6MpknENode__v_; -text: .text%__1cLConvL2INodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cOMachEpilogNodeFreloc6kM_i_; -text: .text%__1cOMachEpilogNodeNis_MachEpilog6M_p0_: ad_i486.o; -text: .text%__1cOMachEpilogNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivLNodeGOpcode6kM_i_; -text: .text%__1cSstring_compareNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cSsafePoint_pollNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitNgen_checkcast6MpnENode_2p2_2_; -text: .text%__1cSindIndexOffsetOperNbase_position6kM_i_: ad_i486.o; -text: .text%__1cLStrCompNodeGOpcode6kM_i_; -text: .text%__1cSindIndexOffsetOperOindex_position6kM_i_: ad_i486.o; -text: .text%__1cKRelocationJpack_data6M_i_: codeBlob.o; -text: .text%__1cGciTypeMis_classless6kM_i_: ciInstanceKlass.o; -text: .text%__1cLPcDescCacheKpc_desc_at6kMpnHnmethod_pCi_pnGPcDesc__; -text: .text%__1cXmembar_acquire_lockNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLloadSSFNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNaddP_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cYcmpL_zero_flags_LEGTNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEtemp6F_pnMRegisterImpl__; -text: .text%__1cPstoreImmI16NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFframeRretrieve_receiver6MpnLRegisterMap__pnHoopDesc__; -text: .text%__1cJcmpOpOperNgreater_equal6kM_i_: ad_i486_clone.o; -text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__; -text: .text%__1cNmodL_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadCNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXcmpL_reg_flags_EQdDNENodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmulL_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIDivINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cJAssemblerDjmp6MrnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cSloadL_volatileNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIGraphKitRgen_subtype_check6MpnENode_2_2_; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cENodeHdel_out6Mp0_v_: parseHelper.o; -text: .text%__1cNandI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cJTraceTime2t6MpkciipnMoutputStream__v_; -text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_tree6M_v_; -text: .text%__1cLConvD2INodeGOpcode6kM_i_; -text: .text%__1cFframeIpatch_pc6MpnGThread_pC_v_; -text: .text%__1cOPhaseIdealLoop2t6MrnMPhaseIterGVN_pk0i_v_; -text: .text%__1cKciTypeFlowFRangeSprivate_copy_count6kMpn0AGJsrSet__i_; -text: .text%__1cYcmpL_zero_flags_EQdDNENodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cXmembar_release_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXcmpL_reg_flags_LTGENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNSignatureInfoHdo_bool6M_v_: frame.o; -text: .text%__1cKRelocationWfix_relocation_at_move6Mi_v_: codeBlob.o; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: callnode.o; -text: .text%__1cNIdealLoopTreeMis_loop_exit6kMpnENode_pnOPhaseIdealLoop__2_; -text: .text%__1cJloadBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cZload_long_indOffset32OperNconstant_disp6kM_i_: ad_i486.o; -text: .text%__1cZload_long_indOffset32OperNbase_position6kM_i_: ad_i486.o; -text: .text%__1cNincI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJloadLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKstoreFNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cYcmpL_zero_flags_LEGTNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNxorI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNandL_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cNtestU_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cICodeBlobKis_nmethod6kM_i_: onStackReplacement.o; -text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; -text: .text%__1cXcmpL_reg_flags_LEGTNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNincI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: loopnode.o; -text: .text%__1cNSafePointNodeKgrow_stack6MpnIJVMState_I_v_; -text: .text%__1cNxorI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cLRShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRsubI_eReg_memNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cKBlock_ListGinsert6MIpnFBlock__v_; -text: .text%__1cECopyYconjoint_words_to_higher6FpnIHeapWord_2I_v_: block.o; -text: .text%__1cLRShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: loopnode.o; -text: .text%__1cFStateP_sub_Op_CastP2I6MpknENode__v_; -text: .text%__1cLCastP2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNaddL_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cKstoreCNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_NewGlobalRef: jni.o; -text: .text%__1cKPSYoungGenRcapacity_in_bytes6kM_I_; -text: .text%__1cMtlsLoadPNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNmaxI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNandL_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cMVirtualSpaceNreserved_size6kM_I_; -text: .text%__1cHNTarjanIsetdepth6MIpI_v_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_late6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; -text: .text%__1cOPhaseIdealLoopQbuild_loop_early6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; -text: .text%__1cOPhaseIdealLoopKDominators6M_v_; -text: .text%__1cHNTarjanDDFS6Fp0rnJVectorSet_pnOPhaseIdealLoop_pI_i_; -text: .text%__1cOPhaseIdealLoopRinit_dom_lca_tags6M_v_; -text: .text%__1cNaddP_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvI2L_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cLeCXRegIOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cJcmpOpOperHgreater6kM_i_: ad_i486_clone.o; -text: .text%__1cSmembar_acquireNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLklassItablebFinitialize_itable_for_interface6MpnMklassOopDesc_pnRitableMethodEntry__v_; -text: .text%__1cScheck_phi_clipping6FpnHPhiNode_rpnHConNode_rI45rpnENode_5_i_: cfgnode.o; -text: .text%__1cQjava_lang_ThreadRset_thread_status6FpnHoopDesc_n0AMThreadStatus__v_; -text: .text%__1cbFunnecessary_membar_volatileNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKCompiledICIis_clean6kM_i_; -text: .text%__1cMPhaseChaitinVfind_base_for_derived6MppnENode_2rI_2_; -text: .text%__1cKciTypeFlowLStateVectorGdo_new6MpnQciByteCodeStream__v_; -text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cENodeGOpcode6kM_i_; -text: .text%__1cKJavaThreadGactive6F_p0_; -text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_; -text: .text%__1cKstoreLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKJavaThreadNreguard_stack6MpC_i_; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle__v_; -text: .text%JVM_FillInStackTrace; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_; -text: .text%__1cSInterpreterRuntimePset_bcp_and_mdp6FpCpnKJavaThread__v_; -text: .text%__1cTjava_lang_ThrowableQclear_stacktrace6FpnHoopDesc__v_; -text: .text%__1cIUniverseWis_out_of_memory_error6FnGHandle__i_; -text: .text%__1cJloadSNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSshlL_eReg_1_31NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_; -text: .text%__1cLPcDescCacheLadd_pc_desc6MpnGPcDesc__v_; -text: .text%__1cNcmovI_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOstackSlotFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cOstackSlotFOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cLloadSSFNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cFStateN_sub_Op_LoadL6MpknENode__v_; -text: .text%__1cNnegI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJAssemblerEcmpl6MnHAddress_i_v_; -text: .text%__1cJloadFNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cIModINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; -text: .text%__1cKCompiledICZcompute_monomorphic_entry6FnMmethodHandle_nLKlassHandle_iirnOCompiledICInfo_pnGThread__v_; -text: .text%__1cObox_handleNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cbBInterpreterCodeletInterfaceRcode_size_to_size6kMi_i_: interpreter.o; -text: .text%__1cbBInterpreterCodeletInterfaceKinitialize6MpnEStub_i_v_: interpreter.o; -text: .text%__1cIPhaseCFGOinsert_goto_at6MII_v_; -text: .text%__1cENodeIis_CMove6M_pnJCMoveNode__: memnode.o; -text: .text%__1cENodeHis_Bool6M_pnIBoolNode__: memnode.o; -text: .text%__1cUParallelScavengeHeapEused6kM_I_; -text: .text%__1cOmulIS_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cRxorI_eReg_memNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cLOpaque2NodeLbottom_type6kM_pknEType__: connode.o; -text: .text%__1cTshrL_eReg_32_63NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cJAssemblerGmovzxb6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cHciKlassSsuper_check_offset6M_I_; -text: .text%__1cOMacroAssemblerSload_unsigned_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cICmpDNodeGOpcode6kM_i_; -text: .text%__1cLRuntimeStubbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cIGraphKitTcreate_and_xform_if6MpnENode_2ff_pnGIfNode__: parse2.o; -text: .text%__1cENodeFis_If6M_pnGIfNode__: loopnode.o; -text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; -text: .text%__1cFParseJdo_ifnull6MnIBoolTestEmask__v_; -text: .text%__1cNmethodOopDescVclear_native_function6M_v_; -text: .text%__1cFframeLnmethods_do6M_v_; -text: .text%__1cJLoadBNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cLeAXRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%jni_NewLocalRef: jni.o; -text: .text%__1cKstoreFNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cHMatcherQinline_cache_reg6F_nHOptoRegEName__; -text: .text%__1cLloadSSFNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_; -text: .text%__1cGOopMapPset_derived_oop6MnHOptoRegEName_ii2_v_; -text: .text%__1cOimmI_32_63OperIconstant6kM_i_: ad_i486_clone.o; -text: .text%__1cLOptoRuntimebAresolve_opt_virtual_call_C6FpnKJavaThread__pC_; -text: .text%__1cPClassFileParserbEparse_constant_pool_long_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cLConvF2DNodeGOpcode6kM_i_; -text: .text%__1cIMulINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cPconvL2I_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIGraphKitOset_pair_local6MipnENode__v_: parse2.o; -text: .text%__1cFStateM_sub_Op_AndI6MpknENode__v_; -text: .text%__1cPClassFileParserbNparse_classfile_inner_classes_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__H_; -text: .text%__1cICodeHeapMmax_capacity6kM_I_; -text: .text%__1cHciKlassGloader6M_pnHoopDesc__: ciTypeArrayKlass.o; -text: .text%__1cKloadUBNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%jni_DeleteGlobalRef: jni.o; -text: .text%__1cJLoadCNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOPhaseIdealLoopLdo_split_if6MpnENode__v_; -text: .text%__1cRsubI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJcmpOpOperKless_equal6kM_i_: ad_i486_clone.o; -text: .text%__1cNaddI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKTypeOopPtrSmake_from_constant6FpnIciObject__pk0_; -text: .text%__1cJArrayDataKcell_count6M_i_: methodDataOop.o; -text: .text%__1cMURShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%jni_GetObjectArrayElement: jni.o; -text: .text%__1cRmulI_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; -text: .text%__1cNloadConI0NodeGis_Con6kM_I_: ad_i486_misc.o; -text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_; -text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; -text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cIUniverseHoops_do6FpnKOopClosure_i_v_; -text: .text%__1cOJNIHandleBlockMweak_oops_do6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cQVMOperationQdDueueHoops_do6MpnKOopClosure__v_; -text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_; -text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; -text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; -text: .text%__1cIVMThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollectorXoops_do_for_all_threads6FpnKOopClosure__v_; -text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; -text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; -text: .text%__1cNstoreImmINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPlocal_vsnprintf6FpcIpkcpv_i_; -text: .text%JVM_GetCPMethodModifiers; -text: .text%__1cIModLNodeGOpcode6kM_i_; -text: .text%__1cNSCMemProjNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cHnmethodNscope_desc_at6MpCi_pnJScopeDesc__; -text: .text%__1cTcompareAndSwapLNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIAndLNodeGmul_id6kM_pknEType__: classes.o; -text: .text%jni_SetLongField: jni.o; -text: .text%__1cENodeMis_SafePoint6M_pnNSafePointNode__: multnode.o; -text: .text%__1cIAndLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%jio_vsnprintf; -text: .text%__1cLRethrowNodeEhash6kM_I_: classes.o; -text: .text%__1cWCallLeafNoFPDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRsalI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cRsalI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWCallLeafNoFPDirectNodeRis_safepoint_node6kM_i_: ad_i486_misc.o; -text: .text%__1cJAssemblerDjmp6MnHAddress__v_; -text: .text%__1cIimmLOperFclone6kM_pnIMachOper__; -text: .text%__1cMloadConLNodeFclone6kM_pnENode__; -text: .text%jio_snprintf; -text: .text%__1cTCallDynamicJavaNodeEhash6kM_I_: callnode.o; -text: .text%__1cNSignatureInfoJdo_double6M_v_: frame.o; -text: .text%__1cENodeGis_Mem6M_pnHMemNode__: subnode.o; -text: .text%__1cMstoreSSINodeHis_Copy6kM_I_: ad_i486_misc.o; -text: .text%__1cYmulI_imm_RShift_highNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cQsalL_eReg_CLNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cLConvL2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIMulLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cOjmpLoopEndNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOmulIS_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNinstanceKlassPadd_implementor6MpnMklassOopDesc__v_; -text: .text%__1cMdecI_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cOcompiledVFrameEcode6kM_pnHnmethod__; -text: .text%__1cOleaPIdxOffNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKReturnNode2t6MpnENode_2222_v_; -text: .text%__1cKReturnNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQComputeCallStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cPGlobalTLABStatsKinitialize6M_v_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJset_clock6Fx_v_; -text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; -text: .text%__1cSReferenceProcessorOprocess_phase16MppnHoopDesc_pnPReferencePolicy_pnRBoolObjectClosure_pnKOopClosure_pnLVoidClosure__v_; -text: .text%__1cSReferenceProcessorbBenqueue_discovered_reflists6MppnHoopDesc__v_; -text: .text%__1cSReferenceProcessorbDenqueue_discovered_references6M_i_; -text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; -text: .text%__1cUParallelScavengeHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cPGCMemoryManagerIgc_begin6M_v_; -text: .text%__1cPGCMemoryManagerGgc_end6M_v_; -text: .text%__1cUParallelScavengeHeapTensure_parseability6M_v_; -text: .text%__1cUParallelScavengeHeapOfill_all_tlabs6M_v_; -text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; -text: .text%__1cNMemoryServiceIgc_begin6Fi_v_; -text: .text%__1cNMemoryServiceGgc_end6Fi_v_; -text: .text%__1cXTraceMemoryManagerStats2t6Mi_v_; -text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; -text: .text%__1cRaddL_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKDictionaryHoops_do6MpnKOopClosure__v_; -text: .text%__1cXjava_lang_ref_ReferenceRpending_list_addr6F_ppnHoopDesc__; -text: .text%__1cUParallelScavengeHeapQresize_all_tlabs6M_v_; -text: .text%__1cVLoaderConstraintTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cUParallelScavengeHeapPupdate_counters6M_v_; -text: .text%__1cNCollectedHeapTensure_parseability6M_v_; -text: .text%__1cNCollectedHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersPupdate_counters6M_v_; -text: .text%__1cKPSYoungGenPupdate_counters6M_v_; -text: .text%__1cNCollectedHeapQresize_all_tlabs6M_v_; -text: .text%__1cTDerivedPointerTableFclear6F_v_; -text: .text%__1cNCollectedHeapOfill_all_tlabs6M_v_; -text: .text%__1cQLRUMaxHeapPolicy2t6M_v_; -text: .text%__1cTDerivedPointerTablePupdate_pointers6F_v_; -text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; -text: .text%__1cSReferenceProcessorQprocess_phaseJNI6M_v_; -text: .text%__1cSReferenceProcessorbDprocess_discovered_references6M_v_; -text: .text%__1cJOopMapSet2t6M_v_; -text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; -text: .text%__1cRInlineCacheBufferIis_empty6F_i_; -text: .text%__1cUSafepointSynchronizeRis_cleanup_needed6F_i_; -text: .text%__1cOPhaseIdealLoopUsplit_if_with_blocks6MrnJVectorSet_rnKNode_Stack__v_; -text: .text%__1cIMachOperFscale6kM_i_; -text: .text%__1cMtlsLoadPNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cIMachOperNconstant_disp6kM_i_; -text: .text%__1cPVM_GC_OperationQgc_count_changed6kM_i_; -text: .text%__1cPVM_GC_OperationZacquire_pending_list_lock6M_v_; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: constantPoolKlass.o; -text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; -text: .text%__1cQinstanceRefKlassbKrelease_and_notify_pending_list_lock6FipnJBasicLock__v_; -text: .text%__1cPVM_GC_OperationNdoit_prologue6M_i_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: constantPoolKlass.o; -text: .text%__1cPVM_GC_OperationbKrelease_and_notify_pending_list_lock6M_v_; -text: .text%__1cIAndLNodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIAndLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cURethrowExceptionNodeGpinned6kM_i_: ad_i486_misc.o; -text: .text%__1cIAndLNodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cJCodeCacheXmark_for_deoptimization6FpnMklassOopDesc__i_; -text: .text%__1cRmulI_eReg_immNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cNmodI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUSafepointSynchronizeFbegin6F_v_; -text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; -text: .text%__1cCosbCmake_polling_page_unreadable6F_v_; -text: .text%__1cUSafepointSynchronizeQdo_cleanup_tasks6F_v_; -text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; -text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_; -text: .text%__1cJloadFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMCounterDecayFdecay6F_v_; -text: .text%__1cTAbstractInterpreterRnotice_safepoints6F_v_; -text: .text%__1cONMethodSweeperFsweep6F_v_; -text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_; -text: .text%__1cUSafepointSynchronizeDend6F_v_; -text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; -text: .text%__1cTAbstractInterpreterRignore_safepoints6F_v_; -text: .text%__1cCosbAmake_polling_page_readable6F_v_; -text: .text%__1cURethrowExceptionNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cOCompiledRFrameEinit6M_v_; -text: .text%__1cGvframeDtop6kM_p0_; -text: .text%__1cOCompilerOraclePshould_break_at6FnMmethodHandle__i_; -text: .text%__1cJOopMapSetJheap_size6kM_i_; -text: .text%__1cJOopMapSetHcopy_to6MpC_v_; -text: .text%__1cRAbstractAssemblerOcode_fill_byte6F_i_; -text: .text%__1cKCodeBufferJcopy_code6MpnICodeBlob__v_; -text: .text%__1cNSignatureInfoJdo_double6M_v_: bytecode.o; -text: .text%__1cICodeBlobWfix_relocation_at_move6Mi_v_; -text: .text%JVM_DoPrivileged; -text: .text%__1cVPatchingRelocIteratorIpostpass6M_v_; -text: .text%__1cVPatchingRelocIteratorHprepass6M_v_; -text: .text%__1cICodeBlobPallocation_size6FpnKCodeBuffer_ii_I_; -text: .text%__1cNRelocIteratorMcreate_index6FpnKCodeBuffer_pnJrelocInfo_4_4_; -text: .text%__1cICodeBlob2t6MpkcpnKCodeBuffer_iiipnJOopMapSet_i_v_; -text: .text%__1cKCodeBufferPcopy_relocation6MpnICodeBlob__v_; -text: .text%__1cIAddLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cRPrivilegedElementKinitialize6MpnMvframeStream_pnHoopDesc_p0pnGThread__v_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_base6MnITosState_ppCi_v_; -text: .text%__1cZInterpreterMacroAssemblerKverify_FPU6MinITosState__v_; -text: .text%__1cNmodL_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cURethrowExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKstoreFNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cQVMOperationQdDueueDadd6MpnMVM_Operation__i_; -text: .text%__1cJEventMark2t6MpkcE_v_: vmThread.o; -text: .text%__1cGThreadMget_priority6Fkpk0_nOThreadPriority__; -text: .text%__1cIVMThreadSevaluate_operation6MpnMVM_Operation__v_; -text: .text%__1cQVMOperationQdDueueGunlink6MpnMVM_Operation__v_; -text: .text%__1cQVMOperationQdDueueOqueue_add_back6MipnMVM_Operation__v_; -text: .text%__1cMVM_OperationIevaluate6M_v_; -text: .text%__1cCosTget_native_priority6FkpknGThread_pi_nIOSReturn__; -text: .text%__1cMVM_OperationSset_calling_thread6MpnGThread_nOThreadPriority__v_; -text: .text%__1cQVMOperationQdDueueGinsert6MpnMVM_Operation_2_v_; -text: .text%__1cCosMget_priority6FkpknGThread_rnOThreadPriority__nIOSReturn__; -text: .text%__1cScompI_eReg_memNodeFreloc6kM_i_; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: jvm.o; -text: .text%__1cOcompI_eRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cGGCTask2t6Mn0AEKindEkind__v_; -text: .text%__1cFParseGdo_new6M_v_; -text: .text%__1cLGCTaskQdDueue2t6Mi_v_; -text: .text%__1cJloadFNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNJvmtiGCMarker2t6Mi_v_; -text: .text%__1cNJvmtiGCMarker2T6M_v_; -text: .text%__1cKPSScavengeXshould_attempt_scavenge6F_i_; -text: .text%__1cUWaitForBarrierGCTask2t6Mi_v_; -text: .text%__1cUPSAdaptiveSizePolicyPupdate_averages6MiII_v_; -text: .text%__1cNBarrierGCTaskIdestruct6M_v_; -text: .text%__1cNBarrierGCTaskOdo_it_internal6MpnNGCTaskManager_I_v_; -text: .text%__1cGGCTaskIdestruct6M_v_; -text: .text%__1cLGCTaskQdDueueGcreate6F_p0_; -text: .text%__1cKPSYoungGenLswap_spaces6M_v_; -text: .text%__1cKPSYoungGenNresize_spaces6MII_v_; -text: .text%__1cKPSScavengeQinvoke_no_policy6Fpi_i_; -text: .text%__1cLGCTaskQdDueueHenqueue6Mp0_v_; -text: .text%__1cKPSYoungGenRresize_generation6MII_i_; -text: .text%__1cKPSYoungGenGresize6MII_v_; -text: .text%__1cZSerialOldToYoungRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cUParallelScavengeHeapQresize_young_gen6MII_v_; -text: .text%__1cZSerialOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cNGCTaskManagerIadd_list6MpnLGCTaskQdDueue__v_; -text: .text%__1cNGCTaskManagerVrelease_all_resources6M_v_; -text: .text%__1cUWaitForBarrierGCTaskEname6M_pc_: gcTaskManager.o; -text: .text%__1cUWaitForBarrierGCTaskGcreate6F_p0_; -text: .text%__1cSPSPromotionManagerMpre_scavenge6F_v_; -text: .text%__1cSPSPromotionManagerNpost_scavenge6F_v_; -text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; -text: .text%__1cSPSPromotionManagerbBvm_thread_promotion_manager6F_p0_; -text: .text%__1cUPSAdaptiveSizePolicyUminor_collection_end6MnHGCCauseFCause__v_; -text: .text%__1cSCardTableExtensionRscavenge_contents6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager__v_; -text: .text%__1cUPSAdaptiveSizePolicyWminor_collection_begin6M_v_; -text: .text%__1cNMonitorSupplyHrelease6FpnHMonitor__v_; -text: .text%__1cNMonitorSupplyHreserve6F_pnHMonitor__; -text: .text%__1cUWaitForBarrierGCTaskIwait_for6M_v_; -text: .text%__1cUWaitForBarrierGCTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cUWaitForBarrierGCTaskIdestruct6M_v_; -text: .text%__1cUWaitForBarrierGCTaskHdestroy6Fp0_v_; -text: .text%__1cUPSAdaptiveSizePolicybPcompute_survivor_space_size_and_threshold6MiiI_i_; -text: .text%__1cHThreadsZcreate_thread_roots_tasks6FpnLGCTaskQdDueue__v_; -text: .text%__1cPGlobalTLABStatsHpublish6M_v_; -text: .text%__1cMindirectOperNconstant_disp6kM_i_: ad_i486.o; -text: .text%__1cMindirectOperNbase_position6kM_i_: ad_i486.o; -text: .text%__1cbDVM_ParallelGCFailedAllocation2t6MIiiI_v_; -text: .text%__1cJloadSNodeFreloc6kM_i_; -text: .text%__1cMrep_stosNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateN_sub_Op_LoadS6MpknENode__v_; -text: .text%__1cQorI_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cQshrI_eReg_CLNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_; -text: .text%__1cNIdealLoopTreePiteration_split6MpnOPhaseIdealLoop_rnJNode_List__v_; -text: .text%__1cHnmethodPscopes_pcs_size6kM_i_: nmethod.o; -text: .text%__1cHnmethodQscopes_data_size6kM_i_: nmethod.o; -text: .text%__1cHnmethodJstub_size6kM_i_: nmethod.o; -text: .text%__1cHnmethodOexception_size6kM_i_: nmethod.o; -text: .text%__1cIMulLNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cLOopRecorderIoop_size6M_i_; -text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; -text: .text%__1cHnmethodKtotal_size6kM_i_; -text: .text%__1cVCallRuntimeDirectNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNstoreImmINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cINodeHash2t6Mp0_v_; -text: .text%__1cOPhaseTransform2t6Mp0nFPhaseLPhaseNumber__v_; -text: .text%__1cLPhaseValues2t6Mp0_v_; -text: .text%__1cZCallInterpreterDirectNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNmethodOopDescbDbuild_interpreter_method_data6FnMmethodHandle_pnGThread__v_; -text: .text%__1cOJNIHandleBlockRrebuild_free_list6M_v_; -text: .text%__1cFStateM_sub_Op_Goto6MpknENode__v_; -text: .text%__1cFDictIFreset6MpknEDict__v_; -text: .text%__1cIPhaseCFGQFind_Inner_Loops6M_v_; -text: .text%__1cMPhaseChaitinRRegister_Allocate6M_v_; -text: .text%__1cIPhaseCFGJbuild_cfg6M_I_; -text: .text%__1cIPhaseCFG2t6MpnFArena_pnIRootNode_rnHMatcher__v_; -text: .text%__1cHMatcherZnumber_of_saved_registers6F_i_; -text: .text%__1cMPhaseChaitin2t6MIrnIPhaseCFG_rnHMatcher__v_; -text: .text%__1cOCompileWrapper2t6MpnHCompile__v_; -text: .text%__1cENodeGis_Mem6M_pnHMemNode__: cfgnode.o; -text: .text%__1cETypeKInitialize6FpnHCompile__v_; -text: .text%__1cIPhaseCFGKDominators6M_v_; -text: .text%__1cHCompileEInit6Mi_v_; -text: .text%__1cIPhaseCFGDDFS6MpnGTarjan__I_; -text: .text%__1cIPhaseCFGVschedule_pinned_nodes6MrnJVectorSet__v_; -text: .text%__1cIPhaseCFGOschedule_early6MrnJVectorSet_rnJNode_List_rnLBlock_Array__i_; -text: .text%__1cXPhaseAggressiveCoalesceGverify6M_v_: coalesce.o; -text: .text%__1cWNode_Backward_Iterator2t6MpnENode_rnJVectorSet_rnJNode_List_rnLBlock_Array__v_; -text: .text%__1cIPhaseCFGNschedule_late6MrnJVectorSet_rnJNode_List_rnNGrowableArray4CI___v_; -text: .text%__1cIPhaseCFGQGlobalCodeMotion6MrnHMatcher_IrnJNode_List__v_; -text: .text%__1cVExceptionHandlerTable2t6Mi_v_; -text: .text%__1cGTarjanIsetdepth6MI_v_; -text: .text%__1cHCompileICode_Gen6M_v_; -text: .text%__1cIPhaseCFGYEstimate_Block_Frequency6M_v_; -text: .text%__1cXPhaseAggressiveCoalesceNinsert_copies6MrnHMatcher__v_; -text: .text%__1cMPhaseChaitinbGstretch_base_pointer_live_ranges6MpnMResourceArea__i_; -text: .text%__1cNPhaseRegAllocTpd_preallocate_hook6M_v_; -text: .text%__1cQorI_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cYDebugInformationRecorder2t6MpnLOopRecorder__v_; -text: .text%__1cKNode_Array2t6MpnFArena__v_: matcher.o; -text: .text%__1cHMatcherUvalidate_null_checks6M_v_; -text: .text%__1cHMatcherPinit_spill_mask6MpnENode__v_; -text: .text%__1cHMatcherTFixup_Save_On_Entry6M_v_; -text: .text%__1cHMatcherVinit_first_stack_mask6M_v_; -text: .text%__1cHMatcherFmatch6M_v_; -text: .text%__1cHCompileOcompute_old_SP6M_nHOptoRegEName__; -text: .text%__1cHMatcher2t6MrnJNode_List__v_; -text: .text%__1cUDebugInfoWriteStream2t6MpnYDebugInformationRecorder_i_v_; -text: .text%__1cOleaPIdxOffNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cHMatcherLreturn_addr6kM_nHOptoRegEName__; -text: .text%__1cHCompilebBregister_library_intrinsics6M_v_; -text: .text%__1cMURShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cMPhaseChaitinRbuild_ifg_virtual6M_v_; -text: .text%__1cIAndLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJPhaseLive2t6MrknIPhaseCFG_rnILRG_List_pnFArena__v_; -text: .text%__1cIPhaseIFG2t6MpnFArena__v_; -text: .text%__1cMPhaseChaitinGde_ssa6M_v_; -text: .text%__1cFArenaNmove_contents6Mp0_1_; -text: .text%__1cNPhaseRegAlloc2t6MIrnIPhaseCFG_rnHMatcher_pF_v_v_; -text: .text%__1cFArena2t6MI_v_; -text: .text%__1cWsize_exception_handler6F_I_; -text: .text%__1cHCompileYinit_scratch_buffer_blob6M_v_; -text: .text%__1cOCompileWrapper2T6M_v_; -text: .text%__1cUPSAdaptiveSizePolicyZdecay_supplemental_growth6Mi_v_; -text: .text%__1cNPhasePeepholeMdo_transform6M_v_; -text: .text%__1cHCompileTframe_size_in_words6kM_i_; -text: .text%__1cNPhasePeephole2T6M_v_; -text: .text%__1cNPhasePeephole2t6MpnNPhaseRegAlloc_rnIPhaseCFG__v_; -text: .text%__1cLBlock_Array2t6MpnFArena__v_: buildOopMap.o; -text: .text%__1cHCompileMBuildOopMaps6M_v_; -text: .text%__1cWemit_exception_handler6FrnKCodeBuffer__v_; -text: .text%__1cLdo_liveness6FpnNPhaseRegAlloc_pnIPhaseCFG_pnKBlock_List_ipnFArena_pnEDict__v_: buildOopMap.o; -text: .text%__1cMPhaseChaitin2T6M_v_; -text: .text%__1cMPhaseChaitinbApost_allocate_copy_removal6M_v_; -text: .text%__1cIPhaseCFGLRemoveEmpty6M_v_; -text: .text%__1cNPhaseRegAllocPalloc_node_regs6Mi_v_; -text: .text%__1cMPhaseChaitinMfixup_spills6M_v_; -text: .text%__1cHCompileGOutput6M_v_; -text: .text%__1cHCompileQShorten_branches6MpnFLabel_ri333_v_; -text: .text%__1cHCompileLFill_buffer6M_v_; -text: .text%__1cHCompileTFillExceptionTables6MIpI1pnFLabel__v_; -text: .text%__1cHCompileRScheduleAndBundle6M_v_; -text: .text%__1cKCodeBufferOrelocate_stubs6M_v_; -text: .text%__1cUPSAdaptiveSizePolicybPeden_increment_with_supplement_aligned_up6MI_I_; -text: .text%__1cUPSAdaptiveSizePolicyOeden_increment6MII_I_; -text: .text%__1cOMachPrologNodeFreloc6kM_i_; -text: .text%__1cUPSAdaptiveSizePolicyVadjust_for_throughput6MipI1_v_; -text: .text%__1cWImplicitExceptionTableIset_size6MI_v_; -text: .text%__1cJPhaseLive2T6M_v_; -text: .text%__1cUPSAdaptiveSizePolicybDcompute_generation_free_space6MIIIIIIIi_v_; -text: .text%__1cIPSOldGenMmax_gen_size6M_I_: psOldGen.o; -text: .text%__1cUPSAdaptiveSizePolicybHclear_generation_free_space_flags6M_v_; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: loopnode.o; -text: .text%__1cUPSAdaptiveSizePolicyQdecaying_gc_cost6kM_d_; -text: .text%__1cHCompileYinit_scratch_locs_memory6M_v_; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: methodDataKlass.o; -text: .text%__1cRmethodDataOopDescbGcompute_allocation_size_in_words6FpnNmethodOopDesc__i_; -text: .text%__1cRmethodDataOopDescPpost_initialize6MpnOBytecodeStream__v_; -text: .text%__1cRmethodDataOopDescbGcompute_allocation_size_in_bytes6FpnNmethodOopDesc__i_; -text: .text%__1cRmethodDataOopDescKinitialize6MpnNmethodOopDesc__v_; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: methodDataOop.o; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: methodDataKlass.o; -text: .text%__1cNmulL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbDVM_ParallelGCFailedAllocationEname6kM_pkc_: vm_operations.o; -text: .text%__1cbDVM_ParallelGCFailedAllocationEdoit6M_v_; -text: .text%__1cKoopFactoryOnew_methodData6FnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: methodDataKlass.o; -text: .text%__1cKPSScavengeGinvoke6Fpi_v_; -text: .text%__1cUParallelScavengeHeapTfailed_mem_allocate6MpiIii_pnIHeapWord__; -text: .text%__1cUPSAdaptiveSizePolicyOshould_full_GC6MI_i_; -text: .text%__1cPmethodDataKlassIallocate6MnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cOcmpD_cc_P6NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cPCountedLoopNodeNstride_is_con6kM_i_: loopTransform.o; -text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cHRetNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateO_sub_Op_Return6MpknENode__v_; -text: .text%__1cLlog2_intptr6Fi_i_: divnode.o; -text: .text%__1cbLtransform_int_divide_to_long_multiply6FpnIPhaseGVN_pnENode_i_3_: divnode.o; -text: .text%__1cFStateM_sub_Op_ConL6MpknENode__v_; -text: .text%__1cSmembar_acquireNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cNcmovI_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cHRetNodeFreloc6kM_i_; -text: .text%__1cOClearArrayNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cIciObjectOis_method_data6M_i_: ciInstance.o; -text: .text%__1cIciObjectJis_method6M_i_: ciInstance.o; -text: .text%__1cNaddP_eRegNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cIConFNodeGOpcode6kM_i_; -text: .text%__1cLRuntimeStubHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cJCodeCacheNalive_nmethod6FpnICodeBlob__pnHnmethod__; -text: .text%__1cIGraphKitNallocate_heap6MpnENode_222pknITypeFunc_pC22ipknKTypeOopPtr__2_; -text: .text%__1cPciInstanceKlassbBcompute_shared_has_subklass6M_i_; -text: .text%__1cOLibraryCallKitNtry_to_inline6M_i_; -text: .text%__1cQLibraryIntrinsicIgenerate6MpnIJVMState__2_; -text: .text%__1cLRuntimeStubbIfollow_roots_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_iri_v_: codeBlob.o; -text: .text%__1cOcompP_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_CmpL6MpknENode__v_; -text: .text%__1cTInlineCallGeneratorJis_inline6kM_i_: library_call.o; -text: .text%__1cJAssemblerDjcc6Mn0AJCondition_pCnJrelocInfoJrelocType__v_; -text: .text%__1cPCountedLoopNodeDphi6kM_pnENode__: loopTransform.o; -text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; -text: .text%__1cLConvL2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cHBitDataKis_BitData6M_i_: ciMethodData.o; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; -text: .text%__1cRxorI_eReg_memNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNaddL_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNdivL_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNdivL_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cPshlI_eReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cGThreadOis_interrupted6Fp0i_i_; -text: .text%__1cSmembar_releaseNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNdecI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNandL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQshrI_eReg_CLNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNdecI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJLoadDNodeGOpcode6kM_i_; -text: .text%__1cMstoreSSINodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOPhaseIdealLoopOplace_near_use6kMpnENode__2_; -text: .text%__1cSInterpreterRuntimeOprofile_method6FpnKJavaThread_pC_i_; -text: .text%__1cOcmpD_cc_P6NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadLNodeFreloc6kM_i_; -text: .text%__1cENodeHis_AddP6M_pnIAddPNode__: multnode.o; -text: .text%__1cRxorI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLBoxLockNodeEhash6kM_I_: classes.o; -text: .text%__1cIAddLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cRaddI_eReg_memNodeFreloc6kM_i_; -text: .text%__1cENodeMis_CatchProj6kM_pknNCatchProjNode__: ad_i486_misc.o; -text: .text%__1cJlabelOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cNsubL_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulLNodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cIMulLNodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cTconvF2I_reg_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKNode_Array2t6MpnFArena__v_: loopopts.o; -text: .text%__1cXmembar_acquire_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmethodOopDescThas_native_function6kM_i_; -text: .text%__1cRxorI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateR_sub_Op_SafePoint6MpknENode__v_; -text: .text%__1cMciMethodDataStrap_recompiled_at6MpnLProfileData__i_; -text: .text%__1cSsafePoint_pollNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cSsafePoint_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSsafePoint_pollNodeFreloc6kM_i_; -text: .text%__1cFKlassPoop_is_instance6kM_i_: objArrayKlass.o; -text: .text%__1cPpoll_RelocationEtype6M_nJrelocInfoJrelocType__: codeBlob.o; -text: .text%__1cLOptoRuntimeRmultianewarray1_C6FpnMklassOopDesc_ipnKJavaThread__v_; -text: .text%__1cNmethodOopDescWis_vanilla_constructor6kM_i_; -text: .text%__1cKCodeBuffer2t6MpCi_v_; -text: .text%__1cNandI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSshlL_eReg_1_31NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeMis_SpillCopy6M_pnRMachSpillCopyNode__: memnode.o; -text: .text%__1cOmulIS_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cQsalI_eReg_CLNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOPhaseIdealLoopKclone_loop6MpnNIdealLoopTree_rnJNode_List_i_v_; -text: .text%__1cQsalL_eReg_CLNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cXroundDouble_mem_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cRandI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cKciTypeFlowFBlockQset_private_copy6Mi_v_; -text: .text%__1cLimmI_16OperJnum_edges6kM_I_: ad_i486_clone.o; -text: .text%__1cHi2sNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cHi2sNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRxorI_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvI2L_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cFStateL_sub_Op_OrI6MpknENode__v_; -text: .text%JVM_GetClassNameUTF; -text: .text%__1cSshrL_eReg_1_31NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cKStoreDNodeGOpcode6kM_i_; -text: .text%__1cNcmovP_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__: loopTransform.o; -text: .text%__1cIXorINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cOcmpD_cc_P6NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNmaxI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cFframeMpd_gc_epilog6M_v_; -text: .text%__1cRframe_gc_epilogue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_epilogue6M_v_; -text: .text%__1cRframe_gc_prologue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_prologue6M_v_; -text: .text%__1cHTypePtrEmake6FnETypeFTYPES_n0ADPTR_i_pk0_; -text: .text%__1cIAddLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_FindLoadedClass; -text: .text%__1cIMulFNodeGOpcode6kM_i_; -text: .text%__1cGThreadRis_Watcher_thread6kM_i_: vmThread.o; -text: .text%__1cCosJyield_all6Fi_v_; -text: .text%__1cNstoreImmINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJBytecodesRspecial_length_at6FpC_i_; -text: .text%__1cOstackSlotLOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cRaddI_eReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvI2DNodeGOpcode6kM_i_; -text: .text%__1cTcompareAndSwapLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSloadL_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUjmpLoopEnd_shortNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cUjmpLoopEnd_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMjniIdMapBaseHoops_do6MpnKOopClosure__v_; -text: .text%__1cNmodL_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEfrom6F_pnMRegisterImpl__; -text: .text%__1cIjniIdMapHoops_do6MpnKOopClosure__v_; -text: .text%__1cTDerivedPointerTableDadd6FppnHoopDesc_3_v_; -text: .text%__1cENodeIis_CMove6M_pnJCMoveNode__: classes.o; -text: .text%__1cPadd_derived_oop6FppnHoopDesc_2_v_: oopMap.o; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: loopnode.o; -text: .text%__1cKstoreCNodeFreloc6kM_i_; -text: .text%__1cKRegionNodeJideal_reg6kM_I_: loopnode.o; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: loopnode.o; -text: .text%__1cMincI_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeHis_Copy6kM_I_: loopnode.o; -text: .text%__1cXconvI2L_reg_reg_zexNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJOopMapSetMgrow_om_data6M_v_; -text: .text%__1cScompP_mem_eRegNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKReflectionGinvoke6FnTinstanceKlassHandle_nMmethodHandle_nGHandle_inOobjArrayHandle_nJBasicType_4ipnGThread__pnHoopDesc__; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_; -text: .text%__1cKReflectionDbox6FpnGjvalue_nJBasicType_pnGThread__pnHoopDesc__; -text: .text%__1cJAssemblerDret6Mi_v_; -text: .text%__1cTcmovII_reg_LEGTNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadCNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJAssemblerEcall6MrnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cLBoxLockNode2t6Mi_v_; -text: .text%__1cIGraphKitMnext_monitor6M_i_; -text: .text%__1cTshrL_eReg_32_63NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKklassKlassMoop_is_klass6kM_i_: objArrayKlassKlass.o; -text: .text%__1cLOptoRuntimebBcomplete_monitor_enter_Type6F_pknITypeFunc__; -text: .text%__1cMdecI_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIMaxINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFStateQ_sub_Op_FastLock6MpknENode__v_; -text: .text%__1cPcmpFastLockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIGraphKitLshared_lock6MpnENode__pnMFastLockNode__; -text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; -text: .text%__1cKciTypeFlowLStateVectorJdo_aaload6MpnQciByteCodeStream__v_; -text: .text%__1cNaddI_eRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cEUTF8Ounicode_length6Fpkc_i_; -text: .text%__1cPCallRuntimeNodeGOpcode6kM_i_; -text: .text%__1cFParseFBlockMadd_new_path6M_i_; -text: .text%__1cYcmpL_zero_flags_LEGTNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%JVM_FindClassFromClass; -text: .text%__1cOmangle_name_on6FpnMoutputStream_pnNsymbolOopDesc_ii_v_: nativeLookup.o; -text: .text%__1cIMulINodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cMdecI_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cPshlI_eReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; -text: .text%__1cNSignatureInfoIdo_float6M_v_: frame.o; -text: .text%JVM_NewInstanceFromConstructor; -text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_; -text: .text%__1cLConvI2LNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cNminI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cMorI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOmangle_name_on6FpnMoutputStream_pnNsymbolOopDesc__v_: nativeLookup.o; -text: .text%__1cNIdealLoopTreeMpolicy_align6kMpnOPhaseIdealLoop__i_; -text: .text%__1cNIdealLoopTreeNpolicy_unroll6kMpnOPhaseIdealLoop__i_; -text: .text%__1cNIdealLoopTreeSpolicy_range_check6kMpnOPhaseIdealLoop__i_; -text: .text%__1cNIdealLoopTreeQpolicy_peel_only6kMpnOPhaseIdealLoop__i_; -text: .text%__1cLloadSSFNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cMtlsLoadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYmulI_imm_RShift_highNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseFBlockNstack_type_at6kMi_pknEType__; -text: .text%__1cJAssemblerGmovzxw6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cFStateN_sub_Op_LoadB6MpknENode__v_; -text: .text%__1cIMulLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOMacroAssemblerSload_unsigned_word6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cKstoreBNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cZCallInterpreterDirectNodeSalignment_required6kM_i_: ad_i486_misc.o; -text: .text%__1cZCallInterpreterDirectNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNloadConL0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZCallInterpreterDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cTsarL_eReg_32_63NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; -text: .text%__1cLLShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMorI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYcmpL_zero_flags_EQdDNENodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cENodeIis_Start6M_pnJStartNode__: callnode.o; -text: .text%__1cNtestU_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cMURShiftLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cLMachUEPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cYcmpL_zero_flags_EQdDNENodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNobjArrayKlassQarray_klass_impl6MipnGThread__pnMklassOopDesc__; -text: .text%__1cWflagsReg_long_LTGEOperFclone6kM_pnIMachOper__; -text: .text%__1cIAddLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRsarI_eReg_immNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIJVMStateNmonitor_depth6kM_i_: graphKit.o; -text: .text%__1cWCallLeafNoFPDirectNodeKmethod_set6Mi_v_; -text: .text%__1cIregFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: objArrayKlassKlass.o; -text: .text%__1cHnmethodUnumber_of_dependents6kM_i_: nmethod.o; -text: .text%__1cNSingletonBlobIis_alive6kM_i_: codeBlob.o; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: node.o; -text: .text%lwp_mutex_init: os_solaris.o; -text: .text%__1cFParseLarray_store6MnJBasicType__v_; -text: .text%__1cLRShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLRethrowNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cPsarI_eReg_1NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKcmpOpUOperEless6kM_i_: ad_i486_clone.o; -text: .text%__1cFParseMdo_checkcast6M_v_; -text: .text%__1cMloadConDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOPhaseIdealLoopVclone_up_backedge_goo6MpnENode_22_2_; -text: .text%__1cbACallCompiledJavaDirectNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJStubQdDueueHrequest6Mi_pnEStub__; -text: .text%__1cJStubQdDueueGcommit6Mi_v_; -text: .text%__1cMLinkResolverbHlinktime_resolve_interface_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cNinstanceKlassVis_same_class_package6MpnHoopDesc_pnNsymbolOopDesc__i_; -text: .text%__1cENodeHdel_out6Mp0_v_: doCall.o; -text: .text%__1cPfieldDescriptorUstring_initial_value6kMpnGThread__pnHoopDesc__; -text: .text%__1cKRegionNodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%jni_NewString: jni.o; -text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__; -text: .text%__1cMincI_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cHTypePtrFempty6kM_i_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_i_v_; -text: .text%__1cTshrL_eReg_32_63NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cXmembar_acquire_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMMergeMemNodeIadr_type6kM_pknHTypePtr__: memnode.o; -text: .text%__1cITypeLongFwiden6kMpknEType__3_; -text: .text%__1cIplus_adr6FpnENode_i_1_: generateOptoStub.o; -text: .text%__1cIModINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cScompP_mem_eRegNodeFreloc6kM_i_; -text: .text%__1cKciTypeFlowLStateVectorMdo_checkcast6MpnQciByteCodeStream__v_; -text: .text%__1cNSignatureInfoIdo_short6M_v_: frame.o; -text: .text%__1cMadjust_check6FpnENode_11iipnMPhaseIterGVN__v_: ifnode.o; -text: .text%__1cNmaxI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNtestU_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateP_sub_Op_ConvI2L6MpknENode__v_; -text: .text%__1cNdivL_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cJScopeDescGsender6kM_p0_; -text: .text%__1cOcompiledVFrameGsender6kM_pnGvframe__; -text: .text%__1cOstackSlotIOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cQciTypeArrayKlassEmake6FnJBasicType__p0_; -text: .text%__1cLPhaseValuesKis_IterGVN6M_pnMPhaseIterGVN__: phaseX.o; -text: .text%__1cQsalI_eReg_CLNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cQciTypeArrayKlassJmake_impl6FnJBasicType__p0_; -text: .text%__1cJloadBNodeFreloc6kM_i_; -text: .text%__1cOcmpD_cc_P6NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOleaPIdxOffNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: methodKlass.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: methodKlass.o; -text: .text%__1cKJavaThreadJframes_do6MpFpnFframe_pknLRegisterMap__v_v_; -text: .text%__1cSmembar_acquireNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cKEntryPoint2t6MpC11111111_v_; -text: .text%__1cNRelocIteratorEnext6M_i_: compiledIC.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: constMethodKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: constMethodKlass.o; -text: .text%__1cQjava_lang_ThreadRget_thread_status6FpnHoopDesc__n0AMThreadStatus__; -text: .text%__1cRmulI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTtypeArrayKlassKlassIoop_size6kMpnHoopDesc__i_: typeArrayKlassKlass.o; -text: .text%__1cPstoreImmI16NodeFreloc6kM_i_; -text: .text%__1cFStateP_sub_Op_ConvL2I6MpknENode__v_; -text: .text%__1cLloadSSDNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cIXorINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cYcmpL_zero_flags_LEGTNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNcmovI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOmulIS_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cVloadConL_low_onlyNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsubI_eReg_memNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cKarrayKlassMoop_is_array6kM_i_: typeArrayKlass.o; -text: .text%__1cOcmpD_cc_P6NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNinstanceKlassPoop_is_instance6kM_i_: instanceRefKlass.o; -text: .text%__1cObox_handleNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadFNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cSmembar_acquireNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCompileBrokerNallocate_task6F_pnLCompileTask__; -text: .text%__1cNCompileBrokerTcreate_compile_task6FpnMCompileQdDueue_inMmethodHandle_i3ipkcii_pnLCompileTask__; -text: .text%__1cMCompileQdDueueDadd6MpnLCompileTask__v_; -text: .text%__1cLCompileTaskKinitialize6MinMmethodHandle_i1ipkcii_v_; -text: .text%jni_GetObjectClass: jni.o; -text: .text%__1cMCompileQdDueueDget6M_pnLCompileTask__; -text: .text%__1cSmembar_acquireNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLBoxLockNodeDcmp6kMrknENode__I_; -text: .text%__1cXmembar_acquire_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cPconvF2D_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cMincI_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cSCompileTaskWrapper2t6MpnLCompileTask__v_; -text: .text%__1cCosPhint_no_preempt6F_v_; -text: .text%__1cUGenericGrowableArrayNraw_appendAll6Mpk0_v_; -text: .text%__1cFStateM_sub_Op_MulL6MpknENode__v_; -text: .text%__1cOstackSlotFOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cLCompileTaskEfree6M_v_; -text: .text%__1cFciEnv2t6MpnHJNIEnv__iii_v_; -text: .text%__1cSCompileTaskWrapper2T6M_v_; -text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; -text: .text%__1cNCompileBrokerJfree_task6FpnLCompileTask__v_; -text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_; -text: .text%__1cNCompileBrokerVpush_jni_handle_block6F_v_; -text: .text%__1cTmembar_volatileNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cFciEnvWget_method_from_handle6MpnI_jobject__pnIciMethod__; -text: .text%__1cSshrL_eReg_1_31NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cFciEnv2T6M_v_; -text: .text%__1cNmodI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cNCompileBrokerUpop_jni_handle_block6F_v_; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: arrayKlass.o; -text: .text%__1cNaddP_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; -text: .text%__1cSstring_compareNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cRxorI_eReg_memNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cRxorI_eReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIimmFOperJconstantF6kM_f_: ad_i486_clone.o; -text: .text%__1cOcompP_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cOMacroAssemblerFalign6Mi_v_; -text: .text%__1cOstackSlotPOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cObox_handleNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOstackSlotPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLCodeletMark2t6MrpnZInterpreterMacroAssembler_pkcinJBytecodesECode__v_: interpreter.o; -text: .text%__1cSInterpreterCodeletKinitialize6MpkcinJBytecodesECode__v_; -text: .text%__1cNandI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cLloadSSFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmodL_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cQmulD_reg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIMinINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cNandI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cITemplateIgenerate6MpnZInterpreterMacroAssembler__v_; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_and_dispatch6MpnITemplate_nITosState__v_; -text: .text%__1cITemplateKinitialize6MinITosState_1pFi_vi_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; -text: .text%JVM_FindClassFromClassLoader; -text: .text%JVM_FindClassFromBootLoader; -text: .text%__1cPshrI_eReg_1NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cHi2bNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cMmatch_option6FpknMJavaVMOption_pkcp4_i_: arguments.o; -text: .text%__1cNnegI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSstring_compareNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOPhaseTransform2t6MpnFArena_nFPhaseLPhaseNumber__v_; -text: .text%__1cHCompileKinit_start6MpnJStartNode__v_; -text: .text%__1cMstoreSSINodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cLPhaseValues2t6MpnFArena_I_v_; -text: .text%__1cINodeHash2t6MpnFArena_I_v_; -text: .text%__1cINodeHashIround_up6FI_I_; -text: .text%__1cbACallCompiledJavaDirectNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKScopeValueJread_from6FpnTDebugInfoReadStream__p0_; -text: .text%JVM_IHashCode; -text: .text%lwp_cond_init: os_solaris.o; -text: .text%__1cNCollectedHeapMobj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: jvm.o; -text: .text%__1cIVMThreadMis_VM_thread6kM_i_: vmThread.o; -text: .text%__1cOcompiledVFrameScreate_stack_value6kMpnKScopeValue__pnKStackValue__; -text: .text%__1cGThreadOis_Java_thread6kM_i_: vmThread.o; -text: .text%__1cKstoreBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorCto6F_pnMRegisterImpl__; -text: .text%__1cKDictionarybAis_valid_protection_domain6MiInMsymbolHandle_nGHandle_2_i_; -text: .text%__1cPconvI2L_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLStrCompNodeKmatch_edge6kMI_I_; -text: .text%__1cZInterpreterMacroAssemblerEpush6MnITosState__v_; -text: .text%__1cRtestI_reg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIMachNodeJis_MachIf6kM_pknKMachIfNode__: ad_i486_misc.o; -text: .text%__1cNmaxI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_AddL6MpknENode__v_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_i_v_; -text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cXroundDouble_mem_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cFVTuneNregister_stub6FpkcpC3_v_; -text: .text%__1cENodeEgetd6kM_d_; -text: .text%__1cNSignatureInfoHdo_char6M_v_: frame.o; -text: .text%__1cMstoreSSPNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cGEventsDlog6FpkcE_v_: nmethod.o; -text: .text%__1cFStateM_sub_Op_AndL6MpknENode__v_; -text: .text%__1cKConv2BNodeGOpcode6kM_i_; -text: .text%__1cJBytecodesDdef6Fn0AECode_pkc33nJBasicType_ii1i_v_; -text: .text%JVM_GetClassLoader; -text: .text%__1cRmulI_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cbCAbstractInterpreterGeneratorQset_entry_points6MnJBytecodesECode__v_; -text: .text%__1cbCAbstractInterpreterGeneratorWset_short_entry_points6MpnITemplate_rpC44444444_v_; -text: .text%__1cOjmpLoopEndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateW_sub_Op_CountedLoopEnd6MpknENode__v_; -text: .text%__1cXconvI2L_reg_reg_zexNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMinINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cSCompareAndSwapNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKBinaryNodeGOpcode6kM_i_; -text: .text%__1cUmembar_cpu_orderNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsalL_eReg_CLNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNSCMemProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFStateW_sub_Op_MemBarCPUOrder6MpknENode__v_; -text: .text%__1cFStateO_sub_Op_Binary6MpknENode__v_; -text: .text%__1cNSignatureInfoIdo_float6M_v_: bytecode.o; -text: .text%__1cOMacroAssemblerMcall_VM_base6MpnMRegisterImpl_22pCii_v_; -text: .text%__1cZInterpreterMacroAssemblerZcheck_and_handle_popframe6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableKtransition6FnITosState_1_v_; -text: .text%__1cPClassFileParserbGparse_constant_pool_double_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cRaddI_eReg_memNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadDNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cSleaP_eReg_immINodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOjmpLoopEndNodeOis_pc_relative6kM_i_: ad_i486_misc.o; -text: .text%__1cOjmpLoopEndNodeTmay_be_short_branch6kM_i_: ad_i486_misc.o; -text: .text%__1cIModINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cRmulI_eReg_immNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cKNativeJumpbEcheck_verified_entry_alignment6FpC1_v_; -text: .text%__1cTbasictype2arraycopy6FnJBasicType_i_pC_; -text: .text%__1cFStateU_sub_Op_CallLeafNoFP6MpknENode__v_; -text: .text%__1cZInterpreterMacroAssemblerMcall_VM_base6MpnMRegisterImpl_22pCii_v_; -text: .text%__1cLOptoRuntimeOarraycopy_Type6F_pknITypeFunc__; -text: .text%__1cMMachCallNodeXreturns_float_or_double6kM_i_; -text: .text%__1cOLibraryCallKitQinline_arraycopy6M_i_; -text: .text%__1cOMacroAssemblerOcall_VM_helper6MpnMRegisterImpl_pCii_v_; -text: .text%__1cWCallLeafNoFPDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTcmovII_reg_LTGENodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cbACallCompiledJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_: compiledIC.o; -text: .text%__1cNLocationValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cILocation2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cUCompressedReadStreamIread_int6M_i_: location.o; -text: .text%__1cNLocationValueLis_location6kM_i_: debugInfo.o; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_2_v_; -text: .text%__1cFParseRarray_store_check6M_v_; -text: .text%__1cQshrI_eReg_CLNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNCompileBrokerTis_compile_blocking6FnMmethodHandle_i_i_; -text: .text%__1cNCompileBrokerRassign_compile_id6FnMmethodHandle_i_I_; -text: .text%__1cNCompileBrokerZcompilation_is_prohibited6FnMmethodHandle_i_i_; -text: .text%__1cNCompileBrokerTis_not_compile_only6FnMmethodHandle__i_; -text: .text%__1cNsubL_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cQsalL_eReg_CLNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_prolog6MnITosState_i_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_epilog6MnITosState_i_v_; -text: .text%__1cFKlassMoop_is_klass6kM_i_: constMethodKlass.o; -text: .text%__1cFMutex2t6Mipkci_v_; -text: .text%__1cJAssemblerLemit_farith6Miii_v_; -text: .text%__1cIciMethodJhas_loops6kM_i_; -text: .text%__1cRtestI_reg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJStartNodeJideal_reg6kM_I_: callnode.o; -text: .text%__1cNCompileBrokerQset_last_compile6FpnOCompilerThread_nMmethodHandle_ii_v_; -text: .text%__1cNCompileBrokerOcheck_break_at6FnMmethodHandle_iii_i_; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: callnode.o; -text: .text%__1cJStartNodeScalling_convention6kMpnLRegPair_I_v_; -text: .text%__1cKC2CompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; -text: .text%__1cNSignatureInfoIdo_short6M_v_: bytecode.o; -text: .text%__1cOCompiledRFrameKtop_method6kM_nMmethodHandle__: rframe.o; -text: .text%__1cOCompiledRFrameLis_compiled6kM_i_: rframe.o; -text: .text%__1cICodeBlobPis_runtime_stub6kM_i_: nmethod.o; -text: .text%__1cNminI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOCompiledRFrame2t6MnFframe_pnKJavaThread_kpnGRFrame__v_; -text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_; -text: .text%__1cMelapsedTimerDadd6M0_v_; -text: .text%__1cSmembar_releaseNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFciEnvPregister_method6MpnIciMethod_iiiiiipnKCodeBuffer_ipnJOopMapSet_pnVExceptionHandlerTable_pnWImplicitExceptionTable_pnTExceptionRangeTable_pnQAbstractCompiler_ii_v_; -text: .text%__1cFciEnvbOcheck_for_system_dictionary_modification6MpnIciMethod__v_; -text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTimer_pnLCompileTask__v_; -text: .text%__1cFciEnvbUsystem_dictionary_modification_counter_changed6M_i_; -text: .text%__1cLConvI2FNodeGOpcode6kM_i_; -text: .text%__1cIciMethodQbreak_at_execute6M_i_; -text: .text%__1cQComputeCallStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cICodeHeapMinsert_after6MpnJFreeBlock_2_v_; -text: .text%__1cHnmFlagsFclear6M_v_; -text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; -text: .text%__1cHnmethodSresolve_JNIHandles6M_v_; -text: .text%__1cVExceptionHandlerTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cHnmethod2t6MpnNmethodOopDesc_iiiiiiipnYDebugInformationRecorder_pnKCodeBuffer_ipnJOopMapSet_pnVExceptionHandlerTable_pnWImplicitExceptionTable_pnTExceptionRangeTable_pnQAbstractCompiler__v_; -text: .text%__1cHnmethod2n6FIi_pv_; -text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cHnmethodLnew_nmethod6FnMmethodHandle_iiiiiipnYDebugInformationRecorder_pnKCodeBuffer_ipnJOopMapSet_pnVExceptionHandlerTable_pnWImplicitExceptionTable_pnTExceptionRangeTable_pnQAbstractCompiler__p0_; -text: .text%__1cFVTuneOcreate_nmethod6FpnHnmethod__v_; -text: .text%__1cLPcDescCache2t6M_v_; -text: .text%__1cFciEnvbFpost_compiled_method_load_event6MpnHnmethod__v_; -text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; -text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cICodeBlobJcopy_oops6MppnI_jobject_i_v_; -text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cTcmovII_reg_LEGTNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cLOopRecorderHcopy_to6MpnICodeBlob__v_; -text: .text%__1cZCallDynamicJavaDirectNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cLOptoRuntimeInew_Type6F_pknITypeFunc__; -text: .text%__1cQorI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKExceptionsNnew_exception6FpnGThread_nMsymbolHandle_3pnRJavaCallArguments_nGHandle_6_6_; -text: .text%__1cNsubL_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRxorI_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cIGraphKitMnew_instance6MpnPciInstanceKlass__pnENode__; -text: .text%__1cHCompileUremove_useless_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cIciMethodRbuild_method_data6MnMmethodHandle__v_; -text: .text%__1cHCompile2t6MpnFciEnv_pnKC2Compiler_pnIciMethod_ii_v_; -text: .text%__1cHCompileWprint_compile_messages6M_v_; -text: .text%__1cQUnique_Node_ListUremove_useless_nodes6MrnJVectorSet__v_; -text: .text%__1cHCompileVidentify_useful_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cINodeHashUremove_useless_nodes6MrnJVectorSet__v_; -text: .text%__1cSPhaseRemoveUseless2t6MpnIPhaseGVN_pnQUnique_Node_List__v_; -text: .text%__1cIciMethodRbuild_method_data6M_v_; -text: .text%__1cHCompileLInline_Warm6M_i_; -text: .text%__1cMPhaseIterGVN2t6MpnIPhaseGVN__v_; -text: .text%__1cKloadUBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIPhaseCCP2t6MpnMPhaseIterGVN__v_; -text: .text%__1cHCompileRbuild_start_state6MpnJStartNode_pknITypeFunc__pnIJVMState__; -text: .text%__1cIPhaseCCP2T6M_v_; -text: .text%__1cIPhaseCCPHanalyze6M_v_; -text: .text%__1cIPhaseCCPMdo_transform6M_v_; -text: .text%__1cHCompileNreturn_values6MpnIJVMState__v_; -text: .text%__1cKInlineTreeWbuild_inline_tree_root6F_p0_; -text: .text%__1cHCompileVfinal_graph_reshaping6M_i_; -text: .text%__1cbAfinal_graph_reshaping_walk6FrnKNode_Stack_pnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cIPhaseCCPJtransform6MpnENode__2_; -text: .text%__1cHCompileLFinish_Warm6M_v_; -text: .text%__1cMPhaseIterGVN2t6Mp0_v_; -text: .text%__1cJStartNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cHCompileIOptimize6M_v_; -text: .text%__1cXMachCallInterpreterNodePret_addr_offset6M_i_; -text: .text%__1cZCallInterpreterDirectNodePcompute_padding6kMi_i_; -text: .text%__1cQComputeCallStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cZCallInterpreterDirectNodeKmethod_set6Mi_v_; -text: .text%__1cTsarL_eReg_32_63NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cOMachEpilogNodeQsafepoint_offset6kM_i_; -text: .text%__1cWpoll_return_RelocationEtype6M_nJrelocInfoJrelocType__: codeBlob.o; -text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; -text: .text%__1cQComputeCallStackJdo_double6M_v_: generateOopMap.o; -text: .text%__1cICallInfoDset6MnLKlassHandle_1nMmethodHandle_2pnGThread__v_; -text: .text%__1cMLinkResolverWresolve_interface_call6FrnICallInfo_nGHandle_nLKlassHandle_4nMsymbolHandle_54iipnGThread__v_; -text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverbGruntime_resolve_interface_method6FrnICallInfo_nMmethodHandle_nLKlassHandle_nGHandle_4ipnGThread__v_; -text: .text%__1cKcmpOpUOperKless_equal6kM_i_: ad_i486_clone.o; -text: .text%__1cRaddL_eReg_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNmethodOopDescIset_code6MpnHnmethod__v_; -text: .text%__1cJAssemblerEincl6MpnMRegisterImpl__v_; -text: .text%__1cIDivINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKTypeRawPtrFxdual6kM_pknEType__; -text: .text%__1cMTailCallNodeGOpcode6kM_i_; -text: .text%__1cJBytecodesDdef6Fn0AECode_pkc33nJBasicType_iii_v_; -text: .text%__1cMstoreSSPNodeHis_Copy6kM_I_: ad_i486_misc.o; -text: .text%__1cZCallDynamicJavaDirectNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_EQdDNENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cISubLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNobjArrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_; -text: .text%__1cSInterpreterRuntimeTprepare_native_call6FpnKJavaThread_pnNmethodOopDesc__v_; -text: .text%__1cXSignatureHandlerLibraryKinitialize6F_v_; -text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_; -text: .text%__1cNGrowableArray4CX_Efind6kMkX_i_: interpreterRuntime.o; -text: .text%__1cNFingerprinterLfingerprint6M_X_: interpreterRuntime.o; -text: .text%__1cGEventsDlog6FpkcE_v_: exceptions.o; -text: .text%__1cIAddFNodeGOpcode6kM_i_; -text: .text%__1cRaddL_eReg_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJAssemblerFffree6Mi_v_; -text: .text%__1cGThreadVset_pending_exception6MpnHoopDesc_pkci_v_; -text: .text%__1cKExceptionsRspecial_exception6FpnGThread_pkcinGHandle__i_; -text: .text%__1cKExceptionsG_throw6FpnGThread_pkcinGHandle__v_; -text: .text%__1cSstring_compareNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__; -text: .text%__1cJloadDNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cOGenerateOopMapIppop_any6Mi_v_; -text: .text%__1cXroundDouble_mem_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJStartNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSshlL_eReg_1_31NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cKPerfMemoryMmark_updated6F_v_; -text: .text%__1cKPerfMemoryFalloc6FI_pc_; -text: .text%__1cPPerfDataManagerIadd_item6FpnIPerfData_i_v_; -text: .text%__1cIPerfDataMcreate_entry6MnJBasicType_II_v_; -text: .text%__1cIPerfData2T6M_v_; -text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_; -text: .text%__1cSobjArrayKlassKlassXallocate_objArray_klass6MinLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cFStateM_sub_Op_XorI6MpknENode__v_; -text: .text%__1cCosLelapsedTime6F_d_; -text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: parse1.o; -text: .text%jni_GetStringUTFChars: jni.o; -text: .text%jni_ReleaseStringUTFChars; -text: .text%__1cTconvD2I_reg_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNmulI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cObox_handleNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNmethodOopDescWcompute_has_loops_flag6M_i_; -text: .text%__1cNloadConI0NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; -text: .text%__1cXcmpL_reg_flags_LEGTNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOClearArrayNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_IsInterrupted; -text: .text%__1cJStoreNodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%__1cSmembar_releaseNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKExceptionsRspecial_exception6FpnGThread_pkcinMsymbolHandle_4_i_; -text: .text%__1cSInterpreterRuntimeNquicken_io_cc6FpnKJavaThread__v_; -text: .text%__1cNSignatureInfoHdo_char6M_v_: bytecode.o; -text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_; -text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_; -text: .text%__1cLOptoRuntimeSnew_typeArray_Type6F_pknITypeFunc__; -text: .text%__1cNdivL_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_FindLibraryEntry; -text: .text%__1cPCountedLoopNodeGstride6kM_pnENode__: loopTransform.o; -text: .text%__1cIGraphKitJnew_array6MpnENode_nJBasicType_pknEType_pknMTypeKlassPtr__2_; -text: .text%__1cSleaP_eReg_immINodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cWConstantPoolCacheEntrySset_interface_call6MnMmethodHandle_i_v_; -text: .text%__1cLklassItableUcompute_itable_index6FpnNmethodOopDesc__i_; -text: .text%__1cLlog2_intptr6Fi_i_: graphKit.o; -text: .text%__1cQSystemDictionaryPresolve_or_fail6FnMsymbolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cJloadCNodeFreloc6kM_i_; -text: .text%__1cFStateN_sub_Op_LoadC6MpknENode__v_; -text: .text%__1cLLShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJloadDNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_; -text: .text%__1cTcmovII_reg_LEGTNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cQmulD_reg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cTcmovII_reg_LEGTNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cFParsebLincrement_and_test_invocation_counter6Mi_v_; -text: .text%__1cMTypeKlassPtrRcast_to_exactness6kMi_pknEType__; -text: .text%__1cQsalI_eReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPconvI2F_SSFNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cSshrL_eReg_1_31NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJleaP8NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cObox_handleNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_LTGENodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNcmpL_LTGENodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cbFunnecessary_membar_volatileNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNcmpL_LTGENodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cFParsePmerge_exception6Mi_v_; -text: .text%__1cSaddF24_reg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cOPhaseIdealLoopJdo_unroll6MpnNIdealLoopTree_rnJNode_List_i_v_; -text: .text%__1cFStateS_sub_Op_ClearArray6MpknENode__v_; -text: .text%__1cMrep_stosNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMrep_stosNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOcompI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFTypeFEmake6Ff_pk0_; -text: .text%__1cKstoreLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; -text: .text%__1cIDivINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cPmethodDataKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cLStrCompNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_: jni.o; -text: .text%__1cNtestP_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectMset_override6FpnHoopDesc_C_v_; -text: .text%__1cSstring_compareNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cHMatcherOc_return_value6Fii_nLRegPair__; -text: .text%__1cRandL_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIDivLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSleaP_eReg_immINodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: cpCacheKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: cpCacheKlass.o; -text: .text%__1cHi2bNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cHCompile2t6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cOPhaseIdealLoopOadd_constraint6MiipnENode_22p23_v_; -text: .text%__1cKcmpOpUOperHgreater6kM_i_: ad_i486_clone.o; -text: .text%__1cFciEnvZcall_has_multiple_targets6FpnNinstanceKlass_nMsymbolHandle_3ri_i_; -text: .text%__1cRtestI_reg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cMmulD_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMNativeLookupGlookup6FnMmethodHandle_ripnGThread__pC_; -text: .text%__1cJCMoveNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%jni_SetByteArrayRegion: jni.o; -text: .text%__1cENodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%__1cUjmpLoopEnd_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cJloadFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOjmpLoopEndNodeUshort_branch_version6M_pnIMachNode__; -text: .text%__1cKarrayKlassKjava_super6kM_pnMklassOopDesc__; -text: .text%__1cUjmpLoopEnd_shortNodeJis_Branch6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvF2D_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cUjmpLoopEnd_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHi2bNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQPSIsAliveClosureLdo_object_b6MpnHoopDesc__i_: psScavenge.o; -text: .text%__1cFStateO_sub_Op_StoreL6MpknENode__v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cFParseLdo_newarray6MnJBasicType__v_; -text: .text%__1cENodeFis_If6M_pnGIfNode__: ad_i486_misc.o; -text: .text%__1cSsafePoint_pollNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreLNodeFreloc6kM_i_; -text: .text%__1cENodeHdel_out6Mp0_v_: divnode.o; -text: .text%__1cGThreadLnmethods_do6M_v_; -text: .text%__1cSsafePoint_pollNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cQorI_eReg_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cRsubI_eReg_memNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cSReferenceProcessorZadd_to_discovered_list_mt6MppnHoopDesc_23_v_; -text: .text%__1cPRoundDoubleNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cCosTnative_java_library6F_pv_; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2ipnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cMloadConFNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cQjava_lang_StringFvalue6FpnHoopDesc__pnQtypeArrayOopDesc__; -text: .text%__1cQjava_lang_StringGoffset6FpnHoopDesc__i_; -text: .text%__1cIModLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cScompP_eReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; -text: .text%__1cWflagsReg_long_EQdDNEOperFclone6kM_pnIMachOper__; -text: .text%__1cWflagsReg_long_LEGTOperFclone6kM_pnIMachOper__; -text: .text%__1cTcmovII_reg_EQdDNENodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_; -text: .text%__1cMNativeLookupMlookup_style6FnMmethodHandle_pcpkciiripnGThread__pC_; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: methodKlass.o; -text: .text%__1cLServiceUtilLvisible_oop6FpnHoopDesc__i_: objectMonitor_solaris.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: methodKlass.o; -text: .text%__1cRmulI_eReg_immNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; -text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_; -text: .text%__1cRandI_eReg_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cVlookup_special_native6Fpc_pC_: nativeLookup.o; -text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__: ciObjArrayKlass.o; -text: .text%__1cRandI_eReg_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPDictionaryEntryVadd_protection_domain6MpnHoopDesc__v_; -text: .text%__1cRmulI_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cTsarL_eReg_32_63NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cRxorI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cPshrI_eReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__; -text: .text%__1cRxorI_eReg_memNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_; -text: .text%__1cJMarkSweepMfollow_stack6F_v_; -text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cMloadConFNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cLregDPR1OperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cLregDPR1OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMNativeLookupLlookup_base6FnMmethodHandle_ripnGThread__pC_; -text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; -text: .text%__1cJAssemblerSemit_arith_operand6MipnMRegisterImpl_nHAddress_i_v_; -text: .text%__1cISubLNodeDsub6kMpknEType_3_3_; -text: .text%__1cMNativeLookupNpure_jni_name6FnMmethodHandle__pc_; -text: .text%JVM_GetMethodIxExceptionTableEntry; -text: .text%__1cMciArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cMnegD_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMstoreSSINodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cSTailCalljmpIndNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cRcmpOp_commuteOperFclone6kM_pnIMachOper__; -text: .text%__1cJLoadINodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cScompU_eReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJAssemblerGfstp_d6MnHAddress__v_; -text: .text%__1cKciTypeFlowLStateVectorEtrap6MpnQciByteCodeStream_pnHciKlass_i_v_; -text: .text%__1cOmulF24_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cQleaPIdxScaleNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRtestI_reg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPfieldDescriptorSlong_initial_value6kM_x_; -text: .text%__1cRsubI_eReg_memNodeFreloc6kM_i_; -text: .text%__1cKstoreBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJLoadPNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cCosHSolarisFEventEpark6M_v_: objectMonitor_solaris.o; -text: .text%__1cKJavaThreadLnmethods_do6M_v_; -text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cXvirtual_call_RelocationJpack_data6M_i_; -text: .text%__1cNcmovI_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cZCallDynamicJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZCallDynamicJavaDirectNodeSalignment_required6kM_i_: ad_i486_misc.o; -text: .text%__1cRaddL_eReg_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cLMachUEPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNObjectMonitorREntryQdDueue_insert6MpnMObjectWaiter_i_v_; -text: .text%__1cQorI_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_; -text: .text%__1cPClassFileParserbFparse_constant_pool_float_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cbFunnecessary_membar_volatileNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNstoreImmINodeFreloc6kM_i_; -text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNobjArrayKlassZcan_be_primary_super_slow6kM_i_; -text: .text%__1cNObjectMonitorbAEntryQdDueue_SelectSuccessor6M_pnMObjectWaiter__; -text: .text%__1cRsarI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRsarI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_: objArrayKlass.o; -text: .text%__1cKstoreDNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cWCallLeafNoFPDirectNodeFreloc6kM_i_; -text: .text%__1cLlog2_intptr6Fi_i_: objArrayKlassKlass.o; -text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlass.o; -text: .text%jni_GetStringCritical: jni.o; -text: .text%jni_ReleaseStringCritical: jni.o; -text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cPsarI_eReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOaddF24_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvI2D_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cPsarI_eReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICallNodeRis_CallStaticJava6kM_pknSCallStaticJavaNode__: callnode.o; -text: .text%__1cbACallCompiledJavaDirectNodeKmethod_set6Mi_v_; -text: .text%__1cODeoptimizationYtrap_state_is_recompiled6Fi_i_; -text: .text%__1cPconvF2D_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cYMachCallCompiledJavaNodePret_addr_offset6M_i_; -text: .text%__1cNdivI_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; -text: .text%__1cRaddL_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cSInterpreterRuntimeTnmethod_entry_point6FpnKJavaThread_pnNmethodOopDesc_pnHnmethod__pC_; -text: .text%__1cRandL_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cHnmethodXinterpreter_entry_point6M_pC_; -text: .text%__1cFTypeDJsingleton6kM_i_; -text: .text%__1cHCompileSrethrow_exceptions6MpnIJVMState__v_; -text: .text%__1cLRethrowNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNSignatureInfoHdo_byte6M_v_: frame.o; -text: .text%__1cIGraphKitbKcombine_and_pop_all_exception_states6M_pnNSafePointNode__: parse1.o; -text: .text%__1cKklassKlassMoop_is_klass6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cQshrL_eReg_CLNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cURethrowExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOstackSlotIOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cMmulD_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJloadDNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cFStateP_sub_Op_Rethrow6MpknENode__v_; -text: .text%__1cOstackSlotIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLRethrowNode2t6MpnENode_22222_v_; -text: .text%__1cFTypeDFxmeet6kMpknEType__3_; -text: .text%__1cHOrINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cKloadUBNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cTcmovII_reg_LEGTNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNsubI_eRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cZget_mirror_from_signature6FnMmethodHandle_pnPSignatureStream_pnGThread__pnHoopDesc__; -text: .text%__1cNaddP_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cURethrowExceptionNodeFreloc6kM_i_; -text: .text%__1cKJavaThreadbScheck_safepoint_and_suspend_for_native_trans6Fp0_v_; -text: .text%__1cQorI_eReg_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cRaddL_eReg_memNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cLRShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cHMonitor2t6Mipkci_v_; -text: .text%__1cQshrI_eReg_CLNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cJAssemblerEshll6MpnMRegisterImpl_i_v_; -text: .text%__1cKJavaThreadLgc_prologue6M_v_; -text: .text%__1cRaddL_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOMacroAssemblerKverify_oop6MpnMRegisterImpl_pkc_v_; -text: .text%__1cLloadSSDNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cPconvI2F_SSFNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cFParseTprofile_switch_case6Mi_v_; -text: .text%__1cKJavaThreadLgc_epilogue6M_v_; -text: .text%__1cFParseOmerge_new_path6Mi_v_; -text: .text%__1cFParseSjump_switch_ranges6MpnENode_pnLSwitchRange_4i_v_; -text: .text%__1cTCallDynamicJavaNodeSis_CallDynamicJava6kM_pk0_: callnode.o; -text: .text%__1cNxorI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%jni_NewByteArray: jni.o; -text: .text%__1cNmulL_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cENodeHis_Loop6M_pnILoopNode__: cfgnode.o; -text: .text%__1cMstoreSSINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMloadConPNodeGis_Con6kM_I_: ad_i486_misc.o; -text: .text%__1cNmethodOopDescLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; -text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__; -text: .text%__1cNcmovP_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKReflectionTget_exception_types6FnMmethodHandle_pnGThread__nOobjArrayHandle__; -text: .text%__1cNmethodOopDescVparameter_annotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cNinstanceKlassQmethod_index_for6kMpnNmethodOopDesc_pnGThread__i_; -text: .text%__1cQorI_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cOstackSlotDOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLloadSSDNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cMstoreSSPNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cOstackSlotDOperJnum_edges6kM_I_: ad_i486.o; -text: .text%__1cMstoreSSINodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cFMutexbLwait_for_lock_blocking_implementation6MpnKJavaThread__v_; -text: .text%__1cHnmethodbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cRxorI_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOleaPIdxOffNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRaddL_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFframeZinterpreter_frame_set_mdx6Mi_v_; -text: .text%__1cSObjectSynchronizerHinflate6FpnHoopDesc__pnNObjectMonitor__; -text: .text%__1cPstoreImmI16NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOcmpD_cc_P6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTshrL_eReg_32_63NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRandI_eReg_memNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cRandI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cENodeMis_SafePoint6M_pnNSafePointNode__: loopnode.o; -text: .text%__1cNObjectMonitorHRecycle6M_v_; -text: .text%__1cRandI_eReg_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNandL_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cFBlockNset_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; -text: .text%__1cTcmovII_reg_LTGENodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cSleaP_eReg_immINodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadSNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOtypeArrayKlassOmulti_allocate6MipiipnGThread__pnHoopDesc__; -text: .text%__1cPregister_native6FnLKlassHandle_nMsymbolHandle_1pCpnGThread__i_: jni.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEmove6Mii_v_; -text: .text%__1cNcmovI_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cENode2t6Mp0111111_v_; -text: .text%__1cFStateP_sub_Op_RShiftL6MpknENode__v_; -text: .text%__1cMloadConLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIAddDNodeGOpcode6kM_i_; -text: .text%__1cNmodL_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cTconvD2I_reg_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNCollectedHeapYcommon_mem_allocate_init6FIipnGThread__pnIHeapWord__: arrayKlass.o; -text: .text%__1cFParseQjump_if_fork_int6MpnENode_2nIBoolTestEmask__pnGIfNode__; -text: .text%__1cOcompP_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXis_positive_zero_double6Fd_i_; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: arrayKlass.o; -text: .text%__1cNmaxI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: arrayKlass.o; -text: .text%__1cKstorePNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFKlassMoop_is_array6kM_i_: methodDataKlass.o; -text: .text%__1cNmulI_eRegNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cRxorI_eReg_memNodeFreloc6kM_i_; -text: .text%__1cFKlassPoop_is_instance6kM_i_: methodDataKlass.o; -text: .text%__1cHTypeAryFxdual6kM_pknEType__; -text: .text%__1cOMethodLivenessKBasicBlockFsplit6Mi_p1_; -text: .text%__1cLloadSSFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVLoaderConstraintTableWfind_constrained_klass6MnMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cTcmovII_reg_LTGENodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cOrepush_if_args6FpnFParse_pnENode_3_v_: parse2.o; -text: .text%__1cNaddL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOstackSlotFOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cTcmovII_reg_LTGENodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOstackSlotFOperFscale6kM_i_: ad_i486.o; -text: .text%__1cSshlL_eReg_1_31NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOstackSlotFOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cJAssemblerGpushad6M_v_; -text: .text%JVM_GetCallerClass; -text: .text%__1cNSignatureInfoHdo_byte6M_v_: bytecode.o; -text: .text%__1cIMaxINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cQorI_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cOGenerateOopMapXdo_return_monitor_check6M_v_; -text: .text%__1cQsalL_eReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKciTypeFlowOsplit_range_at6Mi_pn0AFRange__; -text: .text%__1cPshrI_eReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMsubD_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%jni_GetFieldID: jni.o; -text: .text%jni_IsAssignableFrom: jni.o; -text: .text%__1cISubLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNnegI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNnegI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cSobjArrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cFParseXfetch_interpreter_state6MipknEType_pnENode__5_; -text: .text%__1cFParseWcheck_interpreter_type6MpnENode_pknEType_rpnNSafePointNode__2_; -text: .text%__1cJAssemblerEaddl6MnHAddress_i_v_; -text: .text%__1cQmulD_reg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cTsarL_eReg_32_63NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOstackSlotDOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cJAssemblerGfstp_s6MnHAddress__v_; -text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cXroundDouble_mem_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cLloadSSDNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cQsalI_eReg_CLNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cKCMovePNodeGOpcode6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerbAget_cache_and_index_at_bcp6MpnMRegisterImpl_2i_v_; -text: .text%__1cNmodI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRcmpOp_commuteOperFccode6kM_i_: ad_i486_clone.o; -text: .text%__1cJloadDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSCountedLoopEndNode2t6MpnENode_2ff_v_; -text: .text%__1cPCountedLoopNode2t6MpnENode_2_v_; -text: .text%__1cNcmovP_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNdivI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pCi_v_; -text: .text%__1cKExceptionsNnew_exception6FpnGThread_nMsymbolHandle_pkcnGHandle_6_6_; -text: .text%__1cNSCMemProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOmulF24_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cFStateX_sub_Op_CompareAndSwapL6MpknENode__v_; -text: .text%__1cSloadL_volatileNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNtestU_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTCompareAndSwapLNode2t6MpnENode_2222_v_; -text: .text%__1cSCompareAndSwapNode2t6MpnENode_2222_v_; -text: .text%__1cOLibraryCallKitRinline_unsafe_CAS6MnJBasicType__i_; -text: .text%__1cSloadL_volatileNodeFreloc6kM_i_; -text: .text%__1cTcompareAndSwapLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cObox_handleNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cISubLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cFframeVnmethods_code_blob_do6M_v_; -text: .text%__1cYcmpL_zero_flags_LTGENodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cVCallRuntimeDirectNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cQjava_lang_ThreadJis_daemon6FpnHoopDesc__i_; -text: .text%__1cJloadDNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOPhaseIdealLoopUpeeled_dom_test_elim6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cJAssemblerDhlt6M_v_; -text: .text%__1cKstoreDNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cYcmpL_zero_flags_LEGTNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYcmpL_zero_flags_EQdDNENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerEstop6Mpkc_v_; -text: .text%__1cTcmovII_reg_LTGENodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cPClassFileParserbJparse_classfile_signature_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cQshrI_eReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFframeZinterpreter_frame_set_mdp6MpC_v_; -text: .text%__1cQciByteCodeStreamFtable6MnJBytecodesECode__2_; -text: .text%__1cYinternal_word_RelocationJpack_data6M_i_; -text: .text%__1cIDivLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%jni_SetBooleanField: jni.o; -text: .text%__1cSstoreD_roundedNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cTconvD2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreFNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: machnode.o; -text: .text%__1cHMatcherbDinterpreter_frame_pointer_reg6F_nHOptoRegEName__; -text: .text%__1cFStateT_sub_Op_ThreadLocal6MpknENode__v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF_vc_v_; -text: .text%__1cMtlsLoadPNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cWResolveOopMapConflictsRpossible_gc_point6MpnOBytecodeStream__i_: rewriter.o; -text: .text%__1cIciObject2t6MpnHciKlass__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_object6M_v_: interpreterRuntime.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorDbox6Mii_v_; -text: .text%__1cSsarL_eReg_1_31NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKsplit_once6FpnMPhaseIterGVN_pnENode_333_v_: cfgnode.o; -text: .text%__1cYmulI_imm_RShift_highNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLLShiftLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cPRoundDoubleNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKstoreDNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKloadUBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMURShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cPRoundDoubleNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIGraphKitPdstore_rounding6MpnENode__2_; -text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cTCallInterpreterNodeScalling_convention6kMpnLRegPair_I_v_; -text: .text%__1cLPhaseValuesHlongcon6Mx_pnIConLNode__; -text: .text%__1cFStateX_sub_Op_CallInterpreter6MpknENode__v_; -text: .text%__1cZCallInterpreterDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZCallInterpreterDirectNodeFreloc6kM_i_; -text: .text%__1cTCallInterpreterNodeSis_CallInterpreter6kM_pk0_: classes.o; -text: .text%__1cHMatcherbAinterpreter_method_oop_reg6F_nHOptoRegEName__; -text: .text%__1cGciType2t6MpnHciKlass__v_; -text: .text%__1cHCompilebMGenerate_Compiled_To_Interpreter_Graph6MpknITypeFunc_pC_v_; -text: .text%__1cMdecI_memNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cHMatcherXcompiler_method_oop_reg6F_nHOptoRegEName__; -text: .text%__1cXMachCallInterpreterNodeWis_MachCallInterpreter6M_p0_: ad_i486_misc.o; -text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; -text: .text%__1cENodeMis_CatchProj6kM_pknNCatchProjNode__: classes.o; -text: .text%__1cIciMethodRinterpreter_entry6M_pC_; -text: .text%__1cXjvm_define_class_common6FpnHJNIEnv__pkcpnI_jobject_pkWi53pnGThread__pnH_jclass__: jvm.o; -text: .text%__1cQSystemDictionaryTresolve_from_stream6FnMsymbolHandle_nGHandle_2pnPClassFileStream_pnGThread__pnMklassOopDesc__; -text: .text%__1cUciInstanceKlassKlassEmake6F_p0_; -text: .text%__1cIciObjectUis_array_klass_klass6M_i_: ciObjectFactory.o; -text: .text%__1cLLShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSTailCalljmpIndNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cOCallNativeNodeGOpcode6kM_i_; -text: .text%__1cOstackSlotIOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cIciSymbolHbyte_at6Mi_i_; -text: .text%__1cLregDPR1OperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cZCallDynamicJavaDirectNodePcompute_padding6kMi_i_; -text: .text%__1cZCallDynamicJavaDirectNodeKmethod_set6Mi_v_; -text: .text%__1cSTailCalljmpIndNodeGpinned6kM_i_: ad_i486_misc.o; -text: .text%__1cIModINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSTailCalljmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQorI_eReg_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cXMachCallDynamicJavaNodePret_addr_offset6M_i_; -text: .text%__1cJLoadPNodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%__1cNcmpL_EQdDNENodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNcmpL_EQdDNENodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cXroundDouble_mem_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; -text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; -text: .text%__1cOstoreF_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cOmulIS_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSalign_to_page_size6FI_I_: heap.o; -text: .text%__1cOaddF24_regNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cMstoreSSPNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvI2D_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcinMsymbolHandle_4nGHandle_6_v_; -text: .text%__1cNmulI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; -text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; -text: .text%__1cNmulI_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cRandI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPciInstanceKlassNloader_handle6M_pnI_jobject__; -text: .text%__1cTcmovII_reg_EQdDNENodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cTcmovII_reg_LEGTNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cJChunkPoolMfree_all_but6MI_v_: allocation.o; -text: .text%__1cRandL_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNxorI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOaddF24_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%JVM_MonitorWait; -text: .text%__1cNObjectMonitorEwait6MxipnGThread__v_; -text: .text%__1cSObjectSynchronizerEwait6FnGHandle_xpnGThread__v_; -text: .text%__1cFKlassPoop_is_instance6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: instanceKlassKlass.o; -text: .text%__1cZInterpreterMacroAssemblerYtest_method_data_pointer6MpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cMmulD_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cQshrL_eReg_CLNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cRxorI_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNdivI_eRegNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cTAbstractInterpreterSBasicType_as_index6FnJBasicType__i_; -text: .text%__1cIMulDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPjava_lang_ClassQprimitive_mirror6FnJBasicType__pnHoopDesc__; -text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_; -text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_: markSweep.o; -text: .text%__1cNSingletonBlobbIfollow_roots_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_iri_v_: codeBlob.o; -text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_: icBuffer.o; -text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_: icBuffer.o; -text: .text%__1cSleaP_eReg_immINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHciKlassMis_interface6M_i_: ciTypeArrayKlass.o; -text: .text%__1cNcmpL_LEGTNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cFStateQ_sub_Op_URShiftL6MpknENode__v_; -text: .text%__1cNcmpL_LEGTNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cIModLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_i_v_; -text: .text%__1cHMatcherXinterpreter_arg_ptr_reg6F_nHOptoRegEName__; -text: .text%__1cFciEnvWis_dependence_violated6FpnMklassOopDesc_pnNmethodOopDesc__i_; -text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_; -text: .text%__1cSCompiledStaticCallIis_clean6kM_i_; -text: .text%__1cJloadLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLOptoRuntimeVresolve_static_call_C6FpnKJavaThread__pC_; -text: .text%__1cJAssemblerEnegl6MpnMRegisterImpl__v_; -text: .text%__1cOmulF24_regNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cRsubL_eReg_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNloadConL0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRsubL_eReg_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cRmulI_imm_highNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_; -text: .text%__1cFParseHdo_irem6M_v_; -text: .text%__1cHi2bNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cHBoxNodeGOpcode6kM_i_; -text: .text%__1cQmulD_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXjava_lang_ref_ReferenceOset_discovered6FpnHoopDesc_2_v_; -text: .text%__1cTcmovII_reg_EQdDNENodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cTcmovII_reg_EQdDNENodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cRtestI_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNtestI_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJAssemblerFpopfd6M_v_; -text: .text%__1cUParallelScavengeHeapIcapacity6kM_I_; -text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; -text: .text%__1cQset_lwp_priority6Fiii_i_; -text: .text%__1cbDreorder_based_on_method_index6FpnPobjArrayOopDesc_1ppnHoopDesc__v_: methodOop.o; -text: .text%__1cNmaxI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMLinkResolverbPlinktime_resolve_interface_method_or_null6FnLKlassHandle_nMsymbolHandle_21i_nMmethodHandle__; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongVariable__; -text: .text%__1cPconvF2D_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNdivI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNIdealLoopTreeXpolicy_maximally_unroll6kMpnOPhaseIdealLoop__i_; -text: .text%__1cbCAbstractInterpreterGeneratorVset_vtos_entry_points6MpnITemplate_rpC44444444_v_; -text: .text%__1cKciTypeFlowLStateVectorLdo_newarray6MpnQciByteCodeStream__v_; -text: .text%__1cTmembar_volatileNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cNxorI_eRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cPconvI2F_SSFNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cMjniIdSupportNto_jmethod_id6FpnNmethodOopDesc__pnK_jmethodID__; -text: .text%__1cMjniIdPrivateGid_for6FnTinstanceKlassHandle_i_i_: jniId.o; -text: .text%__1cNget_method_id6FpnHJNIEnv__pnH_jclass_pkc5ipnGThread__pnK_jmethodID__: jni.o; -text: .text%__1cICmpFNodeGOpcode6kM_i_; -text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; -text: .text%__1cRmulI_imm_highNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cSstring_compareNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIAddLNodeIadd_ring6kMpknEType_3_3_; -text: .text%jni_NewStringUTF: jni.o; -text: .text%__1cQorI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVloadConL_low_onlyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIUniverseWreinitialize_vtable_of6FpnFKlass_pnGThread__v_; -text: .text%__1cPshlI_eReg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_SetClassSigners; -text: .text%JVM_DefineClassWithSource; -text: .text%__1cJAssemblerGpushfd6M_v_; -text: .text%__1cGEventsDlog6FpkcE_v_: sharedRuntime.o; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pC2i_v_; -text: .text%__1cNloadConL0NodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cNmulI_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cIMulINodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIMulINodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cNmulI_eRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cHAddress2t6MinJrelocInfoJrelocType__v_; -text: .text%__1cTsarL_eReg_32_63NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cTconvF2I_reg_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: instanceRefKlass.o; -text: .text%__1cNsubL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVCallRuntimeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRaddI_mem_eRegNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cODeoptimizationVtrap_state_has_reason6Fii_i_; -text: .text%__1cNaddL_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cVCallRuntimeDirectNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRmulI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLloadSSDNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cS__ieee754_rem_pio26Fdpd_i_: sharedRuntimeTrig.o; -text: .text%__1cQshrL_eReg_CLNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cObox_handleNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cTshlL_eReg_32_63NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cTmembar_volatileNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRtestI_reg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; -text: .text%__1cMstoreSSINodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; -text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FIi_pnGThread__; -text: .text%__1cENodeIis_CMove6M_pnJCMoveNode__: connode.o; -text: .text%__1cCosbBthread_local_storage_at_put6Fipv_v_; -text: .text%__1cLConvF2INodeGOpcode6kM_i_; -text: .text%__1cENodeHis_Bool6M_pnIBoolNode__: connode.o; -text: .text%__1cENodeHis_Root6M_pnIRootNode__: cfgnode.o; -text: .text%get_thread; -text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_; -text: .text%jni_CallIntMethod: jni.o; -text: .text%__1cPconvF2D_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNdivL_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cOjmpLoopEndNodeGnegate6M_v_: ad_i486_misc.o; -text: .text%__1cHCompileRmake_vm_intrinsic6MpnIciMethod_i_pnNCallGenerator__; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: node.o; -text: .text%__1cJCMoveNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cRsubI_eReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLloadSSFNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: node.o; -text: .text%__1cMnegD_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cHnmethodPis_dependent_on6MpnMklassOopDesc__i_; -text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: node.o; -text: .text%__1cSsarL_eReg_1_31NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cTshrL_eReg_32_63NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopOdo_range_check6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cNRelocIteratorEnext6M_i_: sharedRuntime.o; -text: .text%__1cbCAbstractInterpreterGeneratorYgenerate_deopt_entry_for6MnITosState_i_pC_; -text: .text%__1cLOptoRuntimeThandle_wrong_method6FpnKJavaThread__pC_; -text: .text%__1cbCAbstractInterpreterGeneratorZgenerate_return_entry_for6MnITosState_i_pC_; -text: .text%__1cTmembar_volatileNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cKstoreFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUPSMarkSweepDecoratorHcompact6Mi_v_; -text: .text%__1cUPSMarkSweepDecoratorPadjust_pointers6M_v_; -text: .text%__1cTcmovII_reg_EQdDNENodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cPconvI2F_SSFNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cUPSMarkSweepDecoratorVdestination_decorator6F_p0_; -text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_; -text: .text%__1cUPSMarkSweepDecoratorKprecompact6M_v_; -text: .text%__1cQshrI_eReg_CLNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadDNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cICmpDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOaddF24_regNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cIDivDNodeGOpcode6kM_i_; -text: .text%__1cOmulF24_regNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cOaddF24_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOmulF24_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cHCompileQgrow_alias_types6M_v_; -text: .text%__1cFParseScreate_jump_tables6MpnENode_pnLSwitchRange_4_i_; -text: .text%__1cQjava_lang_ThreadMis_stillborn6FpnHoopDesc__i_; -text: .text%JVM_GetClassCPTypes; -text: .text%__1cUverify_byte_codes_fn6F_pv_: verifier.o; -text: .text%JVM_GetClassMethodsCount; -text: .text%JVM_GetClassCPEntriesCount; -text: .text%__1cOstoreF_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%JVM_GetClassFieldsCount; -text: .text%__1cQshrL_eReg_CLNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKstoreBNodeFreloc6kM_i_; -text: .text%__1cPconvI2F_SSFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_; -text: .text%__1cMdecI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGEventsDlog6FpkcE_v_: thread.o; -text: .text%__1cPconvI2L_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOMacroAssemblerKverify_FPU6Mipkc_v_; -text: .text%__1cJLoadFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMloadConDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKstoreBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddD_reg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJAssemblerGmembar6M_v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIgenerate6MX_v_; -text: .text%__1cXSignatureHandlerLibraryLset_handler6FpnKCodeBuffer__pC_; -text: .text%__1cNcmovP_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_; -text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; -text: .text%__1cFJNIidEfind6Mi_p0_; -text: .text%__1cbBinitialize_itable_for_klass6FpnMklassOopDesc__v_; -text: .text%__1cJCmpD3NodeGOpcode6kM_i_; -text: .text%__1cXconvI2L_reg_reg_zexNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cbFunnecessary_membar_volatileNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%JVM_IsPrimitiveClass; -text: .text%__1cIMinINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRsubL_eReg_memNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cNSharedRuntimeDd2l6Fd_x_; -text: .text%__1cRsubL_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPciObjArrayKlassJmake_impl6FpnHciKlass__p0_; -text: .text%__1cRsubL_eReg_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%jni_FindClass: jni.o; -text: .text%__1cPmovI_nocopyNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cbDjava_lang_reflect_ConstructorThas_signature_field6F_i_; -text: .text%__1cbDjava_lang_reflect_ConstructorVhas_annotations_field6F_i_; -text: .text%__1cHCompilebMGenerate_Interpreter_To_Compiled_Graph6MpknITypeFunc__v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorbFhas_parameter_annotations_field6F_i_; -text: .text%__1cFStateM_sub_Op_RegD6MpknENode__v_; -text: .text%__1cbDjava_lang_reflect_ConstructorZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cUCallCompiledJavaNodeScalling_convention6kMpnLRegPair_I_v_; -text: .text%__1cGThreadbCis_hidden_from_external_view6kM_i_: thread.o; -text: .text%__1cGThreadVis_jvmti_agent_thread6kM_i_: thread.o; -text: .text%__1cbACallCompiledJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cbACallCompiledJavaDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cKCompiledICMset_to_clean6M_v_; -text: .text%__1cTcmovII_reg_LEGTNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_2_v_; -text: .text%__1cJloadFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDesc__; -text: .text%__1cbDjava_lang_reflect_ConstructorGcreate6FpnGThread__nGHandle__; -text: .text%__1cFParseSjump_if_false_fork6MpnGIfNode_ii_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cbACallCompiledJavaDirectNodeFreloc6kM_i_; -text: .text%__1cUPipeline_Use_Element2t6MIIIinXPipeline_Use_Cycle_Mask__v_: ad_i486_pipeline.o; -text: .text%__1cbDjava_lang_reflect_ConstructorNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cFStateY_sub_Op_CallCompiledJava6MpknENode__v_; -text: .text%__1cXPipeline_Use_Cycle_Mask2t6MI_v_: ad_i486_pipeline.o; -text: .text%__1cMsubD_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIDivLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSleaP_eReg_immINodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cKstoreFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cTshlL_eReg_32_63NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cRxorI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_2_v_; -text: .text%__1cNcmovI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRandL_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSstoreD_roundedNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cSstoreD_roundedNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cMloadConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_MinI6MpknENode__v_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cNminI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cFMutex2T6M_v_; -text: .text%lwp_mutex_destroy: os_solaris.o; -text: .text%__1cQmulD_reg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cHi2bNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cHMonitor2T6M_v_; -text: .text%__1cIimmIOperJnum_edges6kM_I_: ad_i486_clone.o; -text: .text%__1cIMinINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cIAddFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%lwp_cond_destroy: os_solaris.o; -text: .text%__1cLConvD2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMmulD_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cMstoreSSPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cISubLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cINodeHashEgrow6M_v_; -text: .text%__1cMnegD_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cQjava_lang_ThreadLthreadGroup6FpnHoopDesc__2_; -text: .text%__1cIMulINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cICodeBlobOis_java_method6kM_i_: codeBlob.o; -text: .text%__1cLConvI2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOstackSlotPOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cJCMoveNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKLoadPCNodeGOpcode6kM_i_; -text: .text%__1cRaddI_mem_eRegNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cKCMoveINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cRcmpOp_commuteOperHgreater6kM_i_: ad_i486_clone.o; -text: .text%__1cNObjectMonitorGenter26MpnGThread__v_; -text: .text%__1cNmodL_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRcmpOp_commuteOperGnegate6M_v_: ad_i486_clone.o; -text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_; -text: .text%__1cQaddD_reg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cFTypeFFxmeet6kMpknEType__3_; -text: .text%__1cYcmpL_zero_flags_LTGENodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRmulI_imm_highNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cJCMoveNode2t6MpnENode_22pknEType__v_: connode.o; -text: .text%__1cJCMoveNodeEmake6FpnENode_222pknEType__p0_; -text: .text%__1cOPhaseIdealLoopVinsert_pre_post_loops6MpnNIdealLoopTree_rnJNode_List_i_v_; -text: .text%__1cLloadSSDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKCodeBufferWinsert_double_constant6Md_pC_; -text: .text%__1cXroundDouble_mem_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMsubD_regNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; -text: .text%__1cICodeBlobJis_zombie6kM_i_: onStackReplacement.o; -text: .text%__1cWis_positive_one_double6Fd_i_; -text: .text%__1cNaddP_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; -text: .text%__1cXcmpL_reg_flags_LEGTNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cPciObjectFactoryPinsert_non_perm6Mrpn0ANNonPermObject_pnHoopDesc_pnIciObject__v_; -text: .text%__1cFframeVshould_be_deoptimized6kM_i_; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: instanceKlass.o; -text: .text%__1cPCallRuntimeNodeOis_CallRuntime6kM_pk0_: callnode.o; -text: .text%__1cMincI_memNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: typeArrayKlass.o; -text: .text%__1cSleaP_eReg_immINodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJEventMark2t6MpkcE_v_: psMarkSweep.o; -text: .text%__1cKloadUBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJAssemblerDjmp6MpCnJrelocInfoJrelocType__v_; -text: .text%__1cISubDNodeGOpcode6kM_i_; -text: .text%__1cNObjectMonitor2t6M_v_; -text: .text%__1cTconvD2I_reg_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; -text: .text%__1cOcmpD_cc_P6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvD2FNodeGOpcode6kM_i_; -text: .text%__1cTmembar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSshrL_eReg_1_31NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%JVM_MonitorNotify; -text: .text%__1cHMatcherXpost_store_load_barrier6FpknENode__i_; -text: .text%__1cFParseNdo_instanceof6M_v_; -text: .text%__1cXNativeSignatureIteratorJdo_object6Mii_v_: interpreterRuntime.o; -text: .text%__1cSsarL_eReg_1_31NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl_i_v_; -text: .text%__1cSmulF24_reg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIGraphKitOgen_instanceof6MpnENode_2_2_; -text: .text%__1cYjava_lang_reflect_MethodPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cLTypeInstPtrRcast_to_exactness6kMi_pknEType__; -text: .text%__1cYjava_lang_reflect_MethodbFhas_parameter_annotations_field6F_i_; -text: .text%__1cYjava_lang_reflect_MethodZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodbChas_annotation_default_field6F_i_; -text: .text%__1cYjava_lang_reflect_MethodVhas_annotations_field6F_i_; -text: .text%__1cYjava_lang_reflect_MethodThas_signature_field6F_i_; -text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodPset_return_type6FpnHoopDesc_2_v_; -text: .text%__1cNCallGeneratorSfor_predicted_call6FpnHciKlass_p03_3_; -text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v_; -text: .text%__1cZCallDynamicJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFStateN_sub_Op_LoadF6MpknENode__v_; -text: .text%__1cNandI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cKReflectionKnew_method6FnMmethodHandle_iipnGThread__pnHoopDesc__; -text: .text%__1cTconvD2I_reg_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cWPredictedCallGeneratorKis_virtual6kM_i_: callGenerator.o; -text: .text%__1cWPredictedCallGeneratorJis_inline6kM_i_: callGenerator.o; -text: .text%__1cWPredictedCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cNmethodOopDescSannotation_default6kM_pnQtypeArrayOopDesc__; -text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__; -text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cMstoreSSPNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%jni_GetMethodID: jni.o; -text: .text%__1cOstackSlotPOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cOGenerateOopMapKpp_new_ref6MpnNCellTypeState_i_v_; -text: .text%__1cRmulI_imm_highNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cFParseTjump_if_always_fork6Mii_v_; -text: .text%__1cMnegD_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cFStateW_sub_Op_MemBarVolatile6MpknENode__v_; -text: .text%__1cFKlassMoop_is_klass6kM_i_: typeArrayKlass.o; -text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; -text: .text%__1cHRegMask2t6M_v_: matcher.o; -text: .text%__1cJLoadSNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cPconvI2D_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_GetClassDeclaredConstructors; -text: .text%__1cINegDNodeGOpcode6kM_i_; -text: .text%__1cIciObjectOis_method_data6M_i_: ciObjectFactory.o; -text: .text%__1cNCallGeneratorRfor_uncommon_trap6FpnIciMethod_nODeoptimizationLDeoptReason_n0CLDeoptAction__p0_; -text: .text%__1cIciObjectJis_method6M_i_: ciObjectFactory.o; -text: .text%__1cNmodI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateP_sub_Op_LShiftL6MpknENode__v_; -text: .text%__1cNmodI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLConvI2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: callGenerator.o; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceRefKlass.o; -text: .text%__1cKcmpOpUOperFequal6kM_i_: ad_i486_clone.o; -text: .text%__1cZUncommonTrapCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cIciObjectOis_null_object6kM_i_: ciObjectFactory.o; -text: .text%__1cFStateM_sub_Op_ModI6MpknENode__v_; -text: .text%__1cMloadConDNodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cPmovI_nocopyNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIci2bNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMVirtualSpaceQuncommitted_size6kM_I_; -text: .text%__1cMVirtualSpaceJexpand_by6MI_i_; -text: .text%__1cJAssemblerFfld_d6MnHAddress__v_; -text: .text%__1cJloadFNodeFreloc6kM_i_; -text: .text%__1cOaddF24_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cMincI_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cVCallRuntimeDirectNodeKmethod_set6Mi_v_; -text: .text%__1cRaddI_eReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOGenerateOopMapKinit_state6M_v_; -text: .text%__1cTcmovII_reg_LTGENodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNSafepointBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_; -text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_; -text: .text%__1cSTailCalljmpIndNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNinstanceKlassSregister_finalizer6FpnPinstanceOopDesc_pnGThread__2_; -text: .text%__1cOGenerateOopMapRinit_basic_blocks6M_v_; -text: .text%__1cOGenerateOopMapYsetup_method_entry_state6M_v_; -text: .text%__1cMstoreSSPNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; -text: .text%__1cOGenerateOopMapbAmake_context_uninitialized6M_v_; -text: .text%__1cOmulF24_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cOGenerateOopMapTmethodsig_to_effect6MpnNsymbolOopDesc_ipnNCellTypeState__i_; -text: .text%__1cQsalI_eReg_CLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNdivI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapKinterp_all6M_v_; -text: .text%__1cNandI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPClassFileParserXverify_unqualified_name6MpcIi_i_; -text: .text%__1cUGenericGrowableArrayKraw_remove6MpknEGrET__v_; -text: .text%__1cOcmovI_regUNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMmulD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_SystemSin_offset_in_bytes6F_i_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cFTypeFJsingleton6kM_i_; -text: .text%__1cRandL_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cQjava_lang_SystemTout_offset_in_bytes6F_i_; -text: .text%__1cIBytecodeIset_code6MnJBytecodesECode__v_; -text: .text%__1cPconvI2D_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cENodeHis_Root6M_pnIRootNode__: memnode.o; -text: .text%__1cNmulI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; -text: .text%__1cQsalL_eReg_CLNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; -text: .text%__1cNdivL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMaxINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; -text: .text%__1cRsubL_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvF2D_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegD_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cTAbstractInterpreterLdeopt_entry6FnITosState_i_pC_; -text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; -text: .text%__1cQshrL_eReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapbImark_bbheaders_and_count_gc_points6M_v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIpass_int6M_v_: interpreterRuntime.o; -text: .text%__1cOGenerateOopMapNinitialize_bb6M_v_; -text: .text%__1cNcmovP_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQorI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: instanceRefKlass.o; -text: .text%__1cMdecI_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSstring_compareNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cKOopClosureLdo_nmethods6kM_ki_: markSweep.o; -text: .text%__1cRInterpreterOopMapIis_empty6M_i_; -text: .text%__1cJMarkSweepSMarkAndPushClosureLdo_nmethods6kM_ki_: markSweep.o; -text: .text%__1cTsarL_eReg_32_63NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNcmovP_regNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_; -text: .text%__1cIMulDNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cOmulF24_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMsubD_regNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; -text: .text%__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; -text: .text%__1cMsubD_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOjmpLoopEndNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cJAssemblerFbswap6MpnMRegisterImpl__v_; -text: .text%__1cTconvF2I_reg_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMstoreSSPNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cOjmpLoopEndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_; -text: .text%__1cOjmpLoopEndNodeJis_Branch6kM_I_: ad_i486_misc.o; -text: .text%__1cbFunnecessary_membar_volatileNodeLbottom_type6kM_pknEType__: ad_i486_misc.o; -text: .text%__1cIGraphKitXinsert_mem_bar_volatile6MpnKMemBarNode_i_v_; -text: .text%__1cRsubI_eReg_memNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cQjava_lang_ThreadIis_alive6FpnHoopDesc__i_; -text: .text%__1cFStateX_sub_Op_CallDynamicJava6MpknENode__v_; -text: .text%JVM_IsThreadAlive; -text: .text%__1cQMachCallJavaNodeVis_MachCallStaticJava6M_pnWMachCallStaticJavaNode__: ad_i486_misc.o; -text: .text%__1cZCallDynamicJavaDirectNodeFreloc6kM_i_; -text: .text%__1cTcmovII_reg_LTGENodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cYcmpL_zero_flags_LTGENodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cJAssemblerEdecl6MpnMRegisterImpl__v_; -text: .text%__1cVLoaderConstraintTableYextend_loader_constraint6MpnVLoaderConstraintEntry_nGHandle_pnMklassOopDesc__v_; -text: .text%__1cUVirtualCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cVcompiledICHolderKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cNCallGeneratorQfor_virtual_call6FpnIciMethod__p0_; -text: .text%__1cVLoaderConstraintTablebHensure_loader_constraint_capacity6MpnVLoaderConstraintEntry_i_v_; -text: .text%__1cIModLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cQOopMapCacheEntryFflush6M_v_; -text: .text%__1cQOopMapCacheEntryEfill6MnMmethodHandle_i_v_; -text: .text%__1cQOopMapCacheEntryTdeallocate_bit_mask6M_v_; -text: .text%__1cQOopMapCacheEntryRallocate_bit_mask6M_v_; -text: .text%__1cOPSPromotionLABRunallocate_object6MpnHoopDesc__i_; -text: .text%__1cICodeHeapTmark_segmap_as_free6MII_v_; -text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cNsubI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cICodeHeapJexpand_by6MI_i_; -text: .text%__1cTcmovII_reg_LEGTNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cJAssemblerFfld_s6MnHAddress__v_; -text: .text%__1cOstoreF_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cVscale_to_lwp_priority6Fiii_i_: os_solaris.o; -text: .text%__1cMdivD_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cRaddI_mem_eRegNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cMdivD_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNxorI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQmulI_mem_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cQmulI_mem_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cQorI_eReg_memNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cMsubD_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cUVirtualCallGeneratorKis_virtual6kM_i_: callGenerator.o; -text: .text%__1cPconvI2F_SSFNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRcmpOp_commuteOperKless_equal6kM_i_: ad_i486_clone.o; -text: .text%__1cIci2bNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJMemRegionMintersection6kMk0_0_; -text: .text%__1cIDivLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cMincI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__; -text: .text%__1cQmulD_reg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cFStateM_sub_Op_ConD6MpknENode__v_; -text: .text%__1cSaddD_reg_roundNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNmodL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNRelocIteratorEnext6M_i_: output.o; -text: .text%__1cYinternal_word_RelocationWfix_relocation_at_move6Mi_v_; -text: .text%__1cNaddI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cCosHSolarisKvm_signals6F_pnIsigset_t__; -text: .text%__1cODataRelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cODataRelocationJset_value6MpC_v_: relocInfo.o; -text: .text%__1cPICStubInterfaceEsize6kMpnEStub__i_: icBuffer.o; -text: .text%__1cFStateO_sub_Op_CMoveI6MpknENode__v_; -text: .text%__1cPICStubInterfaceIfinalize6MpnEStub__v_: icBuffer.o; -text: .text%__1cSdivD_reg_roundNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cTOopMapForCacheEntry2t6MnMmethodHandle_ipnQOopMapCacheEntry__v_; -text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_; -text: .text%__1cGICStubIfinalize6M_v_; -text: .text%__1cCosScurrent_stack_base6F_pC_; -text: .text%__1cOGenerateOopMapVresult_for_basicblock6Mi_v_; -text: .text%__1cGThread2t6M_v_; -text: .text%__1cCosScurrent_stack_size6F_I_; -text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; -text: .text%__1cJAssemblerExorl6MpnMRegisterImpl_2_v_; -text: .text%__1cCosHSolarisRunblocked_signals6F_pnIsigset_t__; -text: .text%__1cJStubQdDueueMremove_first6M_v_; -text: .text%__1cGThreadbArecord_stack_base_and_size6M_v_; -text: .text%__1cLMoveL2DNodeGOpcode6kM_i_; -text: .text%__1cIOSThreadNpd_initialize6M_v_; -text: .text%__1cQOopMapCacheEntryIset_mask6MpnNCellTypeState_2i_v_; -text: .text%__1cCosScurrent_process_id6F_i_; -text: .text%__1cIOSThread2t6MpFpv_i1_v_; -text: .text%__1cKRelocationRpd_set_data_value6MpCi_v_; -text: .text%__1cTshlL_eReg_32_63NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cKConv2BNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cGThreadbFinitialize_thread_local_storage6M_v_; -text: .text%__1cTOopMapForCacheEntryOreport_results6kM_i_: oopMapCache.o; -text: .text%__1cCosRinitialize_thread6F_v_; -text: .text%__1cFTypeDGis_nan6kM_i_; -text: .text%__1cTOopMapForCacheEntryLcompute_map6MpnGThread__v_; -text: .text%__1cCosMstart_thread6FpnGThread__v_; -text: .text%_start: os_solaris.o; -text: .text%__1cYcmpL_zero_flags_LTGENodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cFStateM_sub_Op_SubL6MpknENode__v_; -text: .text%__1cLStrCompNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%JVM_SetThreadPriority; -text: .text%__1cNobjArrayKlassKinitialize6MpnGThread__v_; -text: .text%jni_NewObjectArray: jni.o; -text: .text%__1cKCompiledICKcached_oop6kM_pnHoopDesc__; -text: .text%__1cTcmovII_reg_EQdDNENodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cFStateM_sub_Op_MulI6MpknENode__v_; -text: .text%__1cMPipeline_Use2t6MIIIpnUPipeline_Use_Element__v_: ad_i486_pipeline.o; -text: .text%__1cCosPpd_start_thread6FpnGThread__v_; -text: .text%__1cNsubL_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cCosNcreate_thread6FpnGThread_n0AKThreadType_I_i_; -text: .text%__1cPRoundDoubleNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cFParseScan_rerun_bytecode6M_i_; -text: .text%__1cXjava_lang_reflect_FieldThas_signature_field6F_i_; -text: .text%__1cKReflectionInew_type6FnMsymbolHandle_nLKlassHandle_pnGThread__nGHandle__; -text: .text%__1cDhpiEread6FipvI_I_: jvm.o; -text: .text%__1cXjava_lang_reflect_FieldPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cXjava_lang_reflect_FieldVhas_annotations_field6F_i_; -text: .text%__1cMstoreSSINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cXjava_lang_reflect_FieldJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cSmembar_releaseNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cXjava_lang_reflect_FieldGcreate6FpnGThread__nGHandle__; -text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cXjava_lang_reflect_FieldIset_name6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_type6FpnHoopDesc_2_v_; -text: .text%__1cKReflectionJnew_field6FpnPfieldDescriptor_ipnGThread__pnHoopDesc__; -text: .text%__1cRtestI_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopKdo_peeling6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%JVM_GetStackAccessControlContext; -text: .text%__1cIPipeline2t6MIIiIIiiiikpnSmachPipelineStages_3kpInMPipeline_Use__v_: ad_i486_pipeline.o; -text: .text%JVM_Read; -text: .text%__1cOJavaAssertionsNmatch_package6Fpkc_pn0AKOptionList__; -text: .text%__1cHciKlassOsuper_of_depth6MI_p0_; -text: .text%JVM_DesiredAssertionStatus; -text: .text%__1cWThreadLocalAllocBufferKinitialize6M_v_; -text: .text%__1cOcmpF_cc_P6NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cOJavaAssertionsHenabled6Fpkci_i_; -text: .text%__1cOcmpF_cc_P6NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cRaddL_eReg_memNodeFreloc6kM_i_; -text: .text%__1cWThreadLocalAllocBufferMinitial_size6F_I_; -text: .text%__1cQaddD_reg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%jni_GetStaticFieldID: jni.o; -text: .text%__1cOJavaAssertionsLmatch_class6Fpkc_pn0AKOptionList__: javaAssertions.o; -text: .text%__1cNinstanceKlassKjni_id_for6Mi_pnFJNIid__; -text: .text%__1cENodeEgetf6kM_f_; -text: .text%__1cLConvL2FNodeGOpcode6kM_i_; -text: .text%__1cMFlatProfilerJis_active6F_i_; -text: .text%__1cNThreadServiceKadd_thread6FpnKJavaThread_i_v_; -text: .text%__1cIjniIdMapGcreate6FnTinstanceKlassHandle__p0_; -text: .text%__1cQorI_eReg_memNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cHThreadsDadd6FpnKJavaThread_i_v_; -text: .text%__1cKJavaThreadKinitialize6M_v_; -text: .text%__1cLConvL2DNodeGOpcode6kM_i_; -text: .text%__1cNloadConL0NodeFclone6kM_pnENode__; -text: .text%__1cLConvF2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cGParker2t6M_v_; -text: .text%__1cQThreadStatistics2t6M_v_; -text: .text%__1cIAddDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJimmL0OperFclone6kM_pnIMachOper__; -text: .text%__1cENodeGis_Con6kM_I_: loopnode.o; -text: .text%__1cNjni_functions6F_pknTJNINativeInterface___; -text: .text%__1cLConvF2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIjniIdMap2t6MpnMklassOopDesc_i_v_; -text: .text%__1cIjniIdMapRcompute_index_cnt6FnTinstanceKlassHandle__i_; -text: .text%__1cLjniIdBucket2t6MpnIjniIdMap_p0_v_; -text: .text%__1cUThreadSafepointStateGcreate6FpnKJavaThread__v_; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: loopnode.o; -text: .text%__1cUThreadSafepointState2t6MpnKJavaThread__v_; -text: .text%__1cIGraphKitSprecision_rounding6MpnENode__2_; -text: .text%__1cCosMguard_memory6FpcI_i_; -text: .text%__1cKJavaThreadYcreate_stack_guard_pages6M_v_; -text: .text%__1cNaddL_eRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cOaddF24_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKJavaThread2t6MpFp0pnGThread__vI_v_; -text: .text%__1cSmulF24_reg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cQorl_eReg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; -text: .text%jni_GetFloatArrayRegion: jni.o; -text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%__1cKJavaThreadRthread_main_inner6M_v_; -text: .text%__1cQSystemDictionaryQjava_mirror_type6FpnHoopDesc__nJBasicType__; -text: .text%__1cKReflectionbFbasic_type_mirror_to_basic_type6FpnHoopDesc_pnGThread__nJBasicType__; -text: .text%__1cM__kernel_cos6Fdd_d_: sharedRuntimeTrig.o; -text: .text%__1cJAssemblerFcmovl6Mn0AJCondition_pnMRegisterImpl_3_v_; -text: .text%__1cM__kernel_sin6Fddi_d_: sharedRuntimeTrig.o; -text: .text%__1cSleaP_eReg_immINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopJclone_iff6MpnHPhiNode_pnNIdealLoopTree__pnIBoolNode__; -text: .text%__1cGThreadFstart6Fp0_v_; -text: .text%__1cNSharedRuntimeEdsin6Fd_d_; -text: .text%__1cNSharedRuntimeEdcos6Fd_d_; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: multnode.o; -text: .text%jni_CallStaticVoidMethod: jni.o; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnPPerfLongCounter__; -text: .text%__1cSshlL_eReg_1_31NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; -text: .text%__1cNdecI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTconvF2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNcmovP_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJAssemblerEsbbl6MnHAddress_i_v_; -text: .text%__1cFKlassNexternal_name6kM_pkc_; -text: .text%__1cHRegMask2t6Miiiii_v_: ad_i486_expand.o; -text: .text%__1cLConvD2INodeJideal_reg6kM_I_: classes.o; -text: .text%JVM_IsArrayClass; -text: .text%__1cVloadConL_low_onlyNodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cHTypePtrFxdual6kM_pknEType__; -text: .text%__1cSMachBreakpointNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: objArrayKlass.o; -text: .text%__1cICmpDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cVMoveL2D_reg_stackNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cQshrI_eReg_CLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRmulI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_: output.o; -text: .text%JVM_GetClassName; -text: .text%__1cSsarL_eReg_1_31NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cQorl_eReg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvL2D_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cCosMset_priority6FpnGThread_nOThreadPriority__nIOSReturn__; -text: .text%__1cFJNIid2t6MpnMklassOopDesc_ip0_v_; -text: .text%__1cENodeHdel_out6Mp0_v_: mulnode.o; -text: .text%__1cSstring_compareNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateM_sub_Op_RegF6MpknENode__v_; -text: .text%__1cPmovI_nocopyNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cIMulFNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cNinstanceKlassPjni_id_for_impl6FnTinstanceKlassHandle_i_pnFJNIid__; -text: .text%__1cOcmpF_cc_P6NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cKRelocationYpd_get_address_from_code6M_pC_; -text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_: interpreterRuntime.o; -text: .text%__1cSmulF24_reg_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cbFunnecessary_membar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmulF24_reg_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNtestU_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cbFunnecessary_membar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGThreadMset_priority6Fp0nOThreadPriority__v_; -text: .text%__1cZInterpreterMacroAssemblerVincrement_mdp_data_at6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerDjmp6MpnMRegisterImpl_nJrelocInfoJrelocType__v_; -text: .text%__1cJArrayDataKcell_count6M_i_: ciMethodData.o; -text: .text%JVM_Open; -text: .text%__1cOmulIS_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; -text: .text%__1cQjava_lang_ThreadJstackSize6FpnHoopDesc__x_; -text: .text%__1cYcmpL_zero_flags_EQdDNENodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; -text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; -text: .text%JVM_StartThread; -text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorJpass_long6M_v_: interpreterRuntime.o; -text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; -text: .text%__1cGICStubLdestination6kM_pC_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: instanceKlassKlass.o; -text: .text%__1cYcmpL_zero_flags_LEGTNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLConvD2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRxorI_eReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_; -text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; -text: .text%jni_GetStaticObjectField: jni.o; -text: .text%__1cQmulI_mem_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cScompI_eReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOstackSlotDOperFscale6kM_i_: ad_i486.o; -text: .text%__1cOstackSlotDOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cMmulD_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cOstackSlotDOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cXPartialSubtypeCheckNodeGOpcode6kM_i_; -text: .text%__1cQmulD_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOstackSlotPOperFscale6kM_i_: ad_i486.o; -text: .text%__1cOstackSlotPOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cOstackSlotPOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cOGenerateOopMapMdo_checkcast6M_v_; -text: .text%__1cQmulI_mem_immNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPconvI2D_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRandL_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cTAbstractInterpreterWlayout_activation_impl6FpnNmethodOopDesc_iiiipnFframe_4i_i_; -text: .text%JVM_TotalMemory; -text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__: generateOptoStub.o; -text: .text%JVM_FreeMemory; -text: .text%__1cObox_handleNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMaxINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cTshlL_eReg_32_63NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQmulI_mem_immNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cQmulI_mem_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvI2F_SSFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJScopeDescTdecode_scope_values6Mi_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cUThreadSafepointStateHdestroy6FpnKJavaThread__v_; -text: .text%__1cKJavaThread2T6M_v_; -text: .text%__1cKJavaThreadYremove_stack_guard_pages6M_v_; -text: .text%__1cIOSThreadKpd_destroy6M_v_; -text: .text%__1cIOSThread2T6M_v_; -text: .text%__1cCosLfree_thread6FpnIOSThread__v_; -text: .text%__1cCosOunguard_memory6FpcI_i_; -text: .text%__1cHRetDataKcell_count6M_i_: methodDataOop.o; -text: .text%__1cGParker2T6M_v_; -text: .text%__1cQorI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRmulI_imm_highNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsGremove6FpnKJavaThread__v_; -text: .text%__1cKJavaThreadEexit6Mi_v_; -text: .text%__1cKloadUBNodeFreloc6kM_i_; -text: .text%__1cLensure_join6FpnKJavaThread__v_: thread.o; -text: .text%__1cGThread2T5B6M_v_; -text: .text%__1cNThreadServiceWcurrent_thread_exiting6FpnKJavaThread__v_; -text: .text%__1cNThreadServiceNremove_thread6FpnKJavaThread_i_v_; -text: .text%__SLIP.DELETER__A: thread.o; -text: .text%__1cUThreadSafepointState2T6M_v_; -text: .text%__1cFStateT_sub_Op_RoundDouble6MpknENode__v_; -text: .text%__1cQjava_lang_ThreadNset_stillborn6FpnHoopDesc__v_; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_: klassKlass.o; -text: .text%__1cIGraphKitTdprecision_rounding6MpnENode__2_; -text: .text%__1cHOrLNodeGOpcode6kM_i_; -text: .text%__1cWconstantPoolCacheKlassOklass_oop_size6kM_i_: cpCacheKlass.o; -text: .text%__1cRconstantPoolKlassOklass_oop_size6kM_i_: constantPoolKlass.o; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: library_call.o; -text: .text%__1cSobjArrayKlassKlassOklass_oop_size6kM_i_: objArrayKlassKlass.o; -text: .text%__1cLmethodKlassOklass_oop_size6kM_i_: methodKlass.o; -text: .text%__1cPmethodDataKlassOklass_oop_size6kM_i_: methodDataKlass.o; -text: .text%__1cUBytecode_tableswitchGlength6M_i_: generateOopMap.o; -text: .text%__1cTcmovII_reg_EQdDNENodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTtypeArrayKlassKlassOklass_oop_size6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cSTailCalljmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_: arrayKlassKlass.o; -text: .text%__1cSinstanceKlassKlassOklass_oop_size6kM_i_: instanceKlassKlass.o; -text: .text%__1cNcmovL_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cQconstMethodKlassOklass_oop_size6kM_i_: constMethodKlass.o; -text: .text%__1cLsymbolKlassOklass_oop_size6kM_i_: symbolKlass.o; -text: .text%__1cMTailCallNode2t6MpnENode_222222_v_; -text: .text%__1cKstoreLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cFStateQ_sub_Op_TailCall6MpknENode__v_; -text: .text%__1cVcompiledICHolderKlassOklass_oop_size6kM_i_: compiledICHolderKlass.o; -text: .text%__1cLeDIRegIOperEtype6kM_pknEType__: ad_i486.o; -text: .text%__1cPmovI_nocopyNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cSTailCalljmpIndNodeFreloc6kM_i_; -text: .text%__1cQChunkPoolCleanerEtask6M_v_: allocation.o; -text: .text%__1cNandI_eRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cFStateO_sub_Op_StoreF6MpknENode__v_; -text: .text%__1cQaddD_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTsarL_eReg_32_63NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_CallObjectMethod: jni.o; -text: .text%__1cNaddP_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNaddP_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovI_regUNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cLOptoRuntimeMrethrow_Type6F_pknITypeFunc__; -text: .text%__1cENodeJis_MemBar6kM_pknKMemBarNode__: classes.o; -text: .text%__1cMstoreSSPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUGenericGrowableArrayUclear_and_deallocate6M_v_; -text: .text%__1cRandI_eReg_memNodeFreloc6kM_i_; -text: .text%__1cSsarL_eReg_1_31NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cRCardTableModRefBSPclear_MemRegion6MnJMemRegion__v_; -text: .text%__1cHThreadsHoops_do6FpnKOopClosure__v_; -text: .text%__1cRInlineCacheBufferLnew_ic_stub6F_pnGICStub__; -text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cVMoveL2D_reg_stackNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cObox_handleNodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_; -text: .text%__1cGICStubIset_stub6MpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cTcmovII_reg_LEGTNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_; -text: .text%__1cICodeBlobYcaller_must_gc_arguments6kMpnKJavaThread__i_: onStackReplacement.o; -text: .text%__1cObox_handleNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_: interpreterRuntime.o; -text: .text%__1cSaddD_reg_roundNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cQorI_eReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmulF24_reg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cSaddD_reg_roundNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOmulF24_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cHi2bNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQjava_lang_StringbHcreate_from_platform_depended_str6FpkcpnGThread__nGHandle__; -text: .text%__1cOLibraryCallKitYinline_native_time_funcs6Mi_i_; -text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; -text: .text%__1cLOptoRuntimeYcurrent_time_millis_Type6F_pknITypeFunc__; -text: .text%__1cIPSOldGenHcompact6M_v_; -text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; -text: .text%__1cOcmpF_cc_P6NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cIPSOldGenPadjust_pointers6M_v_; -text: .text%__1cUBytecode_tableswitchGlength6M_i_: ciTypeFlow.o; -text: .text%__1cNmulI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cKdirectOperFscale6kM_i_: ad_i486_clone.o; -text: .text%__1cQorI_eReg_memNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cQorI_eReg_memNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cQObjectStartArrayFreset6M_v_; -text: .text%__1cFParseVcatch_call_exceptions6MrnYciExceptionHandlerStream__v_; -text: .text%__1cMsubD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJvmSymbolsHoops_do6FpnKOopClosure_i_v_; -text: .text%__1cSReferenceProcessorHoops_do6MpnKOopClosure__v_; -text: .text%__1cIci2bNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cIregDOperFclone6kM_pnIMachOper__; -text: .text%JVM_MonitorNotifyAll; -text: .text%__1cLConvI2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKConv2BNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNmaxI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cMelapsedTimer2t6M_v_: phase.o; -text: .text%__1cSvframeArrayElementDbci6kM_i_; -text: .text%__1cIDivDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMloadConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKarrayKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cODeoptimizationYquery_update_method_data6FnQmethodDataHandle_in0ALDeoptReason_rIri4_pnLProfileData__; -text: .text%__1cKstoreDNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNminI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMnegD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNPhaseRegAllocHset_oop6MpknENode_i_v_; -text: .text%__1cKarrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cFStateM_sub_Op_MaxI6MpknENode__v_; -text: .text%__1cXJNI_ArgumentPusherVaArgJget_float6M_v_: jni.o; -text: .text%__1cWis_positive_zero_float6Ff_i_; -text: .text%__1cTcmovII_reg_LTGENodeQuse_cisc_RegMask6M_v_; -text: .text%__1cSPerfStringConstant2t6MnJCounterNS_pkc3_v_; -text: .text%__1cIMulDNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cQorI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; -text: .text%__1cOMacroAssemblerFleave6M_v_; -text: .text%__1cMloadConDNodeFclone6kM_pnENode__; -text: .text%JVM_GetInheritedAccessControlContext; -text: .text%JVM_NativePath; -text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_; -text: .text%__1cVLoaderConstraintTableJnew_entry6MIpnNsymbolOopDesc_pnMklassOopDesc_ii_pnVLoaderConstraintEntry__; -text: .text%__1cVloadConL_low_onlyNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIimmDOperFclone6kM_pnIMachOper__; -text: .text%__1cIMachNodeOmemory_operand6kM_pknIMachOper__: ad_i486_misc.o; -text: .text%__1cbIjava_security_AccessControlContextGcreate6FnOobjArrayHandle_inGHandle_pnGThread__pnHoopDesc__; -text: .text%__1cHnmethodNis_osr_method6kM_i_: nmethod.o; -text: .text%__1cNmulI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cQorl_eReg_immNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cQsalI_eReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOaddF24_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cPCallRuntimeNodeEhash6kM_I_: callnode.o; -text: .text%__1cFStateT_sub_Op_CallRuntime6MpknENode__v_; -text: .text%__1cICallNodeSis_CallInterpreter6kM_pknTCallInterpreterNode__: callnode.o; -text: .text%__1cOcmovI_regUNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cCosXnon_memory_address_word6F_pc_; -text: .text%__1cFKlassNoop_is_method6kM_i_: typeArrayKlass.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: methodDataKlass.o; -text: .text%__1cQsalI_eReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFKlassRoop_is_methodData6kM_i_: typeArrayKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: methodDataKlass.o; -text: .text%__1cVCallRuntimeDirectNodeFreloc6kM_i_; -text: .text%__1cSdivD_reg_roundNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cISubFNodeGOpcode6kM_i_; -text: .text%__1cNandI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVMoveL2D_reg_stackNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cVCallRuntimeDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOmulF24_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cOcmovI_regUNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cJloadCNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRandL_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTcmovII_reg_LTGENodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cTshrL_eReg_32_63NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOcmpF_cc_P6NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cOaddF24_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cSaddF24_reg_immNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNcmovP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovI_regUNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cSmulF24_reg_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cKCompiledICOset_cached_oop6MpnHoopDesc__v_; -text: .text%__1cCosHSolarisKmmap_chunk6FpcIii_2_; -text: .text%__1cKstoreFNodeFreloc6kM_i_; -text: .text%jni_GetStaticMethodID: jni.o; -text: .text%__1cZInterpreterMacroAssemblerWupdate_mdp_by_constant6MpnMRegisterImpl_i_v_; -text: .text%__1cKCompiledICMstub_address6kM_pC_; -text: .text%__1cbCAbstractInterpreterGeneratorRset_unimplemented6Mi_v_; -text: .text%__1cSstoreD_roundedNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_i_v_; -text: .text%__1cKstoreFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKCodeBufferVinsert_float_constant6Mf_pC_; -text: .text%__1cWroundFloat_mem_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOsubF24_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cSaddF24_reg_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cSaddD_reg_roundNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMdecI_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cTconvF2I_reg_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cISubDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKReflectionTunbox_for_primitive6FpnHoopDesc_pnGjvalue_pnGThread__nJBasicType__; -text: .text%__1cMloadConDNodeFreloc6kM_i_; -text: .text%__1cPMultiBranchDataScompute_cell_count6FpnOBytecodeStream__i_; -text: .text%__1cJloadDNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQaddD_reg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cMdecI_memNodeFreloc6kM_i_; -text: .text%__1cTshlL_eReg_32_63NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cFTypeDFxdual6kM_pknEType__; -text: .text%__1cXjava_lang_boxing_objectJget_value6FpnHoopDesc_pnGjvalue__nJBasicType__; -text: .text%__1cWCallLeafNoFPDirectNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cMloadConDNodeKconst_size6kM_i_: ad_i486_misc.o; -text: .text%__1cOtailjmpIndNodeNis_block_proj6kM_pknENode__: ad_i486_misc.o; -text: .text%__1cWCallLeafNoFPDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMdecI_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOptoRuntimeWresolve_virtual_call_C6FpnKJavaThread__pC_; -text: .text%__1cLTypeInstPtrLmirror_type6kM_pnGciType__; -text: .text%__1cSmulF24_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cODeoptimizationVtrap_state_add_reason6Fii_i_; -text: .text%__1cKstoreINodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cMdivD_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cJLoadBNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF3_v3_v_; -text: .text%__1cOCompilerThreadSis_Compiler_thread6kM_i_: thread.o; -text: .text%__1cYcmpL_zero_flags_LTGENodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVcompiledICHolderKlassSoop_being_unloaded6MpnRBoolObjectClosure_pnHoopDesc__i_; -text: .text%__1cLRuntimeStub2n6FII_pv_; -text: .text%__1cYcmpL_zero_flags_LTGENodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cLRuntimeStubQnew_runtime_stub6FpkcpnKCodeBuffer_ipnJOopMapSet_i_p0_; -text: .text%__1cLRuntimeStub2t6MpkcpnKCodeBuffer_iipnJOopMapSet_i_v_; -text: .text%__1cOstoreF_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvL2F_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cLloadSSDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvI2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQshrL_eReg_CLNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cQsalL_eReg_CLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNSafePointNodeQpeek_monitor_obj6kM_pnENode__; -text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cHnmethodbAmake_not_entrant_or_zombie6Mi_v_; -text: .text%__1cFTypeDFempty6kM_i_; -text: .text%__1cUBytecode_tableswitchGlength6M_i_: methodDataOop.o; -text: .text%__1cPconvL2D_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKdirectOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486_clone.o; -text: .text%__1cKdirectOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486_clone.o; -text: .text%__1cPoldgetTimeNanos6F_x_: os_solaris.o; -text: .text%__1cKdirectOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486_clone.o; -text: .text%__1cKdirectOperLdisp_is_oop6kM_i_: ad_i486_clone.o; -text: .text%__1cLConvD2INodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cPconvI2F_SSFNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cRmulI_imm_highNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIDivLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cXpartialSubtypeCheckNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJOperation__v4_v_; -text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; -text: .text%__1cRxorI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cXpartialSubtypeCheckNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJAssemblerEsarl6MpnMRegisterImpl_i_v_; -text: .text%__1cIModLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cDhpiFclose6Fi_i_: jvm.o; -text: .text%__1cFParsePdo_monitor_exit6M_v_; -text: .text%__1cFStateN_sub_Op_LoadD6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_MulD6MpknENode__v_; -text: .text%__1cSMachCallNativeNodePret_addr_offset6M_i_; -text: .text%__1cPPerfDataManagerUcreate_long_constant6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongConstant__; -text: .text%__1cOsubF24_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cGEventsDlog6FpkcE_v_: deoptimization.o; -text: .text%__1cTAbstractInterpreterMreturn_entry6FnITosState_i_pC_; -text: .text%JVM_Close; -text: .text%__1cLOptoRuntimeRnew_objArray_Type6F_pknITypeFunc__; -text: .text%__1cLConvD2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNSafePointNodeQpeek_monitor_box6kM_pnENode__; -text: .text%__1cIMulDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOmulIS_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovL_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_i_v_; -text: .text%__1cNdivI_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIMulFNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cTunsafe_intrinsic_id6FpnNsymbolOopDesc_1_nNmethodOopDescLIntrinsicId__; -text: .text%__1cSaddF24_reg_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cQComputeCallStackIdo_float6M_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackHdo_byte6M_v_: generateOopMap.o; -text: .text%__1cFParseMdo_anewarray6M_v_; -text: .text%__1cIAddFNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cJLoadDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cTinc_decompile_count6FpnHnmethod__v_: nmethod.o; -text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_; -text: .text%__1cMsubD_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cOcmpD_cc_P6NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cTcmovII_reg_EQdDNENodeQuse_cisc_RegMask6M_v_; -text: .text%__1cFStateM_sub_Op_CmpD6MpknENode__v_; -text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_; -text: .text%__1cJAssemblerEmovb6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_only6MnITosState__v_; -text: .text%__1cSCallLeafDirectNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cPmovI_nocopyNodeErule6kM_I_: ad_i486_misc.o; -text: .text%jni_NewObjectV: jni.o; -text: .text%__1cSCallLeafDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIci2bNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cSsarL_eReg_1_31NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRcmpFastUnlockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovI_regUNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cOtailjmpIndNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cLOopMapCache2t6M_v_; -text: .text%__1cGICStubKcached_oop6kM_pnHoopDesc__; -text: .text%__1cJSubFPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRInlineCacheBufferUic_buffer_cached_oop6FpC_pnHoopDesc__; -text: .text%__1cMdivD_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cTconvF2I_reg_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cSmulF24_reg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cTmembar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_; -text: .text%jni_EnsureLocalCapacity; -text: .text%__1cTcmovII_reg_LEGTNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPfieldDescriptorUdouble_initial_value6kM_d_; -text: .text%__1cQAbstractCompilerMsupports_osr6M_i_: c2compiler.o; -text: .text%__1cKEntryPoint2t6M_v_; -text: .text%__1cKstoreINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNTemplateTableGbranch6Fii_v_; -text: .text%__1cXcmpL_reg_flags_LTGENodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSMachBreakpointNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQshrI_eReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cHCompile2t6MpnFciEnv_pF_pknITypeFunc_pCpkciiii_v_; -text: .text%__1cKemit_break6FrnKCodeBuffer__v_; -text: .text%__1cQshrI_eReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvI2F_SSF_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIGraphKitIgen_stub6MpCpkciii_v_; -text: .text%__1cIciMethodVget_osr_flow_analysis6Mi_pnKciTypeFlow__; -text: .text%__1cLloadSSINodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cQmulD_reg_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cLResourceObj2n6FIn0APallocation_type__pv_; -text: .text%__1cMloadConFNodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cQmulD_reg_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cIAddFNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cINegDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSmulF24_reg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJlog2_long6Fx_i_: mulnode.o; -text: .text%__1cJAssemblerEsbbl6MpnMRegisterImpl_i_v_; -text: .text%__1cHnmethodbCcan_not_entrant_be_converted6M_i_; -text: .text%__1cMStartOSRNodeKosr_domain6F_pknJTypeTuple__; -text: .text%__1cNCallGeneratorHfor_osr6FpnIciMethod_i_p0_; -text: .text%__1cINegFNodeGOpcode6kM_i_; -text: .text%__1cQorl_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVeADXRegL_low_onlyOperFclone6kM_pnIMachOper__; -text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_; -text: .text%__1cKimmL32OperFclone6kM_pnIMachOper__; -text: .text%__1cLOptoRuntimeNgenerate_stub6FpnFciEnv_pF_pknITypeFunc_pCpkciiii_8_; -text: .text%__1cVloadConL_low_onlyNodeFclone6kM_pnENode__; -text: .text%__1cHciKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cFParseWload_interpreter_state6MpnENode_2_v_; -text: .text%__1cVMoveL2D_reg_stackNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMStartOSRNodeScalling_convention6kMpnLRegPair_I_v_; -text: .text%__1cPconvI2D_regNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cTshlL_eReg_32_63NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cFStateO_sub_Op_StoreD6MpknENode__v_; -text: .text%__1cPmovI_nocopyNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsYis_supported_jni_version6Fi_C_; -text: .text%__1cFStateM_sub_Op_ConF6MpknENode__v_; -text: .text%__1cNcmovI_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cKConv2BNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJLoadLNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pC22i_v_; -text: .text%__1cNcmovI_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cKarrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cIci2bNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSdivD_reg_roundNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cWroundFloat_mem_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cOmulF24_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcompiledVFrameHraw_bci6kM_i_; -text: .text%__1cFTypeFFxdual6kM_pknEType__; -text: .text%__1cODeoptimizationbJupdate_method_data_from_interpreter6FnQmethodDataHandle_ii_v_; -text: .text%__1cOcompiledVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cSvframeArrayElementHfill_in6MpnOcompiledVFrame__v_; -text: .text%__1cRComputeEntryStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cTcmovII_reg_LTGENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQorI_eReg_memNodeFreloc6kM_i_; -text: .text%__1cFframebHinterpreter_frame_set_monitor_end6MpnPBasicObjectLock__v_; -text: .text%__1cOstoreF_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvF2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cPmovP_nocopyNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cFframebBinterpreter_frame_sender_sp6kM_pi_; -text: .text%__1cNcmovL_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cTAbstractInterpreterPsize_activation6FpnNmethodOopDesc_iiiii_i_; -text: .text%__1cJScopeDescImonitors6M_pnNGrowableArray4CpnMMonitorValue____; -text: .text%__1cJScopeDescLexpressions6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cJScopeDescGlocals6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cJScopeDescVdecode_monitor_values6Mi_pnNGrowableArray4CpnMMonitorValue____; -text: .text%__1cOcompiledVFrameGlocals6kM_pnUStackValueCollection__; -text: .text%__1cOcompiledVFrameLexpressions6kM_pnUStackValueCollection__; -text: .text%__1cTcmovII_reg_EQdDNENodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cSvframeArrayElementPunpack_on_stack6MiipnFframe_ii_v_; -text: .text%__1cTconvD2I_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFframebCinterpreter_frame_set_locals6Mpi_v_; -text: .text%__1cFframebCinterpreter_frame_set_method6MpnNmethodOopDesc__v_; -text: .text%__1cTAbstractInterpreterQcontinuation_for6FpnNmethodOopDesc_pCiiri_3_; -text: .text%__1cTAbstractInterpreterRTosState_as_index6FnITosState__i_; -text: .text%__1cTAbstractInterpreterRlayout_activation6FpnNmethodOopDesc_iiiipnFframe_4i_v_; -text: .text%__1cSvframeArrayElementNon_stack_size6kMiiii_i_; -text: .text%__1cSInterpreterRuntimeJnote_trap6FpnKJavaThread_ipnGThread__v_; -text: .text%__1cICmpFNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRmulI_imm_highNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcompiledVFrameImonitors6kM_pnNGrowableArray4CpnLMonitorInfo____; -text: .text%__1cRsubL_eReg_memNodeFreloc6kM_i_; -text: .text%__1cMTailJumpNodeKmatch_edge6kMI_I_; -text: .text%__1cFStateP_sub_Op_ConvF2D6MpknENode__v_; -text: .text%__1cCosNcommit_memory6FpcI_i_; -text: .text%__1cScompP_eReg_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cScompP_eReg_memNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cXpartialSubtypeCheckNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNdivL_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_; -text: .text%__1cFStateM_sub_Op_DivL6MpknENode__v_; -text: .text%__1cNsubL_eRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cLimmI_32OperIconstant6kM_i_: ad_i486_clone.o; -text: .text%__1cNTemplateTableLindex_check6FpnMRegisterImpl_2_v_; -text: .text%__1cKklassKlassMoop_is_klass6kM_i_: klassKlass.o; -text: .text%__1cSCompiledStaticCallMset_to_clean6M_v_; -text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; -text: .text%Unsafe_DefineClass1; -text: .text%JVM_GetComponentType; -text: .text%JVM_DefineClass; -text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; -text: .text%__1cNmodI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLOptoRuntimeNfetch_monitor6FipnJBasicLock_pC_pnHoopDesc__; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cLStrCompNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRaddD_reg_imm1NodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cNTemplateTableOpatch_bytecode6FnJBytecodesECode_pnMRegisterImpl_4i_v_; -text: .text%__1cJAssemblerGfrstor6MnHAddress__v_; -text: .text%JVM_GetCPFieldModifiers; -text: .text%__1cSUnsafe_DefineClass6FpnHJNIEnv__pnI_jstring_pnL_jbyteArray_iipnI_jobject_7_pnH_jclass__: unsafe.o; -text: .text%__1cJBasicLockHmove_to6MpnHoopDesc_p0_v_; -text: .text%__1cSObjectSynchronizerOinflate_helper6FpnHoopDesc__pnNObjectMonitor__: synchronizer.o; -text: .text%__1cSdivD_reg_roundNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvI2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNSharedRuntimebJcontinuation_for_implicit_exception6FpnKJavaThread_pCn0AVImplicitExceptionKind__3_; -text: .text%__1cKReflectionUarray_component_type6FpnHoopDesc_pnGThread__2_; -text: .text%__1cOsubF24_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvL2D_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLimmI_24OperJnum_edges6kM_I_: ad_i486_clone.o; -text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; -text: .text%__1cLloadSSDNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cKPSYoungGenKprecompact6M_v_; -text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; -text: .text%__1cKPSYoungGenPadjust_pointers6M_v_; -text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; -text: .text%__1cOstackSlotPOperFclone6kM_pnIMachOper__; -text: .text%__1cLPSMarkSweepRmark_sweep_phase26F_v_; -text: .text%__1cKPSYoungGenHcompact6M_v_; -text: .text%__1cLPSMarkSweepRmark_sweep_phase16Frii_v_; -text: .text%Unsafe_AllocateInstance; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceRefKlass.o; -text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; -text: .text%__1cLPSMarkSweepRmark_sweep_phase36F_v_; -text: .text%__1cRInlineCacheBufferSic_destination_for6FpnKCompiledIC__pC_; -text: .text%__1cLPSMarkSweepRmark_sweep_phase46F_v_; -text: .text%__1cPconvL2F_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; -text: .text%__1cLPSMarkSweepbAreset_millis_since_last_gc6F_v_; -text: .text%__1cUPSAdaptiveSizePolicyUmajor_collection_end6MInHGCCauseFCause__v_; -text: .text%__1cSDeoptimizationBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cMsubD_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJCodeCacheLgc_epilogue6F_v_; -text: .text%__1cJMarkSweepNrestore_marks6F_v_; -text: .text%__1cQUncommonTrapBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cNExceptionBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cJCodeCacheMdo_unloading6FpnRBoolObjectClosure_pnKOopClosure_iri_v_; -text: .text%__1cYinternal_word_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cJCodeCacheHoops_do6FpnKOopClosure__v_; -text: .text%__1cRCardTableModRefBSEis_a6MnKBarrierSetEName__i_: cardTableExtension.o; -text: .text%__1cMset_property6FnGHandle_pkc2pnGThread__v_: jvm.o; -text: .text%__1cJCodeCacheLgc_prologue6F_v_; -text: .text%__1cHBoxNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSReferenceProcessorPoops_do_statics6FpnKOopClosure__v_; -text: .text%__1cQorl_eReg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cLPSMarkSweepQinvoke_no_policy6Fpii_v_; -text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__: jni.o; -text: .text%__1cObox_handleNodeFclone6kM_pnENode__; -text: .text%__1cLPSMarkSweepPallocate_stacks6F_v_; -text: .text%jni_NewDirectByteBuffer; -text: .text%__1cMdivD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLPSMarkSweepRdeallocate_stacks6F_v_; -text: .text%__1cRInlineCacheBufferOinit_next_stub6F_v_; -text: .text%__1cKReflectionNinvoke_method6FpnHoopDesc_nGHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cMincI_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUPSAdaptiveSizePolicyWmajor_collection_begin6M_v_; -text: .text%__1cJMarkSweepMadjust_marks6F_v_; -text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_; -text: .text%__1cQSystemDictionaryMdo_unloading6FpnRBoolObjectClosure_pnKOopClosure__i_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: symbolKlass.o; -text: .text%__1cNmodL_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%jni_AllocObject: jni.o; -text: .text%__1cZInterpreterMacroAssemblerQtest_mdp_data_at6MpnMRegisterImpl_i2rnFLabel__v_; -text: .text%__1cPcmpFastLockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQSystemDictionaryYalways_strong_classes_do6FpnKOopClosure__v_; -text: .text%__1cVLoaderConstraintTableYpurge_loader_constraints6MpnRBoolObjectClosure__v_; -text: .text%__1cVLoaderConstraintTableYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cUPSMarkSweepDecoratorbIset_destination_decorator_perm_gen6F_v_; -text: .text%__1cFStateL_sub_Op_Box6MpknENode__v_; -text: .text%__1cUPSMarkSweepDecoratorbHset_destination_decorator_tenured6F_v_; -text: .text%JVM_InvokeMethod; -text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_; -text: .text%__1cSmulF24_reg_memNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cFKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: symbolKlass.o; -text: .text%__1cKDictionaryMdo_unloading6MpnRBoolObjectClosure_pnKOopClosure__i_; -text: .text%__1cHThreadsLnmethods_do6F_v_; -text: .text%__1cIPSOldGenKprecompact6M_v_; -text: .text%__1cHThreadsLgc_epilogue6F_v_; -text: .text%__1cHThreadsLgc_prologue6F_v_; -text: .text%__1cJPSPermGenQcompute_new_size6MI_v_; -text: .text%__1cXpartialSubtypeCheckNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cZInterpreterMacroAssemblerYprofile_not_taken_branch6MpnMRegisterImpl__v_; -text: .text%__1cHi2bNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQSystemDictionaryPplaceholders_do6FpnKOopClosure__v_; -text: .text%__1cFStateM_sub_Op_ModL6MpknENode__v_; -text: .text%__1cSaddF24_reg_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cJPSPermGenKprecompact6M_v_; -text: .text%__1cHi2bNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cTleaPIdxScaleOffNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFj_not6FnNTemplateTableJCondition__nJAssemblerJCondition__: templateTable_i486.o; -text: .text%__1cIciObjectTis_type_array_klass6M_i_: ciObjArrayKlass.o; -text: .text%__1cVMoveF2I_reg_stackNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cMincI_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_; -text: .text%__1cQaddD_reg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJCondition__v4_v_; -text: .text%__1cVMoveL2D_reg_stackNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cMincI_memNodeFreloc6kM_i_; -text: .text%__1cOaddF24_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovI_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKExceptionsNnew_exception6FpnGThread_pnNsymbolOopDesc_pkc_nGHandle__; -text: .text%__1cMnegF_regNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cJStubQdDueueMremove_first6Mi_v_; -text: .text%__1cSsarL_eReg_1_31NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadConL0NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%JVM_NewArray; -text: .text%__1cLConvF2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOcmpF_cc_P6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: objArrayKlass.o; -text: .text%__1cFStateM_sub_Op_MulF6MpknENode__v_; -text: .text%__1cTconvF2I_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTshlL_eReg_32_63NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJAssemblerFpopad6M_v_; -text: .text%__1cGThreadRis_Watcher_thread6kM_i_: thread.o; -text: .text%__1cNTemplateTableHconvert6F_v_; -text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; -text: .text%__1cSmulF24_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovI_memNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cRmethodDataOopDescRbci_to_extra_data6Mii_pnLProfileData__; -text: .text%__1cIDivDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTconvD2I_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNcmovI_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cIMulFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cFStateP_sub_Op_ConvD2I6MpknENode__v_; -text: .text%__1cLMoveF2INodeGOpcode6kM_i_; -text: .text%__1cPconvI2D_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJStubQdDueueKremove_all6M_v_; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: compiledICHolderKlass.o; -text: .text%__1cVVM_ParallelGCSystemGC2t6MI_v_; -text: .text%__1cOcmovI_regUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIregFOperFclone6kM_pnIMachOper__; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cLCastP2INodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%__1cPconvL2D_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cPmovP_nocopyNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cScompP_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; -text: .text%__1cJArgumentsQPropertyList_add6FppnOSystemProperty_2_v_; -text: .text%__1cSaddF24_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKoopFactoryUnew_compiledICHolder6FnMmethodHandle_nLKlassHandle_pnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cMciArrayKlassRbase_element_type6M_pnGciType__; -text: .text%__1cHCompileWget_MethodAccessorImpl6M_pnPciInstanceKlass__; -text: .text%__1cSInterpreterRuntimeQcreate_exception6FpnKJavaThread_pc3_v_; -text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%__1cSmulF24_reg_memNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cVcompiledICHolderKlassIallocate6MpnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cLTypeInstPtrOxmeet_unloaded6kMpk0_2_; -text: .text%__1cScompP_eReg_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cScompP_eReg_memNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cHCompileRget_Method_invoke6M_pnIciMethod__; -text: .text%__1cLPSMarkSweepGinvoke6Fpii_v_; -text: .text%JVM_GC; -text: .text%__1cVVM_ParallelGCSystemGCEdoit6M_v_; -text: .text%__1cXpartialSubtypeCheckNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLClassLoaderSget_system_package6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cWroundFloat_mem_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cQinitialize_class6FnMsymbolHandle_pnGThread__v_: thread.o; -text: .text%__1cKScopeValueLis_location6kM_i_: debugInfo.o; -text: .text%__1cVVM_ParallelGCSystemGCEname6kM_pkc_: vm_operations.o; -text: .text%__1cRfind_field_offset6FpnI_jobject_ipnGThread__i_; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: compiledICHolderKlass.o; -text: .text%__1cOLibraryCallKitbDis_method_invoke_or_aux_frame6MpnIJVMState__i_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; -text: .text%__1cFKlassMoop_is_klass6kM_i_: objArrayKlass.o; -text: .text%__1cIciObjectTis_type_array_klass6M_i_: ciInstanceKlass.o; -text: .text%__1cUParallelScavengeHeapHcollect6MnHGCCauseFCause__v_; -text: .text%JVM_GetSystemPackage; -text: .text%__1cLStatSamplerTget_system_property6FpkcpnGThread__2_; -text: .text%__1cPconvL2D_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cETypeJis_finite6kM_i_; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: compiledICHolderKlass.o; -text: .text%__1cXPartialSubtypeCheckNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSaddF24_reg_immNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cCosNcommit_memory6FpcII_i_; -text: .text%__1cOresolve_symbol6Fpkc_pC_: os_solaris.o; -text: .text%__1cLloadSSINodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: klassKlass.o; -text: .text%__1cNloadConL0NodeGis_Con6kM_I_: ad_i486_misc.o; -text: .text%__1cPMultiBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%JVM_RawMonitorCreate; -text: .text%__1cImulINodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cLas_TosState6FnJBasicType__nITosState__: interpreter.o; -text: .text%__1cQConstantIntValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cOLibraryCallKitXinline_string_compareTo6M_i_; -text: .text%__1cImulINodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cOMacroAssemblerVreset_last_Java_frame6MpnMRegisterImpl_i_v_; -text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_22pC_v_; -text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cSstring_compareNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cISubFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFStateP_sub_Op_StrComp6MpknENode__v_; -text: .text%__1cIcp2bNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cFStateP_sub_Op_ConvI2F6MpknENode__v_; -text: .text%__1cOMacroAssemblerPempty_FPU_stack6M_v_; -text: .text%jni_GetStringRegion: jni.o; -text: .text%__1cQConstantIntValuePis_constant_int6kM_i_: debugInfo.o; -text: .text%__1cICodeBlobZis_at_poll_or_poll_return6MpC_i_; -text: .text%__1cSmulF24_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQaddD_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceRefKlass.o; -text: .text%__1cIAddFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cHOrLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cScompP_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHBoxNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvL2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cLConvL2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cTcmovII_reg_EQdDNENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceRefKlass.o; -text: .text%__1cLvframeArrayPunpack_to_stack6MrnFframe_i_v_; -text: .text%__1cLvframeArrayZdeallocate_monitor_chunks6M_v_; -text: .text%__1cLvframeArrayHfill_in6MpnKJavaThread_ipnNGrowableArray4CpnOcompiledVFrame___pknLRegisterMap_i_v_; -text: .text%__1cLvframeArrayIallocate6FpnKJavaThread_ipnNGrowableArray4CpnOcompiledVFrame___pnLRegisterMap_nFframe_9A9A9A_p0_; -text: .text%__1cOstoreF_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVcompiledICHolderKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cNcmovI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cImulINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQsalL_eReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cMciArrayKlassOis_array_klass6M_i_: ciObjArrayKlass.o; -text: .text%__1cbCAbstractInterpreterGeneratorUset_wide_entry_point6MpnITemplate_rpC_v_; -text: .text%Unsafe_CompareAndSwapInt; -text: .text%__1cZInterpreterMacroAssemblerPset_mdp_data_at6MpnMRegisterImpl_i2_v_; -text: .text%__1cRsubI_eReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cICodeBlobYcaller_must_gc_arguments6kMpnKJavaThread__i_: codeBlob.o; -text: .text%__1cQsalL_eReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMsubD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYcmpL_zero_flags_LTGENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cODeoptimizationLUnrollBlock2t6MiiiiipippCnJBasicType__v_; -text: .text%__1cNTemplateTableRlocals_index_wide6FpnMRegisterImpl__v_; -text: .text%__1cKstorePNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvL2F_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cMloadConDNodeGis_Con6kM_I_: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_LEGTNodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cSmulF24_reg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cCosHSolarisVcleanup_interruptible6FpnKJavaThread__v_; -text: .text%__1cCosHSolarisTsetup_interruptible6F_pnKJavaThread__; -text: .text%__1cQmulI_mem_immNodeFreloc6kM_i_; -text: .text%__1cJloadFNodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_Sleep; -text: .text%JVM_Lseek; -text: .text%__1cNnmethodLocker2t6MpC_v_; -text: .text%__1cRmulI_eReg_immNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cNTemplateTableQvolatile_barrier6F_v_; -text: .text%__1cHnmethodVmark_as_seen_on_stack6M_v_; -text: .text%__1cMmatch_option6FpknMJavaVMOption_ppkc5i_i_: arguments.o; -text: .text%__1cQmulD_reg_immNodeKconst_size6kM_i_: ad_i486_misc.o; -text: .text%__1cKVtableStubSpd_code_size_limit6Fi_i_; -text: .text%__1cMdivD_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; -text: .text%__1cQmulD_reg_immNodeFreloc6kM_i_; -text: .text%__1cODeoptimizationRlast_frame_adjust6Fii_i_; -text: .text%__1cFParseQdo_monitor_enter6M_v_; -text: .text%__1cCosHSolarisTsetup_interruptible6FpnKJavaThread__v_; -text: .text%__1cODeoptimizationScreate_vframeArray6FpnKJavaThread_nFframe_pnLRegisterMap__pnLvframeArray__; -text: .text%__1cLConvF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRaddI_mem_eRegNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cODeoptimizationNuncommon_trap6FpnKJavaThread_i_pn0ALUnrollBlock__; -text: .text%__1cODeoptimizationTuncommon_trap_inner6FpnKJavaThread_i_v_; -text: .text%__1cNcmovL_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cPBytecode_invokeIis_valid6kM_i_: deoptimization.o; -text: .text%__1cODeoptimizationRgather_statistics6Fn0ALDeoptReason_n0ALDeoptAction_nJBytecodesECode__v_; -text: .text%__1cIcp2bNodeMideal_Opcode6kM_i_: ad_i486_misc.o; -text: .text%__1cODeoptimizationPget_method_data6FpnKJavaThread_nMmethodHandle_i_pnRmethodDataOopDesc__; -text: .text%__1cODeoptimizationNunpack_frames6FpnKJavaThread_i_nJBasicType__; -text: .text%__1cIci2bNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRaddL_eReg_memNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cODeoptimizationYfetch_unroll_info_helper6FpnKJavaThread__pn0ALUnrollBlock__; -text: .text%__1cOMacroAssemblerFenter6M_v_; -text: .text%Unsafe_GetNativeByte; -text: .text%__1cOMacroAssemblerNpop_FPU_state6M_v_; -text: .text%__1cTsarL_eReg_32_63NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cPconvL2F_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQmulD_reg_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_: interpreterRuntime.o; -text: .text%__1cFTypeFGis_nan6kM_i_; -text: .text%__1cSaddF24_reg_memNodeMcisc_operand6kM_i_: ad_i486_misc.o; -text: .text%__1cKCMoveLNodeGOpcode6kM_i_; -text: .text%JVM_NanoTime; -text: .text%__1cIXorINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cFParseOdo_tableswitch6M_v_; -text: .text%__1cCosNjavaTimeNanos6F_x_; -text: .text%__1cETypeEmake6Fn0AFTYPES__pk0_; -text: .text%__1cVMoveF2I_reg_stackNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cJAssemblerFpushl6MnHAddress__v_; -text: .text%jni_GetEnv; -text: .text%__1cUBytecode_tableswitchGlength6M_i_: methodLiveness.o; -text: .text%__1cKstoreCNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cGICStubFclear6M_v_; -text: .text%__1cODeoptimizationLUnrollBlock2T6M_v_; -text: .text%__1cOMacroAssemblerWbang_stack_with_offset6Mi_v_: interp_masm_i486.o; -text: .text%__1cGciType2t6MnJBasicType__v_; -text: .text%__1cKstoreDNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRComputeEntryStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cMloadConFNodeFreloc6kM_i_; -text: .text%__1cFKlassPoop_is_instance6kM_i_: objArrayKlassKlass.o; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCi_v_; -text: .text%__1cHTypePtrKadd_offset6kMi_pk0_; -text: .text%__1cMorI_eRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cFStateP_sub_Op_ConvI2D6MpknENode__v_; -text: .text%__1cJAssemblerEmovw6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cQshrL_eReg_CLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIimmFOperFclone6kM_pnIMachOper__; -text: .text%__1cFKlassMoop_is_array6kM_i_: objArrayKlassKlass.o; -text: .text%__1cFStateM_sub_Op_AddF6MpknENode__v_; -text: .text%__1cOcompI_eRegNodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cMloadConFNodeFclone6kM_pnENode__; -text: .text%__1cTconvI2F_SSF_memNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cParrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%jint_cmp: parse2.o; -text: .text%__1cJAssemblerExorl6MpnMRegisterImpl_i_v_; -text: .text%__1cPBytecode_invokeLresult_type6kMpnGThread__nJBasicType__; -text: .text%jni_CallVoidMethod: jni.o; -text: .text%__1cOsubF24_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOstoreF_immNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cENodeHis_Call6M_pnICallNode__: machnode.o; -text: .text%__1cLloadSSINodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cLloadSSINodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; -text: .text%__1cRStubCodeGeneratorLstub_prolog6MpnMStubCodeDesc__v_; -text: .text%__1cMnegF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMloadConFNodeKconst_size6kM_i_: ad_i486_misc.o; -text: .text%Unsafe_GetNativeFloat; -text: .text%__1cKstoreDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSaddD_reg_roundNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRaddI_eReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWroundFloat_mem_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_; -text: .text%__1cPmovP_nocopyNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: callnode.o; -text: .text%__1cOsubF24_regNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLMoveL2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNstoreImmPNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cMStubCodeMark2T6M_v_; -text: .text%__1cRSignatureIteratorHiterate6M_v_; -text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; -text: .text%__1cFStateO_sub_Op_CMoveP6MpknENode__v_; -text: .text%__1cOcmovI_regUNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cRaddD_reg_imm1NodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cPmovI_nocopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJAssemblerFfwait6M_v_; -text: .text%__1cJAssemblerKrepne_scan6M_v_; -text: .text%__1cPjava_lang_ClassYcreate_basic_type_mirror6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cPmovP_nocopyNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cNRegisterSaverWrestore_live_registers6FpnOMacroAssembler__v_; -text: .text%__1cRandL_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNcmovL_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cZInterpreterMacroAssemblerRremove_activation6MnITosState_pnMRegisterImpl_iii_v_; -text: .text%__1cImulINodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cImulINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSaddF24_reg_memNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cImulINodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cJname2type6Fpkc_nJBasicType__; -text: .text%__1cOcmpF_cc_P6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbCAbstractInterpreterGeneratorZgenerate_continuation_for6MnITosState__pC_; -text: .text%__1cLvframeArrayRregister_location6kMi_pC_; -text: .text%JVM_FindPrimitiveClass; -text: .text%__1cFKlassMoop_is_klass6kM_i_: constantPoolKlass.o; -text: .text%__1cVis_positive_one_float6Ff_i_; -text: .text%__1cRaddI_mem_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmulF24_reg_memNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cSdivD_reg_roundNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cSaddF24_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbCAbstractInterpreterGeneratorZgenerate_safept_entry_for6MnITosState_pC_2_; -text: .text%__1cSaddF24_reg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cIDivINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSstoreD_roundedNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMdivD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMmulD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIAddDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNRelocIterator2t6MpnKCodeBuffer_pC3_v_; -text: .text%__1cFStateO_sub_Op_LoadPC6MpknENode__v_; -text: .text%__1cJAssemblerGmovsxb6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cSmulF24_reg_memNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cJCmpF3NodeGOpcode6kM_i_; -text: .text%__1cIAddDNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cXcmpL_reg_flags_LTGENodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cHMulNodeGis_Mul6kM_pk0_: classes.o; -text: .text%__1cJAssemblerFtestb6MpnMRegisterImpl_i_v_; -text: .text%__1cIGraphKitSgen_native_wrapper6MpnIciMethod__v_; -text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; -text: .text%__1cOmulIS_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNtestI_regNodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%Unsafe_StaticFieldBaseFromField; -text: .text%__1cSaddF24_reg_memNodeRis_cisc_alternate6kM_i_: ad_i486_misc.o; -text: .text%__1cOsubF24_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_; -text: .text%__1cKLoadPCNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_; -text: .text%__1cXpartialSubtypeCheckNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%Unsafe_StaticFieldOffset; -text: .text%__1cVMoveL2D_reg_stackNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cNTemplateTableXresolve_cache_and_index6FipnMRegisterImpl_2_v_; -text: .text%__1cKdirectOperJnum_edges6kM_I_: ad_i486_clone.o; -text: .text%Unsafe_GetObjectVolatile; -text: .text%__1cHnmethodFflush6M_v_; -text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; -text: .text%__1cTconvI2F_SSF_memNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cICodeBlobFflush6M_v_; -text: .text%__1cJAssemblerMemit_arith_b6MiipnMRegisterImpl_i_v_; -text: .text%__1cFTypeFFempty6kM_i_; -text: .text%__1cKdirectOperNconstant_disp6kM_i_: ad_i486_clone.o; -text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cNReservedSpace2t6MpcI_v_; -text: .text%__1cNaddP_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJEventMark2t6MpkcE_v_: nmethod.o; -text: .text%__1cIMachOperNbase_position6kM_i_; -text: .text%__1cQorl_eReg_immNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvL2F_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cPconvL2F_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cWroundFloat_mem_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cYinternal_word_RelocationMforce_target6MpC_v_: relocInfo.o; -text: .text%__1cQmulD_reg_memNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cZInterpreterMacroAssemblerGf2ieee6M_v_; -text: .text%__1cQmulD_reg_memNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cFVTuneOdelete_nmethod6FpnHnmethod__v_; -text: .text%__1cPconvL2D_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIMachOperMdisp_as_type6kM_pknHTypePtr__: ad_i486_clone.o; -text: .text%Unsafe_EnsureClassInitialized; -text: .text%__1cFStateS_sub_Op_CallNative6MpknENode__v_; -text: .text%__1cIciSymbolHas_utf86M_pkc_; -text: .text%__1cOtypeArrayKlassNexternal_name6FnJBasicType__pkc_; -text: .text%__1cENodeHdel_out6Mp0_v_: connode.o; -text: .text%JVM_GetClassContext; -text: .text%__1cPPerfDataManagerWcreate_string_variable6FnJCounterNS_pkci3pnGThread__pnSPerfStringVariable__; -text: .text%__1cOtypeArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlass.o; -text: .text%__1cIciMethodMnative_entry6M_pC_; -text: .text%__1cNdivI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJAssemblerHfincstp6M_v_; -text: .text%__1cZInterpreterMacroAssemblerSnotify_method_exit6MnITosState__v_; -text: .text%__1cETypeFxdual6kM_pk0_; -text: .text%__1cQorI_eReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOMacroAssemblerEfpop6M_v_; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_: typeArrayKlass.o; -text: .text%__1cOtypeArrayKlassMcreate_klass6FnJBasicType_ipnGThread__pnMklassOopDesc__; -text: .text%__1cLlog2_intptr6Fi_i_: typeArrayKlass.o; -text: .text%__1cLOptoRuntimeTmultianewarray_Type6Fi_pknITypeFunc__; -text: .text%__1cHCompile2t6MpnFciEnv_pnKC2Compiler_pnIciMethod__v_; -text: .text%__1cQAbstractCompilerPsupports_native6M_i_: c2compiler.o; -text: .text%__1cOGenerateOopMapGdo_jsr6Mi_v_; -text: .text%__1cZInterpreterMacroAssemblerbGget_unsigned_2_byte_index_at_bcp6MpnMRegisterImpl_i_v_; -text: .text%__1cSaddF24_reg_immNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cIAddDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cbCAbstractInterpreterGeneratorbBgenerate_result_handler_for6MnJBasicType__pC_; -text: .text%__1cOMacroAssemblerOpush_FPU_state6M_v_; -text: .text%__1cZInterpreterMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cZInterpreterMacroAssemblerGd2ieee6M_v_; -text: .text%jni_RegisterNatives: jni.o; -text: .text%__1cSmulF24_reg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSaddF24_reg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%JVM_GetClassDeclaredFields; -text: .text%stat: os_solaris.o; -text: .text%JVM_IsSameClassPackage; -text: .text%__1cWroundFloat_mem_regNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cCosMuser_handler6F_pv_; -text: .text%__1cLConvF2INodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cLClassLoaderbCupdate_class_path_entry_list6Fpkc_v_; -text: .text%__1cOcmovI_regUNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cJArgumentsRverify_percentage6FIpkc_i_; -text: .text%jni_SetStaticObjectField: jni.o; -text: .text%__1cNTemplateTableGiconst6Fi_v_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cFStateM_sub_Op_AddD6MpknENode__v_; -text: .text%__1cLConvD2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJAssemblerEcall6MpnMRegisterImpl_nJrelocInfoJrelocType__v_; -text: .text%__1cRComputeEntryStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cFTypeFJis_finite6kM_i_; -text: .text%__1cCosEstat6FpkcpnEstat__i_; -text: .text%__1cLOptoRuntimeRresolve_call_Type6F_pknITypeFunc__; -text: .text%__1cCosHSolarisSset_signal_handler6Fiii_v_; -text: .text%__1cOPhaseIdealLoopTdo_maximally_unroll6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkci_pc_; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_2_v_; -text: .text%__1cNMemoryManagerIadd_pool6MpnKMemoryPool__v_; -text: .text%__1cSaddF24_reg_memNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cJAssemblerGfnsave6MnHAddress__v_; -text: .text%__1cVMoveF2I_reg_stackNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cMdecI_memNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKMemoryPoolLadd_manager6MpnNMemoryManager__v_; -text: .text%__1cJloadDNodeFreloc6kM_i_; -text: .text%__1cSObjectSynchronizerIjni_exit6FpnHoopDesc_pnGThread__v_; -text: .text%__1cMloadConLNodeGis_Con6kM_I_: ad_i486_misc.o; -text: .text%__1cSObjectSynchronizerJjni_enter6FnGHandle_pnGThread__v_; -text: .text%__1cSaddF24_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMloadConFNodeGis_Con6kM_I_: ad_i486_misc.o; -text: .text%__1cISubDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cLloadSSINodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cISubDNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cQorl_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_MonitorExit: jni.o; -text: .text%__1cNTemplateTableHif_0cmp6Fn0AJCondition__v_; -text: .text%jni_MonitorEnter: jni.o; -text: .text%__1cSaddD_reg_roundNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvL2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNTemplateTableHif_icmp6Fn0AJCondition__v_; -text: .text%__1cKReturnNodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%__1cPcheckCastPPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFframebFset_interpreter_frame_sender_sp6Mpi_v_; -text: .text%__1cRmulI_eReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovI_regUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cULinearLeastSquareFit2t6MI_v_; -text: .text%__1cNTemplateTableH_return6FnITosState__v_; -text: .text%__1cOMacroAssemblerEfcmp6MpnMRegisterImpl__v_; -text: .text%__1cMTailJumpNodeGOpcode6kM_i_; -text: .text%__1cOsubF24_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWroundFloat_mem_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle_pnIciSymbol__v_; -text: .text%jni_GetJavaVM; -text: .text%__1cHciKlassIis_klass6M_i_: ciInstanceKlass.o; -text: .text%__1cLConvL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJOopMapSetQsingular_oop_map6M_pnGOopMap__; -text: .text%__1cSaddF24_reg_memNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLConvF2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cTconvI2F_SSF_memNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cTconvI2F_SSF_memNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cCosZvm_allocation_granularity6F_i_; -text: .text%__1cNReservedSpaceKinitialize6MIIipc_v_; -text: .text%JVM_LoadLibrary; -text: .text%__1cCosOreserve_memory6FIpc_1_; -text: .text%JVM_IsSupportedJNIVersion; -text: .text%__1cOstoreF_immNodeFreloc6kM_i_; -text: .text%__1cVMoveF2I_reg_stackNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_pnUPerfLongSampleHelper__v_; -text: .text%__1cNmulI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJAssemblerGfild_d6MnHAddress__v_; -text: .text%__1cRmulI_imm_highNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJAssemblerGmovsxw6MpnMRegisterImpl_nHAddress__v_; -text: .text%Unsafe_ObjectFieldOffset; -text: .text%__1cIcp2bNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cRaddL_eReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIcp2bNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_EQdDNENodeHsize_of6kM_I_: ad_i486_misc.o; -text: .text%__1cJAssemblerEincl6MnHAddress__v_; -text: .text%__1cXpartialSubtypeCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPmovP_nocopyNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cVMoveL2D_reg_stackNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cCosHSolarisOis_sig_ignored6Fi_i_; -text: .text%__1cRaddI_mem_eRegNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOLibraryCallKitbNinline_native_Reflection_getCallerClass6M_i_; -text: .text%__1cOMacroAssemblerQload_signed_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cOLibraryCallKitZinline_native_Class_query6MnIciMethodLIntrinsicId__i_; -text: .text%__1cOstoreF_immNodeKconst_size6kM_i_: ad_i486_misc.o; -text: .text%__1cPconvL2D_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKciTypeFlowLStateVectorOdo_null_assert6MpnHciKlass__v_; -text: .text%__1cPconvL2F_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIci2bNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cXcmpL_reg_flags_LEGTNodeFclone6kM_pnENode__; -text: .text%__1cJMemRegion2t6M_v_: cardTableModRefBS.o; -text: .text%__1cQmulD_reg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerHfucomip6Mi_v_; -text: .text%__1cTGeneratePairingInfoOreport_results6kM_i_: ciMethod.o; -text: .text%__1cFciEnvbNArrayIndexOutOfBoundsException_instance6M_pnKciInstance__; -text: .text%__1cRsalI_eReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%jni_SetObjectField: jni.o; -text: .text%Unsafe_AllocateMemory; -text: .text%__1cNSharedRuntimeVhandle_ic_miss_helper6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cENodeMis_SafePoint6M_pnNSafePointNode__: callnode.o; -text: .text%__1cTconvI2F_SSF_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMelapsedTimer2t6M_v_: methodLiveness.o; -text: .text%__1cISubDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvI2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvF2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKMemoryPool2t6Mpkcn0AIPoolType_IIii_v_; -text: .text%__1cRaddD_reg_imm1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cCosHSolarisOset_mpss_range6FpcII_i_; -text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_; -text: .text%__1cPciInstanceKlassbDcompute_shared_is_initialized6M_i_; -text: .text%jni_Throw: jni.o; -text: .text%__1cNSpaceCounters2t6MpkciIpnMMutableSpace_pnSGenerationCounters__v_; -text: .text%__1cOPSVirtualSpaceJexpand_by6MI_i_; -text: .text%__1cSaddF24_reg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableFaload6Fi_v_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_int_field06FnJBasicType__pC_; -text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_; -text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; -text: .text%__1cPmovP_nocopyNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableEdop26Fn0AJOperation__v_; -text: .text%__1cIcp2bNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLklassVtableTis_miranda_entry_at6Mi_i_; -text: .text%__1cHnmethodbJcontinuation_for_implicit_exception6MpC_1_; -text: .text%__1cLVtableStubsIcontains6FpC_i_; -text: .text%__1cWImplicitExceptionTable2t6MpknHnmethod__v_; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__; -text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_; -text: .text%__1cOMacroAssemblerQload_signed_word6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cNdivI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cXNativeSignatureIteratorLpass_double6M_v_: interpreterRuntime.o; -text: .text%__1cLVtableStubsPstub_containing6FpC_pnKVtableStub__; -text: .text%__1cOtailjmpIndNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; -text: .text%__1cFStateP_sub_Op_ConvF2I6MpknENode__v_; -text: .text%__1cODeoptimizationYreset_invocation_counter6FpnJScopeDesc_i_v_; -text: .text%__1cQshrL_eReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvF2I_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cXNativeSignatureIteratorJdo_double6M_v_: interpreterRuntime.o; -text: .text%__1cOcompI_eRegNodeFclone6kM_pnENode__; -text: .text%__1cZInterpreterMacroAssemblerNsuper_call_VM6MpnMRegisterImpl_2pC22_v_; -text: .text%__1cLVtableStubsLcreate_stub6FiipnNmethodOopDesc__pC_; -text: .text%__1cbCAbstractInterpreterGeneratorXbang_stack_shadow_pages6Mi_v_; -text: .text%__1cNCellTypeStateImake_any6Fi_0_: generateOopMap.o; -text: .text%__1cJAssemblerEmovb6MnHAddress_i_v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_; -text: .text%__1cNRegisterSaverTsave_live_registers6FpnOMacroAssembler_ipi_pnGOopMap__; -text: .text%__1cTshlL_eReg_32_63NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cWImplicitExceptionTableCat6kMI_I_; -text: .text%__1cQshrL_eReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLVtableStubsGlookup6Fiii_pnKVtableStub__; -text: .text%__1cSsarL_eReg_1_31NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNReservedSpaceKfirst_part6MIii_0_; -text: .text%__1cJAssemblerFfinit6M_v_; -text: .text%__1cLVtableStubsOis_entry_point6FpC_i_; -text: .text%__1cFParseRjump_if_true_fork6MpnGIfNode_ii_v_; -text: .text%__1cKVtableStubRpd_code_alignment6F_i_; -text: .text%__1cENodeHis_AddP6M_pnIAddPNode__: subnode.o; -text: .text%__1cUInterpreterGeneratorUgenerate_fixed_frame6Mi_v_; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerSstore_check_part_26MpnMRegisterImpl__v_; -text: .text%__1cPBytecode_invokeIis_valid6kM_i_: frame.o; -text: .text%__1cNStubGeneratorYgenerate_throw_exception6MpkcpCi_3_: stubGenerator_i486.o; -text: .text%__1cGEventsDlog6FpkcE_v_: compiledIC.o; -text: .text%__1cLOptoRuntimebBhandle_wrong_method_ic_miss6FpnKJavaThread__pC_; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2t6M_v_; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_; -text: .text%__1cNReservedSpace2t6MI_v_; -text: .text%__1cVMoveF2I_reg_stackNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cODeoptimizationZtrap_state_set_recompiled6Fii_i_; -text: .text%__1cINegFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSmulF24_reg_immNodeFreloc6kM_i_; -text: .text%__1cLloadSSINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMacroAssemblerSstore_check_part_16MpnMRegisterImpl__v_; -text: .text%__1cKCompiledICOis_megamorphic6kM_i_; -text: .text%__1cUInterpreterGeneratorbAgenerate_run_compiled_code6M_v_; -text: .text%__1cUInterpreterGeneratorZgenerate_counter_overflow6MpC_v_; -text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_; -text: .text%__1cIDivDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; -text: .text%JVM_GetLastErrorString; -text: .text%__1cIDivDNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cZInterpreterMacroAssemblerTnotify_method_entry6M_v_; -text: .text%__1cSmulF24_reg_immNodeKconst_size6kM_i_: ad_i486_misc.o; -text: .text%__1cFStateM_sub_Op_DivD6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_DivI6MpknENode__v_; -text: .text%__1cRComputeEntryStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cINegDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNTemplateTableGdstore6Fi_v_; -text: .text%__1cNTemplateTableFdload6Fi_v_; -text: .text%__1cNTemplateTableOprepare_invoke6FpnMRegisterImpl_2inJBytecodesECode__v_; -text: .text%__1cLConvD2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNTemplateTableGlstore6Fi_v_; -text: .text%__1cOcompP_eRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cNTemplateTableGfstore6Fi_v_; -text: .text%__1cNTemplateTableGastore6Fi_v_; -text: .text%__1cKConv2BNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNGCTaskManagerGthread6MI_pnMGCTaskThread__; -text: .text%__1cPdouble_quadword6Fpxxx_0_: ad_i486.o; -text: .text%__1cFStateM_sub_Op_SubD6MpknENode__v_; -text: .text%__1cNTemplateTableZload_field_cp_cache_entry6FipnMRegisterImpl_22i_v_; -text: .text%__1cSmulF24_reg_memNodeFreloc6kM_i_; -text: .text%__1cScompP_eReg_memNodeFreloc6kM_i_; -text: .text%__1cLMoveL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNTemplateTablebAload_invoke_cp_cache_entry6FipnMRegisterImpl_22ii_v_; -text: .text%__1cFStateM_sub_Op_NegD6MpknENode__v_; -text: .text%__1cGThreadMis_VM_thread6kM_i_: gcTaskThread.o; -text: .text%__1cJlog2_long6Fx_i_: divnode.o; -text: .text%__1cMelapsedTimer2t6M_v_: compileBroker.o; -text: .text%__1cNcmovI_regNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cQaddD_reg_immNodeFreloc6kM_i_; -text: .text%__1cIRetTableHadd_jsr6Mii_v_; -text: .text%__1cNTemplateTableFfload6Fi_v_; -text: .text%__1cNTemplateTableFlload6Fi_v_; -text: .text%__1cNcmovI_memNodeFreloc6kM_i_; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: unsafe.o; -text: .text%__1cPaddress_of_flag6FnXCommandLineFlagWithType__pnEFlag__: globals.o; -text: .text%__1cNTemplateTableFiload6Fi_v_; -text: .text%__1cOGenerateOopMapTret_jump_targets_do6MpnOBytecodeStream_pFp0ipi_vi4_v_; -text: .text%__1cNdivI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cImulINodeFreloc6kM_i_; -text: .text%__1cNmulI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFStateO_sub_Op_Conv2B6MpknENode__v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fii_v_; -text: .text%__1cIRetTableUfind_jsrs_for_target6Mi_pnNRetTableEntry__; -text: .text%__1cNmulI_eRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cNTemplateTableGistore6Fi_v_; -text: .text%__1cRClassPathZipEntry2t6Mppvpc_v_; -text: .text%__1cLClassLoaderXcreate_class_path_entry6FpcnEstat_ppnOClassPathEntry__v_; -text: .text%__1cLClassLoaderLadd_to_list6FpnOClassPathEntry__v_; -text: .text%__1cOLibraryCallKitbBinline_native_currentThread6M_i_; -text: .text%__1cOLibraryCallKitXgenerate_current_thread6MrpnENode__2_; -text: .text%__1cTconvI2F_SSF_memNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cQaddD_reg_immNodeKconst_size6kM_i_: ad_i486_misc.o; -text: .text%__1cLClassLoaderSget_canonical_path6Fpc1i_i_; -text: .text%__1cSmembar_acquireNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMstoreSSINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRaddD_reg_imm1NodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerEcmpb6MnHAddress_i_v_; -text: .text%__1cINegDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJAssemblerEdecl6MnHAddress__v_; -text: .text%__1cOstackSlotFOperFclone6kM_pnIMachOper__; -text: .text%__1cSaddF24_reg_memNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cCosGsignal6Fipv_1_; -text: .text%__1cOtypeArrayKlassQarray_klass_impl6MipnGThread__pnMklassOopDesc__; -text: .text%jni_CallStaticObjectMethod: jni.o; -text: .text%__1cMNativeLookupNlong_jni_name6FnMmethodHandle__pc_; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: instanceRefKlass.o; -text: .text%__1cZInterpreterMacroAssemblerRprofile_checkcast6MipnMRegisterImpl__v_; -text: .text%__1cHRetNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQmulD_reg_memNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cOcompP_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMPerfDataList2T6M_v_; -text: .text%__1cHRetNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_LTGENodeFclone6kM_pnENode__; -text: .text%__1cNtestI_regNodeFclone6kM_pnENode__; -text: .text%__1cOClassPathEntry2t6M_v_; -text: .text%__1cVMoveF2I_reg_stackNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; -text: .text%Unsafe_SetMemory; -text: .text%__1cRaddL_eReg_memNodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cRaddL_eReg_memNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIcp2bNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cFciEnvOrecord_failure6Mpkc_v_; -text: .text%__1cNcmovL_regNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cbCAbstractInterpreterGeneratorbHgenerate_exception_handler_common6Mpkc2i_pC_; -text: .text%__1cENodeHdel_out6Mp0_v_: ifg.o; -text: .text%__1cJAssemblerEfld16M_v_; -text: .text%__1cSmembar_acquireNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cJAssemblerFfld_x6MnHAddress__v_; -text: .text%__1cLConvD2FNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJAssemblerHfistp_d6MnHAddress__v_; -text: .text%__1cKstoreFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJAssemblerFimull6MpnMRegisterImpl_2_v_; -text: .text%__1cRInvocationCounterDdef6Fn0AFState_ipFnMmethodHandle_pnGThread__pC_v_; -text: .text%__1cOMacroAssemblerIfcmp2int6MpnMRegisterImpl_i_v_; -text: .text%__1cFciEnvXget_or_create_exception6MrpnI_jobject_nMsymbolHandle__pnKciInstance__; -text: .text%__1cMPerfDataList2t6Mi_v_; -text: .text%__1cLloadSSINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLVtableStubsScreate_vtable_stub6Fii_pnKVtableStub__; -text: .text%__1cRaddI_mem_eRegNodeFreloc6kM_i_; -text: .text%__1cUInterpreterGeneratorTgenerate_math_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cMLinkResolverbBlookup_method_in_interfaces6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cCosFyield6F_v_; -text: .text%__1cOCompilerThreadbCis_hidden_from_external_view6kM_i_: thread.o; -text: .text%__1cRComputeEntryStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cIDivFNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cSCardTableExtensionVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cSCardTableExtensionbEresize_covered_region_by_start6MnJMemRegion__v_; -text: .text%__1cJArgumentsMbuild_string6Fppcpkc_v_; -text: .text%__1cJArgumentsObuild_jvm_args6Fpkc_v_; -text: .text%__1cJArgumentsMadd_property6Fpkc_i_; -text: .text%__1cJAssemblerFfmulp6Mi_v_; -text: .text%__1cUInterpreterGeneratorbEgenerate_asm_interpreter_entry6Mi_pC_; -text: .text%__1cIciObjectOis_null_object6kM_i_: ciInstanceKlass.o; -text: .text%__1cZInterpreterMacroAssemblerUprofile_virtual_call6MpnMRegisterImpl_22_v_; -text: .text%__1cNcmovL_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_22_v_; -text: .text%__1cRaddI_mem_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_FindSignal; -text: .text%__1cKVtableStub2n6FIi_pv_; -text: .text%__1cSInterpreterRuntimebKthrow_ArrayIndexOutOfBoundsException6FpnKJavaThread_pci_v_; -text: .text%__1cOGenerateOopMapRdo_multianewarray6Mii_v_; -text: .text%__1cXNativeSignatureIteratorIdo_float6M_v_: interpreterRuntime.o; -text: .text%__1cLOptoRuntimeVgenerate_handler_blob6FpCi_pnNSafepointBlob__; -text: .text%JVM_RegisterSignal; -text: .text%__1cFParsePdo_lookupswitch6M_v_; -text: .text%__1cSaddF24_reg_memNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; -text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_2_v_; -text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; -text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%__1cOcmpF_cc_P6NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJAssemblerEcdql6M_v_; -text: .text%__1cMVM_OperationNdoit_prologue6M_i_: vm_operations.o; -text: .text%__1cUInterpreterGeneratorbDgenerate_stack_overflow_check6M_v_; -text: .text%__1cUInterpreterGeneratorXcheck_for_compiled_code6MrnFLabel__v_; -text: .text%__1cRCardTableModRefBSbCfind_covering_region_by_base6MpnIHeapWord__i_; -text: .text%__1cIci2bNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cRCardTableModRefBSbAlargest_prev_committed_end6kMi_pnIHeapWord__; -text: .text%__1cMSysClassPathNreset_item_at6Mi_v_: arguments.o; -text: .text%__1cLconvI2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cFStateM_sub_Op_CmpF6MpknENode__v_; -text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cOLibraryCallKitVinline_fp_conversions6MnIciMethodLIntrinsicId__i_; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cHCompilePget_invoke_name6M_pnIciSymbol__; -text: .text%__1cFParseRdo_multianewarray6M_v_; -text: .text%__1cJAssemblerGfmul_d6MnHAddress__v_; -text: .text%__1cLVtableStubsFenter6FiiipnKVtableStub__v_; -text: .text%__1cZInterpreterMacroAssemblerLlock_object6MpnMRegisterImpl__v_; -text: .text%__1cLMoveF2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cRaddD_reg_imm1NodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pIi_v_: oopMapCache.o; -text: .text%__1cNTemplateTableLwide_istore6F_v_; -text: .text%__1cRaddD_reg_imm1NodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cISubFNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNandI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOtailjmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o; -text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; -text: .text%__1cNReservedSpaceJlast_part6MI_0_; -text: .text%__1cNSafepointBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cJlookupOne6FpnHJNIEnv__pkcpnGThread__pnH_jclass__: jni.o; -text: .text%__1cUPSGenerationCounters2t6MpkciipnOPSVirtualSpace__v_; -text: .text%__1cNSafepointBlob2n6FII_pv_; -text: .text%__1cQmulD_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvI2F_SSF_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPSVirtualSpace2t6MnNReservedSpace_I_v_; -text: .text%__1cFTypeDJis_finite6kM_i_; -text: .text%JVM_GetInterfaceVersion; -text: .text%__1cQOopMapCacheEntryPfill_for_native6M_v_; -text: .text%__1cNMemoryManager2t6M_v_; -text: .text%__1cSPSPromotionManager2t6M_v_; -text: .text%__1cOstackSlotIOperFscale6kM_i_: ad_i486.o; -text: .text%__1cOstackSlotIOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cOstackSlotIOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_i486.o; -text: .text%__1cNFingerprinterLfingerprint6M_X_: oopMapCache.o; -text: .text%__1cMnegF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVMoveF2I_reg_stackNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSaddF24_reg_memNodeFreloc6kM_i_; -text: .text%__1cNTemplateTableGfconst6Fi_v_; -text: .text%__1cSdivD_reg_roundNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNSafepointBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cPmovP_nocopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_CallStaticObjectMethodV: jni.o; -text: .text%__1cIci2bNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMOopTaskQdDueue2t6M_v_; -text: .text%__1cSCommandLineFlagsExJboolAtPut6FnXCommandLineFlagWithType_i_v_; -text: .text%__1cSCommandLineFlagsExKis_default6FnPCommandLineFlag__i_; -text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cRaddI_mem_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%JVM_Available; -text: .text%__1cZInterpreterMacroAssemblerVincrement_mdp_data_at6MpnMRegisterImpl_2i_v_; -text: .text%__1cCosIjvm_path6Fpci_v_; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_2i_v_; -text: .text%__1cMOopTaskQdDueueKinitialize6M_v_; -text: .text%__1cPmovI_nocopyNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOtailjmpIndNodeHtwo_adr6kM_I_: ad_i486_misc.o; -text: .text%__1cIci2bNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cCosGgetenv6Fpkcpci_i_; -text: .text%__1cOtailjmpIndNodeGpinned6kM_i_: ad_i486_misc.o; -text: .text%jni_GetDoubleArrayRegion: jni.o; -text: .text%__1cIcp2bNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLconvI2BNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cXcmpL_reg_flags_EQdDNENodeFclone6kM_pnENode__; -text: .text%__1cKciTypeFlowLStateVectorRdo_multianewarray6MpnQciByteCodeStream__v_; -text: .text%__1cJAssemblerGfild_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfstp_d6Mi_v_; -text: .text%__1cTMaskFillerForNativeLpass_object6M_v_: oopMapCache.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: objArrayKlassKlass.o; -text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; -text: .text%__1cLMoveF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNStubGeneratorUgenerate_d2i_wrapper6MpC_1_: stubGenerator_i486.o; -text: .text%__1cTMaskFillerForNativeJpass_long6M_v_: oopMapCache.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: objArrayKlassKlass.o; -text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; -text: .text%__1cNTemplateTableUinvokevirtual_helper6FpnMRegisterImpl_22_v_; -text: .text%__1cJAssemblerEfxch6Mi_v_; -text: .text%__1cJAssemblerFfprem6M_v_; -text: .text%__1cSvframeStreamCommonbFfill_in_compiled_inlined_sender6M_i_; -text: .text%__1cJAssemblerJfnstsw_ax6M_v_; -text: .text%__1cJAssemblerEsahf6M_v_; -text: .text%__1cQObjectStartArraySset_covered_region6MnJMemRegion__v_; -text: .text%__1cQObjectStartArrayKinitialize6MnJMemRegion__v_; -text: .text%__1cNVM_DeoptimizeEname6kM_pkc_: vm_operations.o; -text: .text%__1cOtailjmpIndNodeJnum_opnds6kM_I_: ad_i486_misc.o; -text: .text%__1cMVM_OperationNdoit_epilogue6M_v_: vm_operations.o; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pC222i_v_; -text: .text%__1cJAssemblerEfchs6M_v_; -text: .text%__1cNVM_DeoptimizeEdoit6M_v_; -text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_; -text: .text%__1cSaddF24_reg_immNodeFreloc6kM_i_; -text: .text%__1cJAssemblerEfabs6M_v_; -text: .text%__1cJStubQdDueueOregister_queue6Fp0_v_; -text: .text%__1cOMacroAssemblerPcorrected_idivl6MpnMRegisterImpl__i_; -text: .text%__1cMLinkResolverbEvtable_index_of_miranda_method6FnLKlassHandle_nMsymbolHandle_2pnGThread__i_; -text: .text%__1cRsubI_eReg_memNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFStatebB_sub_Op_PartialSubtypeCheck6MpknENode__v_; -text: .text%__1cNTemplateTableKdouble_cmp6Fi_v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fi_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC22_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC_v_; -text: .text%__1cFStateL_sub_Op_OrL6MpknENode__v_; -text: .text%__1cPconvF2D_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFStateM_sub_Op_SubF6MpknENode__v_; -text: .text%__1cPOopTaskQdDueueSetOregister_queue6MipnMOopTaskQdDueue__v_; -text: .text%__1cMPeriodicTaskGenroll6M_v_; -text: .text%__1cNTemplateTableSgetfield_or_static6Fii_v_; -text: .text%__1cMPeriodicTask2t6MI_v_; -text: .text%__1cSestimate_path_freq6FpnENode__f_: loopnode.o; -text: .text%__1cFStateP_sub_Op_MoveL2D6MpknENode__v_; -text: .text%__1cNincI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNTemplateTableHcastore6F_v_; -text: .text%__1cUGcThreadCountClosureJdo_thread6MpnGThread__v_; -text: .text%__1cWNonPrintingResourceObj2n6FInLResourceObjPallocation_type__pv_: memoryService.o; -text: .text%__1cPGCMemoryManagerXinitialize_gc_stat_info6M_v_; -text: .text%__1cNTemplateTableLwide_lstore6F_v_; -text: .text%__1cPGCMemoryManager2t6M_v_; -text: .text%__1cKGCStatInfo2t6Mi_v_; -text: .text%__1cJMarkSweepUAdjustPointerClosure2t6Mi_v_: markSweep.o; -text: .text%__1cNstoreImmBNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLloadSSINodeZcheck_for_anti_dependence6kM_i_: ad_i486_misc.o; -text: .text%__1cNTemplateTableDldc6Fi_v_; -text: .text%__1cNTemplateTableKif_nullcmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableHif_acmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableGdconst6Fi_v_; -text: .text%__1cNTemplateTableGlconst6Fi_v_; -text: .text%__1cNTemplateTableKinitialize6F_v_; -text: .text%__1cNTemplateTableUjvmti_post_field_mod6Fii_v_; -text: .text%__1cJAssemblerEaddl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cJAssemblerFidivl6MpnMRegisterImpl__v_; -text: .text%__1cOmulF24_regNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cJAssemblerEmull6MnHAddress__v_; -text: .text%__1cJAssemblerDorl6MnHAddress_i_v_; -text: .text%__1cJAssemblerEsarl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEshll6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerFshrdl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl__v_; -text: .text%__1cTAbstract_VM_VersionXinternal_vm_info_string6F_pkc_; -text: .text%__1cTAbstract_VM_VersionKvm_release6F_pkc_; -text: .text%__1cJAssemblerFcpuid6M_v_; -text: .text%__1cJAssemblerEfldz6M_v_; -text: .text%__1cJAssemblerFfld_s6Mi_v_; -text: .text%__1cJAssemblerFfst_s6MnHAddress__v_; -text: .text%__1cJAssemblerFfst_d6MnHAddress__v_; -text: .text%__1cOaddF24_regNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cNTemplateTableSputfield_or_static6Fii_v_; -text: .text%__1cSaddF24_reg_immNodeKconst_size6kM_i_: ad_i486_misc.o; -text: .text%__1cHMatcherQconvL2FSupported6F_ki_; -text: .text%__1cFStateP_sub_Op_ConvL2F6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_ConvL2D6MpknENode__v_; -text: .text%__1cGatomll6Fpkcpx_i_: arguments.o; -text: .text%__1cJArgumentsRcheck_memory_size6Fxx_n0AJArgsRange__; -text: .text%__1cJArgumentsVset_parallel_gc_flags6F_v_; -text: .text%__1cPconvD2F_regNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cJArgumentsRparse_memory_size6Fpkcpxx_n0AJArgsRange__; -text: .text%__1cFStateP_sub_Op_ConvD2F6MpknENode__v_; -text: .text%__1cHnmethodVinvalidate_osr_method6M_v_; -text: .text%__1cJArgumentsXPropertyList_unique_add6FppnOSystemProperty_pkcpc_v_; -text: .text%__1cQAgentLibraryList2t6M_v_: arguments.o; -text: .text%__1cKklassKlassMoop_is_klass6kM_i_: arrayKlassKlass.o; -text: .text%__1cJAssemblerEmovb6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; -text: .text%__1cWStubGenerator_generate6FpnKCodeBuffer_i_v_; -text: .text%__1cPconvL2D_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__: parse1.o; -text: .text%__1cPconvD2F_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNmulI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cINegFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMFastLockNodeLis_FastLock6kM_pk0_: classes.o; -text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_; -text: .text%__1cOGenerateOopMapTadd_to_ref_init_set6Mi_v_; -text: .text%__1cIPSOldGenOgen_size_limit6M_I_; -text: .text%__1cIciObjectMis_classless6kM_i_: ciMethod.o; -text: .text%__1cIPSOldGenGresize6MI_v_; -text: .text%__1cMVirtualSpaceKinitialize6MnNReservedSpace_I_i_; -text: .text%__1cQorl_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNciMethodKlassEmake6F_p0_; -text: .text%__1cPconvL2F_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cUParallelScavengeHeapItop_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; -text: .text%__1cRInvocationCounterMreinitialize6Fi_v_; -text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; -text: .text%__1cFParseNfetch_monitor6MipnENode_2_2_; -text: .text%__1cMGCTaskThread2t6MpnNGCTaskManager_II_v_; -text: .text%__1cMGCTaskThreadFstart6M_v_; -text: .text%__1cUInterpreterGeneratorVgenerate_native_entry6Mi_pC_; -text: .text%__1cMGCTaskThreadDrun6M_v_; -text: .text%__1cJLoadFNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cGThreadOis_Java_thread6kM_i_: gcTaskThread.o; -text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: universe.o; -text: .text%__1cXpartialSubtypeCheckNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cISubFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cISubFNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cIPSOldGenPinitialize_work6Mpkci_v_; -text: .text%lstat: perfMemory_solaris.o; -text: .text%__1cRComputeEntryStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cPfilename_to_pid6Fpkc_l_: perfMemory_solaris.o; -text: .text%Unsafe_CompareAndSwapObject; -text: .text%__1cMciArrayKlassOis_array_klass6M_i_: ciTypeArrayKlass.o; -text: .text%__1cJCodeCachebGmake_marked_nmethods_not_entrant6F_v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl__v_; -text: .text%__1cTis_directory_secure6Fpkc_i_: perfMemory_solaris.o; -text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerWdispatch_only_noverify6MnITosState__v_; -text: .text%__1cRCollectorCounters2t6Mpkci_v_; -text: .text%__1cZInterpreterMacroAssemblerPset_mdp_flag_at6MpnMRegisterImpl_i_v_; -text: .text%__1cZInterpreterMacroAssemblerSupdate_mdp_for_ret6MpnMRegisterImpl__v_; -text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MpnMRegisterImpl_2_v_; -text: .text%__1cJTimeStamp2t6M_v_: runtimeService.o; -text: .text%__1cIPSOldGenYinitialize_virtual_space6MnNReservedSpace_I_v_; -text: .text%__1cIPSOldGenKinitialize6MnNReservedSpace_Ipkci_v_; -text: .text%__1cMVirtualSpace2t6M_v_; -text: .text%__1cLOptoRuntimeSfetch_monitor_Type6F_pknITypeFunc__; -text: .text%__1cbCAbstractInterpreterGeneratorTgenerate_error_exit6Mpkc_pC_; -text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; -text: .text%__1cNinstanceKlassSremove_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cTAbstractInterpreterKinitialize6F_v_; -text: .text%__1cLNamedThread2t6M_v_; -text: .text%__1cRMachSpillCopyNodeHsize_of6kM_I_: ad_i486.o; -text: .text%__1cLNamedThreadIset_name6MpkcE_v_; -text: .text%__1cMelapsedTimer2t6M_v_: psAdaptiveSizePolicy.o; -text: .text%__1cUPSAdaptiveSizePolicybQpromo_increment_with_supplement_aligned_up6MI_I_; -text: .text%__1cUPSAdaptiveSizePolicyPpromo_increment6MII_I_; -text: .text%__1cOMacroAssemblerElshr6MpnMRegisterImpl_2i_v_; -text: .text%__1cCosbCis_thread_cpu_time_supported6F_i_; -text: .text%__1cLConvD2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOMacroAssemblerIsave_eax6MpnMRegisterImpl__v_; -text: .text%jni_IsInstanceOf: jni.o; -text: .text%jni_CallStaticBooleanMethod: jni.o; -text: .text%__1cRCardTableModRefBSbCpar_chunk_heapword_alignment6F_I_: tenuredGeneration.o; -text: .text%jni_CallStaticVoidMethodV: jni.o; -text: .text%__1cSReferenceProcessor2t6MnJMemRegion_iii_v_; -text: .text%__1cCosWactive_processor_count6F_i_; -text: .text%jni_NewWeakGlobalRef: jni.o; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_float_field06FnJBasicType__pC_; -text: .text%__1cOMacroAssemblerLrestore_eax6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerFfremr6MpnMRegisterImpl__v_; -text: .text%__1cLMoveL2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKJNIHandlesQmake_weak_global6FnGHandle__pnI_jobject__; -text: .text%__1cHOrLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKReflectionbFbasic_type_arrayklass_to_mirror6FpnMklassOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cCosHrealloc6FpvI_1_; -text: .text%__1cOMacroAssemblerGsincos6Miii_v_; -text: .text%__1cEMIN24CI_6FTA0_0_: tenuredGeneration.o; -text: .text%__1cXPartialSubtypeCheckNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cCosNsigexitnum_pd6F_i_; -text: .text%__1cNGCTaskManagerKset_thread6MIpnMGCTaskThread__v_; -text: .text%__1cLConvL2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOPSVirtualSpace2t6M_v_; -text: .text%__1cNdefaultStreamMhas_log_file6M_i_; -text: .text%__1cUGenericGrowableArrayGgrow646Mi_v_; -text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_: oopMapCache.o; -text: .text%__1cOPSVirtualSpaceKinitialize6MnNReservedSpace_I_i_; -text: .text%__1cYalign_to_allocation_size6FI_I_: heap.o; -text: .text%__1cWcheck_compare_clipping6FipnGIfNode_pnHConNode_rpnENode__i_: cfgnode.o; -text: .text%__1cLConvL2FNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cCosVatomic_xchg_bootstrap6Fipoi_i_; -text: .text%__1cUParallelScavengeHeapOresize_old_gen6MI_v_; -text: .text%__1cIciObjectOis_array_klass6M_i_: ciInstanceKlass.o; -text: .text%__1cRcheck_if_clipping6FpknKRegionNode_rpnGIfNode_5_i_: cfgnode.o; -text: .text%__1cHOrLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cNTemplateTableEdup26F_v_; -text: .text%__1cHThreadsJcreate_vm6FpnOJavaVMInitArgs_pi_i_; -text: .text%__1cOThreadCriticalKinitialize6F_v_; -text: .text%__1cIUniverseHgenesis6FpnGThread__v_; -text: .text%__1cKJavaThread2t6M_v_; -text: .text%__1cNTemplateTableHdup2_x16F_v_; -text: .text%__1cNTemplateTableHdup2_x26F_v_; -text: .text%Unsafe_SetNativeLong; -text: .text%__1cNTemplateTableEswap6F_v_; -text: .text%__cplus_fini_at_exit: CCrti.o; -text: .text%__1cNTemplateTableGdup_x16F_v_; -text: .text%__1cNTemplateTableDpop6F_v_; -text: .text%__1cIUniverseUreinitialize_itables6F_v_; -text: .text%__1cNReservedSpace2t6MIIipc_v_; -text: .text%__1cNuniverse_init6F_i_; -text: .text%__1cIUniversePinitialize_heap6F_i_; -text: .text%__1cOuniverse2_init6F_v_; -text: .text%__1cNTemplateTableEpop26F_v_; -text: .text%__1cNTemplateTableIgetfield6Fi_v_; -text: .text%__1cNTemplateTableDdup6F_v_; -text: .text%__1cSuniverse_post_init6F_v_; -text: .text%__1cIUniverseNfixup_mirrors6FpnGThread__v_; -text: .text%__1cNTemplateTableGdup_x26F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; -text: .text%__1cNTemplateTableElmul6F_v_; -text: .text%__1cNTemplateTableEldiv6F_v_; -text: .text%__1cNTemplateTableElrem6F_v_; -text: .text%__1cNTemplateTableElshl6F_v_; -text: .text%__1cNTemplateTableElshr6F_v_; -text: .text%__1cNTemplateTableFlushr6F_v_; -text: .text%__1cNTemplateTableElcmp6F_v_; -text: .text%__1cNTemplateTableJwide_iinc6F_v_; -text: .text%__1cNTemplateTableEiinc6F_v_; -text: .text%__1cNTemplateTableEineg6F_v_; -text: .text%__1cNTemplateTableElneg6F_v_; -text: .text%__1cNTemplateTableEdneg6F_v_; -text: .text%__1cNTemplateTableEfneg6F_v_; -text: .text%__1cNTemplateTableEirem6F_v_; -text: .text%__1cIUniverseYcompute_base_vtable_size6F_v_; -text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; -text: .text%__1cNReservedSpaceUpage_align_size_down6FI_I_; -text: .text%__1cQVMOperationQdDueue2t6M_v_; -text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_; -text: .text%__1cNReservedSpaceYallocation_align_size_up6FI_I_; -text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; -text: .text%__1cNTemplateTableMlookupswitch6F_v_; -text: .text%__1cOvmStructs_init6F_v_; -text: .text%__1cNTemplateTableLtableswitch6F_v_; -text: .text%__1cNTemplateTableIwide_ret6F_v_; -text: .text%Unsafe_PageSize; -text: .text%__1cNTemplateTableDret6F_v_; -text: .text%Unsafe_FreeMemory; -text: .text%__1cNTemplateTableEidiv6F_v_; -text: .text%__1cJTimeStampMmilliseconds6kM_x_; -text: .text%__1cOtypeArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cHVM_ExitEdoit6M_v_; -text: .text%__1cHVM_ExitEname6kM_pkc_: vm_operations.o; -text: .text%__1cNThreadServiceEinit6F_v_; -text: .text%__1cSThreadLocalStorageEinit6F_v_; -text: .text%__1cNCollectedHeapYlarge_typearray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: typeArrayKlass.o; -text: .text%__1cTAbstract_VM_VersionHvm_name6F_pkc_; -text: .text%__1cTAbstract_VM_VersionJvm_vendor6F_pkc_; -text: .text%__1cIVMThreadEloop6M_v_; -text: .text%__1cPGlobalTLABStats2t6M_v_; -text: .text%__1cWThreadLocalAllocBufferWstartup_initialization6F_v_; -text: .text%__1cIVMThreadDrun6M_v_; -text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; -text: .text%__1cTtypeArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cTtypeArrayKlassKlassVoop_is_typeArrayKlass6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cKTypeOopPtrFxdual6kM_pknEType__; -text: .text%__1cKTypeOopPtrEmake6FnHTypePtrDPTR_i_pk0_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; -text: .text%__1cFKlassUoop_is_objArrayKlass6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cKVM_VersionWget_processor_features6F_v_; -text: .text%__1cKVM_VersionKinitialize6F_v_; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: tenuredGeneration.o; -text: .text%__1cNTemplateTableKinstanceof6F_v_; -text: .text%__1cNTemplateTableJcheckcast6F_v_; -text: .text%__1cNTemplateTableLarraylength6F_v_; -text: .text%__1cNTemplateTableJanewarray6F_v_; -text: .text%__1cNTemplateTableInewarray6F_v_; -text: .text%__1cNTemplateTableE_new6F_v_; -text: .text%__1cNTemplateTablePinvokeinterface6Fi_v_; -text: .text%__1cNTemplateTableRfast_invokevfinal6Fi_v_; -text: .text%__1cNTemplateTableMinvokestatic6Fi_v_; -text: .text%__1cNTemplateTableNinvokespecial6Fi_v_; -text: .text%__1cNTemplateTableNinvokevirtual6Fi_v_; -text: .text%__1cNTemplateTableL_breakpoint6F_v_; -text: .text%__1cNTemplateTableGathrow6F_v_; -text: .text%__1cNTemplateTableMmonitorenter6F_v_; -text: .text%__1cNTemplateTableLmonitorexit6F_v_; -text: .text%__1cNTemplateTableEwide6F_v_; -text: .text%__1cNTemplateTableOmultianewarray6F_v_; -text: .text%__1cETypeRInitialize_shared6FpnHCompile__v_; -text: .text%__1cHVM_ExitNset_vm_exited6F_i_; -text: .text%__1cHVM_ExitbJwait_for_threads_in_native_to_block6F_i_; -text: .text%__1cFKlassNoop_is_method6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cNTemplateTableJputstatic6Fi_v_; -text: .text%__1cNWatcherThread2t6M_v_; -text: .text%__1cNWatcherThreadDrun6M_v_; -text: .text%__1cNWatcherThreadFstart6F_v_; -text: .text%__1cVverificationType_exit6F_v_; -text: .text%__1cQVerificationTypeKinitialize6F_v_; -text: .text%__1cQVerificationTypeIfinalize6F_v_; -text: .text%__1cNTemplateTableIputfield6Fi_v_; -text: .text%__1cNWatcherThreadEstop6F_v_; -text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cPVM_Version_init6F_v_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cRAllocateTLSOffset6F_v_: threadLS_solaris_i486.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cYVM_Version_StubGeneratorTgenerate_getPsrInfo6M_pC_: vm_version_i486.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cLVtableStubsKinitialize6F_v_; -text: .text%__1cVverificationType_init6F_v_; -text: .text%__1cIVMThread2t6M_v_; -text: .text%__1cGThreadWset_as_starting_thread6M_i_; -text: .text%__1cIVMThreadGcreate6F_v_; -text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o; -text: .text%__1cVcreate_initial_thread6FnGHandle_pnKJavaThread_pnGThread__pnHoopDesc__: thread.o; -text: .text%__1cbAcall_initializeSystemClass6FpnGThread__v_: thread.o; -text: .text%__1cWreset_vm_info_property6FpnGThread__v_: thread.o; -text: .text%JVM_RegisterUnsafeMethods; -text: .text%__1cQvtableStubs_init6F_v_; -text: .text%__1cFVTuneEexit6F_v_; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: typeArrayKlassKlass.o; -text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlassKlass.o; -text: .text%__1cKvtune_init6F_v_; -text: .text%__1cIUniversePcheck_alignment6FIIpkc_v_; -text: .text%__1cFKlassPoop_is_instance6kM_i_: constantPoolKlass.o; -text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cFJNIidKdeallocate6Fp0_v_; -text: .text%__1cNinstanceKlassZrelease_C_heap_structures6M_v_; -text: .text%__1cSset_init_completed6F_v_; -text: .text%__1cMexit_globals6F_v_; -text: .text%__1cMinit_globals6F_i_; -text: .text%__1cPvm_init_globals6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: indexSet.o; -text: .text%__1cLicache_init6F_v_; -text: .text%__1cWInlineCacheBuffer_init6F_v_; -text: .text%__1cRInlineCacheBufferKinitialize6F_v_; -text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_; -text: .text%__1cDhpiZinitialize_socket_library6F_i_; -text: .text%__1cDhpiKinitialize6F_i_; -text: .text%__1cLlog2_intptr6Fi_i_: heap.o; -text: .text%__1cICodeHeapFclear6M_v_; -text: .text%__1cICodeHeapHreserve6MIII_i_; -text: .text%__1cICodeHeap2t6M_v_; -text: .text%__1cSinstanceKlassKlassUoop_is_instanceKlass6kM_i_: instanceKlassKlass.o; -text: .text%__1cSInterpreterRuntimeSupdate_mdp_for_ret6FpnKJavaThread_i_v_; -text: .text%__1cSInterpreterRuntimeWcreate_klass_exception6FpnKJavaThread_pcpnHoopDesc__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: interpreter.o; -text: .text%__1cbCAbstractInterpreterGeneratorbCset_safepoints_for_all_bytes6M_v_; -text: .text%__1cbCAbstractInterpreterGeneratorbEset_entry_points_for_all_bytes6M_v_; -text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; -text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cQinterpreter_init6F_v_; -text: .text%__1cZInterpreterMacroAssemblerbFset_method_data_pointer_for_bcp6M_v_; -text: .text%__1cZInterpreterMacroAssemblerUdispatch_only_normal6MnITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl_33_v_; -text: .text%__1cVInterfaceSupport_init6F_v_; -text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_; -text: .text%__1cSinstanceKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlassKlass.o; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: instanceKlassKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassUoop_is_objArrayKlass6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassVoop_is_typeArrayKlass6kM_i_: instanceKlassKlass.o; -text: .text%__1cSCommandLineFlagsExKuintxAtPut6FnXCommandLineFlagWithType_I_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; -text: .text%__1cMelapsedTimer2t6M_v_: fprofiler.o; -text: .text%__1cScheck_ThreadShadow6F_v_; -text: .text%__1cNeventlog_init6F_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: dictionary.o; -text: .text%__1cKDictionaryKclasses_do6MpFpnMklassOopDesc__v_v_; -text: .text%__1cKDictionaryKfree_entry6MpnPDictionaryEntry__v_; -text: .text%__1cKDictionary2t6Mi_v_; -text: .text%__1cFStateQ_sub_Op_TailJump6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_NegF6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_MoveF2I6MpknENode__v_; -text: .text%__1cFStateO_sub_Op_CMoveL6MpknENode__v_; -text: .text%__1cODeoptimizationTload_class_by_index6FnSconstantPoolHandle_i_v_; -text: .text%__1cODeoptimizationTload_class_by_index6FnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKScopeValuePis_constant_int6kM_i_: debugInfo.o; -text: .text%__1cUConstantOopReadValuePis_constant_oop6kM_i_: debugInfo.o; -text: .text%__1cUConstantOopReadValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cWconstantPoolCacheKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: cpCacheKlass.o; -text: .text%__1cFframeVinterpreter_frame_mdp6kM_pC_; -text: .text%__1cRcheck_basic_types6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; -text: .text%__1cRComputeEntryStackIdo_float6M_v_: generateOopMap.o; -text: .text%__1cNCellTypeStateLmake_bottom6F_0_: generateOopMap.o; -text: .text%__1cNCellTypeStateImake_top6F_0_: generateOopMap.o; -text: .text%__1cMelapsedTimer2t6M_v_: generateOopMap.o; -text: .text%__1cWResolveOopMapConflictsUdo_potential_rewrite6MpnGThread__nMmethodHandle__; -text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__I_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cTAssertIsPermClosure2t6M_v_: genCollectedHeap.o; -text: .text%__1cRAlwaysTrueClosure2t6M_v_: genCollectedHeap.o; -text: .text%__1cKNoopGCTaskQcreate_on_c_heap6F_p0_; -text: .text%__1cNGCTaskManagerKthreads_do6MpnNThreadClosure__v_; -text: .text%__1cNGCTaskManagerKinitialize6M_v_; -text: .text%__1cNGCTaskManager2t6MI_v_; -text: .text%__1cXSynchronizedGCTaskQdDueue2t6MpnLGCTaskQdDueue_pnFMutex__v_; -text: .text%__1cLGCTaskQdDueueQcreate_on_c_heap6F_p0_; -text: .text%__1cHGCStats2t6M_v_; -text: .text%__1cQGCPolicyCounters2t6Mpkcii_v_; -text: .text%__1cXSignatureHandlerLibraryQset_handler_blob6F_pC_; -text: .text%JVM_MaxMemory; -text: .text%JVM_Halt; -text: .text%JVM_InitProperties; -text: .text%__1cQjni_handles_init6F_v_; -text: .text%__1cKJNIHandlesKinitialize6F_v_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_double_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_float_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_long_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbBgenerate_fast_get_int_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_short_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_char_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_byte_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbFgenerate_fast_get_boolean_field6F_pC_; -text: .text%JNI_CreateJavaVM; -text: .text%__1cVquicken_jni_functions6F_v_; -text: .text%__1cbDinitializeDirectBufferSupport6FpnHJNIEnv___i_: jni.o; -text: .text%lookupDirectBufferClasses: jni.o; -text: .text%__1cXjni_GetDoubleField_addr6F_pC_; -text: .text%JVM_GetClassDeclaredMethods; -text: .text%__1cLJvmtiExportNpost_vm_start6F_v_; -text: .text%__1cLJvmtiExportQenter_live_phase6F_v_; -text: .text%__1cLJvmtiExportRenter_start_phase6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEventController.o; -text: .text%__1cUJvmtiEventControllerIvm_death6F_v_; -text: .text%__1cUJvmtiEventControllerHvm_init6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_start6F_v_; -text: .text%__1cRJvmtiEventEnabledFclear6M_v_; -text: .text%__1cRJvmtiEventEnabled2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEnvBase.o; -text: .text%__1cWNonPrintingResourceObj2n6FInLResourceObjPallocation_type__pv_: jvmtiEnvBase.o; -text: .text%__1cNGrowableArray4CpnMJvmtiEnvBase__2t6Mii_v_: jvmtiEnvBase.o; -text: .text%JVM_SupportsCX8; -text: .text%__1cbEinitialize_converter_functions6F_v_; -text: .text%JVM_Socket; -text: .text%JVM_InitializeSocketLibrary; -text: .text%__1cWjni_GetFloatField_addr6F_pC_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectPcompute_offsets6F_v_; -text: .text%__1cVjava_lang_ThreadGroupPcompute_offsets6F_v_; -text: .text%__1cQjava_lang_ThreadPcompute_offsets6F_v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cHvm_exit6Fi_v_; -text: .text%__1cLbefore_exit6FpnKJavaThread__v_; -text: .text%__1cQprint_statistics6F_v_; -text: .text%__1cWinvocationCounter_init6F_v_; -text: .text%__1cLlog2_intptr6Fi_i_: interpreter_i486.o; -text: .text%__1cUInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cbCAbstractInterpreterGeneratorYgenerate_throw_exception6M_v_; -text: .text%__1cUInterpreterGeneratorXgenerate_accessor_entry6M_pC_; -text: .text%__1cUInterpreterGeneratorUgenerate_empty_entry6M_pC_; -text: .text%__1cUInterpreterGeneratorXgenerate_abstract_entry6M_pC_; -text: .text%__1cbCAbstractInterpreterGeneratorbFgenerate_slow_signature_handler6M_pC_; -text: .text%__1cbCAbstractInterpreterGeneratorbMgenerate_ArrayIndexOutOfBounds_handler6Mpkc_pC_; -text: .text%__1cbCAbstractInterpreterGeneratorbJgenerate_StackOverflowError_handler6M_pC_; -text: .text%__1cXNativeSignatureIteratorHdo_byte6M_v_: interpreterRuntime.o; -text: .text%__1cYjava_lang_reflect_MethodPcompute_offsets6F_v_; -text: .text%__1cVjni_GetLongField_addr6F_pC_; -text: .text%__1cUjni_GetIntField_addr6F_pC_; -text: .text%__1cWjni_GetShortField_addr6F_pC_; -text: .text%__1cVjni_GetCharField_addr6F_pC_; -text: .text%__1cVjni_GetByteField_addr6F_pC_; -text: .text%__1cYjni_GetBooleanField_addr6F_pC_; -text: .text%jni_ToReflectedMethod: jni.o; -text: .text%__1cQjavaClasses_init6F_v_; -text: .text%__1cLJavaClassesPcompute_offsets6F_v_; -text: .text%__1cLJavaClassesbAcompute_hard_coded_offsets6F_v_; -text: .text%__1cZsun_misc_AtomicLongCSImplPcompute_offsets6F_v_; -text: .text%__1cPjava_nio_BufferPcompute_offsets6F_v_; -text: .text%__1cQjava_lang_SystemPcompute_offsets6F_v_; -text: .text%__1cbIjava_security_AccessControlContextPcompute_offsets6F_v_; -text: .text%__1cYsun_reflect_ConstantPoolPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldPcompute_offsets6F_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPcompute_offsets6F_v_; -text: .text%__1cYjava_lang_reflect_MethodNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_: cpCacheKlass.o; -text: .text%__1cJAssemblerEmull6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEadcl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEadcl6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerGmovsxw6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerGmovsxb6MpnMRegisterImpl_2_v_; -text: .text%__1cParrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: arrayKlassKlass.o; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: arrayKlassKlass.o; -text: .text%__1cParrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: arguments.o; -text: .text%__1cJArgumentsWPropertyList_get_value6FpnOSystemProperty_pkc_4_; -text: .text%__1cJArgumentsFparse6FpknOJavaVMInitArgs__i_; -text: .text%__1cJArgumentsbSparse_java_tool_options_environment_variable6FpnMSysClassPath_pi_i_; -text: .text%__1cJArgumentsbNparse_java_options_environment_variable6FpnMSysClassPath_pi_i_; -text: .text%__1cJArgumentsVfinalize_vm_init_args6FpnMSysClassPath_i_i_; -text: .text%__1cJArgumentsWparse_each_vm_init_arg6FpknOJavaVMInitArgs_pnMSysClassPath_pi_i_; -text: .text%__1cJArgumentsSparse_vm_init_args6FpknOJavaVMInitArgs__i_; -text: .text%__1cJArgumentsZcheck_vm_args_consistency6F_i_; -text: .text%__1cJArgumentsbOparse_java_compiler_environment_variable6F_v_; -text: .text%__1cJAssemblerEsbbl6MpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerJdecrement6MpnMRegisterImpl_i_v_; -text: .text%__1cOMacroAssemblerLextend_sign6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerFfaddp6Mi_v_; -text: .text%__1cJAssemblerGfdivrp6Mi_v_; -text: .text%__1cJAssemblerHfdivr_d6MnHAddress__v_; -text: .text%__1cJAssemblerHfdivr_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfmul_s6MnHAddress__v_; -text: .text%__1cJAssemblerHfsubr_d6MnHAddress__v_; -text: .text%__1cJAssemblerHfsubr_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfadd_d6MnHAddress__v_; -text: .text%__1cJAssemblerGfadd_s6MnHAddress__v_; -text: .text%__1cJAssemblerFfsqrt6M_v_; -text: .text%__1cJAssemblerEfcos6M_v_; -text: .text%__1cJAssemblerEfsin6M_v_; -text: .text%__1cJAssemblerEsetb6Mn0AJCondition_pnMRegisterImpl__v_; -text: .text%__1cJAssemblerExchg6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerEsubl6MnHAddress_i_v_; -text: .text%__1cJAssemblerFshldl6MpnMRegisterImpl_2_v_; -text: .text%__1cJArgumentsUset_ergonomics_flags6F_v_; -text: .text%__1cHi2sNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHi2bNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreBNodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cNstoreImmINodeErule6kM_I_: ad_i486_misc.o; -text: .text%__1cLconvP2BNodePoper_input_base6kM_I_: ad_i486_misc.o; -text: .text%__1cOtailjmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_i486_expand.o; -text: .text%__1cRaddL_eReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLconvP2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIcp2bNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_i486.o; -text: .text%__1cTconvI2F_SSF_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQmulD_reg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOtailjmpIndNodeFreloc6kM_i_; -text: .text%__1cTconvI2F_SSF_memNodeFreloc6kM_i_; -text: .text%__1cQmulD_reg_memNodeFreloc6kM_i_; -text: .text%__1cQaccessFlags_init6F_v_; -text: .text%__1cPconvI2L_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_; -text: .text%__1cQno_shared_spaces6F_v_: arguments.o; -text: .text%__1cJArgumentsMget_property6Fpkc_2_; -text: .text%__1cJArgumentsVprocess_settings_file6Fpkcii_i_; -text: .text%__1cMSysClassPathQadd_jars_to_path6Fpcpkc_1_; -text: .text%__1cMSysClassPathPexpand_endorsed6M_v_; -text: .text%__1cMSysClassPath2T6M_v_; -text: .text%__1cMSysClassPath2t6Mpkc_v_; -text: .text%__1cJArgumentsWinit_system_properties6F_v_; -text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_; -text: .text%__1cOchunkpool_init6F_v_; -text: .text%__1cWAdjoiningVirtualSpaces2t6MnNReservedSpace_III_v_; -text: .text%__1cUAdjoiningGenerations2t6MnNReservedSpace_IIIIIII_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_i486_pipeline.o; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCpnMRegisterImpl__v_; -text: .text%__1cOcompiler2_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o; -text: .text%__1cMelapsedTimer2t6M_v_: compilationPolicy.o; -text: .text%__1cRCompilationPolicyUcompleted_vm_startup6F_v_; -text: .text%__1cWcompilationPolicy_init6F_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyUinitialize_size_info6M_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyQinitialize_flags6M_v_; -text: .text%__1cNCollectedHeap2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: codeCache.o; -text: .text%__1cOcodeCache_init6F_v_; -text: .text%__1cJCodeCacheKinitialize6F_v_; -text: .text%__1cNExceptionBlob2n6FII_pv_; -text: .text%__1cNExceptionBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNExceptionBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cQUncommonTrapBlob2n6FII_pv_; -text: .text%__1cQUncommonTrapBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cQUncommonTrapBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cSDeoptimizationBlob2n6FII_pv_; -text: .text%__1cNCompileBrokerQcompilation_init6FpnQAbstractCompiler__v_; -text: .text%__1cWconstantPoolCacheKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cRconstantPoolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constantPoolKlass.o; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_: constantPoolKlass.o; -text: .text%__1cKarrayKlassMoop_is_array6kM_i_: constantPoolKlass.o; -text: .text%__1cRconstantPoolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cQconstMethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassOset_alloc_size6MI_v_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cTcompilerOracle_init6F_v_; -text: .text%__1cOCompilerOracleRparse_from_string6Fpkc_v_; -text: .text%__1cOCompilerOraclePparse_from_file6F_v_; -text: .text%__1cHcc_file6F_pkc_: compilerOracle.o; -text: .text%__1cOCompilerOracleOread_from_line6Fpc_v_; -text: .text%__1cVcompiledICHolderKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: compiledICHolderKlass.o; -text: .text%__1cVcompiledICHolderKlassOset_alloc_size6MI_v_: compiledICHolderKlass.o; -text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; -text: .text%__1cNCompileBrokerQset_should_block6F_v_; -text: .text%__1cNCompileBrokerVinit_compiler_threads6Fi_v_; -text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; -text: .text%__1cENodeMis_SafePoint6M_pnNSafePointNode__: cfgnode.o; -text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_I_; -text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; -text: .text%__1cMTailJumpNode2t6MpnENode_22222_v_; -text: .text%__1cKC2CompilerKinitialize6M_v_; -text: .text%__1cHCompileRpd_compiler2_init6F_v_; -text: .text%__1cJBytecodesNpd_initialize6F_v_; -text: .text%__1cObytecodes_init6F_v_; -text: .text%__1cJBytecodesKinitialize6F_v_; -text: .text%__1cOMacroAssemblerIround_to6MpnMRegisterImpl_i_v_; -text: .text%__1cOMacroAssemblerQsign_extend_byte6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerRsign_extend_short6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerIlcmp2int6MpnMRegisterImpl_222_v_; -text: .text%__1cOMacroAssemblerElshl6MpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerElmul6Mii_v_; -text: .text%__1cOMacroAssemblerElneg6MpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerGc2bool6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCpnMRegisterImpl_3_v_; -text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_; -text: .text%__1cSDeoptimizationBlob2t6MpnKCodeBuffer_ipnJOopMapSet_iiii_v_; -text: .text%__1cLMoveF2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cTClassLoadingServiceVnotify_class_unloaded6FpnNinstanceKlass_i_v_; -text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: classLoader.o; -text: .text%__1cQclassLoader_init6F_v_; -text: .text%__1cLClassLoaderVcompute_Object_vtable6F_i_; -text: .text%__1cLClassLoaderKinitialize6F_v_; -text: .text%__1cLClassLoaderZcreate_package_info_table6F_v_; -text: .text%__1cLClassLoaderQload_zip_library6F_v_; -text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_; -text: .text%__1cPClassFileParserYjava_lang_Class_fix_post6Mpi_v_; -text: .text%__1cPClassFileParserXjava_lang_Class_fix_pre6MpnOobjArrayHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cPClassFileParserbFjava_lang_ref_Reference_fix_pre6MpnPtypeArrayHandle_nSconstantPoolHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cRciArrayKlassKlassUis_array_klass_klass6M_i_: ciObjectFactory.o; -text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; -text: .text%__1cUciObjArrayKlassKlassEmake6F_p0_; -text: .text%__1cPciObjArrayKlass2t6MpnIciSymbol_pnHciKlass_i_v_; -text: .text%__1cMciKlassKlassEmake6F_p0_; -text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_; -text: .text%__1cNRegisterSaverYrestore_result_registers6FpnOMacroAssembler__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o; -text: .text%__1cORuntimeServiceYrecord_application_start6F_v_; -text: .text%__1cORuntimeServiceEinit6F_v_; -text: .text%__1cLOptoRuntimeVhandle_exception_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray5_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray4_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray3_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray2_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray1_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeIgenerate6FpnFciEnv__v_; -text: .text%__1cWResolveOopMapConflictsOreport_results6kM_i_: rewriter.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; -text: .text%__1cQRelocationHolder2t6M_v_: relocInfo.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: regmask.o; -text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; -text: .text%__1cLStatSamplerbMcreate_system_property_instrumentation6FpnGThread__v_; -text: .text%__1cLStatSamplerHdestroy6F_v_; -text: .text%__1cLStatSamplerJdisengage6F_v_; -text: .text%__1cLStatSamplerGengage6F_v_; -text: .text%__1cLStatSamplerKinitialize6F_v_; -text: .text%__1cNcarSpace_init6F_v_; -text: .text%__1cICarSpaceEinit6F_v_; -text: .text%__1cNSharedRuntimebIinitialize_StrictMath_entry_points6F_v_; -text: .text%__1cNSharedRuntimeUlookup_function_DD_D6FrpFpnHJNIEnv__pnH_jclass_dd_dpkc_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cTAssertIsPermClosure2t6M_v_: sharedHeap.o; -text: .text%__1cLOptoRuntimeYgenerate_arraycopy_stubs6F_v_; -text: .text%__1cLOptoRuntimebPgenerate_polling_page_return_handler_blob6F_v_; -text: .text%__1cLOptoRuntimebSgenerate_polling_page_safepoint_handler_blob6F_v_; -text: .text%__1cLOptoRuntimebPgenerate_illegal_instruction_handler_blob6F_v_; -text: .text%__1cLOptoRuntimeUsetup_exception_blob6F_v_; -text: .text%__1cLOptoRuntimeWfill_in_exception_blob6F_v_; -text: .text%__1cLOptoRuntimebBgenerate_uncommon_trap_blob6F_v_; -text: .text%__1cHRegMask2t6Miiiii_v_: regmask.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cMelapsedTimer2t6M_v_: psMarkSweep.o; -text: .text%__1cTPSAlwaysTrueClosure2t6M_v_: psMarkSweep.o; -text: .text%__1cLPSMarkSweepKinitialize6F_v_; -text: .text%__1cbAPSGCAdaptivePolicyCounters2t6MpkciipnUPSAdaptiveSizePolicy__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psAdaptiveSizePolicy.o; -text: .text%__1cUPSAdaptiveSizePolicy2t6MIIIIIddI_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: placeholders.o; -text: .text%__1cQPlaceholderTable2t6Mi_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: phase.o; -text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; -text: .text%__1cKPerfMemoryUcreate_memory_region6FI_v_; -text: .text%__1cUdelete_shared_memory6FpcI_v_: perfMemory_solaris.o; -text: .text%__1cUcreate_shared_memory6FI_pc_: perfMemory_solaris.o; -text: .text%__1cSmmap_create_shared6FI_pc_: perfMemory_solaris.o; -text: .text%__1cbAcreate_sharedmem_resources6Fpkc1I_i_: perfMemory_solaris.o; -text: .text%__1cRmake_user_tmp_dir6Fpkc_i_: perfMemory_solaris.o; -text: .text%__1cbBcleanup_sharedmem_resources6Fpkc_v_: perfMemory_solaris.o; -text: .text%__1cIPSOldGen2t6MnNReservedSpace_IIIIpkci_v_; -text: .text%__1cSReferenceProcessorMinit_statics6F_v_; -text: .text%__1cXreferenceProcessor_init6F_v_; -text: .text%__1cURecompilationMonitorbGstart_recompilation_monitor_task6F_v_; -text: .text%__1cKPSYoungGenUset_space_boundaries6MII_v_; -text: .text%__1cKPSYoungGenbGcompute_initial_space_boundaries6M_v_; -text: .text%__1cKPSYoungGenPinitialize_work6M_v_; -text: .text%__1cKPSYoungGenKinitialize6MnNReservedSpace_I_v_; -text: .text%__1cKPSYoungGenYinitialize_virtual_space6MnNReservedSpace_I_v_; -text: .text%__1cKPSYoungGen2t6MIII_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o; -text: .text%__1cMelapsedTimer2t6M_v_: psScavenge.o; -text: .text%__1cKPSScavengeKinitialize6F_v_; -text: .text%__1cPOopTaskQdDueueSet2t6Mi_v_: psPromotionManager.o; -text: .text%__1cSPSPromotionManagerKinitialize6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psPromotionLAB.o; -text: .text%__1cMarrayOopDescLheader_size6FnJBasicType__i_: psPromotionLAB.o; -text: .text%__1cRalign_object_size6Fi_i_: psPromotionLAB.o; -text: .text%__1cJPSPermGen2t6MnNReservedSpace_IIIIpkci_v_; -text: .text%__1cIPSOldGen2t6MIIIpkci_v_; -text: .text%__1cLStatSamplerUcreate_misc_perfdata6F_v_; -text: .text%__1cNTemplateTableGbaload6F_v_; -text: .text%__1cNTemplateTableGaaload6F_v_; -text: .text%__1cNTemplateTableGdaload6F_v_; -text: .text%__1cNTemplateTableGfaload6F_v_; -text: .text%__1cNTemplateTableGlaload6F_v_; -text: .text%__1cNTemplateTableGiaload6F_v_; -text: .text%__1cNTemplateTableKwide_aload6F_v_; -text: .text%__1cNTemplateTableKwide_dload6F_v_; -text: .text%__1cNTemplateTableKwide_fload6F_v_; -text: .text%__1cNTemplateTableKwide_lload6F_v_; -text: .text%__1cNTemplateTableKwide_iload6F_v_; -text: .text%__1cNTemplateTableFaload6F_v_; -text: .text%__1cNTemplateTableFdload6F_v_; -text: .text%__1cNTemplateTableFfload6F_v_; -text: .text%__1cNTemplateTableFlload6F_v_; -text: .text%__1cNTemplateTableKfast_iload6F_v_; -text: .text%__1cNTemplateTableLfast_iload26F_v_; -text: .text%__1cNTemplateTableFiload6F_v_; -text: .text%__1cNTemplateTableGcaload6F_v_; -text: .text%__1cNTemplateTableHsastore6F_v_; -text: .text%__1cNTemplateTableHbastore6F_v_; -text: .text%__1cNTemplateTableHaastore6F_v_; -text: .text%__1cNTemplateTableHdastore6F_v_; -text: .text%__1cNTemplateTableHfastore6F_v_; -text: .text%__1cNTemplateTableHlastore6F_v_; -text: .text%__1cNTemplateTableHiastore6F_v_; -text: .text%__1cNTemplateTableLwide_astore6F_v_; -text: .text%__1cNTemplateTableLwide_dstore6F_v_; -text: .text%__1cNTemplateTableLwide_fstore6F_v_; -text: .text%__1cNTemplateTableGastore6F_v_; -text: .text%__1cNTemplateTableGdstore6F_v_; -text: .text%__1cNTemplateTableGfstore6F_v_; -text: .text%__1cNTemplateTableGlstore6F_v_; -text: .text%__1cNTemplateTableGistore6F_v_; -text: .text%__1cNTemplateTableHaload_06F_v_; -text: .text%__1cNTemplateTableGsaload6F_v_; -text: .text%__1cNTemplateTableMfast_icaload6F_v_; -text: .text%__1cNTemplateTableGldc2_w6F_v_; -text: .text%__1cLsymbolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: symbolKlass.o; -text: .text%__1cLsymbolKlassOset_alloc_size6MI_v_: symbolKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: symbolKlass.o; -text: .text%__1cLsymbolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cINegFNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cISubFNodeDsub6kMpknEType_3_3_; -text: .text%__1cSstubRoutines_init26F_v_; -text: .text%__1cSstubRoutines_init16F_v_; -text: .text%__1cMStubRoutinesLinitialize26F_v_; -text: .text%__1cMStubRoutinesLinitialize16F_v_; -text: .text%__1cNStubGeneratorTgenerate_verify_oop6M_pC_: stubGenerator_i486.o; -text: .text%__1cNStubGeneratorbAgenerate_forward_exception6M_pC_: stubGenerator_i486.o; -text: .text%__1cNStubGeneratorSgenerate_call_stub6MrpC_1_: stubGenerator_i486.o; -text: .text%__1cNStubGeneratorYgenerate_catch_exception6M_pC_: stubGenerator_i486.o; -text: .text%__1cNStubGeneratorUgenerate_atomic_xchg6M_pC_: stubGenerator_i486.o; -text: .text%__1cNStubGeneratorYgenerate_get_previous_fp6M_pC_: stubGenerator_i486.o; -text: .text%__1cNStubGeneratorUcreate_control_words6M_v_: stubGenerator_i486.o; -text: .text%__1cLStatSamplerXcreate_sampled_perfdata6F_v_; -text: .text%__1cQSystemDictionarybAcompute_java_system_loader6FpnGThread__v_; -text: .text%__1cNTemplateTableGsipush6F_v_; -text: .text%__1cNTemplateTableGbipush6F_v_; -text: .text%__1cNTemplateTableLaconst_null6F_v_; -text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_; -text: .text%__1cNTemplateTableDnop6F_v_; -text: .text%__1cNTemplateTableNpd_initialize6F_v_; -text: .text%__1cStemplateTable_init6F_v_; -text: .text%__1cNTemplateTableDjsr6F_v_; -text: .text%__1cNTemplateTableFjsr_w6F_v_; -text: .text%__1cNTemplateTableGgoto_w6F_v_; -text: .text%__1cNTemplateTableF_goto6F_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC222_v_; -text: .text%__1cMPeriodicTaskJdisenroll6M_v_; -text: .text%__1cMPeriodicTaskLis_enrolled6kM_i_; -text: .text%__1cMPeriodicTask2T5B6M_v_; -text: .text%__1cQSystemDictionarybDinitialize_basic_type_mirrors6FpnGThread__v_; -text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_; -text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_; -text: .text%__1cQSystemDictionaryKclasses_do6FpFpnMklassOopDesc__v_v_; -text: .text%__1cLremove_file6Fpkc_v_: perfMemory_solaris.o; -text: .text%__1cNMemoryServicebFadd_parallel_scavenge_heap_info6FpnUParallelScavengeHeap__v_; -text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_; -text: .text%__1cMCodeHeapPool2t6MpnICodeHeap_pkci_v_; -text: .text%__1cYSurvivorMutableSpacePool2t6MpnKPSYoungGen_pkcnKMemoryPoolIPoolType_i_v_; -text: .text%__1cUEdenMutableSpacePool2t6MpnKPSYoungGen_pnMMutableSpace_pkcnKMemoryPoolIPoolType_i_v_; -text: .text%__1cQPSGenerationPool2t6MpnJPSPermGen_pkcnKMemoryPoolIPoolType_i_v_; -text: .text%__1cQPSGenerationPool2t6MpnIPSOldGen_pkcnKMemoryPoolIPoolType_i_v_; -text: .text%__1cNMemoryManagerbEget_psMarkSweep_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cNMemoryManagerbDget_psScavenge_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: matcher.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; -text: .text%__1cJMarkSweepSMarkAndPushClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepRFollowRootClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepSFollowStackClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepOIsAliveClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepQKeepAliveClosure2t6M_v_: markSweep.o; -text: .text%__1cOmarksweep_init6F_v_; -text: .text%__1cNMemoryServiceXadd_psYoung_memory_pool6FpnKPSYoungGen_pnNMemoryManager_4_v_; -text: .text%__1cKmutex_init6F_v_; -text: .text%__1cMMutableSpaceOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: methodLiveness.o; -text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodKlass.o; -text: .text%__1cLmethodKlassOset_alloc_size6MI_v_: methodKlass.o; -text: .text%__1cLmethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cHRetDataKis_RetData6M_i_: methodDataOop.o; -text: .text%__1cHRetDataJfixup_ret6MinQmethodDataHandle__pC_; -text: .text%__1cHRetDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cPmethodDataKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodDataKlass.o; -text: .text%__1cPmethodDataKlassOset_alloc_size6MI_v_: methodDataKlass.o; -text: .text%__1cPmethodDataKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o; -text: .text%__1cNGrowableArray4CpnKMemoryPool__2t6Mii_v_: memoryService.o; -text: .text%__1cNGrowableArray4CpnNMemoryManager__2t6Mii_v_: memoryService.o; -text: .text%__1cNMemoryServiceZadd_code_heap_memory_pool6FpnICodeHeap__v_; -text: .text%__1cNMemoryServiceWadd_psPerm_memory_pool6FpnJPSPermGen_pnNMemoryManager__v_; -text: .text%__1cNMemoryServiceVadd_psOld_memory_pool6FpnIPSOldGen_pnNMemoryManager__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: klassKlass.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: klassKlass.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: klassKlass.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: klassKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: klassKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: klassKlass.o; -text: .text%__1cFKlassUoop_is_objArrayKlass6kM_i_: klassKlass.o; -text: .text%__1cFKlassVoop_is_typeArrayKlass6kM_i_: klassKlass.o; -text: .text%__1cFKlassUoop_is_instanceKlass6kM_i_: klassKlass.o; -text: .text%__1cKklassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o; -text: .text%__1cJMemRegion2t6M_v_: jvmtiTagMap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiImpl.o; -text: .text%__1cWNonPrintingResourceObj2n6FInLResourceObjPallocation_type__pv_: jvmtiImpl.o; -text: .text%__1cNGrowableArray4CpnPJvmtiRawMonitor__2t6Mii_v_: jvmtiImpl.o; -text: .text%__1cUJvmtiPendingMonitorsXtransition_raw_monitors6F_v_; -text: .text%__1cLJvmtiExportbMtransition_pending_onload_raw_monitors6F_v_; -text: .text%__1cLJvmtiExportNpost_vm_death6F_v_; -text: .text%__1cKklassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: klassKlass.o; -text: .text%__1cJTimeStamp2t6M_v_: management.o; -text: .text%__1cKManagementWrecord_vm_startup_time6Fxx_v_; -text: .text%__1cKManagementKinitialize6FpnGThread__v_; -text: .text%__1cKManagementEinit6F_v_; -text: .text%__1cPmanagement_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: machnode.o; -text: .text%__1cGThreadMis_VM_thread6kM_i_: lowMemoryDetector.o; -text: .text%__1cKJavaThreadOis_Java_thread6kM_i_: lowMemoryDetector.o; -text: .text%__1cXLowMemoryDetectorThreadbCis_hidden_from_external_view6kM_i_: lowMemoryDetector.o; -text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_; -text: .text%__1cRLowMemoryDetectorUhas_pending_requests6F_i_; -text: .text%__1cRLowMemoryDetectorKinitialize6F_v_; -text: .text%__1cKRegionNodeUdepends_only_on_test6kM_i_: loopnode.o; -text: .text%__1cNIdealLoopTreeUmerge_many_backedges6MpnOPhaseIdealLoop__v_; -text: .text%__1cKfix_parent6FpnNIdealLoopTree_1_v_: loopnode.o; -text: .text%__1cNIdealLoopTreeQsplit_outer_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: loaderConstraints.o; -text: .text%__1cVLoaderConstraintTable2t6Mi_v_; -text: .text%__1cIGraphKitTcreate_and_xform_if6MpnENode_2ff_pnGIfNode__: library_call.o; -text: .text%__1cFKlassRoop_is_methodData6kM_i_: objArrayKlass.o; -text: .text%__1cUParallelScavengeHeapMmax_capacity6kM_I_; -text: .text%__1cUParallelScavengeHeapPpost_initialize6M_v_; -text: .text%__1cUParallelScavengeHeapKinitialize6M_i_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; -text: .text%__1cMarrayOopDescLheader_size6FnJBasicType__i_: parGCAllocBuffer.o; -text: .text%__1cRalign_object_size6Fi_i_: parGCAllocBuffer.o; -text: .text%__1cHoopDescLheader_size6F_i_: parGCAllocBuffer.o; -text: .text%__SLIP.DELETER__C: ostream.o; -text: .text%__1cMostream_exit6F_v_; -text: .text%__1cQostream_init_log6F_v_; -text: .text%__1cMostream_init6F_v_; -text: .text%__1cNdefaultStreamEinit6M_v_; -text: .text%__1cCosMsupports_sse6F_i_; -text: .text%__1cVcheck_for_sse_support6F_v_: os_solaris_i486.o; -text: .text%__1cCosGinit_26F_i_; -text: .text%__1cCosEinit6F_v_; -text: .text%__1cCosHSolarisUsynchronization_init6F_v_; -text: .text%__1cCosHSolarisOlibthread_init6F_v_; -text: .text%__1cUParallelScavengeHeapYpermanent_object_iterate6MpnNObjectClosure__v_; -text: .text%__1cWget_sharedmem_filename6Fpkci_pc_: perfMemory_solaris.o; -text: .text%__1cNget_user_name6Fl_pc_: perfMemory_solaris.o; -text: .text%__1cQget_user_tmp_dir6Fpkc_pc_: perfMemory_solaris.o; -text: .text%__1cKPerfMemoryHdestroy6F_v_; -text: .text%__1cKPerfMemoryKinitialize6F_v_; -text: .text%__1cPperfMemory_exit6F_v_; -text: .text%__1cPperfMemory_init6F_v_; -text: .text%__1cMPerfDataListFclone6M_p0_; -text: .text%__1cMPerfDataList2t6Mp0_v_; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnPPerfLongCounter__; -text: .text%__1cPPerfDataManagerHsampled6F_pnMPerfDataList__; -text: .text%__1cPPerfDataManagerHdestroy6F_v_; -text: .text%__1cFParseMjump_if_join6MpnENode_2_2_; -text: .text%__1cPGenerationSizerQinitialize_flags6M_v_: parallelScavengeHeap.o; -text: .text%__1cbCTwoGenerationCollectorPolicyMrem_set_name6M_nJGenRemSetEName__: parallelScavengeHeap.o; -text: .text%__1cUParallelScavengeHeapEkind6M_nNCollectedHeapEName__: parallelScavengeHeap.o; -text: .text%__1cUParallelScavengeHeapIend_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; -text: .text%__1cUParallelScavengeHeapEheap6F_p0_; -text: .text%__1cUParallelScavengeHeapNgc_threads_do6kMpnNThreadClosure__v_; -text: .text%__1cOisT2_libthread6F_i_; -text: .text%__1cCosNset_boot_path6Fcc_i_; -text: .text%__1cCosLinit_random6Fl_v_; -text: .text%__1cCosGstrdup6Fpkc_pc_; -text: .text%__1cCosXterminate_signal_thread6F_v_; -text: .text%__1cCosLsignal_init6F_v_; -text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cQDoNothingClosure2t6M_v_: oopMap.o; -text: .text%__1cXonStackReplacement_init6F_v_; -text: .text%__1cSOnStackReplacementKinitialize6F_v_; -text: .text%__1cNObjectMonitorREntryQdDueue_unlink6MpnMObjectWaiter__v_; -text: .text%__1cSobjArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlassKlass.o; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: objArrayKlassKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: objArrayKlassKlass.o; -text: .text%__1cSobjArrayKlassKlassUoop_is_objArrayKlass6kM_i_: objArrayKlassKlass.o; -text: .text%__1cSobjArrayKlassKlassbEallocate_system_objArray_klass6MpnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassNoop_is_method6kM_i_: objArrayKlass.o; -text: .text%__1cCosXis_server_class_machine6F_i_; -text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; -text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; -text: .text%__1cNpriocntl_stub6FinGidtype_lipc_l_: os_solaris.o; -text: .text%__1cCosHSolarisRmpss_sanity_check6F_v_; -text: .text%__1cCosPuncommit_memory6FpcI_i_; -text: .text%__1cCosLsignal_wait6F_i_; -text: .text%__1cVcheck_pending_signals6Fi_i_: os_solaris.o; -text: .text%__1cCosNsignal_notify6Fi_v_; -text: .text%__1cCosOsignal_init_pd6F_v_; -text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; -text: .text%__1cCosSget_temp_directory6F_pkc_; -text: .text%__1cCosbDallocate_thread_local_storage6F_i_; -text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; -text: .text%__1cCosScreate_main_thread6FpnGThread__i_; -text: .text%__1cQcreate_os_thread6FpnGThread_I_pnIOSThread__: os_solaris.o; -text: .text%__1cCosbDinit_system_properties_values6F_v_; -text: .text%__1cCosHSolarisWinitialize_system_info6F_v_; -text: .text%__1cCosPphysical_memory6F_X_; -text: .text%__1cSThreadLocalStorageHpd_init6F_v_; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_COMPILER2_sparc --- a/make/solaris/makefiles/reorder_COMPILER2_sparc Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7113 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; - - -text: .text%__1cLOptoRuntimeLjshort_copy6Fph1I_v_; -text: .text%__1cLOptoRuntimeTarrayof_jshort_copy6FpnIHeapWord_2I_v_; -text: .text%__1cSPSPromotionManagerWcopy_to_survivor_space6MpnHoopDesc__2_; -text: .text%__1cCosOjavaTimeMillis6F_x_; -text: .text%__1cQIndexSetIteratorQadvance_and_next6M_I_; -text: .text%__1cNinstanceKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cJMarkSweepO_mark_and_push6FppnHoopDesc__v_; -text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOtypeArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cMOopTaskQdDueueKpop_global6MrpnHoopDesc__i_; -text: .text%__1cIMachNodeHis_Mach6M_p0_: ad_sparc_misc.o; -text: .text%__1cIPhaseIFGIadd_edge6MII_i_; -text: .text%__1cQIndexSetIterator2t6MpnIIndexSet__v_; -text: .text%__1cQIndexSetIteratorEnext6M_I_: ifg.o; -text: .text%__1cJMarkSweepPmark_and_follow6FppnHoopDesc__v_; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: ad_sparc_misc.o; -text: .text%__1cENodeEjvms6kM_pnIJVMState__; -text: .text%__1cHRegMaskFis_UP6kM_i_; -text: .text%__1cUGenericGrowableArrayLraw_at_grow6MipknEGrET__pv_; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: ad_sparc_misc.o; -text: .text%__1cIMachNodeNrematerialize6kM_i_; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: classes.o; -text: .text%__1cIProjNodeHis_Proj6M_p0_; -text: .text%__1cENodeHis_Mach6M_pnIMachNode__: classes.o; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: classes.o; -text: .text%__1cIIndexSetWalloc_block_containing6MI_pn0AIBitBlock__; -text: .text%__1cENodeHis_Copy6kM_I_: ad_sparc_misc.o; -text: .text%__1cETypeDcmp6Fkpk03_i_; -text: .text%__1cENodeHis_Copy6kM_I_: classes.o; -text: .text%__1cENodeHlatency6MI_I_; -text: .text%__1cHRegMaskJis_bound16kM_i_; -text: .text%__1cDff16FI_i_; -text: .text%__1cHRegMaskESize6kM_I_; -text: .text%__1cENodeMis_SpillCopy6M_pnRMachSpillCopyNode__: ad_sparc_misc.o; -text: .text%__1cXresource_allocate_bytes6FI_pc_; -text: .text%__1cIMachNodeJideal_reg6kM_I_: ad_sparc_misc.o; -text: .text%__1cJCProjNodeNis_block_proj6kM_pknENode__: classes.o; -text: .text%__1cRMachSpillCopyNodeMis_SpillCopy6M_p0_: ad_sparc.o; -text: .text%__1cENodeGis_CFG6kM_i_: classes.o; -text: .text%__1cENodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJVectorSet2R6MI_rnDSet__; -text: .text%__1cHRegMaskJis_bound26kM_i_; -text: .text%__1cNSharedRuntimeElmul6Fxx_x_; -text: .text%__1cPOopTaskQdDueueSetFsteal6MipirpnHoopDesc__i_; -text: .text%__1cIMachNodeGOpcode6kM_i_; -text: .text%__1cENodeGpinned6kM_i_: classes.o; -text: .text%__1cJiRegIOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cIIndexSetKinitialize6MI_v_; -text: .text%__1cITypeNodeLbottom_type6kM_pknEType__; -text: .text%__1cNRelocIteratorEnext6M_i_: relocInfo.o; -text: .text%__1cRMachSpillCopyNodeHis_Copy6kM_I_: ad_sparc.o; -text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_; -text: .text%__1cKTypeOopPtrFklass6kM_pnHciKlass__: type.o; -text: .text%__1cHPhiNodeGis_Phi6M_p0_: cfgnode.o; -text: .text%__1cETypeFuhash6Fkpk0_i_; -text: .text%__1cQIndexSetIteratorEnext6M_I_: chaitin.o; -text: .text%__1cNSafePointNodeGis_CFG6kM_i_: callnode.o; -text: .text%__1cENodeIout_grow6MI_v_; -text: .text%__1cIMachNodeHis_Mach6M_p0_: ad_sparc.o; -text: .text%__1cJCProjNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cOloadConI13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNobjArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cENodeHadd_req6Mp0_v_; -text: .text%__1cEDictGInsert6Mpv1i_1_; -text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cJMultiNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cENodeGis_CFG6kM_i_: cfgnode.o; -text: .text%__1cOloadConI13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOloadConI13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cJMarkSweepOIsAliveClosureLdo_object_b6MpnHoopDesc__i_: markSweep.o; -text: .text%__1cKRegionNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cIProjNodeGis_CFG6kM_i_; -text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cINodeHashLhash_delete6MpknENode__i_; -text: .text%__1cFArenaIcontains6kMpkv_i_; -text: .text%__1cOloadConI13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cICallNodeKmatch_edge6kMI_I_; -text: .text%__1cINodeHashQhash_find_insert6MpnENode__2_; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: classes.o; -text: .text%__1cHPhiNodeGOpcode6kM_i_; -text: .text%__1cHTypeIntCeq6kMpknEType__i_; -text: .text%__1cKbranchNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cIProjNodeGpinned6kM_i_; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: classes.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: classes.o; -text: .text%__1cIMachNodeQis_MachNullCheck6M_pnRMachNullCheckNode__: ad_sparc_misc.o; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: cfgnode.o; -text: .text%__1cIProjNodeGOpcode6kM_i_; -text: .text%__1cETypeIhashcons6M_pk0_; -text: .text%__1cOPhaseIdealLoopUbuild_loop_late_post6MpnENode_pk0_v_; -text: .text%__1cNRelocIteratorEnext6M_i_: nmethod.o; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: ad_sparc.o; -text: .text%__1cMPhaseChaitinTinterfere_with_live6MIpnIIndexSet__v_; -text: .text%__1cWNode_Backward_IteratorEnext6M_pnENode__; -text: .text%__1cNIdealLoopTreeJis_member6kMpk0_i_; -text: .text%__1cMPhaseChaitinKelide_copy6MpnENode_ipnFBlock_rnJNode_List_6i_i_; -text: .text%__1cQObjectStartArrayMobject_start6MpnIHeapWord__2_: cardTableExtension.o; -text: .text%__1cHCompileRvalid_bundle_info6MpknENode__i_; -text: .text%__1cENodeNrematerialize6kM_i_: classes.o; -text: .text%__1cMMachCallNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cHCompileNnode_bundling6MpknENode__pnGBundle__; -text: .text%__1cOPhaseIdealLoopSget_ctrl_no_update6kMpnENode__2_: loopopts.o; -text: .text%__1cOlower_pressure6FpnDLRG_IpnFBlock_pI4_v_: ifg.o; -text: .text%__1cGIfNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopYsplit_if_with_blocks_pre6MpnENode__2_; -text: .text%__1cOPhaseIdealLoopZsplit_if_with_blocks_post6MpnENode__v_; -text: .text%__1cIUniverseMnon_oop_word6F_pv_; -text: .text%__1cDLRGOcompute_degree6kMr0_i_; -text: .text%__1cFArenaIArealloc6MpvII_1_; -text: .text%__1cIConINodeGOpcode6kM_i_; -text: .text%__1cETypeEmeet6kMpk0_2_; -text: .text%__1cENode2t6MI_v_; -text: .text%__1cRMachSpillCopyNodeJideal_reg6kM_I_: ad_sparc.o; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cIPipelineXfunctional_unit_latency6kMIpk0_I_; -text: .text%__1cWPSScavengeRootsClosureGdo_oop6MppnHoopDesc__v_: psTasks.o; -text: .text%__1cENodeHis_Copy6kM_I_: cfgnode.o; -text: .text%__1cKSchedulingLanti_do_def6MpnFBlock_pnENode_nHOptoRegEName_i_v_; -text: .text%__1cLsymbolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cJCProjNodeNis_block_proj6kM_pknENode__: cfgnode.o; -text: .text%__1cKIfTrueNodeGOpcode6kM_i_; -text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_; -text: .text%__1cNMachIdealNodeMideal_Opcode6kM_i_: ad_sparc.o; -text: .text%__1cIMachNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cETypeJsingleton6kM_i_; -text: .text%__1cQIndexSetIteratorEnext6M_I_: coalesce.o; -text: .text%__1cIMachNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cJloadPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIPhaseIFGQeffective_degree6kMI_i_; -text: .text%__1cWConstantPoolCacheEntryPfollow_contents6M_v_; -text: .text%__1cWConstantPoolCacheEntryPadjust_pointers6M_v_; -text: .text%__1cIAddPNodeGOpcode6kM_i_; -text: .text%__1cIPhaseIFGJre_insert6MI_v_; -text: .text%__1cIPhaseIFGLremove_node6MI_pnIIndexSet__; -text: .text%__1cKNode_ArrayGinsert6MIpnENode__v_; -text: .text%__1cHTypeIntEhash6kM_i_; -text: .text%__1cETypeLisa_oop_ptr6kM_i_; -text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cLsymbolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cMPhaseIterGVNNtransform_old6MpnENode__2_; -text: .text%__1cDfh16FI_i_; -text: .text%__1cNMachIdealNodeErule6kM_I_: ad_sparc.o; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: ad_sparc_misc.o; -text: .text%__1cIciObjectGequals6Mp0_i_; -text: .text%__1cIIndexSetKfree_block6MI_v_; -text: .text%__1cWShouldNotReachHereNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cHTypeIntJsingleton6kM_i_; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: classes.o; -text: .text%__1cENodeHis_Mach6M_pnIMachNode__: cfgnode.o; -text: .text%__1cLIfFalseNodeGOpcode6kM_i_; -text: .text%__1cSCallStaticJavaNodeGOpcode6kM_i_; -text: .text%__1cENodeEhash6kM_I_; -text: .text%__1cOPhaseIdealLoopEsort6MpnNIdealLoopTree_2_2_; -text: .text%__1cMMachProjNodeLbottom_type6kM_pknEType__; -text: .text%JVM_ArrayCopy; -text: .text%__1cOtypeArrayKlassQoop_is_typeArray6kM_i_: typeArrayKlass.o; -text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cNSharedRuntimeDl2f6Fx_f_; -text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: classes.o; -text: .text%__1cIParmNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cMPhaseChaitinKbias_color6MrnDLRG_i_nHOptoRegEName__; -text: .text%__1cHConNodeGOpcode6kM_i_; -text: .text%__1cMPhaseIterGVNWadd_users_to_worklist06MpnENode__v_; -text: .text%__1cMMachProjNodeGOpcode6kM_i_; -text: .text%__1cJiRegPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: classes.o; -text: .text%__1cJiRegIOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cENodeXpartial_latency_of_defs6MrnLBlock_Array_rnNGrowableArray4CI___v_; -text: .text%__1cXPipeline_Use_Cycle_Mask2L6Mi_r0_: ad_sparc_pipeline.o; -text: .text%__1cIBoolNodeGOpcode6kM_i_; -text: .text%__1cJMultiNodeIis_Multi6M_p0_; -text: .text%__1cYCallStaticJavaDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cENodeEgrow6MI_v_; -text: .text%__1cIciObjectEhash6M_i_; -text: .text%__1cKRegionNodeGOpcode6kM_i_; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_: relocInfo.o; -text: .text%__1cOPhaseIdealLoopUbuild_loop_tree_impl6MpnENode_i_i_; -text: .text%__1cJMarkSweepSMarkAndPushClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cRMachSpillCopyNodeLbottom_type6kM_pknEType__: ad_sparc.o; -text: .text%__1cOPhaseIdealLoopOget_early_ctrl6MpnENode__2_; -text: .text%__1cIIndexSetKinitialize6MIpnFArena__v_; -text: .text%__1cLmethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cFMutexGunlock6M_v_; -text: .text%__1cIPhaseGVNJtransform6MpnENode__2_; -text: .text%__1cFStateRMachOperGenerator6MipnIMachNode_pnHCompile__pnIMachOper__; -text: .text%__1cKRelocationNunpack_2_ints6Mri1_v_: relocInfo.o; -text: .text%__1cOoop_RelocationLunpack_data6M_v_; -text: .text%__1cRmethodDataOopDescHdata_at6Mi_pnLProfileData__; -text: .text%__1cNRelocIteratorEnext6M_i_: codeBlob.o; -text: .text%__1cPJavaFrameAnchorNmake_walkable6MpnKJavaThread__v_; -text: .text%__1cENodeNis_block_proj6kM_pk0_; -text: .text%__1cNRelocIteratorFreloc6M_pnKRelocation__; -text: .text%__1cKJavaThreadPcook_last_frame6MnFframe__1_; -text: .text%__1cIProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQconstMethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cUGenericGrowableArrayPraw_at_put_grow6MipknEGrET_3_v_; -text: .text%__1cPClassFileStreamGget_u16MpnGThread__C_; -text: .text%__1cKRegionNodeGpinned6kM_i_: classes.o; -text: .text%__1cLTypeInstPtrEhash6kM_i_; -text: .text%__1cYCallStaticJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOPhaseIdealLoopThas_local_phi_input6MpnENode__2_; -text: .text%__1cJloadINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRMachSpillCopyNodeLout_RegMask6kM_rknHRegMask__: ad_sparc.o; -text: .text%__1cKbranchNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFStateDDFA6MipknENode__i_; -text: .text%__1cMMachProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cENodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cMMachProjNodeLout_RegMask6kM_rknHRegMask__: classes.o; -text: .text%__1cOMethodLivenessKBasicBlockXcompute_gen_kill_single6MpnQciByteCodeStream__v_; -text: .text%__1cRMachSpillCopyNodeKin_RegMask6kMI_rknHRegMask__: ad_sparc.o; -text: .text%__1cbAfinal_graph_reshaping_impl6FpnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cNCollectedHeapYcommon_mem_allocate_init6FIipnGThread__pnIHeapWord__: typeArrayKlass.o; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: typeArrayKlass.o; -text: .text%__1cUParallelScavengeHeapVlarge_typearray_limit6M_I_: parallelScavengeHeap.o; -text: .text%__1cIPhaseCCPOtransform_once6MpnENode__2_; -text: .text%__1cGciTypeEmake6FnJBasicType__p0_; -text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cENodeFclone6kM_p0_; -text: .text%__1cITypeNodeEhash6kM_I_; -text: .text%__1cIBoolNodeHis_Bool6M_p0_: subnode.o; -text: .text%__1cMPipeline_UseMfull_latency6kMIrk0_I_; -text: .text%__1cRMachSpillCopyNodePoper_input_base6kM_I_: ad_sparc.o; -text: .text%__1cENodeKmatch_edge6kMI_I_; -text: .text%__1cQconstMethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cHPhiNodeGpinned6kM_i_: cfgnode.o; -text: .text%__1cOPhaseIdealLoopZremix_address_expressions6MpnENode__2_; -text: .text%__1cSInterpreterRuntimeInewarray6FpnKJavaThread_nJBasicType_i_v_; -text: .text%__1cICallNodeLbottom_type6kM_pknEType__; -text: .text%__1cENodeHis_Root6M_pnIRootNode__: ad_sparc_misc.o; -text: .text%__1cRMachSafePointNodeEjvms6kM_pnIJVMState__: ad_sparc_misc.o; -text: .text%__1cOPhaseIdealLoopNget_late_ctrl6MpnENode_2_2_; -text: .text%__1cOPhaseIdealLoopSget_ctrl_no_update6kMpnENode__2_: loopnode.o; -text: .text%JVM_CurrentTimeMillis; -text: .text%__1cIMachNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cENodeIIdentity6MpnOPhaseTransform__p0_; -text: .text%__1cIPipelinePoperand_latency6kMIpk0_I_; -text: .text%__1cENodeFIdeal6MpnIPhaseGVN_i_p0_; -text: .text%__1cKTypeAryPtrEhash6kM_i_; -text: .text%__1cICallNodeHis_Call6M_p0_: callnode.o; -text: .text%__1cETypeFxmeet6kMpk0_2_; -text: .text%__1cILRG_ListGextend6MII_v_; -text: .text%__1cJVectorSet2F6kMI_i_; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: ad_sparc.o; -text: .text%__1cENodeQIdeal_DU_postCCP6MpnIPhaseCCP__p0_; -text: .text%__1cOtypeArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cIProjNodeEhash6kM_I_; -text: .text%__1cGIfNodeGpinned6kM_i_: classes.o; -text: .text%__1cIAddINodeGOpcode6kM_i_; -text: .text%__1cIIndexSet2t6Mp0_v_; -text: .text%__1cRmethodDataOopDescJnext_data6MpnLProfileData__2_; -text: .text%__1cITypeNodeJideal_reg6kM_I_; -text: .text%__1cYCallStaticJavaDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cLTypeInstPtrCeq6kMpknEType__i_; -text: .text%__1cMloadConPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cENodeMis_SpillCopy6M_pnRMachSpillCopyNode__: classes.o; -text: .text%__1cHPhiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMachNode2t6M_v_; -text: .text%__1cIMachNodeQis_MachNullCheck6M_pnRMachNullCheckNode__: ad_sparc.o; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: callnode.o; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: callnode.o; -text: .text%__1cOis_diamond_phi6FpnENode__i_: cfgnode.o; -text: .text%__1cHMatcherKLabel_Root6MpknENode_pnFState_p16_6_; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: memnode.o; -text: .text%__1cENodeHsize_of6kM_I_; -text: .text%__1cICmpPNodeGOpcode6kM_i_; -text: .text%__1cENodeHis_Loop6M_pnILoopNode__: classes.o; -text: .text%__1cKNode_ArrayGremove6MI_v_; -text: .text%__1cNSafePointNodeGpinned6kM_i_: callnode.o; -text: .text%__1cMOopTaskQdDueueOpop_local_slow6MInOTaskQdDueueSuperDAge__i_; -text: .text%__1cHPhiNodeEhash6kM_I_; -text: .text%__1cKTypeOopPtrJsingleton6kM_i_; -text: .text%__1cPindOffset13OperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cFMutexElock6M_v_; -text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cKoopFactoryKnew_symbol6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cJCProjNodeGis_CFG6kM_i_: cfgnode.o; -text: .text%__1cKmethodOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cGIfNodeFis_If6M_p0_: classes.o; -text: .text%__1cENodeNrematerialize6kM_i_: cfgnode.o; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_: nmethod.o; -text: .text%__1cJStartNodeLbottom_type6kM_pknEType__; -text: .text%__1cHTypeIntFxmeet6kMpknEType__3_; -text: .text%__1cIMachNodeLis_MachCall6M_pnMMachCallNode__: ad_sparc_misc.o; -text: .text%__1cOmatch_into_reg6FpnENode_iii1_i_: matcher.o; -text: .text%__1cENodeSremove_dead_region6MpnIPhaseGVN_i_i_; -text: .text%__1cENodeFis_If6M_pnGIfNode__: classes.o; -text: .text%__1cENodeHis_Mach6M_pnIMachNode__: memnode.o; -text: .text%__1cIProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cPciObjectFactoryDget6MpnHoopDesc__pnIciObject__; -text: .text%__1cKTypeAryPtrCeq6kMpknEType__i_; -text: .text%__1cILocationIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cICmpINodeGOpcode6kM_i_; -text: .text%Unsafe_CompareAndSwapLong; -text: .text%__1cNCatchProjNodeGOpcode6kM_i_; -text: .text%__1cENodeMis_SpillCopy6M_pnRMachSpillCopyNode__: cfgnode.o; -text: .text%__1cSinstanceKlassKlassMoop_is_klass6kM_i_: instanceKlassKlass.o; -text: .text%__1cQUnique_Node_ListGremove6MpnENode__v_; -text: .text%__1cENode2t6Mp0_v_; -text: .text%__1cNLocationValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: classes.o; -text: .text%__1cMloadConPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitHstopped6M_i_; -text: .text%__1cETypeKhas_memory6kM_i_; -text: .text%__1cFframeVinterpreter_frame_bcp6kM_pC_; -text: .text%__1cENodeLis_MergeMem6M_pnMMergeMemNode__: cfgnode.o; -text: .text%__1cMloadConPNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cJStartNodeGpinned6kM_i_: callnode.o; -text: .text%__1cTCreateExceptionNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cHCompileMFillLocArray6MpnENode_pnNGrowableArray4CpnKScopeValue____i_; -text: .text%__1cIHaltNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cIMachNodeQis_MachSafePoint6M_pnRMachSafePointNode__: ad_sparc_misc.o; -text: .text%__1cLTypeInstPtrEmake6FnHTypePtrDPTR_pnHciKlass_ipnIciObject_i_pk0_; -text: .text%__1cPClassFileStreamHskip_u16MipnGThread__v_; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: cfgnode.o; -text: .text%__1cHRegMaskMSmearToPairs6M_v_; -text: .text%__1cYCallStaticJavaDirectNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cMPhaseIterGVNVadd_users_to_worklist6MpnENode__v_; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: callnode.o; -text: .text%__1cKMachIfNodeJis_MachIf6kM_pk0_: ad_sparc_misc.o; -text: .text%__1cMloadConPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: classes.o; -text: .text%__1cbFCompressedLineNumberWriteStreamKwrite_pair6Mii_v_; -text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__; -text: .text%__1cSCallStaticJavaNodeEhash6kM_I_: callnode.o; -text: .text%__1cHMatcherKReduceOper6MpnFState_ipnIMachNode_rpnENode__v_; -text: .text%__1cMPipeline_UseJadd_usage6Mrk0_v_; -text: .text%__1cRCardTableModRefBSEkind6M_nKBarrierSetEName__: cardTableExtension.o; -text: .text%__1cIAddPNodeKmatch_edge6kMI_I_; -text: .text%__1cJiRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cGIfNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cGcmpkey6Fpkv1_i_; -text: .text%__1cNsymbolOopDescGequals6kMpkci_i_; -text: .text%__1cMPhaseChaitinMchoose_color6MrnDLRG_i_nHOptoRegEName__; -text: .text%__1cMMergeMemNodeGOpcode6kM_i_; -text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__; -text: .text%__1cJTypeTupleJsingleton6kM_i_; -text: .text%__1cIParmNodeGOpcode6kM_i_; -text: .text%__1cJiRegPOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cPClassFileParserRverify_legal_utf86MpkCipnGThread__v_; -text: .text%__1cPClassFileParserbEparse_constant_pool_utf8_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cHTypeIntEmake6Fiii_pk0_; -text: .text%__1cENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNsymbolOopDescLas_C_string6kM_pc_; -text: .text%__1cKSchedulingWAddNodeToAvailableList6MpnENode__v_; -text: .text%__1cKSchedulingSChooseNodeToBundle6M_pnENode__; -text: .text%__1cKSchedulingPAddNodeToBundle6MpnENode_pknFBlock__v_; -text: .text%__1cKRelocationLunpack_data6M_v_: codeBlob.o; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: memnode.o; -text: .text%__1cICallNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: classes.o; -text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cJLoadPNodeGOpcode6kM_i_; -text: .text%__1cMMutableSpaceIallocate6MI_pnIHeapWord__; -text: .text%__1cJPSPermGenSallocate_permanent6MI_pnIHeapWord__; -text: .text%__1cUParallelScavengeHeapWpermanent_mem_allocate6MI_pnIHeapWord__; -text: .text%__1cENodeGis_CFG6kM_i_: connode.o; -text: .text%__1cIMachNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMMutableSpaceMcas_allocate6MI_pnIHeapWord__; -text: .text%__1cNflagsRegPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cHPhiNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMMachTypeNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cJCatchNodeGOpcode6kM_i_; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: cfgnode.o; -text: .text%__1cKTypeAryPtrEmake6FnHTypePtrDPTR_pnIciObject_pknHTypeAry_pnHciKlass_ii_pk0_; -text: .text%__1cHCmpNodeGis_Cmp6kM_pk0_: classes.o; -text: .text%__1cIJVMStateLdebug_start6kM_I_; -text: .text%__1cTconstantPoolOopDescSklass_ref_index_at6Mi_i_; -text: .text%__1cENodeHdel_req6MI_v_; -text: .text%__1cRSignatureIterator2t6MnMsymbolHandle__v_; -text: .text%__1cOAbstractICachePinvalidate_word6FpC_v_; -text: .text%__1cFBlockIis_Empty6kM_i_; -text: .text%__1cOThreadCritical2T6M_v_; -text: .text%__1cOThreadCritical2t6M_v_; -text: .text%method_compare: methodOop.o; -text: .text%__1cENodeGis_CFG6kM_i_: subnode.o; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: multnode.o; -text: .text%__1cICodeHeapKfind_start6kMpv_1_; -text: .text%__1cKRegionNodeJis_Region6kM_pk0_: classes.o; -text: .text%__1cETypeEhash6kM_i_; -text: .text%__1cRNativeInstructionLset_long_at6Mii_v_; -text: .text%__1cJMultiNodeEhash6kM_I_: classes.o; -text: .text%__1cIAddPNodeLbottom_type6kM_pknEType__; -text: .text%__1cQciByteCodeStreamEjava6MnJBytecodesECode__2_; -text: .text%__1cJCProjNodeEhash6kM_I_: classes.o; -text: .text%__1cIHaltNodeGOpcode6kM_i_; -text: .text%__1cMMachCallNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cFBlockGselect6MrnJNode_List_rnLBlock_Array_pirnJVectorSet_IrnNGrowableArray4CI___pnENode__; -text: .text%__1cFStateRMachNodeGenerator6MipnHCompile__pnIMachNode__; -text: .text%__1cHMatcherKReduceInst6MpnFState_irpnENode__pnIMachNode__; -text: .text%__1cICmpUNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopbIdom_lca_for_get_late_ctrl_internal6MpnENode_22_2_; -text: .text%__1cXPipeline_Use_Cycle_MaskCOr6Mrk0_v_; -text: .text%__1cTconstantPoolOopDescQsignature_ref_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cILoadNodeEhash6kM_I_; -text: .text%__1cIMachNodePcompute_padding6kMi_i_: ad_sparc_misc.o; -text: .text%__1cKTypeAryPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cIMachNodeGExpand6MpnFState_rnJNode_List__p0_: ad_sparc_misc.o; -text: .text%__1cGBitMapFclear6M_v_; -text: .text%__1cHConNodeGis_Con6kM_I_: classes.o; -text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_; -text: .text%__1cKHandleMark2T6M_v_; -text: .text%__1cFKlassMoop_is_array6kM_i_: instanceKlass.o; -text: .text%__1cFBlockLis_uncommon6kMrnLBlock_Array__i_; -text: .text%__1cZPhaseConservativeCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cMPhaseIterGVNZremove_globally_dead_node6MpnENode__v_; -text: .text%__1cWShouldNotReachHereNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHPhiNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cILoadNodeLbottom_type6kM_pknEType__; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: cfgnode.o; -text: .text%__1cENodeLis_MergeMem6M_pnMMergeMemNode__: multnode.o; -text: .text%__1cNobjArrayKlassQarray_klass_impl6MiipnGThread__pnMklassOopDesc__; -text: .text%__1cNobjArrayKlassQarray_klass_impl6FnTobjArrayKlassHandle_iipnGThread__pnMklassOopDesc__; -text: .text%JVM_ReleaseUTF; -text: .text%__1cJloadPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJTypeTupleEhash6kM_i_; -text: .text%__1cFframeVoopmapreg_to_location6kMnFVMRegEName_pknLRegisterMap__ppnHoopDesc__; -text: .text%__1cENodeHget_int6kM_i_; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: methodDataOop.o; -text: .text%__1cHMatcherTReduceInst_Interior6MpnFState_ipnIMachNode_IrpnENode__I_; -text: .text%__1cNinstanceKlassQarray_klass_impl6MiipnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassQarray_klass_impl6FnTinstanceKlassHandle_iipnGThread__pnMklassOopDesc__; -text: .text%__1cMflagsRegOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cKRelocationSfix_oop_relocation6M_v_: codeBlob.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: cfgnode.o; -text: .text%__1cICodeBlobLoop_addr_at6kMi_ppnHoopDesc__; -text: .text%__1cObranchConPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKoopFactoryMnew_objArray6FpnMklassOopDesc_ipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassRallocate_objArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cMOopMapStreamJfind_next6M_v_; -text: .text%__1cFDictI2i6M_v_; -text: .text%__1cIMachNodeSalignment_required6kM_i_: ad_sparc_misc.o; -text: .text%__1cENodeOis_CountedLoop6M_pnPCountedLoopNode__: classes.o; -text: .text%__1cKNode_ArrayEgrow6MI_v_; -text: .text%__1cHTypeIntEmake6Fi_pk0_; -text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_; -text: .text%__1cJloadPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMMergeMemNodeLbottom_type6kM_pknEType__: memnode.o; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: multnode.o; -text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; -text: .text%__1cOPSPromotionLABKinitialize6MnJMemRegion__v_; -text: .text%__1cPciInstanceKlassMis_interface6M_i_: ciInstanceKlass.o; -text: .text%__1cJMultiNodeIproj_out6kMI_pnIProjNode__; -text: .text%__1cPindOffset13OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIJVMStateOis_monitor_use6kMI_i_: coalesce.o; -text: .text%__1cUcompI_iReg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cODataRelocationJset_value6MpC_v_: relocInfo.o; -text: .text%__1cKRelocationRpd_set_data_value6MpCi_v_; -text: .text%__1cKCastPPNodeGOpcode6kM_i_; -text: .text%__1cOoop_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cOoop_RelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cPSignatureStreamEnext6M_v_; -text: .text%__1cLLShiftINodeGOpcode6kM_i_; -text: .text%__1cENodeOis_block_start6kM_i_; -text: .text%__1cMPhaseChaitinSuse_prior_register6MpnENode_I2pnFBlock_rnJNode_List_6_i_; -text: .text%__1cGIfNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKCodeBufferIrelocate6MpCrknQRelocationHolder_i_v_; -text: .text%__1cKbranchNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPjava_lang_ClassMis_primitive6FpnHoopDesc__i_; -text: .text%__1cGBitMapJset_union6M0_v_; -text: .text%__1cPVirtualCallDataKcell_count6M_i_: methodDataOop.o; -text: .text%__1cIAddPNodeHis_AddP6M_p0_: classes.o; -text: .text%__1cIConPNodeGOpcode6kM_i_; -text: .text%__1cJLoadINodeGOpcode6kM_i_; -text: .text%__1cUGenericGrowableArray2t6Mii_v_; -text: .text%JVM_GetMethodIxExceptionTableLength; -text: .text%__1cOJNIHandleBlockPallocate_handle6MpnHoopDesc__pnI_jobject__; -text: .text%__1cPClassFileParserUassemble_annotations6MpCi1ipnGThread__nPtypeArrayHandle__; -text: .text%__1cNSharedRuntimeDd2i6Fd_i_; -text: .text%__1cVcompP_iRegP_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKRegionNodeEhash6kM_I_: classes.o; -text: .text%__1cNbranchConNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNSafePointNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: subnode.o; -text: .text%__1cENodeHis_Copy6kM_I_: memnode.o; -text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_; -text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; -text: .text%__1cIAddPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cGBitMap2t6MpII_v_; -text: .text%__1cUGenericGrowableArray2t6MpnFArena_iipnEGrET__v_; -text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_; -text: .text%__1cMMachCallNodeLbottom_type6kM_pknEType__; -text: .text%__1cFParsePdo_one_bytecode6M_v_; -text: .text%__1cFParseNdo_exceptions6M_v_; -text: .text%__1cITypeLongCeq6kMpknEType__i_; -text: .text%__1cLPCTableNodeGpinned6kM_i_: classes.o; -text: .text%__1cTconstantPoolOopDescbAname_and_type_ref_index_at6Mi_i_; -text: .text%__1cHPhiNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cENodeGpinned6kM_i_: connode.o; -text: .text%__1cHPhiNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cENodeGis_Con6kM_I_: classes.o; -text: .text%__1cHMatcherKmatch_tree6MpknENode__pnIMachNode__; -text: .text%__1cUParallelScavengeHeapPis_in_permanent6kMpkv_i_: parallelScavengeHeap.o; -text: .text%__1cMPhaseIterGVNKis_IterGVN6M_p0_: phaseX.o; -text: .text%__1cHCompileJcan_alias6MpknHTypePtr_i_i_; -text: .text%__1cKimmI13OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cCosVcurrent_stack_pointer6F_pC_; -text: .text%__1cENodeJis_Branch6kM_I_: ad_sparc_misc.o; -text: .text%__1cEDict2F6kMpkv_pv_; -text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cENodeIdestruct6M_v_; -text: .text%__1cIMachNodeNis_MachEpilog6M_pnOMachEpilogNode__: ad_sparc_misc.o; -text: .text%__1cMCreateExNodeGOpcode6kM_i_; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: cfgnode.o; -text: .text%__1cIBoolNodeEhash6kM_I_; -text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cLTypeInstPtrFxmeet6kMpknEType__3_; -text: .text%__1cENodeHis_Root6M_pnIRootNode__: classes.o; -text: .text%__1cKNode_ArrayFclear6M_v_; -text: .text%__1cObranchConPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIProjNodeHsize_of6kM_I_; -text: .text%__1cKis_x2logic6FpnIPhaseGVN_pnENode__3_: cfgnode.o; -text: .text%__1cHAbsNodeLis_absolute6FpnIPhaseGVN_pnENode__4_; -text: .text%__1cTconstantPoolOopDescWsignature_ref_index_at6Mi_i_; -text: .text%__1cMloadConINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cGBitMapGat_put6MIi_v_; -text: .text%__1cIHaltNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cLPhaseValuesGintcon6Mi_pnIConINode__; -text: .text%__1cJloadBNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: multnode.o; -text: .text%__1cGThreadLis_in_stack6kMpC_i_; -text: .text%__1cKJavaThreadNis_lock_owned6kMpC_i_; -text: .text%__1cFMutexElock6MpnGThread__v_; -text: .text%__1cKciTypeFlowLStateVectorSapply_one_bytecode6MpnQciByteCodeStream__i_; -text: .text%__1cHhashptr6Fpkv_i_; -text: .text%__1cMMachHaltNodeEjvms6kM_pnIJVMState__; -text: .text%__1cENodeLis_MergeMem6M_pnMMergeMemNode__: classes.o; -text: .text%__1cGOopMapJset_value6MnHOptoRegEName_ii_v_; -text: .text%__1cHhashkey6Fpkv_i_; -text: .text%__1cMPhaseChaitinHnew_lrg6MpknENode_I_v_; -text: .text%__1cIJVMStateJdebug_end6kM_I_; -text: .text%__1cIPhaseIFGMtest_edge_sq6kMII_i_; -text: .text%__1cENodeMis_SafePoint6M_pnNSafePointNode__: classes.o; -text: .text%__1cTconstantPoolOopDescLname_ref_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cLBoxLockNodeNrematerialize6kM_i_: classes.o; -text: .text%__1cKBranchDataKcell_count6M_i_: methodDataOop.o; -text: .text%__1cJloadPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cHSubNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: callnode.o; -text: .text%__1cJTypeTupleCeq6kMpknEType__i_; -text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_; -text: .text%__1cSaddP_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMachNodeHtwo_adr6kM_I_: ad_sparc.o; -text: .text%__1cNSafePointNodeHsize_of6kM_I_; -text: .text%__1cObranchConPNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cLTypeInstPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cHCmpNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPcheckCastPPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNLoadRangeNodeGOpcode6kM_i_; -text: .text%__1cNbranchConNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cENode2t6Mp011_v_; -text: .text%__1cFKlassMoop_is_klass6kM_i_: symbolKlass.o; -text: .text%__1cHCompilePfind_alias_type6MpknHTypePtr_i_pn0AJAliasType__; -text: .text%__1cJStoreNodeKmatch_edge6kMI_I_; -text: .text%__1cKbranchNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cOPSPromotionLABFflush6M_v_; -text: .text%__1cQResultTypeFinderDset6MinJBasicType__v_: bytecode.o; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: generateOopMap.o; -text: .text%__1cOcompU_iRegNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__; -text: .text%__1cICodeHeapJnext_free6kMpnJHeapBlock__pv_; -text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__; -text: .text%__1cICodeHeapKnext_block6kMpnJHeapBlock__2_; -text: .text%__1cQSystemDictionaryXcheck_signature_loaders6FnMsymbolHandle_nGHandle_2ipnGThread__v_; -text: .text%__1cKbranchNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeIis_Start6M_pnJStartNode__: ad_sparc_misc.o; -text: .text%__1cJloadPNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cSCountedLoopEndNodeGOpcode6kM_i_; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: cfgnode.o; -text: .text%__1cPciInstanceKlassGloader6M_pnHoopDesc__; -text: .text%__1cHMemNodeMIdeal_common6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cPcheckCastPPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNCellTypeStateFmerge6kM0i_0_; -text: .text%__1cMPhaseIterGVNMsubsume_node6MpnENode_2_v_; -text: .text%__1cNinstanceKlassPoop_is_instance6kM_i_: instanceKlass.o; -text: .text%__1cILoadNodeKmatch_edge6kMI_I_; -text: .text%__1cENodeGis_Con6kM_I_: subnode.o; -text: .text%__1cFframeUis_interpreted_frame6kM_i_; -text: .text%__1cLsymbolKlassNoop_is_symbol6kM_i_: symbolKlass.o; -text: .text%__1cJloadINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cETypeFempty6kM_i_; -text: .text%__1cNExceptionMark2T6M_v_; -text: .text%__1cNExceptionMark2t6MrpnGThread__v_; -text: .text%__1cMMachCallNodeLis_MachCall6M_p0_: ad_sparc_misc.o; -text: .text%__1cIMachNodeHis_Mach6M_p0_: machnode.o; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: connode.o; -text: .text%__1cITypeLongEhash6kM_i_; -text: .text%__1cNSafePointNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cJHashtableJnew_entry6MIpnHoopDesc__pnOHashtableEntry__; -text: .text%__1cJiRegLOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: multnode.o; -text: .text%__1cKJNIHandlesKmake_local6FpnHJNIEnv__pnHoopDesc__pnI_jobject__; -text: .text%__1cMPhaseIterGVNbGregister_new_node_with_optimizer6MpnENode__2_; -text: .text%__1cPciInstanceKlassRis_instance_klass6M_i_: ciInstanceKlass.o; -text: .text%__1cPciInstanceKlassRprotection_domain6M_pnHoopDesc__; -text: .text%__1cOloadConI13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMloadConINodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOloadConI13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cObranchConPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKStoreINodeGOpcode6kM_i_; -text: .text%__1cJcmpOpOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cRSignatureIterator2t6MpnNsymbolOopDesc__v_; -text: .text%__1cOno_flip_branch6FpnFBlock__i_: block.o; -text: .text%__1cMloadConINodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cJiRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKRegionNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKstorePNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cHPhiNodeHsize_of6kM_I_: cfgnode.o; -text: .text%__1cJrelocInfo2t6Mn0AJrelocType_ii_v_; -text: .text%__1cPSignatureStreamHis_done6kM_i_; -text: .text%__1cJrelocInfoNfinish_prefix6Mph_p0_; -text: .text%__1cIAddPNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cQaddP_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescPis_empty_method6kM_i_; -text: .text%__1cSaddI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKReflectionTverify_field_access6FpnMklassOopDesc_22nLAccessFlags_ii_i_; -text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMflagsRegOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cIBoolNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLCounterDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cHRegMaskMClearToPairs6M_v_; -text: .text%__1cJiRegLOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cRshlI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cZPhaseConservativeCoalesceJcopy_copy6MpnENode_2pnFBlock_I_i_; -text: .text%__1cKNode_Array2t6MpnFArena__v_: lcm.o; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode__i_; -text: .text%__1cKRelocationSfix_oop_relocation6M_v_: relocInfo.o; -text: .text%__1cNPhaseCoalesceRcombine_these_two6MpnENode_2_v_; -text: .text%__1cNflagsRegPOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cKcmpOpPOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cKTypeRawPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cMloadConINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescRis_not_compilable6kMi_i_; -text: .text%__1cNmethodOopDescLis_accessor6kM_i_; -text: .text%__1cFArenaEgrow6MI_pv_; -text: .text%__1cMPhaseChaitinLinsert_proj6MpnFBlock_IpnENode_I_v_; -text: .text%__1cILoadNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJStoreNodeLbottom_type6kM_pknEType__; -text: .text%__1cKTypeRawPtrJsingleton6kM_i_; -text: .text%__1cGIfNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cHMemNodeGis_Mem6M_p0_: classes.o; -text: .text%__1cSCallStaticJavaNodeRis_CallStaticJava6kM_pk0_: callnode.o; -text: .text%__1cIBoolNodeLbottom_type6kM_pknEType__: subnode.o; -text: .text%__1cENodeHis_Goto6kM_I_: classes.o; -text: .text%__1cPciObjectFactorySget_unloaded_klass6MpnHciKlass_pnIciSymbol_i_2_; -text: .text%__1cNSafePointNodeSset_next_exception6Mp0_v_; -text: .text%__1cNmethodOopDescMintrinsic_id6kM_n0ALIntrinsicId__; -text: .text%__1cQaddP_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIHaltNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPCheckCastPPNodeGOpcode6kM_i_; -text: .text%__1cKStorePNodeGOpcode6kM_i_; -text: .text%__1cKRelocationLunpack_data6M_v_: relocInfo.o; -text: .text%__1cNflagsRegUOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cQciByteCodeStreamMreset_to_bci6Mi_v_; -text: .text%__1cPcheckCastPPNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAddPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRInvocationCounterEinit6M_v_; -text: .text%__1cKNode_Array2t6MpnFArena__v_: block.o; -text: .text%__1cTconstantPoolOopDescNklass_name_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cMMergeMemNodeLis_MergeMem6M_p0_: memnode.o; -text: .text%__1cFBlockOschedule_local6MrnHMatcher_rnLBlock_Array_pirnJVectorSet_rnNGrowableArray4CI___i_; -text: .text%__1cXPhaseAggressiveCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cFBlockScall_catch_cleanup6MrnLBlock_Array__v_; -text: .text%__1cObranchConUNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cUcompI_iReg_imm13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQCompressedStream2t6MpCi_v_; -text: .text%__1cTconstantPoolOopDescRname_ref_index_at6Mi_i_; -text: .text%__1cIAddINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cHRetNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cKRegionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstorePNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMObjectLocker2t6MnGHandle_pnGThread__v_; -text: .text%__1cMObjectLocker2T6M_v_; -text: .text%__1cNSafePointNodebBneeds_polling_address_input6F_i_; -text: .text%__1cKRegionNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cOcompI_iRegNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cObranchConPNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cICallNodeIIdentity6MpnOPhaseTransform__pnENode__: callnode.o; -text: .text%__1cMURShiftINodeGOpcode6kM_i_; -text: .text%__1cRmethodDataOopDescPinitialize_data6MpnOBytecodeStream_i_i_; -text: .text%__1cENodeGis_CFG6kM_i_: memnode.o; -text: .text%__1cNRelocIteratorKset_limits6MpC1_v_; -text: .text%__1cIRootNodeGOpcode6kM_i_; -text: .text%__1cOloadConI13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cILoadNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cTCreateExceptionNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFStateM_sub_Op_ConI6MpknENode__v_; -text: .text%__1cRMachSafePointNodeQis_MachSafePoint6M_p0_: ad_sparc_misc.o; -text: .text%__1cENodeHdel_out6Mp0_v_: parse2.o; -text: .text%__1cPcheckCastPPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeGis_Mem6M_pnHMemNode__: classes.o; -text: .text%__1cISubINodeGOpcode6kM_i_; -text: .text%__1cNbranchConNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFframeZsender_with_pc_adjustment6kMpnLRegisterMap_pnICodeBlob_i_0_; -text: .text%__1cJTypeTupleEmake6FIppknEType__pk0_; -text: .text%__1cJTypeTupleGfields6FI_ppknEType__; -text: .text%__1cFframeGsender6kMpnLRegisterMap_pnICodeBlob__0_; -text: .text%__1cENodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLSymbolTableJbasic_add6MipCiIpnGThread__pnNsymbolOopDesc__; -text: .text%__1cLsymbolKlassPallocate_symbol6MpCipnGThread__pnNsymbolOopDesc__; -text: .text%__1cSinstanceKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cRAbstractAssemblerEbind6MrnFLabel__v_; -text: .text%__1cILoadNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cENodeGpinned6kM_i_: subnode.o; -text: .text%__1cKbranchNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cHPhiNodeIadr_type6kM_pknHTypePtr__: cfgnode.o; -text: .text%__1cHAddNodeEhash6kM_I_; -text: .text%__1cMPhaseIterGVNFwiden6kMpknEType_3_3_: phaseX.o; -text: .text%__1cNbranchConNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cSPSPromotionManagerMdrain_stacks6M_v_; -text: .text%__1cENodeRdisconnect_inputs6Mp0_i_; -text: .text%__1cLis_cond_add6FpnIPhaseGVN_pnHPhiNode__pnENode__; -text: .text%__1cPsplit_flow_path6FpnIPhaseGVN_pnHPhiNode__pnENode__: cfgnode.o; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: cfgnode.o; -text: .text%__1cNbranchConNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cSaddI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcompU_iRegNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJFieldTypeKbasic_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cHConNodeEhash6kM_I_; -text: .text%__1cLLShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cOMachReturnNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cJdo_method6FpnNmethodOopDesc__v_: recompilationMonitor.o; -text: .text%__1cNidealize_test6FpnIPhaseGVN_pnGIfNode__3_: ifnode.o; -text: .text%__1cILoadNodeHis_Load6M_p0_: classes.o; -text: .text%__1cYCallStaticJavaDirectNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadPNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: subnode.o; -text: .text%__1cOPhaseIdealLoopSget_ctrl_no_update6kMpnENode__2_: split_if.o; -text: .text%__1cITypeNodeHsize_of6kM_I_; -text: .text%__1cVcompP_iRegP_imm13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMergeMemStreamOnext_non_empty6Mi_i_: parse1.o; -text: .text%__1cENodeGpinned6kM_i_: memnode.o; -text: .text%__1cNSafePointNodeLbottom_type6kM_pknEType__: callnode.o; -text: .text%__1cFciEnvXget_klass_by_index_impl6MpnPciInstanceKlass_iri_pnHciKlass__; -text: .text%__1cTconstantPoolOopDescSklass_at_if_loaded6FnSconstantPoolHandle_i_pnMklassOopDesc__; -text: .text%__1cLProfileDataPadjust_pointers6M_v_: methodDataOop.o; -text: .text%__1cLProfileDataPfollow_contents6M_v_: methodDataOop.o; -text: .text%__1cQaddP_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cJStoreNodeIis_Store6kM_pk0_: classes.o; -text: .text%__1cJloadINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstorePNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetClassModifiers; -text: .text%__1cJCodeCacheJfind_blob6Fpv_pnICodeBlob__; -text: .text%__1cNSafePointNodeOnext_exception6kM_p0_; -text: .text%JVM_GetClassAccessFlags; -text: .text%__1cKbranchNodeHis_Goto6kM_I_: ad_sparc_misc.o; -text: .text%__1cLklassItable2t6MnTinstanceKlassHandle__v_; -text: .text%__1cIsplit_if6FpnGIfNode_pnMPhaseIterGVN__pnENode__: ifnode.o; -text: .text%__1cHTypeAryEhash6kM_i_; -text: .text%__1cTremove_useless_bool6FpnGIfNode_pnIPhaseGVN__pnENode__: ifnode.o; -text: .text%__1cGOopMapHset_xxx6MnHOptoRegEName_nLOopMapValueJoop_types_ii2_v_; -text: .text%__1cPfieldDescriptorKinitialize6MpnMklassOopDesc_i_v_; -text: .text%__1cJMultiNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cJCProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPPerfLongVariantGsample6M_v_; -text: .text%__1cJStoreNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMPhaseChaitinMyank_if_dead6MpnENode_pnFBlock_pnJNode_List_6_i_; -text: .text%__1cJloadINodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cPSignatureStreamJis_object6kM_i_; -text: .text%__1cENodeHis_Mach6M_pnIMachNode__: callnode.o; -text: .text%__1cIBoolNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cJCatchNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: multnode.o; -text: .text%__1cIMachOperNconstant_disp6kM_i_; -text: .text%__1cIMachOperFscale6kM_i_; -text: .text%__1cENode2t6Mp0111_v_; -text: .text%__1cFPhase2t6Mn0ALPhaseNumber__v_; -text: .text%__1cNCompileBrokerLmaybe_block6F_v_; -text: .text%__1cFBlockOcode_alignment6M_I_; -text: .text%__1cMgetTimeNanos6F_x_: os_solaris.o; -text: .text%__1cNinstanceKlassGitable6kM_pnLklassItable__; -text: .text%__1cLciSignatureLreturn_type6kM_pnGciType__; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: subnode.o; -text: .text%__1cFStateM_sub_Op_RegP6MpknENode__v_; -text: .text%JVM_GetCPMethodSignatureUTF; -text: .text%__1cFChunkJnext_chop6M_v_; -text: .text%__1cMMergeMemNodeEhash6kM_I_; -text: .text%__1cGOopMapHset_oop6MnHOptoRegEName_ii_v_; -text: .text%__1cKSchedulingbFComputeRegisterAntidependencies6MpnFBlock__v_; -text: .text%__1cKSchedulingPComputeUseCount6MpknFBlock__v_; -text: .text%__1cITypeNodeRraise_bottom_type6MpknEType__v_; -text: .text%__1cHTypePtrHget_con6kM_i_; -text: .text%__1cUcompI_iReg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceKlass.o; -text: .text%__1cIMachNodeQis_MachSafePoint6M_pnRMachSafePointNode__: ad_sparc.o; -text: .text%__1cIJumpDataKcell_count6M_i_: methodDataOop.o; -text: .text%__1cIMachNodeLis_MachCall6M_pnMMachCallNode__: ad_sparc.o; -text: .text%__1cIMachNodePcompute_padding6kMi_i_: ad_sparc.o; -text: .text%__1cIMachNodeSalignment_required6kM_i_: ad_sparc.o; -text: .text%__1cENodeJis_Branch6kM_I_: ad_sparc.o; -text: .text%__1cMPhaseChaitinSget_spillcopy_wide6MpnENode_2I_2_; -text: .text%__1cYDebugInformationRecorderTcreate_scope_values6MpnNGrowableArray4CpnKScopeValue____pnKDebugToken__; -text: .text%__1cVcompP_iRegP_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cHSubNodeGis_Sub6M_p0_: classes.o; -text: .text%__1cNPhaseRegAllocGis_oop6kMpknENode__i_; -text: .text%__1cWstatic_stub_RelocationLunpack_data6M_v_; -text: .text%__1cQaddI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cObranchConUNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: multnode.o; -text: .text%__1cUParallelScavengeHeapVunsafe_max_tlab_alloc6kM_I_; -text: .text%__1cFBlockJfind_node6kMpknENode__I_; -text: .text%__1cUArgumentSizeComputerDset6MinJBasicType__v_: frame.o; -text: .text%__1cFMutexbClock_without_safepoint_check6M_v_; -text: .text%__1cHCmpNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNCollectedHeapXallocate_from_tlab_slow6FpnGThread_I_pnIHeapWord__; -text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_; -text: .text%__1cHTypePtrEhash6kM_i_; -text: .text%__1cIMachNodeNis_MachEpilog6M_pnOMachEpilogNode__: ad_sparc.o; -text: .text%__1cICodeBlobKis_nmethod6kM_i_: codeBlob.o; -text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cWThreadLocalAllocBufferEfill6MpnIHeapWord_2I_v_; -text: .text%__1cUParallelScavengeHeapRallocate_new_tlab6MI_pnIHeapWord__; -text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; -text: .text%__1cKSharedHeapXfill_region_with_object6FnJMemRegion__v_; -text: .text%__1cFBlockLfind_remove6MpknENode__v_; -text: .text%__1cIIndexSetJlrg_union6MIIkIpknIPhaseIFG_rknHRegMask__I_; -text: .text%__1cKMemBarNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cUcompI_iReg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverbAcheck_method_accessability6FnLKlassHandle_11nMmethodHandle_pnGThread__v_; -text: .text%__1cNObjectMonitorEexit6MpnGThread__v_; -text: .text%__1cIimmPOperEtype6kM_pknEType__: ad_sparc_clone.o; -text: .text%__1cMloadConPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cLMachNopNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadINodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadRangeNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cVCompressedWriteStream2t6Mi_v_; -text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; -text: .text%__1cRlock_ptr_RegPOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cPVirtualCallDataPadjust_pointers6M_v_; -text: .text%__1cPVirtualCallDataPfollow_contents6M_v_; -text: .text%__1cIJVMStateNclone_shallow6kM_p0_; -text: .text%__1cENodeKreplace_by6Mp0_v_; -text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cMMergeMemNodePiteration_setup6Mpk0_v_; -text: .text%__1cFKlassNlookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cKRegionNodeOis_block_start6kM_i_: classes.o; -text: .text%__1cRMachSpillCopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRMachSpillCopyNodeOimplementation6kMpnKCodeBuffer_pnNPhaseRegAlloc_i_I_; -text: .text%__1cENodeHis_AddP6M_pnIAddPNode__: classes.o; -text: .text%__1cKRegionNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJStoreNodeEhash6kM_I_; -text: .text%__1cHMatcherQis_save_on_entry6Mi_i_; -text: .text%__1cSaddP_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQaddI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKTypeOopPtrWmake_from_klass_common6FpnHciKlass_ii_pk0_; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: machnode.o; -text: .text%__1cIGraphKitJclone_map6M_pnNSafePointNode__; -text: .text%__1cMMergeMemNodeQclone_all_memory6FpnENode__p0_; -text: .text%__1cOcompU_iRegNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKIfTrueNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRMemBarReleaseNodeGOpcode6kM_i_; -text: .text%__1cHTypeIntFempty6kM_i_; -text: .text%__1cKbranchNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLPhaseValuesFwiden6kMpknEType_3_3_: phaseX.o; -text: .text%__1cIMachOperIconstant6kM_i_; -text: .text%__1cNCatchProjNodeMis_CatchProj6kM_pk0_: cfgnode.o; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: subnode.o; -text: .text%__1cWMutableSpaceUsedHelperLtake_sample6M_x_: spaceCounters.o; -text: .text%__1cQaddI_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; -text: .text%__1cOcompU_iRegNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cNRelocIteratorKinitialize6MipnICodeBlob_pC3_v_; -text: .text%__1cRPSOldPromotionLABFflush6M_v_; -text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__; -text: .text%__1cPcompP_iRegPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKCodeBufferRtransform_address6kMrk0pC_3_; -text: .text%__1cLBoxLockNodeGOpcode6kM_i_; -text: .text%__1cIciObjectJset_ident6MI_v_; -text: .text%__1cKJNIHandlesKmake_local6FpnHoopDesc__pnI_jobject__; -text: .text%__1cKTypeRawPtrEhash6kM_i_; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: subnode.o; -text: .text%__1cIBoolNodeKmatch_edge6kMI_I_: subnode.o; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: memnode.o; -text: .text%__1cMMergeMemNodePset_base_memory6MpnENode__v_; -text: .text%__1cOcompI_iRegNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cLIfFalseNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cCosPelapsed_counter6F_x_; -text: .text%__1cNPhaseRegAllocKreg2offset6kMnHOptoRegEName__i_; -text: .text%__1cENodeFis_If6M_pnGIfNode__: multnode.o; -text: .text%__1cKReflectionTverify_class_access6FpnMklassOopDesc_2i_i_; -text: .text%__1cICallNodeLis_CallLeaf6kM_pknMCallLeafNode__: callnode.o; -text: .text%__1cRCompilationPolicyOmustBeCompiled6FnMmethodHandle__i_; -text: .text%__1cMMergeMemNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cGBitMapOset_difference6M0_v_; -text: .text%__1cNSafePointNodeEjvms6kM_pnIJVMState__: callnode.o; -text: .text%__1cMPhaseChaitinJsplit_USE6MpnENode_pnFBlock_2IIiinNGrowableArray4CI__i_I_; -text: .text%__1cENodeGis_Con6kM_I_: cfgnode.o; -text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cRshlI_reg_imm5NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cMMergeMemNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_GetMethodIxLocalsCount; -text: .text%__1cNloadRangeNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: multnode.o; -text: .text%JVM_CurrentThread; -text: .text%__1cENodeHget_ptr6kM_i_; -text: .text%__1cQciByteCodeStreamFEOBCs6M_nJBytecodesECode__; -text: .text%__1cRcmpFastUnlockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIAndINodeGOpcode6kM_i_; -text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cENodeHins_req6MIp0_v_; -text: .text%__1cNRelocIteratorEnext6M_i_: codeBuffer.o; -text: .text%__1cSaddI_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cMPhaseChaitinFUnion6MpknENode_3_v_; -text: .text%__1cMloadConLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHAddNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKRelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_: codeBuffer.o; -text: .text%__1cPBoundRelocationMupdate_addrs6MpCrknKCodeBuffer_4_1_; -text: .text%__1cKstoreINodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOFastUnlockNodeGOpcode6kM_i_; -text: .text%__1cLOptoRuntimeFnew_C6FpnMklassOopDesc_pnKJavaThread__v_; -text: .text%__1cITypeNodeDcmp6kMrknENode__I_; -text: .text%__1cIHaltNodeLbottom_type6kM_pknEType__; -text: .text%__1cENodeHis_AddP6M_pnIAddPNode__: connode.o; -text: .text%__1cKNode_Array2t6MpnFArena__v_: gcm.o; -text: .text%__1cKstorePNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNflagsRegUOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cKcmpOpUOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLstoreI0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIciObject2t6MnGHandle__v_; -text: .text%__1cNSafePointNodeKmatch_edge6kMI_I_; -text: .text%__1cFframeOis_entry_frame6kM_i_; -text: .text%__1cIMachOperOindex_position6kM_i_; -text: .text%__1cLklassVtableTupdate_super_vtable6MpnNinstanceKlass_pnNmethodOopDesc_i_i_; -text: .text%__1cXmembar_release_lockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJVectorSet2L6MI_rnDSet__; -text: .text%__1cLOopRecorderOallocate_index6MpnI_jobject__i_; -text: .text%__1cOcompU_iRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMMergeMemNodeJmemory_at6kMI_pnENode__; -text: .text%__1cSaddP_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPindOffset13OperNconstant_disp6kM_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperFscale6kM_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperNbase_position6kM_i_: ad_sparc.o; -text: .text%__1cWShouldNotReachHereNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPciObjectFactoryRcreate_new_object6MpnHoopDesc__pnIciObject__; -text: .text%__1cUcompI_iReg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVcompP_iRegP_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddP_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddP_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSvframeStreamCommonPfill_from_frame6M_i_; -text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: classes.o; -text: .text%__1cIJVMStateIof_depth6kMi_p0_; -text: .text%__1cNSharedRuntimeElrem6Fxx_x_; -text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cMciMethodDataLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cRMemBarAcquireNodeGOpcode6kM_i_; -text: .text%__1cRcmpFastUnlockNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKo0RegPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cSaddI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cObranchConUNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJVectorSet2t6MpnFArena__v_; -text: .text%__1cKRegionNodeGis_CFG6kM_i_: loopnode.o; -text: .text%__1cKTypeAryPtrFxmeet6kMpknEType__3_; -text: .text%__1cVcompP_iRegP_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRSignatureIteratorSiterate_parameters6MX_v_; -text: .text%__1cKRelocationWfix_relocation_at_move6Mi_v_: relocInfo.o; -text: .text%__1cICallNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cKRelocationMupdate_addrs6MrknKCodeBuffer_3_v_; -text: .text%__1cKNode_Array2t6MpnFArena__v_: postaloc.o; -text: .text%__1cOMethodLivenessKBasicBlockWcompute_gen_kill_range6MpnQciByteCodeStream__v_; -text: .text%__1cJTraceTime2T6M_v_; -text: .text%__1cITypeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cObranchConUNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cPcheckCastPPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKMemBarNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJloadPNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cITypeLongJsingleton6kM_i_; -text: .text%__1cJTraceTime2t6MpkcpnMelapsedTimer_iipnMoutputStream__v_; -text: .text%__1cKoopFactoryKnew_method6FinLAccessFlags_iiipnGThread__pnNmethodOopDesc__; -text: .text%__1cSconstMethodOopDescZset_inlined_tables_length6Miii_v_; -text: .text%__1cNmethodOopDescLobject_size6Fi_i_; -text: .text%__1cNmethodOopDescbAcompute_size_of_parameters6MpnGThread__v_; -text: .text%__1cSconstMethodOopDescLobject_size6Fiiii_i_; -text: .text%__1cLmethodKlassIallocate6MnRconstMethodHandle_nLAccessFlags_pnGThread__pnNmethodOopDesc__; -text: .text%__1cLklassVtableWneeds_new_vtable_entry6FpnNmethodOopDesc_pnMklassOopDesc_pnHoopDesc_pnNsymbolOopDesc_nLAccessFlags__i_; -text: .text%__1cNmethodOopDescJinit_code6M_v_; -text: .text%__1cQconstMethodKlassIallocate6MiiiipnGThread__pnSconstMethodOopDesc__; -text: .text%__1cPClassFileParserMparse_method6MnSconstantPoolHandle_ipnLAccessFlags_pnPtypeArrayHandle_55pnGThread__nMmethodHandle__; -text: .text%__1cObranchConUNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cMMergeMemNodeNset_memory_at6MIpnENode__v_; -text: .text%__1cLstoreI0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFciEnvSget_klass_by_index6MpnPciInstanceKlass_iri_pnHciKlass__; -text: .text%__1cNSignatureInfoHdo_void6M_v_: bytecode.o; -text: .text%__1cQaddI_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cQaddI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENode2t6Mp01_v_; -text: .text%__1cNmethodOopDescPis_final_method6kM_i_; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cKstoreINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIRewriterOrewrite_method6FnMmethodHandle_rnIintArray_pnGThread__1_; -text: .text%__1cNmethodOopDescLlink_method6FnMmethodHandle__v_; -text: .text%__1cPClassFileParserbDverify_legal_method_modifiers6MiinMsymbolHandle_pnGThread__v_; -text: .text%__1cHTypeAryRary_must_be_exact6kM_i_; -text: .text%__1cRshrI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFStateM_sub_Op_AddP6MpknENode__v_; -text: .text%__1cTCreateExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJCatchNodeIis_Catch6kM_pk0_: classes.o; -text: .text%__1cIGraphKitEstop6M_v_; -text: .text%__1cOcompI_iRegNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cIPhaseCCPFwiden6kMpknEType_3_3_: phaseX.o; -text: .text%__1cKCastPPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPcompP_iRegPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cRMachNullCheckNodeQis_MachNullCheck6M_p0_: machnode.o; -text: .text%__1cITypeFuncEhash6kM_i_; -text: .text%__1cLBoxLockNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNMachIdealNodeMideal_Opcode6kM_i_: machnode.o; -text: .text%__1cMTypeKlassPtrEhash6kM_i_; -text: .text%__1cMCallLeafNodeGOpcode6kM_i_; -text: .text%__1cENodeGis_Con6kM_I_: ad_sparc_misc.o; -text: .text%__1cSCallLeafDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHnmethodKis_nmethod6kM_i_: nmethod.o; -text: .text%__1cOcompI_iRegNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cHPhiNodeEmake6FpnENode_2pknEType_pknHTypePtr__p0_; -text: .text%__1cIAddPNodeQmach_bottom_type6FpknIMachNode__pknEType__; -text: .text%__1cOcompU_iRegNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: connode.o; -text: .text%__1cOCallRelocationWfix_relocation_at_move6Mi_v_; -text: .text%__1cKRelocationXpd_set_call_destination6MpCi_v_; -text: .text%__1cKRelocationTpd_call_destination6M_pC_; -text: .text%__1cJiRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNflagsRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cJStartNodeGis_CFG6kM_i_: callnode.o; -text: .text%__1cHOrINodeGOpcode6kM_i_; -text: .text%__1cXmembar_acquire_lockNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%JVM_GetCPMethodClassNameUTF; -text: .text%__1cMloadConDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMflagsRegOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cHnmethodJis_zombie6kM_i_: nmethod.o; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: callnode.o; -text: .text%__1cKSchedulingQNodeFitsInBundle6MpnENode__i_; -text: .text%__1cLProfileDataPfollow_contents6M_v_: ciMethodData.o; -text: .text%__1cLProfileDataPadjust_pointers6M_v_: ciMethodData.o; -text: .text%__1cFStateM_sub_Op_RegI6MpknENode__v_; -text: .text%__1cOMachReturnNodeNis_MachReturn6M_p0_: ad_sparc_misc.o; -text: .text%__1cKklassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cFKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cJMarkSweepXrevisit_weak_klass_link6FpnFKlass__v_; -text: .text%__1cKklassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassVshould_be_initialized6kM_i_; -text: .text%__1cWconstantPoolCacheKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cHCompileYout_preserve_stack_slots6F_I_; -text: .text%__1cPSignatureStream2t6MnMsymbolHandle_i_v_; -text: .text%__1cIGraphKitLclean_stack6Mi_v_; -text: .text%__1cKStoreBNodeGOpcode6kM_i_; -text: .text%__1cLklassVtableToop_adjust_pointers6M_v_; -text: .text%__1cLklassVtableToop_follow_contents6M_v_; -text: .text%__1cVcompP_iRegP_imm13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconstMethodOopDescbBcompressed_linenumber_table6kM_pC_; -text: .text%__1cPClassFileParserWparse_linenumber_table6MIIpipnGThread__pC_; -text: .text%__1cbFCompressedLineNumberWriteStream2t6Mi_v_; -text: .text%__1cITypeFuncCeq6kMpknEType__i_; -text: .text%__1cUcompI_iReg_imm13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKbranchNodeFclone6kM_pnENode__; -text: .text%__1cMUniverseOperFclone6kM_pnIMachOper__; -text: .text%__1cJlabelOperFclone6kM_pnIMachOper__; -text: .text%__1cJlabelOperFlabel6kM_pnFLabel__: ad_sparc.o; -text: .text%__1cICallNodeHis_Call6M_p0_: classes.o; -text: .text%__1cLciSignatureHtype_at6kMi_pnGciType__; -text: .text%__1cIMachNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cIMachOperMdisp_as_type6kM_pknHTypePtr__: ad_sparc.o; -text: .text%__1cRshlI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKRelocationJpack_data6M_i_: codeBlob.o; -text: .text%__1cOPhaseIdealLoopIsplit_up6MpnENode_22_i_; -text: .text%__1cLCounterDataOis_CounterData6M_i_: ciMethodData.o; -text: .text%__1cJStartNodeGpinned6kM_i_: classes.o; -text: .text%__1cHAddNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cOis_range_check6FpnENode_r12ri_i_: ifnode.o; -text: .text%JVM_IsNaN; -text: .text%__1cNloadRangeNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadINodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKbranchNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJStartNodeGOpcode6kM_i_; -text: .text%__1cOMethodLivenessKBasicBlockPget_liveness_at6MpnIciMethod_i_nGBitMap__; -text: .text%__1cIciMethodPliveness_at_bci6Mi_nGBitMap__; -text: .text%__1cOMethodLivenessPget_liveness_at6Mi_nGBitMap__; -text: .text%__1cQregF_to_stkINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: memnode.o; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: subnode.o; -text: .text%__1cENodeDcmp6kMrk0_I_; -text: .text%__1cFParseKensure_phi6Mii_pnHPhiNode__; -text: .text%__1cOoop_RelocationJpack_data6M_i_; -text: .text%__1cHTypeIntFxdual6kM_pknEType__; -text: .text%__1cIciObjectIencoding6M_pnI_jobject__; -text: .text%__1cNSafePointNode2t6MIpnIJVMState__v_; -text: .text%__1cHTypePtrJsingleton6kM_i_; -text: .text%__1cMmerge_region6FpnKRegionNode_pnIPhaseGVN__pnENode__: cfgnode.o; -text: .text%__1cIGraphKitObasic_plus_adr6MpnENode_2i_2_; -text: .text%__1cJAssemblerOpatched_branch6Fiii_i_; -text: .text%__1cJAssemblerSbranch_destination6Fii_i_; -text: .text%__1cRshlI_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPClassFileParserZskip_over_field_signature6MpciIpnGThread__1_; -text: .text%__1cENodeIadd_prec6Mp0_v_; -text: .text%__1cLBoxLockNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMloadConDNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreINodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cPSignatureStreamJas_symbol6MpnGThread__pnNsymbolOopDesc__; -text: .text%__1cSaddP_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWMachCallStaticJavaNodePret_addr_offset6M_i_; -text: .text%__1cICodeBlobJis_zombie6kM_i_: codeBlob.o; -text: .text%__1cITypeFuncEmake6FpknJTypeTuple_3_pk0_; -text: .text%__1cMloadConDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMloadConLNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSCallLeafDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLRegisterMap2t6MpnKJavaThread_i_v_; -text: .text%__1cKTypeOopPtrHget_con6kM_i_; -text: .text%__1cQsubI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIRootNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cLPhaseValuesHmakecon6MpknEType__pnHConNode__; -text: .text%__1cJloadLNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverNresolve_field6FrnPFieldAccessInfo_nSconstantPoolHandle_inJBytecodesECode_iipnGThread__v_; -text: .text%__1cMLinkResolverZcheck_field_accessability6FnLKlassHandle_11rnPfieldDescriptor_pnGThread__v_; -text: .text%__1cJLoadBNodeGOpcode6kM_i_; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: subnode.o; -text: .text%__1cLOptoRuntimebCcomplete_monitor_unlocking_C6FpnHoopDesc_pnJBasicLock__v_; -text: .text%__1cLOptoRuntimebAcomplete_monitor_locking_C6FpnHoopDesc_pnJBasicLock_pnKJavaThread__v_; -text: .text%__1cOGenerateOopMapHinterp16MpnOBytecodeStream__v_; -text: .text%__1cLRegisterMapLpd_location6kMnFVMRegEName__pC_; -text: .text%__1cSvframeStreamCommonEnext6M_v_; -text: .text%__1cIAddINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cIRootNodeNis_block_proj6kM_pknENode__: classes.o; -text: .text%__1cMMergeMemNode2t6MpnENode__v_; -text: .text%__1cOcompI_iRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRMachSafePointNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cJloadINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXruntime_call_RelocationEtype6M_nJrelocInfoJrelocType__: codeBlob.o; -text: .text%__1cQsubI_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPindOffset13OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: machnode.o; -text: .text%__1cPindOffset13OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cICmpPNodeDsub6kMpknEType_3_3_; -text: .text%__1cKBufferBlobIis_alive6kM_i_: codeBlob.o; -text: .text%__1cHMemNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cIAddINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cIGraphKitQkill_dead_locals6M_v_; -text: .text%__1cCosMvm_page_size6F_i_; -text: .text%__1cHRegMaskPfind_first_pair6kM_nHOptoRegEName__; -text: .text%__1cMloadConLNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cWShouldNotReachHereNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cRlock_ptr_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cVcompP_iRegP_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUcompI_iReg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_: bytecode.o; -text: .text%__1cNloadRangeNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cRconstantPoolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNinstanceKlassUadjust_static_fields6M_v_; -text: .text%__1cRconstantPoolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLklassItableToop_adjust_pointers6M_v_; -text: .text%__1cNinstanceKlassUfollow_static_fields6M_v_; -text: .text%__1cLklassItableToop_follow_contents6M_v_; -text: .text%__1cSinstanceKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNinstanceKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cSinstanceKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNSafePointNodeGOpcode6kM_i_; -text: .text%__1cWShouldNotReachHereNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: ad_sparc.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: memnode.o; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: memnode.o; -text: .text%__1cOGenerateOopMapPjump_targets_do6MpnOBytecodeStream_pFp0ipi_v4_i_; -text: .text%__1cPcompP_iRegPNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshlI_reg_imm5NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cJLoadPNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMPhaseChaitinPset_was_spilled6MpnENode__v_; -text: .text%__1cYDebugInformationRecorderOdescribe_scope6MpnIciMethod_ipnKDebugToken_44_v_; -text: .text%__1cYDebugInformationRecorderVcreate_monitor_values6MpnNGrowableArray4CpnMMonitorValue____pnKDebugToken__; -text: .text%__1cVCompressedWriteStreamJwrite_int6Mi_v_: debugInfoRec.o; -text: .text%__1cIHaltNodeGpinned6kM_i_: classes.o; -text: .text%__1cMloadConPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNMachIdealNodeJnum_opnds6kM_I_: ad_sparc.o; -text: .text%__1cIGraphKit2t6MpnIJVMState__v_; -text: .text%__1cENodeHis_Root6M_pnIRootNode__: cfgnode.o; -text: .text%__1cPsp_ptr_RegPOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cPconvI2L_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKbranchNodeJis_Branch6kM_I_: ad_sparc_misc.o; -text: .text%__1cQPreserveJVMState2T6M_v_; -text: .text%__1cQPreserveJVMState2t6MpnIGraphKit_i_v_; -text: .text%__1cIGraphKitRnull_check_common6MpnENode_nJBasicType_i_2_; -text: .text%__1cPcompP_iRegPNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cMWarmCallInfoHis_cold6kM_i_; -text: .text%__1cLCastP2INodeGOpcode6kM_i_; -text: .text%__1cRshrI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cTCreateExceptionNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddP_reg_imm13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cXmembar_release_lockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMloadConLNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeHis_Copy6kM_I_: machnode.o; -text: .text%__1cFMutexNowned_by_self6kM_i_; -text: .text%__1cLConvI2LNodeGOpcode6kM_i_; -text: .text%__1cITypeLongFxmeet6kMpknEType__3_; -text: .text%__1cNinstanceKlassKinitialize6MpnGThread__v_; -text: .text%__1cSaddI_reg_imm13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKciTypeFlowNmake_range_at6Mi_pn0AFRange__; -text: .text%__1cFParseMmerge_common6Mpn0AFBlock_i_v_; -text: .text%__1cOCallRelocationFvalue6M_pC_: codeBlob.o; -text: .text%__1cENodeHis_Type6M_pnITypeNode__: classes.o; -text: .text%__1cPciInstanceKlassYunique_concrete_subklass6M_p0_; -text: .text%__1cENodeQlatency_from_use6kMrnLBlock_Array_rnNGrowableArray4CI__pk0p0_i_; -text: .text%__1cLBoxLockNodeHsize_of6kM_I_; -text: .text%__1cOPhaseIdealLoopIset_idom6MpnENode_2I_v_; -text: .text%__1cJStoreNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cHTypeAryCeq6kMpknEType__i_; -text: .text%__1cJStartNodeIis_Start6M_p0_: callnode.o; -text: .text%JVM_GetCPFieldClassNameUTF; -text: .text%__1cHCompileKTracePhase2t6MpkcpnMelapsedTimer_i_v_; -text: .text%__1cMPhaseIterGVNHmakecon6MpknEType__pnHConNode__; -text: .text%__1cSaddI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNLoadKlassNodeGOpcode6kM_i_; -text: .text%__1cRcmpFastUnlockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJLoadCNodeGOpcode6kM_i_; -text: .text%__1cMTypeKlassPtrCeq6kMpknEType__i_; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: memnode.o; -text: .text%__1cHciFieldJwill_link6MpnPciInstanceKlass_nJBytecodesECode__i_; -text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: node.o; -text: .text%__1cQciByteCodeStreamJget_field6Mri_pnHciField__; -text: .text%__1cFciEnvSget_field_by_index6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cOcompI_iRegNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMergeMemStreamOnext_non_empty6Mi_i_: graphKit.o; -text: .text%__1cRshlI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; -text: .text%__1cTCreateExceptionNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cGBitMapVset_union_with_result6M0_i_; -text: .text%__1cICmpINodeDsub6kMpknEType_3_3_; -text: .text%__1cLRShiftINodeGOpcode6kM_i_; -text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: typeArrayKlass.o; -text: .text%__1cOtypeArrayKlassSallocate_permanent6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: memnode.o; -text: .text%__1cSCallLeafDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_: frame.o; -text: .text%__1cPcheckCastPPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOPhaseIdealLoopQconditional_move6MpnENode__2_; -text: .text%__1cNSafePointNodeMis_SafePoint6M_p0_: callnode.o; -text: .text%__1cFframeOis_first_frame6kM_i_; -text: .text%__1cJStoreNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cITypeFuncEmake6FpnIciMethod__pk0_; -text: .text%__1cICodeBlobTfix_oop_relocations6M_v_; -text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_; -text: .text%__1cJloadSNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKStoreCNodeGOpcode6kM_i_; -text: .text%__1cENodeFis_If6M_pnGIfNode__: subnode.o; -text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_; -text: .text%__1cMstringStreamFwrite6MpkcI_v_; -text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__; -text: .text%__1cHRetNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPcmpFastLockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverMresolve_pool6FrnLKlassHandle_rnMsymbolHandle_42nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoolHandle_inJBytecodesECode_pnGThread__v_; -text: .text%__1cIBoolNodeJideal_reg6kM_I_: subnode.o; -text: .text%__1cHCmpNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRcmpFastUnlockNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cRloadConP_pollNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cETypeFwiden6kMpk0_2_: type.o; -text: .text%__1cRcmpFastUnlockNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cILoadNodeRraise_bottom_type6MpknEType__v_; -text: .text%__1cLstoreI0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFciEnvTget_method_by_index6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cQciByteCodeStreamKget_method6Mri_pnIciMethod__; -text: .text%__1cFciEnvYget_method_by_index_impl6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cMloadConPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; -text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cNSafePointNodeGpinned6kM_i_: classes.o; -text: .text%__1cPcompP_iRegPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cObranchConPNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cJCodeCacheQfind_blob_unsafe6Fpv_pnICodeBlob__; -text: .text%__1cNloadRangeNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCatchProjNodeLbottom_type6kM_pknEType__: cfgnode.o; -text: .text%__1cNCatchProjNodeHsize_of6kM_I_: cfgnode.o; -text: .text%__1cFStateK_sub_Op_If6MpknENode__v_; -text: .text%__1cIciMethodbCinterpreter_invocation_count6M_i_; -text: .text%__1cTciConstantPoolCacheDget6Mi_pv_; -text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: subnode.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: subnode.o; -text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cWConstantPoolCacheEntryJset_field6MnJBytecodesECode_2nLKlassHandle_iinITosState_ii_v_; -text: .text%__1cKCastPPNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cMLinkResolverNresolve_field6FrnPFieldAccessInfo_nSconstantPoolHandle_inJBytecodesECode_ipnGThread__v_; -text: .text%__1cKciTypeFlowFRangeNget_block_for6Mpn0AGJsrSet_n0AMCreateOption__pn0AFBlock__; -text: .text%__1cQsubI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cXmembar_acquire_lockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddP_reg_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cKCastPPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cPCountedLoopNodeGOpcode6kM_i_; -text: .text%__1cUGenericGrowableArrayMraw_contains6kMpknEGrET__i_; -text: .text%__1cPTwoOopHashtableMcompute_hash6MnMsymbolHandle_nGHandle__I_: systemDictionary.o; -text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: subnode.o; -text: .text%__1cIAndLNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitOset_all_memory6MpnENode__v_; -text: .text%__1cENodeHis_Goto6kM_I_: ad_sparc_misc.o; -text: .text%__1cQSystemDictionarybEresolve_instance_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_; -text: .text%__1cHnmethodIis_alive6kM_i_: nmethod.o; -text: .text%__1cFParseFBlockKinit_graph6Mp0_v_; -text: .text%__1cMTypeKlassPtrEmake6FnHTypePtrDPTR_pnHciKlass_i_pk0_; -text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__; -text: .text%__1cRshrI_reg_imm5NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOkill_dead_code6FpnENode_pnMPhaseIterGVN__i_: node.o; -text: .text%__1cMPrefetchNodeGOpcode6kM_i_; -text: .text%__1cCosGmalloc6FI_pv_; -text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cIGraphKitTadd_exception_state6MpnNSafePointNode__v_; -text: .text%__1cIimmPOperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: cfgnode.o; -text: .text%__1cRRawBytecodeStreamMset_interval6Mii_v_; -text: .text%__1cIregDOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cKstoreINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cICodeHeapLheader_size6F_I_; -text: .text%__1cQsubI_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: connode.o; -text: .text%__1cFciEnvIis_in_vm6F_i_; -text: .text%__1cIMachNodeJis_MachIf6kM_pknKMachIfNode__: ad_sparc_misc.o; -text: .text%__1cKJavaThreadOis_Java_thread6kM_i_: thread.o; -text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; -text: .text%__1cKciTypeFlowLStateVectorEmeet6Mpk1_i_; -text: .text%__1cNbranchConNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadRangeNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParseMdo_one_block6M_v_; -text: .text%__1cOPhaseIdealLoopRregister_new_node6MpnENode_2_v_; -text: .text%__1cLstoreB0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: callnode.o; -text: .text%__1cIAddINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIJVMStateKclone_deep6kM_p0_; -text: .text%__1cIJVMStateLdebug_depth6kM_I_; -text: .text%__1cENodeNadd_req_batch6Mp0I_v_; -text: .text%__1cIGraphKitTadd_safepoint_edges6MpnNSafePointNode_i_v_; -text: .text%__1cKciTypeFlowLStateVectorOpush_translate6MpnGciType__v_; -text: .text%__1cJloadFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeHis_Mach6M_pnIMachNode__: node.o; -text: .text%__1cMMachCallNodeHis_Call6M_pnICallNode__: ad_sparc_misc.o; -text: .text%__1cPVirtualCallDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cIMachNodeOpipeline_class6F_pknIPipeline__; -text: .text%__1cNloadRangeNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cMindirectOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cHMatcherScalling_convention6FpnLRegPair_Ii_v_; -text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cIPhaseGVNUtransform_no_reclaim6MpnENode__2_; -text: .text%__1cIAddLNodeGOpcode6kM_i_; -text: .text%__1cQSystemDictionaryPresolve_or_fail6FnMsymbolHandle_nGHandle_2ipnGThread__pnMklassOopDesc__; -text: .text%__1cLLShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOMethodLivenessKBasicBlockJpropagate6Mp0_v_; -text: .text%__1cFciEnvWget_klass_by_name_impl6MpnHciKlass_pnIciSymbol_i_2_; -text: .text%__1cKciTypeFlowGJsrSet2t6MpnFArena_i_v_; -text: .text%__1cRMachSafePointNode2t6M_v_; -text: .text%__1cHMatcherKmatch_sfpt6MpnNSafePointNode__pnIMachNode__; -text: .text%__1cMFastLockNodeGOpcode6kM_i_; -text: .text%__1cRInlineCacheBufferIcontains6FpC_i_; -text: .text%__1cLConvL2INodeGOpcode6kM_i_; -text: .text%__1cIXorINodeGOpcode6kM_i_; -text: .text%__1cICallNodeOis_CallRuntime6kM_pknPCallRuntimeNode__: callnode.o; -text: .text%__1cMVirtualSpaceOcommitted_size6kM_I_; -text: .text%__1cJloadCNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cXinsert_anti_dependences6FrpnFBlock_pnENode_rnLBlock_Array__i_: gcm.o; -text: .text%__1cPorI_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcompU_iRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPorI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKTypeAryPtrFklass6kM_pnHciKlass__; -text: .text%__1cIGraphKitbDtransfer_exceptions_into_jvms6M_pnIJVMState__; -text: .text%__1cOPhaseIdealLoopHdom_lca6kMpnENode_2_2_; -text: .text%__1cLTypeInstPtrFxdual6kM_pknEType__; -text: .text%__1cNLoadRangeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cHMatcherPc_frame_pointer6kM_nHOptoRegEName__; -text: .text%__1cFBlockKsched_call6MrnHMatcher_rnLBlock_Array_IrnJNode_List_pipnMMachCallNode_rnJVectorSet__I_; -text: .text%__1cSsafePoint_pollNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMMachCallNode2t6M_v_; -text: .text%__1cILoadNodeHsize_of6kM_I_; -text: .text%__1cYciExceptionHandlerStreamEnext6M_v_: methodLiveness.o; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: methodKlass.o; -text: .text%__1cRInterpretedRFrameKtop_method6kM_nMmethodHandle__: rframe.o; -text: .text%__1cICmpPNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cIGraphKitJsync_jvms6kM_pnIJVMState__; -text: .text%__1cICmpUNodeDsub6kMpknEType_3_3_; -text: .text%__1cHnmethodOis_not_entrant6kM_i_: nmethod.o; -text: .text%__1cNprefetch2NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cEUTF8Hstrrchr6FpWiW_1_; -text: .text%__1cIciMethodRhas_compiled_code6M_i_; -text: .text%__1cPcompP_iRegPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPsp_ptr_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_; -text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cLOptoRuntimePnew_typeArray_C6FnJBasicType_ipnKJavaThread__v_; -text: .text%__1cRshrP_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLBoxLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXvirtual_call_RelocationIparse_ic6FrpnICodeBlob_rpC5rppnHoopDesc_pi_nNRelocIterator__; -text: .text%__1cITypeLongEmake6Fxxi_pk0_; -text: .text%__1cRloadConP_pollNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadKlassNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_GetCPMethodNameUTF; -text: .text%__1cMtlsLoadPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreB0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRloadConP_pollNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cIimmIOperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cLstoreI0NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeFis_If6M_pnGIfNode__: cfgnode.o; -text: .text%__1cNSharedRuntimeEldiv6Fxx_x_; -text: .text%__1cHBitDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cURethrowExceptionNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cQsubI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cYciExceptionHandlerStreamEnext6M_v_: ciTypeFlow.o; -text: .text%__1cKReturnNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cJloadBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIciSymbol2t6MnMsymbolHandle__v_; -text: .text%__1cQaddP_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKmethodOperGmethod6kM_i_: ad_sparc.o; -text: .text%__1cQjava_lang_StringQbasic_create_oop6FpnQtypeArrayOopDesc_ipnGThread__pnHoopDesc__; -text: .text%__1cFKlassIsubklass6kM_p0_; -text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: instanceKlass.o; -text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_: frame.o; -text: .text%__1cENodeHis_Goto6kM_I_: cfgnode.o; -text: .text%__1cICmpINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cPemit_call_reloc6FrnKCodeBuffer_inJrelocInfoJrelocType_iii_v_; -text: .text%__1cTconstantPoolOopDescOstring_at_impl6FnSconstantPoolHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_; -text: .text%__1cIMulLNodeGOpcode6kM_i_; -text: .text%__1cKReturnNodeKmatch_edge6kMI_I_; -text: .text%__1cENodeHis_Call6M_pnICallNode__: callnode.o; -text: .text%__1cILoopNodeHis_Loop6M_p0_: classes.o; -text: .text%__1cGOopMap2t6Mii_v_; -text: .text%__1cJOopMapSetKadd_gc_map6MiipnGOopMap__v_; -text: .text%__1cNloadConP0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJLoadSNodeGOpcode6kM_i_; -text: .text%__1cLPCTableNodeLbottom_type6kM_pknEType__; -text: .text%__1cKBranchDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cMCreateExNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cRloadConP_pollNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__: connode.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: connode.o; -text: .text%__1cRcmpFastUnlockNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJLoadLNodeGOpcode6kM_i_; -text: .text%__1cMciMethodDataLhas_trap_at6MpnLProfileData_i_i_; -text: .text%__1cPThreadLocalNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOMacroAssemblerZneeds_explicit_null_check6Fi_i_; -text: .text%__1cSaddI_reg_imm13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKReturnNodeGOpcode6kM_i_; -text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNSignatureInfoGdo_int6M_v_: frame.o; -text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: callnode.o; -text: .text%__1cNflagsRegUOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIGraphKitbLset_predefined_input_for_runtime_call6MpnNSafePointNode__v_; -text: .text%__1cRshlI_reg_imm5NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cMloadConINodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cNCatchProjNodeEhash6kM_I_; -text: .text%__1cEUTF8Ounicode_length6Fpkci_i_; -text: .text%__1cHCompileZintrinsic_insertion_index6MpnIciMethod_i_i_; -text: .text%__1cTOopMapForCacheEntryRpossible_gc_point6MpnOBytecodeStream__i_; -text: .text%__1cYDebugInformationRecorderNadd_safepoint6MiipnGOopMap__v_; -text: .text%__1cHCompileTProcess_OopMap_Node6MpnIMachNode_i_v_; -text: .text%__1cRMachSafePointNodePis_MachCallLeaf6M_pnQMachCallLeafNode__: ad_sparc_misc.o; -text: .text%__1cRMachSafePointNodeLset_oop_map6MpnGOopMap__v_: ad_sparc_misc.o; -text: .text%__1cXjava_lang_ref_ReferenceNreferent_addr6FpnHoopDesc__p2_; -text: .text%__1cNCallGenerator2t6MpnIciMethod__v_; -text: .text%__1cRMachSafePointNodeSis_MachCallRuntime6M_pnTMachCallRuntimeNode__: ad_sparc_misc.o; -text: .text%__1cKCompiledIC2t6MpnKRelocation__v_; -text: .text%__1cNMachIdealNodePoper_input_base6kM_I_: machnode.o; -text: .text%__1cSCallLeafDirectNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadINodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cHRegMaskQis_aligned_Pairs6kM_i_; -text: .text%__1cKCompiledICOic_destination6kM_pC_; -text: .text%__1cHTypeAryFxmeet6kMpknEType__3_; -text: .text%__1cPClassFileParserbCverify_legal_field_modifiers6MiipnGThread__v_; -text: .text%__1cPClassFileParserWparse_field_attributes6MnSconstantPoolHandle_iHpHpi2pnPtypeArrayHandle_pnGThread__v_; -text: .text%__1cICallNodeJideal_reg6kM_I_: callnode.o; -text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_; -text: .text%__1cPmethodDataKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cKstorePNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKciTypeFlowQadd_to_work_list6Mpn0AFBlock__v_; -text: .text%__1cKciTypeFlowKflow_block6Mpn0AFBlock_pn0ALStateVector_pn0AGJsrSet__v_; -text: .text%__1cKciTypeFlowFBlockKsuccessors6MpnQciByteCodeStream_pn0ALStateVector_pn0AGJsrSet__pnNGrowableArray4Cp1___; -text: .text%__1cRMachSafePointNodeRis_safepoint_node6kM_i_: ad_sparc_misc.o; -text: .text%__1cEUTF8Enext6FpkcpH_pc_; -text: .text%__1cJVectorSetFClear6M_v_; -text: .text%__1cHCompileSflatten_alias_type6kMpknHTypePtr__3_; -text: .text%__1cMCallJavaNodeLis_CallJava6kM_pk0_: callnode.o; -text: .text%__1cQMachCallJavaNodePis_MachCallJava6M_p0_: ad_sparc_misc.o; -text: .text%__1cCosEfree6Fpv_v_; -text: .text%__1cICallNodeScalling_convention6kMpnLRegPair_I_v_; -text: .text%__1cKTypeOopPtrFempty6kM_i_; -text: .text%__1cKciTypeFlowFBlock2t6Mp0pn0AFRange_pn0AGJsrSet__v_; -text: .text%__1cRshrI_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPcmpFastLockNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cYciExceptionHandlerStreamFcount6M_i_; -text: .text%__1cKciTypeFlowFBlockScompute_exceptions6M_v_; -text: .text%__1cIPhaseIFGFUnion6MII_v_; -text: .text%__1cLstoreB0NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cYCallStaticJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cWMachCallStaticJavaNodeVis_MachCallStaticJava6M_p0_: ad_sparc_misc.o; -text: .text%__1cILoopNodeGOpcode6kM_i_; -text: .text%__1cRMachSafePointNodeWis_MachCallInterpreter6M_pnXMachCallInterpreterNode__: ad_sparc_misc.o; -text: .text%__1cICmpLNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopGspinup6MpnENode_2222pnLsmall_cache__2_; -text: .text%__1cQaddI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMindIndexOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cIConLNodeGOpcode6kM_i_; -text: .text%__1cMLinkResolverbNlinktime_resolve_virtual_method_or_null6FnLKlassHandle_nMsymbolHandle_21i_nMmethodHandle__; -text: .text%__1cJloadCNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_GetCPFieldSignatureUTF; -text: .text%__1cFframeQoops_do_internal6MpnKOopClosure_pnLRegisterMap_i_v_; -text: .text%__1cMLinkResolverbEruntime_resolve_virtual_method6FrnICallInfo_nMmethodHandle_nLKlassHandle_nGHandle_4ipnGThread__v_; -text: .text%__1cPCountedLoopNodeOis_CountedLoop6M_p0_: classes.o; -text: .text%__1cENodeLnonnull_req6kM_p0_; -text: .text%__1cGciTypeMis_classless6kM_i_: ciType.o; -text: .text%__1cFKlassXcan_be_statically_bound6FpnNmethodOopDesc__i_; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: connode.o; -text: .text%__1cHnmethodZsize_of_exception_handler6F_i_; -text: .text%__1cYCallStaticJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYCallStaticJavaDirectNodeKmethod_set6Mi_v_; -text: .text%__1cMelapsedTimerFstart6M_v_; -text: .text%__1cMelapsedTimerEstop6M_v_; -text: .text%__1cQandL_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cMURShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSaddP_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cObranchConPNodeJis_Branch6kM_I_: ad_sparc_misc.o; -text: .text%__1cOPhaseIdealLoopOfind_use_block6MpnENode_22222_2_; -text: .text%__1cOPhaseIdealLoopKhandle_use6MpnENode_2pnLsmall_cache_22222_v_; -text: .text%__1cOMethodLivenessNmake_block_at6Mipn0AKBasicBlock__2_; -text: .text%__1cPorI_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%jni_DeleteLocalRef: jni.o; -text: .text%__1cIGraphKit2t6M_v_; -text: .text%__1cMoutputStreamDput6Mc_v_; -text: .text%__1cIGraphKitNset_map_clone6MpnNSafePointNode__v_; -text: .text%__1cRInterpretedRFrameEinit6M_v_; -text: .text%__1cHMulNodeEhash6kM_I_; -text: .text%__1cENodeJset_req_X6MIp0pnMPhaseIterGVN__v_; -text: .text%__1cSInterpreterRuntimeDldc6FpnKJavaThread_i_v_; -text: .text%__1cJLoadINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cINodeHashLhash_insert6MpnENode__v_; -text: .text%__1cHTypeIntEmake6Fii_pk0_; -text: .text%__1cOMacroAssemblerCbr6MnJAssemblerJCondition_in0BHPredict_pCnJrelocInfoJrelocType__v_: ad_sparc.o; -text: .text%__1cKstoreCNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: instanceKlassKlass.o; -text: .text%__1cNSafePointNodeEhash6kM_I_: callnode.o; -text: .text%__1cENodeLbottom_type6kM_pknEType__; -text: .text%__1cKJNIHandlesKmake_local6FpnGThread_pnHoopDesc__pnI_jobject__; -text: .text%__1cKstoreCNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMCreateExNodeGpinned6kM_i_: classes.o; -text: .text%__1cIAddPNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nGHandle__; -text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cFParsePdo_field_access6Mii_v_; -text: .text%__1cKMemBarNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cGvframe2t6MpknFframe_pknLRegisterMap_pnKJavaThread__v_; -text: .text%__1cLRegisterMap2t6Mpk0_v_; -text: .text%__1cXmembar_acquire_lockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNloadKlassNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cQmark_inner_loops6FpnIPhaseCFG_pnFBlock__v_: block.o; -text: .text%__1cILoadNodeEmake6FpnENode_22pknHTypePtr_pknEType_nJBasicType__p0_; -text: .text%__1cICallNodeSis_CallDynamicJava6kM_pknTCallDynamicJavaNode__: callnode.o; -text: .text%__1cJOopMapSetSfind_map_at_offset6kMii_pnGOopMap__; -text: .text%__1cICodeBlobbAoop_map_for_return_address6MpCi_pnGOopMap__; -text: .text%__1cNmethodOopDescWwas_executed_more_than6kMi_i_; -text: .text%__1cRshrI_reg_imm5NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcompI_iRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIciSymbolEmake6Fpkc_p0_; -text: .text%__1cPorI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLPhaseValuesHzerocon6MnJBasicType__pnHConNode__; -text: .text%__1cGPcDesc2t6Miii_v_; -text: .text%__1cHnmethodKcopy_pc_at6MipnGPcDesc__v_; -text: .text%__1cHCompileKalias_type6MpnHciField__pn0AJAliasType__; -text: .text%__1cGvframeKnew_vframe6FpknFframe_pknLRegisterMap_pnKJavaThread__p0_; -text: .text%__1cPconvI2L_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMtlsLoadPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cYcompareAndSwapL_boolNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAddINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIciMethodRget_flow_analysis6M_pnKciTypeFlow__; -text: .text%__1cWCallLeafNoFPDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmembar_acquireNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKbranchNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cKbranchNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXjava_lang_ref_ReferencePdiscovered_addr6FpnHoopDesc__p2_; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: loopnode.o; -text: .text%__1cOloadConI13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSaddL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%jni_GetObjectField: jni.o; -text: .text%__1cPVirtualCallDataSis_VirtualCallData6M_i_: methodDataOop.o; -text: .text%__1cSMemBarCPUOrderNodeGOpcode6kM_i_; -text: .text%__1cJFieldTypeOget_array_info6FpnNsymbolOopDesc_pip2pnGThread__nJBasicType__; -text: .text%__1cJFieldTypeYis_valid_array_signature6FpnNsymbolOopDesc__i_; -text: .text%__1cQandL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cWstatic_stub_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cQaddL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadKlassNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPmethodDataKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cPmethodDataKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cJloadBNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNbranchConNodeJis_Branch6kM_I_: ad_sparc_misc.o; -text: .text%__1cKRegionNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: ad_sparc_misc.o; -text: .text%__1cYcompareAndSwapL_boolNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENodeMis_SpillCopy6M_pnRMachSpillCopyNode__: machnode.o; -text: .text%__1cRMachNullCheckNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cYinlineCallClearArrayNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadConP0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitJmake_load6MpnENode_2pknEType_nJBasicType_i_2_; -text: .text%__1cOPhaseIdealLoopIsink_use6MpnENode_2_v_; -text: .text%__1cIGraphKitOreplace_in_map6MpnENode_2_v_; -text: .text%__1cENodeGis_Con6kM_I_: callnode.o; -text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cIGraphKitNuncommon_trap6MipnHciKlass_pkci_v_; -text: .text%__1cHCompileKTracePhase2T6M_v_; -text: .text%__1cMPhaseChaitinLclone_projs6MpnFBlock_IpnENode_4rI_i_; -text: .text%__1cNinstanceKlassSlookup_osr_nmethod6kMkpnNmethodOopDesc_i_pnHnmethod__; -text: .text%__1cIJVMState2t6MpnIciMethod_p0_v_; -text: .text%__1cMLinkResolverbEruntime_resolve_special_method6FrnICallInfo_nMmethodHandle_nLKlassHandle_4ipnGThread__v_; -text: .text%__1cMLinkResolverbFlinktime_resolve_special_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cIHaltNode2t6MpnENode_2_v_; -text: .text%__1cLOptoRuntimeSuncommon_trap_Type6F_pknITypeFunc__; -text: .text%__1cJloadLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNloadConP0NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKciTypeFlowGJsrSetNapply_control6Mp0pnQciByteCodeStream_pn0ALStateVector__v_; -text: .text%__1cSsafePoint_pollNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cINodeHashJhash_find6MpknENode__p1_; -text: .text%__1cQmulL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSaddP_reg_imm13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cOMethodLivenessKBasicBlock2t6Mp0ii_v_; -text: .text%__1cOMethodLivenessKBasicBlockQcompute_gen_kill6MpnIciMethod__v_; -text: .text%__1cQciByteCodeStreamZget_declared_field_holder6M_pnPciInstanceKlass__; -text: .text%__1cENodeIis_Start6M_pnJStartNode__: classes.o; -text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; -text: .text%__1cJTypeTupleKmake_range6FpnLciSignature__pk0_; -text: .text%__1cJTypeTupleLmake_domain6FpnPciInstanceKlass_pnLciSignature__pk0_; -text: .text%__1cSmembar_acquireNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cObranchConUNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cXjava_lang_ref_ReferenceJnext_addr6FpnHoopDesc__p2_; -text: .text%__1cMWarmCallInfoGis_hot6kM_i_; -text: .text%__1cMWarmCallInfoKalways_hot6F_p0_; -text: .text%__1cOtypeArrayKlassQarray_klass_impl6FnUtypeArrayKlassHandle_iipnGThread__pnMklassOopDesc__; -text: .text%__1cOtypeArrayKlassQarray_klass_impl6MiipnGThread__pnMklassOopDesc__; -text: .text%__1cSCompareAndSwapNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cLRethrowNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cTmembar_CPUOrderNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPcmpFastLockNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cTCreateExceptionNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKciTypeFlowLStateVectorJdo_invoke6MpnQciByteCodeStream_i_v_; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: connode.o; -text: .text%__1cQmulL_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPcmpFastLockNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreB0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadBNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cQaddP_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cMtlsLoadPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLBoxLockNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cFTypeDCeq6kMpknEType__i_; -text: .text%__1cITypeLongEmake6Fx_pk0_; -text: .text%__1cKJavaThreadbHcheck_and_handle_async_exceptions6Mi_v_; -text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; -text: .text%__1cENodeFis_If6M_pnGIfNode__: memnode.o; -text: .text%__1cMPhaseChaitinTsplit_Rematerialize6MpnENode_pnFBlock_IrInNGrowableArray4CI__ipIp2i_2_; -text: .text%__1cKimmI13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cJloadBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIGraphKitZadd_exception_states_from6MpnIJVMState__v_; -text: .text%__1cQandL_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseKdo_get_xxx6MpknHTypePtr_pnENode_pnHciField_i_v_; -text: .text%__1cMPhaseChaitinNFind_compress6MpknENode__I_; -text: .text%__1cQSystemDictionaryEfind6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNCatchProjNode2t6MpnENode_Ii_v_; -text: .text%__1cPVirtualCallDataSis_VirtualCallData6M_i_: ciMethodData.o; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: cfgnode.o; -text: .text%__1cHPhiNodeEmake6FpnENode_2_p0_; -text: .text%__1cNCatchProjNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cWCallLeafNoFPDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFKlassOis_subclass_of6kMpnMklassOopDesc__i_; -text: .text%__1cLPCTableNodeHsize_of6kM_I_: classes.o; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: cfgnode.o; -text: .text%__1cLPCTableNodeKis_PCTable6kM_pk0_: classes.o; -text: .text%__1cNciCallProfileRapply_prof_factor6Mf_v_; -text: .text%__1cIciMethodTcall_profile_at_bci6Mi_nNciCallProfile__; -text: .text%__1cHCompileOcall_generator6MpnIciMethod_ipnIJVMState_if_pnNCallGenerator__; -text: .text%__1cHCompileOfind_intrinsic6MpnIciMethod_i_pnNCallGenerator__; -text: .text%__1cIProjNodeDcmp6kMrknENode__I_; -text: .text%__1cLklassVtableIindex_of6kMpnNmethodOopDesc_i_i_; -text: .text%__1cLLShiftINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cFParseMprofile_call6MpnENode__v_; -text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__; -text: .text%__1cIGraphKitWround_double_arguments6MpnIciMethod__v_; -text: .text%__1cQciByteCodeStreambAget_declared_method_holder6M_pnHciKlass__; -text: .text%__1cIGraphKitTround_double_result6MpnIciMethod__v_; -text: .text%__1cFParseHdo_call6M_v_; -text: .text%__1cNloadConP0NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIregFOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cHMulNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMPhaseIterGVNJtransform6MpnENode__2_; -text: .text%__1cHTypeIntFwiden6kMpknEType__3_; -text: .text%__1cQxorI_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSsafePoint_pollNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadSNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKarrayKlassLobject_size6kMi_i_; -text: .text%__1cIciMethodLscale_count6Mi_i_; -text: .text%__1cKMemBarNodeEhash6kM_I_; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceKlass.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: instanceKlass.o; -text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; -text: .text%__1cMURShiftLNodeGOpcode6kM_i_; -text: .text%__1cOCompilerOracleOshould_exclude6FnMmethodHandle__i_; -text: .text%__1cIGraphKitUmake_exception_state6MpnENode__pnNSafePointNode__; -text: .text%__1cLProfileDataOtranslate_from6Mp0_v_: ciMethodData.o; -text: .text%__1cLstoreI0NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsarI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKBranchDataNis_BranchData6M_i_: ciMethodData.o; -text: .text%__1cKRegionNodeGpinned6kM_i_: loopnode.o; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: memnode.o; -text: .text%__1cLBuildCutout2t6MpnIGraphKit_pnENode_ff_v_; -text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__: graphKit.o; -text: .text%__1cTCompareAndSwapLNodeGOpcode6kM_i_; -text: .text%__1cNloadRangeNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQxorI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIJumpDataLis_JumpData6M_i_: ciMethodData.o; -text: .text%__1cMMergeMemNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNflagsRegLOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cCosOis_interrupted6FpnGThread_i_i_; -text: .text%__1cLmethodKlassNoop_is_method6kM_i_: methodKlass.o; -text: .text%__1cQsubI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXmembar_release_lockNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeHis_Root6M_pnIRootNode__: memnode.o; -text: .text%__1cKarrayKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cRshrI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeOis_CountedLoop6M_pnPCountedLoopNode__: loopnode.o; -text: .text%__1cTcan_branch_register6FpnENode_1_i_; -text: .text%__1cQCallLeafNoFPNodeGOpcode6kM_i_; -text: .text%__1cMURShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKstoreCNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cHConNodeEmake6FpknEType__p0_; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: memnode.o; -text: .text%__1cFStateM_sub_Op_ConP6MpknENode__v_; -text: .text%__1cRshrP_reg_imm5NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitMsaved_ex_oop6FpnNSafePointNode__pnENode__; -text: .text%__1cISubINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPciInstanceKlassFsuper6M_p0_; -text: .text%__1cIBoolNodeHsize_of6kM_I_; -text: .text%__1cENodeFis_If6M_pnGIfNode__: callnode.o; -text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_: objArrayKlassKlass.o; -text: .text%__1cPcompP_iRegPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSconvI2D_helperNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOstackSlotLOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cJloadPNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSsafePoint_pollNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cPBytecode_invokeJsignature6kM_pnNsymbolOopDesc__; -text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; -text: .text%__1cHMonitorKnotify_all6M_i_; -text: .text%__1cNSignatureInfoGdo_int6M_v_: bytecode.o; -text: .text%__1cOstackSlotLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIciMethodbAinterpreter_throwout_count6kM_i_; -text: .text%__1cOCompilerOracleNshould_inline6FnMmethodHandle__i_; -text: .text%__1cIciMethodOshould_exclude6M_i_; -text: .text%__1cKInlineTreeMok_to_inline6MpnIciMethod_pnIJVMState_rnNciCallProfile_pnMWarmCallInfo__8_; -text: .text%__1cKInlineTreeWfind_subtree_from_root6Fp0pnIJVMState_pnIciMethod_i_1_; -text: .text%__1cIciMethodNshould_inline6M_i_; -text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__; -text: .text%__1cGThreadXclear_pending_exception6M_v_; -text: .text%__1cICodeHeapSallocated_capacity6kM_I_; -text: .text%__1cSstkL_to_regD_1NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescbHhas_unloaded_classes_in_signature6FnMmethodHandle_pnGThread__i_; -text: .text%__1cTmembar_CPUOrderNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: connode.o; -text: .text%__1cNprefetch2NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cICHeapObj2n6FI_pv_; -text: .text%__1cQaddI_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJStartNodeIis_Start6M_p0_: classes.o; -text: .text%__1cFKlassMoop_is_klass6kM_i_: methodKlass.o; -text: .text%__1cWCallLeafNoFPDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cCosFsleep6FpnGThread_xi_i_; -text: .text%__1cIos_sleep6Fxi_i_: os_solaris.o; -text: .text%__1cSstkL_to_regD_2NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddP_reg_imm13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cFTypeDEhash6kM_i_; -text: .text%__1cKTypeRawPtrHget_con6kM_i_; -text: .text%__1cJStartNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%jni_ExceptionOccurred: jni.o; -text: .text%__1cPconvI2L_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKciTypeFlowLStateVectorStype_meet_internal6FpnGciType_3p0_3_; -text: .text%__1cMloadConINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGIfNodeHsize_of6kM_I_: classes.o; -text: .text%__1cPconvL2I_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIimmLOperJconstantL6kM_x_: ad_sparc_clone.o; -text: .text%__1cTStackWalkCompPolicyRcompilation_level6MnMmethodHandle_i_i_; -text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%__1cIGraphKitTset_all_memory_call6MpnENode__v_; -text: .text%__1cSHighResTimeSamplerLtake_sample6M_x_: statSampler.o; -text: .text%__1cHCompileFstart6kM_pnJStartNode__; -text: .text%__1cRis_error_reported6F_i_; -text: .text%__1cNWatcherThreadRis_Watcher_thread6kM_i_: thread.o; -text: .text%__1cPStatSamplerTaskEtask6M_v_: statSampler.o; -text: .text%__1cMPeriodicTaskOreal_time_tick6FI_v_; -text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cIParmNodeJideal_reg6kM_I_; -text: .text%__1cQandL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMachNodeRget_base_and_disp6kMrirpknHTypePtr__pknENode__; -text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cIregFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cHCompilebAallow_range_check_smearing6kM_i_; -text: .text%__1cRbranchLoopEndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cGRFrame2t6MnFframe_pnKJavaThread_kp0_v_; -text: .text%__1cIciMethodWwas_executed_more_than6Mi_i_; -text: .text%jni_GetArrayLength: jni.o; -text: .text%__1cIMachNodeHtwo_adr6kM_I_: machnode.o; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__: machnode.o; -text: .text%__1cPciInstanceKlassUget_canonical_holder6Mi_p0_; -text: .text%__1cJloadLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOClearArrayNodeGOpcode6kM_i_; -text: .text%__1cWCallLeafNoFPDirectNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; -text: .text%__1cVCompressedWriteStreamEgrow6M_v_; -text: .text%__1cPcheckCastPPNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%JVM_Write; -text: .text%__1cLciSignature2t6MpnHciKlass_pnIciSymbol__v_; -text: .text%__1cIciMethod2t6MnMmethodHandle__v_; -text: .text%__1cIHaltNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cWShouldNotReachHereNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKRelocationJpack_data6M_i_: relocInfo.o; -text: .text%__1cNinstanceKlassVis_same_class_package6FpnHoopDesc_pnNsymbolOopDesc_24_i_; -text: .text%__1cLOpaque1NodeGOpcode6kM_i_; -text: .text%__1cQmulL_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cEUTF8Fequal6FpWi1i_i_; -text: .text%__1cSbranchCon_longNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKstoreCNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHAddNodePadd_of_identity6kMpknEType_3_3_; -text: .text%__1cUcompU_iReg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cGThreadSis_Compiler_thread6kM_i_: thread.o; -text: .text%JVM_RawMonitorEnter; -text: .text%__1cFMutexMjvm_raw_lock6M_v_; -text: .text%JVM_RawMonitorExit; -text: .text%__1cFMutexOjvm_raw_unlock6M_v_; -text: .text%__1cKg1RegIOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cKNode_Array2t6MpnFArena__v_: loopnode.o; -text: .text%__1cOMachReturnNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cPClassFileParserUskip_over_field_name6MpciI_1_; -text: .text%__1cMTypeKlassPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cIGraphKitNcast_not_null6MpnENode__2_; -text: .text%__1cWShouldNotReachHereNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIGraphKitTtoo_many_recompiles6MnODeoptimizationLDeoptReason__i_; -text: .text%__1cPcmpFastLockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cETypeRget_typeflow_type6FpnGciType__pk0_; -text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: typeArrayKlass.o; -text: .text%__1cRcmpFastUnlockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: classFileParser.o; -text: .text%__1cURethrowExceptionNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; -text: .text%__1cIGraphKitOtoo_many_traps6MnODeoptimizationLDeoptReason__i_; -text: .text%__1cNSignatureInfoHdo_bool6M_v_: bytecode.o; -text: .text%__1cKBufferBlobbIfollow_roots_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_iri_v_: codeBlob.o; -text: .text%__1cKBufferBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cSandI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIAddINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cLTypeInstPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cFParseRensure_memory_phi6Mii_pnHPhiNode__; -text: .text%__1cMloadConLNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cFParseFmerge6Mi_v_; -text: .text%__1cFParseUprofile_taken_branch6Mi_v_; -text: .text%__1cNSafePointNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cYcompareAndSwapL_boolNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cWstatic_stub_RelocationJpack_data6M_i_; -text: .text%__1cILoopNodeHis_Loop6M_p0_: loopnode.o; -text: .text%__1cNCallGeneratorKis_virtual6kM_i_: callGenerator.o; -text: .text%__1cQxorI_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cJTypeTupleFxdual6kM_pknEType__; -text: .text%__1cNLoadKlassNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLRethrowNodeGOpcode6kM_i_; -text: .text%__1cYinlineCallClearArrayNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadSNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cYinlineCallClearArrayNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cICodeHeapIcapacity6kM_I_; -text: .text%__1cKMemoryPoolImax_size6kM_I_: memoryPool.o; -text: .text%__1cMCodeHeapPoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cPcmpFastLockNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cNloadKlassNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cFArena2T6M_v_; -text: .text%__1cMLinkResolverTresolve_static_call6FrnICallInfo_rnLKlassHandle_nMsymbolHandle_53iipnGThread__v_; -text: .text%__1cKMemBarNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cOCallRelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cLRuntimeStubYcaller_must_gc_arguments6kMpnKJavaThread__i_: codeBlob.o; -text: .text%__1cHoopDescSslow_identity_hash6M_i_; -text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__i_; -text: .text%__1cJloadCNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIimmPOperPconstant_is_oop6kM_i_: ad_sparc_clone.o; -text: .text%__1cLPCTableNodeEhash6kM_I_; -text: .text%__1cNinstanceKlassVis_same_class_package6MpnMklassOopDesc__i_; -text: .text%__1cHConNodeLout_RegMask6kM_rknHRegMask__: classes.o; -text: .text%__1cXPhaseAggressiveCoalesceYinsert_copy_with_overlap6MpnFBlock_pnENode_II_v_; -text: .text%__1cOloadConI13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMtlsLoadPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENodeGis_Con6kM_I_: multnode.o; -text: .text%__1cQandI_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cISubINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cMPhaseChaitinNFind_compress6MI_I_; -text: .text%__1cITypeLongEmake6Fxx_pk0_; -text: .text%__1cMindIndexOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFStateN_sub_Op_LoadP6MpknENode__v_; -text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; -text: .text%__1cJOopMapSetTupdate_register_map6FpknFframe_pnICodeBlob_pnLRegisterMap__v_; -text: .text%__1cNGCTaskManagerIget_task6MI_pnGGCTask__; -text: .text%__1cLGCTaskQdDueueGremove6M_pnGGCTask__; -text: .text%__1cNGCTaskManagerYshould_release_resources6MI_i_; -text: .text%__1cLGCTaskQdDueueHenqueue6MpnGGCTask__v_; -text: .text%__1cNGCTaskManagerPnote_completion6MI_v_; -text: .text%__1cITypeLongFempty6kM_i_; -text: .text%__1cJloadBNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cQandI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLklassVtableXvtable_accessibility_at6Mi_n0AKAccessType__; -text: .text%__1cIGraphKitHjava_bc6kM_nJBytecodesECode__; -text: .text%__1cIGraphKitNbuiltin_throw6MnODeoptimizationLDeoptReason_pnENode__v_; -text: .text%__1cOGenerateOopMapHget_var6Mi_nNCellTypeState__; -text: .text%__1cRinterpretedVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cSmembar_acquireNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%jni_GetSuperclass: jni.o; -text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; -text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; -text: .text%__1cCosbCstack_shadow_pages_available6FpnGThread_nMmethodHandle__i_; -text: .text%__1cHAddressQrspec_from_rtype6MnJrelocInfoJrelocType_pC_nQRelocationHolder__: ad_sparc.o; -text: .text%__1cIMulINodeGOpcode6kM_i_; -text: .text%__1cKInlineTreePshouldNotInline6kMpnIciMethod_pnMWarmCallInfo__pkc_; -text: .text%__1cRcompL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNloadKlassNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadCNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIciMethodbHhas_unloaded_classes_in_signature6M_i_; -text: .text%__1cJloadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGGCTask2t6M_v_; -text: .text%__1cJloadSNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPCallRuntimeNodeEhash6kM_I_: classes.o; -text: .text%__1cIJumpDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cObranchConUNodeJis_Branch6kM_I_: ad_sparc_misc.o; -text: .text%__1cObranchConPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cITypeFuncFxdual6kM_pknEType__; -text: .text%__1cQjava_lang_StringGlength6FpnHoopDesc__i_; -text: .text%__1cICodeBlobYcaller_must_gc_arguments6kMpnKJavaThread__i_: nmethod.o; -text: .text%__1cKstoreINodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKMemBarNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cFStateM_sub_Op_CmpI6MpknENode__v_; -text: .text%__1cJcmpOpOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cKTypeRawPtrCeq6kMpknEType__i_; -text: .text%__1cGciType2t6MnLKlassHandle__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle__v_; -text: .text%__1cKTypeAryPtrEmake6FnHTypePtrDPTR_pknHTypeAry_pnHciKlass_ii_pk0_; -text: .text%__1cMindirectOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFParseRoptimize_inlining6MpnIciMethod_ipnPciInstanceKlass_24irnKInlineTreeLInlineStyle_r2_v_; -text: .text%__1cSPSPromotionManagerbBgc_thread_promotion_manager6Fi_p0_; -text: .text%__1cQxorI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadLNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIregFOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cKcmpOpPOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cNloadKlassNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHPhiNodeMslice_memory6kMpknHTypePtr__p0_; -text: .text%__1cPCheckCastPPNodeJideal_reg6kM_I_: connode.o; -text: .text%__1cObranchConPNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cObranchConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICHeapObj2k6Fpv_v_; -text: .text%__1cSaddL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRmethodDataOopDescJbci_to_dp6Mi_pC_; -text: .text%__1cMloadConFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cFArena2t6M_v_; -text: .text%__1cRInterpreterOopMapLiterate_oop6MpnNOffsetClosure__v_; -text: .text%__1cRInterpreterOopMap2T6M_v_; -text: .text%__1cFframeToops_interpreted_do6MpnKOopClosure_pknLRegisterMap_i_v_; -text: .text%__1cLOopMapCacheGlookup6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cNinstanceKlassImask_for6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cNmethodOopDescImask_for6MipnRInterpreterOopMap__v_; -text: .text%__1cRInterpreterOopMap2t6M_v_; -text: .text%__1cJloadCNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadSNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cISubINodeDsub6kMpknEType_3_3_; -text: .text%__1cFParseOreturn_current6MpnENode__v_; -text: .text%__1cRsarI_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIGraphKitPstore_to_memory6MpnENode_22nJBasicType_i_2_; -text: .text%__1cJStoreNodeEmake6FpnENode_22pknHTypePtr_2nJBasicType__p0_; -text: .text%__1cMMonitorValue2t6MpnKScopeValue_nILocation__v_; -text: .text%__1cLBoxLockNodeKis_BoxLock6kM_pk0_: classes.o; -text: .text%__1cMMonitorValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cLBoxLockNodeKstack_slot6FpnENode__nHOptoRegEName__; -text: .text%__1cMloadConLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJStoreNodeSIdeal_masked_input6MpnIPhaseGVN_I_pnENode__; -text: .text%__1cHMatcherPstack_alignment6F_I_; -text: .text%jni_GetPrimitiveArrayCritical: jni.o; -text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; -text: .text%__1cPconvI2L_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENodeIget_long6kM_x_; -text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; -text: .text%__1cSmembar_releaseNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJimmU5OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; -text: .text%__1cLOpaque1NodeEhash6kM_I_; -text: .text%__1cJStoreNodeZIdeal_sign_extended_input6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cSbranchCon_longNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapGppload6MpnNCellTypeState_i_v_; -text: .text%__1cSmembar_releaseNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNbranchConNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRshrI_reg_imm5NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cKciTypeFlowGJsrSetSis_compatible_with6Mp1_i_; -text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__; -text: .text%__1cZCallDynamicJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJMultiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKStoreLNodeGOpcode6kM_i_; -text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; -text: .text%__1cNloadKlassNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cETypeCeq6kMpk0_i_; -text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; -text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_; -text: .text%__1cFParseRbranch_prediction6Mrf_f_; -text: .text%__1cRsarI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cHTypeAryFempty6kM_i_; -text: .text%__1cKTypeAryPtrFempty6kM_i_; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: methodDataKlass.o; -text: .text%__1cOMacroAssemblerFjumpl6MrnHAddress_pnMRegisterImpl_ipkci_v_; -text: .text%__1cOMacroAssemblerEjump6MrnHAddress_ipkci_v_; -text: .text%__1cIciMethodLis_accessor6kM_i_; -text: .text%__1cRbranchLoopEndNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: instanceKlass.o; -text: .text%__1cQmulL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFframeUentry_frame_is_first6kM_i_; -text: .text%__1cJiRegIOperFclone6kM_pnIMachOper__; -text: .text%__1cLstoreP0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSCallLeafDirectNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLRethrowNodeKmatch_edge6kMI_I_; -text: .text%__1cFTypeFEhash6kM_i_; -text: .text%__1cHnmethodbIfollow_roots_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_iri_v_; -text: .text%__1cHnmethodHoops_do6MpnKOopClosure__v_; -text: .text%__1cFStateM_sub_Op_AddI6MpknENode__v_; -text: .text%__1cIciMethodPcan_be_compiled6M_i_; -text: .text%__1cOParseGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cFParseQcreate_entry_map6M_pnNSafePointNode__; -text: .text%__1cFArenaEused6kM_I_; -text: .text%__1cFParseLbuild_exits6M_v_; -text: .text%__1cFParseIdo_exits6M_v_; -text: .text%__1cIciMethodVhas_balanced_monitors6M_i_; -text: .text%__1cFParse2t6MpnIJVMState_pnIciMethod_f_v_; -text: .text%__1cIBoolNodeDcmp6kMrknENode__I_; -text: .text%__1cQsubI_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParsePdo_method_entry6M_v_; -text: .text%__1cNCallGeneratorKfor_inline6FpnIciMethod_f_p0_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; -text: .text%__1cQconstMethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cQSystemDictionaryVadd_loader_constraint6FnMsymbolHandle_nGHandle_2pnGThread__v_; -text: .text%__1cVLoaderConstraintTableJadd_entry6MnMsymbolHandle_pnMklassOopDesc_nGHandle_34pnGThread__i_; -text: .text%__1cRciVirtualCallDataOtranslate_from6MpnLProfileData__v_; -text: .text%jni_IsSameObject: jni.o; -text: .text%__1cMloadConINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNbranchConNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cNbranchConNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQandL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLmethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cLsymbolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cQaddL_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassbDcheck_valid_for_instantiation6MipnGThread__v_; -text: .text%__1cJStartNodeOis_block_start6kM_i_: callnode.o; -text: .text%__1cRsarI_reg_imm5NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIciObjectFklass6M_pnHciKlass__; -text: .text%__1cLSymbolTableFprobe6Fpkci_pnNsymbolOopDesc__; -text: .text%__1cSInterpreterRuntimebAfrequency_counter_overflow6FpnKJavaThread_pC_x_; -text: .text%__1cPThreadLocalNodeGOpcode6kM_i_; -text: .text%__1cENodeRlatency_from_uses6kMrnLBlock_Array_rnNGrowableArray4CI___i_; -text: .text%__1cPconvL2I_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cZPhaseConservativeCoalesceKupdate_ifg6MIIpnIIndexSet_2_v_; -text: .text%__1cZPhaseConservativeCoalesceMunion_helper6MpnENode_2II222pnFBlock_I_v_; -text: .text%__1cOMethodLivenessKBasicBlockJstore_one6Mi_v_; -text: .text%__1cIIndexSetEswap6Mp0_v_; -text: .text%__1cHTypeAryEmake6FpknEType_pknHTypeInt__pk0_; -text: .text%__1cXmembar_release_lockNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cPClassFileParserbCverify_legal_class_modifiers6MipnGThread__v_; -text: .text%__1cJloadLNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cRshrP_reg_imm5NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKTypeAryPtrFxdual6kM_pknEType__; -text: .text%__1cFBlockTimplicit_null_check6MrnLBlock_Array_rnNGrowableArray4CI__pnENode_6_v_; -text: .text%__1cQandI_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cFframeNis_glue_frame6kM_i_; -text: .text%__1cLAccessFlagsPatomic_set_bits6Mi_v_; -text: .text%__1cFParseYprofile_not_taken_branch6M_v_; -text: .text%__1cQComputeCallStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cHciKlassNis_subtype_of6Mp0_i_; -text: .text%__1cbACallCompiledJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENodeHis_AddP6M_pnIAddPNode__: cfgnode.o; -text: .text%__1cRRawBytecodeStream2t6MnMmethodHandle__v_; -text: .text%__1cNinstanceKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cKstoreBNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQLibraryIntrinsicKis_virtual6kM_i_: library_call.o; -text: .text%__1cMPrefetchNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKCastPPNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cENodeHis_Loop6M_pnILoopNode__: callnode.o; -text: .text%__1cKstorePNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOPhaseIdealLoopOsplit_thru_phi6MpnENode_2i_2_; -text: .text%__1cYDebugInformationRecorderNadd_dependent6MpnPciInstanceKlass_pnIciMethod__v_; -text: .text%__1cENodeGOpcode6kM_i_; -text: .text%__1cRshrP_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQandI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMURShiftINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cIciMethodbBinterpreter_call_site_count6Mi_i_; -text: .text%__1cTInlineCallGeneratorJis_inline6kM_i_: callGenerator.o; -text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%__1cNmethodOopDescWload_signature_classes6FnMmethodHandle_pnGThread__i_; -text: .text%__1cNCompileBrokerOcompile_method6FnMmethodHandle_i1ipkcpnGThread__pnHnmethod__; -text: .text%__1cNCompileBrokerTcompile_method_base6FnMmethodHandle_ii1ipkcpnGThread__pnHnmethod__; -text: .text%__1cTconstantPoolOopDescbDresolve_string_constants_impl6FnSconstantPoolHandle_pnGThread__v_; -text: .text%__1cHSubNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNinstanceKlassPlink_class_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cMloadConFNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cFChunk2n6FII_pv_; -text: .text%__1cbACallCompiledJavaDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvI2L_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cTCallDynamicJavaNodeGOpcode6kM_i_; -text: .text%__1cKstoreBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cILoadNodeDcmp6kMrknENode__I_; -text: .text%__1cIciObject2t6M_v_; -text: .text%__1cENodeHdel_out6Mp0_v_: library_call.o; -text: .text%__1cSconstMethodOopDescZchecked_exceptions_length6kM_i_; -text: .text%__1cENodeHis_Bool6M_pnIBoolNode__: cfgnode.o; -text: .text%__1cENodeIis_CMove6M_pnJCMoveNode__: cfgnode.o; -text: .text%__1cRcompL_reg_conNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHCompileXin_preserve_stack_slots6M_I_; -text: .text%__1cPciObjectFactoryUget_empty_methodData6M_pnMciMethodData__; -text: .text%__1cMciMethodData2t6M_v_; -text: .text%__1cLOopRecorderKfind_index6MpnI_jobject__i_; -text: .text%__1cJStartNodeOis_block_start6kM_i_: classes.o; -text: .text%__1cHOrINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFframeLreal_sender6kMpnLRegisterMap__0_; -text: .text%__1cFframeTis_first_java_frame6kM_i_; -text: .text%__1cGRFrameGcaller6M_p0_; -text: .text%__1cFframeNis_java_frame6kM_i_; -text: .text%__1cNprefetch2NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKciTypeFlowFBlockPclone_loop_head6Mp0ip1pn0AGJsrSet__3_; -text: .text%__1cPCheckCastPPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRshrP_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cKRegionNodeJis_Region6kM_pk0_: loopnode.o; -text: .text%__1cFParseFdo_if6MpnENode_2nIBoolTestEmask_2_v_; -text: .text%__1cLCastP2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cXmembar_release_lockNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cJloadINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSandI_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeHis_Root6M_pnIRootNode__: callnode.o; -text: .text%__1cMPrefetchNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_: jni.o; -text: .text%__1cMloadConFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMCreateExNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJCodeCacheIcontains6Fpv_i_; -text: .text%__1cQaddL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMCallLeafNodeLis_CallLeaf6kM_pk0_: classes.o; -text: .text%__1cLPCTableNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cMCreateExNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIMachNodeJis_MachIf6kM_pknKMachIfNode__: ad_sparc.o; -text: .text%__1cISubINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cFKlassQset_next_sibling6MpnMklassOopDesc__v_; -text: .text%__1cQdivD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNCatchProjNodeDcmp6kMrknENode__I_; -text: .text%__1cIGraphKitRmake_slow_call_ex6MpnENode_pnPciInstanceKlass__v_; -text: .text%__1cKTypeOopPtrEhash6kM_i_; -text: .text%__1cIMinINodeGOpcode6kM_i_; -text: .text%__1cYinlineCallClearArrayNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNflagsRegLOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cMURShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIConINodeHget_int6kMpi_i_: classes.o; -text: .text%__1cKOopClosureLdo_nmethods6kM_ki_: psTasks.o; -text: .text%__1cJOopMapSetGall_do6FpknFframe_pnICodeBlob_pknLRegisterMap_pnKOopClosure_pFppnHoopDesc_9E_v9B9B_v_; -text: .text%__1cFframeRoops_code_blob_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cJOopMapSetHoops_do6FpknFframe_pnICodeBlob_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cKTypeRawPtrFxmeet6kMpknEType__3_; -text: .text%__1cFBlockUhoist_LCA_above_defs6Mp01IrnLBlock_Array__1_; -text: .text%JVM_GetMethodIxModifiers; -text: .text%__1cMvframeStream2t6MpnKJavaThread_i_v_; -text: .text%__1cQjava_lang_StringGequals6FpnHoopDesc_pHi_i_; -text: .text%__1cIMulLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cICodeBlobPis_runtime_stub6kM_i_: codeBlob.o; -text: .text%__1cVExceptionHandlerTableMadd_subtable6MipnNGrowableArray4Ci__2_v_; -text: .text%__1cPconvI2L_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cHMulNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cTCreateExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_IsInterface; -text: .text%__1cHciKlassOis_subclass_of6Mp0_i_; -text: .text%__1cJloadCNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cRInterpretedRFrameOis_interpreted6kM_i_: rframe.o; -text: .text%__1cGRFrameLis_compiled6kM_i_: rframe.o; -text: .text%__1cPorI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIDivINodeGOpcode6kM_i_; -text: .text%__1cbACallCompiledJavaDirectNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_; -text: .text%__1cICodeHeapIallocate6MI_pv_; -text: .text%__1cICodeHeapPsearch_freelist6MI_pnJFreeBlock__; -text: .text%__1cRcompL_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cLOpaque1NodeLbottom_type6kM_pknEType__: connode.o; -text: .text%__1cNloadRangeNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQput_after_lookup6FnMsymbolHandle_0ppnLNameSigHash__i_; -text: .text%__1cSconvI2D_helperNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHMatcherQis_spillable_arg6Fi_i_; -text: .text%__1cLRegisterMapFclear6Mpi_v_; -text: .text%__1cLRShiftLNodeGOpcode6kM_i_; -text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__; -text: .text%__1cSCountedLoopEndNodeKstride_con6kM_i_; -text: .text%__1cUPipeline_Use_Element2t6M_v_: output.o; -text: .text%__1cRshrL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSstkL_to_regD_1NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHCompileSregister_intrinsic6MpnNCallGenerator__v_; -text: .text%__1cPCallRuntimeNodeOis_CallRuntime6kM_pk0_: classes.o; -text: .text%__1cFParseSmerge_memory_edges6MpnMMergeMemNode_ii_v_; -text: .text%__1cNSCMemProjNodeGOpcode6kM_i_; -text: .text%__1cNimmP_pollOperEtype6kM_pknEType__: ad_sparc_clone.o; -text: .text%__1cRloadConP_pollNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQinstanceRefKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSconvI2D_helperNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapUreachable_basicblock6Fp0ipi_v_; -text: .text%__1cIMulINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cPciInstanceKlassLfind_method6MpnIciSymbol_2_pnIciMethod__; -text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_; -text: .text%__1cFciEnvRfind_system_klass6MpnIciSymbol__pnHciKlass__; -text: .text%__1cLRegisterMapIpd_clear6M_v_; -text: .text%__1cSstkL_to_regD_1NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cHUNICODEHas_utf86FpHi_pc_; -text: .text%__1cLstoreP0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSstkL_to_regD_2NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cMnegF_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKo0RegPOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cSaddL_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSstkL_to_regD_1NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKCodeBuffer2t6MiiiiiipnKBufferBlob_pnJrelocInfo_pnORelocateBuffer_ipnLOopRecorder_pkcii_v_; -text: .text%__1cIGraphKitYcombine_exception_states6MpnNSafePointNode_2_v_; -text: .text%__1cSstkL_to_regD_2NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cSstkL_to_regD_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQcmovI_reg_ltNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassWfind_field_from_offset6kMiipnPfieldDescriptor__i_; -text: .text%__1cPciInstanceKlassTget_field_by_offset6Mii_pnHciField__; -text: .text%__1cRshrP_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddL_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; -text: .text%__1cSstkL_to_regD_2NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cWstatic_stub_RelocationMupdate_addrs6MrknKCodeBuffer_3_v_; -text: .text%__1cSstkL_to_regD_2NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKRelocationWfix_relocation_at_move6Mi_v_: codeBlob.o; -text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; -text: .text%__1cKstoreLNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSvframeStreamCommonbHskip_method_invoke_and_aux_frames6M_v_; -text: .text%__1cRbranchLoopEndNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSconvI2D_helperNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassXmark_dependent_nmethods6MpnMklassOopDesc__i_; -text: .text%__1cDCHANprocess_class6FnLKlassHandle_pnNGrowableArray4n0B___pnNGrowableArray4nMmethodHandle___nMsymbolHandle_6_v_; -text: .text%__1cQConstantIntValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cSconvI2D_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; -text: .text%__1cHnmethodPis_locked_by_vm6kM_i_: nmethod.o; -text: .text%__1cUcompU_iReg_imm13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cUcompI_iReg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIGraphKitXset_edges_for_java_call6MpnMCallJavaNode_i_v_; -text: .text%__1cOMacroAssemblerNverify_thread6M_v_; -text: .text%__1cJloadLNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitZset_results_for_java_call6MpnMCallJavaNode__pnENode__; -text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_: methodDataOop.o; -text: .text%__1cSbranchCon_longNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; -text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; -text: .text%__1cIAddLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNloadKlassNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cFStateO_sub_Op_StoreI6MpknENode__v_; -text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cRbranchLoopEndNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cHciField2t6MpnPfieldDescriptor__v_; -text: .text%__1cMjniIdSupportNto_method_oop6FpnK_jmethodID__pnNmethodOopDesc__; -text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_; -text: .text%__1cMloadConLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZCallInterpreterDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJloadSNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cHnmethodLis_unloaded6kM_i_: nmethod.o; -text: .text%__1cYcompareAndSwapL_boolNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFKlassMnext_sibling6kM_p0_; -text: .text%__1cSbranchCon_longNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; -text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSobjArrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJimmU5OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cRbranchLoopEndNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerMload_address6MrnHAddress_i_v_: ad_sparc.o; -text: .text%__1cLBlock_ArrayEgrow6MI_v_; -text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__: loopnode.o; -text: .text%__1cbCcatch_cleanup_fix_all_inputs6FpnENode_11_v_: lcm.o; -text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_; -text: .text%__1cOMacroAssemblerUallocate_oop_address6MpnI_jobject_pnMRegisterImpl__nHAddress__; -text: .text%__1cUThreadSafepointStateXexamine_state_of_thread6Mi_v_; -text: .text%__1cUSafepointSynchronizeOsafepoint_safe6FpnKJavaThread_nPJavaThreadState__i_; -text: .text%__1cUParallelScavengeHeapNtlab_capacity6kM_I_; -text: .text%__1cKcmpOpPOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cObranchConPNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cKstoreBNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; -text: .text%__1cLBoxLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcmpFastLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHRetNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKRegionNodeEhash6kM_I_: loopnode.o; -text: .text%__1cPconvL2I_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNnmethodLocker2T6M_v_; -text: .text%__1cICallNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNnmethodLocker2t6MpnHnmethod__v_; -text: .text%__1cLstoreB0NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescOis_initializer6kM_i_; -text: .text%__1cbDcatch_cleanup_find_cloned_def6FpnFBlock_pnENode_1rnLBlock_Array_i_3_: lcm.o; -text: .text%__1cQxorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKCodeBufferMstart_a_stub6M_v_; -text: .text%__1cKstoreLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKCodeBufferKend_a_stub6M_v_; -text: .text%__1cFTypeFCeq6kMpknEType__i_; -text: .text%__1cFciEnvVget_constant_by_index6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cQciByteCodeStreamMget_constant6M_nKciConstant__; -text: .text%__1cFciEnvbAget_constant_by_index_impl6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cOClearArrayNodeKmatch_edge6kMI_I_; -text: .text%__1cPconvL2I_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadSNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSbranchCon_longNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cOFastUnlockNodeFValue6kMpnOPhaseTransform__pknEType__: classes.o; -text: .text%__1cKJavaThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_: universe.o; -text: .text%__1cFStateP_sub_Op_LShiftI6MpknENode__v_; -text: .text%__1cQandL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJiRegPOperFclone6kM_pnIMachOper__; -text: .text%__1cPSignatureStreamRas_symbol_or_null6M_pnNsymbolOopDesc__; -text: .text%__1cIregDOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cKMemBarNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cKMemBarNode2t6M_v_; -text: .text%__1cNIdealLoopTreeObeautify_loops6MpnOPhaseIdealLoop__i_; -text: .text%__1cRsarI_reg_imm5NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_: frame.o; -text: .text%__1cKimmI13OperFclone6kM_pnIMachOper__; -text: .text%__1cIGraphKitbBset_arguments_for_java_call6MpnMCallJavaNode__v_; -text: .text%__1cIGraphKitJpush_node6MnJBasicType_pnENode__v_: callGenerator.o; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_: bytecode.o; -text: .text%__1cNCallGeneratorJis_inline6kM_i_: callGenerator.o; -text: .text%__1cJcmpOpOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cNprefetch2NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRcompL_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cMloadConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_SetObjectArrayElement: jni.o; -text: .text%__1cSandI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPThreadLocalNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNSafePointNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKMemBarNodeJis_MemBar6kM_pk0_: classes.o; -text: .text%__1cIciMethodXfind_monomorphic_target6MpnHciKlass_22_p0_; -text: .text%__1cJCHAResultOis_monomorphic6kM_i_; -text: .text%__1cDCHAManalyze_call6FnLKlassHandle_11nMsymbolHandle_2_pnJCHAResult__; -text: .text%__1cOloadConI13NodeFclone6kM_pnENode__; -text: .text%__1cObranchConUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitOinsert_mem_bar6MpnKMemBarNode__v_; -text: .text%__1cLOptoRuntimeOnew_objArray_C6FpnMklassOopDesc_ipnKJavaThread__v_; -text: .text%__1cRshlL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cbACallCompiledJavaDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQandI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSandI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; -text: .text%__1cZresource_reallocate_bytes6FpcII_0_; -text: .text%__1cLConvL2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOAbstractICacheQinvalidate_range6FpCi_v_; -text: .text%__1cKstorePNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMaxINodeGOpcode6kM_i_; -text: .text%__1cIGraphKitMarray_length6MpnENode__2_; -text: .text%__1cIGraphKitbMset_predefined_output_for_runtime_call6MpnENode_pnMMergeMemNode__v_; -text: .text%__1cWThreadLocalAllocBufferFclear6M_v_; -text: .text%__1cTDirectCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cNCallGeneratorPfor_direct_call6FpnIciMethod__p0_; -text: .text%__1cMWarmCallInfoLalways_cold6F_p0_; -text: .text%__1cMPhaseChaitinQgather_lrg_masks6Mi_v_; -text: .text%__1cIimmDOperJconstantD6kM_d_: ad_sparc_clone.o; -text: .text%__1cIPhaseIFGEinit6MI_v_; -text: .text%__1cLBlock_Array2t6MpnFArena__v_: live.o; -text: .text%__1cJPhaseLiveHcompute6MI_v_; -text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cIciObjectSis_obj_array_klass6M_i_: ciTypeArrayKlass.o; -text: .text%__1cIciObjectRis_instance_klass6M_i_: ciTypeArrayKlass.o; -text: .text%__1cSaddI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRcompL_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cZnoG3_iRegI_64bit_safeOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cFTypeDEmake6Fd_pk0_; -text: .text%__1cFKlassMoop_is_array6kM_i_: symbolKlass.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: symbolKlass.o; -text: .text%__1cPThreadRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cPThreadRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cRshlI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvL2I_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cQciTypeArrayKlassTis_type_array_klass6M_i_: ciTypeArrayKlass.o; -text: .text%__1cQaddL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHMatcherMreturn_value6Fii_nLRegPair__; -text: .text%__1cGThreadQunboost_priority6Fp0_v_; -text: .text%__1cMloadConDNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cFStateN_sub_Op_LoadI6MpknENode__v_; -text: .text%__1cIMachOperEtype6kM_pknEType__; -text: .text%JVM_GetCPClassNameUTF; -text: .text%__1cUcompU_iReg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cITypeNodeHis_Type6M_p0_: classes.o; -text: .text%__1cICodeBlob2t6Mpkcii_v_; -text: .text%__1cKBufferBlobGcreate6Fpkci_p0_; -text: .text%__1cTmembar_CPUOrderNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadBNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKcmpOpUOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cObranchConUNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cObranchConUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmembar_acquireNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKJNIHandlesLmake_global6FnGHandle_i_pnI_jobject__; -text: .text%__1cTCallInterpreterNodeGOpcode6kM_i_; -text: .text%jni_GetStringLength: jni.o; -text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cRshrP_reg_imm5NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cJCHAResultSmonomorphic_target6kM_nMmethodHandle__; -text: .text%__1cLConvI2LNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cHMonitorEwait6Mil_i_; -text: .text%__1cJloadPNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cMoutputStream2t6Mi_v_; -text: .text%__1cMstringStreamJas_string6M_pc_; -text: .text%__1cMstringStream2T6M_v_; -text: .text%__1cMstringStream2t6MI_v_; -text: .text%__1cIGraphKitMreset_memory6M_pnENode__; -text: .text%__1cZCallDynamicJavaDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKstorePNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKstoreLNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cNprefetch2NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeMsetup_is_top6M_v_; -text: .text%__1cIGotoNodeGOpcode6kM_i_; -text: .text%__1cPorI_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; -text: .text%__1cSReferenceProcessorSdiscover_reference6MpnHoopDesc_nNReferenceType__i_; -text: .text%__1cENodeHis_Bool6M_pnIBoolNode__: callnode.o; -text: .text%__1cENodeIis_CMove6M_pnJCMoveNode__: callnode.o; -text: .text%__1cHRetNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cNbranchConNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cHRetNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapLbb_mark_fct6Fp0ipi_v_; -text: .text%__1cIciObjectRis_instance_klass6M_i_: ciObjectFactory.o; -text: .text%__1cIciObjectSis_obj_array_klass6M_i_: ciObjectFactory.o; -text: .text%__1cKcmpOpPOperFequal6kM_i_: ad_sparc_clone.o; -text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_; -text: .text%__1cKReturnNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSandI_reg_imm13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cXjava_lang_ref_ReferenceIset_next6FpnHoopDesc_2_v_; -text: .text%__1cSReferenceProcessorTget_discovered_list6MnNReferenceType__ppnHoopDesc__; -text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_; -text: .text%__1cXmembar_acquire_lockNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_; -text: .text%__1cKStoreBNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cJloadINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmembar_releaseNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cSaddL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLRShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cEDict2t6MpFpkv2_ipF2_i_v_; -text: .text%__1cEDict2T6M_v_; -text: .text%__1cKBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cLOopRecorder2t6MpnFArena__v_; -text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__; -text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cIModINodeGOpcode6kM_i_; -text: .text%__1cUGenericGrowableArray2t6MiipnEGrET_i_v_; -text: .text%__1cJloadCNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeHget_int6kMpi_i_; -text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_nMmethodHandle__v_; -text: .text%__1cKJavaThreadQlast_java_vframe6MpnLRegisterMap__pnKjavaVFrame__; -text: .text%__1cTStackWalkCompPolicyVfindTopInlinableFrame6MpnNGrowableArray4CpnGRFrame____2_; -text: .text%__1cTStackWalkCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; -text: .text%__1cKjavaVFrameNis_java_frame6kM_i_: vframe.o; -text: .text%__1cISubLNodeGOpcode6kM_i_; -text: .text%__1cKciTypeFlowXmark_known_range_starts6M_v_; -text: .text%__1cKciTypeFlow2t6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cKciTypeFlowLfind_ranges6M_v_; -text: .text%__1cKciTypeFlowPget_start_state6M_pkn0ALStateVector__; -text: .text%__1cKciTypeFlowHdo_flow6M_v_; -text: .text%__1cKciTypeFlowKflow_types6M_v_; -text: .text%__1cKciTypeFlowKmap_blocks6M_v_; -text: .text%__1cMloadConPNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQcmovI_reg_ltNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPoolHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cKStoreCNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cIciMethodJload_code6M_v_; -text: .text%__1cMciMethodDataJload_data6M_v_; -text: .text%__1cIGraphKitTuse_exception_state6MpnNSafePointNode__pnENode__; -text: .text%__1cOcompU_iRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIGraphKitGmemory6MI_pnENode__; -text: .text%__1cIHaltNodeEhash6kM_I_: classes.o; -text: .text%__1cFKlassQup_cast_abstract6M_p0_; -text: .text%__1cKReturnNodeEhash6kM_I_: classes.o; -text: .text%__1cLklassVtableRinitialize_vtable6MpnGThread__v_; -text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cNobjArrayKlassPoop_is_objArray6kM_i_: objArrayKlass.o; -text: .text%__1cPjava_lang_ClassNcreate_mirror6FnLKlassHandle_pnGThread__pnHoopDesc__; -text: .text%__1cIAndINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cFKlassMoop_is_klass6kM_i_: methodDataKlass.o; -text: .text%__1cPmethodDataKlassRoop_is_methodData6kM_i_: methodDataKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: methodDataKlass.o; -text: .text%__1cMciMethodData2t6MnQmethodDataHandle__v_; -text: .text%__1cIGraphKitOmake_slow_call6MpknITypeFunc_pCpkcpnENode_88_8_; -text: .text%__1cUGenericGrowableArrayEgrow6Mi_v_; -text: .text%__1cIAndINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cLOpaque2NodeGOpcode6kM_i_; -text: .text%__1cOClearArrayNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; -text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cOPhaseIdealLoopPis_counted_loop6MpnENode_pnNIdealLoopTree__2_; -text: .text%__1cKstoreCNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQComputeCallStackHdo_void6M_v_: generateOopMap.o; -text: .text%__1cIMachNodeQis_MachSafePoint6M_pnRMachSafePointNode__: machnode.o; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: klass.o; -text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_; -text: .text%__1cKKlass_vtbl2n6FIrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: klass.o; -text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__; -text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; -text: .text%jni_GetStringUTFLength: jni.o; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; -text: .text%jni_GetStringUTFRegion: jni.o; -text: .text%__1cFKlassRbase_create_klass6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__1_; -text: .text%__1cHUNICODELutf8_length6FpHi_i_; -text: .text%__1cENodeHis_Mach6M_pnIMachNode__: loopnode.o; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: loopnode.o; -text: .text%__1cQPlaceholderTableJadd_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cQPlaceholderTableMremove_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cENodeHis_Copy6kM_I_: ad_sparc.o; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: memnode.o; -text: .text%__1cKstoreBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQSystemDictionaryTload_instance_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cRsarI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUcompU_iReg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHAddNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cUcompU_iReg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKPerfStringKset_string6Mpkc_v_; -text: .text%__1cQjava_lang_StringRas_unicode_string6FpnHoopDesc_ri_pH_; -text: .text%JVM_InternString; -text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_; -text: .text%__1cOGenerateOopMapTmerge_state_vectors6MpnNCellTypeState_2_i_; -text: .text%__1cRcompL_reg_conNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshrL_reg_imm6NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cCosGrandom6F_l_; -text: .text%__1cXmembar_acquire_lockNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKimmP13OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cVcompP_iRegP_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cENodeGis_Con6kM_I_: ad_sparc.o; -text: .text%__1cSaddL_reg_imm13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cRcompL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENodeHis_Root6M_pnIRootNode__: machnode.o; -text: .text%__1cNMachIdealNodeJnum_opnds6kM_I_: machnode.o; -text: .text%__1cRMachNullCheckNodeLout_RegMask6kM_rknHRegMask__: machnode.o; -text: .text%__1cRMachNullCheckNode2t6MpnENode_2I_v_; -text: .text%__1cSTailCalljmpIndNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cIGraphKitPpush_pair_local6Mi_v_: parse2.o; -text: .text%__1cICodeHeapKdeallocate6Mpv_v_; -text: .text%__1cJCodeCacheEfree6FpnICodeBlob__v_; -text: .text%__1cNSafePointNodeMis_SafePoint6M_p0_: classes.o; -text: .text%__1cSCompareAndSwapNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFParseNpush_constant6MnKciConstant__i_; -text: .text%__1cKTypeRawPtrEmake6FpC_pk0_; -text: .text%jni_SetIntField: jni.o; -text: .text%__1cENodeGis_Sub6M_pnHSubNode__: classes.o; -text: .text%__1cNIdealLoopTreeMcounted_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cNIdealLoopTreeTcheck_inner_safepts6MpnOPhaseIdealLoop__v_; -text: .text%__1cIciObjectMis_obj_array6M_i_: ciInstanceKlass.o; -text: .text%__1cKBufferBlobEfree6Fp0_v_; -text: .text%__1cIRootNodeHis_Root6M_p0_: classes.o; -text: .text%__1cPconvL2I_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLRuntimeStubIis_alive6kM_i_: codeBlob.o; -text: .text%__1cLCastP2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; -text: .text%__1cHnmethodKpc_desc_at6MpCi_pnGPcDesc__; -text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; -text: .text%__1cQSystemDictionaryRcheck_constraints6FiInTinstanceKlassHandle_nGHandle_pnGThread__v_; -text: .text%__1cVLoaderConstraintTablePcheck_or_update6MnTinstanceKlassHandle_nGHandle_nMsymbolHandle__pkc_; -text: .text%__1cVshrL_reg_imm6_L2INodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQmodI_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFKlassXsearch_secondary_supers6kMpnMklassOopDesc__i_; -text: .text%__1cZCallDynamicJavaDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitTcreate_and_xform_if6MpnENode_2ff_pnGIfNode__: graphKit.o; -text: .text%__1cKTypeRawPtrFempty6kM_i_; -text: .text%__1cLConvI2LNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cIMachNodeSalignment_required6kM_i_: machnode.o; -text: .text%__1cIMachNodePcompute_padding6kMi_i_: machnode.o; -text: .text%__1cWImplicitExceptionTableGappend6MII_v_; -text: .text%__1cIMachNodeLis_MachCall6M_pnMMachCallNode__: machnode.o; -text: .text%__1cRMachNullCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_: ciMethodData.o; -text: .text%__1cQxorI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNIdealLoopTreeVadjust_loop_exit_prob6MpnOPhaseIdealLoop__v_; -text: .text%__1cOMacroAssemblerCbr6MnJAssemblerJCondition_in0BHPredict_pCnJrelocInfoJrelocType__v_: assembler_sparc.o; -text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cOLibraryCallKitOgenerate_guard6MpnENode_pnKRegionNode_f_v_; -text: .text%__1cSandI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLstoreP0NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cIPhaseIFGISquareUp6M_v_; -text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_; -text: .text%__1cKCodeBuffer2T6M_v_; -text: .text%__1cLklassItableRinitialize_itable6M_v_; -text: .text%__1cQPSGenerationPoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cQPSGenerationPoolImax_size6kM_I_: memoryPool.o; -text: .text%__1cQPSGenerationPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cKNode_Array2t6MpnFArena__v_: reg_split.o; -text: .text%__1cENodeHis_Load6M_pnILoadNode__: multnode.o; -text: .text%__1cLOpaque1NodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cPconvI2L_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cMURShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJLoadBNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cRcompL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cXAdaptiveWeightedAverageGsample6Mf_v_; -text: .text%__1cFKlassZcan_be_primary_super_slow6kM_i_; -text: .text%__1cQciByteCodeStreamJget_klass6Mri_pnHciKlass__; -text: .text%__1cFKlassMoop_is_klass6kM_i_: instanceKlass.o; -text: .text%__1cFKlassWappend_to_sibling_list6M_v_; -text: .text%__1cNSafePointNodeEjvms6kM_pnIJVMState__: classes.o; -text: .text%__1cQcmovI_reg_ltNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQSystemDictionarySjava_system_loader6F_pnHoopDesc__; -text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; -text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; -text: .text%__1cUCallCompiledJavaNodeGOpcode6kM_i_; -text: .text%__1cMTypeKlassPtrFxdual6kM_pknEType__; -text: .text%__1cNprefetch2NodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cSinstanceKlassKlassXallocate_instance_klass6MiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; -text: .text%__1cNinstanceKlassQinit_implementor6M_v_; -text: .text%__1cPClassFileParserNfill_oop_maps6MnTinstanceKlassHandle_ii_v_; -text: .text%__1cPClassFileStream2t6MpCipc_v_; -text: .text%__1cRconstantPoolKlassIallocate6MipnGThread__pnTconstantPoolOopDesc__; -text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; -text: .text%__1cNmethodOopDescMsort_methods6FpnPobjArrayOopDesc_222_v_; -text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cKoopFactoryQnew_constantPool6FipnGThread__pnTconstantPoolOopDesc__; -text: .text%__1cKoopFactoryRnew_instanceKlass6FiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cVjava_lang_ClassLoaderRis_trusted_loader6FpnHoopDesc__i_; -text: .text%__1cPClassFileParserOparseClassFile6MnMsymbolHandle_nGHandle_2r1pnGThread__nTinstanceKlassHandle__; -text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; -text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; -text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; -text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__; -text: .text%__1cTClassLoadingServiceTnotify_class_loaded6FpnNinstanceKlass_i_v_; -text: .text%__1cPClassFileParserQparse_interfaces6MnSconstantPoolHandle_nGHandle_2pnGThread__nOobjArrayHandle__; -text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cIVerifierRshould_verify_for6FpnHoopDesc__i_; -text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_; -text: .text%__1cIVerifierQrelax_verify_for6FpnHoopDesc__i_; -text: .text%__1cPClassFileParserMparse_fields6MnSconstantPoolHandle_ipnUFieldAllocationCount_pnOobjArrayHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassQeager_initialize6MpnGThread__v_; -text: .text%__1cLklassVtablebKcompute_vtable_size_and_num_mirandas6Fri1pnMklassOopDesc_pnPobjArrayOopDesc_nLAccessFlags_pnHoopDesc_pnNsymbolOopDesc_5_v_; -text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserNparse_methods6MnSconstantPoolHandle_ipnLAccessFlags_ppnPobjArrayOopDesc_66pnGThread__nOobjArrayHandle__; -text: .text%__1cPClassFileParserbAparse_classfile_attributes6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassZcan_be_primary_super_slow6kM_i_; -text: .text%__1cQSystemDictionaryVresolve_super_or_fail6FnMsymbolHandle_1nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cKcmpOpPOperJnot_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cRMachSafePointNodePis_MachCallJava6M_pnQMachCallJavaNode__: ad_sparc_misc.o; -text: .text%__1cMPhaseIterGVNIoptimize6M_v_; -text: .text%__1cOPhaseTransform2t6MnFPhaseLPhaseNumber__v_; -text: .text%__1cISubINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o; -text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o; -text: .text%__1cHMemNodeHsize_of6kM_I_; -text: .text%__1cFVTuneQstart_class_load6F_v_; -text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cFVTuneOend_class_load6F_v_; -text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; -text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; -text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; -text: .text%__1cKklassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cQmodI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLRShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKCMoveINodeGOpcode6kM_i_; -text: .text%__1cLLShiftLNodeGOpcode6kM_i_; -text: .text%__1cYcompareAndSwapL_boolNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSinstanceKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cNinstanceKlassScopy_static_fields6MpnSPSPromotionManager__v_; -text: .text%__1cMtlsLoadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateQ_sub_Op_URShiftI6MpknENode__v_; -text: .text%__1cKcmpOpUOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cObranchConUNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cQaddP_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapJinterp_bb6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapQnext_bb_start_pc6MpnKBasicBlock__i_; -text: .text%__1cLklassVtableYadd_new_mirandas_to_list6FpnNGrowableArray4CpnNmethodOopDesc___pnPobjArrayOopDesc_6pnMklassOopDesc__v_; -text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_; -text: .text%__1cKoopFactoryVnew_constantPoolCache6FipnGThread__pnYconstantPoolCacheOopDesc__; -text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; -text: .text%__1cWconstantPoolCacheKlassIallocate6MipnGThread__pnYconstantPoolCacheOopDesc__; -text: .text%__1cIVerifierRverify_byte_codes6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassWadd_loader_constraints6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%JVM_GetMethodIxSignatureUTF; -text: .text%JVM_GetMethodIxMaxStack; -text: .text%JVM_GetMethodIxArgsSize; -text: .text%JVM_GetMethodIxByteCodeLength; -text: .text%JVM_GetMethodIxExceptionIndexes; -text: .text%JVM_GetMethodIxByteCode; -text: .text%JVM_GetMethodIxExceptionsCount; -text: .text%__1cPCheckCastPPNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cLstoreP0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHCmpNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cMPhaseChaitinSbuild_ifg_physical6MpnMResourceArea__I_; -text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cQmulD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKoopFactoryWnew_permanent_intArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cPClassFileParserVparse_exception_table6MIInSconstantPoolHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cNPhaseCoalescePcoalesce_driver6M_v_; -text: .text%__1cLProfileDataSis_VirtualCallData6M_i_: ciMethodData.o; -text: .text%__1cLBuildCutout2T6M_v_; -text: .text%__1cNloadConL0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJloadFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cITypeFuncMreturns_long6kM_i_; -text: .text%__1cJloadSNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: parse2.o; -text: .text%__1cENodeGis_Con6kM_I_: connode.o; -text: .text%__1cNloadConP0NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cJimmP0OperEtype6kM_pknEType__: ad_sparc_clone.o; -text: .text%__1cLstoreI0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPCheckCastPPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJloadLNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; -text: .text%__1cIAndINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cIciObjectSis_obj_array_klass6M_i_: ciInstanceKlass.o; -text: .text%__1cTGeneratePairingInfoRpossible_gc_point6MpnOBytecodeStream__i_: ciMethod.o; -text: .text%__1cQandL_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKRegionNodeOis_block_start6kM_i_: loopnode.o; -text: .text%__1cHNTarjanICOMPRESS6M_v_; -text: .text%__1cNRelocIteratorTlocs_and_index_size6Fii_i_; -text: .text%__1cQsubL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQStackFrameStream2t6MpnKJavaThread_i_v_; -text: .text%__1cKNode_Array2t6MpnFArena__v_: compile.o; -text: .text%__1cLClassLoaderLadd_package6Fpkci_i_; -text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__: loopnode.o; -text: .text%__1cPCountedLoopNodeDphi6kM_pnENode__: loopnode.o; -text: .text%__1cOcompI_iRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPCountedLoopNodeNstride_is_con6kM_i_: loopnode.o; -text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; -text: .text%__1cHTypePtrCeq6kMpknEType__i_; -text: .text%__1cQandI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIXorINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cRmethodDataOopDescLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cSCompareAndSwapNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cRcompL_reg_conNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmembar_acquireNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cPindOffset13OperFclone6kM_pnIMachOper__; -text: .text%__1cICallNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cFframeZinterpreter_frame_set_bcx6Mi_v_; -text: .text%__1cJloadCNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cHnmethodJcode_size6kM_i_: nmethod.o; -text: .text%__1cMnegF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: loopnode.o; -text: .text%__1cLstoreI0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; -text: .text%__1cPciObjArrayKlassSis_obj_array_klass6M_i_: ciObjArrayKlass.o; -text: .text%__1cSaddL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQshrL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNSharedRuntimebKexception_handler_for_return_address6FpC_1_; -text: .text%__1cILoopNodeHsize_of6kM_I_: classes.o; -text: .text%__1cHMatcherLfind_shared6MpnENode__v_; -text: .text%__1cJStartNodeHsize_of6kM_I_; -text: .text%__1cHMatcherFxform6MpnENode_i_2_; -text: .text%__1cEDict2t6MpFpkv2_ipF2_ipnFArena_i_v_; -text: .text%__1cRInterpretedRFrameKtop_vframe6kM_pnKjavaVFrame__: rframe.o; -text: .text%__1cQmodI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRinterpretedVFrameDbci6kM_i_; -text: .text%__1cRreturn_RelocationEtype6M_nJrelocInfoJrelocType__: codeBlob.o; -text: .text%__1cQmodI_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsarI_reg_imm5NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseKdo_put_xxx6MpknHTypePtr_pnENode_pnHciField_i_v_; -text: .text%__1cIAndINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cMnegF_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cNIdealLoopTreeOpolicy_peeling6kMpnOPhaseIdealLoop__i_; -text: .text%__1cNIdealLoopTreeUiteration_split_impl6MpnOPhaseIdealLoop_rnJNode_List__v_; -text: .text%__1cNIdealLoopTreebBpolicy_do_remove_empty_loop6MpnOPhaseIdealLoop__i_; -text: .text%__1cQsubL_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAndINodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cNinstanceKlassbBcall_class_initializer_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNloadRangeNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegF_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitRmerge_fast_memory6MpnENode_2i_v_; -text: .text%__1cRcompL_reg_conNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cMnegF_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cFKlassRoop_is_methodData6kM_i_: instanceKlass.o; -text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_; -text: .text%__1cTStackWalkCompPolicyYmethod_back_branch_event6MnMmethodHandle_iipnGThread__v_; -text: .text%__1cFKlassNoop_is_method6kM_i_: instanceKlass.o; -text: .text%__1cbCCompiledCodeSafepointHandlerYcaller_must_gc_arguments6kM_i_: safepoint.o; -text: .text%__1cUThreadSafepointStateYcaller_must_gc_arguments6kM_i_; -text: .text%__1cRCompilationPolicybJreset_counter_for_back_branch_event6MnMmethodHandle__v_; -text: .text%__1cNSafepointBlobYcaller_must_gc_arguments6kMpnKJavaThread__i_; -text: .text%__1cOMethodLivenessQcompute_liveness6M_v_; -text: .text%__1cOMethodLiveness2t6MpnFArena_pnIciMethod__v_; -text: .text%__1cOMethodLivenessNinit_gen_kill6M_v_; -text: .text%__1cOMethodLivenessSpropagate_liveness6M_v_; -text: .text%__1cOMethodLivenessRinit_basic_blocks6M_v_; -text: .text%__1cIGraphKitHopt_iff6MpnENode_2_2_; -text: .text%__1cLCastP2INodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cLRShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cUcompU_iReg_imm13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cJTimeStampGupdate6M_v_; -text: .text%__1cRmethodDataOopDescJis_mature6kM_i_; -text: .text%__1cRmethodDataOopDescKmileage_of6FpnNmethodOopDesc__i_; -text: .text%__1cWconstantPoolCacheKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cMMachCallNodeMreturns_long6kM_i_; -text: .text%__1cIGraphKitOhas_ex_handler6M_i_; -text: .text%__1cMloadConDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJStartNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cFParseQarray_addressing6MnJBasicType_ippknEType__pnENode__; -text: .text%__1cNloadConP0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKReturnNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cPCountedLoopNodeHsize_of6kM_I_: classes.o; -text: .text%__1cIProjNodeJideal_reg6kM_I_; -text: .text%__1cQaddI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQcmovI_reg_ltNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQcmovI_reg_gtNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cRMachSafePointNodeLis_MachCall6M_pnMMachCallNode__: ad_sparc_misc.o; -text: .text%__1cSsafePoint_pollNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsubI_zero_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJcmpOpOperFequal6kM_i_: ad_sparc_clone.o; -text: .text%__1cHCompilebAvarargs_C_out_slots_killed6kM_I_; -text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6MX_v_: jni.o; -text: .text%__1cbBjava_lang_ref_SoftReferenceFclock6F_x_; -text: .text%__1cTMachCallRuntimeNodeSis_MachCallRuntime6M_p0_: ad_sparc_misc.o; -text: .text%__1cOPhaseIdealLoopQset_subtree_ctrl6MpnENode__v_; -text: .text%__1cFciEnvUis_unresolved_string6kMpnPciInstanceKlass_i_i_; -text: .text%__1cQciByteCodeStreamUis_unresolved_string6kM_i_; -text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cNflagsRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cZCallDynamicJavaDirectNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerOcas_under_lock6MpnMRegisterImpl_22pCi_v_; -text: .text%__1cYciExceptionHandlerStreamPcount_remaining6M_i_; -text: .text%__1cFParseXcatch_inline_exceptions6MpnNSafePointNode__v_; -text: .text%__1cRconstantPoolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cTmembar_CPUOrderNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKcmpOpUOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%JVM_GetFieldIxModifiers; -text: .text%__1cJMultiNodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%__1cENodeFis_If6M_pnGIfNode__: connode.o; -text: .text%__1cRScavengeRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cRScavengeRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cQmulL_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cILoopNode2t6MpnENode_2_v_; -text: .text%JVM_IsConstructorIx; -text: .text%__1cICallNodeSis_CallInterpreter6kM_pknTCallInterpreterNode__: classes.o; -text: .text%__1cPJavaCallWrapperHoops_do6MpnKOopClosure__v_; -text: .text%__1cFframeNoops_entry_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cSaddP_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHMatcherUc_calling_convention6FpnLRegPair_I_v_; -text: .text%__1cPCallRuntimeNodeScalling_convention6kMpnLRegPair_I_v_; -text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__; -text: .text%__1cHnmethodQis_native_method6kM_i_: nmethod.o; -text: .text%__1cPCountedLoopNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cICallNodeRis_CallStaticJava6kM_pknSCallStaticJavaNode__: classes.o; -text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; -text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; -text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__; -text: .text%__1cLRShiftINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cKg1RegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNSignatureInfoHdo_long6M_v_: frame.o; -text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_; -text: .text%__1cUjni_invoke_nonstatic6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; -text: .text%__1cIciObjectMhas_encoding6M_i_; -text: .text%__1cNinstanceKlassQarray_klass_impl6MipnGThread__pnMklassOopDesc__; -text: .text%__1cIAndINodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cIAndINodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cTMachCallRuntimeNodePret_addr_offset6M_i_; -text: .text%__1cLConvL2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKo0RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIregDOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cVshrL_reg_imm6_L2INodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescbGupdate_compiled_code_entry_point6Mi_v_; -text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; -text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cPBytecode_invokeFindex6kM_i_; -text: .text%__1cLRethrowNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKJNIHandlesOdestroy_global6FpnI_jobject_i_v_; -text: .text%__1cSPSKeepAliveClosureGdo_oop6MppnHoopDesc__v_: psScavenge.o; -text: .text%__1cFParseFBlockRsuccessor_for_bci6Mi_p1_; -text: .text%__1cVPreserveExceptionMark2T6M_v_; -text: .text%__1cVPreserveExceptionMark2t6MrpnGThread__v_; -text: .text%__1cHRetNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHMatcherQpost_fast_unlock6FpknENode__i_; -text: .text%__1cIRootNodeFValue6kMpnOPhaseTransform__pknEType__: classes.o; -text: .text%__1cMoutputStreamFprint6MpkcE_v_; -text: .text%__1cOGenerateOopMapKcopy_state6MpnNCellTypeState_2_v_; -text: .text%__1cHAddNodeGis_Add6kM_pk0_: classes.o; -text: .text%__1cHCompileQsync_stack_slots6kM_i_; -text: .text%__1cJLoadCNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cHMulNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJLoadFNodeGOpcode6kM_i_; -text: .text%__1cNSignatureInfoHdo_long6M_v_: bytecode.o; -text: .text%__1cHPhiNodeDcmp6kMrknENode__I_; -text: .text%__1cKciTypeFlowLStateVectorMdo_putstatic6MpnQciByteCodeStream__v_; -text: .text%__1cHOrINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cKarrayKlassMoop_is_array6kM_i_: objArrayKlass.o; -text: .text%__1cKciTypeFlowLStateVectorGdo_ldc6MpnQciByteCodeStream__v_; -text: .text%__1cSTailCalljmpIndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_; -text: .text%__1cKstoreINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRloadConP_pollNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPClassFileStreamGget_u86MpnGThread__X_; -text: .text%__1cQxorI_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLMachNopNodeMideal_Opcode6kM_i_: ad_sparc.o; -text: .text%__1cIciObjectOis_null_object6kM_i_: ciInstance.o; -text: .text%__1cLMachNopNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMFastLockNodeFValue6kMpnOPhaseTransform__pknEType__: classes.o; -text: .text%__1cPCountedLoopNodeDphi6kM_pnENode__: loopopts.o; -text: .text%__1cOPhaseIdealLoopNreorg_offsets6MpnNIdealLoopTree__v_; -text: .text%__1cSmembar_releaseNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cMVM_OperationPevaluation_mode6kM_n0AEMode__: vm_operations.o; -text: .text%__1cRshrL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: parse3.o; -text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; -text: .text%__1cQLRUMaxHeapPolicyWshould_clear_reference6MpnHoopDesc__i_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJtimestamp6FpnHoopDesc__x_; -text: .text%__1cPcompP_iRegPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSxorI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOPhaseIdealLoopRsplit_thru_region6MpnENode_2_2_; -text: .text%__1cKNode_Array2t6MpnFArena__v_: output.o; -text: .text%__1cIAndLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cbAPSEvacuateFollowersClosureHdo_void6M_v_: psScavenge.o; -text: .text%jni_ExceptionCheck: jni.o; -text: .text%__1cIAndLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; -text: .text%__1cOPhaseIdealLoopMdominated_by6MpnENode_2_v_; -text: .text%__1cQshlI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseNthrow_to_exit6MpnNSafePointNode__v_; -text: .text%__1cWCallLeafNoFPDirectNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvL2I_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSandI_reg_imm13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLCounterDataOis_CounterData6M_i_: methodDataOop.o; -text: .text%__1cJloadPNodeFclone6kM_pnENode__; -text: .text%__1cQinstanceRefKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cYDebugInformationRecorderNappend_handle6MpnI_jobject__i_; -text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cJVectorSetGslamin6Mrk0_v_; -text: .text%JVM_Clone; -text: .text%__1cRAbstractAssemblerFflush6M_v_; -text: .text%__1cYinlineCallClearArrayNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cPciInstanceKlassTis_java_lang_Object6M_i_; -text: .text%__1cITypeLongFxdual6kM_pknEType__; -text: .text%__1cSmembar_releaseNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubL_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cIJumpDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cRshrL_reg_imm6NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKCompiledIC2t6MpnKNativeCall__v_; -text: .text%__1cOstackSlotLOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cURethrowExceptionNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshrL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXmembar_release_lockNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cLOpaque2NodeEhash6kM_I_; -text: .text%__1cJloadFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cUcompU_iReg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYSurvivorMutableSpacePoolImax_size6kM_I_: memoryPool.o; -text: .text%__1cNSharedRuntimeOresolve_helper6FpnKJavaThread_iipnGThread__nMmethodHandle__; -text: .text%__1cUEdenMutableSpacePoolImax_size6kM_I_: memoryPool.o; -text: .text%__1cUEdenMutableSpacePoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cUEdenMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cNSharedRuntimeSresolve_sub_helper6FpnKJavaThread_iipnGThread__nMmethodHandle__; -text: .text%__1cYSurvivorMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cYSurvivorMutableSpacePoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cLOptoRuntimeJstub_name6FpC_pkc_; -text: .text%__1cLstoreP0NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cHOrINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cICmpLNodeDsub6kMpknEType_3_3_; -text: .text%__1cHPhiNodeKmake_blank6FpnENode_2_p0_; -text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_: jni.o; -text: .text%__1cHMatcherNfind_receiver6Fi_nFVMRegEName__; -text: .text%__1cIMulINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cQandI_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMachEpilogNodeNis_MachEpilog6M_p0_: ad_sparc.o; -text: .text%__1cOMachEpilogNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIimmPOperFclone6kM_pnIMachOper__; -text: .text%__1cMloadConPNodeFclone6kM_pnENode__; -text: .text%__1cNSCMemProjNodeGis_CFG6kM_i_: classes.o; -text: .text%__1cFStateM_sub_Op_SubI6MpknENode__v_; -text: .text%__1cFframeRretrieve_receiver6MpnLRegisterMap__pnHoopDesc__; -text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__; -text: .text%__1cNloadKlassNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRMachSafePointNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cMTailCallNodeKmatch_edge6kMI_I_; -text: .text%jni_NewObject: jni.o; -text: .text%__1cOMacroAssemblerDset6MipnMRegisterImpl_rknQRelocationHolder__v_: assembler_sparc.o; -text: .text%__1cIPhaseIFGYCompute_Effective_Degree6M_v_; -text: .text%__1cHMemNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cXmembar_release_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cNobjArrayKlassOmulti_allocate6MipiipnGThread__pnHoopDesc__; -text: .text%__1cJNode_ListEyank6MpnENode__v_; -text: .text%__1cMPhaseChaitinISimplify6M_v_; -text: .text%__1cNIdealLoopTreeIset_nest6MI_i_; -text: .text%__1cQcmovI_reg_gtNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cSCallLeafDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIMulLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cMStartOSRNodeGOpcode6kM_i_; -text: .text%__1cSCallLeafDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cLcmpD_ccNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJLoadSNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cJcmpOpOperEless6kM_i_: ad_sparc_clone.o; -text: .text%__1cKciTypeFlowPflow_exceptions6MpnNGrowableArray4Cpn0AFBlock___pnNGrowableArray4CpnPciInstanceKlass___pn0ALStateVector__v_; -text: .text%__1cENodeMis_CatchProj6kM_pknNCatchProjNode__: ad_sparc_misc.o; -text: .text%__1cKType_ArrayEgrow6MI_v_; -text: .text%__1cSaddL_reg_imm13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadConP0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKCompiledICWis_in_transition_state6kM_i_; -text: .text%__1cXmembar_release_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPconvF2D_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJLoadCNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJScopeDescGis_top6kM_i_; -text: .text%__1cRshrL_reg_imm6NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKciTypeFlowLStateVectorOmeet_exception6MpnPciInstanceKlass_pk1_i_; -text: .text%__1cMURShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cNloadConL0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cVshrL_reg_imm6_L2INodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSMemBarVolatileNodeGOpcode6kM_i_; -text: .text%__1cLstoreB0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRshrI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGThreadMis_VM_thread6kM_i_: thread.o; -text: .text%__1cICodeBlobKis_nmethod6kM_i_: onStackReplacement.o; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cRcmpFastUnlockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNSafePointNodeLpop_monitor6M_v_; -text: .text%__1cMPhaseChaitinVfind_base_for_derived6MppnENode_2rI_2_; -text: .text%__1cLOptoRuntimebAcomplete_monitor_exit_Type6F_pknITypeFunc__; -text: .text%__1cOstackSlotIOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cIGraphKitNshared_unlock6MpnENode_2_v_; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: connode.o; -text: .text%__1cFStateT_sub_Op_CheckCastPP6MpknENode__v_; -text: .text%__1cTCallDynamicJavaNodeEhash6kM_I_: callnode.o; -text: .text%__1cQsubI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFKlassDLCA6Mp0_1_; -text: .text%__1cKTypeRawPtrEmake6FnHTypePtrDPTR__pk0_; -text: .text%__1cHciKlassVleast_common_ancestor6Mp0_1_; -text: .text%__1cNSignatureInfoHdo_bool6M_v_: frame.o; -text: .text%__1cOPhaseIdealLoopPbuild_loop_tree6M_v_; -text: .text%__1cRcompL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeGis_Con6kM_I_: memnode.o; -text: .text%__1cRshlL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOPhaseIdealLoop2t6MrnMPhaseIterGVN_pk0i_v_; -text: .text%__1cIciObjectIis_klass6M_i_: ciInstance.o; -text: .text%__1cRloadConP_pollNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQshlL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMindirectOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindirectOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindirectOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cNSafePointNodeMpush_monitor6MpknMFastLockNode__v_; -text: .text%__1cSCallLeafDirectNodeRis_safepoint_node6kM_i_: ad_sparc_misc.o; -text: .text%__1cSCallLeafDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCallLeafDirectNodeKmethod_set6Mi_v_; -text: .text%__1cIDivINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJLoadBNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSstring_compareNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cFBytesNget_native_u46FpC_I_: bytecodes.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: typeArrayKlass.o; -text: .text%__1cRcompL_reg_conNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverUresolve_special_call6FrnICallInfo_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cJloadBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__: cfgnode.o; -text: .text%__1cRcompL_reg_conNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPCountedLoopNodeNstride_is_con6kM_i_: cfgnode.o; -text: .text%__1cPcheckCastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cENodeMis_SafePoint6M_pnNSafePointNode__: connode.o; -text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; -text: .text%__1cJCMoveNodeLis_cmove_id6FpnOPhaseTransform_pnENode_44pnIBoolNode__4_; -text: .text%__1cHAddressQrspec_from_rtype6MnJrelocInfoJrelocType_pC_nQRelocationHolder__: interp_masm_sparc.o; -text: .text%__1cKTypeAryPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cGOopMapPset_derived_oop6MnHOptoRegEName_ii2_v_; -text: .text%__1cLConvL2INodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cOPhaseIdealLoopKDominators6M_v_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_late6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; -text: .text%__1cOPhaseIdealLoopQbuild_loop_early6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; -text: .text%__1cKCompiledICIis_clean6kM_i_; -text: .text%jni_NewGlobalRef: jni.o; -text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; -text: .text%__1cIAndINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cGOopMapQset_callee_saved6MnHOptoRegEName_ii2_v_; -text: .text%__1cYcompareAndSwapL_boolNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRbranchLoopEndNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: loopnode.o; -text: .text%__1cKCompiledICZcompute_monomorphic_entry6FnMmethodHandle_nLKlassHandle_iirnOCompiledICInfo_pnGThread__v_; -text: .text%__1cKtype2basic6FpknEType__nJBasicType__; -text: .text%__1cMPhaseChaitinFSplit6MI_I_; -text: .text%__1cMPhaseChaitinHcompact6M_v_; -text: .text%__1cZPhaseConservativeCoalesce2t6MrnMPhaseChaitin__v_; -text: .text%__1cNIdealLoopTreeMis_loop_exit6kMpnENode_pnOPhaseIdealLoop__2_; -text: .text%__1cMPhaseChaitinZcompress_uf_map_for_nodes6M_v_; -text: .text%__1cZPhaseConservativeCoalesceGverify6M_v_; -text: .text%__1cRcmpFastUnlockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQshlI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerWcompiler_unlock_object6MpnMRegisterImpl_222rnFLabel__v_; -text: .text%__1cXmembar_release_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerCbr6MnJAssemblerJCondition_in0BHPredict_pCnJrelocInfoJrelocType__v_: interpreter_sparc.o; -text: .text%__1cKPSYoungGenNused_in_bytes6kM_I_; -text: .text%__1cOMachEpilogNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_; -text: .text%__1cLklassItablebFinitialize_itable_for_interface6MpnMklassOopDesc_pnRitableMethodEntry__v_; -text: .text%__1cJloadFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIRootNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cIRootNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cHMatcherPprior_fast_lock6FpknENode__i_; -text: .text%__1cJLoadLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSReferenceProcessorbAenqueue_discovered_reflist6MpnHoopDesc_p2_v_; -text: .text%__1cSReferenceProcessorbAprocess_discovered_reflist6MppnHoopDesc_pnPReferencePolicy_i_v_; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle__v_; -text: .text%__1cKJavaThreadNreguard_stack6MpC_i_; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_; -text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_; -text: .text%__1cIUniverseWis_out_of_memory_error6FnGHandle__i_; -text: .text%JVM_FillInStackTrace; -text: .text%__1cKJavaThreadGactive6F_p0_; -text: .text%__1cKstoreFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cHnmethodOis_java_method6kM_i_: nmethod.o; -text: .text%__1cMtlsLoadPNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_; -text: .text%__1cENodeUdepends_only_on_test6kM_i_: connode.o; -text: .text%__1cMVirtualSpaceNreserved_size6kM_I_; -text: .text%__1cICodeHeapMmax_capacity6kM_I_; -text: .text%__1cSbranchCon_longNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsubI_zero_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cHTypePtrFxmeet6kMpknEType__3_; -text: .text%__1cbBInterpreterCodeletInterfaceRcode_size_to_size6kMi_i_: interpreter.o; -text: .text%__1cbBInterpreterCodeletInterfaceKinitialize6MpnEStub_i_v_: interpreter.o; -text: .text%__1cNflagsRegFOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cIMinINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFParseWensure_phis_everywhere6M_v_; -text: .text%__1cVshrL_reg_imm6_L2INodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadFNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cTDebugInfoReadStream2t6MpknHnmethod_i_v_; -text: .text%__1cOMacroAssemblerDset6MipnMRegisterImpl_rknQRelocationHolder__v_: ad_sparc.o; -text: .text%__1cLRethrowNodeEhash6kM_I_: classes.o; -text: .text%__1cIDivLNodeGOpcode6kM_i_; -text: .text%__1cPlocal_vsnprintf6FpcIpkcpv_i_; -text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; -text: .text%__1cNmethodOopDescVclear_native_function6M_v_; -text: .text%__1cOloadConL13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQstkI_to_regFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerKverify_oop6MpnMRegisterImpl_pkc_v_; -text: .text%__1cNloadConL0NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%jio_snprintf; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__: node.o; -text: .text%__1cMloadConINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cSmulI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLOptoRuntimebAresolve_opt_virtual_call_C6FpnKJavaThread__pC_; -text: .text%jni_NewLocalRef: jni.o; -text: .text%__1cRsubI_zero_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulDNodeGOpcode6kM_i_; -text: .text%__1cLStrCompNodeGOpcode6kM_i_; -text: .text%__1cJCodeCacheXmark_for_deoptimization6FpnMklassOopDesc__i_; -text: .text%__1cQcmovI_reg_gtNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cURethrowExceptionNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: callnode.o; -text: .text%__1cKstoreBNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cPClassFileParserbNparse_classfile_inner_classes_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__H_; -text: .text%__1cKStoreFNodeGOpcode6kM_i_; -text: .text%__1cLConvD2INodeGOpcode6kM_i_; -text: .text%__1cURethrowExceptionNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLPhaseValues2T5B6M_v_; -text: .text%__1cIAddLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cKReturnNode2t6MpnENode_2222_v_; -text: .text%__1cMURShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKReturnNodeJideal_reg6kM_I_: classes.o; -text: .text%jni_DeleteGlobalRef: jni.o; -text: .text%__1cVPatchingRelocIteratorIpostpass6M_v_; -text: .text%__1cVPatchingRelocIteratorHprepass6M_v_; -text: .text%__1cKCodeBufferPcopy_relocation6MpnICodeBlob__v_; -text: .text%__1cKCodeBufferJcopy_code6MpnICodeBlob__v_; -text: .text%__1cZnoG3_iRegI_64bit_safeOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNRelocIteratorMcreate_index6FpnKCodeBuffer_pnJrelocInfo_4_4_; -text: .text%__1cRAbstractAssemblerOcode_fill_byte6F_i_; -text: .text%__1cQcmovI_reg_gtNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cICodeBlobWfix_relocation_at_move6Mi_v_; -text: .text%__1cICodeBlob2t6MpkcpnKCodeBuffer_iiipnJOopMapSet_i_v_; -text: .text%__1cIAndLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIAndLNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cJOopMapSet2t6M_v_; -text: .text%__1cNSCMemProjNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%JVM_GetCPMethodModifiers; -text: .text%jni_GetObjectArrayElement: jni.o; -text: .text%__1cOCompilerOraclePshould_break_at6FnMmethodHandle__i_; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: memnode.o; -text: .text%__1cFParseKarray_load6MnJBasicType__v_; -text: .text%jni_SetLongField: jni.o; -text: .text%__1cHGCCauseJto_string6Fn0AFCause__pkc_; -text: .text%__1cJOopMapSetHcopy_to6MpC_v_; -text: .text%__1cQjava_lang_ThreadRset_thread_status6FpnHoopDesc_n0AMThreadStatus__v_; -text: .text%__1cJOopMapSetJheap_size6kM_i_; -text: .text%__1cENodeHis_Bool6M_pnIBoolNode__: classes.o; -text: .text%__1cNSafePointNodeKgrow_stack6MpnIJVMState_I_v_; -text: .text%__1cIJVMState2t6Mi_v_; -text: .text%__1cIAndLNodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cOMacroAssemblerCbr6MnJAssemblerJCondition_in0BHPredict_pCnJrelocInfoJrelocType__v_: interp_masm_sparc.o; -text: .text%__1cIAndLNodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cIAndLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNSignatureInfoJdo_double6M_v_: frame.o; -text: .text%__1cJLoadSNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIciObjectRis_instance_klass6M_i_: ciObjArrayKlass.o; -text: .text%__1cNRelocIterator2t6MpnKCodeBuffer_pC3_v_; -text: .text%__1cMMachProjNodeHsize_of6kM_I_: classes.o; -text: .text%__1cTDebugInfoReadStreamLread_handle6M_nGHandle__; -text: .text%__1cOPhaseIdealLoopUsplit_if_with_blocks6MrnJVectorSet_rnKNode_Stack__v_; -text: .text%__1cMtlsLoadPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassPadd_implementor6MpnMklassOopDesc__v_; -text: .text%__1cLOopRecorderIoop_size6M_i_; -text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; -text: .text%__1cHnmethodPscopes_pcs_size6kM_i_: nmethod.o; -text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_; -text: .text%__1cHnmethodQscopes_data_size6kM_i_: nmethod.o; -text: .text%__1cHnmethodJstub_size6kM_i_: nmethod.o; -text: .text%__1cOPhaseIdealLoopOset_early_ctrl6MpnENode__v_; -text: .text%__1cHnmethodKtotal_size6kM_i_; -text: .text%__1cHnmethodOexception_size6kM_i_: nmethod.o; -text: .text%__1cbFunnecessary_membar_volatileNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMloadConLNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cJiRegLOperFclone6kM_pnIMachOper__; -text: .text%__1cFParseNadd_safepoint6M_v_; -text: .text%__1cOPhaseTransform2t6Mp0nFPhaseLPhaseNumber__v_; -text: .text%__1cKNode_Array2t6MpnFArena__v_: phaseX.o; -text: .text%__1cLPhaseValues2t6Mp0_v_; -text: .text%__1cQcmovI_reg_ltNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cXPhaseAggressiveCoalesceGverify6M_v_: coalesce.o; -text: .text%__1cHCompilebBregister_library_intrinsics6M_v_; -text: .text%__1cXPhaseAggressiveCoalesceNinsert_copies6MrnHMatcher__v_; -text: .text%__1cNPhaseRegAlloc2t6MIrnIPhaseCFG_rnHMatcher_pF_v_v_; -text: .text%__1cIPhaseCFGJbuild_cfg6M_I_; -text: .text%__1cHCompileEInit6Mi_v_; -text: .text%__1cVExceptionHandlerTable2t6Mi_v_; -text: .text%__1cHMatcherLreturn_addr6kM_nHOptoRegEName__; -text: .text%__1cMPhaseChaitin2t6MIrnIPhaseCFG_rnHMatcher__v_; -text: .text%__1cMPhaseChaitinRRegister_Allocate6M_v_; -text: .text%__1cHCompileTset_cached_top_node6MpnENode__v_; -text: .text%__1cIPhaseCFGQFind_Inner_Loops6M_v_; -text: .text%__1cHMatcherZnumber_of_saved_registers6F_i_; -text: .text%__1cNPhaseRegAllocTpd_preallocate_hook6M_v_; -text: .text%__1cLBlock_Array2t6MpnFArena__v_: block.o; -text: .text%__1cMPhaseChaitinMreset_uf_map6MI_v_; -text: .text%__1cMPhaseChaitinRbuild_ifg_virtual6M_v_; -text: .text%__1cIPhaseCFGQGlobalCodeMotion6MrnHMatcher_IrnJNode_List__v_; -text: .text%__1cHMatcherTFixup_Save_On_Entry6M_v_; -text: .text%__1cHMatcherPinit_spill_mask6MpnENode__v_; -text: .text%__1cHCompileICode_Gen6M_v_; -text: .text%__1cKNode_Array2t6MpnFArena__v_: matcher.o; -text: .text%__1cFArena2t6MI_v_; -text: .text%__1cUDebugInfoWriteStream2t6MpnYDebugInformationRecorder_i_v_; -text: .text%__1cHMatcherVinit_first_stack_mask6M_v_; -text: .text%__1cFArenaNmove_contents6Mp0_1_; -text: .text%__1cKCodeBufferGresize6Miiii_v_; -text: .text%__1cFArenaRdestruct_contents6M_v_; -text: .text%__1cIPhaseIFG2t6MpnFArena__v_; -text: .text%__1cFDictIFreset6MpknEDict__v_; -text: .text%__1cHMatcherFmatch6M_v_; -text: .text%__1cHMatcher2t6MrnJNode_List__v_; -text: .text%__1cIPhaseCFGVschedule_pinned_nodes6MrnJVectorSet__v_; -text: .text%__1cIPhaseCFGOschedule_early6MrnJVectorSet_rnJNode_List_rnLBlock_Array__i_; -text: .text%__1cETypeKInitialize6FpnHCompile__v_; -text: .text%__1cIPhaseCFGNschedule_late6MrnJVectorSet_rnJNode_List_rnNGrowableArray4CI___v_; -text: .text%__1cIPhaseCFGYEstimate_Block_Frequency6M_v_; -text: .text%__1cYDebugInformationRecorder2t6MpnLOopRecorder__v_; -text: .text%__1cOCompileWrapper2t6MpnHCompile__v_; -text: .text%__1cIPhaseCFGKDominators6M_v_; -text: .text%__1cIPhaseCFG2t6MpnFArena_pnIRootNode_rnHMatcher__v_; -text: .text%__1cMPhaseChaitinbGstretch_base_pointer_live_ranges6MpnMResourceArea__i_; -text: .text%__1cJPhaseLive2t6MrknIPhaseCFG_rnILRG_List_pnFArena__v_; -text: .text%__1cJPhaseLive2T6M_v_; -text: .text%__1cWemit_exception_handler6FrnKCodeBuffer__v_; -text: .text%__1cHCompileYinit_scratch_buffer_blob6M_v_; -text: .text%__1cKCodeBufferOrelocate_stubs6M_v_; -text: .text%__1cOMachPrologNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMPhaseChaitin2T6M_v_; -text: .text%__1cHMatcherWis_short_branch_offset6Mi_i_; -text: .text%__1cHCompileTFillExceptionTables6MIpI1pnFLabel__v_; -text: .text%__1cMPhaseChaitinbApost_allocate_copy_removal6M_v_; -text: .text%__1cIPhaseCFGLRemoveEmpty6M_v_; -text: .text%__1cHCompileGOutput6M_v_; -text: .text%__1cWImplicitExceptionTableIset_size6MI_v_; -text: .text%__1cHCompileMBuildOopMaps6M_v_; -text: .text%__1cHCompilePneed_stack_bang6kMi_i_; -text: .text%__1cLdo_liveness6FpnNPhaseRegAlloc_pnIPhaseCFG_pnKBlock_List_ipnFArena_pnEDict__v_: buildOopMap.o; -text: .text%__1cGBundlePinitialize_nops6FppnIMachNode__v_; -text: .text%__1cMPhaseChaitinMfixup_spills6M_v_; -text: .text%__1cNPhaseRegAllocPalloc_node_regs6Mi_v_; -text: .text%__1cLBlock_Array2t6MpnFArena__v_: buildOopMap.o; -text: .text%__1cHCompileLFill_buffer6M_v_; -text: .text%__1cVCallRuntimeDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cZCallInterpreterDirectNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNSignatureInfoJdo_double6M_v_: bytecode.o; -text: .text%__1cWpoll_return_RelocationEtype6M_nJrelocInfoJrelocType__: codeBlob.o; -text: .text%__1cENodeHrm_prec6MI_v_; -text: .text%__1cLcmpD_ccNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cGciTypeMis_classless6kM_i_: ciInstanceKlass.o; -text: .text%__1cIMulLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cHRetNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIGraphKitOset_pair_local6MipnENode__v_: parse2.o; -text: .text%__1cRPrivilegedElementKinitialize6MpnMvframeStream_pnHoopDesc_p0pnGThread__v_; -text: .text%JVM_DoPrivileged; -text: .text%__1cOcompiledVFrameGis_top6kM_i_; -text: .text%__1cRsubI_zero_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHRetNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICodeBlobPallocation_size6FpnKCodeBuffer_ii_I_; -text: .text%__1cQaddL_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cICodeBlobRis_at_poll_return6MpC_i_; -text: .text%__1cHciKlassMis_interface6M_i_: ciObjArrayKlass.o; -text: .text%__1cIConDNodeGOpcode6kM_i_; -text: .text%__1cObranchConFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cTresource_free_bytes6FpcI_v_; -text: .text%__1cNmethodOopDescbDbuild_interpreter_method_data6FnMmethodHandle_pnGThread__v_; -text: .text%__1cIAddLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cRcompL_reg_conNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_; -text: .text%__1cPconvL2I_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFciEnvKcompile_id6M_I_; -text: .text%__1cPpoll_RelocationEtype6M_nJrelocInfoJrelocType__: codeBlob.o; -text: .text%__1cRmethodDataOopDescKinitialize6MpnNmethodOopDesc__v_; -text: .text%__1cRmethodDataOopDescbGcompute_allocation_size_in_bytes6FpnNmethodOopDesc__i_; -text: .text%__1cRmethodDataOopDescbGcompute_allocation_size_in_words6FpnNmethodOopDesc__i_; -text: .text%__1cIDivINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cILoopNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cPmethodDataKlassIallocate6MnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cKoopFactoryOnew_methodData6FnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cNprefetch2NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cILoopNodeHsize_of6kM_I_: loopnode.o; -text: .text%__1cIAndLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKCodeBuffer2t6MpCi_v_; -text: .text%__1cVshrL_reg_imm6_L2INodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_: nativeInst_sparc.o; -text: .text%__1cIConPNodeEmake6FpC_p0_; -text: .text%__1cIGraphKitNstore_barrier6MpnENode_22_v_; -text: .text%__1cOcmovII_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvL2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: callnode.o; -text: .text%__1cIciMethodRinstructions_size6M_i_; -text: .text%__1cSmulI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovII_immNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeMis_SpillCopy6M_pnRMachSpillCopyNode__: memnode.o; -text: .text%__1cCosXthread_local_storage_at6Fi_pv_; -text: .text%__1cMindIndexOperNconstant_disp6kM_i_: ad_sparc.o; -text: .text%__1cMindIndexOperOindex_position6kM_i_: ad_sparc.o; -text: .text%__1cMindIndexOperFscale6kM_i_: ad_sparc.o; -text: .text%__1cOMacroAssemblerWbang_stack_with_offset6Mi_v_: assembler_sparc.o; -text: .text%__1cRAbstractAssemblerbDgenerate_stack_overflow_check6Mi_v_; -text: .text%__1cMindIndexOperNbase_position6kM_i_: ad_sparc.o; -text: .text%__1cNloadKlassNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateR_sub_Op_LoadKlass6MpknENode__v_; -text: .text%__1cGTarjanICOMPRESS6M_v_; -text: .text%__1cKstoreCNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKloadUBNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cHciKlassGloader6M_pnHoopDesc__: ciTypeArrayKlass.o; -text: .text%__1cICmpDNodeGOpcode6kM_i_; -text: .text%__1cNloadConL0NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulLNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cOPhaseIdealLoopOplace_near_use6kMpnENode__2_; -text: .text%__1cVCallRuntimeDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOloadConL13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cYcompareAndSwapL_boolNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cZCallInterpreterDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreB0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSInterpreterRuntimeOprofile_method6FpnKJavaThread_pC_i_; -text: .text%__1cHMonitorGnotify6M_i_; -text: .text%__1cNIdealLoopTreePiteration_split6MpnOPhaseIdealLoop_rnJNode_List__v_; -text: .text%__1cOloadConL13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cMURShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJloadPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNRelocIteratorEnext6M_i_: compiledIC.o; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cLRShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLOptoRuntimeRmultianewarray1_C6FpnMklassOopDesc_ipnKJavaThread__v_; -text: .text%__1cIMachNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLOpaque2NodeLbottom_type6kM_pknEType__: connode.o; -text: .text%__1cGThreadOis_interrupted6Fp0i_i_; -text: .text%__1cSconvI2D_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENodeGis_Mem6M_pnHMemNode__: subnode.o; -text: .text%__1cUPSGenerationCountersKupdate_all6M_v_: psGenerationCounters.o; -text: .text%__1cQComputeCallStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cKTypeOopPtrSmake_from_constant6FpnIciObject__pk0_; -text: .text%__1cQregP_to_stkPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cJTimeStampSticks_since_update6kM_x_; -text: .text%__1cJArrayDataKcell_count6M_i_: methodDataOop.o; -text: .text%__1cQmodI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: objArrayKlass.o; -text: .text%__1cNmethodOopDescThas_native_function6kM_i_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: constantPoolKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: constantPoolKlass.o; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: loopnode.o; -text: .text%__1cIMulINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cURethrowExceptionNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNmethodOopDescWis_vanilla_constructor6kM_i_; -text: .text%__1cIAddLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQcmovI_reg_ltNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLstoreB0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRshrL_reg_imm6NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIModINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKstoreFNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadFNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cJcmpOpOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%__1cQstkI_to_regFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJimmL0OperJconstantL6kM_x_: ad_sparc_clone.o; -text: .text%__1cFParseJdo_ifnull6MnIBoolTestEmask__v_; -text: .text%__1cQmulD_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJimmI0OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cFStateM_sub_Op_ConL6MpknENode__v_; -text: .text%__1cOloadConL13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNObjectMonitorHis_busy6kM_i_; -text: .text%JVM_GetClassNameUTF; -text: .text%__1cKloadUBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIXorINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cFStateM_sub_Op_AndI6MpknENode__v_; -text: .text%__1cVshrL_reg_imm6_L2INodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeMis_SafePoint6M_pnNSafePointNode__: multnode.o; -text: .text%__1cKcmpOpFOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLRuntimeStubHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cLRuntimeStubbIfollow_roots_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_iri_v_: codeBlob.o; -text: .text%__1cNflagsRegFOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cTmembar_volatileNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRshlL_reg_imm6NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJMultiNodeUdepends_only_on_test6kM_i_: callnode.o; -text: .text%__1cJloadFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeIis_CMove6M_pnJCMoveNode__: memnode.o; -text: .text%__1cENodeHis_Bool6M_pnIBoolNode__: memnode.o; -text: .text%__1cFStateL_sub_Op_OrI6MpknENode__v_; -text: .text%__1cJCmpL3NodeGOpcode6kM_i_; -text: .text%__1cIciObjectOis_method_data6M_i_: ciInstance.o; -text: .text%__1cIciObjectJis_method6M_i_: ciInstance.o; -text: .text%JVM_FindLoadedClass; -text: .text%__1cLCastP2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIMulLNodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIMulLNodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cRbranchLoopEndNodeJis_Branch6kM_I_: ad_sparc_misc.o; -text: .text%__1cVAdaptivePaddedAverageGsample6Mf_v_; -text: .text%__1cMMutableSpaceFclear6M_v_; -text: .text%__1cIConFNodeGOpcode6kM_i_; -text: .text%__1cOClearArrayNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cIGraphKitNallocate_heap6MpnENode_222pknITypeFunc_pC22ipknKTypeOopPtr__2_; -text: .text%__1cPciInstanceKlassbBcompute_shared_has_subklass6M_i_; -text: .text%__1cSmembar_acquireNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cMPrefetchNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQmulD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNprefetch2NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIModLNodeGOpcode6kM_i_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_; -text: .text%__1cKReflectionGinvoke6FnTinstanceKlassHandle_nMmethodHandle_nGHandle_inOobjArrayHandle_nJBasicType_4ipnGThread__pnHoopDesc__; -text: .text%__1cSbranchCon_longNodeJis_Branch6kM_I_: ad_sparc_misc.o; -text: .text%__1cQLibraryIntrinsicIgenerate6MpnIJVMState__2_; -text: .text%__1cOLibraryCallKitNtry_to_inline6M_i_; -text: .text%__1cLRShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKTypeRawPtrFxdual6kM_pknEType__; -text: .text%__1cNloadConL0NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cTInlineCallGeneratorJis_inline6kM_i_: library_call.o; -text: .text%__1cFTypeFEmake6Ff_pk0_; -text: .text%__1cIimmFOperJconstantF6kM_f_: ad_sparc_clone.o; -text: .text%__1cEUTF8Ounicode_length6Fpkc_i_; -text: .text%__1cCosRcurrent_thread_id6F_i_; -text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_; -text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_; -text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fi_v_; -text: .text%__1cbACallCompiledJavaDirectNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmembar_acquireNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cPorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIPhaseCFGOinsert_goto_at6MII_v_; -text: .text%__1cENodeHis_Copy6kM_I_: node.o; -text: .text%__1cZCallInterpreterDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPCountedLoopNodeNstride_is_con6kM_i_: loopTransform.o; -text: .text%__1cITypeLongFwiden6kMpknEType__3_; -text: .text%__1cENodeFis_If6M_pnGIfNode__: loopnode.o; -text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; -text: .text%__1cSxorI_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPCallRuntimeNodeGOpcode6kM_i_; -text: .text%__1cJcmpOpOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cLcmpD_ccNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cMindIndexOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindIndexOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindIndexOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%JVM_FindClassFromClass; -text: .text%__1cRshrP_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cObranchConFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKklassKlassMoop_is_klass6kM_i_: objArrayKlassKlass.o; -text: .text%__1cLRethrowNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cMMutableSpaceKinitialize6MnJMemRegion_i_v_; -text: .text%__1cKstoreLNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQshrI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: loopnode.o; -text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_; -text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; -text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_; -text: .text%JVM_NewInstanceFromConstructor; -text: .text%__1cNSignatureInfoIdo_float6M_v_: frame.o; -text: .text%__1cObox_handleNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLBoxLockNodeEhash6kM_I_: classes.o; -text: .text%__1cFParseFBlockMadd_new_path6M_i_; -text: .text%__1cJBytecodesRspecial_length_at6FpC_i_; -text: .text%__1cIimmPOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cMloadConPNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: loopnode.o; -text: .text%__1cQsubL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvF2DNodeGOpcode6kM_i_; -text: .text%__1cOstackSlotIOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cLConvI2DNodeGOpcode6kM_i_; -text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; -text: .text%__1cMloadConFNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cKcmpOpPOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cOMacroAssemblerCbr6MnJAssemblerJCondition_in0BHPredict_rnFLabel__v_: interp_masm_sparc.o; -text: .text%__1cLRShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKimmL13OperJconstantL6kM_x_: ad_sparc_clone.o; -text: .text%__1cSTailCalljmpIndNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: objArrayKlassKlass.o; -text: .text%__1cGIfNodeMdominated_by6MpnENode_pnMPhaseIterGVN__v_; -text: .text%__1cNobjArrayKlassQarray_klass_impl6MipnGThread__pnMklassOopDesc__; -text: .text%__1cMURShiftLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cRsubI_zero_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcompiledVFrame2t6MpknFframe_pknLRegisterMap_pnKJavaThread_pnJScopeDesc__v_; -text: .text%__1cJScopeDesc2t6MpknHnmethod_i_v_; -text: .text%__1cQshlI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHnmethodNscope_desc_at6MpCi_pnJScopeDesc__; -text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; -text: .text%__1cbFunnecessary_membar_volatileNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHnmethodUnumber_of_dependents6kM_i_: nmethod.o; -text: .text%__1cSmulI_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeHis_AddP6M_pnIAddPNode__: multnode.o; -text: .text%__1cIGraphKitOnull_check_oop6MpnKRegionNode_pnENode_i_4_; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_: compiledIC.o; -text: .text%__1cULinearLeastSquareFitGupdate6Mdd_v_; -text: .text%__1cOoop_RelocationIoop_addr6M_ppnHoopDesc__; -text: .text%__1cKstoreCNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreCNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNinstanceKlassVis_same_class_package6MpnHoopDesc_pnNsymbolOopDesc__i_; -text: .text%__1cMjniIdMapBaseHoops_do6MpnKOopClosure__v_; -text: .text%__1cJcmpOpOperKless_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cOcmovII_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cXmembar_acquire_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPfieldDescriptorUstring_initial_value6kMpnGThread__pnHoopDesc__; -text: .text%__1cOMacroAssemblerEsetx6MxpnMRegisterImpl_2nJrelocInfoJrelocType__v_; -text: .text%__1cMloadConLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMaxINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMloadConDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMindirectOperNconstant_disp6kM_i_: ad_sparc.o; -text: .text%__1cMindirectOperNbase_position6kM_i_: ad_sparc.o; -text: .text%__1cIAddLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMindirectOperFscale6kM_i_: ad_sparc.o; -text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cSsubL_reg_reg_2NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescTset_native_function6MpC_v_; -text: .text%jni_NewString: jni.o; -text: .text%__1cLConvL2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__; -text: .text%__1cQshlI_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cHMatcherQinline_cache_reg6F_nHOptoRegEName__; -text: .text%__1cOcompiledVFrameEcode6kM_pnHnmethod__; -text: .text%__1cIGraphKitMnext_monitor6M_i_; -text: .text%__1cOloadConI13NodeGis_Con6kM_I_: ad_sparc_misc.o; -text: .text%__1cLBoxLockNode2t6Mi_v_; -text: .text%__1cPconvF2D_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLOptoRuntimebBcomplete_monitor_enter_Type6F_pknITypeFunc__; -text: .text%__1cIGraphKitLshared_lock6MpnENode__pnMFastLockNode__; -text: .text%__1cPcmpFastLockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNloadConP0NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLOptoRuntimeKjbyte_copy6FpW1I_v_; -text: .text%__1cRorI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNSignatureInfoIdo_short6M_v_: frame.o; -text: .text%__1cKcmpOpUOperEless6kM_i_: ad_sparc_clone.o; -text: .text%__1cQaddF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; -text: .text%lwp_mutex_init: os_solaris.o; -text: .text%__1cObox_handleNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsubI_zero_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFframeLnmethods_do6M_v_; -text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; -text: .text%__1cQnotemp_iRegIOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; -text: .text%__1cODataRelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cYinternal_word_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cCosPhint_no_preempt6F_v_; -text: .text%__1cYinternal_word_RelocationJpack_data6M_i_; -text: .text%__1cOcmovII_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cUGenericGrowableArrayNraw_appendAll6Mpk0_v_; -text: .text%__1cIMulLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cYinternal_word_RelocationWfix_relocation_at_move6Mi_v_; -text: .text%__1cIMulINodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; -text: .text%__1cFciEnv2t6MpnHJNIEnv__iii_v_; -text: .text%__1cRsarL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFciEnvWget_method_from_handle6MpnI_jobject__pnIciMethod__; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: cfgnode.o; -text: .text%__1cSstring_compareNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQstkI_to_regFNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cFciEnv2T6M_v_; -text: .text%__1cIGraphKitNgen_checkcast6MpnENode_2p2_2_; -text: .text%__1cMMergeMemNodeIadr_type6kM_pknHTypePtr__: memnode.o; -text: .text%__1cbLtransform_int_divide_to_long_multiply6FpnIPhaseGVN_pnENode_i_3_: divnode.o; -text: .text%__1cJcmpOpOperJnot_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cQmulD_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cGvframeDtop6kM_p0_; -text: .text%__1cOCompiledRFrameEinit6M_v_; -text: .text%__1cXmembar_acquire_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadSNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cVCallRuntimeDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPcmpFastLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerUcompiler_lock_object6MpnMRegisterImpl_222rnFLabel__v_; -text: .text%__1cQciTypeArrayKlassEmake6FnJBasicType__p0_; -text: .text%__1cIXorINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIGraphKitRgen_subtype_check6MpnENode_2_2_; -text: .text%__1cQregF_to_stkINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNSingletonBlobIis_alive6kM_i_: codeBlob.o; -text: .text%__1cOMacroAssemblerLsave_thread6MkpnMRegisterImpl__v_; -text: .text%__1cOcmovII_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: constMethodKlass.o; -text: .text%__1cLcmpD_ccNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKNode_Array2t6MpnFArena__v_: loopopts.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: constMethodKlass.o; -text: .text%__1cMloadConINodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cScheck_phi_clipping6FpnHPhiNode_rpnHConNode_rI45rpnENode_5_i_: cfgnode.o; -text: .text%__1cOcmovII_immNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeMis_SpillCopy6M_pnRMachSpillCopyNode__: ad_sparc.o; -text: .text%__1cRshlL_reg_imm6NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParseGdo_new6M_v_; -text: .text%__1cZCallDynamicJavaDirectNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQshrI_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIimmIOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cQmodI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMloadConINodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvI2LNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOPhaseIdealLoopKclone_loop6MpnNIdealLoopTree_rnJNode_List_i_v_; -text: .text%jni_GetObjectClass: jni.o; -text: .text%__1cSxorI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOMacroAssemblerFalign6Mi_v_; -text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_; -text: .text%__1cbDReferenceProcessorInitializerIis_clean6kM_v_: concurrentMarkSweepGeneration.o; -text: .text%__1cKManagementJtimestamp6F_x_; -text: .text%__1cIPSOldGenPupdate_counters6M_v_; -text: .text%__1cQshrI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNIdealLoopTreeNpolicy_unroll6kMpnOPhaseIdealLoop__i_; -text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cNIdealLoopTreeSpolicy_range_check6kMpnOPhaseIdealLoop__i_; -text: .text%__1cFVTuneNregister_stub6FpkcpC3_v_; -text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__: loopTransform.o; -text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cTloadL_unalignedNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJloadLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOMacroAssemblerVreset_last_Java_frame6M_v_; -text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_2_v_; -text: .text%__1cSstring_compareNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNinstanceKlassPoop_is_instance6kM_i_: instanceRefKlass.o; -text: .text%__1cJloadFNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOstackSlotIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQregF_to_stkINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cINodeHash2t6MpnFArena_I_v_; -text: .text%__1cPconvI2L_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseTransform2t6MpnFArena_nFPhaseLPhaseNumber__v_; -text: .text%__1cLPhaseValues2t6MpnFArena_I_v_; -text: .text%__1cLCodeletMark2t6MrpnZInterpreterMacroAssembler_pkcinJBytecodesECode__v_: interpreter.o; -text: .text%__1cJStubQdDueueGcommit6Mi_v_; -text: .text%__1cJStubQdDueueHrequest6Mi_pnEStub__; -text: .text%__1cGEventsDlog6FpkcE_v_: nmethod.o; -text: .text%__1cKarrayKlassMoop_is_array6kM_i_: typeArrayKlass.o; -text: .text%__1cOcmovII_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOMacroAssemblerKsave_frame6Mi_v_; -text: .text%__1cVshrL_reg_imm6_L2INodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmulI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreC0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_and_dispatch6MpnITemplate_nITosState__v_; -text: .text%__1cOPhaseIdealLoopVclone_up_backedge_goo6MpnENode_22_2_; -text: .text%__1cITemplateKinitialize6MinITosState_1pFi_vi_v_; -text: .text%__1cITemplateIgenerate6MpnZInterpreterMacroAssembler__v_; -text: .text%__1cQregI_to_stkINodeHis_Copy6kM_I_: ad_sparc_misc.o; -text: .text%JVM_FindClassFromClassLoader; -text: .text%JVM_FindClassFromBootLoader; -text: .text%signalHandler; -text: .text%__1cTtypeArrayKlassKlassIoop_size6kMpnHoopDesc__i_: typeArrayKlassKlass.o; -text: .text%JVM_handle_solaris_signal; -text: .text%__1cRInlineCacheBufferIis_empty6F_i_; -text: .text%__1cUSafepointSynchronizeRis_cleanup_needed6F_i_; -text: .text%__1cQjava_lang_ThreadRget_thread_status6FpnHoopDesc__n0AMThreadStatus__; -text: .text%__1cNSignatureInfoIdo_float6M_v_: bytecode.o; -text: .text%__1cFStateM_sub_Op_AndL6MpknENode__v_; -text: .text%__1cKConv2BNodeGOpcode6kM_i_; -text: .text%__1cSstring_compareNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulI_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFframeRis_compiled_frame6kMpi_i_; -text: .text%__1cZInterpreterMacroAssemblerZcheck_and_handle_popframe6MpnMRegisterImpl__v_; -text: .text%JVM_IHashCode; -text: .text%__1cSconvI2D_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJStartNodeJideal_reg6kM_I_: callnode.o; -text: .text%__1cJStartNodeScalling_convention6kMpnLRegPair_I_v_; -text: .text%__1cOMacroAssemblerbBcheck_and_forward_exception6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerMcall_VM_base6MpnMRegisterImpl_22pCii_v_; -text: .text%__1cQshlI_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cQcmovI_reg_ltNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKDictionarybAis_valid_protection_domain6MiInMsymbolHandle_nGHandle_2_i_; -text: .text%__1cJloadCNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQandL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovPP_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cMVM_OperationSis_cheap_allocated6kM_i_: vm_operations.o; -text: .text%__1cNSignatureInfoHdo_char6M_v_: frame.o; -text: .text%__1cNCompileBrokerZcompilation_is_prohibited6FnMmethodHandle_i_i_; -text: .text%__1cLPhaseValuesKis_IterGVN6M_pnMPhaseIterGVN__: phaseX.o; -text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverbGruntime_resolve_interface_method6FrnICallInfo_nMmethodHandle_nLKlassHandle_nGHandle_4ipnGThread__v_; -text: .text%__1cKC2CompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_; -text: .text%JVM_GetClassLoader; -text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; -text: .text%__1cNCompileBrokerQset_last_compile6FpnOCompilerThread_nMmethodHandle_ii_v_; -text: .text%__1cbCAbstractInterpreterGeneratorQset_entry_points6MnJBytecodesECode__v_; -text: .text%__1cbCAbstractInterpreterGeneratorWset_short_entry_points6MpnITemplate_rpC44444444_v_; -text: .text%__1cJTraceTime2t6MpkciipnMoutputStream__v_; -text: .text%__1cIciMethodJhas_loops6kM_i_; -text: .text%__1cSconvD2I_helperNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cCosRelapsed_frequency6F_x_; -text: .text%__1cFStateP_sub_Op_ConvL2I6MpknENode__v_; -text: .text%__1cIciMethodQbreak_at_execute6M_i_; -text: .text%__1cOPhaseIdealLoopLdo_split_if6MpnENode__v_; -text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_; -text: .text%__1cKScheduling2t6MpnFArena_rnHCompile__v_; -text: .text%__1cKSchedulingMDoScheduling6M_v_; -text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTimer_pnLCompileTask__v_; -text: .text%__1cFciEnvPregister_method6MpnIciMethod_iiiiiipnKCodeBuffer_ipnJOopMapSet_pnVExceptionHandlerTable_pnWImplicitExceptionTable_pnTExceptionRangeTable_pnQAbstractCompiler_ii_v_; -text: .text%__1cFciEnvbOcheck_for_system_dictionary_modification6MpnIciMethod__v_; -text: .text%__1cNCompileBrokerYcheck_compilation_result6FnMmethodHandle_iippnHnmethod__i_; -text: .text%__1cZInterpreterMacroAssemblerMcall_VM_base6MpnMRegisterImpl_22pCii_v_; -text: .text%__1cSCardTableExtensionbAscavenge_contents_parallel6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager_I_v_; -text: .text%__1cRframe_gc_prologue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeMpd_gc_epilog6M_v_; -text: .text%__1cMelapsedTimerHseconds6kM_d_; -text: .text%__1cJStealTaskEname6M_pc_: psTasks.o; -text: .text%__1cRframe_gc_epilogue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cJStealTask2t6Mi_v_; -text: .text%__1cFframeLgc_epilogue6M_v_; -text: .text%__1cFframeLgc_prologue6M_v_; -text: .text%__1cTOldToYoungRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cJStealTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cTOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cNGCTaskManagerMnote_release6MI_v_; -text: .text%__1cMciMethodDataStrap_recompiled_at6MpnLProfileData__i_; -text: .text%__1cXjava_lang_ref_ReferenceWpending_list_lock_addr6F_ppnHoopDesc__; -text: .text%__1cNmethodOopDescIset_code6MpnHnmethod__v_; -text: .text%__1cQshrI_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmembar_acquireNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmembar_acquireNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICodeBlobJcopy_oops6MppnI_jobject_i_v_; -text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cVExceptionHandlerTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cHnmethodSresolve_JNIHandles6M_v_; -text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cFVTuneOcreate_nmethod6FpnHnmethod__v_; -text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; -text: .text%__1cHnmethod2t6MpnNmethodOopDesc_iiiiiiipnYDebugInformationRecorder_pnKCodeBuffer_ipnJOopMapSet_pnVExceptionHandlerTable_pnWImplicitExceptionTable_pnTExceptionRangeTable_pnQAbstractCompiler__v_; -text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; -text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cHnmethodLnew_nmethod6FnMmethodHandle_iiiiiipnYDebugInformationRecorder_pnKCodeBuffer_ipnJOopMapSet_pnVExceptionHandlerTable_pnWImplicitExceptionTable_pnTExceptionRangeTable_pnQAbstractCompiler__p0_; -text: .text%__1cLOopRecorderHcopy_to6MpnICodeBlob__v_; -text: .text%__1cIimmLOperFclone6kM_pnIMachOper__; -text: .text%__1cMloadConLNodeFclone6kM_pnENode__; -text: .text%__1cHCompileVfinal_graph_reshaping6M_i_; -text: .text%__1cIciMethodRbuild_method_data6M_v_; -text: .text%__1cHCompileIOptimize6M_v_; -text: .text%__1cHCompileLFinish_Warm6M_v_; -text: .text%__1cbAfinal_graph_reshaping_walk6FrnKNode_Stack_pnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cHCompileLInline_Warm6M_i_; -text: .text%__1cSPhaseRemoveUseless2t6MpnIPhaseGVN_pnQUnique_Node_List__v_; -text: .text%__1cJStartNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKInlineTreeWbuild_inline_tree_root6F_p0_; -text: .text%__1cHCompileRbuild_start_state6MpnJStartNode_pknITypeFunc__pnIJVMState__; -text: .text%__1cIPhaseCCPHanalyze6M_v_; -text: .text%__1cIPhaseCCPMdo_transform6M_v_; -text: .text%__1cIPhaseCCPJtransform6MpnENode__2_; -text: .text%__1cIPhaseCCP2T6M_v_; -text: .text%__1cIPhaseCCP2t6MpnMPhaseIterGVN__v_; -text: .text%__1cHCompileVidentify_useful_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cHCompileUremove_useless_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cQUnique_Node_ListUremove_useless_nodes6MrnJVectorSet__v_; -text: .text%__1cMPhaseIterGVN2t6MpnIPhaseGVN__v_; -text: .text%__1cMPhaseIterGVN2t6Mp0_v_; -text: .text%__1cHCompile2t6MpnFciEnv_pnKC2Compiler_pnIciMethod_ii_v_; -text: .text%__1cQmulI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableKtransition6FnITosState_1_v_; -text: .text%__1cHCompileNreturn_values6MpnIJVMState__v_; -text: .text%__1cOcmovII_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cXMachCallInterpreterNodePret_addr_offset6M_i_; -text: .text%__1cOMachEpilogNodeQsafepoint_offset6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_epilog6MnITosState_i_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_prolog6MnITosState_i_v_; -text: .text%__1cYDebugInformationRecorderKadd_oopmap6MiipnGOopMap__v_; -text: .text%__1cIModINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSxorI_reg_imm13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cFStateP_sub_Op_RShiftI6MpknENode__v_; -text: .text%__1cRsarI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%lwp_cond_init: os_solaris.o; -text: .text%__1cTmembar_volatileNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNloadConL0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cbFunnecessary_membar_volatileNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQComputeCallStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cENodeIis_Start6M_pnJStartNode__: callnode.o; -text: .text%__1cRshlL_reg_imm6NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadCNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXmembar_acquire_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cKPSYoungGenRcapacity_in_bytes6kM_I_; -text: .text%__1cOMacroAssemblerMload_address6MrnHAddress_i_v_: interp_masm_sparc.o; -text: .text%__1cMloadConDNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulF_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cbCCompiledCodeSafepointHandlerbDhandle_polling_page_exception6M_pC_; -text: .text%__1cZInterpreterMacroAssemblerTdispatch_Lbyte_code6MnITosState_ppCii_v_; -text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cFframebDsender_for_raw_compiled_frame6kMpnLRegisterMap__0_; -text: .text%__1cIJVMStateOis_monitor_use6kMI_i_: reg_split.o; -text: .text%__1cUSafepointSynchronizebDhandle_polling_page_exception6FpnKJavaThread__pC_; -text: .text%__1cOloadConI13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSconvI2F_helperNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadSNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQaddF_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAddFNodeGOpcode6kM_i_; -text: .text%__1cObranchConFNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKciTypeFlowLStateVectorJdo_aaload6MpnQciByteCodeStream__v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cFStateO_sub_Op_Binary6MpknENode__v_; -text: .text%__1cKBinaryNodeGOpcode6kM_i_; -text: .text%__1cNSignatureInfoIdo_short6M_v_: bytecode.o; -text: .text%__1cKExceptionsNnew_exception6FpnGThread_nMsymbolHandle_3pnRJavaCallArguments_nGHandle_6_6_; -text: .text%__1cNmethodOopDescWcompute_has_loops_flag6M_i_; -text: .text%__1cQstkI_to_regFNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsubI_zero_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubL_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLBoxLockNodeDcmp6kMrknENode__I_; -text: .text%__1cFKlassMoop_is_klass6kM_i_: constMethodKlass.o; -text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_; -text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_; -text: .text%__1cRNativeMovConstRegIset_data6Mi_v_; -text: .text%__1cFParsebLincrement_and_test_invocation_counter6Mi_v_; -text: .text%__1cJStartNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSsafePoint_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMTailCallNodeGOpcode6kM_i_; -text: .text%__1cJBytecodesDdef6Fn0AECode_pkc33nJBasicType_ii1i_v_; -text: .text%__1cQregP_to_stkPNodeHis_Copy6kM_I_: ad_sparc_misc.o; -text: .text%__1cSInterpreterRuntimeTprepare_native_call6FpnKJavaThread_pnNmethodOopDesc__v_; -text: .text%__1cHTypePtrFempty6kM_i_; -text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_; -text: .text%__1cSsafePoint_pollNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNobjArrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; -text: .text%__1cIMulFNodeGOpcode6kM_i_; -text: .text%__1cISubLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQmulD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPconvF2D_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOloadConI13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cGEventsDlog6FpkcE_v_: exceptions.o; -text: .text%__1cTmembar_CPUOrderNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTmembar_CPUOrderNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFKlassMoop_is_array6kM_i_: methodKlass.o; -text: .text%__1cSCompareAndSwapNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNSCMemProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSThreadLocalStorageGthread6F_pnGThread__: assembler_sparc.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: methodKlass.o; -text: .text%__1cGThreadVset_pending_exception6MpnHoopDesc_pkci_v_; -text: .text%jni_SetByteArrayRegion: jni.o; -text: .text%__1cFMutex2t6Mipkci_v_; -text: .text%__1cQregI_to_stkINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__; -text: .text%__1cSdivL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFStateM_sub_Op_XorI6MpknENode__v_; -text: .text%__1cHTypePtrEmake6FnETypeFTYPES_n0ADPTR_i_pk0_; -text: .text%__1cCosLelapsedTime6F_d_; -text: .text%__1cKScopeValueJread_from6FpnTDebugInfoReadStream__p0_; -text: .text%__1cKPerfMemoryMmark_updated6F_v_; -text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_; -text: .text%__1cKPerfMemoryFalloc6FI_pc_; -text: .text%__1cLStrCompNodeKmatch_edge6kMI_I_; -text: .text%__1cQmulL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cILocation2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__; -text: .text%jni_ReleaseStringUTFChars; -text: .text%jni_GetStringUTFChars: jni.o; -text: .text%__1cSobjArrayKlassKlassXallocate_objArray_klass6MinLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cFParseLarray_store6MnJBasicType__v_; -text: .text%__1cSInterpreterRuntimeNquicken_io_cc6FpnKJavaThread__v_; -text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; -text: .text%__1cSmulI_reg_imm13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%JVM_IsInterrupted; -text: .text%__1cLLShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNSignatureInfoHdo_char6M_v_: bytecode.o; -text: .text%JVM_FindLibraryEntry; -text: .text%__1cWConstantPoolCacheEntrySset_interface_call6MnMmethodHandle_i_v_; -text: .text%__1cLklassItableUcompute_itable_index6FpnNmethodOopDesc__i_; -text: .text%__1cHAddressQrspec_from_rtype6MnJrelocInfoJrelocType_pC_nQRelocationHolder__: assembler_sparc.o; -text: .text%__1cQSystemDictionaryPresolve_or_fail6FnMsymbolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cRshlL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHCompile2t6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cQshlL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cENodeIis_CMove6M_pnJCMoveNode__: classes.o; -text: .text%__1cHBitDataKis_BitData6M_i_: ciMethodData.o; -text: .text%__1cNLocationValueLis_location6kM_i_: debugInfo.o; -text: .text%__1cPconvF2D_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLRShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSstring_compareNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIMinINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cOMacroAssemblerRload_ptr_contents6MrnHAddress_pnMRegisterImpl_i_v_: assembler_sparc.o; -text: .text%__1cOMacroAssemblerEstop6Mpkc_v_; -text: .text%__1cKRegionNodeJideal_reg6kM_I_: loopnode.o; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__: loopnode.o; -text: .text%__1cENodeHis_Root6M_pnIRootNode__: loopnode.o; -text: .text%__1cSconvI2F_helperNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cObranchConFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHMatcherOc_return_value6Fii_nLRegPair__; -text: .text%__1cENodeHis_Copy6kM_I_: loopnode.o; -text: .text%__1cKloadUBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKg3RegPOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cSsubL_reg_reg_2NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQaddP_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cTloadL_unalignedNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cLcmpD_ccNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cICallNodeRis_CallStaticJava6kM_pknSCallStaticJavaNode__: callnode.o; -text: .text%__1cMregD_lowOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cTCallDynamicJavaNodeSis_CallDynamicJava6kM_pk0_: callnode.o; -text: .text%__1cTloadL_unalignedNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLLShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectMset_override6FpnHoopDesc_C_v_; -text: .text%__1cObranchConFNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cObox_handleNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_: jni.o; -text: .text%__1cQmodI_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulI_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cRbranchLoopEndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKcmpOpUOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%__1cUParallelScavengeHeapEused6kM_I_; -text: .text%__1cIDivINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cVCallRuntimeDirectNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQxorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLOptoRuntimeOarraycopy_Type6F_pknITypeFunc__; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: methodKlass.o; -text: .text%__1cWCallLeafNoFPDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTbasictype2arraycopy6FnJBasicType_i_pC_; -text: .text%__1cOLibraryCallKitQinline_arraycopy6M_i_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: methodKlass.o; -text: .text%__1cLcmpD_ccNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWCallLeafNoFPDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLOptoRuntimeSnew_typeArray_Type6F_pknITypeFunc__; -text: .text%__1cJloadINodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitJnew_array6MpnENode_nJBasicType_pknEType_pknMTypeKlassPtr__2_; -text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; -text: .text%__1cIMinINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cKarrayKlassKjava_super6kM_pnMklassOopDesc__; -text: .text%__1cTmembar_CPUOrderNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cOClearArrayNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRbranchLoopEndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRbranchLoopEndNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cLMachUEPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTmembar_volatileNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKo1RegPOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cCosTnative_java_library6F_pv_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; -text: .text%__1cSxorI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cYinlineCallClearArrayNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cYinlineCallClearArrayNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cMPhaseChaitinGSelect6M_I_; -text: .text%__1cLOptoRuntimeInew_Type6F_pknITypeFunc__; -text: .text%__1cFParseSjump_switch_ranges6MpnENode_pnLSwitchRange_4i_v_; -text: .text%__1cSbranchCon_longNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cSbranchCon_longNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSbranchCon_longNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; -text: .text%__1cIModINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; -text: .text%__1cIGraphKitMnew_instance6MpnPciInstanceKlass__pnENode__; -text: .text%__1cLstoreP0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cMloadConLNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseTprofile_switch_case6Mi_v_; -text: .text%__1cOcmovIL_immNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cMNativeLookupGlookup6FnMmethodHandle_ripnGThread__pC_; -text: .text%__1cSandI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIimmLOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cFParseOmerge_new_path6Mi_v_; -text: .text%__1cYMachCallCompiledJavaNodePret_addr_offset6M_i_; -text: .text%__1cQregP_to_stkPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cQmulF_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_StringGoffset6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringFvalue6FpnHoopDesc__pnQtypeArrayOopDesc__; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2ipnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; -text: .text%__1cOMacroAssemblerCbr6MnJAssemblerJCondition_in0BHPredict_pCnJrelocInfoJrelocType__v_: templateTable_sparc.o; -text: .text%__1cHnmethodXinterpreter_entry_point6M_pC_; -text: .text%__1cSmembar_releaseNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQPSIsAliveClosureLdo_object_b6MpnHoopDesc__i_: psScavenge.o; -text: .text%jni_NewByteArray: jni.o; -text: .text%__1cQdivL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSsubL_reg_reg_2NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_; -text: .text%__1cUdivL_reg_imm13_1NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSInterpreterRuntimeTnmethod_entry_point6FpnKJavaThread_pnNmethodOopDesc_pnHnmethod__pC_; -text: .text%__1cQaddF_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cFParseLdo_newarray6MnJBasicType__v_; -text: .text%__1cPmethodDataKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cMNativeLookupLlookup_base6FnMmethodHandle_ripnGThread__pC_; -text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; -text: .text%__1cKRegionNodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%__1cSconvI2D_helperNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreP0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHRetNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cMciArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cSmembar_releaseNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_; -text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__; -text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cSTailCalljmpIndNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQcmovI_reg_gtNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOstackSlotPOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cObox_handleNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetMethodIxExceptionTableEntry; -text: .text%__1cSReferenceProcessorZadd_to_discovered_list_mt6MppnHoopDesc_23_v_; -text: .text%__1cIDivINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLstoreP0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQstkI_to_regFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLRethrowNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKloadUBNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cHCompileSrethrow_exceptions6MpnIJVMState__v_; -text: .text%__1cURethrowExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLRethrowNode2t6MpnENode_22222_v_; -text: .text%__1cTLoadL_unalignedNodeGOpcode6kM_i_; -text: .text%__1cSmulI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerZget_2_byte_integer_at_bcp6MipnMRegisterImpl_2n0ALsignedOrNot_n0AKsetCCOrNot__v_; -text: .text%__1cQcmovI_reg_gtNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cURethrowExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPfieldDescriptorSlong_initial_value6kM_x_; -text: .text%__1cISubLNodeDsub6kMpknEType_3_3_; -text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cJLoadINodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cQandI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cQmulI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParsePmerge_exception6Mi_v_; -text: .text%__1cLStrCompNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cYinlineCallClearArrayNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlass.o; -text: .text%__1cNloadConP0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_ReleaseStringCritical: jni.o; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_: objArrayKlass.o; -text: .text%__1cNobjArrayKlassZcan_be_primary_super_slow6kM_i_; -text: .text%__1cJCMoveNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%jni_GetStringCritical: jni.o; -text: .text%__1cUmulL_reg_imm13_1NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHciKlassSsuper_check_offset6M_I_; -text: .text%__1cSTailCalljmpIndNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__: ciObjArrayKlass.o; -text: .text%__1cRorI_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQregF_to_stkINodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cWCallLeafNoFPDirectNodeKmethod_set6Mi_v_; -text: .text%__1cWCallLeafNoFPDirectNodeRis_safepoint_node6kM_i_: ad_sparc_misc.o; -text: .text%__1cWCallLeafNoFPDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: parse1.o; -text: .text%__1cIDivLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_: icBuffer.o; -text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_: icBuffer.o; -text: .text%__1cKklassKlassMoop_is_klass6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cNSignatureInfoHdo_byte6M_v_: frame.o; -text: .text%__1cMloadConFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMadjust_check6FpnENode_11iipnMPhaseIterGVN__v_: ifnode.o; -text: .text%__1cJScopeDescGsender6kM_p0_; -text: .text%__1cNloadConP0NodeFclone6kM_pnENode__; -text: .text%__1cSxorI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJimmP0OperFclone6kM_pnIMachOper__; -text: .text%__1cOcompiledVFrameGsender6kM_pnGvframe__; -text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_; -text: .text%__1cNloadConPCNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSsubL_reg_reg_2NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cGThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; -text: .text%__1cKciTypeFlowLStateVectorEtrap6MpnQciByteCodeStream_pnHciKlass_i_v_; -text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cQregI_to_stkINodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; -text: .text%__1cIregDOperFclone6kM_pnIMachOper__; -text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; -text: .text%__1cIUniverseHoops_do6FpnKOopClosure_i_v_; -text: .text%__1cIVMThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; -text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; -text: .text%__1cOPhaseIdealLoopOadd_constraint6MiipnENode_22p23_v_; -text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_; -text: .text%__1cYinternal_word_RelocationMupdate_addrs6MrknKCodeBuffer_3_v_; -text: .text%__1cIregFOperFclone6kM_pnIMachOper__; -text: .text%__1cJloadDNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cKstoreBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQshlL_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; -text: .text%__1cOcmovPI_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQComputeCallStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cObox_handleNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreI0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQciByteCodeStreamPget_klass_index6M_i_; -text: .text%__1cFframeIpatch_pc6MpnGThread_pC_v_; -text: .text%__1cNinstanceKlassQmethod_index_for6kMpnNmethodOopDesc_pnGThread__i_; -text: .text%__1cNmethodOopDescVparameter_annotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cNmethodOopDescLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cRtestI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__; -text: .text%__1cFParseMdo_checkcast6M_v_; -text: .text%__1cOCompiledRFrameLis_compiled6kM_i_: rframe.o; -text: .text%__1cOCompiledRFrameKtop_method6kM_nMmethodHandle__: rframe.o; -text: .text%__1cICodeBlobPis_runtime_stub6kM_i_: nmethod.o; -text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; -text: .text%__1cRtestI_reg_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcmovIL_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJimmU6OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cHRegMask2t6M_v_: matcher.o; -text: .text%__1cOPhaseIdealLoopJdo_unroll6MpnNIdealLoopTree_rnJNode_List_i_v_; -text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; -text: .text%__1cLServiceUtilLvisible_oop6FpnHoopDesc__i_: objectMonitor_solaris.o; -text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_; -text: .text%__1cIimmIOperFclone6kM_pnIMachOper__; -text: .text%__1cMloadConINodeFclone6kM_pnENode__; -text: .text%__1cSmulL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPstoreI_FregNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cLcmpD_ccNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXMachCallDynamicJavaNodePret_addr_offset6M_i_; -text: .text%__1cENodeFis_If6M_pnGIfNode__: ad_sparc_misc.o; -text: .text%__1cNflagsRegFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cXvirtual_call_RelocationJpack_data6M_i_; -text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; -text: .text%__1cSconvD2I_helperNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cHMonitor2t6Mipkci_v_; -text: .text%__1cIModLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMloadConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOtypeArrayKlassOmulti_allocate6MipiipnGThread__pnHoopDesc__; -text: .text%__1cbBjava_lang_ref_SoftReferenceJset_clock6Fx_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; -text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; -text: .text%__1cQLRUMaxHeapPolicy2t6M_v_; -text: .text%__1cSReferenceProcessorbDprocess_discovered_references6M_v_; -text: .text%__1cSReferenceProcessorQprocess_phaseJNI6M_v_; -text: .text%__1cSReferenceProcessorbDenqueue_discovered_references6M_i_; -text: .text%__1cSReferenceProcessorbBenqueue_discovered_reflists6MppnHoopDesc__v_; -text: .text%__1cUParallelScavengeHeapQresize_all_tlabs6M_v_; -text: .text%__1cUParallelScavengeHeapPupdate_counters6M_v_; -text: .text%__1cUParallelScavengeHeapTensure_parseability6M_v_; -text: .text%__1cUParallelScavengeHeapOfill_all_tlabs6M_v_; -text: .text%__1cUParallelScavengeHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cVLoaderConstraintTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cXTraceMemoryManagerStats2t6Mi_v_; -text: .text%__1cTDerivedPointerTablePupdate_pointers6F_v_; -text: .text%__1cNCollectedHeapOfill_all_tlabs6M_v_; -text: .text%__1cNCollectedHeapTensure_parseability6M_v_; -text: .text%__1cNCollectedHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cNCollectedHeapQresize_all_tlabs6M_v_; -text: .text%__1cMTypeKlassPtrFxmeet6kMpknEType__3_; -text: .text%__1cXjava_lang_ref_ReferenceRpending_list_addr6F_ppnHoopDesc__; -text: .text%__1cKPSYoungGenPupdate_counters6M_v_; -text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; -text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; -text: .text%__1cPGCMemoryManagerIgc_begin6M_v_; -text: .text%__1cPGCMemoryManagerGgc_end6M_v_; -text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; -text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersPupdate_counters6M_v_; -text: .text%__1cTDerivedPointerTableFclear6F_v_; -text: .text%__1cKDictionaryHoops_do6MpnKOopClosure__v_; -text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; -text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_; -text: .text%__1cMCounterDecayFdecay6F_v_; -text: .text%__1cCosbCmake_polling_page_unreadable6F_v_; -text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_; -text: .text%__1cLConvI2FNodeGOpcode6kM_i_; -text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; -text: .text%__1cQaddF_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRshlL_reg_imm6NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cUSafepointSynchronizeFbegin6F_v_; -text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cONMethodSweeperFsweep6F_v_; -text: .text%__1cNCollectedHeapYcommon_mem_allocate_init6FIipnGThread__pnIHeapWord__: arrayKlass.o; -text: .text%__1cTAbstractInterpreterRnotice_safepoints6F_v_; -text: .text%__1cCosbAmake_polling_page_readable6F_v_; -text: .text%__1cUSafepointSynchronizeDend6F_v_; -text: .text%__1cOcmovII_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cTAbstractInterpreterRignore_safepoints6F_v_; -text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; -text: .text%__1cJStoreNodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%__1cPconvF2D_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKimmU13OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cQshlL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUcompU_iReg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetCallerClass; -text: .text%__1cNSignatureInfoHdo_byte6M_v_: bytecode.o; -text: .text%__1cOcmovPP_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSobjArrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cLstoreC0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cTloadL_unalignedNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cICmpFNodeGOpcode6kM_i_; -text: .text%__1cSdivL_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%__1cOstackSlotPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQregF_to_stkINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJLoadDNodeGOpcode6kM_i_; -text: .text%__1cQmulD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSconvI2F_helperNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%jni_IsAssignableFrom: jni.o; -text: .text%jni_GetFieldID: jni.o; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pCii_v_; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: cpCacheKlass.o; -text: .text%__1cJLoadPNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: cpCacheKlass.o; -text: .text%__1cLstoreB0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cZInterpreterMacroAssemblerbAget_cache_and_index_at_bcp6MpnMRegisterImpl_2i_v_; -text: .text%__1cHTypeAryFxdual6kM_pknEType__; -text: .text%__1cMtlsLoadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJEventMark2t6MpkcE_v_: vmThread.o; -text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; -text: .text%__1cCosMget_priority6FkpknGThread_rnOThreadPriority__nIOSReturn__; -text: .text%__1cGThreadMget_priority6Fkpk0_nOThreadPriority__; -text: .text%__1cMVM_OperationIevaluate6M_v_; -text: .text%__1cMVM_OperationSset_calling_thread6MpnGThread_nOThreadPriority__v_; -text: .text%__1cCosTget_native_priority6FkpknGThread_pi_nIOSReturn__; -text: .text%__1cOMacroAssemblerDbrx6MnJAssemblerJCondition_in0BHPredict_rnFLabel__v_: interp_masm_sparc.o; -text: .text%__1cQdivL_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cMnegD_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cUParallelScavengeHeapMmem_allocate6MIii_pnIHeapWord__; -text: .text%__1cQregP_to_stkPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQcmovI_reg_gtNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cISubLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cWloadConI_x43300000NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cGGCTask2t6Mn0AEKindEkind__v_; -text: .text%__1cNGCTaskManagerVrelease_all_resources6M_v_; -text: .text%__1cUPSAdaptiveSizePolicyWminor_collection_begin6M_v_; -text: .text%__1cLGCTaskQdDueueHenqueue6Mp0_v_; -text: .text%__1cSCardTableExtensionRscavenge_contents6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager__v_; -text: .text%__1cUWaitForBarrierGCTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cNGCTaskManagerIadd_list6MpnLGCTaskQdDueue__v_; -text: .text%__1cHThreadsZcreate_thread_roots_tasks6FpnLGCTaskQdDueue__v_; -text: .text%__1cUWaitForBarrierGCTaskGcreate6F_p0_; -text: .text%__1cUWaitForBarrierGCTaskIdestruct6M_v_; -text: .text%__1cSObjectSynchronizerJfast_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cSObjectSynchronizerKfast_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cUPSAdaptiveSizePolicyUminor_collection_end6MnHGCCauseFCause__v_; -text: .text%__1cSPSPromotionManagerNpost_scavenge6F_v_; -text: .text%__1cNBarrierGCTaskOdo_it_internal6MpnNGCTaskManager_I_v_; -text: .text%__1cNJvmtiGCMarker2T6M_v_; -text: .text%__1cUWaitForBarrierGCTaskHdestroy6Fp0_v_; -text: .text%__1cLGCTaskQdDueueGcreate6F_p0_; -text: .text%__1cSPSPromotionManagerMpre_scavenge6F_v_; -text: .text%__1cZSerialOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cQinstanceRefKlassbKrelease_and_notify_pending_list_lock6FipnJBasicLock__v_; -text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; -text: .text%__1cZSerialOldToYoungRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cKPSYoungGenLswap_spaces6M_v_; -text: .text%__1cUParallelScavengeHeapQresize_young_gen6MII_v_; -text: .text%__1cODeoptimizationYtrap_state_is_recompiled6Fi_i_; -text: .text%__1cKPSYoungGenGresize6MII_v_; -text: .text%__1cKPSYoungGenNresize_spaces6MII_v_; -text: .text%__1cUPSAdaptiveSizePolicyPupdate_averages6MiII_v_; -text: .text%__1cUPSAdaptiveSizePolicybPcompute_survivor_space_size_and_threshold6MiiI_i_; -text: .text%__1cSPSPromotionManagerbBvm_thread_promotion_manager6F_p0_; -text: .text%__1cUWaitForBarrierGCTaskIwait_for6M_v_; -text: .text%__1cKPSScavengeQinvoke_no_policy6Fpi_i_; -text: .text%__1cPVM_GC_OperationQgc_count_changed6kM_i_; -text: .text%__1cKPSYoungGenRresize_generation6MII_i_; -text: .text%__1cPVM_GC_OperationNdoit_prologue6M_i_; -text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; -text: .text%__1cNMonitorSupplyHreserve6F_pnHMonitor__; -text: .text%__1cNJvmtiGCMarker2t6Mi_v_; -text: .text%__1cNMonitorSupplyHrelease6FpnHMonitor__v_; -text: .text%__1cUWaitForBarrierGCTaskEname6M_pc_: gcTaskManager.o; -text: .text%__1cTmembar_volatileNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cVLoaderConstraintTableWfind_constrained_klass6MnMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cQjava_lang_ThreadJis_daemon6FpnHoopDesc__i_; -text: .text%__1cVCallRuntimeDirectNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cTloadL_unalignedNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovII_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQComputeCallStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cMLinkResolverbPlinktime_resolve_interface_method_or_null6FnLKlassHandle_nMsymbolHandle_21i_nMmethodHandle__; -text: .text%__1cMURShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSCompiledStaticCallIis_clean6kM_i_; -text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_; -text: .text%__1cUmulL_reg_imm13_1NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPClassFileParserbJparse_classfile_signature_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cKstoreBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_; -text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_; -text: .text%__1cFframeZinterpreter_frame_set_mdp6MpC_v_; -text: .text%__1cLOptoRuntimeVresolve_static_call_C6FpnKJavaThread__pC_; -text: .text%__1cZInterpreterMacroAssemblerIpush_ptr6MpnMRegisterImpl__v_; -text: .text%__1cHMatcherbAinterpreter_method_oop_reg6F_nHOptoRegEName__; -text: .text%__1cTCallInterpreterNodeSis_CallInterpreter6kM_pk0_: classes.o; -text: .text%__1cTCallInterpreterNodeScalling_convention6kMpnLRegPair_I_v_; -text: .text%__1cHCompilebMGenerate_Compiled_To_Interpreter_Graph6MpknITypeFunc_pC_v_; -text: .text%__1cISubLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cZCallInterpreterDirectNodeKmethod_set6Mi_v_; -text: .text%__1cIciMethodRinterpreter_entry6M_pC_; -text: .text%__1cQmulF_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cXMachCallInterpreterNodeWis_MachCallInterpreter6M_p0_: ad_sparc_misc.o; -text: .text%__1cZCallInterpreterDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPconvF2D_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZCallInterpreterDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRcompL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWloadConI_x41f00000NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJloadBNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%jni_SetBooleanField: jni.o; -text: .text%__1cQciByteCodeStreamFtable6MnJBytecodesECode__2_; -text: .text%__1cKimmL13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cRsarL_reg_imm6NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cGEventsDlog6FpkcE_v_: sharedRuntime.o; -text: .text%__1cLcmpF_ccNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKloadUBNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cLRuntimeStubbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cRorI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cWResolveOopMapConflictsRpossible_gc_point6MpnOBytecodeStream__i_: rewriter.o; -text: .text%__1cRsarL_reg_imm6NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQmulI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMnegD_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_object6M_v_; -text: .text%__1cZInterpreterMacroAssemblerGpush_i6MpnMRegisterImpl__v_; -text: .text%__1cUdivL_reg_imm13_1NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cLLShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOcmovIL_immNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvI2D_memNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cSdivL_reg_reg_1NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQComputeCallStackJdo_double6M_v_: generateOopMap.o; -text: .text%__1cJloadSNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRloadConP_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSstkL_to_regD_0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNObjectMonitorHRecycle6M_v_; -text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cQshlL_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cMloadConLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOMacroAssemblerWstore_unaligned_double6MpnRFloatRegisterImpl_pnMRegisterImpl_i_v_; -text: .text%__1cJloadDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQSystemDictionaryTresolve_from_stream6FnMsymbolHandle_nGHandle_2pnPClassFileStream_pnGThread__pnMklassOopDesc__; -text: .text%__1cQstkI_to_regFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQregP_to_stkPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerFpop_i6MpnMRegisterImpl__v_; -text: .text%__1cSTailCalljmpIndNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSTailCalljmpIndNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cIMaxINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cLOptoRuntimeThandle_wrong_method6FpnKJavaThread__pC_; -text: .text%__1cOMacroAssemblerUstore_unaligned_long6MpnMRegisterImpl_2i_v_; -text: .text%__1cSmulL_reg_reg_1NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSsubL_reg_reg_1NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cOLibraryCallKitRinline_unsafe_CAS6MnJBasicType__i_; -text: .text%__1cTCompareAndSwapLNode2t6MpnENode_2222_v_; -text: .text%__1cYcompareAndSwapL_boolNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCompareAndSwapNode2t6MpnENode_2222_v_; -text: .text%__1cNSCMemProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cYcompareAndSwapL_boolNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUPSAdaptiveSizePolicyOshould_full_GC6MI_i_; -text: .text%__1cIPSOldGenMmax_gen_size6M_I_: psOldGen.o; -text: .text%__1cUPSAdaptiveSizePolicyQdecaying_gc_cost6kM_d_; -text: .text%__1cUPSAdaptiveSizePolicybDcompute_generation_free_space6MIIIIIIIi_v_; -text: .text%__1cSmulL_reg_reg_1NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKPSScavengeGinvoke6Fpi_v_; -text: .text%__1cUPSAdaptiveSizePolicyVadjust_for_throughput6MipI1_v_; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; -text: .text%__1cSsubL_reg_reg_1NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cUPSAdaptiveSizePolicyZdecay_supplemental_growth6Mi_v_; -text: .text%__1cSdivL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cUParallelScavengeHeapTfailed_mem_allocate6MpiIii_pnIHeapWord__; -text: .text%__1cbDVM_ParallelGCFailedAllocation2t6MIiiI_v_; -text: .text%__1cbDVM_ParallelGCFailedAllocationEdoit6M_v_; -text: .text%__1cbDVM_ParallelGCFailedAllocationEname6kM_pkc_: vm_operations.o; -text: .text%__1cQaddL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPadd_derived_oop6FppnHoopDesc_2_v_: oopMap.o; -text: .text%__1cMregD_lowOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cHOrINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cOMethodLivenessKBasicBlockFsplit6Mi_p1_; -text: .text%__1cOcmovII_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseScreate_jump_tables6MpnENode_pnLSwitchRange_4_i_; -text: .text%__1cENodeEgetd6kM_d_; -text: .text%__1cZInterpreterMacroAssemblerKverify_oop6MpnMRegisterImpl_nITosState__v_; -text: .text%__1cOcmovIL_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTAbstractInterpreterSBasicType_as_index6FnJBasicType__i_; -text: .text%__1cZInterpreterMacroAssemblerGpush_f6MpnRFloatRegisterImpl__v_; -text: .text%__1cIciObject2t6MpnHciKlass__v_; -text: .text%__1cRtestI_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSxorI_reg_imm13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cPjava_lang_ClassQprimitive_mirror6FnJBasicType__pnHoopDesc__; -text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_; -text: .text%__1cKstoreFNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cHMatcherXinterpreter_arg_ptr_reg6F_nHOptoRegEName__; -text: .text%__1cPstoreI_FregNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKCMovePNodeGOpcode6kM_i_; -text: .text%__1cLstoreC0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKciTypeFlowOsplit_range_at6Mi_pn0AFRange__; -text: .text%__1cNObjectMonitorEwait6MxipnGThread__v_; -text: .text%__1cSmulI_reg_imm13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%JVM_MonitorWait; -text: .text%__1cSObjectSynchronizerEwait6FnGHandle_xpnGThread__v_; -text: .text%__1cNloadConPCNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIAddLNodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; -text: .text%__1cGciType2t6MpnHciKlass__v_; -text: .text%__1cQshlI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQdivD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSdivL_reg_reg_1NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIciObjectUis_array_klass_klass6M_i_: ciObjectFactory.o; -text: .text%__1cFParseSjump_if_false_fork6MpnGIfNode_ii_v_; -text: .text%__1cNloadConL0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHBoxNodeGOpcode6kM_i_; -text: .text%__1cRshrL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMflagsRegOperFclone6kM_pnIMachOper__; -text: .text%__1cSconvI2F_helperNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQregF_to_stkINodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cbFunnecessary_membar_volatileNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cUciInstanceKlassKlassEmake6F_p0_; -text: .text%__1cENode2t6Mp0111111_v_; -text: .text%__1cIDivLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cZInterpreterMacroAssemblerGpush_d6MpnRFloatRegisterImpl__v_; -text: .text%__1cPstoreI_FregNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseRarray_store_check6M_v_; -text: .text%__1cQsubF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIciSymbolHbyte_at6Mi_i_; -text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; -text: .text%__1cbDreorder_based_on_method_index6FpnPobjArrayOopDesc_1ppnHoopDesc__v_: methodOop.o; -text: .text%__1cQaddD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongVariable__; -text: .text%__1cQshlI_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQset_lwp_priority6Fiii_i_; -text: .text%__1cSstkL_to_regD_0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cbCAbstractInterpreterGeneratorVset_vtos_entry_points6MpnITemplate_rpC44444444_v_; -text: .text%__1cQregI_to_stkINodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%jni_NewStringUTF: jni.o; -text: .text%__1cZInterpreterMacroAssemblerGpush_l6MpnMRegisterImpl__v_; -text: .text%__1cQsubI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cZInterpreterMacroAssemblerXget_constant_pool_cache6MpnMRegisterImpl__v_; -text: .text%__1cSbranchCon_longNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cXjava_lang_ref_ReferenceOset_discovered6FpnHoopDesc_2_v_; -text: .text%__1cKcmpOpUOperKless_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cMLinkResolverUresolve_virtual_call6FrnICallInfo_nGHandle_nLKlassHandle_4nMsymbolHandle_54iipnGThread__v_; -text: .text%__1cPciInstanceKlassNloader_handle6M_pnI_jobject__; -text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; -text: .text%__1cUParallelScavengeHeapIcapacity6kM_I_; -text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; -text: .text%__1cSsubL_reg_reg_2NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddD_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNget_method_id6FpnHJNIEnv__pnH_jclass_pkc5ipnGThread__pnK_jmethodID__: jni.o; -text: .text%__1cMjniIdSupportNto_jmethod_id6FpnNmethodOopDesc__pnK_jmethodID__; -text: .text%__1cFKlassMoop_is_array6kM_i_: instanceRefKlass.o; -text: .text%__1cENodeGis_Mem6M_pnHMemNode__: cfgnode.o; -text: .text%JVM_DefineClassWithSource; -text: .text%__1cLstoreF0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJloadINodeFclone6kM_pnENode__; -text: .text%JVM_SetClassSigners; -text: .text%__1cQdivL_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cXconvI2D_regDHi_regDNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKCompiledICMset_to_clean6M_v_; -text: .text%__1cICodeBlobYcaller_must_gc_arguments6kMpnKJavaThread__i_: codeBlob.o; -text: .text%__1cSandL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRbranchLoopEndNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cLRShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNSingletonBlobbIfollow_roots_or_mark_for_unloading6MpnRBoolObjectClosure_pnKOopClosure_iri_v_: codeBlob.o; -text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_: markSweep.o; -text: .text%__1cFParseXfetch_interpreter_state6MipknEType_pnENode__5_; -text: .text%__1cFParseWcheck_interpreter_type6MpnENode_pknEType_rpnNSafePointNode__2_; -text: .text%__1cOcmovPP_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_; -text: .text%get_thread; -text: .text%__1cKstoreCNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FIi_pnGThread__; -text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; -text: .text%jni_CallIntMethod: jni.o; -text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; -text: .text%__1cKloadUBNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQregL_to_stkLNodeHis_Copy6kM_I_: ad_sparc_misc.o; -text: .text%__1cUCallCompiledJavaNodeScalling_convention6kMpnLRegPair_I_v_; -text: .text%__1cSconvD2I_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHCompilebMGenerate_Interpreter_To_Compiled_Graph6MpknITypeFunc__v_; -text: .text%__1cbACallCompiledJavaDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cbACallCompiledJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSconvD2I_helperNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cbACallCompiledJavaDirectNodeKmethod_set6Mi_v_; -text: .text%__1cIMulDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cbACallCompiledJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cbCAbstractInterpreterGeneratorZgenerate_return_entry_for6MnITosState_i_pC_; -text: .text%__1cbCAbstractInterpreterGeneratorYgenerate_deopt_entry_for6MnITosState_i_pC_; -text: .text%__1cSaddP_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIAddDNodeGOpcode6kM_i_; -text: .text%__1cOcmovPP_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconvI2D_helperNodeFclone6kM_pnENode__; -text: .text%__1cOloadI_fregNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHCompileRmake_vm_intrinsic6MpnIciMethod_i_pnNCallGenerator__; -text: .text%__1cOloadI_fregNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSCountedLoopEndNode2t6MpnENode_2ff_v_; -text: .text%__1cQmulD_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cCosJyield_all6Fi_v_; -text: .text%__1cGThreadRis_Watcher_thread6kM_i_: vmThread.o; -text: .text%__1cKstoreLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMloadConFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPstoreI_FregNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFTypeDJsingleton6kM_i_; -text: .text%__1cLstoreC0NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetClassMethodsCount; -text: .text%__1cKstoreINodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%JVM_GetClassFieldsCount; -text: .text%__1cLconvI2BNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_ThreadMis_stillborn6FpnHoopDesc__i_; -text: .text%__1cRorI_reg_imm13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetClassCPEntriesCount; -text: .text%JVM_GetClassCPTypes; -text: .text%__1cGEventsDlog6FpkcE_v_: thread.o; -text: .text%__1cHciKlassMis_interface6M_i_: ciTypeArrayKlass.o; -text: .text%__1cQmulI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMacroAssemblerKverify_FPU6Mipkc_v_; -text: .text%__1cVinline_cache_regPOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cbCfind_class_from_class_loader6FpnHJNIEnv__nMsymbolHandle_CnGHandle_3CpnGThread__pnH_jclass__; -text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_; -text: .text%__1cIAddFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPconvF2D_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQregI_to_stkINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cbBinitialize_itable_for_klass6FpnMklassOopDesc__v_; -text: .text%__1cTloadL_unalignedNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_; -text: .text%__1cHAddressQrspec_from_rtype6MnJrelocInfoJrelocType_pC_nQRelocationHolder__: interpreterRT_sparc.o; -text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIgenerate6MX_v_; -text: .text%JVM_IsPrimitiveClass; -text: .text%__1cJimmU6OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cOPhaseIdealLoopUpeeled_dom_test_elim6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cIDivDNodeGOpcode6kM_i_; -text: .text%__1cObox_handleNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRorI_reg_imm13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeHis_Loop6M_pnILoopNode__: cfgnode.o; -text: .text%__1cKloadUBNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cTmembar_volatileNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmulL_reg_reg_1NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cSsubL_reg_reg_1NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cSdivL_reg_imm13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cLStringTableJbasic_add6MinGHandle_pHiIpnGThread__pnHoopDesc__; -text: .text%__1cIModLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cXconvI2D_regDHi_regDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRtestI_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%jni_FindClass: jni.o; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cOMacroAssemblerOstore_argument6MpnMRegisterImpl_rnIArgument__v_: interpreterRT_sparc.o; -text: .text%__1cFParseHdo_irem6M_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorThas_signature_field6F_i_; -text: .text%__1cbDjava_lang_reflect_ConstructorNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorVhas_annotations_field6F_i_; -text: .text%__1cbDjava_lang_reflect_ConstructorIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorbFhas_parameter_annotations_field6F_i_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorGcreate6FpnGThread__nGHandle__; -text: .text%__1cGThreadbCis_hidden_from_external_view6kM_i_: thread.o; -text: .text%__1cGThreadVis_jvmti_agent_thread6kM_i_: thread.o; -text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDesc__; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_: machnode.o; -text: .text%__1cNloadConP0NodeGis_Con6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsarL_reg_imm6NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cRtestI_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovII_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSdivL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTloadL_unalignedNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSharedRuntimeDd2l6Fd_x_; -text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__; -text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_; -text: .text%__1cFStateP_sub_Op_RShiftL6MpknENode__v_; -text: .text%__1cPICStubInterfaceEsize6kMpnEStub__i_: icBuffer.o; -text: .text%__1cPICStubInterfaceIfinalize6MpnEStub__v_: icBuffer.o; -text: .text%__1cObox_handleNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cQshrI_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cQregI_to_stkINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRorI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; -text: .text%__1cMregD_lowOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cLConvD2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSconvI2F_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHMonitor2T6M_v_; -text: .text%__1cFTypeDFxmeet6kMpknEType__3_; -text: .text%__1cFMutex2T6M_v_; -text: .text%__1cRtestI_reg_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%lwp_cond_destroy: os_solaris.o; -text: .text%lwp_mutex_destroy: os_solaris.o; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: multnode.o; -text: .text%__1cQdivI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cVcompiledICHolderKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cLPhaseValuesHlongcon6Mx_pnIConLNode__; -text: .text%__1cQregP_to_stkPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQstkI_to_regFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQregI_to_stkINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQRelocationHolderEplus6kMi_0_; -text: .text%__1cUPSMarkSweepDecoratorHcompact6Mi_v_; -text: .text%__1cUPSMarkSweepDecoratorPadjust_pointers6M_v_; -text: .text%__1cUPSMarkSweepDecoratorKprecompact6M_v_; -text: .text%__1cTloadL_unalignedNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_ThreadLthreadGroup6FpnHoopDesc__2_; -text: .text%__1cQregF_to_stkINodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cHCompileQgrow_alias_types6M_v_; -text: .text%__1cLLShiftLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cbFunnecessary_membar_volatileNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cISubLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOcmovII_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNiRegIsafeOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; -text: .text%__1cUmulL_reg_imm13_1NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKloadUBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHnmethodPis_dependent_on6MpnMklassOopDesc__i_; -text: .text%__1cTloadD_unalignedNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSdivL_reg_reg_1NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cJLoadFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cZInterpreterMacroAssemblerHpop_ptr6MpnMRegisterImpl__v_; -text: .text%__1cQdivD_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeHis_Bool6M_pnIBoolNode__: connode.o; -text: .text%__1cKLoadPCNodeGOpcode6kM_i_; -text: .text%__1cENodeIis_CMove6M_pnJCMoveNode__: connode.o; -text: .text%__1cOloadConL13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRcompL_reg_conNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQaddF_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFKlassMoop_is_array6kM_i_: methodDataKlass.o; -text: .text%__1cICmpDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFKlassPoop_is_instance6kM_i_: methodDataKlass.o; -text: .text%__1cLcmpF_ccNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKsplit_once6FpnMPhaseIterGVN_pnENode_333_v_: cfgnode.o; -text: .text%__1cLLShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJloadFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJCMoveNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFciEnvWis_dependence_violated6FpnMklassOopDesc_pnNmethodOopDesc__i_; -text: .text%__1cOPhaseIdealLoopOdo_range_check6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cQaddD_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceRefKlass.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: instanceKlassKlass.o; -text: .text%__1cObox_handleNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSconvD2I_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitPdstore_rounding6MpnENode__2_; -text: .text%__1cJloadINodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSdivL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQregP_to_stkPNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cRloadConP_pollNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIModINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cZCallDynamicJavaDirectNodeKmethod_set6Mi_v_; -text: .text%__1cFframeVshould_be_deoptimized6kM_i_; -text: .text%__1cZCallDynamicJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXvirtual_call_RelocationMupdate_addrs6MrknKCodeBuffer_3_v_; -text: .text%__1cUdivL_reg_imm13_1NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconvD2I_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKCMoveINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cPCallRuntimeNodeOis_CallRuntime6kM_pk0_: callnode.o; -text: .text%__1cZCallDynamicJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQsubF_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cICodeBlobOis_java_method6kM_i_: codeBlob.o; -text: .text%__1cQMachCallJavaNodeVis_MachCallStaticJava6M_pnWMachCallStaticJavaNode__: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pC2i_v_; -text: .text%__1cUmulL_reg_imm13_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQdivL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENodeMis_CatchProj6kM_pknNCatchProjNode__: classes.o; -text: .text%__1cOcmovPI_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cUdivL_reg_imm13_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMTypeKlassPtrRcast_to_exactness6kMi_pknEType__; -text: .text%__1cUmulL_reg_imm13_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNCallGeneratorQfor_virtual_call6FpnIciMethod__p0_; -text: .text%__1cUVirtualCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cNObjectMonitor2t6M_v_; -text: .text%__1cTmembar_volatileNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulINodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIMulINodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cQdivD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJCmpD3NodeGOpcode6kM_i_; -text: .text%__1cJloadDNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMinINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOBasicHashtableJnew_entry6MI_pnTBasicHashtableEntry__; -text: .text%__1cUVirtualCallGeneratorKis_virtual6kM_i_: callGenerator.o; -text: .text%__1cQmulF_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_MonitorNotify; -text: .text%__1cOMacroAssemblerDset6MipnMRegisterImpl_rknQRelocationHolder__v_: templateTable_sparc.o; -text: .text%__1cFBlockNset_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; -text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; -text: .text%__1cXNativeSignatureIteratorJdo_object6Mii_v_: interpreterRT_sparc.o; -text: .text%__1cOMacroAssemblerCbr6MnJAssemblerJCondition_in0BHPredict_pCnJrelocInfoJrelocType__v_: interpreterRT_sparc.o; -text: .text%__1cKstoreFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSstring_compareNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRtestI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cYjava_lang_reflect_MethodVhas_annotations_field6F_i_; -text: .text%__1cVshrL_reg_imm6_L2INodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYjava_lang_reflect_MethodIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cOloadConL13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cYjava_lang_reflect_MethodPset_return_type6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__; -text: .text%__1cYjava_lang_reflect_MethodbFhas_parameter_annotations_field6F_i_; -text: .text%__1cINegDNodeGOpcode6kM_i_; -text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodThas_signature_field6F_i_; -text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodbChas_annotation_default_field6F_i_; -text: .text%__1cOimmI_32_63OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_; -text: .text%__1cNmethodOopDescSannotation_default6kM_pnQtypeArrayOopDesc__; -text: .text%__1cKReflectionKnew_method6FnMmethodHandle_iipnGThread__pnHoopDesc__; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNIdealLoopTreeXpolicy_maximally_unroll6kMpnOPhaseIdealLoop__i_; -text: .text%__1cSsubL_reg_reg_2NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQregP_to_stkPNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNRelocIteratorEnext6M_i_: output.o; -text: .text%__1cOcmovII_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOstackSlotPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%jni_GetMethodID: jni.o; -text: .text%__1cTloadD_unalignedNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cQshlL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: instanceRefKlass.o; -text: .text%__1cObranchConFNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNminI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cRshlI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNminI_eRegNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOloadConL13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; -text: .text%__1cOMacroAssemblerDjmp6MpnMRegisterImpl_ipkci_v_; -text: .text%__1cIDivLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSsubD_regD_regDNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetClassDeclaredConstructors; -text: .text%__1cUdivL_reg_imm13_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmulD_regD_regDNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKJavaThreadbScheck_safepoint_and_suspend_for_native_trans6Fp0_v_; -text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_; -text: .text%__1cOcmovIF_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cUmulL_reg_imm13_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsubD_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cUdivL_reg_imm13_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSandL_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadConPCNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cMmatch_option6FpknMJavaVMOption_pkcp4_i_: arguments.o; -text: .text%__1cZregDHi_regDLo_to_regDNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJEventMark2t6MpkcE_v_: psMarkSweep.o; -text: .text%__1cQregP_to_stkPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJCMoveNodeEmake6FpnENode_222pknEType__p0_; -text: .text%__1cJCMoveNode2t6MpnENode_22pknEType__v_: connode.o; -text: .text%__1cSconvI2F_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_; -text: .text%__1cOcmovIF_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerVincrement_mdp_data_at6MipnMRegisterImpl__v_; -text: .text%__1cQcmovI_reg_ltNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadConL0NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cKo1RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cRtestI_reg_immNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQdivI_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSsubL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIBytecodeIset_code6MnJBytecodesECode__v_; -text: .text%__1cQshrL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRsarL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulI_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadBNodeFclone6kM_pnENode__; -text: .text%__1cJloadFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSaddD_regD_regDNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIpass_int6M_v_: interpreterRT_sparc.o; -text: .text%__1cRorI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassQfind_local_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__i_; -text: .text%__1cQshrL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQshrI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOimmI_32_63OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cSstkL_to_regD_0NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cUGenericGrowableArrayKraw_remove6MpknEGrET__v_; -text: .text%__1cOloadI_fregNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMnegD_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cTAbstractInterpreterLdeopt_entry6FnITosState_i_pC_; -text: .text%__1cLConvI2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJloadSNodeFclone6kM_pnENode__; -text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_; -text: .text%__1cMnegD_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQdivL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKCompiledICKcached_oop6kM_pnHoopDesc__; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_: output.o; -text: .text%__1cZregDHi_regDLo_to_regDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cISubFNodeGOpcode6kM_i_; -text: .text%JVM_IsThreadAlive; -text: .text%__1cQstkI_to_regINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQshrL_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQdivD_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_ThreadIis_alive6FpnHoopDesc__i_; -text: .text%__1cFKlassMoop_is_klass6kM_i_: typeArrayKlass.o; -text: .text%__1cXPartialSubtypeCheckNodeGOpcode6kM_i_; -text: .text%__1cSsubD_regD_regDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSmulD_regD_regDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLconvI2BNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovIF_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRsarL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRtestI_reg_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRtestI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQregI_to_stkINodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsubI_zero_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFTypeFJsingleton6kM_i_; -text: .text%__1cLconvI2BNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmulL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSconvD2I_helperNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubF_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovIF_immNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOPhaseIdealLoopVinsert_pre_post_loops6MpnNIdealLoopTree_rnJNode_List_i_v_; -text: .text%__1cQaddD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovPI_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKConv2BNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSstring_compareNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQregL_to_stkLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_SystemTout_offset_in_bytes6F_i_; -text: .text%__1cQjava_lang_SystemSin_offset_in_bytes6F_i_; -text: .text%__1cLTypeInstPtrRcast_to_exactness6kMi_pknEType__; -text: .text%__1cWPredictedCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cWPredictedCallGeneratorJis_inline6kM_i_: callGenerator.o; -text: .text%__1cLcmpF_ccNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cWPredictedCallGeneratorKis_virtual6kM_i_: callGenerator.o; -text: .text%__1cNCallGeneratorSfor_predicted_call6FpnHciKlass_p03_3_; -text: .text%__1cSconvI2F_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXconvI2D_regDHi_regDNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cObox_handleNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cNCallGeneratorRfor_uncommon_trap6FpnIciMethod_nODeoptimizationLDeoptReason_n0CLDeoptAction__p0_; -text: .text%__1cOcmovPP_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZUncommonTrapCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSaddD_regD_regDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIVMThreadMis_VM_thread6kM_i_: vmThread.o; -text: .text%__1cIMulFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQmulF_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLcmpF_ccNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQregL_to_stkLNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cGThread2t6M_v_; -text: .text%__1cOcmovLI_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQstkI_to_regINodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_; -text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; -text: .text%__1cFTypeFFxmeet6kMpknEType__3_; -text: .text%__1cCosScurrent_stack_size6F_I_; -text: .text%__1cOcmovLL_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIOSThreadNpd_initialize6M_v_; -text: .text%__1cCosScurrent_stack_base6F_pC_; -text: .text%__1cIOSThread2t6MpFpv_i1_v_; -text: .text%__1cIMulDNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cCosRinitialize_thread6F_v_; -text: .text%__1cSdivL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cGThreadOis_Java_thread6kM_i_: vmThread.o; -text: .text%__1cCosPpd_start_thread6FpnGThread__v_; -text: .text%__1cLConvI2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNobjArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: typeArrayKlass.o; -text: .text%__1cFTypeDGis_nan6kM_i_; -text: .text%jni_NewObjectArray: jni.o; -text: .text%__1cSsubL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovIF_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_SetThreadPriority; -text: .text%__1cQaddF_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cCosMstart_thread6FpnGThread__v_; -text: .text%__1cCosNcreate_thread6FpnGThread_n0AKThreadType_I_i_; -text: .text%_start: os_solaris.o; -text: .text%__1cXjava_lang_reflect_FieldNset_modifiers6FpnHoopDesc_i_v_; -text: .text%JVM_GetStackAccessControlContext; -text: .text%__1cXjava_lang_reflect_FieldThas_signature_field6F_i_; -text: .text%__1cXjava_lang_reflect_FieldVhas_annotations_field6F_i_; -text: .text%__1cXjava_lang_reflect_FieldPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cQsubD_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerTload_unaligned_long6MpnMRegisterImpl_i2_v_; -text: .text%__1cFStateM_sub_Op_ModI6MpknENode__v_; -text: .text%JVM_Read; -text: .text%__1cOcmovPI_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKCompiledICOset_cached_oop6MpnHoopDesc__v_; -text: .text%__1cFStateM_sub_Op_SubL6MpknENode__v_; -text: .text%__1cKCompiledICMstub_address6kM_pC_; -text: .text%__1cFciEnvZcall_has_multiple_targets6FpnNinstanceKlass_nMsymbolHandle_3ri_i_; -text: .text%__1cKReflectionJnew_field6FpnPfieldDescriptor_ipnGThread__pnHoopDesc__; -text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cQsubL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQmodI_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cISubDNodeGOpcode6kM_i_; -text: .text%__1cQmodI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cRsarI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: callGenerator.o; -text: .text%__1cKReflectionInew_type6FnMsymbolHandle_nLKlassHandle_pnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_type6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldGcreate6FpnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cLOptoRuntimeWresolve_virtual_call_C6FpnKJavaThread__pC_; -text: .text%__1cXjava_lang_reflect_FieldIset_name6FpnHoopDesc_2_v_; -text: .text%__1cSmulD_regD_regDNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cMloadConINodeGis_Con6kM_I_: ad_sparc_misc.o; -text: .text%jni_GetStaticFieldID: jni.o; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadKlassNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSstring_compareNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreF0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerIjumpl_to6MrnHAddress_pnMRegisterImpl_i_v_: interp_masm_sparc.o; -text: .text%__1cOJavaAssertionsHenabled6Fpkci_i_; -text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_; -text: .text%__1cSsubD_regD_regDNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassKjni_id_for6Mi_pnFJNIid__; -text: .text%__1cSstkL_to_regD_0NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cFStateO_sub_Op_CMoveI6MpknENode__v_; -text: .text%__1cRsarL_reg_imm6NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cIModLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cENodeEgetf6kM_f_; -text: .text%JVM_DesiredAssertionStatus; -text: .text%__1cKJavaThreadKinitialize6M_v_; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__: node.o; -text: .text%__1cNThreadServiceKadd_thread6FpnKJavaThread_i_v_; -text: .text%__1cWThreadLocalAllocBufferKinitialize6M_v_; -text: .text%__1cUregI_to_stkLHi_1NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLConvL2DNodeGOpcode6kM_i_; -text: .text%__1cNjni_functions6F_pknTJNINativeInterface___; -text: .text%__1cCosMguard_memory6FpcI_i_; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__: node.o; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__: node.o; -text: .text%__1cQThreadStatistics2t6M_v_; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pC22i_v_; -text: .text%__1cUThreadSafepointStateGcreate6FpnKJavaThread__v_; -text: .text%__1cQshrL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGParker2t6M_v_; -text: .text%__1cIDivLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cSdivL_reg_imm13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOMacroAssemblerDset6MipnMRegisterImpl_rknQRelocationHolder__v_: interp_masm_sparc.o; -text: .text%__1cMFlatProfilerJis_active6F_i_; -text: .text%__1cOMacroAssemblerNload_contents6MrnHAddress_pnMRegisterImpl_i_v_: interp_masm_sparc.o; -text: .text%__1cGThreadFstart6Fp0_v_; -text: .text%__1cOMacroAssemblerIround_to6MpnMRegisterImpl_i_v_: interp_masm_sparc.o; -text: .text%__1cPconvI2D_memNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%jni_GetFloatArrayRegion: jni.o; -text: .text%__1cJMarkSweepMfollow_stack6F_v_; -text: .text%__1cNimmP_pollOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cRtestI_reg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZregDHi_regDLo_to_regDNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cJMemRegionMintersection6kMk0_0_; -text: .text%__1cMVirtualSpaceJexpand_by6MI_i_; -text: .text%__1cUregI_to_stkLHi_0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQdivI_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKJavaThread2t6MpFp0pnGThread__vI_v_; -text: .text%__1cOcmovIF_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cQSystemDictionaryQjava_mirror_type6FpnHoopDesc__nJBasicType__; -text: .text%__1cRloadConP_pollNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cPPerfDataManagerIadd_item6FpnIPerfData_i_v_; -text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%__1cNSafepointBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; -text: .text%JVM_IsArrayClass; -text: .text%jni_CallStaticVoidMethod: jni.o; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnPPerfLongCounter__; -text: .text%__1cJloadDNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cNObjectMonitorGenter26MpnGThread__v_; -text: .text%__1cLConvF2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; -text: .text%__1cHnmethodbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cKstoreBNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFKlassNexternal_name6kM_pkc_; -text: .text%__1cOloadI_fregNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeHdel_out6Mp0_v_: generateOptoStub.o; -text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; -text: .text%__1cKstoreLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNloadConPCNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLstoreC0NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cICodeHeapJexpand_by6MI_i_; -text: .text%__1cOGenerateOopMapKinterp_all6M_v_; -text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_; -text: .text%__1cObranchConFNodeJis_Branch6kM_I_: ad_sparc_misc.o; -text: .text%__1cTloadD_unalignedNodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_GetClassName; -text: .text%__1cOGenerateOopMapTmethodsig_to_effect6MpnNsymbolOopDesc_ipnNCellTypeState__i_; -text: .text%__1cOloadI_fregNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: objArrayKlass.o; -text: .text%__1cOGenerateOopMapbAmake_context_uninitialized6M_v_; -text: .text%__1cOGenerateOopMapKinit_state6M_v_; -text: .text%__1cOGenerateOopMapYsetup_method_entry_state6M_v_; -text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_; -text: .text%__1cOGenerateOopMapRinit_basic_blocks6M_v_; -text: .text%__1cSaddD_regD_regDNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cOcmovIF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cCosMset_priority6FpnGThread_nOThreadPriority__nIOSReturn__; -text: .text%__1cENodeMis_SafePoint6M_pnNSafePointNode__: loopnode.o; -text: .text%__1cQshrL_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cHMatcherXpost_store_load_barrier6FpknENode__i_; -text: .text%__1cLConvD2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQstkI_to_regFNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcmovIL_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVcompiledICHolderKlassSoop_being_unloaded6MpnRBoolObjectClosure_pnHoopDesc__i_; -text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_: interpreterRT_sparc.o; -text: .text%__1cINodeHashEgrow6M_v_; -text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; -text: .text%__1cOcmovPP_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cMloadConDNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLStrCompNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cOMacroAssemblerVload_unaligned_double6MpnMRegisterImpl_ipnRFloatRegisterImpl__v_; -text: .text%__1cIMaxINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cJloadSNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; -text: .text%__1cHnmethodNis_osr_method6kM_i_: nmethod.o; -text: .text%__1cLConvF2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQsubI_reg_regNodeFclone6kM_pnENode__; -text: .text%JVM_Open; -text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cRCompilationPolicybIreset_counter_for_invocation_event6MnMmethodHandle__v_; -text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; -text: .text%__1cSsubL_reg_reg_2NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; -text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; -text: .text%__1cICodeBlobJis_zombie6kM_i_: onStackReplacement.o; -text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapNinitialize_bb6M_v_; -text: .text%__1cOGenerateOopMapbImark_bbheaders_and_count_gc_points6M_v_; -text: .text%__1cSmulL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSdivL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerEpush6MnITosState__v_; -text: .text%JVM_StartThread; -text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; -text: .text%jni_GetStaticObjectField: jni.o; -text: .text%__1cJArrayDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cIGraphKitSprecision_rounding6MpnENode__2_; -text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; -text: .text%__1cHAddress2t6Mn0AJaddr_type_i_v_; -text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__: generateOptoStub.o; -text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; -text: .text%__1cQjava_lang_ThreadJstackSize6FpnHoopDesc__x_; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; -text: .text%__1cIciObjectJis_method6M_i_: ciObjectFactory.o; -text: .text%__1cNloadConPCNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cTLoadD_unalignedNodeGOpcode6kM_i_; -text: .text%__1cSstkL_to_regD_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQshrI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_FreeMemory; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: instanceKlass.o; -text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%JVM_TotalMemory; -text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cMloadConDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIciObjectOis_null_object6kM_i_: ciObjectFactory.o; -text: .text%__1cUmulL_reg_imm13_1NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKCodeBufferWinsert_double_constant6Md_pC_; -text: .text%__1cTAbstractInterpreterWlayout_activation_impl6FpnNmethodOopDesc_iiiipnFframe_4i_i_; -text: .text%__1cQdivL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIciObjectOis_method_data6M_i_: ciObjectFactory.o; -text: .text%__1cOcmovIL_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSstkL_to_regD_0NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvI2D_memNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerDset6MipnMRegisterImpl_rknQRelocationHolder__v_: interpreter_sparc.o; -text: .text%__1cUdivL_reg_imm13_1NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSandL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHThreadsGremove6FpnKJavaThread__v_; -text: .text%__1cIOSThread2T6M_v_; -text: .text%__1cUThreadSafepointStateHdestroy6FpnKJavaThread__v_; -text: .text%__1cKJavaThreadYremove_stack_guard_pages6M_v_; -text: .text%__1cQandI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQjava_lang_ThreadNset_stillborn6FpnHoopDesc__v_; -text: .text%__1cGParker2T6M_v_; -text: .text%__1cSandL_reg_imm13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cRInterpreterOopMapNresource_copy6MpnQOopMapCacheEntry__v_; -text: .text%__SLIP.DELETER__A: thread.o; -text: .text%__1cCosOunguard_memory6FpcI_i_; -text: .text%__1cKJavaThreadEexit6Mi_v_; -text: .text%__1cLConvD2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIOSThreadKpd_destroy6M_v_; -text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cODeoptimizationYquery_update_method_data6FnQmethodDataHandle_in0ALDeoptReason_rIri4_pnLProfileData__; -text: .text%__1cKJavaThread2T6M_v_; -text: .text%__1cGThread2T5B6M_v_; -text: .text%__1cCosLfree_thread6FpnIOSThread__v_; -text: .text%__1cFStateM_sub_Op_MulI6MpknENode__v_; -text: .text%__1cNThreadServiceNremove_thread6FpnKJavaThread_i_v_; -text: .text%__1cNThreadServiceWcurrent_thread_exiting6FpnKJavaThread__v_; -text: .text%__1cLensure_join6FpnKJavaThread__v_: thread.o; -text: .text%__1cQOopMapCacheEntryEfill6MnMmethodHandle_i_v_; -text: .text%__1cUregI_to_stkLHi_0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cUregI_to_stkLHi_0NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSTailCalljmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapEppop6MpnNCellTypeState__v_; -text: .text%__1cUregI_to_stkLHi_1NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSTailCalljmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQsubF_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cICmpDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cLconvI2BNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cRNativeMovConstRegEdata6kM_i_; -text: .text%__1cbFunnecessary_membar_volatileNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cLcmpF_ccNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; -text: .text%jni_CallObjectMethod: jni.o; -text: .text%__1cMTailCallNode2t6MpnENode_222222_v_; -text: .text%__1cQaddD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cGEventsDlog6FpkcE_v_: deoptimization.o; -text: .text%__1cPconvD2F_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRInlineCacheBufferUic_buffer_cached_oop6FpC_pnHoopDesc__; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNimmP_pollOperFclone6kM_pnIMachOper__; -text: .text%__1cQdivD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRtestI_reg_immNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovIF_immNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerbEset_method_data_pointer_offset6MpnMRegisterImpl__v_; -text: .text%__1cSconvF2I_helperNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIMaxINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQChunkPoolCleanerEtask6M_v_: allocation.o; -text: .text%__1cJLoadPNodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%__1cRloadConP_pollNodeFclone6kM_pnENode__; -text: .text%__1cHTypeInt2t6Miii_v_; -text: .text%__1cTOopMapForCacheEntryLcompute_map6MpnGThread__v_; -text: .text%__1cNloadConPCNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadConPCNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovIL_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cTOopMapForCacheEntryOreport_results6kM_i_: oopMapCache.o; -text: .text%__1cKConv2BNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cXconvI2D_regDHi_regDNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: library_call.o; -text: .text%__1cSandL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovLI_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadRangeNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_StringbHcreate_from_platform_depended_str6FpkcpnGThread__nGHandle__; -text: .text%__1cRshlI_reg_imm5NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorJpass_long6M_v_; -text: .text%__1cQregL_to_stkLNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapVresult_for_basicblock6Mi_v_; -text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_: interpreterRT_sparc.o; -text: .text%__1cQOopMapCacheEntryIset_mask6MpnNCellTypeState_2i_v_; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_: klassKlass.o; -text: .text%__1cLOptoRuntimeYcurrent_time_millis_Type6F_pknITypeFunc__; -text: .text%__1cHTypePtrFxdual6kM_pknEType__; -text: .text%__1cURethrowExceptionNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cLcastP2INodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOstackSlotIOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotIOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOcmovLL_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%JVM_MonitorNotifyAll; -text: .text%__1cJloadDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOstackSlotIOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cIGraphKitXinsert_mem_bar_volatile6MpnKMemBarNode_i_v_; -text: .text%__1cKCMoveLNodeGOpcode6kM_i_; -text: .text%__1cRshlL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOLibraryCallKitYinline_native_time_funcs6Mi_i_; -text: .text%__1cMnegD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cODeoptimizationVtrap_state_has_reason6Fii_i_; -text: .text%__1cVMoveL2D_stack_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cHRetDataKcell_count6M_i_: methodDataOop.o; -text: .text%__1cTloadD_unalignedNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNiRegIsafeOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNloadConP0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cUBytecode_tableswitchGlength6M_i_: ciTypeFlow.o; -text: .text%__1cOMacroAssemblerDset6MipnMRegisterImpl_rknQRelocationHolder__v_: stubGenerator_sparc.o; -text: .text%__1cSinstanceKlassKlassOklass_oop_size6kM_i_: instanceKlassKlass.o; -text: .text%__1cZInterpreterMacroAssemblerFpop_f6MpnRFloatRegisterImpl__v_; -text: .text%__1cIAddDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMnegD_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSandL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPmethodDataKlassOklass_oop_size6kM_i_: methodDataKlass.o; -text: .text%__1cKimmL13OperFclone6kM_pnIMachOper__; -text: .text%__1cKarrayKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cLmethodKlassOklass_oop_size6kM_i_: methodKlass.o; -text: .text%__1cLstoreF0NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cKarrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cWconstantPoolCacheKlassOklass_oop_size6kM_i_: cpCacheKlass.o; -text: .text%__1cQconstMethodKlassOklass_oop_size6kM_i_: constMethodKlass.o; -text: .text%__1cXJNI_ArgumentPusherVaArgJget_float6M_v_: jni.o; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_: arrayKlassKlass.o; -text: .text%__1cQshlL_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSobjArrayKlassKlassOklass_oop_size6kM_i_: objArrayKlassKlass.o; -text: .text%__1cLsymbolKlassOklass_oop_size6kM_i_: symbolKlass.o; -text: .text%__1cVcompiledICHolderKlassOklass_oop_size6kM_i_: compiledICHolderKlass.o; -text: .text%__1cSsubL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmulL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSdivL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRconstantPoolKlassOklass_oop_size6kM_i_: constantPoolKlass.o; -text: .text%__1cTtypeArrayKlassKlassOklass_oop_size6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cOloadI_fregNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRtestI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_; -text: .text%__1cJLoadSNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cbIjava_security_AccessControlContextGcreate6FnOobjArrayHandle_inGHandle_pnGThread__pnHoopDesc__; -text: .text%__1cLstoreF0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUGenericGrowableArrayUclear_and_deallocate6M_v_; -text: .text%__1cIMinINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cNmaxI_eRegNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetInheritedAccessControlContext; -text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; -text: .text%__1cNmaxI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%JVM_NativePath; -text: .text%__1cOMacroAssemblerNflush_windows6M_v_; -text: .text%__1cNloadConL0NodeFclone6kM_pnENode__; -text: .text%__1cSsubD_regD_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVCallRuntimeDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_; -text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; -text: .text%__1cSReferenceProcessorHoops_do6MpnKOopClosure__v_; -text: .text%__1cHCompileKinit_start6MpnJStartNode__v_; -text: .text%__1cKg3RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cVinline_cache_regPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cWloadConI_x41f00000NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstorePNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIGraphKitbAgen_stub_or_native_wrapper6MpCpkcpnIciMethod_iiiii_v_; -text: .text%__1cQObjectStartArrayFreset6M_v_; -text: .text%__1cPconvI2D_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsHoops_do6FpnKOopClosure__v_; -text: .text%__1cQaddD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvF2INodeGOpcode6kM_i_; -text: .text%__1cJimmL0OperFclone6kM_pnIMachOper__; -text: .text%__1cVCallRuntimeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; -text: .text%__1cIPSOldGenPadjust_pointers6M_v_; -text: .text%__1cVCallRuntimeDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cPCallRuntimeNodeEhash6kM_I_: callnode.o; -text: .text%__1cICallNodeSis_CallInterpreter6kM_pknTCallInterpreterNode__: callnode.o; -text: .text%__1cOcmovPI_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIPSOldGenHcompact6M_v_; -text: .text%__1cMtlsLoadPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJvmSymbolsHoops_do6FpnKOopClosure_i_v_; -text: .text%__1cLcmpF_ccNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQregL_to_stkLNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cVCallRuntimeDirectNodeKmethod_set6Mi_v_; -text: .text%__1cKimmI11OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cSstkL_to_regD_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQcmovI_reg_gtNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQstkI_to_regINodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreP0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovIF_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovLL_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%jni_GetStaticMethodID: jni.o; -text: .text%__1cIUniverseWreinitialize_vtable_of6FpnFKlass_pnGThread__v_; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MipnMRegisterImpl__v_; -text: .text%__1cRtestI_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHnmethodbAmake_not_entrant_or_zombie6Mi_v_; -text: .text%__1cPconvF2D_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: methodDataKlass.o; -text: .text%__1cOcmovDF_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOPhaseIdealLoopKdo_peeling6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cOcmovLL_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%jint_cmp: parse2.o; -text: .text%__1cXjava_lang_boxing_objectJget_value6FpnHoopDesc_pnGjvalue__nJBasicType__; -text: .text%__1cNloadConL0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; -text: .text%__1cVMoveL2D_stack_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIMulDNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cIGraphKitTdprecision_rounding6MpnENode__2_; -text: .text%__1cSconvF2I_helperNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cHnmethodbCcan_not_entrant_be_converted6M_i_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: methodDataKlass.o; -text: .text%__1cJloadCNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOloadI_fregNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcmovLL_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLConvD2FNodeGOpcode6kM_i_; -text: .text%__1cIMulFNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cWloadConI_x41f00000NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKcmpOpFOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cLstoreC0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQregL_to_stkLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLRuntimeStubQnew_runtime_stub6FpkcpnKCodeBuffer_ipnJOopMapSet_i_p0_; -text: .text%__1cIAddFNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cLcastP2INodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cZregDHi_regDLo_to_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKo2RegPOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cOcmovIF_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovDF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQaddL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cZregDHi_regDLo_to_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_Close; -text: .text%__1cSmulD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKstoreFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSsubD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddP_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cXconvI2D_regDHi_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cTloadD_unalignedNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPPerfDataManagerUcreate_long_constant6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongConstant__; -text: .text%__1cOMacroAssemblerNget_vm_result6MpnMRegisterImpl__v_; -text: .text%__1cQsubF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerbIcompute_extra_locals_size_in_bytes6MpnMRegisterImpl_22_v_; -text: .text%__1cLcmpF_ccNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPMultiBranchDataScompute_cell_count6FpnOBytecodeStream__i_; -text: .text%__1cPorI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cUregI_to_stkLHi_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSxorI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvI2D_memNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerCbr6MnJAssemblerJCondition_in0BHPredict_rnFLabel__v_: templateTable_sparc.o; -text: .text%__1cQdivI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQdivL_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvI2D_memNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cLconvI2BNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSstkL_to_regD_2NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cISubFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cWloadConI_x43300000NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cWloadConI_x41f00000NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeGis_Con6kM_I_: loopnode.o; -text: .text%__1cOMacroAssemblerDbrx6MnJAssemblerJCondition_in0BHPredict_rnFLabel__v_: templateTable_sparc.o; -text: .text%__1cSmulI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOtailjmpIndNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cRInlineCacheBufferSic_destination_for6FpnKCompiledIC__pC_; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_: loopnode.o; -text: .text%__1cENodeJis_MemBar6kM_pknKMemBarNode__: classes.o; -text: .text%__1cbFunnecessary_membar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJSubFPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFParseNdo_instanceof6M_v_; -text: .text%__1cLconvI2BNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitOgen_instanceof6MpnENode_2_2_; -text: .text%__1cbFunnecessary_membar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRshrL_reg_imm6NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJloadBNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJloadDNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQdivI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIDivLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvI2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSmulD_regD_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOstackSlotLOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cUregI_to_stkLHi_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKConv2BNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQshlI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_; -text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_; -text: .text%__1cPconvD2F_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovPP_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsubF_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_NewObjectV: jni.o; -text: .text%__1cOcmovLI_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cCosHSolarisKmmap_chunk6FpcIii_2_; -text: .text%__1cXPartialSubtypeCheckNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%jni_EnsureLocalCapacity; -text: .text%__1cLstoreI0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIAddFNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cTunsafe_intrinsic_id6FpnNsymbolOopDesc_1_nNmethodOopDescLIntrinsicId__; -text: .text%__1cLConvD2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLConvD2INodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cKoopFactoryUnew_compiledICHolder6FnMmethodHandle_nLKlassHandle_pnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cPorL_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSCompiledStaticCallMset_to_clean6M_v_; -text: .text%__1cIDivDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cUregI_to_stkLHi_0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: instanceKlassKlass.o; -text: .text%__1cVcompiledICHolderKlassIallocate6MpnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cKVtableStubSpd_code_size_limit6Fi_i_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: instanceKlassKlass.o; -text: .text%__1cSaddD_regD_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPfieldDescriptorUdouble_initial_value6kM_d_; -text: .text%__1cQsubD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovPP_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableGbranch6Fii_v_; -text: .text%__1cSsubL_reg_reg_1NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cHAddressQrspec_from_rtype6MnJrelocInfoJrelocType_pC_nQRelocationHolder__: interpreter_sparc.o; -text: .text%__1cNSafePointNodeQpeek_monitor_obj6kM_pnENode__; -text: .text%__1cJloadFNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddI_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cSandL_reg_imm13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParsePdo_monitor_exit6M_v_; -text: .text%__1cSdivL_reg_reg_1NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cUregI_to_stkLHi_0NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cObranchConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cObranchConFNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cSconvF2I_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmembar_releaseNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cOloadI_fregNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cObranchConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPstoreI_FregNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLcmpD_ccNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadLNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cISubDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOMacroAssemblerCbr6MnJAssemblerJCondition_in0BHPredict_pCnJrelocInfoJrelocType__v_: stubGenerator_sparc.o; -text: .text%__1cSmulL_reg_reg_1NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_; -text: .text%__1cHCompile2t6MpnFciEnv_pF_pknITypeFunc_pCpkciiii_v_; -text: .text%__1cLResourceObj2n6FIn0APallocation_type__pv_; -text: .text%__1cOMacroAssemblerWbang_stack_with_offset6Mi_v_: interp_masm_sparc.o; -text: .text%__1cNSafePointNodeQpeek_monitor_box6kM_pnENode__; -text: .text%__1cUregI_to_stkLHi_1NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cQstkI_to_regINodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitIgen_stub6MpCpkciii_v_; -text: .text%__1cNTemplateTableOpatch_bytecode6FnJBytecodesECode_pnMRegisterImpl_4i_v_; -text: .text%__1cFTypeFFxdual6kM_pknEType__; -text: .text%__1cICmpFNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFKlassRoop_is_methodData6kM_i_: typeArrayKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: typeArrayKlass.o; -text: .text%__1cKVtableStubRpd_code_alignment6F_i_; -text: .text%__1cSstkL_to_regD_2NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSstkL_to_regD_0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMachNodeOmemory_operand6kM_pknIMachOper__: ad_sparc_misc.o; -text: .text%__1cKarrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cKloadUBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQaddD_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cTloadL_unalignedNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cINegDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cVMoveF2I_stack_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvI2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOcmovLL_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRorI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTloadL_unalignedNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cTloadL_unalignedNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKloadUBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFMutexbLwait_for_lock_blocking_implementation6MpnKJavaThread__v_; -text: .text%__1cXconvI2D_regDHi_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSvframeArrayElementPunpack_on_stack6MiipnFframe_ii_v_; -text: .text%__1cSconvF2I_helperNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerbFtest_invocation_counter_for_mdp6MpnMRegisterImpl_22rnFLabel__v_; -text: .text%__1cXconvI2D_regDHi_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSvframeArrayElementHfill_in6MpnOcompiledVFrame__v_; -text: .text%__1cFTypeDFxdual6kM_pknEType__; -text: .text%__1cSaddD_regD_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerbAincrement_backedge_counter6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerbBtest_backedge_count_for_osr6MpnMRegisterImpl_22_v_; -text: .text%__1cSmulL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcmovPI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKEntryPoint2t6M_v_; -text: .text%__1cTloadD_unalignedNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZregDHi_regDLo_to_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcompiledVFrameImonitors6kM_pnNGrowableArray4CpnLMonitorInfo____; -text: .text%__1cOcompiledVFrameLexpressions6kM_pnUStackValueCollection__; -text: .text%__1cHciKlassOsuper_of_depth6MI_p0_; -text: .text%__1cOcompiledVFrameGlocals6kM_pnUStackValueCollection__; -text: .text%__1cOcompiledVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cJimmP0OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cOcompiledVFrameHraw_bci6kM_i_; -text: .text%__1cQshrI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVMoveL2D_stack_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cWloadConI_x43300000NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_; -text: .text%__1cMTailJumpNodeKmatch_edge6kMI_I_; -text: .text%__1cSvframeArrayElementNon_stack_size6kMiiii_i_; -text: .text%__1cWloadConI_x41f00000NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cODeoptimizationbJupdate_method_data_from_interpreter6FnQmethodDataHandle_ii_v_; -text: .text%__1cIimmDOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cFframeZinterpreter_frame_set_mdx6Mi_v_; -text: .text%__1cOstackSlotLOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotLOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cTloadD_unalignedNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cTloadD_unalignedNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cIModLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJimmU5OperFclone6kM_pnIMachOper__; -text: .text%__1cTAbstractInterpreterPsize_activation6FpnNmethodOopDesc_iiiii_i_; -text: .text%__1cOtailjmpIndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSmulD_regD_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSstkL_to_regD_0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMloadConDNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovDF_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cTAbstractInterpreterQcontinuation_for6FpnNmethodOopDesc_pCiiri_3_; -text: .text%__1cUregI_to_stkLHi_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cINegFNodeGOpcode6kM_i_; -text: .text%__1cSsubD_regD_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTAbstractInterpreterRlayout_activation6FpnNmethodOopDesc_iiiipnFframe_4i_v_; -text: .text%__1cJScopeDescImonitors6M_pnNGrowableArray4CpnMMonitorValue____; -text: .text%__1cUregI_to_stkLHi_0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJScopeDescLexpressions6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cJScopeDescGlocals6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cKklassKlassMoop_is_klass6kM_i_: klassKlass.o; -text: .text%JVM_GetComponentType; -text: .text%__1cQdivI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%Unsafe_DefineClass1; -text: .text%__1cOcmovII_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLvframeArrayPunpack_to_stack6MrnFframe_i_v_; -text: .text%__1cKReflectionUarray_component_type6FpnHoopDesc_pnGThread__2_; -text: .text%__1cLConvF2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSvframeArrayElementDbci6kM_i_; -text: .text%__1cVMoveF2I_stack_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cICodeBlobZis_at_poll_or_poll_return6MpC_i_; -text: .text%__1cLvframeArrayIallocate6FpnKJavaThread_ipnNGrowableArray4CpnOcompiledVFrame___pnLRegisterMap_nFframe_9A9A9A_p0_; -text: .text%JVM_GetCPFieldModifiers; -text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; -text: .text%__1cLcastP2INodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cNnmethodLocker2t6MpC_v_; -text: .text%__1cNSharedRuntimebJcontinuation_for_implicit_exception6FpnKJavaThread_pCn0AVImplicitExceptionKind__3_; -text: .text%__1cPBytecode_invokeIis_valid6kM_i_: deoptimization.o; -text: .text%__1cODeoptimizationNuncommon_trap6FpnKJavaThread_i_pn0ALUnrollBlock__; -text: .text%__1cNloadConL0NodeGis_Con6kM_I_: ad_sparc_misc.o; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cODeoptimizationTuncommon_trap_inner6FpnKJavaThread_i_v_; -text: .text%__1cODeoptimizationScreate_vframeArray6FpnKJavaThread_nFframe_pnLRegisterMap__pnLvframeArray__; -text: .text%__1cODeoptimizationNunpack_frames6FpnKJavaThread_i_nJBasicType__; -text: .text%__1cODeoptimizationYfetch_unroll_info_helper6FpnKJavaThread__pn0ALUnrollBlock__; -text: .text%__1cZInterpreterMacroAssemblerXindex_check_without_pop6MpnMRegisterImpl_2i22_v_; -text: .text%__1cRSignatureIteratorKparse_type6M_i_; -text: .text%__1cPconvD2F_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHciKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cODeoptimizationRlast_frame_adjust6Fii_i_; -text: .text%__1cQsubD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_DefineClass; -text: .text%JVM_InvokeMethod; -text: .text%__1cOcmovPP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_NewDirectByteBuffer; -text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__: jni.o; -text: .text%__1cHBoxNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%jni_AllocObject: jni.o; -text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_; -text: .text%__1cFStateL_sub_Op_Box6MpknENode__v_; -text: .text%__1cTmembar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKCodeBufferVinsert_float_constant6Mf_pC_; -text: .text%__1cOMacroAssemblerCbr6MnJAssemblerJCondition_in0BHPredict_pCnJrelocInfoJrelocType__v_: jniFastGetField_sparc.o; -text: .text%__1cMnegD_regNodeIpipeline6kM_pknIPipeline__; -text: .text%Unsafe_AllocateInstance; -text: .text%__1cUBytecode_tableswitchGlength6M_i_: generateOopMap.o; -text: .text%__1cQComputeCallStackHdo_byte6M_v_: generateOopMap.o; -text: .text%__1cQstkI_to_regINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; -text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; -text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; -text: .text%__1cYinternal_word_RelocationMforce_target6MpC_v_: relocInfo.o; -text: .text%__1cJStubQdDueueKremove_all6M_v_; -text: .text%__1cMloadConFNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cETypeJis_finite6kM_i_; -text: .text%__1cPconvI2D_memNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLconvI2BNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cPorL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPorL_reg_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerGif_cmp6MnJAssemblerJCondition_i_v_; -text: .text%__1cZInterpreterMacroAssemblerLindex_check6MpnMRegisterImpl_2i22_v_; -text: .text%__1cOMacroAssemblerPcasx_under_lock6MpnMRegisterImpl_22pCi_v_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cQsubF_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshlI_reg_imm5NodeFclone6kM_pnENode__; -text: .text%__1cNloadRangeNodeFclone6kM_pnENode__; -text: .text%__1cSaddL_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovPI_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cKstfSSFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMloadConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKReflectionNinvoke_method6FpnHoopDesc_nGHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; -text: .text%__1cTmembar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvI2L_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovII_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; -text: .text%__1cJCmpF3NodeGOpcode6kM_i_; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceRefKlass.o; -text: .text%__1cLMoveL2DNodeGOpcode6kM_i_; -text: .text%__1cFKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cLTypeInstPtrLmirror_type6kM_pnGciType__; -text: .text%__1cOstackSlotIOperFclone6kM_pnIMachOper__; -text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__; -text: .text%__1cKExceptionsNnew_exception6FpnGThread_nMsymbolHandle_pkcnGHandle_6_6_; -text: .text%__1cOcmovII_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerHbr_null6MpnMRegisterImpl_inJAssemblerHPredict_rnFLabel__v_; -text: .text%__1cFParseScan_rerun_bytecode6M_i_; -text: .text%__1cQshrL_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKExceptionsNnew_exception6FpnGThread_pnNsymbolOopDesc_pkc_nGHandle__; -text: .text%__1cIAddFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKstfSSFNodeHis_Copy6kM_I_: ad_sparc_misc.o; -text: .text%__1cHdom_lca6FpnFBlock_1_1_: gcm.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: objArrayKlass.o; -text: .text%JVM_NewArray; -text: .text%__1cHOrLNodeGOpcode6kM_i_; -text: .text%__1cLStrCompNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cGThreadRis_Watcher_thread6kM_i_: thread.o; -text: .text%__1cLOopMapCache2t6M_v_; -text: .text%__1cNTemplateTableHconvert6F_v_; -text: .text%__1cOcmovDF_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerFpop_l6MpnMRegisterImpl__v_; -text: .text%__1cOcmovLI_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSMachBreakpointNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeQcreate_exception6FpnKJavaThread_pc3_v_; -text: .text%__1cFParseWload_interpreter_state6MpnENode_2_v_; -text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cKPSYoungGenKprecompact6M_v_; -text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%__1cSconvD2I_helperNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cMnegF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsLgc_prologue6F_v_; -text: .text%__1cHThreadsLgc_epilogue6F_v_; -text: .text%__1cPconvI2L_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPconvD2I_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; -text: .text%__1cUParallelScavengeHeapHcollect6MnHGCCauseFCause__v_; -text: .text%__1cJCodeCacheMdo_unloading6FpnRBoolObjectClosure_pnKOopClosure_iri_v_; -text: .text%__1cMStartOSRNodeScalling_convention6kMpnLRegPair_I_v_; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: callnode.o; -text: .text%__1cRCardTableModRefBSEis_a6MnKBarrierSetEName__i_: cardTableExtension.o; -text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; -text: .text%__1cVLoaderConstraintTableYpurge_loader_constraints6MpnRBoolObjectClosure__v_; -text: .text%__1cVLoaderConstraintTableYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cLconvP2BNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryMdo_unloading6FpnRBoolObjectClosure_pnKOopClosure__i_; -text: .text%__1cIciMethodVget_osr_flow_analysis6Mi_pnKciTypeFlow__; -text: .text%__1cPconvD2F_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvD2I_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cLMoveF2INodeGOpcode6kM_i_; -text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; -text: .text%__1cSReferenceProcessorPoops_do_statics6FpnKOopClosure__v_; -text: .text%__1cMStartOSRNodeKosr_domain6F_pknJTypeTuple__; -text: .text%__1cVVM_ParallelGCSystemGCEname6kM_pkc_: vm_operations.o; -text: .text%__1cVVM_ParallelGCSystemGCEdoit6M_v_; -text: .text%__1cVVM_ParallelGCSystemGC2t6MI_v_; -text: .text%__1cJArgumentsQPropertyList_add6FppnOSystemProperty_2_v_; -text: .text%__1cOMacroAssemblerPbreakpoint_trap6M_v_; -text: .text%__1cJBasicLockHmove_to6MpnHoopDesc_p0_v_; -text: .text%__1cJMarkSweepNrestore_marks6F_v_; -text: .text%__1cJMarkSweepMadjust_marks6F_v_; -text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_; -text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; -text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_; -text: .text%__1cMStubCodeMark2T6M_v_; -text: .text%__1cQAbstractCompilerMsupports_osr6M_i_: c2compiler.o; -text: .text%__1cNCallGeneratorHfor_osr6FpnIciMethod_i_p0_; -text: .text%__1cLClassLoaderSget_system_package6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cJPSPermGenKprecompact6M_v_; -text: .text%JVM_GC; -text: .text%__1cIPSOldGenKprecompact6M_v_; -text: .text%__1cUPSMarkSweepDecoratorbIset_destination_decorator_perm_gen6F_v_; -text: .text%__1cUPSMarkSweepDecoratorbHset_destination_decorator_tenured6F_v_; -text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cKDictionaryMdo_unloading6MpnRBoolObjectClosure_pnKOopClosure__i_; -text: .text%__1cLPSMarkSweepQinvoke_no_policy6Fpii_v_; -text: .text%__1cLPSMarkSweepGinvoke6Fpii_v_; -text: .text%__1cQmulL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cWloadConI_x43300000NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cUPSAdaptiveSizePolicyUmajor_collection_end6MInHGCCauseFCause__v_; -text: .text%__1cUPSAdaptiveSizePolicyWmajor_collection_begin6M_v_; -text: .text%__1cWloadConI_x41f00000NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; -text: .text%__1cJPSPermGenQcompute_new_size6MI_v_; -text: .text%__1cKPSYoungGenHcompact6M_v_; -text: .text%JVM_GetSystemPackage; -text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; -text: .text%__1cKPSYoungGenPadjust_pointers6M_v_; -text: .text%__1cQUncommonTrapBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cSDeoptimizationBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cNExceptionBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cFKlassMoop_is_klass6kM_i_: objArrayKlass.o; -text: .text%__1cJCodeCacheHoops_do6FpnKOopClosure__v_; -text: .text%__1cJCodeCacheLgc_prologue6F_v_; -text: .text%__1cJCodeCacheLgc_epilogue6F_v_; -text: .text%__1cIXorINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNStubGeneratorFalign6Mi_v_: stubGenerator_sparc.o; -text: .text%__1cQregL_to_stkLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLcastP2INodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKcmpOpFOperKless_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cOcmovPI_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmulL_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJCMoveNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cQdivD_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmulL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovIF_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKCMoveDNodeGOpcode6kM_i_; -text: .text%__1cJLoadDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIMulFNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cNStubGeneratorLstub_prolog6MpnMStubCodeDesc__v_: stubGenerator_sparc.o; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: klassKlass.o; -text: .text%__1cQaddL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%jni_GetStringRegion: jni.o; -text: .text%JVM_RawMonitorCreate; -text: .text%__1cJloadLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMloadConFNodeGis_Con6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cMmatch_option6FpknMJavaVMOption_ppkc5i_i_: arguments.o; -text: .text%__1cNloadConPCNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOstackSlotPOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotPOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotPOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; -text: .text%__1cSaddP_reg_imm13NodeFclone6kM_pnENode__; -text: .text%__1cOstackSlotFOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%JVM_Sleep; -text: .text%__1cHBoxNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cObox_handleNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvL2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cLstoreF0NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceRefKlass.o; -text: .text%__1cQstkI_to_regFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceRefKlass.o; -text: .text%__1cRorI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cVMoveF2I_stack_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOstackSlotLOperFclone6kM_pnIMachOper__; -text: .text%Unsafe_CompareAndSwapInt; -text: .text%JVM_Lseek; -text: .text%__1cHAddressQrspec_from_rtype6MnJrelocInfoJrelocType_pC_nQRelocationHolder__: templateTable_sparc.o; -text: .text%__1cNloadRangeNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPconvD2F_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRComputeEntryStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cPconvF2D_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubL_reg_regNodeFclone6kM_pnENode__; -text: .text%__1cQmulI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQmulF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegF_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSconvF2I_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRmethodDataOopDescRbci_to_extra_data6Mii_pnLProfileData__; -text: .text%__1cOcmovLI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPMultiBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cQregL_to_stkLNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubD_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQregP_to_stkPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvI2D_memNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQaddL_reg_regNodeFclone6kM_pnENode__; -text: .text%__1cZInterpreterMacroAssemblerQtest_mdp_data_at6MipnMRegisterImpl_rnFLabel_2_v_; -text: .text%__1cVMoveL2D_stack_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQstkI_to_regINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__: loopnode.o; -text: .text%__1cPconvD2F_regNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovLI_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOLibraryCallKitXinline_string_compareTo6M_i_; -text: .text%__1cQdivI_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cGciType2t6MnJBasicType__v_; -text: .text%__1cOMacroAssemblerKbr_notnull6MpnMRegisterImpl_inJAssemblerHPredict_rnFLabel__v_; -text: .text%__1cJLoadBNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cENodeHis_Call6M_pnICallNode__: machnode.o; -text: .text%__1cLOptoRuntimeRnew_objArray_Type6F_pknITypeFunc__; -text: .text%__1cQaddF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cETypeEmake6Fn0AFTYPES__pk0_; -text: .text%__1cSconvF2I_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsarL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSstring_compareNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_GetEnv; -text: .text%__1cJloadDNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQstkI_to_regINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSstring_compareNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_: interpreterRT_sparc.o; -text: .text%Unsafe_GetNativeByte; -text: .text%JVM_NanoTime; -text: .text%__1cCosNjavaTimeNanos6F_x_; -text: .text%__1cOMacroAssemblerOrestore_thread6MkpnMRegisterImpl__v_; -text: .text%__1cVcompiledICHolderKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cQandL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIimmFOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cHThreadsLnmethods_do6F_v_; -text: .text%__1cKcmpOpFOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cICodeBlobFflush6M_v_; -text: .text%__1cZInterpreterMacroAssemblerFpop_d6MpnRFloatRegisterImpl__v_; -text: .text%__1cFParseMdo_anewarray6M_v_; -text: .text%__1cSdivL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_CallVoidMethod: jni.o; -text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; -text: .text%__1cObranchConFNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cFParseOdo_tableswitch6M_v_; -text: .text%__1cOcmovIF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvI2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSaddL_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLstoreC0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%Unsafe_GetNativeFloat; -text: .text%__1cOMacroAssemblerGmembar6MnJAssemblerQMembar_mask_bits__v_: templateTable_sparc.o; -text: .text%__1cNTemplateTableXjvmti_post_field_access6Fiii_v_; -text: .text%__1cUBytecode_tableswitchGlength6M_i_: methodLiveness.o; -text: .text%__1cbCAbstractInterpreterGeneratorbBgenerate_result_handler_for6MnJBasicType__pC_; -text: .text%__1cOstackSlotFOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cHnmethodFflush6M_v_; -text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; -text: .text%__1cKo2RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQregI_to_stkINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMloadConFNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cMregD_lowOperFclone6kM_pnIMachOper__; -text: .text%__1cJloadFNodeFclone6kM_pnENode__; -text: .text%__1cJEventMark2t6MpkcE_v_: nmethod.o; -text: .text%__1cCosNcommit_memory6FpcII_i_; -text: .text%__1cJloadLNodeFclone6kM_pnENode__; -text: .text%__1cParrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cSaddI_reg_imm13NodeFclone6kM_pnENode__; -text: .text%__1cFVTuneOdelete_nmethod6FpnHnmethod__v_; -text: .text%__1cLOptoRuntimeNgenerate_stub6FpnFciEnv_pF_pknITypeFunc_pCpkciiii_8_; -text: .text%__1cWloadConI_x43300000NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParseQdo_monitor_enter6M_v_; -text: .text%__1cPorL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreC0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPSPromotionLABRunallocate_object6MpnHoopDesc__i_; -text: .text%JVM_FindPrimitiveClass; -text: .text%__1cVMoveL2D_stack_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; -text: .text%__1cPjava_lang_ClassYcreate_basic_type_mirror6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cSmodL_reg_imm13NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cRshrI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cSsubL_reg_reg_2NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUmulL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPconvI2F_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cOstackSlotFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cUdivL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbCAbstractInterpreterGeneratorZgenerate_continuation_for6MnITosState__pC_; -text: .text%__1cRSignatureIteratorHiterate6M_v_; -text: .text%__1cOcmovLL_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLcastP2INodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFKlassMoop_is_klass6kM_i_: constantPoolKlass.o; -text: .text%__1cJname2type6Fpkc_nJBasicType__; -text: .text%__1cSmulL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cbCAbstractInterpreterGeneratorZgenerate_safept_entry_for6MnITosState_pC_2_; -text: .text%__1cLcastP2INodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPBytecode_invokeLresult_type6kMpnGThread__nJBasicType__; -text: .text%__1cLCastP2INodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%__1cOloadConL13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmodL_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFTypeFJis_finite6kM_i_; -text: .text%__1cKcmpOpFOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%__1cIDivDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOMacroAssemblerKget_thread6M_v_; -text: .text%__1cPconvI2F_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovDF_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovIF_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconvI2F_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSaddD_regD_regDNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKVtableStub2n6FIi_pv_; -text: .text%__1cNloadConPCNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWloadConI_x41f00000NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKScopeValueLis_location6kM_i_: debugInfo.o; -text: .text%__1cLVtableStubsLcreate_stub6FiipnNmethodOopDesc__pC_; -text: .text%__1cLOptoRuntimebBhandle_wrong_method_ic_miss6FpnKJavaThread__pC_; -text: .text%__1cSmulD_regD_regDNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_; -text: .text%__1cZregDHi_regDLo_to_regDNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSsubD_regD_regDNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLVtableStubsOis_entry_point6FpC_i_; -text: .text%__1cOtypeArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlass.o; -text: .text%__1cPconvD2F_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIciMethodMnative_entry6M_pC_; -text: .text%__1cMciArrayKlassOis_array_klass6M_i_: ciObjArrayKlass.o; -text: .text%__1cLVtableStubsScreate_vtable_stub6Fii_pnKVtableStub__; -text: .text%__1cVMoveF2I_stack_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPPerfDataManagerWcreate_string_variable6FnJCounterNS_pkci3pnGThread__pnSPerfStringVariable__; -text: .text%__1cQAbstractCompilerPsupports_native6M_i_: c2compiler.o; -text: .text%__1cPorL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvD2F_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIciSymbolHas_utf86M_pkc_; -text: .text%__1cQandI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cMnegD_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cFStateO_sub_Op_CMoveP6MpknENode__v_; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_: typeArrayKlass.o; -text: .text%__1cSconvF2I_helperNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulD_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cUregI_to_stkLHi_1NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerZtotal_frame_size_in_bytes6Mi_i_; -text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; -text: .text%__1cKCompiledICOis_megamorphic6kM_i_; -text: .text%__1cVMoveF2I_stack_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; -text: .text%Unsafe_StaticFieldOffset; -text: .text%__1cQmulI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableXresolve_cache_and_index6FipnMRegisterImpl_2_v_; -text: .text%__1cQaddI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovLI_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetClassContext; -text: .text%__1cHCompile2t6MpnFciEnv_pnKC2Compiler_pnIciMethod__v_; -text: .text%Unsafe_StaticFieldBaseFromField; -text: .text%Unsafe_EnsureClassInitialized; -text: .text%__1cOcmovIF_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pCi_v_; -text: .text%__1cKCodeBufferQalloc_relocation6MI_v_; -text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_; -text: .text%__1cWloadConI_x43300000NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSstkL_to_regD_1NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cUregI_to_stkLHi_0NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%Unsafe_GetObjectVolatile; -text: .text%__1cFKlassPoop_is_instance6kM_i_: objArrayKlassKlass.o; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2t6M_v_; -text: .text%__1cKstoreFNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFKlassMoop_is_array6kM_i_: objArrayKlassKlass.o; -text: .text%__1cVMoveL2D_stack_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJLoadLNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cSmulL_reg_imm13NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cHMulNodeGis_Mul6kM_pk0_: classes.o; -text: .text%__1cNSharedRuntimeVhandle_ic_miss_helper6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cOloadConL13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cKLoadPCNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_; -text: .text%__1cGEventsDlog6FpkcE_v_: compiledIC.o; -text: .text%__1cLstoreF0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPconvI2D_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cZInterpreterMacroAssemblerNsuper_call_VM6MpnMRegisterImpl_22pC22i_v_; -text: .text%__1cNloadConPCNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cETypeFxdual6kM_pk0_; -text: .text%__1cJOopMapSetQsingular_oop_map6M_pnGOopMap__; -text: .text%__1cKimmU13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cbCAbstractInterpreterGeneratorXbang_stack_shadow_pages6Mi_v_; -text: .text%__1cZInterpreterMacroAssemblerSnotify_method_exit6MinITosState__v_; -text: .text%__1cSaddL_reg_imm13NodeFclone6kM_pnENode__; -text: .text%__1cZInterpreterMacroAssemblerTnotify_method_entry6M_v_; -text: .text%__1cZInterpreterMacroAssemblerbCincrement_invocation_counter6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerQaccess_local_int6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerbDunlock_if_synchronized_method6MnITosState_ii_v_; -text: .text%__1cOtypeArrayKlassMcreate_klass6FnJBasicType_ipnGThread__pnMklassOopDesc__; -text: .text%__1cIGraphKitSgen_native_wrapper6MpnIciMethod__v_; -text: .text%__1cPconvI2L_regNodeFclone6kM_pnENode__; -text: .text%__1cZInterpreterMacroAssemblerWempty_expression_stack6M_v_; -text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_; -text: .text%__1cUInterpreterGeneratorZgenerate_counter_overflow6MirnFLabel__v_; -text: .text%__1cOcmovIL_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUInterpreterGeneratorbAgenerate_run_compiled_code6M_v_; -text: .text%__1cOCompilerThreadSis_Compiler_thread6kM_i_: thread.o; -text: .text%__1cUInterpreterGeneratorUgenerate_fixed_frame6Mi_v_; -text: .text%__1cCosHSolarisSset_signal_handler6Fiii_v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkci_pc_; -text: .text%__1cLOptoRuntimeRresolve_call_Type6F_pknITypeFunc__; -text: .text%__1cOtailjmpIndNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNMemoryManagerIadd_pool6MpnKMemoryPool__v_; -text: .text%__1cCosEstat6FpkcpnEstat__i_; -text: .text%__1cQregF_to_stkINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRComputeEntryStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cRComputeEntryStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cMMonitorChunk2t6Mi_v_; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cOPhaseIdealLoopJclone_iff6MpnHPhiNode_pnNIdealLoopTree__pnIBoolNode__; -text: .text%__1cENodeMis_SafePoint6M_pnNSafePointNode__: callnode.o; -text: .text%__1cKReflectionVis_same_class_package6FpnMklassOopDesc_2_i_; -text: .text%__1cQComputeCallStackIdo_float6M_v_: generateOopMap.o; -text: .text%__1cMMonitorValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cPciObjArrayKlassJmake_impl6FpnHciKlass__p0_; -text: .text%__1cPorL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOptoRuntimeMrethrow_Type6F_pknITypeFunc__; -text: .text%__1cUBytecode_tableswitchGlength6M_i_: methodDataOop.o; -text: .text%jni_SetStaticObjectField: jni.o; -text: .text%jni_RegisterNatives: jni.o; -text: .text%__1cOMacroAssemblerMload_address6MrnHAddress_i_v_: templateTable_sparc.o; -text: .text%__1cFframebLprevious_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; -text: .text%__1cQshlL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetClassDeclaredFields; -text: .text%__1cCosMuser_handler6F_pv_; -text: .text%JVM_IsSameClassPackage; -text: .text%__1cLas_TosState6FnJBasicType__nITosState__: interpreter.o; -text: .text%__1cKMemoryPoolLadd_manager6MpnNMemoryManager__v_; -text: .text%__1cKJavaThreadRadd_monitor_chunk6MpnMMonitorChunk__v_; -text: .text%__1cKJavaThreadUremove_monitor_chunk6MpnMMonitorChunk__v_; -text: .text%__1cLcastP2INodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVMoveL2D_stack_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableGiconst6Fi_v_; -text: .text%__1cLConvF2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%JVM_LoadLibrary; -text: .text%JVM_IsSupportedJNIVersion; -text: .text%Unsafe_ObjectFieldOffset; -text: .text%__1cZInterpreterMacroAssemblerYtest_method_data_pointer6MrnFLabel__v_; -text: .text%__1cNTemplateTableHif_0cmp6Fn0AJCondition__v_; -text: .text%__1cHCompileRget_Method_invoke6M_pnIciMethod__; -text: .text%__1cZInterpreterMacroAssemblerSget_cpool_and_tags6MpnMRegisterImpl_2_v_; -text: .text%__1cIAddDNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cHCompileWget_MethodAccessorImpl6M_pnPciInstanceKlass__; -text: .text%__1cNTemplateTableHif_icmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableH_return6FnITosState__v_; -text: .text%__1cOPSVirtualSpaceJexpand_by6MI_i_; -text: .text%__1cHOrLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKimmP13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLConvD2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSObjectSynchronizerJjni_enter6FnGHandle_pnGThread__v_; -text: .text%__1cHnmethodbJcontinuation_for_implicit_exception6MpC_1_; -text: .text%__1cNSharedRuntimeEdrem6Fdd_d_; -text: .text%__1cQstkI_to_regINodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cUInterpreterGeneratorbEgenerate_asm_interpreter_entry6Mi_pC_; -text: .text%__1cSstkL_to_regD_2NodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cSstkL_to_regD_1NodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cIAddDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cSstkL_to_regD_0NodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cPstoreI_FregNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cTloadD_unalignedNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLVtableStubsIcontains6FpC_i_; -text: .text%__1cOloadI_fregNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLconvP2BNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUInterpreterGeneratorbCgenerate_check_compiled_code6MrnFLabel__v_; -text: .text%__1cUInterpreterGeneratorbDgenerate_stack_overflow_check6MpnMRegisterImpl_22_v_; -text: .text%__1cCosZvm_allocation_granularity6F_i_; -text: .text%__1cMTailJumpNodeGOpcode6kM_i_; -text: .text%__1cPconvF2D_regNodeFclone6kM_pnENode__; -text: .text%__1cOLibraryCallKitbDis_method_invoke_or_aux_frame6MpnIJVMState__i_; -text: .text%__1cTloadD_unalignedNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle_pnIciSymbol__v_; -text: .text%__1cJMemRegion2t6M_v_: cardTableModRefBS.o; -text: .text%__1cSestimate_path_freq6FpnENode__f_: loopnode.o; -text: .text%__1cCosOreserve_memory6FIpc_1_; -text: .text%__1cSObjectSynchronizerIjni_exit6FpnHoopDesc_pnGThread__v_; -text: .text%__1cSmulL_reg_imm13NodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNRegisterSaverWrestore_live_registers6FpnOMacroAssembler__v_; -text: .text%__1cKstfSSFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cLTypeInstPtrOxmeet_unloaded6kMpk0_2_; -text: .text%__1cENodeHis_AddP6M_pnIAddPNode__: subnode.o; -text: .text%__1cRtestI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cCosNcommit_memory6FpcI_i_; -text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_pnUPerfLongSampleHelper__v_; -text: .text%__1cWImplicitExceptionTable2t6MpknHnmethod__v_; -text: .text%__1cWImplicitExceptionTableCat6kMI_I_; -text: .text%__1cFParseVcatch_call_exceptions6MrnYciExceptionHandlerStream__v_; -text: .text%jni_GetJavaVM; -text: .text%__1cOcmovDF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_MonitorEnter: jni.o; -text: .text%__1cQConstantIntValuePis_constant_int6kM_i_: debugInfo.o; -text: .text%jni_MonitorExit: jni.o; -text: .text%__1cOMacroAssemblerDret6Mi_v_: templateTable_sparc.o; -text: .text%__1cLConvL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cULinearLeastSquareFit2t6MI_v_; -text: .text%__1cQdivL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; -text: .text%__1cIciObjectTis_type_array_klass6M_i_: ciObjArrayKlass.o; -text: .text%__1cOLibraryCallKitbBinline_native_currentThread6M_i_; -text: .text%__1cIciObjectMis_classless6kM_i_: ciMethod.o; -text: .text%__1cTGeneratePairingInfoOreport_results6kM_i_: ciMethod.o; -text: .text%__1cNReservedSpaceKfirst_part6MIii_0_; -text: .text%__1cNReservedSpace2t6MI_v_; -text: .text%__1cSCardTableExtensionVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cOloadI_fregNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cIAddDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJloadFNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKConv2BNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvI2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSconvD2I_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_Throw: jni.o; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC_v_; -text: .text%__1cFTypeFGis_nan6kM_i_; -text: .text%__1cLMoveL2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKReturnNodeUdepends_only_on_test6kM_i_: classes.o; -text: .text%__1cIDivINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cISubDNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cPstoreI_FregNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cINegFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQciByteCodeStreamXget_method_holder_index6M_i_; -text: .text%__1cOLibraryCallKitXgenerate_current_thread6MrpnENode__2_; -text: .text%__1cOMacroAssemblerEfneg6MnRFloatRegisterImplFWidth_p13_v_; -text: .text%__1cXNativeSignatureIteratorJdo_double6M_v_: interpreterRT_sparc.o; -text: .text%__1cRtestI_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNSpaceCounters2t6MpkciIpnMMutableSpace_pnSGenerationCounters__v_; -text: .text%__1cLcmpF_ccNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; -text: .text%jni_SetObjectField: jni.o; -text: .text%__1cISubDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cISubFNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__; -text: .text%__1cHThreadsDadd6FpnKJavaThread_i_v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_; -text: .text%__1cNStubGeneratorYgenerate_throw_exception6MpkcpCi_3_: stubGenerator_sparc.o; -text: .text%bootstrap_flush_windows; -text: .text%__1cMloadConPNodeGis_Con6kM_I_: ad_sparc_misc.o; -text: .text%__1cSdivL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerbCverify_oop_or_return_address6MpnMRegisterImpl_2_v_; -text: .text%__1cFStateO_sub_Op_Conv2B6MpknENode__v_; -text: .text%__1cQmodL_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNRegisterSaverTsave_live_registers6FpnOMacroAssembler_ipi_pnGOopMap__; -text: .text%__1cSmulL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: symbolKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: symbolKlass.o; -text: .text%__1cIDivFNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cKMemoryPool2t6Mpkcn0AIPoolType_IIii_v_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_int_field06FnJBasicType__pC_; -text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_; -text: .text%__1cSsubL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_double6M_v_; -text: .text%__1cPciInstanceKlassbDcompute_shared_is_initialized6M_i_; -text: .text%__1cQmulD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%Unsafe_AllocateMemory; -text: .text%__1cSandL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetLastErrorString; -text: .text%__1cQmodL_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_; -text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; -text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_; -text: .text%__1cPstoreI_FregNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableEdop26Fn0AJOperation__v_; -text: .text%__1cSandI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNTemplateTablebAload_invoke_cp_cache_entry6FipnMRegisterImpl_22ii_v_; -text: .text%__1cMnegD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNciMethodKlassEmake6F_p0_; -text: .text%__1cOLibraryCallKitZinline_native_Class_query6MnIciMethodLIntrinsicId__i_; -text: .text%__1cNTemplateTableGlstore6Fi_v_; -text: .text%__1cOLibraryCallKitbNinline_native_Reflection_getCallerClass6M_i_; -text: .text%__1cLConvF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQaddI_reg_regNodeFclone6kM_pnENode__; -text: .text%__1cPBytecode_invokeIis_valid6kM_i_: frame.o; -text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; -text: .text%__1cRcompL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLconvI2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLConvD2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl_2_v_; -text: .text%__1cSconvD2I_helperNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvI2D_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsubI_zero_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLClassLoaderXcreate_class_path_entry6FpcnEstat_ppnOClassPathEntry__v_; -text: .text%__1cKstfSSFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOClassPathEntry2t6M_v_; -text: .text%__1cZInterpreterMacroAssemblerRprofile_checkcast6MipnMRegisterImpl_2_v_; -text: .text%__1cINegDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cZInterpreterMacroAssemblerQaccess_local_ptr6MpnMRegisterImpl_2_v_; -text: .text%__1cOloadConL13NodeFclone6kM_pnENode__; -text: .text%__1cNTemplateTableGistore6Fi_v_; -text: .text%__1cIRetTableUfind_jsrs_for_target6Mi_pnNRetTableEntry__; -text: .text%__1cPconvL2I_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cUcompI_iReg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsarI_reg_imm5NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cSstkL_to_regD_2NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableGastore6Fi_v_; -text: .text%__1cNTemplateTableZload_field_cp_cache_entry6FipnMRegisterImpl_22i_v_; -text: .text%__1cOMacroAssemblerMload_address6MrnHAddress_i_v_: assembler_sparc.o; -text: .text%__1cIRetTableHadd_jsr6Mii_v_; -text: .text%__1cMnegF_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulI_reg_regNodeFclone6kM_pnENode__; -text: .text%__1cQregF_to_stkINodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRComputeEntryStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cPorL_reg_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulD_reg_regNodeFclone6kM_pnENode__; -text: .text%__1cNTemplateTableGdstore6Fi_v_; -text: .text%__1cNTemplateTableGfstore6Fi_v_; -text: .text%jni_CallStaticObjectMethod: jni.o; -text: .text%__1cPconvD2F_regNodeFclone6kM_pnENode__; -text: .text%__1cbCAbstractInterpreterGeneratorbHgenerate_exception_handler_common6Mpkc2i_pC_; -text: .text%__1cLconvP2BNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLconvP2BNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovLL_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQandI_reg_regNodeFclone6kM_pnENode__; -text: .text%__1cMnegD_regNodeFclone6kM_pnENode__; -text: .text%__1cOMacroAssemblerJfloat_cmp6MiipnRFloatRegisterImpl_2pnMRegisterImpl__v_; -text: .text%__1cLconvI2BNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cODeoptimizationLUnrollBlockOsize_of_frames6kM_i_; -text: .text%__1cFKlassNoop_is_symbol6kM_i_: instanceRefKlass.o; -text: .text%__1cCosGsignal6Fipv_1_; -text: .text%__1cQaddD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cISubDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cISubFNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cISubFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNflagsRegLOperFclone6kM_pnIMachOper__; -text: .text%__1cNTemplateTableFlload6Fi_v_; -text: .text%__1cNTemplateTableFiload6Fi_v_; -text: .text%__1cJcmpOpOperFclone6kM_pnIMachOper__; -text: .text%__1cMOopMapStream2t6MpnGOopMap_i_v_; -text: .text%__1cFTypeFFempty6kM_i_; -text: .text%__1cLconvP2BNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVMoveF2I_stack_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC22_v_; -text: .text%__1cOtypeArrayKlassQarray_klass_impl6MipnGThread__pnMklassOopDesc__; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC2_v_; -text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; -text: .text%__1cKstfSSFNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapTret_jump_targets_do6MpnOBytecodeStream_pFp0ipi_vi4_v_; -text: .text%__1cPconvI2D_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%Unsafe_SetMemory; -text: .text%__1cSstkL_to_regD_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKstfSSFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_x6MnJAssemblerJCondition_pCpnMRegisterImpl__v_; -text: .text%__1cVMoveF2I_stack_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHTypePtrKadd_offset6kMi_pk0_; -text: .text%__1cOcmovLI_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadConL0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKg1RegPOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cOcmovPI_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovDF_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableJfloat_cmp6Fii_v_; -text: .text%__1cQsubF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSstkL_to_regD_1NodeFclone6kM_pnENode__; -text: .text%__1cFParseRjump_if_true_fork6MpnGIfNode_ii_v_; -text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_icc6MnJAssemblerJCondition_pCpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableFfload6Fi_v_; -text: .text%__1cFParsePdo_lookupswitch6M_v_; -text: .text%__1cNTemplateTableFdload6Fi_v_; -text: .text%__1cNgen_new_frame6FpnOMacroAssembler_i_v_: runtime_sparc.o; -text: .text%__1cKstfSSFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cINegDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableFaload6Fi_v_; -text: .text%__1cRMachSpillCopyNodeHsize_of6kM_I_: ad_sparc.o; -text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; -text: .text%__1cOGenerateOopMapRdo_multianewarray6Mii_v_; -text: .text%__1cQOopMapCacheEntryPfill_for_native6M_v_; -text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%jni_CallStaticObjectMethodV: jni.o; -text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_; -text: .text%__1cIDivDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cMloadConDNodeGis_Con6kM_I_: ad_sparc_misc.o; -text: .text%__1cJMemRegionFminus6kMk0_0_; -text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; -text: .text%__1cJArgumentsMbuild_string6Fppcpkc_v_; -text: .text%__1cSInterpreterRuntimebKthrow_ArrayIndexOutOfBoundsException6FpnKJavaThread_pci_v_; -text: .text%__1cOtailjmpIndNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cNMemoryManager2t6M_v_; -text: .text%__1cFStatebB_sub_Op_PartialSubtypeCheck6MpknENode__v_; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl_22_v_; -text: .text%__1cVMoveL2D_stack_regNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cJArgumentsMadd_property6Fpkc_i_; -text: .text%__1cOtailjmpIndNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSObjectSynchronizerHinflate6FpnHoopDesc__pnNObjectMonitor__; -text: .text%__1cFStateM_sub_Op_DivI6MpknENode__v_; -text: .text%__1cCosHSolarisOis_sig_ignored6Fi_i_; -text: .text%__1cUPSGenerationCounters2t6MpkciipnOPSVirtualSpace__v_; -text: .text%__1cCosFyield6F_v_; -text: .text%__1cLOptoRuntimeVgenerate_handler_blob6FpCi_pnNSafepointBlob__; -text: .text%__1cKstfSSFNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerDset6MipnMRegisterImpl_rknQRelocationHolder__v_: runtime_sparc.o; -text: .text%__1cQsubD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXNativeSignatureIteratorIdo_float6M_v_: interpreterRT_sparc.o; -text: .text%__1cOtailjmpIndNodeGpinned6kM_i_: ad_sparc_misc.o; -text: .text%__1cIDivDNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFParseRdo_multianewarray6M_v_; -text: .text%__1cLOptoRuntimeTmultianewarray_Type6Fi_pknITypeFunc__; -text: .text%__1cZInterpreterMacroAssemblerRget_constant_pool6MpnMRegisterImpl__v_; -text: .text%__1cXPartialSubtypeCheckNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOcmovIF_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNFingerprinterLfingerprint6M_X_: oopMapCache.o; -text: .text%__1cLMoveF2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSconvI2D_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVMoveF2I_stack_regNodeZcheck_for_anti_dependence6kM_i_: ad_sparc_misc.o; -text: .text%__1cLstoreF0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerLlock_object6MpnMRegisterImpl_2_v_; -text: .text%__1cPstoreI_FregNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSCommandLineFlagsExJboolAtPut6FnXCommandLineFlagWithType_i_v_; -text: .text%__1cSCommandLineFlagsExKis_default6FnPCommandLineFlag__i_; -text: .text%__1cOcmovLL_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_i2_v_; -text: .text%__1cRNativeInstructionPis_ic_miss_trap6M_i_; -text: .text%__1cNSafepointBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cMciArrayKlassRbase_element_type6M_pnGciType__; -text: .text%JVM_GetInterfaceVersion; -text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_2222rnFLabel__v_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableGfconst6Fi_v_; -text: .text%__1cOMacroAssemblerDbrx6MnJAssemblerJCondition_in0BHPredict_rnFLabel__v_: stubGenerator_sparc.o; -text: .text%__1cOCompilerThreadbCis_hidden_from_external_view6kM_i_: thread.o; -text: .text%__1cGThreadbFinitialize_thread_local_storage6M_v_; -text: .text%__1cOcmovPI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGThreadbArecord_stack_base_and_size6M_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_; -text: .text%JVM_RegisterSignal; -text: .text%JVM_FindSignal; -text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pIi_v_: oopMapCache.o; -text: .text%jio_vsnprintf; -text: .text%__1cQshrL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerVincrement_mdp_data_at6MpnMRegisterImpl_i22_v_; -text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_222_v_; -text: .text%__1cNReservedSpaceJlast_part6MI_0_; -text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; -text: .text%__1cOPSVirtualSpace2t6MnNReservedSpace_I_v_; -text: .text%__1cFTypeDFempty6kM_i_; -text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o; -text: .text%__1cNIdealLoopTreeUmerge_many_backedges6MpnOPhaseIdealLoop__v_; -text: .text%__1cODeoptimizationLUnrollBlock2T6M_v_; -text: .text%jni_GetDoubleArrayRegion: jni.o; -text: .text%__1cHciKlassIis_klass6M_i_: ciInstanceKlass.o; -text: .text%__1cIciObjectTis_type_array_klass6M_i_: ciInstanceKlass.o; -text: .text%__1cMLinkResolverbBlookup_method_in_interfaces6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cLconvP2BNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKfix_parent6FpnNIdealLoopTree_1_v_: loopnode.o; -text: .text%__1cZInterpreterMacroAssemblerUadd_monitor_to_stack6MipnMRegisterImpl_2_v_; -text: .text%JVM_Available; -text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_; -text: .text%__1cQshlL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMOopTaskQdDueueKinitialize6M_v_; -text: .text%__1cMOopTaskQdDueue2t6M_v_; -text: .text%__1cRNativeInstructionKis_illegal6M_i_; -text: .text%__1cZInterpreterMacroAssemblerQtop_most_monitor6M_nHAddress__; -text: .text%__1cLstoreF0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cCosGgetenv6Fpkcpci_i_; -text: .text%__1cMVM_OperationNdoit_prologue6M_i_: vm_operations.o; -text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; -text: .text%__1cKi0RegPOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_; -text: .text%__1cPOopTaskQdDueueSetOregister_queue6MipnMOopTaskQdDueue__v_; -text: .text%__1cMVM_OperationNdoit_epilogue6M_v_: vm_operations.o; -text: .text%__1cNVM_DeoptimizeEname6kM_pkc_: vm_operations.o; -text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; -text: .text%__1cSconvF2I_helperNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNloadConP0NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cbAconvL2D_reg_slow_fxtofNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOstackSlotFOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cNTemplateTableSputfield_or_static6Fii_v_; -text: .text%__1cOstackSlotFOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotFOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cPconvF2I_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNTemplateTableSgetfield_or_static6Fii_v_; -text: .text%__1cNTemplateTableUjvmti_post_field_mod6Fii_v_; -text: .text%__1cHMatcherQconvL2FSupported6F_ki_; -text: .text%__1cNTemplateTableGlconst6Fi_v_; -text: .text%__1cLstoreC0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRcompL_reg_regNodeFclone6kM_pnENode__; -text: .text%__1cUcompI_iReg_imm13NodeFclone6kM_pnENode__; -text: .text%__1cMPeriodicTaskGenroll6M_v_; -text: .text%__1cMPeriodicTask2t6MI_v_; -text: .text%__1cPconvF2I_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFTypeDJis_finite6kM_i_; -text: .text%__1cPconvL2I_regNodeFclone6kM_pnENode__; -text: .text%__1cNTemplateTableHcastore6F_v_; -text: .text%Unsafe_CompareAndSwapObject; -text: .text%__1cLNamedThread2t6M_v_; -text: .text%__1cSconvD2I_helperNodeFclone6kM_pnENode__; -text: .text%__1cLNamedThreadIset_name6MpkcE_v_; -text: .text%__1cJloadDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQdivD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWloadConI_x43300000NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableKinitialize6F_v_; -text: .text%__1cKcmpOpFOperJnot_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cPconvD2F_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableKdouble_cmp6Fi_v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fi_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC22_v_; -text: .text%__1cNTemplateTableGdconst6Fi_v_; -text: .text%__1cNTemplateTableDldc6Fi_v_; -text: .text%__1cSconvF2I_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovIF_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovIF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: universe.o; -text: .text%__1cJimmL0OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLcastP2INodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovLL_regNodeFclone6kM_pnENode__; -text: .text%__1cbAconvL2D_reg_slow_fxtofNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cLconvP2BNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSsubD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQregF_to_stkINodeFclone6kM_pnENode__; -text: .text%__1cSstkL_to_regD_2NodeFclone6kM_pnENode__; -text: .text%__1cQregF_to_stkINodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNTemplateTableTinvokevfinal_helper6FpnMRegisterImpl_2_v_; -text: .text%__1cSmulD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableUgenerate_vtable_call6FpnMRegisterImpl_22_v_; -text: .text%__1cSstkL_to_regD_2NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSstkL_to_regD_0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableKif_nullcmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableHif_acmp6Fn0AJCondition__v_; -text: .text%__1cSmembar_releaseNodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cJimmI0OperFclone6kM_pnIMachOper__; -text: .text%__1cNVM_DeoptimizeEdoit6M_v_; -text: .text%__1cNloadConL0NodeJnum_opnds6kM_I_: ad_sparc_misc.o; -text: .text%__1cUregI_to_stkLHi_0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegF_regNodeFclone6kM_pnENode__; -text: .text%__1cQsubL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMVirtualSpace2t6M_v_; -text: .text%__1cRsarI_reg_imm5NodeFclone6kM_pnENode__; -text: .text%__1cWloadConI_x41f00000NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQdivI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMVirtualSpaceKinitialize6MnNReservedSpace_I_i_; -text: .text%__1cZregDHi_regDLo_to_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRsubI_zero_regNodeFclone6kM_pnENode__; -text: .text%__1cXconvI2D_regDHi_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKloadUBNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNTemplateTableEidiv6F_v_; -text: .text%__1cOcmovLI_regNodeFclone6kM_pnENode__; -text: .text%__1cQstkI_to_regINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUregI_to_stkLHi_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLMoveL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLConvD2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLConvF2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLConvF2INodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_float_field06FnJBasicType__pC_; -text: .text%__1cLMoveF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLOptoRuntimeIl2f_Type6F_pknITypeFunc__; -text: .text%__1cOMacroAssemblerUcalc_mem_param_words6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MnITosState_pnMRegisterImpl_3_v_; -text: .text%__1cZInterpreterMacroAssemblerUprofile_virtual_call6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; -text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; -text: .text%__1cZInterpreterMacroAssemblerSupdate_mdp_for_ret6MnITosState_pnMRegisterImpl__v_; -text: .text%__1cOLibraryCallKitVinline_fp_conversions6MnIciMethodLIntrinsicId__i_; -text: .text%__1cZInterpreterMacroAssemblerPset_mdp_flag_at6MipnMRegisterImpl_2_v_; -text: .text%__1cMLinkResolverbEvtable_index_of_miranda_method6FnLKlassHandle_nMsymbolHandle_2pnGThread__i_; -text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; -text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_26MpCpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_1_x6MnJAssemblerJCondition_rnFLabel__v_; -text: .text%__1cZInterpreterMacroAssemblerZget_4_byte_integer_at_bcp6MipnMRegisterImpl_2n0AKsetCCOrNot__v_; -text: .text%__1cUInterpreterGeneratorVgenerate_native_entry6Mi_pC_; -text: .text%__1cCosHrealloc6FpvI_1_; -text: .text%__1cUConstantOopReadValuePis_constant_oop6kM_i_: debugInfo.o; -text: .text%__1cKScopeValuePis_constant_int6kM_i_: debugInfo.o; -text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; -text: .text%__1cKklassKlassMoop_is_klass6kM_i_: arrayKlassKlass.o; -text: .text%__1cFStateO_sub_Op_CMoveL6MpknENode__v_; -text: .text%__1cZInterpreterMacroAssemblerRaccess_local_long6MpnMRegisterImpl_2_v_; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: objArrayKlassKlass.o; -text: .text%__1cIPSOldGenPinitialize_work6Mpkci_v_; -text: .text%__1cCosIjvm_path6Fpci_v_; -text: .text%__1cCosNsigexitnum_pd6F_i_; -text: .text%__1cCosScurrent_process_id6F_i_; -text: .text%__1cINegFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMciArrayKlassOis_array_klass6M_i_: ciTypeArrayKlass.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: objArrayKlassKlass.o; -text: .text%__1cCosPuncommit_memory6FpcI_i_; -text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_; -text: .text%__1cLConvL2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvF2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvD2FNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKJNIHandlesQmake_weak_global6FnGHandle__pnI_jobject__; -text: .text%__1cZInterpreterMacroAssemblerSaccess_local_float6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerTaccess_local_double6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerPstore_local_int6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerPstore_local_ptr6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerQstore_local_long6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerRstore_local_float6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerSstore_local_double6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cCosWactive_processor_count6F_i_; -text: .text%__1cSReferenceProcessor2t6MnJMemRegion_iii_v_; -text: .text%__1cHAddressQrspec_from_rtype6MnJrelocInfoJrelocType_pC_nQRelocationHolder__: jniFastGetField_sparc.o; -text: .text%__1cRcheck_if_clipping6FpknKRegionNode_rpnGIfNode_5_i_: cfgnode.o; -text: .text%__1cTAbstractInterpreterKinitialize6F_v_; -text: .text%__1cIciObjectOis_array_klass6M_i_: ciInstanceKlass.o; -text: .text%__1cIciObjectOis_null_object6kM_i_: ciInstanceKlass.o; -text: .text%__1cPmake_new_frames6FpnOMacroAssembler_i_v_: runtime_sparc.o; -text: .text%jni_NewWeakGlobalRef: jni.o; -text: .text%__1cGatomll6Fpkcpx_i_: arguments.o; -text: .text%__1cRComputeEntryStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cTMaskFillerForNativeLpass_object6M_v_: oopMapCache.o; -text: .text%__1cOGenerateOopMapTadd_to_ref_init_set6Mi_v_; -text: .text%__1cUGcThreadCountClosureJdo_thread6MpnGThread__v_; -text: .text%__1cNinstanceKlassSremove_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cOPSVirtualSpace2t6M_v_; -text: .text%jni_IsInstanceOf: jni.o; -text: .text%__1cGThreadMis_VM_thread6kM_i_: gcTaskThread.o; -text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_: oopMapCache.o; -text: .text%__1cMGCTaskThreadDrun6M_v_; -text: .text%__1cJCodeCachebGmake_marked_nmethods_not_entrant6F_v_; -text: .text%__1cTMaskFillerForNativeJpass_long6M_v_: oopMapCache.o; -text: .text%jni_CallStaticVoidMethodV: jni.o; -text: .text%__1cKCodeBufferGresize6M_v_; -text: .text%jni_CallStaticBooleanMethod: jni.o; -text: .text%__1cMGCTaskThread2t6MpnNGCTaskManager_II_v_; -text: .text%__1cOtailjmpIndNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMGCTaskThreadFstart6M_v_; -text: .text%__1cNStubGenerator2t6MpnKCodeBuffer_i_v_: stubGenerator_sparc.o; -text: .text%__1cWStubGenerator_generate6FpnKCodeBuffer_i_v_; -text: .text%__1cRFloatRegisterImplIencoding6kMn0AFWidth__i_: interpreter_sparc.o; -text: .text%__1cCosbCis_thread_cpu_time_supported6F_i_; -text: .text%__1cJArgumentsXPropertyList_unique_add6FppnOSystemProperty_pkcpc_v_; -text: .text%__1cQObjectStartArrayKinitialize6MnJMemRegion__v_; -text: .text%__1cQObjectStartArraySset_covered_region6MnJMemRegion__v_; -text: .text%__1cUGenericGrowableArrayGgrow646Mi_v_; -text: .text%__1cZInterpreterMacroAssemblerbAdispatch_next_noverify_oop6MnITosState_i_v_; -text: .text%__1cOMacroAssemblerDret6Mi_v_: stubGenerator_sparc.o; -text: .text%__1cRCollectorCounters2t6Mpkci_v_; -text: .text%__1cFParseDl2f6M_v_; -text: .text%__1cPGCMemoryManagerXinitialize_gc_stat_info6M_v_; -text: .text%__1cJArgumentsVset_parallel_gc_flags6F_v_; -text: .text%__1cPGCMemoryManager2t6M_v_; -text: .text%__1cRComputeEntryStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cOPSVirtualSpaceKinitialize6MnNReservedSpace_I_i_; -text: .text%__1cSInterpreterRuntimeWcreate_klass_exception6FpnKJavaThread_pcpnHoopDesc__v_; -text: .text%__1cQcreate_os_thread6FpnGThread_I_pnIOSThread__: os_solaris.o; -text: .text%__1cYjava_lang_reflect_MethodPcompute_offsets6F_v_; -text: .text%__1cSInterpreterRuntimeSupdate_mdp_for_ret6FpnKJavaThread_i_v_; -text: .text%__1cPorL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjava_lang_ThreadPcompute_offsets6F_v_; -text: .text%__1cXNativeSignatureIteratorHdo_byte6M_v_: interpreterRT_sparc.o; -text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; -text: .text%__1cCosScreate_main_thread6FpnGThread__i_; -text: .text%__1cCosbDallocate_thread_local_storage6F_i_; -text: .text%__1cUInterpreterGeneratorVrestore_native_result6M_v_; -text: .text%__1cVjava_lang_ThreadGroupPcompute_offsets6F_v_; -text: .text%__1cHMatcherbDinterpreter_frame_pointer_reg6F_nHOptoRegEName__; -text: .text%__1cLconvP2BNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVshrL_reg_imm6_L2INodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cCosGstrdup6Fpkc_pc_; -text: .text%__1cbCAbstractInterpreterGeneratorYgenerate_throw_exception6M_v_; -text: .text%__1cCosLinit_random6Fl_v_; -text: .text%__1cCosNset_boot_path6Fcc_i_; -text: .text%__1cUInterpreterGeneratorXgenerate_accessor_entry6M_pC_; -text: .text%__1cCosXis_server_class_machine6F_i_; -text: .text%__1cCosXterminate_signal_thread6F_v_; -text: .text%__1cCosLsignal_init6F_v_; -text: .text%__1cKTypeOopPtrCeq6kMpknEType__i_; -text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; -text: .text%__1cOtailjmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUInterpreterGeneratorUgenerate_empty_entry6M_pC_; -text: .text%__1cUInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cbCAbstractInterpreterGeneratorbMgenerate_ArrayIndexOutOfBounds_handler6Mpkc_pC_; -text: .text%__1cbCAbstractInterpreterGeneratorbJgenerate_StackOverflowError_handler6M_pC_; -text: .text%__1cCosbDinit_system_properties_values6F_v_; -text: .text%__1cCosPphysical_memory6F_X_; -text: .text%__1cHvm_exit6Fi_v_; -text: .text%__1cLbefore_exit6FpnKJavaThread__v_; -text: .text%__1cbCAbstractInterpreterGeneratorbFgenerate_slow_signature_handler6M_pC_; -text: .text%__1cSThreadLocalStorageHpd_init6F_v_; -text: .text%__1cVMoveF2I_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVMoveL2D_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWinvocationCounter_init6F_v_; -text: .text%__1cRInvocationCounterMreinitialize6Fi_v_; -text: .text%__1cKTypeOopPtrEmake6FnHTypePtrDPTR_i_pk0_; -text: .text%__1cKTypeOopPtrFxdual6kM_pknEType__; -text: .text%__1cFParseMjump_if_join6MpnENode_2_2_; -text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cSinstanceKlassKlassUoop_is_instanceKlass6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassVoop_is_typeArrayKlass6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassUoop_is_objArrayKlass6kM_i_: instanceKlassKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: instanceKlassKlass.o; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: instanceKlassKlass.o; -text: .text%__1cSinstanceKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlassKlass.o; -text: .text%__1cLconvP2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cETypeRInitialize_shared6FpnHCompile__v_; -text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_; -text: .text%__1cVInterfaceSupport_init6F_v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpnMRegisterImpl_pC2_v_; -text: .text%__1cFParseNfetch_monitor6MipnENode_2_2_; -text: .text%__1cPGenerationSizerQinitialize_flags6M_v_: parallelScavengeHeap.o; -text: .text%__1cbCTwoGenerationCollectorPolicyMrem_set_name6M_nJGenRemSetEName__: parallelScavengeHeap.o; -text: .text%__1cUParallelScavengeHeapEkind6M_nNCollectedHeapEName__: parallelScavengeHeap.o; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_normal6MnITosState__v_; -text: .text%__1cJTimeStampMmilliseconds6kM_x_; -text: .text%__1cDhpiZinitialize_socket_library6F_i_; -text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_; -text: .text%__1cWInlineCacheBuffer_init6F_v_; -text: .text%__1cWThreadLocalAllocBufferWstartup_initialization6F_v_; -text: .text%__1cPGlobalTLABStats2t6M_v_; -text: .text%__1cLicache_init6F_v_; -text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__: parse1.o; -text: .text%__1cSThreadLocalStorageEinit6F_v_; -text: .text%__1cNThreadServiceEinit6F_v_; -text: .text%__1cTICacheStubGeneratorVgenerate_icache_flush6MppFpCii_i_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: indexSet.o; -text: .text%__1cPvm_init_globals6F_v_; -text: .text%__1cMinit_globals6F_i_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_sparc_expand.o; -text: .text%__1cMexit_globals6F_v_; -text: .text%__1cSset_init_completed6F_v_; -text: .text%__1cNinstanceKlassZrelease_C_heap_structures6M_v_; -text: .text%__1cJTimeStampJupdate_to6Mx_v_; -text: .text%__1cUParallelScavengeHeapItop_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; -text: .text%__1cOisT2_libthread6F_i_; -text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: interp_masm_sparc.o; -text: .text%__1cQinterpreter_init6F_v_; -text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; -text: .text%__1cNpriocntl_stub6FinGidtype_lipc_l_: os_solaris.o; -text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; -text: .text%__1cbCAbstractInterpreterGeneratorbEset_entry_points_for_all_bytes6M_v_; -text: .text%__1cCosHSolarisRmpss_sanity_check6F_v_; -text: .text%__1cCosLsignal_wait6F_i_; -text: .text%__1cVcheck_pending_signals6Fi_i_: os_solaris.o; -text: .text%__1cCosNsignal_notify6Fi_v_; -text: .text%__1cCosOsignal_init_pd6F_v_; -text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: interpreter.o; -text: .text%__1cCosSget_temp_directory6F_pkc_; -text: .text%__1cCosHSolarisOlibthread_init6F_v_; -text: .text%__1cUParallelScavengeHeapIend_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; -text: .text%__1cUParallelScavengeHeapEheap6F_p0_; -text: .text%__1cUParallelScavengeHeapNgc_threads_do6kMpnNThreadClosure__v_; -text: .text%__1cUParallelScavengeHeapYpermanent_object_iterate6MpnNObjectClosure__v_; -text: .text%__1cKcmpOpFOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cUParallelScavengeHeapMmax_capacity6kM_I_; -text: .text%__1cUParallelScavengeHeapPpost_initialize6M_v_; -text: .text%__1cUParallelScavengeHeapKinitialize6M_i_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; -text: .text%__1cZInterpreterMacroAssemblerbFset_method_data_pointer_for_bcp6M_v_; -text: .text%__SLIP.DELETER__C: ostream.o; -text: .text%__1cMostream_exit6F_v_; -text: .text%__1cQostream_init_log6F_v_; -text: .text%__1cMostream_init6F_v_; -text: .text%__1cCosXnon_memory_address_word6F_pc_; -text: .text%__1cCosGinit_26F_i_; -text: .text%__1cCosEinit6F_v_; -text: .text%__1cCosHSolarisUsynchronization_init6F_v_; -text: .text%__1cVjni_GetLongField_addr6F_pC_; -text: .text%__1cNIdealLoopTreeQsplit_outer_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cRLowMemoryDetectorKinitialize6F_v_; -text: .text%__1cNReservedSpace2t6MIIipc_v_; -text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_; -text: .text%__1cXLowMemoryDetectorThreadbCis_hidden_from_external_view6kM_i_: lowMemoryDetector.o; -text: .text%__1cNReservedSpaceUpage_align_size_down6FI_I_; -text: .text%__1cNReservedSpaceYallocation_align_size_up6FI_I_; -text: .text%__1cKJavaThreadOis_Java_thread6kM_i_: lowMemoryDetector.o; -text: .text%__1cGThreadMis_VM_thread6kM_i_: lowMemoryDetector.o; -text: .text%__1cTloadL_unalignedNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: machnode.o; -text: .text%__1cPmanagement_init6F_v_; -text: .text%__1cOvmStructs_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; -text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_; -text: .text%__1cKManagementKinitialize6FpnGThread__v_; -text: .text%__1cKManagementWrecord_vm_startup_time6Fxx_v_; -text: .text%__1cIVMThreadGcreate6F_v_; -text: .text%__1cIVMThreadDrun6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; -text: .text%__1cOBasicHashtable2t6Mii_v_: loaderConstraints.o; -text: .text%__1cLJvmtiExportNpost_vm_start6F_v_; -text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_; -text: .text%__1cLJvmtiExportNpost_vm_death6F_v_; -text: .text%__1cLJvmtiExportbMtransition_pending_onload_raw_monitors6F_v_; -text: .text%__1cUJvmtiPendingMonitorsXtransition_raw_monitors6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiImpl.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o; -text: .text%__1cKklassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassUoop_is_instanceKlass6kM_i_: klassKlass.o; -text: .text%__1cFKlassVoop_is_typeArrayKlass6kM_i_: klassKlass.o; -text: .text%__1cFKlassUoop_is_objArrayKlass6kM_i_: klassKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: klassKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: klassKlass.o; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: klassKlass.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: klassKlass.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: klassKlass.o; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: klassKlass.o; -text: .text%__1cKklassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: klassKlass.o; -text: .text%__1cOLibraryCallKitWinline_native_hashcode6Mii_i_; -text: .text%__1cIGraphKitTcreate_and_xform_if6MpnENode_2ff_pnGIfNode__: library_call.o; -text: .text%__1cVLoaderConstraintTable2t6Mi_v_; -text: .text%__1cQregL_to_stkLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHRetDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cTAbstract_VM_VersionKvm_release6F_pkc_; -text: .text%__1cTAbstract_VM_VersionXinternal_vm_info_string6F_pkc_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; -text: .text%__1cPVM_Version_init6F_v_; -text: .text%__1cKVM_VersionKinitialize6F_v_; -text: .text%__1cHRetDataJfixup_ret6MinQmethodDataHandle__pC_; -text: .text%__1cHRetDataKis_RetData6M_i_: methodDataOop.o; -text: .text%__1cLmethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cLmethodKlassOset_alloc_size6MI_v_: methodKlass.o; -text: .text%__1cQvtableStubs_init6F_v_; -text: .text%__1cKi0RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKg1RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFVTuneEexit6F_v_; -text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodKlass.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: methodLiveness.o; -text: .text%__1cMMutableSpaceOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cKvtune_init6F_v_; -text: .text%__1cKmutex_init6F_v_; -text: .text%__1cQaccessFlags_init6F_v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC222_v_; -text: .text%__1cTAbstract_VM_VersionJvm_vendor6F_pkc_; -text: .text%__1cOmarksweep_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; -text: .text%__1cHMatcherVfind_callee_arguments6FpnNsymbolOopDesc_ipi_pnLRegPair__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: matcher.o; -text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_; -text: .text%__1cNMemoryManagerbDget_psScavenge_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cNMemoryManagerbEget_psMarkSweep_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cQPSGenerationPool2t6MpnIPSOldGen_pkcnKMemoryPoolIPoolType_i_v_; -text: .text%__1cQPSGenerationPool2t6MpnJPSPermGen_pkcnKMemoryPoolIPoolType_i_v_; -text: .text%__1cUEdenMutableSpacePool2t6MpnKPSYoungGen_pnMMutableSpace_pkcnKMemoryPoolIPoolType_i_v_; -text: .text%__1cYSurvivorMutableSpacePool2t6MpnKPSYoungGen_pkcnKMemoryPoolIPoolType_i_v_; -text: .text%__1cMCodeHeapPool2t6MpnICodeHeap_pkci_v_; -text: .text%__1cHVM_ExitEdoit6M_v_; -text: .text%__1cHVM_ExitEname6kM_pkc_: vm_operations.o; -text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_; -text: .text%__1cNMemoryServiceZadd_code_heap_memory_pool6FpnICodeHeap__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o; -text: .text%__1cPmethodDataKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cPmethodDataKlassOset_alloc_size6MI_v_: methodDataKlass.o; -text: .text%__1cPmethodDataKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodDataKlass.o; -text: .text%__1cTAbstract_VM_VersionHvm_name6F_pkc_; -text: .text%__1cLstoreF0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%JNI_CreateJavaVM; -text: .text%__1cXonStackReplacement_init6F_v_; -text: .text%__1cQJNI_FastGetFieldbFgenerate_fast_get_boolean_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_byte_field6F_pC_; -text: .text%__1cTtypeArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cTtypeArrayKlassKlassVoop_is_typeArrayKlass6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cFKlassUoop_is_objArrayKlass6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cFKlassNoop_is_method6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_char_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_short_field6F_pC_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cFKlassMoop_is_array6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cQJNI_FastGetFieldbBgenerate_fast_get_int_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_long_field6F_pC_; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: typeArrayKlassKlass.o; -text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlassKlass.o; -text: .text%__1cIUniversePcheck_alignment6FIIpkc_v_; -text: .text%__1cIUniverseHgenesis6FpnGThread__v_; -text: .text%__1cVquicken_jni_functions6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cYjava_lang_reflect_MethodNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cQdivD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLJavaClassesbAcompute_hard_coded_offsets6F_v_; -text: .text%__1cQjavaClasses_init6F_v_; -text: .text%jni_ToReflectedMethod: jni.o; -text: .text%__1cQsubD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cYjni_GetBooleanField_addr6F_pC_; -text: .text%__1cVjni_GetByteField_addr6F_pC_; -text: .text%__1cQaddF_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cVjni_GetCharField_addr6F_pC_; -text: .text%__1cWjni_GetShortField_addr6F_pC_; -text: .text%__1cUjni_GetIntField_addr6F_pC_; -text: .text%__1cOtypeArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cWjni_GetFloatField_addr6F_pC_; -text: .text%__1cRsarL_reg_imm6NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cXjni_GetDoubleField_addr6F_pC_; -text: .text%__1cQshlI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIUniverseNfixup_mirrors6FpnGThread__v_; -text: .text%__1cFKlassRoop_is_methodData6kM_i_: objArrayKlass.o; -text: .text%JVM_InitializeSocketLibrary; -text: .text%JVM_RegisterUnsafeMethods; -text: .text%__1cOcmovLI_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovLI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovDF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_Socket; -text: .text%__1cbEinitialize_converter_functions6F_v_; -text: .text%JVM_SupportsCX8; -text: .text%__1cOcmovIF_immNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEnvBase.o; -text: .text%__1cUJvmtiEventControllerIvm_start6F_v_; -text: .text%__1cUJvmtiEventControllerHvm_init6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_death6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEventController.o; -text: .text%__1cKstfSSFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVverificationType_init6F_v_; -text: .text%__1cVverificationType_exit6F_v_; -text: .text%__1cLJvmtiExportRenter_start_phase6F_v_; -text: .text%__1cLJvmtiExportQenter_live_phase6F_v_; -text: .text%__1cFKlassNoop_is_method6kM_i_: objArrayKlass.o; -text: .text%__1cSmulL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_float_field6F_pC_; -text: .text%__1cSmulI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_double_field6F_pC_; -text: .text%__1cNuniverse_init6F_i_; -text: .text%__1cOuniverse2_init6F_v_; -text: .text%__1cSuniverse_post_init6F_v_; -text: .text%__1cQjni_handles_init6F_v_; -text: .text%__1cSobjArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlassKlass.o; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: objArrayKlassKlass.o; -text: .text%Unsafe_SetNativeLong; -text: .text%JVM_InitProperties; -text: .text%JVM_Halt; -text: .text%__1cFKlassNoop_is_method6kM_i_: objArrayKlassKlass.o; -text: .text%Unsafe_FreeMemory; -text: .text%Unsafe_PageSize; -text: .text%__1cSobjArrayKlassKlassUoop_is_objArrayKlass6kM_i_: objArrayKlassKlass.o; -text: .text%JVM_MaxMemory; -text: .text%__1cSobjArrayKlassKlassbEallocate_system_objArray_klass6MpnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%JVM_GetClassDeclaredMethods; -text: .text%__1cPPerfDataManagerHsampled6F_pnMPerfDataList__; -text: .text%__1cQSystemDictionaryKclasses_do6FpFpnMklassOopDesc__v_v_; -text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_; -text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_; -text: .text%__1cQSystemDictionarybDinitialize_basic_type_mirrors6FpnGThread__v_; -text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; -text: .text%__1cRciArrayKlassKlassUis_array_klass_klass6M_i_: ciObjectFactory.o; -text: .text%__1cPClassFileParserbFjava_lang_ref_Reference_fix_pre6MpnPtypeArrayHandle_nSconstantPoolHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_; -text: .text%__1cLClassLoaderQload_zip_library6F_v_; -text: .text%__1cLClassLoaderZcreate_package_info_table6F_v_; -text: .text%__1cLClassLoaderKinitialize6F_v_; -text: .text%__1cLClassLoaderVcompute_Object_vtable6F_i_; -text: .text%__1cMPeriodicTask2T5B6M_v_; -text: .text%__1cQclassLoader_init6F_v_; -text: .text%__1cMPeriodicTaskJdisenroll6M_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: classLoader.o; -text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cTClassLoadingServiceVnotify_class_unloaded6FpnNinstanceKlass_i_v_; -text: .text%__1cMFastLockNodeLis_FastLock6kM_pk0_: classes.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: regmask.o; -text: .text%__1cUciObjArrayKlassKlassEmake6F_p0_; -text: .text%__1cLOptoRuntimeUmultianewarray1_Type6F_pknITypeFunc__; -text: .text%__1cVRegistersForDebuggingRrestore_registers6FpnOMacroAssembler_pnMRegisterImpl__v_: assembler_sparc.o; -text: .text%__1cVRegistersForDebuggingOsave_registers6FpnOMacroAssembler__v_: assembler_sparc.o; -text: .text%__1cJBytecodesKinitialize6F_v_; -text: .text%__1cQSystemDictionarybAcompute_java_system_loader6FpnGThread__v_; -text: .text%__1cObytecodes_init6F_v_; -text: .text%__1cLOptoRuntimeIgenerate6FpnFciEnv__v_; -text: .text%__1cJBytecodesNpd_initialize6F_v_; -text: .text%__1cHCompileRpd_compiler2_init6F_v_; -text: .text%__1cKC2CompilerKinitialize6M_v_; -text: .text%__1cMTailJumpNode2t6MpnENode_22222_v_; -text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; -text: .text%__1cWResolveOopMapConflictsOreport_results6kM_i_: rewriter.o; -text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_I_; -text: .text%__1cENodeMis_SafePoint6M_pnNSafePointNode__: cfgnode.o; -text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; -text: .text%__1cMciKlassKlassEmake6F_p0_; -text: .text%__1cIciMethodMvtable_index6M_i_; -text: .text%__1cPciObjArrayKlass2t6MpnIciSymbol_pnHciKlass_i_v_; -text: .text%__1cJLoadFNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cNTemplateTableGsipush6F_v_; -text: .text%__1cQUncommonTrapBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNTemplateTableGldc2_w6F_v_; -text: .text%__1cNExceptionBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNTemplateTableFiload6F_v_; -text: .text%__1cNTemplateTableLfast_iload26F_v_; -text: .text%__1cNTemplateTableKfast_iload6F_v_; -text: .text%__1cNTemplateTableFlload6F_v_; -text: .text%__1cNTemplateTableFfload6F_v_; -text: .text%__1cNTemplateTableFdload6F_v_; -text: .text%__1cNTemplateTableFaload6F_v_; -text: .text%__1cNTemplateTableKwide_iload6F_v_; -text: .text%__1cNTemplateTableKwide_lload6F_v_; -text: .text%__1cNTemplateTableKwide_fload6F_v_; -text: .text%__1cNTemplateTableKwide_dload6F_v_; -text: .text%__1cNTemplateTableKwide_aload6F_v_; -text: .text%__1cNTemplateTableGiaload6F_v_; -text: .text%__1cNTemplateTableGlaload6F_v_; -text: .text%__1cNTemplateTableGfaload6F_v_; -text: .text%__1cNTemplateTableGdaload6F_v_; -text: .text%__1cNTemplateTableGbipush6F_v_; -text: .text%__1cLMoveF2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLMoveL2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC222_v_; -text: .text%__1cHOrLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cHOrLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableF_goto6F_v_; -text: .text%__1cNTemplateTableGgoto_w6F_v_; -text: .text%__1cNTemplateTableFjsr_w6F_v_; -text: .text%__1cNTemplateTableDjsr6F_v_; -text: .text%__1cXreferenceProcessor_init6F_v_; -text: .text%__1cICodeBlobMset_oop_maps6MpnJOopMapSet__v_; -text: .text%__1cStemplateTable_init6F_v_; -text: .text%__1cNTemplateTableNpd_initialize6F_v_; -text: .text%__1cURecompilationMonitorbGstart_recompilation_monitor_task6F_v_; -text: .text%__1cNTemplateTableDnop6F_v_; -text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_; -text: .text%__1cNTemplateTableLaconst_null6F_v_; -text: .text%__1cKPSYoungGenbCreset_survivors_after_shrink6M_v_; -text: .text%__1cKPSYoungGenQlimit_gen_shrink6MI_I_; -text: .text%__1cKPSYoungGenRavailable_to_live6M_I_; -text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; -text: .text%__1cLOptoRuntimeUmultianewarray2_Type6F_pknITypeFunc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_sparc_pipeline.o; -text: .text%__1cNcarSpace_init6F_v_; -text: .text%__1cUAdjoiningGenerations2t6MnNReservedSpace_IIIIIII_v_; -text: .text%__1cWAdjoiningVirtualSpaces2t6MnNReservedSpace_III_v_; -text: .text%__1cOchunkpool_init6F_v_; -text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_; -text: .text%__1cJArgumentsWinit_system_properties6F_v_; -text: .text%__1cINegFNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cMSysClassPathPexpand_endorsed6M_v_; -text: .text%__1cMSysClassPathQadd_jars_to_path6Fpcpkc_1_; -text: .text%__1cJArgumentsVprocess_settings_file6Fpkcii_i_; -text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsUset_ergonomics_flags6F_v_; -text: .text%__1cJArgumentsZcheck_vm_args_consistency6F_i_; -text: .text%__1cJArgumentsSparse_vm_init_args6FpknOJavaVMInitArgs__i_; -text: .text%__1cJArgumentsWparse_each_vm_init_arg6FpknOJavaVMInitArgs_pnMSysClassPath_pi_i_; -text: .text%__1cJArgumentsVfinalize_vm_init_args6FpnMSysClassPath_i_i_; -text: .text%__1cLStatSamplerGengage6F_v_; -text: .text%__1cNStubGeneratorbNgenerate_flush_callers_register_windows6M_pC_: stubGenerator_sparc.o; -text: .text%__1cSstubRoutines_init16F_v_; -text: .text%__1cSstubRoutines_init26F_v_; -text: .text%__1cHAddressQrspec_from_rtype6MnJrelocInfoJrelocType_pC_nQRelocationHolder__: stubGenerator_sparc.o; -text: .text%__1cOMacroAssemblerIjumpl_to6MrnHAddress_pnMRegisterImpl_i_v_: stubGenerator_sparc.o; -text: .text%__1cOMacroAssemblerIround_to6MpnMRegisterImpl_i_v_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorbIgenerate_handler_for_unsafe_access6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorbAgenerate_forward_exception6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorSgenerate_call_stub6MrpC_1_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorYgenerate_catch_exception6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorSgenerate_test_stop6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorbIgenerate_copy_words_aligned8_lower6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorbJgenerate_copy_words_aligned8_higher6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorbBgenerate_set_words_aligned86M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorbCgenerate_zero_words_aligned86M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorbEgenerate_partial_subtype_check6M_pC_: stubGenerator_sparc.o; -text: .text%__1cISubFNodeDsub6kMpknEType_3_3_; -text: .text%__1cRStubCodeGeneratorLstub_prolog6MpnMStubCodeDesc__v_; -text: .text%__1cLStatSamplerbMcreate_system_property_instrumentation6FpnGThread__v_; -text: .text%__1cLStatSamplerHdestroy6F_v_; -text: .text%__1cLStatSamplerJdisengage6F_v_; -text: .text%__1cJArgumentsbNparse_java_options_environment_variable6FpnMSysClassPath_pi_i_; -text: .text%__1cNRegisterSaverYrestore_result_registers6FpnOMacroAssembler__v_; -text: .text%__1cLOptoRuntimeYgenerate_arraycopy_stubs6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o; -text: .text%__1cORuntimeServiceYrecord_application_start6F_v_; -text: .text%__1cOMacroAssemblerNset_vm_result6MpnMRegisterImpl__v_; -text: .text%__1cORuntimeServiceEinit6F_v_; -text: .text%__1cLOptoRuntimeVhandle_exception_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeSfetch_monitor_Type6F_pknITypeFunc__; -text: .text%__1cOMacroAssemblerVverify_oop_subroutine6M_v_; -text: .text%__1cOMacroAssemblerPstop_subroutine6M_v_; -text: .text%__1cOMacroAssemblerElcmp6MpnMRegisterImpl_2222_v_; -text: .text%__1cOMacroAssemblerElneg6MpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerElshl6MpnMRegisterImpl_22222_v_; -text: .text%__1cOMacroAssemblerElshr6MpnMRegisterImpl_22222_v_; -text: .text%__1cOMacroAssemblerFlushr6MpnMRegisterImpl_22222_v_; -text: .text%__1cLOptoRuntimeUmultianewarray5_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray4_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray3_Type6F_pknITypeFunc__; -text: .text%__1cLsymbolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: symbolKlass.o; -text: .text%__1cJArgumentsbSparse_java_tool_options_environment_variable6FpnMSysClassPath_pi_i_; -text: .text%__1cJArgumentsFparse6FpknOJavaVMInitArgs__i_; -text: .text%__1cJArgumentsWPropertyList_get_value6FpnOSystemProperty_pkc_4_; -text: .text%__1cNSharedRuntimebIinitialize_StrictMath_entry_points6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: arguments.o; -text: .text%__1cParrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: arrayKlassKlass.o; -text: .text%__1cLsymbolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cParrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: arrayKlassKlass.o; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pC222i_v_; -text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpnMRegisterImpl_pCi_v_; -text: .text%__1cLOptoRuntimebPgenerate_polling_page_return_handler_blob6F_v_; -text: .text%__1cLOptoRuntimebSgenerate_polling_page_safepoint_handler_blob6F_v_; -text: .text%__1cFKlassNoop_is_method6kM_i_: symbolKlass.o; -text: .text%__1cLOptoRuntimebPgenerate_illegal_instruction_handler_blob6F_v_; -text: .text%__1cLOptoRuntimebBgenerate_uncommon_trap_blob6F_v_; -text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; -text: .text%__1cLOptoRuntimeWfill_in_exception_blob6F_v_; -text: .text%__1cLOptoRuntimeUsetup_exception_blob6F_v_; -text: .text%__1cLsymbolKlassOset_alloc_size6MI_v_: symbolKlass.o; -text: .text%__1cNTemplateTableGaaload6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psAdaptiveSizePolicy.o; -text: .text%__1cKCMoveDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cOMacroAssemblerCfb6MnJAssemblerJCondition_in0BHPredict_pCnJrelocInfoJrelocType__v_: templateTable_sparc.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: tenuredGeneration.o; -text: .text%__1cUPSAdaptiveSizePolicy2t6MIIIIIddI_v_; -text: .text%__1cQconstMethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cQconstMethodKlassOset_alloc_size6MI_v_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constMethodKlass.o; -text: .text%__1cGThreadMset_priority6Fp0nOThreadPriority__v_; -text: .text%__1cRconstantPoolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cKarrayKlassMoop_is_array6kM_i_: constantPoolKlass.o; -text: .text%__1cFKlassPoop_is_instance6kM_i_: constantPoolKlass.o; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_: constantPoolKlass.o; -text: .text%__1cOBasicHashtable2t6Mii_v_: placeholders.o; -text: .text%__1cRconstantPoolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constantPoolKlass.o; -text: .text%__1cQPlaceholderTable2t6Mi_v_; -text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o; -text: .text%__1cVcreate_initial_thread6FnGHandle_pnKJavaThread_pnGThread__pnHoopDesc__: thread.o; -text: .text%__1cbAcall_initializeSystemClass6FpnGThread__v_: thread.o; -text: .text%__1cWreset_vm_info_property6FpnGThread__v_: thread.o; -text: .text%__1cbAPSGCAdaptivePolicyCounters2t6MpkciipnUPSAdaptiveSizePolicy__v_; -text: .text%__1cNTemplateTableRfast_invokevfinal6Fi_v_; -text: .text%__1cVcompiledICHolderKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: compiledICHolderKlass.o; -text: .text%__1cNTemplateTableNinvokespecial6Fi_v_; -text: .text%__1cNTemplateTableMinvokestatic6Fi_v_; -text: .text%__1cNTemplateTablebDinvokeinterface_object_method6FpnMRegisterImpl_222_v_; -text: .text%__1cNTemplateTablePinvokeinterface6Fi_v_; -text: .text%__1cNTemplateTableE_new6F_v_; -text: .text%__1cNTemplateTableInewarray6F_v_; -text: .text%__1cNTemplateTableJanewarray6F_v_; -text: .text%__1cNTemplateTableLarraylength6F_v_; -text: .text%__1cNTemplateTableJcheckcast6F_v_; -text: .text%__1cNTemplateTableKinstanceof6F_v_; -text: .text%__1cNTemplateTableL_breakpoint6F_v_; -text: .text%__1cNTemplateTableGathrow6F_v_; -text: .text%__1cNTemplateTableMmonitorenter6F_v_; -text: .text%__1cNTemplateTableLmonitorexit6F_v_; -text: .text%__1cNTemplateTableEwide6F_v_; -text: .text%__1cNTemplateTableOmultianewarray6F_v_; -text: .text%__1cOMacroAssemblerIround_to6MpnMRegisterImpl_i_v_: templateTable_sparc.o; -text: .text%__1cOCompilerOracleOread_from_line6Fpc_v_; -text: .text%__1cTcompilerOracle_init6F_v_; -text: .text%__1cWconstantPoolCacheKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnPPerfLongCounter__; -text: .text%__1cHThreadsJcreate_vm6FpnOJavaVMInitArgs_pi_i_; -text: .text%__1cZCompiledArgumentOopFinderRhandle_oop_offset6M_v_: frame.o; -text: .text%__1cQGCPolicyCounters2t6Mpkcii_v_; -text: .text%__1cHGCStats2t6M_v_; -text: .text%__1cNGCTaskManager2t6MI_v_; -text: .text%__1cNGCTaskManagerKinitialize6M_v_; -text: .text%__1cNGCTaskManagerKthreads_do6MpnNThreadClosure__v_; -text: .text%__1cPPerfDataManagerHdestroy6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__I_; -text: .text%__1cWResolveOopMapConflictsUdo_potential_rewrite6MpnGThread__nMmethodHandle__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; -text: .text%__1cRcheck_basic_types6F_v_; -text: .text%__1cSCommandLineFlagsExKuintxAtPut6FnXCommandLineFlagWithType_I_v_; -text: .text%__1cOThreadCriticalKinitialize6F_v_; -text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; -text: .text%__1cICodeHeap2t6M_v_; -text: .text%__1cICodeHeapHreserve6MIII_i_; -text: .text%__1cDhpiKinitialize6F_i_; -text: .text%__1cMPerfDataList2T6M_v_; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_: cpCacheKlass.o; -text: .text%__1cNWatcherThreadDrun6M_v_; -text: .text%__1cNWatcherThreadEstop6F_v_; -text: .text%__1cWconstantPoolCacheKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: cpCacheKlass.o; -text: .text%__1cFStateO_sub_Op_CMoveD6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_MoveF2I6MpknENode__v_; -text: .text%__1cKDictionary2t6Mi_v_; -text: .text%__1cKDictionaryKclasses_do6MpFpnMklassOopDesc__v_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: dictionary.o; -text: .text%__1cNeventlog_init6F_v_; -text: .text%__1cScheck_ThreadShadow6F_v_; -text: .text%__1cOtailjmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; -text: .text%__1cFframeVinterpreter_frame_mdp6kM_pC_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: phase.o; -text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; -text: .text%__1cKPerfMemoryUcreate_memory_region6FI_v_; -text: .text%__1cbBcleanup_sharedmem_resources6Fpkc_v_: perfMemory_solaris.o; -text: .text%__1cFframebAoops_compiled_arguments_do6MnMsymbolHandle_ipknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cPperfMemory_exit6F_v_; -text: .text%__1cPperfMemory_init6F_v_; -text: .text%__1cNTemplateTableNinvokevirtual6Fi_v_; -text: .text%__1cNTemplateTableHfastore6F_v_; -text: .text%__1cNTemplateTableHdastore6F_v_; -text: .text%__1cNTemplateTableHaastore6F_v_; -text: .text%__1cNTemplateTableHbastore6F_v_; -text: .text%__1cNTemplateTableHsastore6F_v_; -text: .text%__1cOcodeCache_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: codeCache.o; -text: .text%__1cNTemplateTableDpop6F_v_; -text: .text%__1cNTemplateTableEpop26F_v_; -text: .text%__1cNTemplateTableDdup6F_v_; -text: .text%__1cNTemplateTableGdup_x16F_v_; -text: .text%__1cNTemplateTableGdup_x26F_v_; -text: .text%__1cNTemplateTableEdup26F_v_; -text: .text%__1cNTemplateTableHdup2_x16F_v_; -text: .text%__1cNTemplateTableHdup2_x26F_v_; -text: .text%__1cNTemplateTableEswap6F_v_; -text: .text%__1cNCollectedHeap2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o; -text: .text%__1cNTemplateTableEirem6F_v_; -text: .text%__1cNTemplateTableElmul6F_v_; -text: .text%__1cNTemplateTableHlastore6F_v_; -text: .text%__1cNTemplateTableGbaload6F_v_; -text: .text%__1cNTemplateTableGcaload6F_v_; -text: .text%__1cNTemplateTableMfast_icaload6F_v_; -text: .text%__1cNTemplateTableGsaload6F_v_; -text: .text%__1cKPSYoungGenPinitialize_work6M_v_; -text: .text%__1cKPSYoungGenKinitialize6MnNReservedSpace_I_v_; -text: .text%__1cKPSYoungGenYinitialize_virtual_space6MnNReservedSpace_I_v_; -text: .text%__1cKPSYoungGen2t6MIII_v_; -text: .text%__1cOPSVirtualSpaceJshrink_by6MI_i_; -text: .text%__1cNTemplateTableHaload_06F_v_; -text: .text%__1cNTemplateTableGistore6F_v_; -text: .text%__1cNTemplateTableGlstore6F_v_; -text: .text%__1cNTemplateTableGfstore6F_v_; -text: .text%__1cNTemplateTableGdstore6F_v_; -text: .text%__1cNTemplateTableGastore6F_v_; -text: .text%__1cNTemplateTableLwide_istore6F_v_; -text: .text%__1cNTemplateTableLwide_lstore6F_v_; -text: .text%__1cNTemplateTableLwide_fstore6F_v_; -text: .text%__1cNTemplateTableLwide_dstore6F_v_; -text: .text%__1cNTemplateTableLwide_astore6F_v_; -text: .text%__1cNTemplateTableHiastore6F_v_; -text: .text%__1cNTemplateTableEldiv6F_v_; -text: .text%__1cNTemplateTableLtableswitch6F_v_; -text: .text%__1cNTemplateTableMlookupswitch6F_v_; -text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; -text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; -text: .text%__1cNCompileBrokerQcompilation_init6FpnQAbstractCompiler__v_; -text: .text%__1cNCompileBrokerVinit_compiler_threads6Fi_v_; -text: .text%__1cJPSPermGen2t6MnNReservedSpace_IIIIpkci_v_; -text: .text%__1cNCompileBrokerQset_should_block6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; -text: .text%__1cNTemplateTableIgetfield6Fi_v_; -text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cIPSOldGenKinitialize6MnNReservedSpace_Ipkci_v_; -text: .text%__1cIPSOldGen2t6MIIIpkci_v_; -text: .text%__1cIPSOldGen2t6MnNReservedSpace_IIIIpkci_v_; -text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cNTemplateTableIputfield6Fi_v_; -text: .text%__1cNTemplateTableJputstatic6Fi_v_; -text: .text%__1cVcompiledICHolderKlassOset_alloc_size6MI_v_: compiledICHolderKlass.o; -text: .text%__1cLPSMarkSweepKinitialize6F_v_; -text: .text%__1cNTemplateTableIwide_ret6F_v_; -text: .text%__1cNTemplateTableElrem6F_v_; -text: .text%__1cNTemplateTableElshl6F_v_; -text: .text%__1cNTemplateTableElshr6F_v_; -text: .text%__1cNTemplateTableFlushr6F_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyQinitialize_flags6M_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyUinitialize_size_info6M_v_; -text: .text%__1cNTemplateTableEineg6F_v_; -text: .text%__1cNTemplateTableElneg6F_v_; -text: .text%__1cNTemplateTableEfneg6F_v_; -text: .text%__1cNTemplateTableEdneg6F_v_; -text: .text%__1cNTemplateTableEiinc6F_v_; -text: .text%__1cNTemplateTableJwide_iinc6F_v_; -text: .text%__1cKPSScavengeKinitialize6F_v_; -text: .text%__1cNTemplateTableElcmp6F_v_; -text: .text%__1cWcompilationPolicy_init6F_v_; -text: .text%__1cRCompilationPolicyUcompleted_vm_startup6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o; -text: .text%__1cOcompiler2_init6F_v_; -text: .text%__1cSPSPromotionManagerKinitialize6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psPromotionLAB.o; -text: .text%__1cNTemplateTableDret6F_v_; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_COMPILER2_sparcv9 --- a/make/solaris/makefiles/reorder_COMPILER2_sparcv9 Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4442 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; - - -text: .text%__1cNinstanceKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cQIndexSetIteratorQadvance_and_next6M_I_; -text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOtypeArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cIPhaseIFGIadd_edge6MII_i_; -text: .text%__1cQIndexSetIterator2t6MpnIIndexSet__v_; -text: .text%__1cENodeEjvms6kM_pnIJVMState__; -text: .text%__1cHRegMaskESize6kM_I_; -text: .text%__1cETypeDcmp6Fkpk03_i_; -text: .text%__1cENodeHlatency6MI_I_; -text: .text%__1cIIndexSetWalloc_block_containing6MI_pn0AIBitBlock__; -text: .text%__1cHRegMaskJis_bound16kM_i_; -text: .text%__1cDff16FI_i_; -text: .text%__1cXresource_allocate_bytes6FL_pc_; -text: .text%__1cHRegMaskJis_bound26kM_i_; -text: .text%__1cJVectorSet2R6MI_rnDSet__; -text: .text%__1cENodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMachNodeGOpcode6kM_i_; -text: .text%__1cQIndexSetIteratorEnext6M_I_: chaitin.o; -text: .text%__1cITypeNodeLbottom_type6kM_pknEType__; -text: .text%__1cETypeFuhash6Fkpk0_i_; -text: .text%__1cJiRegIOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cNobjArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cKTypeOopPtrFklass6kM_pnHciKlass__: type.o; -text: .text%__1cENodeIout_grow6MI_v_; -text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_; -text: .text%__1cIIndexSetKinitialize6MI_v_; -text: .text%__1cOloadConI13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cENodeHadd_req6Mp0_v_; -text: .text%__1cINodeHashQhash_find_insert6MpnENode__2_; -text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cHPhiNodeGOpcode6kM_i_; -text: .text%__1cETypeIhashcons6M_pk0_; -text: .text%__1cOloadConI13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cICallNodeKmatch_edge6kMI_I_; -text: .text%__1cOPhaseIdealLoopUbuild_loop_late_post6MpnENode_pk0_v_; -text: .text%__1cIProjNodeGOpcode6kM_i_; -text: .text%__1cKbranchNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cNIdealLoopTreeJis_member6kMpk0_i_; -text: .text%__1cWPSScavengeRootsClosureGdo_oop6MppnHoopDesc__v_: psTasks.o; -text: .text%__1cWNode_Backward_IteratorEnext6M_pnENode__; -text: .text%__1cMPhaseChaitinTinterfere_with_live6MIpnIIndexSet__v_; -text: .text%__1cGIfNodeGOpcode6kM_i_; -text: .text%__1cHCompileNnode_bundling6MpknENode__pnGBundle__; -text: .text%__1cIUniverseMnon_oop_word6F_pv_; -text: .text%__1cOPhaseIdealLoopYsplit_if_with_blocks_pre6MpnENode__2_; -text: .text%__1cOPhaseIdealLoopZsplit_if_with_blocks_post6MpnENode__v_; -text: .text%__1cETypeEmeet6kMpk0_2_; -text: .text%__1cDLRGOcompute_degree6kMr0_i_; -text: .text%__1cENode2t6MI_v_; -text: .text%__1cFArenaIArealloc6MpvLL_1_; -text: .text%__1cMMachCallNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cIAddPNodeGOpcode6kM_i_; -text: .text%__1cKIfTrueNodeGOpcode6kM_i_; -text: .text%__1cIPipelineXfunctional_unit_latency6kMIpk0_I_; -text: .text%__1cLsymbolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cMPhaseIterGVNNtransform_old6MpnENode__2_; -text: .text%__1cWConstantPoolCacheEntryPfollow_contents6M_v_; -text: .text%__1cWConstantPoolCacheEntryPadjust_pointers6M_v_; -text: .text%__1cRMachSpillCopyNodeJideal_reg6kM_I_: ad_sparc.o; -text: .text%__1cHRegMaskMClearToPairs6M_v_; -text: .text%__1cKNode_ArrayGinsert6MIpnENode__v_; -text: .text%__1cJCProjNodeNis_block_proj6kM_pknENode__: cfgnode.o; -text: .text%__1cLsymbolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJloadPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_ArrayCopy; -text: .text%__1cIMachNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cLIfFalseNodeGOpcode6kM_i_; -text: .text%__1cENodeEhash6kM_I_; -text: .text%__1cSCallStaticJavaNodeGOpcode6kM_i_; -text: .text%__1cIPhaseIFGQeffective_degree6kMI_i_; -text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_; -text: .text%__1cIPhaseIFGJre_insert6MI_v_; -text: .text%__1cIPhaseIFGLremove_node6MI_pnIIndexSet__; -text: .text%__1cWShouldNotReachHereNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cMMachProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cOPhaseIdealLoopEsort6MpnNIdealLoopTree_2_2_; -text: .text%__1cJiRegPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cMPhaseIterGVNWadd_users_to_worklist06MpnENode__v_; -text: .text%__1cDfh16FI_i_; -text: .text%__1cIIndexSetKfree_block6MI_v_; -text: .text%__1cNMachIdealNodeErule6kM_I_: ad_sparc.o; -text: .text%__1cIBoolNodeGOpcode6kM_i_; -text: .text%__1cIConINodeGOpcode6kM_i_; -text: .text%__1cHTypeIntEhash6kM_i_; -text: .text%__1cOPhaseIdealLoopOget_early_ctrl6MpnENode__2_; -text: .text%__1cIPhaseGVNJtransform6MpnENode__2_; -text: .text%__1cHConNodeGOpcode6kM_i_; -text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; -text: .text%__1cJMarkSweepSMarkAndPushClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cYCallStaticJavaDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIciObjectEhash6M_i_; -text: .text%__1cXPipeline_Use_Cycle_Mask2L6Mi_r0_: ad_sparc_pipeline.o; -text: .text%__1cOPhaseIdealLoopUbuild_loop_tree_impl6MpnENode_i_i_; -text: .text%__1cENodeEgrow6MI_v_; -text: .text%__1cKRegionNodeGOpcode6kM_i_; -text: .text%__1cMMachProjNodeGOpcode6kM_i_; -text: .text%__1cITypeNodeEhash6kM_I_; -text: .text%__1cITypeLongEhash6kM_i_; -text: .text%__1cLmethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cRMachSpillCopyNodeLbottom_type6kM_pknEType__: ad_sparc.o; -text: .text%__1cIProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOPhaseIdealLoopThas_local_phi_input6MpnENode__2_; -text: .text%__1cRmethodDataOopDescHdata_at6Mi_pnLProfileData__; -text: .text%__1cNRelocIteratorFreloc6M_pnKRelocation__; -text: .text%__1cIIndexSetKinitialize6MIpnFArena__v_; -text: .text%__1cQconstMethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cENodeIIdentity6MpnOPhaseTransform__p0_; -text: .text%__1cENodeNis_block_proj6kM_pk0_; -text: .text%__1cPJavaFrameAnchorNmake_walkable6MpnKJavaThread__v_; -text: .text%__1cGcmpkey6Fpkv1_i_; -text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cUParallelScavengeHeapVlarge_typearray_limit6M_L_: parallelScavengeHeap.o; -text: .text%__1cLTypeInstPtrEhash6kM_i_; -text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cIPhaseCCPOtransform_once6MpnENode__2_; -text: .text%__1cPClassFileStreamGget_u16MpnGThread__C_; -text: .text%__1cbAfinal_graph_reshaping_impl6FpnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cKTypeAryPtrEhash6kM_i_; -text: .text%__1cYCallStaticJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSInterpreterRuntimeInewarray6FpnKJavaThread_nJBasicType_i_v_; -text: .text%__1cOPhaseIdealLoopZremix_address_expressions6MpnENode__2_; -text: .text%__1cOtypeArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cMPipeline_UseMfull_latency6kMIrk0_I_; -text: .text%__1cOPhaseIdealLoopNget_late_ctrl6MpnENode_2_2_; -text: .text%__1cKbranchNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLmethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQconstMethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cENodeFclone6kM_p0_; -text: .text%__1cMloadConPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMMachProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cGciTypeEmake6FnJBasicType__p0_; -text: .text%__1cENodeKmatch_edge6kMI_I_; -text: .text%__1cMMachProjNodeLout_RegMask6kM_rknHRegMask__: classes.o; -text: .text%__1cICallNodeLbottom_type6kM_pknEType__; -text: .text%__1cRMachSpillCopyNodeLout_RegMask6kM_rknHRegMask__: ad_sparc.o; -text: .text%__1cETypeFxmeet6kMpk0_2_; -text: .text%__1cJVectorSet2F6kMI_i_; -text: .text%__1cENodeQIdeal_DU_postCCP6MpnIPhaseCCP__p0_; -text: .text%__1cOoop_RelocationLunpack_data6M_v_; -text: .text%__1cIProjNodeEhash6kM_I_; -text: .text%__1cRMachSpillCopyNodeKin_RegMask6kMI_rknHRegMask__: ad_sparc.o; -text: .text%__1cILRG_ListGextend6MII_v_; -text: .text%__1cIPipelinePoperand_latency6kMIpk0_I_; -text: .text%__1cICmpPNodeGOpcode6kM_i_; -text: .text%__1cIConLNodeGOpcode6kM_i_; -text: .text%__1cJStartNodeLbottom_type6kM_pknEType__; -text: .text%__1cRMachSpillCopyNodePoper_input_base6kM_I_: ad_sparc.o; -text: .text%__1cRmethodDataOopDescJnext_data6MpnLProfileData__2_; -text: .text%__1cHPhiNodeEhash6kM_I_; -text: .text%__1cITypeNodeJideal_reg6kM_I_; -text: .text%__1cIAddINodeGOpcode6kM_i_; -text: .text%__1cENodeHsize_of6kM_I_; -text: .text%__1cYCallStaticJavaDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKNode_ArrayGremove6MI_v_; -text: .text%__1cIIndexSet2t6Mp0_v_; -text: .text%__1cHPhiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMloadConPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQUnique_Node_ListGremove6MpnENode__v_; -text: .text%__1cIProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cKoopFactoryKnew_symbol6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cMPhaseIterGVNVadd_users_to_worklist6MpnENode__v_; -text: .text%__1cKmethodOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cILocationIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cMMergeMemNodeGOpcode6kM_i_; -text: .text%__1cNLocationValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cENode2t6Mp0_v_; -text: .text%__1cPciObjectFactoryDget6MpnHoopDesc__pnIciObject__; -text: .text%__1cNCatchProjNodeGOpcode6kM_i_; -text: .text%__1cICmpINodeGOpcode6kM_i_; -text: .text%__1cFframeVinterpreter_frame_bcp6kM_pC_; -text: .text%__1cMPipeline_UseJadd_usage6Mrk0_v_; -text: .text%__1cGIfNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPClassFileStreamHskip_u16MipnGThread__v_; -text: .text%__1cJloadINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_; -text: .text%__1cIAddPNodeKmatch_edge6kMI_I_; -text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__; -text: .text%__1cJLoadPNodeGOpcode6kM_i_; -text: .text%__1cHRegMaskMSmearToPairs6M_v_; -text: .text%__1cMOopMapStreamJfind_next6M_v_; -text: .text%__1cMMachTypeNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cIParmNodeGOpcode6kM_i_; -text: .text%__1cKSchedulingPAddNodeToBundle6MpnENode_pknFBlock__v_; -text: .text%__1cKSchedulingWAddNodeToAvailableList6MpnENode__v_; -text: .text%__1cKSchedulingSChooseNodeToBundle6M_pnENode__; -text: .text%__1cICodeHeapKfind_start6kMpv_1_; -text: .text%__1cOThreadCritical2T6M_v_; -text: .text%__1cOThreadCritical2t6M_v_; -text: .text%__1cENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICallNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cHPhiNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIMachNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cICmpUNodeGOpcode6kM_i_; -text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__; -text: .text%__1cENodeHdel_req6MI_v_; -text: .text%__1cMMutableSpaceMcas_allocate6ML_pnIHeapWord__; -text: .text%__1cETypeEhash6kM_i_; -text: .text%__1cPClassFileParserRverify_legal_utf86MpkCipnGThread__v_; -text: .text%__1cNsymbolOopDescLas_C_string6kM_pc_; -text: .text%__1cJiRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cTCreateExceptionNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAddPNodeLbottom_type6kM_pknEType__; -text: .text%__1cUParallelScavengeHeapWpermanent_mem_allocate6ML_pnIHeapWord__; -text: .text%__1cJPSPermGenSallocate_permanent6ML_pnIHeapWord__; -text: .text%__1cMMutableSpaceIallocate6ML_pnIHeapWord__; -text: .text%__1cNSharedRuntimeDd2i6Fd_i_; -text: .text%__1cOPhaseIdealLoopbIdom_lca_for_get_late_ctrl_internal6MpnENode_22_2_; -text: .text%JVM_CurrentTimeMillis; -text: .text%__1cFBlockIis_Empty6kM_i_; -text: .text%__1cILoadNodeEhash6kM_I_; -text: .text%__1cJCProjNodeEhash6kM_I_: classes.o; -text: .text%__1cJCatchNodeGOpcode6kM_i_; -text: .text%__1cIHaltNodeGOpcode6kM_i_; -text: .text%__1cMloadConINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHTypeIntFxmeet6kMpknEType__3_; -text: .text%__1cNflagsRegPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cLConvI2LNodeGOpcode6kM_i_; -text: .text%__1cKRelocationLunpack_data6M_v_: ad_sparc.o; -text: .text%__1cMPhaseIterGVNZremove_globally_dead_node6MpnENode__v_; -text: .text%__1cIJVMStateLdebug_start6kM_I_; -text: .text%__1cRSignatureIterator2t6MnMsymbolHandle__v_; -text: .text%__1cFStateRMachNodeGenerator6MipnHCompile__pnIMachNode__; -text: .text%__1cHMatcherKReduceInst6MpnFState_irpnENode__pnIMachNode__; -text: .text%method_compare: methodOop.o; -text: .text%__1cXPipeline_Use_Cycle_MaskCOr6Mrk0_v_; -text: .text%__1cILoadNodeLbottom_type6kM_pknEType__; -text: .text%__1cWShouldNotReachHereNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_; -text: .text%__1cKHandleMark2T6M_v_; -text: .text%__1cJiRegLOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cMMergeMemNodeLbottom_type6kM_pknEType__: memnode.o; -text: .text%__1cJTypeTupleEhash6kM_i_; -text: .text%__1cJloadPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKCastPPNodeGOpcode6kM_i_; -text: .text%__1cITypeLongFxmeet6kMpknEType__3_; -text: .text%__1cHPhiNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cPconvI2L_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadPNodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_ReleaseUTF; -text: .text%__1cObranchConPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKNode_ArrayEgrow6MI_v_; -text: .text%__1cJMultiNodeIproj_out6kMI_pnIProjNode__; -text: .text%__1cZPhaseConservativeCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cOAbstractICachePinvalidate_word6FpC_v_; -text: .text%__1cMloadConINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cGIfNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIAddPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRNativeInstructionLset_long_at6Mii_v_; -text: .text%__1cFDictI2i6M_v_; -text: .text%__1cMPhaseChaitinSuse_prior_register6MpnENode_I2pnFBlock_rnJNode_List_6_i_; -text: .text%__1cPSignatureStreamEnext6M_v_; -text: .text%__1cKoopFactoryMnew_objArray6FpnMklassOopDesc_ipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassRallocate_objArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cGBitMapJset_union6M0_v_; -text: .text%__1cIConPNodeGOpcode6kM_i_; -text: .text%__1cKRelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cHTypeIntEmake6Fi_pk0_; -text: .text%__1cKRegionNodeEhash6kM_I_: classes.o; -text: .text%__1cMflagsRegOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cPindOffset13OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cOPSPromotionLABKinitialize6MnJMemRegion__v_; -text: .text%__1cJLoadINodeGOpcode6kM_i_; -text: .text%__1cHPhiNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cHTypeIntEmake6Fiii_pk0_; -text: .text%__1cENodeIdestruct6M_v_; -text: .text%__1cIBoolNodeEhash6kM_I_; -text: .text%JVM_GetMethodIxExceptionTableLength; -text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; -text: .text%__1cPClassFileParserUassemble_annotations6MpCi1ipnGThread__nPtypeArrayHandle__; -text: .text%__1cMPhaseIterGVNKis_IterGVN6M_p0_: phaseX.o; -text: .text%__1cGBitMap2t6MpLL_v_; -text: .text%__1cUcompI_iReg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOJNIHandleBlockPallocate_handle6MpnHoopDesc__pnI_jobject__; -text: .text%__1cEDict2F6kMpkv_pv_; -text: .text%__1cFParsePdo_one_bytecode6M_v_; -text: .text%__1cFParseNdo_exceptions6M_v_; -text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; -text: .text%__1cNbranchConNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cVcompP_iRegP_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNLoadRangeNodeGOpcode6kM_i_; -text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_; -text: .text%__1cHMatcherKmatch_tree6MpknENode__pnIMachNode__; -text: .text%__1cLTypeInstPtrFxmeet6kMpknEType__3_; -text: .text%__1cKNode_ArrayFclear6M_v_; -text: .text%__1cIHaltNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cIProjNodeHsize_of6kM_I_; -text: .text%__1cMCreateExNodeGOpcode6kM_i_; -text: .text%__1cHhashptr6Fpkv_i_; -text: .text%__1cLLShiftLNodeGOpcode6kM_i_; -text: .text%__1cMMachCallNodeLbottom_type6kM_pknEType__; -text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cHhashkey6Fpkv_i_; -text: .text%__1cHSubNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cObranchConPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cTconstantPoolOopDescWsignature_ref_index_at6Mi_i_; -text: .text%__1cKRelocationRpd_set_data_value6MpCl_v_; -text: .text%__1cODataRelocationJset_value6MpC_v_: relocInfo.o; -text: .text%__1cOoop_RelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cOoop_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cOcompU_iRegNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMMachHaltNodeEjvms6kM_pnIJVMState__; -text: .text%__1cHConNodeEhash6kM_I_; -text: .text%__1cKimmI13OperIconstant6kM_l_: ad_sparc_clone.o; -text: .text%__1cMPhaseChaitinHnew_lrg6MpknENode_I_v_; -text: .text%__1cIMachNodeHtwo_adr6kM_I_: ad_sparc.o; -text: .text%__1cHCmpNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMPhaseIterGVNMsubsume_node6MpnENode_2_v_; -text: .text%__1cENode2t6Mp011_v_; -text: .text%__1cIPhaseIFGMtest_edge_sq6kMII_i_; -text: .text%__1cICodeHeapJnext_free6kMpnJHeapBlock__pv_; -text: .text%__1cNSafePointNodeHsize_of6kM_I_; -text: .text%__1cICodeHeapKnext_block6kMpnJHeapBlock__2_; -text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__; -text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_; -text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_; -text: .text%__1cJloadPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJStoreNodeKmatch_edge6kMI_I_; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: generateOopMap.o; -text: .text%__1cIJVMStateJdebug_end6kM_I_; -text: .text%__1cNCellTypeStateFmerge6kM0i_0_; -text: .text%__1cPcheckCastPPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFArenaEgrow6ML_pv_; -text: .text%__1cJloadBNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQResultTypeFinderDset6MinJBasicType__v_: bytecode.o; -text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__; -text: .text%__1cILoadNodeKmatch_edge6kMI_I_; -text: .text%__1cCosVcurrent_stack_pointer6F_pC_; -text: .text%__1cPciInstanceKlassGloader6M_pnHoopDesc__; -text: .text%__1cNbranchConNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAddPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQaddP_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cObranchConPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIBoolNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKRegionNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSaddI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cKStorePNodeGOpcode6kM_i_; -text: .text%__1cJiRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKStoreINodeGOpcode6kM_i_; -text: .text%__1cHPhiNodeHsize_of6kM_I_: cfgnode.o; -text: .text%__1cObranchConUNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOloadConI13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJHashtableJnew_entry6MIpnHoopDesc__pnOHashtableEntry__; -text: .text%__1cQaddP_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIHaltNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPciInstanceKlassRprotection_domain6M_pnHoopDesc__; -text: .text%__1cOloadConI13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cPcheckCastPPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJStoreNodeLbottom_type6kM_pknEType__; -text: .text%__1cITypeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRSignatureIterator2t6MpnNsymbolOopDesc__v_; -text: .text%__1cNflagsRegUOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cOPSPromotionLABFflush6M_v_; -text: .text%__1cKJNIHandlesKmake_local6FpnHJNIEnv__pnHoopDesc__pnI_jobject__; -text: .text%__1cSCountedLoopEndNodeGOpcode6kM_i_; -text: .text%__1cITypeNodeDcmp6kMrknENode__I_; -text: .text%__1cILoadNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJloadINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIBoolNodeLbottom_type6kM_pknEType__: subnode.o; -text: .text%__1cJrelocInfoNfinish_prefix6Mph_p0_; -text: .text%__1cLCounterDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__; -text: .text%__1cOMachReturnNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cJCodeCacheJfind_blob6Fpv_pnICodeBlob__; -text: .text%__1cPCheckCastPPNodeGOpcode6kM_i_; -text: .text%__1cNPhaseCoalesceRcombine_these_two6MpnENode_2_v_; -text: .text%__1cKcmpOpPOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cMPhaseChaitinLinsert_proj6MpnFBlock_IpnENode_I_v_; -text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cICallNodeIIdentity6MpnOPhaseTransform__pnENode__: callnode.o; -text: .text%__1cJcmpOpOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cOAbstractICacheQinvalidate_range6FpCi_v_; -text: .text%__1cHPhiNodeIadr_type6kM_pknHTypePtr__: cfgnode.o; -text: .text%__1cKstorePNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNSafePointNodeSset_next_exception6Mp0_v_; -text: .text%__1cNRelocIteratorKset_limits6MpC1_v_; -text: .text%__1cILoadNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNCollectedHeapXallocate_from_tlab_slow6FpnGThread_L_pnIHeapWord__; -text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_; -text: .text%__1cPsplit_flow_path6FpnIPhaseGVN_pnHPhiNode__pnENode__: cfgnode.o; -text: .text%__1cUParallelScavengeHeapRallocate_new_tlab6ML_pnIHeapWord__; -text: .text%__1cWThreadLocalAllocBufferEfill6MpnIHeapWord_2L_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode__i_; -text: .text%__1cKCodeBuffer2t6MpCi_v_; -text: .text%__1cKNode_Array2t6MpnFArena__v_: block.o; -text: .text%__1cMMergeMemNodeEhash6kM_I_; -text: .text%__1cENodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRNativeInstructionQset_data64_sethi6FpCl_v_; -text: .text%__1cHRetNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cRInvocationCounterEinit6M_v_; -text: .text%__1cXPhaseAggressiveCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cFBlockScall_catch_cleanup6MrnLBlock_Array__v_; -text: .text%__1cTconstantPoolOopDescNklass_name_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cITypeNodeHsize_of6kM_I_; -text: .text%__1cKRegionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstorePNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cTconstantPoolOopDescRname_ref_index_at6Mi_i_; -text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cIRootNodeGOpcode6kM_i_; -text: .text%__1cOloadConI13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENodeRdisconnect_inputs6Mp0_i_; -text: .text%__1cMObjectLocker2T6M_v_; -text: .text%__1cSinstanceKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cIAddINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cJTypeTupleEmake6FIppknEType__pk0_; -text: .text%__1cJTypeTupleGfields6FI_ppknEType__; -text: .text%__1cOcompI_iRegNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPcheckCastPPNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNidealize_test6FpnIPhaseGVN_pnGIfNode__3_: ifnode.o; -text: .text%__1cHAddNodeEhash6kM_I_; -text: .text%__1cRmethodDataOopDescPinitialize_data6MpnOBytecodeStream_i_i_; -text: .text%__1cRmethodDataOopDescTbytecode_cell_count6FnJBytecodesECode__i_; -text: .text%__1cRAbstractAssemblerEbind6MrnFLabel__v_; -text: .text%__1cNExceptionMark2T6M_v_; -text: .text%__1cNExceptionMark2t6MrpnGThread__v_; -text: .text%__1cPconvI2L_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLLShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cTCreateExceptionNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJStoreNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLsymbolKlassPallocate_symbol6MpCipnGThread__pnNsymbolOopDesc__; -text: .text%__1cLSymbolTableJbasic_add6MipCiIpnGThread__pnNsymbolOopDesc__; -text: .text%__1cNbranchConNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMachOperNconstant_disp6kM_i_; -text: .text%__1cIMachOperFscale6kM_i_; -text: .text%__1cIsplit_if6FpnGIfNode_pnMPhaseIterGVN__pnENode__: ifnode.o; -text: .text%__1cKbranchNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cTremove_useless_bool6FpnGIfNode_pnIPhaseGVN__pnENode__: ifnode.o; -text: .text%__1cJloadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSafePointNodeLbottom_type6kM_pknEType__: callnode.o; -text: .text%__1cLLShiftINodeGOpcode6kM_i_; -text: .text%__1cLklassItable2t6MnTinstanceKlassHandle__v_; -text: .text%__1cJFieldTypeKbasic_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cFChunkJnext_chop6M_v_; -text: .text%__1cENode2t6Mp0111_v_; -text: .text%__1cObranchConUNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPcheckCastPPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMPhaseChaitinMyank_if_dead6MpnENode_pnFBlock_pnJNode_List_6_i_; -text: .text%__1cISubINodeGOpcode6kM_i_; -text: .text%__1cHTypeAryEhash6kM_i_; -text: .text%__1cIMachNodePcompute_padding6kMi_i_: ad_sparc.o; -text: .text%__1cIMachNodeSalignment_required6kM_i_: ad_sparc.o; -text: .text%__1cTconstantPoolOopDescSklass_at_if_loaded6FnSconstantPoolHandle_i_pnMklassOopDesc__; -text: .text%__1cNinstanceKlassGitable6kM_pnLklassItable__; -text: .text%__1cJStoreNodeEhash6kM_I_; -text: .text%__1cNSafePointNodeOnext_exception6kM_p0_; -text: .text%JVM_GetClassModifiers; -text: .text%__1cJCProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJMultiNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%JVM_GetClassAccessFlags; -text: .text%__1cFBlockOcode_alignment6M_I_; -text: .text%__1cKSchedulingPComputeUseCount6MpknFBlock__v_; -text: .text%__1cKSchedulingbFComputeRegisterAntidependencies6MpnFBlock__v_; -text: .text%__1cJCatchNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cENodeKreplace_by6Mp0_v_; -text: .text%__1cHTypePtrHget_con6kM_l_; -text: .text%__1cHCmpNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cMloadConPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cIimmPOperEtype6kM_pknEType__: ad_sparc_clone.o; -text: .text%Unsafe_CompareAndSwapLong; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceKlass.o; -text: .text%__1cPfieldDescriptorKinitialize6MpnMklassOopDesc_i_v_; -text: .text%__1cPPerfLongVariantGsample6M_v_; -text: .text%__1cFStateM_sub_Op_RegP6MpknENode__v_; -text: .text%__1cYDebugInformationRecorderTcreate_scope_values6MpnNGrowableArray4CpnKScopeValue____pnKDebugToken__; -text: .text%__1cSaddP_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHTypePtrEhash6kM_i_; -text: .text%__1cFBlockLfind_remove6MpknENode__v_; -text: .text%__1cNCompileBrokerLmaybe_block6F_v_; -text: .text%__1cFPhase2t6Mn0ALPhaseNumber__v_; -text: .text%__1cKTypeRawPtrEhash6kM_i_; -text: .text%__1cPcompP_iRegPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRMachSpillCopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLciSignatureLreturn_type6kM_pnGciType__; -text: .text%JVM_GetCPMethodSignatureUTF; -text: .text%__1cWstatic_stub_RelocationLunpack_data6M_v_; -text: .text%__1cIMachOperIconstant6kM_l_; -text: .text%__1cMPhaseChaitinSget_spillcopy_wide6MpnENode_2I_2_; -text: .text%__1cMURShiftINodeGOpcode6kM_i_; -text: .text%__1cKMemBarNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cKIfTrueNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKRegionNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cUArgumentSizeComputerDset6MinJBasicType__v_: frame.o; -text: .text%__1cSaddI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLMachNopNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIIndexSetJlrg_union6MIIkIpknIPhaseIFG_rknHRegMask__I_; -text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cVCompressedWriteStream2t6Mi_v_; -text: .text%__1cJiRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQaddI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMMergeMemNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cMLinkResolverbAcheck_method_accessability6FnLKlassHandle_11nMmethodHandle_pnGThread__v_; -text: .text%__1cMMergeMemNodePiteration_setup6Mpk0_v_; -text: .text%__1cIGraphKitJclone_map6M_pnNSafePointNode__; -text: .text%__1cFKlassNlookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cRMemBarReleaseNodeGOpcode6kM_i_; -text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; -text: .text%__1cNSafePointNodeKmatch_edge6kMI_I_; -text: .text%__1cFBlockJfind_node6kMpknENode__I_; -text: .text%__1cRPSOldPromotionLABFflush6M_v_; -text: .text%__1cLIfFalseNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKbranchNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcompU_iRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNloadRangeNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIBoolNodeKmatch_edge6kMI_I_: subnode.o; -text: .text%__1cKcmpOpUOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__; -text: .text%__1cMMergeMemNodePset_base_memory6MpnENode__v_; -text: .text%__1cIciObjectJset_ident6MI_v_; -text: .text%__1cGBitMapOset_difference6M0_v_; -text: .text%__1cMPhaseChaitinFUnion6MpknENode_3_v_; -text: .text%__1cKJNIHandlesKmake_local6FpnHoopDesc__pnI_jobject__; -text: .text%__1cNLoadKlassNodeGOpcode6kM_i_; -text: .text%__1cLstoreI0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cObranchConUNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNSafePointNodeEjvms6kM_pnIJVMState__: callnode.o; -text: .text%__1cENodeHget_ptr6kM_l_; -text: .text%__1cLBoxLockNodeGOpcode6kM_i_; -text: .text%__1cKTypeAryPtrFxmeet6kMpknEType__3_; -text: .text%__1cHAddNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIHaltNodeLbottom_type6kM_pknEType__; -text: .text%__1cQaddP_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENodeHins_req6MIp0_v_; -text: .text%__1cRshlL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMTypeKlassPtrEhash6kM_i_; -text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cUcompI_iReg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetMethodIxLocalsCount; -text: .text%__1cSaddP_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cJloadINodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMMergeMemNodeJmemory_at6kMI_pnENode__; -text: .text%__1cOFastUnlockNodeGOpcode6kM_i_; -text: .text%__1cIMachOperOindex_position6kM_i_; -text: .text%__1cRcmpFastUnlockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIAndINodeGOpcode6kM_i_; -text: .text%JVM_CurrentThread; -text: .text%__1cRMemBarAcquireNodeGOpcode6kM_i_; -text: .text%__1cIJVMStateIof_depth6kMi_p0_; -text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cPindOffset13OperNbase_position6kM_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperNconstant_disp6kM_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperFscale6kM_i_: ad_sparc.o; -text: .text%__1cHPhiNodeEmake6FpnENode_2pknEType_pknHTypePtr__p0_; -text: .text%__1cLstoreI0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshlI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJVectorSet2L6MI_rnDSet__; -text: .text%__1cNloadRangeNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIciObject2t6MnGHandle__v_; -text: .text%__1cMciMethodDataLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cXmembar_release_lockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cWShouldNotReachHereNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKMemBarNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cVcompP_iRegP_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENode2t6Mp01_v_; -text: .text%__1cMloadConLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPciObjectFactoryRcreate_new_object6MpnHoopDesc__pnIciObject__; -text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_; -text: .text%__1cKstorePNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNObjectMonitorEexit6MpnGThread__v_; -text: .text%__1cIAddPNodeQmach_bottom_type6FpknIMachNode__pknEType__; -text: .text%__1cJVectorSet2t6MpnFArena__v_; -text: .text%__1cOcompU_iRegNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRSignatureIteratorSiterate_parameters6ML_v_; -text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; -text: .text%__1cMMergeMemNodeNset_memory_at6MIpnENode__v_; -text: .text%__1cICallNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cJTraceTime2T6M_v_; -text: .text%__1cENodeDcmp6kMrk0_I_; -text: .text%__1cFStateM_sub_Op_ConI6MpknENode__v_; -text: .text%__1cPcheckCastPPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cUcompI_iReg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNSignatureInfoHdo_void6M_v_: bytecode.o; -text: .text%__1cNmethodOopDescbAcompute_size_of_parameters6MpnGThread__v_; -text: .text%__1cSconstMethodOopDescLobject_size6Fiiii_i_; -text: .text%__1cSconstMethodOopDescZset_inlined_tables_length6Miii_v_; -text: .text%__1cLmethodKlassIallocate6MnRconstMethodHandle_nLAccessFlags_pnGThread__pnNmethodOopDesc__; -text: .text%__1cFStateM_sub_Op_AddP6MpknENode__v_; -text: .text%__1cKo0RegPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cITypeFuncEhash6kM_i_; -text: .text%__1cKStoreBNodeGOpcode6kM_i_; -text: .text%__1cLRShiftINodeGOpcode6kM_i_; -text: .text%__1cMURShiftLNodeGOpcode6kM_i_; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cQaddI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRshrI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKklassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cKklassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJMarkSweepXrevisit_weak_klass_link6FpnFKlass__v_; -text: .text%__1cFKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cMCallLeafNodeGOpcode6kM_i_; -text: .text%__1cKstoreINodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cWconstantPoolCacheKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cLklassVtableToop_adjust_pointers6M_v_; -text: .text%__1cLklassVtableToop_follow_contents6M_v_; -text: .text%__1cLProfileDataPadjust_pointers6M_v_: ciMethodData.o; -text: .text%__1cLProfileDataPfollow_contents6M_v_: ciMethodData.o; -text: .text%__1cLConvI2LNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSaddP_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMachNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cIMachOperMdisp_as_type6kM_pknHTypePtr__: ad_sparc.o; -text: .text%__1cMloadConDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSCallLeafDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTCreateExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_GetCPMethodClassNameUTF; -text: .text%__1cENodeIadd_prec6Mp0_v_; -text: .text%__1cHCompileYout_preserve_stack_slots6F_I_; -text: .text%__1cFStateM_sub_Op_ConL6MpknENode__v_; -text: .text%__1cIAddLNodeGOpcode6kM_i_; -text: .text%__1cVcompP_iRegP_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJlabelOperFlabel6kM_pnFLabel__: ad_sparc.o; -text: .text%__1cSaddP_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMmerge_region6FpnKRegionNode_pnIPhaseGVN__pnENode__: cfgnode.o; -text: .text%__1cNloadRangeNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cXmembar_acquire_lockNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cLBoxLockNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLciSignatureHtype_at6kMi_pnGciType__; -text: .text%__1cFStateM_sub_Op_RegI6MpknENode__v_; -text: .text%__1cSconstMethodOopDescbBcompressed_linenumber_table6kM_pC_; -text: .text%__1cNSafePointNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitLclean_stack6Mi_v_; -text: .text%__1cNflagsRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cWMachCallStaticJavaNodePret_addr_offset6M_i_; -text: .text%__1cPSignatureStreamJas_symbol6MpnGThread__pnNsymbolOopDesc__; -text: .text%__1cICmpPNodeDsub6kMpknEType_3_3_; -text: .text%__1cJAssemblerOpatched_branch6Fiii_i_; -text: .text%__1cJAssemblerSbranch_destination6Fii_i_; -text: .text%JVM_IsNaN; -text: .text%__1cIRootNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKstoreINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQaddI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cITypeFuncEmake6FpknJTypeTuple_3_pk0_; -text: .text%__1cXruntime_call_RelocationEtype6M_nJrelocInfoJrelocType__: ad_sparc.o; -text: .text%__1cKbranchNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMloadConDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQaddP_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cHMemNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cOGenerateOopMapHinterp16MpnOBytecodeStream__v_; -text: .text%__1cOPhaseIdealLoopIset_idom6MpnENode_2I_v_; -text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cMflagsRegOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cJLoadPNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRMachSafePointNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cIGraphKitQkill_dead_locals6M_v_; -text: .text%__1cLklassItableToop_adjust_pointers6M_v_; -text: .text%__1cNinstanceKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cNinstanceKlassUadjust_static_fields6M_v_; -text: .text%__1cSinstanceKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLklassItableToop_follow_contents6M_v_; -text: .text%__1cSinstanceKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cRconstantPoolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cRconstantPoolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNinstanceKlassUfollow_static_fields6M_v_; -text: .text%__1cPindOffset13OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cIAddINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cHOrINodeGOpcode6kM_i_; -text: .text%__1cLBoxLockNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMMergeMemNode2t6MpnENode__v_; -text: .text%__1cMLinkResolverZcheck_field_accessability6FnLKlassHandle_11rnPfieldDescriptor_pnGThread__v_; -text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cIRootNodeNis_block_proj6kM_pknENode__: classes.o; -text: .text%__1cOCallRelocationFvalue6M_pC_: ad_sparc.o; -text: .text%__1cSCallLeafDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cCosMvm_page_size6F_i_; -text: .text%__1cNloadKlassNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPconvI2L_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJStartNodeGOpcode6kM_i_; -text: .text%__1cOcompI_iRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMTypeKlassPtrEmake6FnHTypePtrDPTR_pnHciKlass_i_pk0_; -text: .text%__1cSvframeStreamCommonEnext6M_v_; -text: .text%__1cYDebugInformationRecorderVcreate_monitor_values6MpnNGrowableArray4CpnMMonitorValue____pnKDebugToken__; -text: .text%__1cJStoreNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQPreserveJVMState2T6M_v_; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_: bytecode.o; -text: .text%__1cMPhaseChaitinPset_was_spilled6MpnENode__v_; -text: .text%__1cQsubI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMloadConPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKStoreCNodeGOpcode6kM_i_; -text: .text%__1cRloadConP_pollNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLstoreI0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVcompP_iRegP_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKit2t6MpnIJVMState__v_; -text: .text%__1cETypeFwiden6kMpk0_2_: type.o; -text: .text%__1cSaddI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__; -text: .text%__1cFciEnvSget_field_by_index6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cCosGmalloc6FL_pv_; -text: .text%__1cPciInstanceKlassYunique_concrete_subklass6M_p0_; -text: .text%__1cXmembar_release_lockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassKinitialize6MpnGThread__v_; -text: .text%__1cRlock_ptr_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cOPhaseIdealLoopQconditional_move6MpnENode__2_; -text: .text%__1cMloadConLNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseMmerge_common6Mpn0AFBlock_i_v_; -text: .text%__1cJloadSNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRcmpFastUnlockNodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_GetCPFieldClassNameUTF; -text: .text%__1cMtlsLoadPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cTCreateExceptionNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_; -text: .text%__1cIciObjectIencoding6M_pnI_jobject__; -text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__; -text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; -text: .text%__1cUcompI_iReg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cITypeLongFxdual6kM_pknEType__; -text: .text%__1cOtypeArrayKlassSallocate_permanent6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cQaddP_reg_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cLBoxLockNodeHsize_of6kM_I_; -text: .text%__1cICmpINodeDsub6kMpknEType_3_3_; -text: .text%__1cIBoolNodeJideal_reg6kM_I_: subnode.o; -text: .text%__1cHCmpNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJloadINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTciConstantPoolCacheDget6Mi_pv_; -text: .text%__1cJLoadSNodeGOpcode6kM_i_; -text: .text%__1cITypeFuncEmake6FpnIciMethod__pk0_; -text: .text%__1cHRetNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPcompP_iRegPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNloadRangeNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_; -text: .text%__1cMloadConPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMstringStreamFwrite6MpkcL_v_; -text: .text%__1cFStateK_sub_Op_If6MpknENode__v_; -text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_; -text: .text%__1cQSystemDictionarybEresolve_instance_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cKTypeOopPtrHget_con6kM_l_; -text: .text%__1cMLinkResolverMresolve_pool6FrnLKlassHandle_rnMsymbolHandle_42nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoolHandle_inJBytecodesECode_pnGThread__v_; -text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_: frame.o; -text: .text%__1cIAndLNodeGOpcode6kM_i_; -text: .text%__1cICmpUNodeDsub6kMpknEType_3_3_; -text: .text%__1cSCallLeafDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcompI_iRegNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNCatchProjNodeLbottom_type6kM_pknEType__: cfgnode.o; -text: .text%__1cFciEnvTget_method_by_index6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cFciEnvYget_method_by_index_impl6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; -text: .text%__1cKTypeAryPtrFklass6kM_pnHciKlass__; -text: .text%__1cJloadFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPcheckCastPPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__; -text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_; -text: .text%__1cNloadRangeNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSsafePoint_pollNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNCatchProjNodeHsize_of6kM_I_: cfgnode.o; -text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cPcmpFastLockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cXmembar_acquire_lockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJLoadBNodeGOpcode6kM_i_; -text: .text%__1cRshlL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitOset_all_memory6MpnENode__v_; -text: .text%__1cHBitDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cENodeNadd_req_batch6Mp0I_v_; -text: .text%__1cIJVMStateLdebug_depth6kM_I_; -text: .text%__1cNLoadRangeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJLoadLNodeGOpcode6kM_i_; -text: .text%__1cRshlL_reg_imm6NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRshrP_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIGraphKitTadd_exception_state6MpnNSafePointNode__v_; -text: .text%__1cOcompU_iRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRInterpretedRFrameKtop_method6kM_nMmethodHandle__: rframe.o; -text: .text%__1cPconvI2L_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLstoreB0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFParseFBlockKinit_graph6Mp0_v_; -text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cIMachNodeOpipeline_class6F_pknIPipeline__; -text: .text%__1cLstoreB0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKciTypeFlowLStateVectorOpush_translate6MpnGciType__v_; -text: .text%__1cICodeHeapLheader_size6F_L_; -text: .text%__1cNinstanceKlassSlookup_osr_nmethod6kMkpnNmethodOopDesc_i_pnHnmethod__; -text: .text%__1cPcompP_iRegPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadKlassNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; -text: .text%__1cIPhaseGVNUtransform_no_reclaim6MpnENode__2_; -text: .text%__1cIimmIOperIconstant6kM_l_: ad_sparc_clone.o; -text: .text%__1cKCompiledICOic_destination6kM_pC_; -text: .text%__1cKCompiledIC2t6MpnKRelocation__v_; -text: .text%__1cCosEfree6Fpv_v_; -text: .text%__1cLConvL2INodeGOpcode6kM_i_; -text: .text%__1cIMulLNodeGOpcode6kM_i_; -text: .text%__1cFParseMdo_one_block6M_v_; -text: .text%__1cILoadNodeHsize_of6kM_I_; -text: .text%__1cQsubI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cPCountedLoopNodeGOpcode6kM_i_; -text: .text%__1cQaddP_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMVirtualSpaceOcommitted_size6kM_L_; -text: .text%__1cHMatcherKmatch_sfpt6MpnNSafePointNode__pnIMachNode__; -text: .text%__1cPVirtualCallDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cIAddINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNloadConP0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRloadConP_pollNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMethodLivenessKBasicBlockJpropagate6Mp0_v_; -text: .text%__1cKciTypeFlowGJsrSet2t6MpnFArena_i_v_; -text: .text%__1cMFastLockNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopIsink_use6MpnENode_2_v_; -text: .text%__1cFBlockKsched_call6MrnHMatcher_rnLBlock_Array_IrnJNode_List_pipnMMachCallNode_rnJVectorSet__I_; -text: .text%__1cMloadConINodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cHTypeAryFxmeet6kMpknEType__3_; -text: .text%__1cKmethodOperGmethod6kM_l_: ad_sparc.o; -text: .text%__1cIGraphKitbDtransfer_exceptions_into_jvms6M_pnIJVMState__; -text: .text%__1cOPhaseIdealLoopRregister_new_node6MpnENode_2_v_; -text: .text%__1cNflagsRegUOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFKlassIsubklass6kM_p0_; -text: .text%__1cMciMethodDataLhas_trap_at6MpnLProfileData_i_i_; -text: .text%__1cURethrowExceptionNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cIGraphKitJsync_jvms6kM_pnIJVMState__; -text: .text%__1cLTypeInstPtrFxdual6kM_pknEType__; -text: .text%__1cGOopMap2t6Mii_v_; -text: .text%__1cEUTF8Hstrrchr6FpWiW_1_; -text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_; -text: .text%JVM_GetCPMethodNameUTF; -text: .text%__1cKstoreINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cGvframe2t6MpknFframe_pknLRegisterMap_pnKJavaThread__v_; -text: .text%__1cLRegisterMap2t6Mpk0_v_; -text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cGvframeKnew_vframe6FpknFframe_pknLRegisterMap_pnKJavaThread__p0_; -text: .text%__1cHOopFlowNbuild_oop_map6MpnENode_ipnNPhaseRegAlloc_pi_pnGOopMap__; -text: .text%__1cIciSymbol2t6MnMsymbolHandle__v_; -text: .text%__1cILoopNodeGOpcode6kM_i_; -text: .text%__1cHCompileTProcess_OopMap_Node6MpnIMachNode_i_v_; -text: .text%__1cPsp_ptr_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cHPhiNodeEmake6FpnENode_2_p0_; -text: .text%__1cTconstantPoolOopDescOstring_at_impl6FnSconstantPoolHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_; -text: .text%__1cHTypeIntFxdual6kM_pknEType__; -text: .text%__1cLPCTableNodeLbottom_type6kM_pknEType__; -text: .text%__1cRshrI_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKReturnNodeKmatch_edge6kMI_I_; -text: .text%__1cKBranchDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cNCatchProjNodeEhash6kM_I_; -text: .text%__1cQsubI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKReturnNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopGspinup6MpnENode_2222pnLsmall_cache__2_; -text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cMCreateExNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cKstoreCNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cICallNodeJideal_reg6kM_I_: callnode.o; -text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__; -text: .text%__1cPmethodDataKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cLBoxLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMacroAssemblerEcall6MpCnJrelocInfoJrelocType__v_: ad_sparc.o; -text: .text%__1cMPhaseIterGVNJtransform6MpnENode__2_; -text: .text%__1cEUTF8Ounicode_length6Fpkci_i_; -text: .text%__1cIPhaseIFGFUnion6MII_v_; -text: .text%__1cKStoreLNodeGOpcode6kM_i_; -text: .text%__1cRshlI_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cYCallStaticJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCallGenerator2t6MpnIciMethod__v_; -text: .text%__1cPThreadLocalNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKstoreCNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cYCallStaticJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYCallStaticJavaDirectNodeKmethod_set6Ml_v_; -text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_; -text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cOPhaseIdealLoopKhandle_use6MpnENode_2pnLsmall_cache_22222_v_; -text: .text%__1cOPhaseIdealLoopOfind_use_block6MpnENode_22222_2_; -text: .text%__1cKciTypeFlowKflow_block6Mpn0AFBlock_pn0ALStateVector_pn0AGJsrSet__v_; -text: .text%__1cKciTypeFlowQadd_to_work_list6Mpn0AFBlock__v_; -text: .text%__1cINodeHashLhash_insert6MpnENode__v_; -text: .text%__1cJVectorSetFClear6M_v_; -text: .text%__1cEUTF8Enext6FpkcpH_pc_; -text: .text%__1cENodeJset_req_X6MIp0pnMPhaseIterGVN__v_; -text: .text%__1cJloadLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPorI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKciTypeFlowFBlockScompute_exceptions6M_v_; -text: .text%__1cYciExceptionHandlerStreamFcount6M_i_; -text: .text%__1cMindIndexOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cSmembar_acquireNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSaddP_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRcmpFastUnlockNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMelapsedTimerFstart6M_v_; -text: .text%__1cMelapsedTimerEstop6M_v_; -text: .text%__1cHCompileSflatten_alias_type6kMpknHTypePtr__3_; -text: .text%__1cRInterpretedRFrameEinit6M_v_; -text: .text%__1cENodeLnonnull_req6kM_p0_; -text: .text%__1cRshrI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetCPFieldSignatureUTF; -text: .text%__1cYcompareAndSwapL_boolNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cICmpLNodeGOpcode6kM_i_; -text: .text%__1cSMemBarCPUOrderNodeGOpcode6kM_i_; -text: .text%__1cKMemBarNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cHMulNodeEhash6kM_I_; -text: .text%__1cGPcDesc2t6Miii_v_; -text: .text%__1cJLoadINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIGraphKit2t6M_v_; -text: .text%__1cYcompareAndSwapL_boolNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%jni_DeleteLocalRef: jni.o; -text: .text%__1cIGraphKitNset_map_clone6MpnNSafePointNode__v_; -text: .text%__1cMoutputStreamDput6Mc_v_; -text: .text%__1cMtlsLoadPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cENodeLbottom_type6kM_pknEType__; -text: .text%__1cIAddPNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cPcmpFastLockNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIXorINodeGOpcode6kM_i_; -text: .text%__1cRshlL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKJNIHandlesKmake_local6FpnGThread_pnHoopDesc__pnI_jobject__; -text: .text%__1cOloadConI13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmembar_acquireNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSaddP_reg_imm13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nGHandle__; -text: .text%__1cIregDOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cHCompileKalias_type6MpnHciField__pn0AJAliasType__; -text: .text%__1cLOptoRuntimeSuncommon_trap_Type6F_pknITypeFunc__; -text: .text%__1cIHaltNode2t6MpnENode_2_v_; -text: .text%__1cRMachNullCheckNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cPmethodDataKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cPmethodDataKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cTStackWalkCompPolicyRcompilation_level6MnMmethodHandle_i_i_; -text: .text%__1cRsarI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cXmembar_acquire_lockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQaddI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cWCallLeafNoFPDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIciSymbolEmake6Fpkc_p0_; -text: .text%__1cRshlI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJFieldTypeOget_array_info6FpnNsymbolOopDesc_pip2pnGThread__nJBasicType__; -text: .text%__1cWstatic_stub_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cMPhaseChaitinNFind_compress6MpknENode__I_; -text: .text%__1cIciMethodRget_flow_analysis6M_pnKciTypeFlow__; -text: .text%__1cSsafePoint_pollNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKbranchNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cKbranchNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNLoadKlassNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%jni_GetObjectField: jni.o; -text: .text%__1cOcompI_iRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitOreplace_in_map6MpnENode_2_v_; -text: .text%__1cIAddINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNloadKlassNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQandL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cINodeHashJhash_find6MpknENode__p1_; -text: .text%__1cHCompileKTracePhase2T6M_v_; -text: .text%__1cJloadSNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJloadBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFChunk2n6FLL_pv_; -text: .text%__1cMPhaseChaitinLclone_projs6MpnFBlock_IpnENode_4rI_i_; -text: .text%__1cHTypeIntFwiden6kMpknEType__3_; -text: .text%__1cIJVMState2t6MpnIciMethod_p0_v_; -text: .text%__1cOMethodLivenessKBasicBlock2t6Mp0ii_v_; -text: .text%__1cOMethodLivenessKBasicBlockQcompute_gen_kill6MpnIciMethod__v_; -text: .text%__1cHAddNodePadd_of_identity6kMpknEType_3_3_; -text: .text%__1cJTypeTupleKmake_range6FpnLciSignature__pk0_; -text: .text%__1cTCompareAndSwapLNodeGOpcode6kM_i_; -text: .text%__1cJTypeTupleLmake_domain6FpnPciInstanceKlass_pnLciSignature__pk0_; -text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; -text: .text%__1cTCreateExceptionNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMtlsLoadPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNloadConP0NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; -text: .text%__1cSsafePoint_pollNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMWarmCallInfoKalways_hot6F_p0_; -text: .text%__1cLBuildCutout2t6MpnIGraphKit_pnENode_ff_v_; -text: .text%__1cRshlI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHMulNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMURShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKarrayKlassLobject_size6kMi_i_; -text: .text%__1cIProjNodeDcmp6kMrknENode__I_; -text: .text%__1cKMemBarNodeEhash6kM_I_; -text: .text%__1cPcompP_iRegPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLstoreB0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLBoxLockNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cRsarI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadKlassNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPorI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMMergeMemNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCatchProjNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIGraphKitZadd_exception_states_from6MpnIJVMState__v_; -text: .text%__1cQSystemDictionaryEfind6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; -text: .text%__1cGRFrame2t6MnFframe_pnKJavaThread_kp0_v_; -text: .text%__1cIciMethodTcall_profile_at_bci6Mi_nNciCallProfile__; -text: .text%__1cWCallLeafNoFPDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__; -text: .text%__1cFParseHdo_call6M_v_; -text: .text%__1cIGraphKitWround_double_arguments6MpnIciMethod__v_; -text: .text%__1cIGraphKitTround_double_result6MpnIciMethod__v_; -text: .text%__1cFParseMprofile_call6MpnENode__v_; -text: .text%__1cKarrayKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cLklassVtableIindex_of6kMpnNmethodOopDesc_i_i_; -text: .text%__1cNloadKlassNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNGCTaskManagerIget_task6MI_pnGGCTask__; -text: .text%__1cLGCTaskQdDueueGremove6M_pnGGCTask__; -text: .text%__1cLGCTaskQdDueueHenqueue6MpnGGCTask__v_; -text: .text%__1cNGCTaskManagerPnote_completion6MI_v_; -text: .text%__1cIGraphKitUmake_exception_state6MpnENode__pnNSafePointNode__; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceKlass.o; -text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMloadConFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_: objArrayKlassKlass.o; -text: .text%__1cKstoreCNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLProfileDataOtranslate_from6Mp0_v_: ciMethodData.o; -text: .text%__1cFStateM_sub_Op_ConP6MpknENode__v_; -text: .text%__1cIAddINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; -text: .text%__1cRsarI_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIBoolNodeHsize_of6kM_I_; -text: .text%__1cGGCTask2t6M_v_; -text: .text%__1cGIfNodeHsize_of6kM_I_: classes.o; -text: .text%__1cICodeHeapSallocated_capacity6kM_L_; -text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__; -text: .text%__1cIGraphKitMsaved_ex_oop6FpnNSafePointNode__pnENode__; -text: .text%__1cKimmL13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cOstackSlotLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNSafePointNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQCallLeafNoFPNodeGOpcode6kM_i_; -text: .text%__1cSPSPromotionManagerbBgc_thread_promotion_manager6Fi_p0_; -text: .text%__1cJloadPNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPBytecode_invokeJsignature6kM_pnNsymbolOopDesc__; -text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; -text: .text%__1cNSignatureInfoGdo_int6M_v_: bytecode.o; -text: .text%__1cKInlineTreeMok_to_inline6MpnIciMethod_pnIJVMState_rnNciCallProfile_pnMWarmCallInfo__8_; -text: .text%__1cRshrI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cICHeapObj2n6FL_pv_; -text: .text%__1cIGraphKitTset_all_memory_call6MpnENode__v_; -text: .text%__1cWShouldNotReachHereNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIHaltNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cWShouldNotReachHereNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMloadConINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cKimmL13OperIconstant6kM_l_: ad_sparc_clone.o; -text: .text%__1cFTypeDEhash6kM_i_; -text: .text%__1cPconvL2I_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRInterpreterOopMap2T6M_v_; -text: .text%__1cLOopMapCacheGlookup6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cRInterpreterOopMapLiterate_oop6MpnNOffsetClosure__v_; -text: .text%__1cNinstanceKlassImask_for6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cRInterpreterOopMap2t6M_v_; -text: .text%__1cNmethodOopDescImask_for6MipnRInterpreterOopMap__v_; -text: .text%__1cOClearArrayNodeGOpcode6kM_i_; -text: .text%__1cJStartNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cJloadSNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQandL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMachNodeRget_base_and_disp6kMrlrpknHTypePtr__pknENode__; -text: .text%__1cJloadLNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%jni_ExceptionOccurred: jni.o; -text: .text%__1cHoopDescSslow_identity_hash6M_l_; -text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__l_; -text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cLstoreP0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cUcompU_iReg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cKBufferBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cMPeriodicTaskOreal_time_tick6FL_v_; -text: .text%__1cPStatSamplerTaskEtask6M_v_: statSampler.o; -text: .text%__1cURethrowExceptionNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPciInstanceKlassFsuper6M_p0_; -text: .text%__1cKciTypeFlowLStateVectorStype_meet_internal6FpnGciType_3p0_3_; -text: .text%__1cETypeRget_typeflow_type6FpnGciType__pk0_; -text: .text%jni_GetArrayLength: jni.o; -text: .text%__1cLLShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQsubI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMindIndexOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cVCompressedWriteStreamEgrow6M_v_; -text: .text%__1cWCallLeafNoFPDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_Write; -text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; -text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; -text: .text%__1cOMachReturnNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cLciSignature2t6MpnHciKlass_pnIciSymbol__v_; -text: .text%__1cIciMethod2t6MnMmethodHandle__v_; -text: .text%__1cICodeHeapIcapacity6kM_L_; -text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cMCodeHeapPoolNused_in_bytes6M_L_: memoryPool.o; -text: .text%__1cKMemoryPoolImax_size6kM_L_: memoryPool.o; -text: .text%JVM_RawMonitorExit; -text: .text%JVM_RawMonitorEnter; -text: .text%__1cIParmNodeJideal_reg6kM_I_; -text: .text%__1cLRethrowNodeGOpcode6kM_i_; -text: .text%__1cRbranchLoopEndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLTypeInstPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cJloadLNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cISubINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQConstantIntValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cTconstantPoolOopDescbDresolve_string_constants_impl6FnSconstantPoolHandle_pnGThread__v_; -text: .text%__1cNCompileBrokerOcompile_method6FnMmethodHandle_i1ipkcpnGThread__pnHnmethod__; -text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; -text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: classFileParser.o; -text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; -text: .text%__1cLLShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPcmpFastLockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIGraphKitNbuiltin_throw6MnODeoptimizationLDeoptReason_pnENode__v_; -text: .text%__1cFParseFmerge6Mi_v_; -text: .text%__1cHConNodeLout_RegMask6kM_rknHRegMask__: classes.o; -text: .text%__1cNSignatureInfoHdo_bool6M_v_: bytecode.o; -text: .text%__1cIGraphKitHjava_bc6kM_nJBytecodesECode__; -text: .text%__1cMloadConFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKMemBarNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cPciInstanceKlassUget_canonical_holder6Mi_p0_; -text: .text%__1cLLShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLPCTableNodeEhash6kM_I_; -text: .text%__1cFframeRoops_code_blob_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cOloadConI13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSandI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFArena2T6M_v_; -text: .text%__1cSbranchCon_longNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNflagsRegLOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cMPhaseChaitinNFind_compress6MI_I_; -text: .text%__1cJTypeTupleFxdual6kM_pknEType__; -text: .text%__1cQandI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMloadConLNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cJStoreNodeSIdeal_masked_input6MpnIPhaseGVN_I_pnENode__; -text: .text%__1cRcmpFastUnlockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapHget_var6Mi_nNCellTypeState__; -text: .text%__1cJStoreNodeZIdeal_sign_extended_input6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cFStateN_sub_Op_LoadP6MpknENode__v_; -text: .text%__1cIAddLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJloadSNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadBNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreLNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%jni_GetSuperclass: jni.o; -text: .text%__1cLOpaque1NodeGOpcode6kM_i_; -text: .text%__1cIJumpDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; -text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; -text: .text%__1cObranchConPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMtlsLoadPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMindirectOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKcmpOpPOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cRshrP_reg_imm6NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPcmpFastLockNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cObranchConPNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cObranchConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIimmPOperIconstant6kM_l_: ad_sparc_clone.o; -text: .text%__1cIciObjectFklass6M_pnHciKlass__; -text: .text%__1cGciType2t6MnLKlassHandle__v_; -text: .text%__1cQjava_lang_StringGlength6FpnHoopDesc__i_; -text: .text%__1cHciKlass2t6MnLKlassHandle__v_; -text: .text%__1cKstoreLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJcmpOpOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cQmulL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRinterpretedVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cITypeFuncFxdual6kM_pknEType__; -text: .text%__1cICHeapObj2k6Fpv_v_; -text: .text%__1cHPhiNodeMslice_memory6kMpknHTypePtr__p0_; -text: .text%__1cXPhaseAggressiveCoalesceYinsert_copy_with_overlap6MpnFBlock_pnENode_II_v_; -text: .text%__1cOGenerateOopMapGppload6MpnNCellTypeState_i_v_; -text: .text%__1cFTypeFEhash6kM_i_; -text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__; -text: .text%__1cFArena2t6M_v_; -text: .text%__1cRmethodDataOopDescJbci_to_dp6Mi_pC_; -text: .text%__1cPorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseOreturn_current6MpnENode__v_; -text: .text%__1cLstoreP0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cMURShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; -text: .text%__1cILoadNodeDcmp6kMrknENode__I_; -text: .text%__1cPCheckCastPPNodeJideal_reg6kM_I_: connode.o; -text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; -text: .text%__1cQxorI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFStateM_sub_Op_CmpI6MpknENode__v_; -text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_; -text: .text%__1cIBoolNodeDcmp6kMrknENode__I_; -text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; -text: .text%jni_GetPrimitiveArrayCritical: jni.o; -text: .text%__1cSmembar_releaseNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHnmethodHoops_do6MpnKOopClosure__v_; -text: .text%__1cRloadConP_pollNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cNimmP_pollOperEtype6kM_pknEType__: ad_sparc_clone.o; -text: .text%__1cMMonitorValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cLRethrowNodeKmatch_edge6kMI_I_; -text: .text%__1cIregFOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cKTypeAryPtrFxdual6kM_pknEType__; -text: .text%__1cIMulINodeGOpcode6kM_i_; -text: .text%__1cHTypeAryEmake6FpknEType_pknHTypeInt__pk0_; -text: .text%__1cRcompL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKCastPPNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cFStateM_sub_Op_AddI6MpknENode__v_; -text: .text%__1cMURShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKstorePNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJMultiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMloadConINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; -text: .text%__1cENodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopOsplit_thru_phi6MpnENode_2i_2_; -text: .text%__1cRshrP_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMURShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQComputeCallStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cISubINodeDsub6kMpknEType_3_3_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_; -text: .text%__1cFParseLbuild_exits6M_v_; -text: .text%__1cFParseIdo_exits6M_v_; -text: .text%__1cFParseQcreate_entry_map6M_pnNSafePointNode__; -text: .text%__1cFParse2t6MpnIJVMState_pnIciMethod_f_v_; -text: .text%__1cFArenaEused6kM_L_; -text: .text%__1cOParseGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cNbranchConNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_IsSameObject: jni.o; -text: .text%__1cNCallGeneratorKfor_inline6FpnIciMethod_f_p0_; -text: .text%__1cFParsePdo_method_entry6M_v_; -text: .text%__1cGRFrameGcaller6M_p0_; -text: .text%__1cFframeLreal_sender6kMpnLRegisterMap__0_; -text: .text%__1cNbranchConNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cNbranchConNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmembar_releaseNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLSymbolTableFprobe6Fpkci_pnNsymbolOopDesc__; -text: .text%__1cKTypeRawPtrFxmeet6kMpknEType__3_; -text: .text%__1cQandI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPClassFileParserbCverify_legal_class_modifiers6MipnGThread__v_; -text: .text%__1cPCheckCastPPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRciVirtualCallDataOtranslate_from6MpnLProfileData__v_; -text: .text%__1cZPhaseConservativeCoalesceKupdate_ifg6MIIpnIIndexSet_2_v_; -text: .text%__1cZPhaseConservativeCoalesceMunion_helper6MpnENode_2II222pnFBlock_I_v_; -text: .text%__1cIIndexSetEswap6Mp0_v_; -text: .text%__1cLOpaque1NodeEhash6kM_I_; -text: .text%__1cLAccessFlagsPatomic_set_bits6Mi_v_; -text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cHCompileFstart6kM_pnJStartNode__; -text: .text%__1cNinstanceKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cPThreadLocalNodeGOpcode6kM_i_; -text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; -text: .text%__1cSbranchCon_longNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; -text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; -text: .text%__1cLRegisterMapIpd_clear6M_v_; -text: .text%__1cIciObject2t6M_v_; -text: .text%__1cRbranchLoopEndNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cMciMethodData2t6M_v_; -text: .text%__1cPciObjectFactoryUget_empty_methodData6M_pnMciMethodData__; -text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%__1cIMulLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIciMethodbBinterpreter_call_site_count6Mi_i_; -text: .text%__1cZCallDynamicJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSconstMethodOopDescZchecked_exceptions_length6kM_i_; -text: .text%__1cHCompileXin_preserve_stack_slots6M_I_; -text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cKTypeOopPtrEhash6kM_i_; -text: .text%__1cIMulINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMCreateExNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_: jni.o; -text: .text%__1cNCatchProjNodeDcmp6kMrknENode__I_; -text: .text%__1cIAddLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cFKlassQset_next_sibling6MpnMklassOopDesc__v_; -text: .text%__1cKJavaThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; -text: .text%__1cMCreateExNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNloadRangeNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJloadBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRshrP_reg_imm6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFKlassMnext_sibling6kM_p0_; -text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_; -text: .text%__1cQaddL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQinstanceRefKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%JVM_GetMethodIxModifiers; -text: .text%__1cHSubNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cTCreateExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRshrL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNSCMemProjNodeGOpcode6kM_i_; -text: .text%__1cLRShiftLNodeGOpcode6kM_i_; -text: .text%JVM_IsInterface; -text: .text%__1cPThreadRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cPThreadRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cLsymbolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cQaddL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOGenerateOopMapUreachable_basicblock6Fp0ipi_v_; -text: .text%__1cHOrINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJloadINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cICodeHeapIallocate6ML_pv_; -text: .text%__1cICodeHeapPsearch_freelist6ML_pnJFreeBlock__; -text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__; -text: .text%__1cKstoreLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRcompL_reg_conNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQxorI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUPipeline_Use_Element2t6M_v_: output.o; -text: .text%__1cXmembar_release_lockNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cYcompareAndSwapL_boolNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHCompileSregister_intrinsic6MpnNCallGenerator__v_; -text: .text%__1cKTypeRawPtrHget_con6kM_l_; -text: .text%__1cISubINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cTCallDynamicJavaNodeGOpcode6kM_i_; -text: .text%__1cMloadConLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFciEnvRfind_system_klass6MpnIciSymbol__pnHciKlass__; -text: .text%__1cPciInstanceKlassLfind_method6MpnIciSymbol_2_pnIciMethod__; -text: .text%__1cIGraphKitYcombine_exception_states6MpnNSafePointNode_2_v_; -text: .text%__1cHUNICODEHas_utf86FpHi_pc_; -text: .text%__1cIDivINodeGOpcode6kM_i_; -text: .text%__1cSobjArrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; -text: .text%__1cQconstMethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cPorI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMinINodeGOpcode6kM_i_; -text: .text%__1cTStackWalkCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; -text: .text%__1cKJavaThreadQlast_java_vframe6MpnLRegisterMap__pnKjavaVFrame__; -text: .text%__1cTStackWalkCompPolicyVfindTopInlinableFrame6MpnNGrowableArray4CpnGRFrame____2_; -text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_nMmethodHandle__v_; -text: .text%__1cLLShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; -text: .text%__1cNNativeFarCallPset_destination6MpC_v_; -text: .text%__1cObranchConUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitZset_results_for_java_call6MpnMCallJavaNode__pnENode__; -text: .text%__1cISubLNodeGOpcode6kM_i_; -text: .text%__1cLOpaque1NodeLbottom_type6kM_pknEType__: connode.o; -text: .text%__1cKcmpOpUOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cObranchConUNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cObranchConUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; -text: .text%__1cLmethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cOMacroAssemblerNverify_thread6M_v_; -text: .text%__1cRbranchLoopEndNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLBlock_ArrayEgrow6MI_v_; -text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; -text: .text%__1cSCountedLoopEndNodeKstride_con6kM_i_; -text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_; -text: .text%__1cNSafePointNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cHciField2t6MpnPfieldDescriptor__v_; -text: .text%__1cJloadLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cUcompI_iReg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLBoxLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvL2I_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSbranchCon_longNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFciEnvVget_constant_by_index6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cFciEnvbAget_constant_by_index_impl6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cJimmU5OperIconstant6kM_l_: ad_sparc_clone.o; -text: .text%__1cJloadSNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; -text: .text%__1cMloadConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHRetNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIregFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cSaddI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTemit_java_to_interp6FrnKCodeBuffer__v_; -text: .text%__1cObranchConPNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cKcmpOpPOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cLstoreP0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQandL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_; -text: .text%__1cLRShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOMethodLivenessKBasicBlockJstore_one6Mi_v_; -text: .text%__1cKstoreBNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cOcompU_iRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvL2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMloadConPNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitJpush_node6MnJBasicType_pnENode__v_: callGenerator.o; -text: .text%jni_SetObjectArrayElement: jni.o; -text: .text%__1cIGraphKitbBset_arguments_for_java_call6MpnMCallJavaNode__v_; -text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_: universe.o; -text: .text%__1cRsarI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_: bytecode.o; -text: .text%__1cPSignatureStreamRas_symbol_or_null6M_pnNsymbolOopDesc__; -text: .text%__1cOClearArrayNodeKmatch_edge6kMI_I_; -text: .text%__1cSandI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPcmpFastLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitGmemory6MI_pnENode__; -text: .text%__1cZresource_reallocate_bytes6FpcLL_0_; -text: .text%__1cTDirectCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cNCallGeneratorPfor_direct_call6FpnIciMethod__p0_; -text: .text%__1cMWarmCallInfoLalways_cold6F_p0_; -text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; -text: .text%__1cXAdaptiveWeightedAverageGsample6Mf_v_; -text: .text%__1cTStackWalkCompPolicyYmethod_back_branch_event6MnMmethodHandle_iipnGThread__v_; -text: .text%__1cLLShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRCompilationPolicybJreset_counter_for_back_branch_event6MnMmethodHandle__v_; -text: .text%__1cJPhaseLiveHcompute6MI_v_; -text: .text%__1cIPhaseIFGEinit6MI_v_; -text: .text%__1cSandI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLRShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cLConvI2LNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cJimmU6OperIconstant6kM_l_: ad_sparc_clone.o; -text: .text%__1cJcmpOpOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cKstorePNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cQmulL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitMreset_memory6M_pnENode__; -text: .text%__1cQPSGenerationPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cPThreadLocalNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQaddL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKBufferBlobGcreate6Fpkci_p0_; -text: .text%__1cKstorePNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetCPClassNameUTF; -text: .text%__1cOGenerateOopMapLbb_mark_fct6Fp0ipi_v_; -text: .text%__1cIimmDOperJconstantD6kM_d_: ad_sparc_clone.o; -text: .text%__1cIAddLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%jni_GetStringLength: jni.o; -text: .text%__1cFTypeDEmake6Fd_pk0_; -text: .text%__1cIHaltNodeEhash6kM_I_: classes.o; -text: .text%__1cKReturnNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_; -text: .text%__1cMoutputStream2t6Mi_v_; -text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_; -text: .text%__1cMstringStream2t6ML_v_; -text: .text%__1cMstringStreamJas_string6M_pc_; -text: .text%__1cMstringStream2T6M_v_; -text: .text%__1cIModINodeGOpcode6kM_i_; -text: .text%__1cMloadConDNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cENodeMsetup_is_top6M_v_; -text: .text%__1cIGotoNodeGOpcode6kM_i_; -text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_; -text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; -text: .text%__1cMURShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIMachOperEtype6kM_pknEType__; -text: .text%__1cKPerfStringKset_string6Mpkc_v_; -text: .text%__1cMURShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cEDict2t6MpFpkv2_ipF2_i_v_; -text: .text%__1cEDict2T6M_v_; -text: .text%__1cbDcatch_cleanup_find_cloned_def6FpnFBlock_pnENode_1rnLBlock_Array_i_3_: lcm.o; -text: .text%__1cPconvI2L_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJimmU5OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cKimmI13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cIGraphKitTcreate_and_xform_if6MpnENode_2ff_pnGIfNode__: graphKit.o; -text: .text%__1cObranchConUNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cKcmpOpUOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cIGraphKitTuse_exception_state6MpnNSafePointNode__pnENode__; -text: .text%__1cKBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__; -text: .text%__1cKcmpOpPOperFequal6kM_i_: ad_sparc_clone.o; -text: .text%__1cHMemNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cOClearArrayNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPoolHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cRMachNullCheckNodeLout_RegMask6kM_rknHRegMask__: machnode.o; -text: .text%__1cKReturnNodeEhash6kM_I_: classes.o; -text: .text%__1cWImplicitExceptionTableGappend6MII_v_; -text: .text%__1cRMachNullCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQComputeCallStackHdo_void6M_v_: generateOopMap.o; -text: .text%__1cSTailCalljmpIndNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cSaddL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadConL0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOPhaseIdealLoopPis_counted_loop6MpnENode_pnNIdealLoopTree__2_; -text: .text%__1cIMaxINodeGOpcode6kM_i_; -text: .text%__1cFStateN_sub_Op_LoadI6MpknENode__v_; -text: .text%__1cQandL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddP_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNbranchConNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cSaddL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQandI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFKlassQup_cast_abstract6M_p0_; -text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cPjava_lang_ClassNcreate_mirror6FnLKlassHandle_pnGThread__pnHoopDesc__; -text: .text%__1cLBuildCutout2T6M_v_; -text: .text%__1cUcompU_iReg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKciTypeFlow2t6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cKciTypeFlowPget_start_state6M_pkn0ALStateVector__; -text: .text%__1cKciTypeFlowKflow_types6M_v_; -text: .text%__1cKciTypeFlowHdo_flow6M_v_; -text: .text%__1cKciTypeFlowKmap_blocks6M_v_; -text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cIAndINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cVshrL_reg_imm6_L2INodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIGraphKitPpush_pair_local6Mi_v_: parse2.o; -text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; -text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cUcompU_iReg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMciMethodDataJload_data6M_v_; -text: .text%__1cIciMethodJload_code6M_v_; -text: .text%__1cKKlass_vtbl2n6FLrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__; -text: .text%__1cIAndINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_; -text: .text%__1cHUNICODELutf8_length6FpHi_i_; -text: .text%jni_GetStringUTFLength: jni.o; -text: .text%jni_GetStringUTFRegion: jni.o; -text: .text%__1cFKlassRbase_create_klass6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__1_; -text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; -text: .text%__1cKTypeRawPtrEmake6FpC_pk0_; -text: .text%__1cQPlaceholderTableMremove_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cQsubL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKcmpOpPOperJnot_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cMTypeKlassPtrFxdual6kM_pknEType__; -text: .text%__1cQSystemDictionaryTload_instance_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cPconvL2I_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJTimeStampGupdate6M_v_; -text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_; -text: .text%__1cQjava_lang_StringRas_unicode_string6FpnHoopDesc_ri_pH_; -text: .text%JVM_InternString; -text: .text%__1cCosGrandom6F_l_; -text: .text%__1cNIdealLoopTreeMcounted_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cJCodeCacheEfree6FpnICodeBlob__v_; -text: .text%__1cICodeHeapKdeallocate6Mpv_v_; -text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cHCmpNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cMciMethodData2t6MnQmethodDataHandle__v_; -text: .text%__1cKBufferBlobEfree6Fp0_v_; -text: .text%jni_SetIntField: jni.o; -text: .text%__1cQmulL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadPNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadConP0NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cJimmP0OperEtype6kM_pknEType__: ad_sparc_clone.o; -text: .text%__1cIMulLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; -text: .text%__1cRcompL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQxorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZCallDynamicJavaDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRScavengeRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cKimmP13OperIconstant6kM_l_: ad_sparc_clone.o; -text: .text%__1cVcompP_iRegP_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRScavengeRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__; -text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; -text: .text%__1cFframeNoops_entry_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cPJavaCallWrapperHoops_do6MpnKOopClosure__v_; -text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_; -text: .text%__1cMtlsLoadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; -text: .text%__1cKcmpOpUOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cHPhiNodeDcmp6kMrknENode__I_; -text: .text%__1cLstoreI0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIPhaseIFGISquareUp6M_v_; -text: .text%__1cQmodI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreI0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_; -text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_: ciMethodData.o; -text: .text%__1cPCheckCastPPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cFParseQarray_addressing6MnJBasicType_ippknEType__pnENode__; -text: .text%__1cFKlassWappend_to_sibling_list6M_v_; -text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; -text: .text%__1cQSystemDictionarySjava_system_loader6F_pnHoopDesc__; -text: .text%__1cSandI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOopRecorder2t6MpnFArena__v_; -text: .text%__1cKklassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cOGenerateOopMapQnext_bb_start_pc6MpnKBasicBlock__i_; -text: .text%__1cOGenerateOopMapJinterp_bb6MpnKBasicBlock__v_; -text: .text%__1cKoopFactoryRnew_instanceKlass6FiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserUcompute_oop_map_size6MnTinstanceKlassHandle_ii_i_; -text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; -text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbAparse_classfile_attributes6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__; -text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_; -text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; -text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; -text: .text%__1cSinstanceKlassKlassXallocate_instance_klass6MiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; -text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; -text: .text%__1cNinstanceKlassQinit_implementor6M_v_; -text: .text%__1cNinstanceKlassQeager_initialize6MpnGThread__v_; -text: .text%__1cPClassFileStream2t6MpCipc_v_; -text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; -text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNIdealLoopTreeVadjust_loop_exit_prob6MpnOPhaseIdealLoop__v_; -text: .text%__1cSinstanceKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cNinstanceKlassScopy_static_fields6MpnSPSPromotionManager__v_; -text: .text%__1cOPhaseTransform2t6MnFPhaseLPhaseNumber__v_; -text: .text%__1cMPhaseIterGVNIoptimize6M_v_; -text: .text%__1cLRShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o; -text: .text%__1cNloadKlassNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o; -text: .text%__1cFVTuneOend_class_load6F_v_; -text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; -text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; -text: .text%__1cFVTuneQstart_class_load6F_v_; -text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; -text: .text%__1cKstoreINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cQmodI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNloadRangeNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHMemNodeHsize_of6kM_I_; -text: .text%__1cNPhaseCoalescePcoalesce_driver6M_v_; -text: .text%__1cMPhaseChaitinSbuild_ifg_physical6MpnMResourceArea__I_; -text: .text%__1cISubINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJloadFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLklassVtableYadd_new_mirandas_to_list6FpnNGrowableArray4CpnNmethodOopDesc___pnPobjArrayOopDesc_6pnMklassOopDesc__v_; -text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; -text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cJScopeDesc2t6MpknHnmethod_i_v_; -text: .text%JVM_GetMethodIxExceptionIndexes; -text: .text%JVM_GetMethodIxExceptionsCount; -text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_; -text: .text%JVM_GetMethodIxArgsSize; -text: .text%JVM_GetMethodIxByteCode; -text: .text%JVM_GetMethodIxByteCodeLength; -text: .text%__1cHAddNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_GetMethodIxSignatureUTF; -text: .text%__1cOcompiledVFrame2t6MpknFframe_pknLRegisterMap_pnKJavaThread_pnJScopeDesc__v_; -text: .text%JVM_GetMethodIxMaxStack; -text: .text%__1cKoopFactoryWnew_permanent_intArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cPClassFileParserVparse_exception_table6MIInSconstantPoolHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cFframeZinterpreter_frame_set_bcx6Ml_v_; -text: .text%__1cPconvL2I_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMnegF_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcompiledVFrameEcode6kM_pnHnmethod__; -text: .text%__1cMStartOSRNodeGOpcode6kM_i_; -text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; -text: .text%__1cSPSKeepAliveClosureGdo_oop6MppnHoopDesc__v_: psScavenge.o; -text: .text%__1cOcompI_iRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadConP0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSaddP_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbAPSEvacuateFollowersClosureHdo_void6M_v_: psScavenge.o; -text: .text%__1cNRelocIteratorTlocs_and_index_size6Fii_i_; -text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_; -text: .text%__1cYcompareAndSwapL_boolNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLOpaque1NodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOCompiledRFrameEinit6M_v_; -text: .text%__1cGvframeDtop6kM_p0_; -text: .text%__1cMURShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOPhaseIdealLoopMdominated_by6MpnENode_2_v_; -text: .text%__1cOGenerateOopMapHset_var6MinNCellTypeState__v_; -text: .text%__1cQandI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; -text: .text%__1cRshlL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNSharedRuntimebKexception_handler_for_return_address6FpC_1_; -text: .text%__1cIGraphKitHopt_iff6MpnENode_2_2_; -text: .text%__1cEDict2t6MpFpkv2_ipF2_ipnFArena_i_v_; -text: .text%__1cHMatcherFxform6MpnENode_i_2_; -text: .text%__1cJStartNodeHsize_of6kM_I_; -text: .text%__1cHMatcherLfind_shared6MpnENode__v_; -text: .text%__1cILoopNodeHsize_of6kM_I_: classes.o; -text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; -text: .text%__1cOloadConL13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKstoreBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNinstanceKlassbBcall_class_initializer_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cLOpaque2NodeGOpcode6kM_i_; -text: .text%__1cIProjNodeJideal_reg6kM_I_; -text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_; -text: .text%__1cHNTarjanICOMPRESS6M_v_; -text: .text%__1cQdivD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAndINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIAndINodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cUEdenMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cRmethodDataOopDescLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cYSurvivorMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cOMethodLivenessSpropagate_liveness6M_v_; -text: .text%__1cOMethodLivenessRinit_basic_blocks6M_v_; -text: .text%__1cOMethodLivenessNinit_gen_kill6M_v_; -text: .text%__1cOMethodLivenessQcompute_liveness6M_v_; -text: .text%__1cOMethodLiveness2t6MpnFArena_pnIciMethod__v_; -text: .text%__1cPcompP_iRegPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRloadConP_pollNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWconstantPoolCacheKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cZCallDynamicJavaDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cSaddL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVPreserveExceptionMark2T6M_v_; -text: .text%__1cVPreserveExceptionMark2t6MrpnGThread__v_; -text: .text%__1cFParseXcatch_inline_exceptions6MpnNSafePointNode__v_; -text: .text%__1cJLoadFNodeGOpcode6kM_i_; -text: .text%__1cYciExceptionHandlerStreamPcount_remaining6M_i_; -text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6ML_v_: jni.o; -text: .text%__1cQaddI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRInterpretedRFrameKtop_vframe6kM_pnKjavaVFrame__: rframe.o; -text: .text%__1cRinterpretedVFrameDbci6kM_i_; -text: .text%__1cOPhaseIdealLoopQset_subtree_ctrl6MpnENode__v_; -text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cKCodeBuffer2T6M_v_; -text: .text%__1cRcompL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetFieldIxModifiers; -text: .text%__1cMloadConLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLstoreB0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLLShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRmethodDataOopDescKmileage_of6FpnNmethodOopDesc__i_; -text: .text%__1cLRethrowNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRconstantPoolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%JVM_IsConstructorIx; -text: .text%__1cTMachCallRuntimeNodePret_addr_offset6M_i_; -text: .text%__1cKCMoveINodeGOpcode6kM_i_; -text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cQcmovI_reg_ltNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__; -text: .text%__1cHCompilebAvarargs_C_out_slots_killed6kM_I_; -text: .text%__1cHMulNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; -text: .text%__1cOGenerateOopMapKcopy_state6MpnNCellTypeState_2_v_; -text: .text%__1cIRootNodeFValue6kMpnOPhaseTransform__pknEType__: classes.o; -text: .text%__1cQxorI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUjni_invoke_nonstatic6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; -text: .text%__1cPCountedLoopNodeHsize_of6kM_I_: classes.o; -text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_; -text: .text%__1cSTailCalljmpIndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cIAndINodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIAndINodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cJcmpOpOperFequal6kM_i_: ad_sparc_clone.o; -text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; -text: .text%__1cFStateP_sub_Op_LShiftI6MpknENode__v_; -text: .text%__1cFParseFBlockRsuccessor_for_bci6Mi_p1_; -text: .text%__1cMoutputStreamFprint6MpkcE_v_; -text: .text%__1cIAndLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cHCompileQsync_stack_slots6kM_i_; -text: .text%__1cIAndLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cKo0RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLMachNopNodeMideal_Opcode6kM_i_: ad_sparc.o; -text: .text%__1cLMachNopNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHRetNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPBytecode_invokeFindex6kM_i_; -text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; -text: .text%__1cRloadConP_pollNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSignatureInfoHdo_long6M_v_: bytecode.o; -text: .text%__1cRshlI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQsubL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIXorINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPClassFileStreamGget_u86MpnGThread__X_; -text: .text%__1cKg1RegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLConvL2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRshrL_reg_imm6NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; -text: .text%__1cKPSYoungGenNused_in_bytes6kM_L_; -text: .text%__1cOPhaseIdealLoopRsplit_thru_region6MpnENode_2_2_; -text: .text%__1cFParseNthrow_to_exit6MpnNSafePointNode__v_; -text: .text%__1cRshrL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSxorI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%jni_ExceptionCheck: jni.o; -text: .text%__1cHPhiNodeKmake_blank6FpnENode_2_p0_; -text: .text%__1cNflagsRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cRcompL_reg_conNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_Clone; -text: .text%__1cNloadKlassNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateR_sub_Op_LoadKlass6MpknENode__v_; -text: .text%__1cJVectorSetGslamin6Mrk0_v_; -text: .text%__1cUcompU_iReg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cURethrowExceptionNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAddLNodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cHTypePtrFxmeet6kMpknEType__3_; -text: .text%__1cSMemBarVolatileNodeGOpcode6kM_i_; -text: .text%__1cIJumpDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cNloadConP0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJcmpOpOperEless6kM_i_: ad_sparc_clone.o; -text: .text%__1cMindirectOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindirectOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindirectOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindIndexOperOindex_position6kM_i_: ad_sparc.o; -text: .text%__1cMindIndexOperFscale6kM_i_: ad_sparc.o; -text: .text%__1cMindIndexOperNbase_position6kM_i_: ad_sparc.o; -text: .text%__1cMindIndexOperNconstant_disp6kM_i_: ad_sparc.o; -text: .text%__1cRAbstractAssemblerFflush6M_v_; -text: .text%__1cOstackSlotLOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cXmembar_release_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cKType_ArrayEgrow6MI_v_; -text: .text%__1cMTailCallNodeKmatch_edge6kMI_I_; -text: .text%__1cOMachEpilogNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJLoadLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLOptoRuntimeJstub_name6FpC_pkc_; -text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_: jni.o; -text: .text%__1cHOrINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cVshrL_reg_imm6_L2INodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHGCCauseJto_string6Fn0AFCause__pkc_; -text: .text%__1cKstoreLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKCompiledIC2t6MpnKNativeCall__v_; -text: .text%__1cIPhaseIFGYCompute_Effective_Degree6M_v_; -text: .text%__1cMPhaseChaitinISimplify6M_v_; -text: .text%__1cKstoreINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsubI_zero_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cICmpLNodeDsub6kMpknEType_3_3_; -text: .text%jni_NewObject: jni.o; -text: .text%__1cOPhaseIdealLoopNreorg_offsets6MpnNIdealLoopTree__v_; -text: .text%__1cSCallLeafDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKTypeRawPtrEmake6FnHTypePtrDPTR__pk0_; -text: .text%__1cFStateQ_sub_Op_URShiftI6MpknENode__v_; -text: .text%__1cKTypeAryPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cQaddL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLRShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIConFNodeGOpcode6kM_i_; -text: .text%__1cKstoreCNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; -text: .text%__1cFframeRretrieve_receiver6MpnLRegisterMap__pnHoopDesc__; -text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__; -text: .text%__1cJNode_ListEyank6MpnENode__v_; -text: .text%__1cNSafePointNodeLpop_monitor6M_v_; -text: .text%__1cIGraphKitNshared_unlock6MpnENode_2_v_; -text: .text%__1cLOptoRuntimebAcomplete_monitor_exit_Type6F_pknITypeFunc__; -text: .text%__1cRshrI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKciTypeFlowPflow_exceptions6MpnNGrowableArray4Cpn0AFBlock___pnNGrowableArray4CpnPciInstanceKlass___pn0ALStateVector__v_; -text: .text%__1cKstoreINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCallLeafDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNSafePointNodeMpush_monitor6MpknMFastLockNode__v_; -text: .text%__1cMPhaseChaitinVfind_base_for_derived6MppnENode_2rI_2_; -text: .text%__1cJLoadSNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQinstanceRefKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cSCallLeafDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCallLeafDirectNodeKmethod_set6Ml_v_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_tree6M_v_; -text: .text%__1cXmembar_release_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_SubI6MpknENode__v_; -text: .text%__1cFStateT_sub_Op_CheckCastPP6MpknENode__v_; -text: .text%__1cRshrL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPcheckCastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNIdealLoopTreeIset_nest6MI_i_; -text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_; -text: .text%__1cIAndINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRcompL_reg_conNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOloadConL13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRcmpFastUnlockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cKstoreFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFKlassDLCA6Mp0_1_; -text: .text%__1cHciKlassVleast_common_ancestor6Mp0_1_; -text: .text%__1cIRootNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cOPhaseIdealLoopKDominators6M_v_; -text: .text%__1cOPhaseIdealLoopQbuild_loop_early6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_late6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; -text: .text%__1cIMulLNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cMindirectOperNbase_position6kM_i_: ad_sparc.o; -text: .text%__1cMindirectOperNconstant_disp6kM_i_: ad_sparc.o; -text: .text%__1cMindirectOperFscale6kM_i_: ad_sparc.o; -text: .text%__1cZPhaseConservativeCoalesce2t6MrnMPhaseChaitin__v_; -text: .text%__1cYcompareAndSwapL_boolNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZPhaseConservativeCoalesceGverify6M_v_; -text: .text%__1cMPhaseChaitinZcompress_uf_map_for_nodes6M_v_; -text: .text%__1cMPhaseChaitinHcompact6M_v_; -text: .text%__1cMPhaseChaitinFSplit6MI_I_; -text: .text%__1cNSCMemProjNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKStoreFNodeGOpcode6kM_i_; -text: .text%__1cIimmPOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cRcmpFastUnlockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXmembar_release_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_NewGlobalRef: jni.o; -text: .text%__1cOPhaseIdealLoopOset_early_ctrl6MpnENode__v_; -text: .text%__1cOMachEpilogNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJCMoveNodeLis_cmove_id6FpnOPhaseTransform_pnENode_44pnIBoolNode__4_; -text: .text%__1cLRethrowNodeEhash6kM_I_: classes.o; -text: .text%__1cQsubI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmulI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFParseWensure_phis_everywhere6M_v_; -text: .text%__1cIregDOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__: cfgnode.o; -text: .text%__1cMloadConINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHOrINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMURShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIDivINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMVirtualSpaceNreserved_size6kM_L_; -text: .text%__1cKJavaThreadGactive6F_p0_; -text: .text%JVM_FillInStackTrace; -text: .text%__1cFParseKarray_load6MnJBasicType__v_; -text: .text%__1cUPSGenerationCountersKupdate_all6M_v_: psGenerationCounters.o; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle__v_; -text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_; -text: .text%__1cICodeHeapMmax_capacity6kM_L_; -text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_; -text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; -text: .text%__1cVCallRuntimeDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFStateQ_sub_Op_URShiftL6MpknENode__v_; -text: .text%__1cIAndLNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cIAndLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_; -text: .text%__1cKstoreFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPlocal_vsnprintf6FpcLpkcpv_i_; -text: .text%__1cNmethodOopDescVclear_native_function6M_v_; -text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; -text: .text%__1cIAndLNodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cIAndLNodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cbFunnecessary_membar_volatileNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cCosXthread_local_storage_at6Fi_pv_; -text: .text%__1cFTypeFEmake6Ff_pk0_; -text: .text%jio_snprintf; -text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%jni_NewLocalRef: jni.o; -text: .text%__1cIimmFOperJconstantF6kM_f_: ad_sparc_clone.o; -text: .text%__1cFParseNadd_safepoint6M_v_; -text: .text%__1cRcompL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIDivLNodeGOpcode6kM_i_; -text: .text%__1cQregF_to_stkINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIMinINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPClassFileParserbNparse_classfile_inner_classes_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__H_; -text: .text%__1cKReturnNodeJideal_reg6kM_I_: classes.o; -text: .text%jni_GetObjectArrayElement: jni.o; -text: .text%jni_DeleteGlobalRef: jni.o; -text: .text%__1cVAdaptivePaddedAverageGsample6Mf_v_; -text: .text%__1cMloadConFNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cENodeHrm_prec6MI_v_; -text: .text%__1cVPatchingRelocIteratorIpostpass6M_v_; -text: .text%__1cVPatchingRelocIteratorHprepass6M_v_; -text: .text%__1cJOopMapSet2t6M_v_; -text: .text%__1cRAbstractAssemblerOcode_fill_byte6F_i_; -text: .text%__1cLcmpD_ccNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLStrCompNodeGOpcode6kM_i_; -text: .text%__1cOCompiledRFrameKtop_method6kM_nMmethodHandle__: rframe.o; -text: .text%JVM_GetCPMethodModifiers; -text: .text%__1cIConDNodeGOpcode6kM_i_; -text: .text%__1cJOopMapSetHcopy_to6MpC_v_; -text: .text%jni_SetLongField: jni.o; -text: .text%__1cJOopMapSetJheap_size6kM_i_; -text: .text%__1cQjava_lang_ThreadRset_thread_status6FpnHoopDesc_n0AMThreadStatus__v_; -text: .text%__1cIAndLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQregP_to_stkPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIJVMState2t6Mi_v_; -text: .text%__1cLOpaque2NodeEhash6kM_I_; -text: .text%__1cNinstanceKlassPadd_implementor6MpnMklassOopDesc__v_; -text: .text%__1cLstoreB0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulDNodeGOpcode6kM_i_; -text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; -text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_; -text: .text%__1cOPhaseIdealLoopUsplit_if_with_blocks6MrnJVectorSet_rnKNode_Stack__v_; -text: .text%__1cLOopRecorderIoop_size6M_i_; -text: .text%__1cHnmethodKtotal_size6kM_i_; -text: .text%__1cNObjectMonitorHis_busy6kM_l_; -text: .text%__1cCosRcurrent_thread_id6F_l_; -text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_; -text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fl_v_; -text: .text%__1cHCompileICode_Gen6M_v_; -text: .text%__1cOCompileWrapper2t6MpnHCompile__v_; -text: .text%__1cHCompileEInit6Mi_v_; -text: .text%__1cUDebugInfoWriteStream2t6MpnYDebugInformationRecorder_i_v_; -text: .text%__1cYDebugInformationRecorder2t6MpnLOopRecorder__v_; -text: .text%__1cETypeKInitialize6FpnHCompile__v_; -text: .text%__1cFDictIFreset6MpknEDict__v_; -text: .text%__1cHMatcher2t6MrnJNode_List__v_; -text: .text%__1cHCompilebBregister_library_intrinsics6M_v_; -text: .text%__1cVExceptionHandlerTable2t6Mi_v_; -text: .text%__1cFArenaNmove_contents6Mp0_1_; -text: .text%__1cHCompileGOutput6M_v_; -text: .text%__1cFArenaRdestruct_contents6M_v_; -text: .text%__1cFArena2t6ML_v_; -text: .text%__1cHCompileLFill_buffer6M_v_; -text: .text%__1cHMatcherFmatch6M_v_; -text: .text%__1cIPhaseCFGYEstimate_Block_Frequency6M_v_; -text: .text%__1cHCompileTset_cached_top_node6MpnENode__v_; -text: .text%__1cLBlock_Array2t6MpnFArena__v_: block.o; -text: .text%__1cLdo_liveness6FpnNPhaseRegAlloc_pnIPhaseCFG_pnKBlock_List_ipnFArena_pnEDict__v_: buildOopMap.o; -text: .text%__1cHCompileMBuildOopMaps6M_v_; -text: .text%__1cIPhaseCFGJbuild_cfg6M_I_; -text: .text%__1cIPhaseCFG2t6MpnFArena_pnIRootNode_rnHMatcher__v_; -text: .text%__1cIPhaseCFGKDominators6M_v_; -text: .text%__1cOPhaseTransform2t6Mp0nFPhaseLPhaseNumber__v_; -text: .text%__1cLPhaseValues2t6Mp0_v_; -text: .text%__1cHCompileYinit_scratch_buffer_blob6M_v_; -text: .text%__1cIPhaseCFGVschedule_pinned_nodes6MrnJVectorSet__v_; -text: .text%__1cIPhaseCFGQGlobalCodeMotion6MrnHMatcher_IrnJNode_List__v_; -text: .text%__1cMPhaseChaitinbApost_allocate_copy_removal6M_v_; -text: .text%__1cMPhaseChaitin2t6MIrnIPhaseCFG_rnHMatcher__v_; -text: .text%__1cIPhaseIFG2t6MpnFArena__v_; -text: .text%__1cMPhaseChaitinRbuild_ifg_virtual6M_v_; -text: .text%__1cXPhaseAggressiveCoalesceNinsert_copies6MrnHMatcher__v_; -text: .text%__1cNPhaseRegAllocPalloc_node_regs6Mi_v_; -text: .text%__1cJPhaseLive2t6MrknIPhaseCFG_rnILRG_List_pnFArena__v_; -text: .text%__1cNPhaseRegAlloc2t6MIrnIPhaseCFG_rnHMatcher_pF_v_v_; -text: .text%__1cMPhaseChaitinRRegister_Allocate6M_v_; -text: .text%__1cHMatcherPinit_spill_mask6MpnENode__v_; -text: .text%__1cHMatcherVinit_first_stack_mask6M_v_; -text: .text%__1cMPhaseChaitinMfixup_spills6M_v_; -text: .text%__1cMPhaseChaitinMreset_uf_map6MI_v_; -text: .text%__1cHMatcherTFixup_Save_On_Entry6M_v_; -text: .text%__1cHMatcherZnumber_of_saved_registers6F_i_; -text: .text%__1cNPhaseRegAllocTpd_preallocate_hook6M_v_; -text: .text%__1cXPhaseAggressiveCoalesceGverify6M_v_: coalesce.o; -text: .text%__1cWImplicitExceptionTableIset_size6MI_v_; -text: .text%__1cHCompileTFillExceptionTables6MIpI1pnFLabel__v_; -text: .text%__1cNSignatureInfoJdo_double6M_v_: bytecode.o; -text: .text%__1cOMachPrologNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvL2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLstoreB0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHRetNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cNSafePointNodeKgrow_stack6MpnIJVMState_I_v_; -text: .text%__1cHRetNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTresource_free_bytes6FpcL_v_; -text: .text%__1cRPrivilegedElementKinitialize6MpnMvframeStream_pnHoopDesc_p0pnGThread__v_; -text: .text%JVM_DoPrivileged; -text: .text%__1cKloadUBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cULinearLeastSquareFitGupdate6Mdd_v_; -text: .text%__1cQcmovI_reg_gtNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVCallRuntimeDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFciEnvKcompile_id6M_I_; -text: .text%__1cVshrL_reg_imm6_L2INodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmembar_acquireNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cJloadBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJimmU6OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cNmethodOopDescbDbuild_interpreter_method_data6FnMmethodHandle_pnGThread__v_; -text: .text%__1cSmembar_acquireNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cKoopFactoryOnew_methodData6FnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cPmethodDataKlassIallocate6MnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; -text: .text%__1cIMulLNodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIMulLNodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cURethrowExceptionNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cICmpDNodeGOpcode6kM_i_; -text: .text%__1cKTypeOopPtrSmake_from_constant6FpnIciObject__pk0_; -text: .text%__1cLConvD2INodeGOpcode6kM_i_; -text: .text%__1cTmembar_volatileNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIModINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMindIndexOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindIndexOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindIndexOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; -text: .text%__1cRshrP_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIGraphKitNgen_checkcast6MpnENode_2p2_2_; -text: .text%__1cNloadConL0NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cJLoadBNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSInterpreterRuntimeOprofile_method6FpnKJavaThread_pC_i_; -text: .text%__1cGTarjanICOMPRESS6M_v_; -text: .text%__1cLRuntimeStubHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_; -text: .text%__1cOstackSlotIOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cFframeLnmethods_do6M_v_; -text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; -text: .text%__1cJcmpOpOperKless_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cVshrL_reg_imm6_L2INodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQLibraryIntrinsicIgenerate6MpnIJVMState__2_; -text: .text%__1cFStateM_sub_Op_AndI6MpknENode__v_; -text: .text%__1cNloadConL0NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRcompL_reg_conNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLRShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJloadFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJcmpOpOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%JVM_GetClassNameUTF; -text: .text%__1cIGraphKitRgen_subtype_check6MpnENode_2_2_; -text: .text%__1cKTypeRawPtrFxdual6kM_pknEType__; -text: .text%__1cGIfNodeMdominated_by6MpnENode_pnMPhaseIterGVN__v_; -text: .text%__1cIPhaseCFGOinsert_goto_at6MII_v_; -text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; -text: .text%__1cQComputeCallStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cQshlI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_FindLoadedClass; -text: .text%__1cIModLNodeGOpcode6kM_i_; -text: .text%__1cRsubI_zero_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLRShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cObranchConFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIPSOldGenPupdate_counters6M_v_; -text: .text%__1cJCmpL3NodeGOpcode6kM_i_; -text: .text%__1cMloadConINodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cPCallRuntimeNodeGOpcode6kM_i_; -text: .text%__1cbFunnecessary_membar_volatileNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNloadConP0NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_; -text: .text%__1cITypeLongFwiden6kMpknEType__3_; -text: .text%__1cKcmpOpFOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cEUTF8Ounicode_length6Fpkc_i_; -text: .text%__1cKstoreCNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNflagsRegFOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cOPhaseIdealLoopOplace_near_use6kMpnENode__2_; -text: .text%JVM_FindClassFromClass; -text: .text%__1cJloadLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKstoreCNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQshrL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQcmovI_reg_ltNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvL2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_; -text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; -text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; -text: .text%JVM_NewInstanceFromConstructor; -text: .text%__1cFParseFBlockMadd_new_path6M_i_; -text: .text%__1cKScopeValueJread_from6FpnTDebugInfoReadStream__p0_; -text: .text%__1cOcompiledVFrameScreate_stack_value6kMpnKScopeValue__pnKStackValue__; -text: .text%signalHandler; -text: .text%JVM_handle_solaris_signal; -text: .text%__1cMelapsedTimerHseconds6kM_d_; -text: .text%__1cFStateL_sub_Op_OrI6MpknENode__v_; -text: .text%__1cIAddLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cTOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cQcmovI_reg_ltNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSCardTableExtensionbAscavenge_contents_parallel6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager_I_v_; -text: .text%__1cKcmpOpUOperEless6kM_i_: ad_sparc_clone.o; -text: .text%__1cJStealTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cTOldToYoungRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cNGCTaskManagerMnote_release6MI_v_; -text: .text%__1cJStealTaskEname6M_pc_: psTasks.o; -text: .text%__1cJloadSNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLConvF2DNodeGOpcode6kM_i_; -text: .text%__1cMMergeMemNodeIadr_type6kM_pknHTypePtr__: memnode.o; -text: .text%__1cIMulLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cILocation2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cJcmpOpOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cQmodI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIimmIOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cKcmpOpPOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cSaddI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFframeLgc_prologue6M_v_; -text: .text%__1cFframeLgc_epilogue6M_v_; -text: .text%__1cFframeMpd_gc_epilog6M_v_; -text: .text%__1cRframe_gc_epilogue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cRframe_gc_prologue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__; -text: .text%__1cVCallRuntimeDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%jni_NewString: jni.o; -text: .text%__1cJloadLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSTailCalljmpIndNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPfieldDescriptorUstring_initial_value6kMpnGThread__pnHoopDesc__; -text: .text%__1cPorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIGraphKitMnext_monitor6M_i_; -text: .text%__1cLOptoRuntimebBcomplete_monitor_enter_Type6F_pknITypeFunc__; -text: .text%__1cLBoxLockNode2t6Mi_v_; -text: .text%__1cIGraphKitLshared_lock6MpnENode__pnMFastLockNode__; -text: .text%__1cRorI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHTypePtrEmake6FnETypeFTYPES_n0ADPTR_i_pk0_; -text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cSmulI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmulI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cXmembar_acquire_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; -text: .text%__1cQciTypeArrayKlassEmake6FnJBasicType__p0_; -text: .text%__1cLOpaque2NodeLbottom_type6kM_pknEType__: connode.o; -text: .text%__1cOcmovII_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSstring_compareNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cCosPhint_no_preempt6F_v_; -text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; -text: .text%lwp_mutex_init: os_solaris.o; -text: .text%__1cFciEnvWget_method_from_handle6MpnI_jobject__pnIciMethod__; -text: .text%__1cFciEnv2T6M_v_; -text: .text%__1cFStateP_sub_Op_RShiftI6MpknENode__v_; -text: .text%__1cRsarI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; -text: .text%__1cOoop_RelocationIoop_addr6M_ppnHoopDesc__; -text: .text%__1cQnotemp_iRegIOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; -text: .text%__1cPcmpFastLockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJimmI0OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cSmembar_releaseNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cMloadConDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMaxINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPcmpFastLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXmembar_acquire_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIciMethodRinstructions_size6M_i_; -text: .text%__1cRsarL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cISubLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFParseGdo_new6M_v_; -text: .text%__1cIXorINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cSmembar_acquireNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmembar_acquireNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_GetObjectClass: jni.o; -text: .text%__1cTtypeArrayKlassKlassIoop_size6kMpnHoopDesc__i_: typeArrayKlassKlass.o; -text: .text%__1cSxorI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKPSYoungGenRcapacity_in_bytes6kM_L_; -text: .text%__1cOMacroAssemblerFalign6Mi_v_; -text: .text%__1cSstring_compareNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPconvL2I_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFVTuneNregister_stub6FpkcpC3_v_; -text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cFStateM_sub_Op_AndL6MpknENode__v_; -text: .text%__1cTmembar_volatileNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_; -text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerVreset_last_Java_frame6M_v_; -text: .text%__1cLPhaseValuesKis_IterGVN6M_pnMPhaseIterGVN__: phaseX.o; -text: .text%__1cMciMethodDataStrap_recompiled_at6MpnLProfileData__i_; -text: .text%__1cQandL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLPhaseValues2t6MpnFArena_I_v_; -text: .text%__1cOPhaseTransform2t6MpnFArena_nFPhaseLPhaseNumber__v_; -text: .text%__1cJStubQdDueueGcommit6Mi_v_; -text: .text%__1cINodeHash2t6MpnFArena_I_v_; -text: .text%__1cFStateP_sub_Op_ConvL2I6MpknENode__v_; -text: .text%__1cJStubQdDueueHrequest6Mi_pnEStub__; -text: .text%__1cJloadSNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQmulI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cITemplateIgenerate6MpnZInterpreterMacroAssembler__v_; -text: .text%__1cPconvF2D_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cITemplateKinitialize6MinITosState_1pFi_vi_v_; -text: .text%__1cQjava_lang_ThreadRget_thread_status6FpnHoopDesc__n0AMThreadStatus__; -text: .text%__1cIMulINodeGadd_id6kM_pknEType__: classes.o; -text: .text%JVM_FindClassFromClassLoader; -text: .text%JVM_FindClassFromBootLoader; -text: .text%__1cQaddP_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIMulINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cSsafePoint_pollNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMacroAssemblerKsave_frame6Mi_v_; -text: .text%__1cSsafePoint_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerbBcheck_and_forward_exception6MpnMRegisterImpl__v_; -text: .text%__1cIModINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cZInterpreterMacroAssemblerZcheck_and_handle_popframe6MpnMRegisterImpl__v_; -text: .text%__1cJcmpOpOperJnot_equal6kM_i_: ad_sparc_clone.o; -text: .text%JVM_IHashCode; -text: .text%__1cQmodI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMloadConDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovII_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNloadConL0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSCMemProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOPhaseIdealLoopVclone_up_backedge_goo6MpnENode_22_2_; -text: .text%__1cQComputeCallStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cJloadBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXmembar_acquire_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cKC2CompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; -text: .text%JVM_GetClassLoader; -text: .text%__1cOPhaseIdealLoopLdo_split_if6MpnENode__v_; -text: .text%__1cKScheduling2t6MpnFArena_rnHCompile__v_; -text: .text%__1cMTypeKlassPtrFxmeet6kMpknEType__3_; -text: .text%__1cNSignatureInfoIdo_float6M_v_: bytecode.o; -text: .text%__1cKSchedulingMDoScheduling6M_v_; -text: .text%__1cFciEnvbOcheck_for_system_dictionary_modification6MpnIciMethod__v_; -text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTimer_pnLCompileTask__v_; -text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_; -text: .text%__1cJStartNodeJideal_reg6kM_I_: callnode.o; -text: .text%__1cLstoreP0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQmulD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cFVTuneOcreate_nmethod6FpnHnmethod__v_; -text: .text%__1cLOopRecorderHcopy_to6MpnICodeBlob__v_; -text: .text%__1cVExceptionHandlerTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cQmulL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; -text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; -text: .text%__1cUParallelScavengeHeapEused6kM_L_; -text: .text%__1cQcmovI_reg_ltNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableKtransition6FnITosState_1_v_; -text: .text%__1cOMacroAssemblerWbang_stack_with_offset6Mi_v_: assembler_sparc.o; -text: .text%__1cKInlineTreeWbuild_inline_tree_root6F_p0_; -text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cIPhaseCCPMdo_transform6M_v_; -text: .text%__1cSPhaseRemoveUseless2t6MpnIPhaseGVN_pnQUnique_Node_List__v_; -text: .text%__1cHCompileLFinish_Warm6M_v_; -text: .text%__1cHCompileNreturn_values6MpnIJVMState__v_; -text: .text%__1cHCompileIOptimize6M_v_; -text: .text%__1cQUnique_Node_ListUremove_useless_nodes6MrnJVectorSet__v_; -text: .text%__1cIPhaseCCPJtransform6MpnENode__2_; -text: .text%__1cIPhaseCCPHanalyze6M_v_; -text: .text%__1cHCompileLInline_Warm6M_i_; -text: .text%__1cMPhaseIterGVN2t6Mp0_v_; -text: .text%__1cIciMethodRbuild_method_data6M_v_; -text: .text%__1cHCompileRbuild_start_state6MpnJStartNode_pknITypeFunc__pnIJVMState__; -text: .text%__1cJStartNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIPhaseCCP2t6MpnMPhaseIterGVN__v_; -text: .text%__1cMPhaseIterGVN2t6MpnIPhaseGVN__v_; -text: .text%lwp_cond_init: os_solaris.o; -text: .text%__1cHCompileUremove_useless_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cbAfinal_graph_reshaping_walk6FrnKNode_Stack_pnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cHCompileVidentify_useful_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cRAbstractAssemblerbDgenerate_stack_overflow_check6Mi_v_; -text: .text%__1cObranchConFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreP0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_epilog6MnITosState_i_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_prolog6MnITosState_i_v_; -text: .text%__1cOMachEpilogNodeQsafepoint_offset6kM_i_; -text: .text%__1cLBoxLockNodeDcmp6kMrknENode__I_; -text: .text%__1cKloadUBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_; -text: .text%__1cNSignatureInfoIdo_short6M_v_: bytecode.o; -text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_; -text: .text%__1cRNativeMovConstRegIset_data6Ml_v_; -text: .text%__1cQregP_to_stkPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cISubLNodeDsub6kMpknEType_3_3_; -text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKBinaryNodeGOpcode6kM_i_; -text: .text%__1cFStateO_sub_Op_Binary6MpknENode__v_; -text: .text%__1cMTailCallNodeGOpcode6kM_i_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cQregF_to_stkINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_; -text: .text%__1cIAddFNodeGOpcode6kM_i_; -text: .text%__1cSInterpreterRuntimeTprepare_native_call6FpnKJavaThread_pnNmethodOopDesc__v_; -text: .text%__1cLstoreC0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNobjArrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cODeoptimizationVtrap_state_has_reason6Fii_i_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; -text: .text%__1cLRShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_; -text: .text%jni_SetByteArrayRegion: jni.o; -text: .text%__1cFParseLarray_store6MnJBasicType__v_; -text: .text%__1cSThreadLocalStorageGthread6F_pnGThread__: assembler_sparc.o; -text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__; -text: .text%__1cKcmpOpUOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%__1cKPerfMemoryMmark_updated6F_v_; -text: .text%__1cCosLelapsedTime6F_d_; -text: .text%__1cKPerfMemoryFalloc6FL_pc_; -text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_; -text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cLStrCompNodeKmatch_edge6kMI_I_; -text: .text%__1cSobjArrayKlassKlassXallocate_objArray_klass6MinLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__; -text: .text%jni_GetStringUTFChars: jni.o; -text: .text%__1cFParsebLincrement_and_test_invocation_counter6Mi_v_; -text: .text%jni_ReleaseStringUTFChars; -text: .text%__1cRsubI_zero_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsubI_zero_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulFNodeGOpcode6kM_i_; -text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; -text: .text%__1cSInterpreterRuntimeNquicken_io_cc6FpnKJavaThread__v_; -text: .text%JVM_IsInterrupted; -text: .text%__1cNSignatureInfoHdo_char6M_v_: bytecode.o; -text: .text%JVM_FindLibraryEntry; -text: .text%__1cKloadUBNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cLklassItableUcompute_itable_index6FpnNmethodOopDesc__i_; -text: .text%__1cWConstantPoolCacheEntrySset_interface_call6MnMmethodHandle_i_v_; -text: .text%__1cIMulINodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cIXorINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOMacroAssemblerEstop6Mpkc_v_; -text: .text%__1cSstring_compareNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQshlL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOloadConI13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFframeIpatch_pc6MpnGThread_pC_v_; -text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_; -text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; -text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; -text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; -text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; -text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; -text: .text%__1cIVMThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cGThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cYinternal_word_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cODataRelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cSdivL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOstackSlotPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQshlI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMPhaseChaitinGSelect6M_I_; -text: .text%__1cPconvF2D_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; -text: .text%__1cOClearArrayNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_: jni.o; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectMset_override6FpnHoopDesc_C_v_; -text: .text%__1cPconvL2I_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cQshrI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMadjust_check6FpnENode_11iipnMPhaseIterGVN__v_: ifnode.o; -text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; -text: .text%__1cQaddF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKConv2BNodeGOpcode6kM_i_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; -text: .text%__1cFParseSjump_switch_ranges6MpnENode_pnLSwitchRange_4i_v_; -text: .text%__1cNloadConP0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseLdo_newarray6MnJBasicType__v_; -text: .text%__1cFParseOmerge_new_path6Mi_v_; -text: .text%__1cFParseTprofile_switch_case6Mi_v_; -text: .text%__1cKarrayKlassKjava_super6kM_pnMklassOopDesc__; -text: .text%__1cRbranchLoopEndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRbranchLoopEndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQregI_to_stkINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRbranchLoopEndNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cNCollectedHeapQresize_all_tlabs6M_v_; -text: .text%__1cCosTnative_java_library6F_pv_; -text: .text%__1cCosbCmake_polling_page_unreadable6F_v_; -text: .text%__1cPGCMemoryManagerIgc_begin6M_v_; -text: .text%__1cPGCMemoryManagerGgc_end6M_v_; -text: .text%__1cUParallelScavengeHeapQresize_all_tlabs6M_v_; -text: .text%__1cUParallelScavengeHeapPupdate_counters6M_v_; -text: .text%__1cUSafepointSynchronizeFbegin6F_v_; -text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; -text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; -text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; -text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; -text: .text%__1cUParallelScavengeHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__: ciObjArrayKlass.o; -text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_; -text: .text%__1cVLoaderConstraintTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; -text: .text%__1cIDivINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTDerivedPointerTablePupdate_pointers6F_v_; -text: .text%__1cONMethodSweeperFsweep6F_v_; -text: .text%__1cKPSYoungGenPupdate_counters6M_v_; -text: .text%__1cMCounterDecayFdecay6F_v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; -text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cKDictionaryHoops_do6MpnKOopClosure__v_; -text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; -text: .text%__1cQLRUMaxHeapPolicy2t6M_v_; -text: .text%__1cTDerivedPointerTableFclear6F_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersPupdate_counters6M_v_; -text: .text%__1cNCollectedHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_; -text: .text%__1cUSafepointSynchronizeDend6F_v_; -text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; -text: .text%__1cQmulD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cCosbAmake_polling_page_readable6F_v_; -text: .text%__1cNloadConL0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMciArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cFParseRarray_store_check6M_v_; -text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; -text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; -text: .text%__1cObranchConFNodeIpipeline6kM_pknIPipeline__; -text: .text%jni_NewByteArray: jni.o; -text: .text%__1cSmembar_releaseNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQdivL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSmembar_releaseNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLcmpD_ccNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQjava_lang_StringFvalue6FpnHoopDesc__pnQtypeArrayOopDesc__; -text: .text%__1cQjava_lang_StringGoffset6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; -text: .text%__1cLRethrowNode2t6MpnENode_22222_v_; -text: .text%__1cHCompileSrethrow_exceptions6MpnIJVMState__v_; -text: .text%__1cQandI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSbranchCon_longNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSbranchCon_longNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cSbranchCon_longNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_; -text: .text%__1cURethrowExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; -text: .text%__1cLRethrowNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__; -text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cURethrowExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_; -text: .text%__1cWCallLeafNoFPDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cWCallLeafNoFPDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_GetMethodIxExceptionTableEntry; -text: .text%__1cWCallLeafNoFPDirectNodeKmethod_set6Ml_v_; -text: .text%__1cWCallLeafNoFPDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cSandI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLstoreP0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQmulF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLMachUEPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSxorI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; -text: .text%__1cMVM_OperationIevaluate6M_v_; -text: .text%__1cCosTget_native_priority6FkpknGThread_pi_nIOSReturn__; -text: .text%__1cIMinINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cGThreadMget_priority6Fkpk0_nOThreadPriority__; -text: .text%__1cOloadConL13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cMVM_OperationSset_calling_thread6MpnGThread_nOThreadPriority__v_; -text: .text%__1cCosMget_priority6FkpknGThread_rnOThreadPriority__nIOSReturn__; -text: .text%__1cMloadConLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerZget_2_byte_integer_at_bcp6MipnMRegisterImpl_2n0ALsignedOrNot_n0AKsetCCOrNot__v_; -text: .text%__1cQmulI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cGGCTask2t6Mn0AEKindEkind__v_; -text: .text%__1cUParallelScavengeHeapQresize_young_gen6MLL_v_; -text: .text%__1cKPSYoungGenLswap_spaces6M_v_; -text: .text%__1cKPSYoungGenNresize_spaces6MLL_v_; -text: .text%__1cSPSPromotionManagerbBvm_thread_promotion_manager6F_p0_; -text: .text%__1cSPSPromotionManagerMpre_scavenge6F_v_; -text: .text%__1cSPSPromotionManagerNpost_scavenge6F_v_; -text: .text%__1cNJvmtiGCMarker2T6M_v_; -text: .text%__1cZSerialOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cZSerialOldToYoungRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cKPSYoungGenGresize6MLL_v_; -text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; -text: .text%__1cSmulI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; -text: .text%__1cSCardTableExtensionRscavenge_contents6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager__v_; -text: .text%__1cQComputeCallStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cUWaitForBarrierGCTaskHdestroy6Fp0_v_; -text: .text%__1cLGCTaskQdDueueGcreate6F_p0_; -text: .text%__1cLGCTaskQdDueueHenqueue6Mp0_v_; -text: .text%__1cUWaitForBarrierGCTaskEname6M_pc_: gcTaskManager.o; -text: .text%__1cNGCTaskManagerIadd_list6MpnLGCTaskQdDueue__v_; -text: .text%__1cUWaitForBarrierGCTaskGcreate6F_p0_; -text: .text%__1cSaddL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNBarrierGCTaskOdo_it_internal6MpnNGCTaskManager_I_v_; -text: .text%__1cNMonitorSupplyHrelease6FpnHMonitor__v_; -text: .text%__1cNMonitorSupplyHreserve6F_pnHMonitor__; -text: .text%__1cUWaitForBarrierGCTaskIwait_for6M_v_; -text: .text%__1cNGCTaskManagerVrelease_all_resources6M_v_; -text: .text%__1cUWaitForBarrierGCTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cSObjectSynchronizerJfast_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cUWaitForBarrierGCTaskIdestruct6M_v_; -text: .text%__1cHThreadsZcreate_thread_roots_tasks6FpnLGCTaskQdDueue__v_; -text: .text%__1cPconvF2D_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreB0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cISubLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%jni_GetStringCritical: jni.o; -text: .text%jni_ReleaseStringCritical: jni.o; -text: .text%__1cFStateM_sub_Op_XorI6MpknENode__v_; -text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlass.o; -text: .text%__1cIDivINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLStrCompNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOcmovIL_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; -text: .text%__1cLRuntimeStubbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cQshlL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMloadConFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParsePmerge_exception6Mi_v_; -text: .text%__1cFParseMdo_checkcast6M_v_; -text: .text%__1cIDivLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cRtestI_reg_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRtestI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_; -text: .text%__1cKstoreBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIPSOldGenMmax_gen_size6M_L_: psOldGen.o; -text: .text%__1cJCMoveNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cbDVM_ParallelGCFailedAllocationEdoit6M_v_; -text: .text%__1cIMachNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKstoreLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSxorI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRloadConP_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQcmovI_reg_gtNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPstoreI_FregNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_; -text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; -text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__; -text: .text%__1cJLoadDNodeGOpcode6kM_i_; -text: .text%__1cHRegMask2t6M_v_: matcher.o; -text: .text%__1cQcmovI_reg_gtNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQComputeCallStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cOPhaseIdealLoopOadd_constraint6MiipnENode_22p23_v_; -text: .text%__1cJLoadPNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cMloadConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKimmU13OperIconstant6kM_l_: ad_sparc_clone.o; -text: .text%__1cUcompU_iReg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHciKlassSsuper_check_offset6M_I_; -text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; -text: .text%__1cIModLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cLConvI2DNodeGOpcode6kM_i_; -text: .text%__1cOstackSlotIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQxorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMMachProjNodeHsize_of6kM_I_: classes.o; -text: .text%__1cQshrI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParseWcheck_interpreter_type6MpnENode_pknEType_rpnNSafePointNode__2_; -text: .text%__1cTmembar_volatileNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cOcmovII_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPmethodDataKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cSTailCalljmpIndNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRloadConP_pollNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQaddF_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreI0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovPP_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFframeZinterpreter_frame_set_mdp6MpC_v_; -text: .text%__1cNSignatureInfoHdo_byte6M_v_: bytecode.o; -text: .text%JVM_GetCallerClass; -text: .text%__1cMloadConLNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cJScopeDescGsender6kM_p0_; -text: .text%__1cICmpFNodeGOpcode6kM_i_; -text: .text%jni_GetFieldID: jni.o; -text: .text%__1cOcompiledVFrameGsender6kM_pnGvframe__; -text: .text%__1cSobjArrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%jni_IsAssignableFrom: jni.o; -text: .text%__1cLConvI2FNodeGOpcode6kM_i_; -text: .text%__1cCosJyield_all6Fi_v_; -text: .text%__1cOcmovII_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerbAget_cache_and_index_at_bcp6MpnMRegisterImpl_2i_v_; -text: .text%__1cYcompareAndSwapL_boolNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSCMemProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cYcompareAndSwapL_boolNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cQshlL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHTypeAryFxdual6kM_pknEType__; -text: .text%__1cRsarL_reg_imm6NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMtlsLoadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQregP_to_stkPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMloadConLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJloadDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOloadConL13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPadd_derived_oop6FppnHoopDesc_2_v_: oopMap.o; -text: .text%__1cIciMethodRinterpreter_entry6M_pC_; -text: .text%__1cPClassFileParserbJparse_classfile_signature_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cVLoaderConstraintTableWfind_constrained_klass6MnMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cRorI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerIpush_ptr6MpnMRegisterImpl__v_; -text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_: icBuffer.o; -text: .text%__1cJloadINodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovIL_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_: icBuffer.o; -text: .text%jni_SetBooleanField: jni.o; -text: .text%__1cZInterpreterMacroAssemblerGpush_i6MpnMRegisterImpl__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_object6M_v_; -text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cQmulI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNObjectMonitorHRecycle6M_v_; -text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cRcompL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQcmovI_reg_gtNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cXMachCallDynamicJavaNodePret_addr_offset6M_i_; -text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cLcmpD_ccNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshrL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQSystemDictionaryTresolve_from_stream6FnMsymbolHandle_nGHandle_2pnPClassFileStream_pnGThread__pnMklassOopDesc__; -text: .text%__1cOloadConL13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cQmulF_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_; -text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_; -text: .text%__1cKsplit_once6FpnMPhaseIterGVN_pnENode_333_v_: cfgnode.o; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; -text: .text%__1cPstoreI_FregNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQComputeCallStackJdo_double6M_v_: generateOopMap.o; -text: .text%__1cOPhaseIdealLoopUpeeled_dom_test_elim6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cZInterpreterMacroAssemblerGpush_f6MpnRFloatRegisterImpl__v_; -text: .text%__1cTAbstractInterpreterSBasicType_as_index6FnJBasicType__i_; -text: .text%__1cZInterpreterMacroAssemblerFpop_i6MpnMRegisterImpl__v_; -text: .text%__1cPjava_lang_ClassQprimitive_mirror6FnJBasicType__pnHoopDesc__; -text: .text%__1cPconvF2D_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_; -text: .text%__1cSandL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOMethodLivenessKBasicBlockFsplit6Mi_p1_; -text: .text%JVM_MonitorWait; -text: .text%__1cKcmpOpUOperKless_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cENodeEgetd6kM_d_; -text: .text%__1cKJavaThreadbScheck_safepoint_and_suspend_for_native_trans6Fp0_v_; -text: .text%__1cLcmpD_ccNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIciObject2t6MpnHciKlass__v_; -text: .text%__1cKloadUBNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseSjump_if_false_fork6MpnGIfNode_ii_v_; -text: .text%__1cLRShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLcmpF_ccNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQstkI_to_regFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKCMovePNodeGOpcode6kM_i_; -text: .text%__1cIMaxINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cKstoreBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENode2t6Mp0111111_v_; -text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_; -text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; -text: .text%__1cZInterpreterMacroAssemblerGpush_d6MpnRFloatRegisterImpl__v_; -text: .text%__1cGciType2t6MpnHciKlass__v_; -text: .text%__1cRbranchLoopEndNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cKstoreBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQset_lwp_priority6Fiii_i_; -text: .text%__1cSaddP_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; -text: .text%__1cUciInstanceKlassKlassEmake6F_p0_; -text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_: markSweep.o; -text: .text%__1cIciSymbolHbyte_at6Mi_i_; -text: .text%__1cKstoreCNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cUParallelScavengeHeapIcapacity6kM_L_; -text: .text%__1cZInterpreterMacroAssemblerXget_constant_pool_cache6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerGpush_l6MpnMRegisterImpl__v_; -text: .text%__1cOcmovPP_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cIDivLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNflagsRegFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQregP_to_stkPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSdivL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreC0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKCompiledICMset_to_clean6M_v_; -text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; -text: .text%__1cKstoreINodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%jni_NewStringUTF: jni.o; -text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; -text: .text%JVM_SetClassSigners; -text: .text%__1cQregP_to_stkPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPciInstanceKlassNloader_handle6M_pnI_jobject__; -text: .text%JVM_DefineClassWithSource; -text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; -text: .text%__1cQRelocationHolderEplus6kMi_0_; -text: .text%__1cISubLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKloadUBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadSNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cMnegD_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHOrINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cOloadI_fregNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOloadI_fregNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%jni_CallIntMethod: jni.o; -text: .text%__1cFParseHdo_irem6M_v_; -text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FLi_pnGThread__; -text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; -text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; -text: .text%get_thread; -text: .text%__1cJLoadINodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_; -text: .text%__1cHnmethodbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cSbranchCon_longNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cPstoreI_FregNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreF0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQmulI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateP_sub_Op_RShiftL6MpknENode__v_; -text: .text%JVM_GetClassMethodsCount; -text: .text%JVM_GetClassFieldsCount; -text: .text%JVM_GetClassCPTypes; -text: .text%__1cOcmovII_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_GetClassCPEntriesCount; -text: .text%__1cOMacroAssemblerKverify_FPU6Mipkc_v_; -text: .text%__1cbCfind_class_from_class_loader6FpnHJNIEnv__nMsymbolHandle_CnGHandle_3CpnGThread__pnH_jclass__; -text: .text%__1cKstoreLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIAddFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIMulDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQshlI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOstackSlotPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_; -text: .text%__1cIAddDNodeGOpcode6kM_i_; -text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIgenerate6ML_v_; -text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; -text: .text%__1cIimmLOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cQmulD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUPSMarkSweepDecoratorKprecompact6M_v_; -text: .text%jni_FindClass: jni.o; -text: .text%__1cLStringTableJbasic_add6MinGHandle_pHiIpnGThread__pnHoopDesc__; -text: .text%__1cUPSMarkSweepDecoratorPadjust_pointers6M_v_; -text: .text%__1cPconvI2L_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSsubL_reg_reg_2NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRshlL_reg_imm6NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJLoadSNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cIModLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDesc__; -text: .text%JVM_IsPrimitiveClass; -text: .text%__1cbDjava_lang_reflect_ConstructorZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorGcreate6FpnGThread__nGHandle__; -text: .text%__1cOcmovII_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cJLoadFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRorI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNimmP_pollOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cFTypeDFxmeet6kMpknEType__3_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cIDivDNodeGOpcode6kM_i_; -text: .text%__1cJloadINodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLstoreC0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSdivL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSsubL_reg_reg_2NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIMulINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cUmulL_reg_imm13_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cUdivL_reg_imm13_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cHCompileQgrow_alias_types6M_v_; -text: .text%lwp_cond_destroy: os_solaris.o; -text: .text%__1cHMonitor2T6M_v_; -text: .text%__1cQdivD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIModINodeJideal_reg6kM_I_: classes.o; -text: .text%lwp_mutex_destroy: os_solaris.o; -text: .text%__1cVshrL_reg_imm6_L2INodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOimmI_32_63OperIconstant6kM_l_: ad_sparc_clone.o; -text: .text%__1cFMutex2T6M_v_; -text: .text%__1cRcompL_reg_conNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjava_lang_ThreadLthreadGroup6FpnHoopDesc__2_; -text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; -text: .text%__1cOcmovII_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cICmpDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQaddD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIGraphKitPdstore_rounding6MpnENode__2_; -text: .text%__1cQregI_to_stkINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUmulL_reg_imm13_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNObjectMonitor2t6M_v_; -text: .text%__1cFBlockNset_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; -text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; -text: .text%JVM_MonitorNotify; -text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; -text: .text%__1cOBasicHashtableJnew_entry6MI_pnTBasicHashtableEntry__; -text: .text%__1cXNativeSignatureIteratorJdo_object6Mii_v_: interpreterRT_sparc.o; -text: .text%__1cOPhaseIdealLoopOdo_range_check6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cSstring_compareNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconvI2F_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSdivL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRtestI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNloadKlassNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQregL_to_stkLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cINegDNodeGOpcode6kM_i_; -text: .text%__1cFStateM_sub_Op_SubL6MpknENode__v_; -text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodPset_return_type6FpnHoopDesc_2_v_; -text: .text%__1cQaddF_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZget_mirror_from_signature6FnMmethodHandle_pnPSignatureStream_pnGThread__pnHoopDesc__; -text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__; -text: .text%__1cJCmpD3NodeGOpcode6kM_i_; -text: .text%__1cQsubL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cKstoreFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cYjava_lang_reflect_MethodPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v_; -text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; -text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; -text: .text%__1cIMulINodeKmul_opcode6kM_i_: classes.o; -text: .text%jni_GetMethodID: jni.o; -text: .text%__1cUdivL_reg_imm13_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovPP_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSsubL_reg_reg_2NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; -text: .text%__1cUmulL_reg_imm13_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulINodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIMinINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOMacroAssemblerDjmp6MpnMRegisterImpl_ipkci_v_; -text: .text%__1cRorI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRtestI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQshrL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_GetClassDeclaredConstructors; -text: .text%__1cQsubF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRtestI_reg_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQdivI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQregI_to_stkINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMregD_lowOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQstkI_to_regFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQdivL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; -text: .text%__1cJCMoveNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQmulF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIDivLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIBytecodeIset_code6MnJBytecodesECode__v_; -text: .text%__1cQcmovI_reg_ltNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvD2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNminI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJloadDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUdivL_reg_imm13_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSsubL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQstkI_to_regFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_; -text: .text%__1cQregI_to_stkINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQshlI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__; -text: .text%__1cPICStubInterfaceEsize6kMpnEStub__i_: icBuffer.o; -text: .text%__1cPICStubInterfaceIfinalize6MpnEStub__v_: icBuffer.o; -text: .text%__1cQshrL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOloadI_fregNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRsarI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSconvD2I_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cINodeHashEgrow6M_v_; -text: .text%__1cZCallDynamicJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZCallDynamicJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQdivL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_; -text: .text%__1cOcmovDF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cZCallDynamicJavaDirectNodeKmethod_set6Ml_v_; -text: .text%__1cSmulL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovIF_regNodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_IsThreadAlive; -text: .text%__1cOMacroAssemblerOstore_argument6MpnMRegisterImpl_rnIArgument__v_: interpreterRT_sparc.o; -text: .text%__1cKo1RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIpass_int6M_v_: interpreterRT_sparc.o; -text: .text%__1cENodeEgetf6kM_f_; -text: .text%__1cQmulF_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLstoreP0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cUVirtualCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cSsubL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cOcmovPP_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cNloadConL0NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cHTypePtrFxdual6kM_pknEType__; -text: .text%__1cJloadDNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSstring_compareNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovII_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNSafepointBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cISubDNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopKdo_peeling6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cQsubD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRsarL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsarL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_ModI6MpknENode__v_; -text: .text%__1cQmodI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFTypeFFxmeet6kMpknEType__3_; -text: .text%__1cSdivL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQmodI_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cCosScurrent_stack_base6F_pC_; -text: .text%__1cIOSThread2t6MpFpv_i1_v_; -text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_; -text: .text%__1cGThread2t6M_v_; -text: .text%__1cIOSThreadNpd_initialize6M_v_; -text: .text%__1cCosRinitialize_thread6F_v_; -text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; -text: .text%__1cCosScurrent_stack_size6F_L_; -text: .text%__1cIMulDNodeImul_ring6kMpknEType_3_3_; -text: .text%JVM_SetThreadPriority; -text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cQjava_lang_SystemSin_offset_in_bytes6F_i_; -text: .text%__1cQregF_to_stkINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cCosPpd_start_thread6FpnGThread__v_; -text: .text%__1cQjava_lang_SystemTout_offset_in_bytes6F_i_; -text: .text%__1cQshlL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQdivD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%jni_NewObjectArray: jni.o; -text: .text%__1cCosMstart_thread6FpnGThread__v_; -text: .text%__1cNobjArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cOcmovPI_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJMarkSweepMfollow_stack6F_v_; -text: .text%__1cJloadLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJMemRegionMintersection6kMk0_0_; -text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cKReflectionInew_type6FnMsymbolHandle_nLKlassHandle_pnGThread__nGHandle__; -text: .text%JVM_Read; -text: .text%__1cXjava_lang_reflect_FieldPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_modifiers6FpnHoopDesc_i_v_; -text: .text%JVM_GetStackAccessControlContext; -text: .text%__1cIMulFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_type6FpnHoopDesc_2_v_; -text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cXjava_lang_reflect_FieldGcreate6FpnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_name6FpnHoopDesc_2_v_; -text: .text%__1cQaddD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: callGenerator.o; -text: .text%jni_GetStaticFieldID: jni.o; -text: .text%__1cNinstanceKlassKjni_id_for6Mi_pnFJNIid__; -text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_26MpCpnMRegisterImpl_rnFLabel__v_; -text: .text%JVM_DesiredAssertionStatus; -text: .text%__1cKJavaThreadKinitialize6M_v_; -text: .text%__1cHnmethodbAmake_not_entrant_or_zombie6Mi_v_; -text: .text%__1cLConvI2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cUThreadSafepointStateGcreate6FpnKJavaThread__v_; -text: .text%__1cWThreadLocalAllocBufferKinitialize6M_v_; -text: .text%__1cNloadConL0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQThreadStatistics2t6M_v_; -text: .text%__1cSandL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVcompiledICHolderKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; -text: .text%__1cGThreadFstart6Fp0_v_; -text: .text%__1cKCMoveDNodeGOpcode6kM_i_; -text: .text%__1cOcmovIF_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRtestI_reg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSdivL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmulL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKJavaThread2t6MpFp0pnGThread__vL_v_; -text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%jni_GetFloatArrayRegion: jni.o; -text: .text%__1cOMacroAssemblerIround_to6MpnMRegisterImpl_i_v_: interp_masm_sparc.o; -text: .text%__1cOloadI_fregNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_; -text: .text%__1cOGenerateOopMapRinit_basic_blocks6M_v_; -text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; -text: .text%jni_CallStaticVoidMethod: jni.o; -text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_; -text: .text%__1cOGenerateOopMapKinterp_all6M_v_; -text: .text%__1cOGenerateOopMapYsetup_method_entry_state6M_v_; -text: .text%__1cOGenerateOopMapbAmake_context_uninitialized6M_v_; -text: .text%__1cOGenerateOopMapKinit_state6M_v_; -text: .text%__1cLConvI2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFKlassNexternal_name6kM_pkc_; -text: .text%__1cOcmovIL_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; -text: .text%__1cLConvF2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJloadBNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconvI2F_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsubI_zero_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJArrayDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cQsubD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLConvL2DNodeGOpcode6kM_i_; -text: .text%__1cFStateM_sub_Op_MulI6MpknENode__v_; -text: .text%JVM_GetClassName; -text: .text%JVM_IsArrayClass; -text: .text%__1cISubFNodeGOpcode6kM_i_; -text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cPconvI2L_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapNinitialize_bb6M_v_; -text: .text%__1cOGenerateOopMapbImark_bbheaders_and_count_gc_points6M_v_; -text: .text%__1cbFunnecessary_membar_volatileNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; -text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; -text: .text%__1cCosMset_priority6FpnGThread_nOThreadPriority__nIOSReturn__; -text: .text%__1cQdivL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; -text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__: generateOptoStub.o; -text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_: interpreterRT_sparc.o; -text: .text%__1cPconvD2F_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; -text: .text%__1cLstoreF0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cWPredictedCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cJloadSNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cZUncommonTrapCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%JVM_Open; -text: .text%__1cLconvI2BNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNCallGeneratorRfor_uncommon_trap6FpnIciMethod_nODeoptimizationLDeoptReason_n0CLDeoptAction__p0_; -text: .text%__1cSconvI2F_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKConv2BNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMloadConDNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%jni_GetStaticObjectField: jni.o; -text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; -text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; -text: .text%__1cQandI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIMaxINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; -text: .text%JVM_StartThread; -text: .text%__1cOcmovDF_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; -text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_; -text: .text%__1cMloadConDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cZInterpreterMacroAssemblerEpush6MnITosState__v_; -text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_; -text: .text%__1cQOopMapCacheEntryEfill6MnMmethodHandle_i_v_; -text: .text%__1cOcmovIL_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvF2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_; -text: .text%JVM_TotalMemory; -text: .text%JVM_FreeMemory; -text: .text%__1cRInterpreterOopMapNresource_copy6MpnQOopMapCacheEntry__v_; -text: .text%__1cFStateO_sub_Op_CMoveI6MpknENode__v_; -text: .text%__1cLConvD2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIGraphKitSprecision_rounding6MpnENode__2_; -text: .text%__1cQsubI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; -text: .text%__1cSTailCalljmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSTailCalljmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNThreadServiceWcurrent_thread_exiting6FpnKJavaThread__v_; -text: .text%__1cUThreadSafepointStateHdestroy6FpnKJavaThread__v_; -text: .text%__1cOcmovPI_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cCosLfree_thread6FpnIOSThread__v_; -text: .text%__1cQjava_lang_ThreadNset_stillborn6FpnHoopDesc__v_; -text: .text%__1cKJavaThread2T6M_v_; -text: .text%__1cLensure_join6FpnKJavaThread__v_: thread.o; -text: .text%__1cKJavaThreadYremove_stack_guard_pages6M_v_; -text: .text%__1cIOSThreadKpd_destroy6M_v_; -text: .text%__1cHThreadsGremove6FpnKJavaThread__v_; -text: .text%__1cIOSThread2T6M_v_; -text: .text%__1cGThread2T5B6M_v_; -text: .text%__1cOcmovIF_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cTOopMapForCacheEntryLcompute_map6MpnGThread__v_; -text: .text%__1cQOopMapCacheEntryIset_mask6MpnNCellTypeState_2i_v_; -text: .text%jni_CallObjectMethod: jni.o; -text: .text%__1cQChunkPoolCleanerEtask6M_v_: allocation.o; -text: .text%__1cOcmovIL_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapVresult_for_basicblock6Mi_v_; -text: .text%__1cLcmpF_ccNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSconvI2D_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerbEset_method_data_pointer_offset6MpnMRegisterImpl__v_; -text: .text%__1cHTypeInt2t6Miii_v_; -text: .text%__1cOtailjmpIndNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cSobjArrayKlassKlassOklass_oop_size6kM_i_: objArrayKlassKlass.o; -text: .text%__1cSandL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLmethodKlassOklass_oop_size6kM_i_: methodKlass.o; -text: .text%__1cPmethodDataKlassOklass_oop_size6kM_i_: methodDataKlass.o; -text: .text%__1cTtypeArrayKlassKlassOklass_oop_size6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cNloadRangeNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQconstMethodKlassOklass_oop_size6kM_i_: constMethodKlass.o; -text: .text%__1cRconstantPoolKlassOklass_oop_size6kM_i_: constantPoolKlass.o; -text: .text%__1cWconstantPoolCacheKlassOklass_oop_size6kM_i_: cpCacheKlass.o; -text: .text%__1cOcmovIF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFParseNdo_instanceof6M_v_; -text: .text%__1cVcompiledICHolderKlassOklass_oop_size6kM_i_: compiledICHolderKlass.o; -text: .text%__1cSinstanceKlassKlassOklass_oop_size6kM_i_: instanceKlassKlass.o; -text: .text%__1cSdivL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSsubL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitOgen_instanceof6MpnENode_2_2_; -text: .text%__1cSmulL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_: interpreterRT_sparc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorJpass_long6M_v_; -text: .text%__1cQshrL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_: arrayKlassKlass.o; -text: .text%__1cLsymbolKlassOklass_oop_size6kM_i_: symbolKlass.o; -text: .text%__1cKCompiledICOset_cached_oop6MpnHoopDesc__v_; -text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_; -text: .text%__1cKCMoveLNodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; -text: .text%JVM_MonitorNotifyAll; -text: .text%__1cOloadI_fregNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreBNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovLL_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRtestI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJScopeDescGlocals6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cLConvD2FNodeGOpcode6kM_i_; -text: .text%__1cJScopeDescLexpressions6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cJScopeDescImonitors6M_pnNGrowableArray4CpnMMonitorValue____; -text: .text%__1cIPSOldGenPadjust_pointers6M_v_; -text: .text%__1cIPSOldGenHcompact6M_v_; -text: .text%__1cLOptoRuntimeYcurrent_time_millis_Type6F_pknITypeFunc__; -text: .text%__1cOcompiledVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cOcompiledVFrameHraw_bci6kM_i_; -text: .text%jint_cmp: parse2.o; -text: .text%__1cIMaxINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_; -text: .text%__1cXJNI_ArgumentPusherVaArgJget_float6M_v_: jni.o; -text: .text%__1cOcompiledVFrameGlocals6kM_pnUStackValueCollection__; -text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; -text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; -text: .text%__1cOcompiledVFrameLexpressions6kM_pnUStackValueCollection__; -text: .text%__1cOcompiledVFrameImonitors6kM_pnNGrowableArray4CpnLMonitorInfo____; -text: .text%__1cSvframeArrayElementHfill_in6MpnOcompiledVFrame__v_; -text: .text%__1cHThreadsHoops_do6FpnKOopClosure__v_; -text: .text%__1cOMacroAssemblerNflush_windows6M_v_; -text: .text%__1cKarrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cKarrayKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cKstorePNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFframeZinterpreter_frame_set_mdx6Ml_v_; -text: .text%__1cQshrI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQObjectStartArrayFreset6M_v_; -text: .text%__1cKg3RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIAddDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOstackSlotIOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cLstoreF0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKimmI11OperIconstant6kM_l_: ad_sparc_clone.o; -text: .text%__1cOstackSlotIOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cVCallRuntimeDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRCompilationPolicybIreset_counter_for_invocation_event6MnMmethodHandle__v_; -text: .text%__1cHCompileKinit_start6MpnJStartNode__v_; -text: .text%__1cRtestI_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_; -text: .text%__1cVCallRuntimeDirectNodeKmethod_set6Ml_v_; -text: .text%__1cOstackSlotIOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cIMinINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cVCallRuntimeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetInheritedAccessControlContext; -text: .text%__1cOcmovLL_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVinline_cache_regPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cVCallRuntimeDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%JVM_NativePath; -text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; -text: .text%__1cSvframeArrayElementDbci6kM_i_; -text: .text%__1cQaddD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNnmethodLocker2t6MpC_v_; -text: .text%__1cODeoptimizationRlast_frame_adjust6Fii_i_; -text: .text%__1cNloadConP0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovPI_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cODeoptimizationYfetch_unroll_info_helper6FpnKJavaThread__pn0ALUnrollBlock__; -text: .text%__1cSandL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cODeoptimizationNuncommon_trap6FpnKJavaThread_i_pn0ALUnrollBlock__; -text: .text%__1cODeoptimizationNunpack_frames6FpnKJavaThread_i_nJBasicType__; -text: .text%__1cLvframeArrayPunpack_to_stack6MrnFframe_i_v_; -text: .text%__1cODeoptimizationTuncommon_trap_inner6FpnKJavaThread_i_v_; -text: .text%__1cLConvF2INodeGOpcode6kM_i_; -text: .text%__1cSsubD_regD_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRSignatureIteratorKparse_type6M_i_; -text: .text%__1cMtlsLoadPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cVMoveL2D_stack_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSCompiledStaticCallMset_to_clean6M_v_; -text: .text%__1cNSharedRuntimebJcontinuation_for_implicit_exception6FpnKJavaThread_pCn0AVImplicitExceptionKind__3_; -text: .text%__1cLstoreI0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MipnMRegisterImpl__v_; -text: .text%__1cKstoreFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmulI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKstoreFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSconvD2I_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_GetStaticMethodID: jni.o; -text: .text%__1cJloadDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRInlineCacheBufferUic_buffer_cached_oop6FpC_pnHoopDesc__; -text: .text%__1cRNativeMovConstRegEdata6kM_l_; -text: .text%__1cLconvI2BNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKConv2BNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJloadDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNmaxI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cXjava_lang_boxing_objectJget_value6FpnHoopDesc_pnGjvalue__nJBasicType__; -text: .text%__1cIGraphKitTdprecision_rounding6MpnENode__2_; -text: .text%__1cRConstantLongValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cQcmovI_reg_gtNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMulDNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cPorI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovPP_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; -text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cZregDHi_regDLo_to_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovLL_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cbFunnecessary_membar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbFunnecessary_membar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovII_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMnegD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSconvD2I_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKcmpOpFOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cSaddP_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cPMultiBranchDataScompute_cell_count6FpnOBytecodeStream__i_; -text: .text%JVM_Close; -text: .text%__1cOstackSlotLOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cJloadFNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerbIcompute_extra_locals_size_in_bytes6MpnMRegisterImpl_22_v_; -text: .text%__1cQsubF_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPconvF2D_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOimmI_32_63OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cOMacroAssemblerNget_vm_result6MpnMRegisterImpl__v_; -text: .text%__1cQregL_to_stkLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cSxorI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRshrL_reg_imm6NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKloadUBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMulFNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cKloadUBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKcastPPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_; -text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cNCallGeneratorHfor_osr6FpnIciMethod_i_p0_; -text: .text%__1cOMacroAssemblerPbreakpoint_trap6M_v_; -text: .text%__1cIciMethodVget_osr_flow_analysis6Mi_pnKciTypeFlow__; -text: .text%jni_NewObjectV: jni.o; -text: .text%__1cLConvI2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMStartOSRNodeKosr_domain6F_pknJTypeTuple__; -text: .text%__1cSmulD_regD_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSMachBreakpointNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSaddD_regD_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIDivLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQaddD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_; -text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; -text: .text%__1cKCompiledICMstub_address6kM_pC_; -text: .text%__1cIAddFNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%jni_EnsureLocalCapacity; -text: .text%__1cPfieldDescriptorUdouble_initial_value6kM_d_; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cHciKlassOsuper_of_depth6MI_p0_; -text: .text%__1cJSubFPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFTypeFFxdual6kM_pknEType__; -text: .text%__1cQdivD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvD2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNiRegIsafeOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNSafePointNodeQpeek_monitor_obj6kM_pnENode__; -text: .text%__1cISubDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIMulDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRshlI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQdivI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovIF_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQshrI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovPP_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParsePdo_monitor_exit6M_v_; -text: .text%__1cNSafePointNodeQpeek_monitor_box6kM_pnENode__; -text: .text%__1cSaddI_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cISubFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cLcmpF_ccNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_; -text: .text%__1cOtailjmpIndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQregL_to_stkLNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOstackSlotLOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotLOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cSconvF2I_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQdivI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJimmP0OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cLcmpF_ccNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLResourceObj2n6FLn0APallocation_type__pv_; -text: .text%__1cLcmpD_ccNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFTypeDFxdual6kM_pknEType__; -text: .text%__1cLMoveL2DNodeGOpcode6kM_i_; -text: .text%__1cKarrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cRorI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcmovDF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cINegDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cXconvI2D_regDHi_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cCosHSolarisKmmap_chunk6FpcLii_2_; -text: .text%__1cINegFNodeGOpcode6kM_i_; -text: .text%__1cICmpFNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQregL_to_stkLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovDF_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerbAincrement_backedge_counter6MpnMRegisterImpl_2_v_; -text: .text%__1cKEntryPoint2t6M_v_; -text: .text%__1cMregD_lowOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cObranchConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; -text: .text%__1cHciKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cZInterpreterMacroAssemblerbFtest_invocation_counter_for_mdp6MpnMRegisterImpl_22rnFLabel__v_; -text: .text%__1cZInterpreterMacroAssemblerbBtest_backedge_count_for_osr6MpnMRegisterImpl_22_v_; -text: .text%__1cObranchConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadBNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMloadConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovPP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovPI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIModLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMnegD_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cODeoptimizationbJupdate_method_data_from_interpreter6FnQmethodDataHandle_ii_v_; -text: .text%__1cTmembar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_; -text: .text%__1cObranchConFNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cOcmovPI_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cMTailJumpNodeKmatch_edge6kMI_I_; -text: .text%__1cQsubD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cTmembar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQstkI_to_regINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLconvP2BNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMloadConFNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOcmovII_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegD_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFVTuneOdelete_nmethod6FpnHnmethod__v_; -text: .text%__1cKReflectionUarray_component_type6FpnHoopDesc_pnGThread__2_; -text: .text%__1cPconvD2F_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; -text: .text%__1cOloadConL13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKVtableStubRpd_code_alignment6F_i_; -text: .text%__1cLConvI2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPorL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_GetComponentType; -text: .text%JVM_GetCPFieldModifiers; -text: .text%__1cXPartialSubtypeCheckNodeGOpcode6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerXindex_check_without_pop6MpnMRegisterImpl_2i22_v_; -text: .text%__1cVMoveF2I_stack_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcmovLI_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; -text: .text%__1cIDivDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cHnmethodFflush6M_v_; -text: .text%__1cICodeBlobFflush6M_v_; -text: .text%Unsafe_DefineClass1; -text: .text%__1cKstfSSFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQsubF_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSconvI2D_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovII_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKReflectionNinvoke_method6FpnHoopDesc_nGHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cSmulL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJStubQdDueueKremove_all6M_v_; -text: .text%__1cLOopMapCache2t6M_v_; -text: .text%__1cSaddL_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerLindex_check6MpnMRegisterImpl_2i22_v_; -text: .text%__1cKcastPPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcmovIF_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconvI2D_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cWImplicitExceptionTable2t6MpknHnmethod__v_; -text: .text%__1cJloadLNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvF2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__: jni.o; -text: .text%__1cFKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cQsubF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_DefineClass; -text: .text%__1cHOrLNodeGOpcode6kM_i_; -text: .text%__1cWImplicitExceptionTableCat6kMI_I_; -text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_; -text: .text%JVM_InvokeMethod; -text: .text%__1cHnmethodbJcontinuation_for_implicit_exception6MpC_1_; -text: .text%jni_NewDirectByteBuffer; -text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cQsubD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; -text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; -text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; -text: .text%__1cKcastPPNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cHThreadsLgc_prologue6F_v_; -text: .text%__1cHThreadsLgc_epilogue6F_v_; -text: .text%__1cNTemplateTableHconvert6F_v_; -text: .text%__1cOcmovDF_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_; -text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; -text: .text%__1cSaddL_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_; -text: .text%__1cJMarkSweepNrestore_marks6F_v_; -text: .text%__1cJMarkSweepMadjust_marks6F_v_; -text: .text%__1cNloadRangeNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKcmpOpFOperKless_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cJPSPermGenKprecompact6M_v_; -text: .text%__1cJPSPermGenQcompute_new_size6ML_v_; -text: .text%__1cQUncommonTrapBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cNExceptionBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cIPSOldGenKprecompact6M_v_; -text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; -text: .text%__1cUPSMarkSweepDecoratorbIset_destination_decorator_perm_gen6F_v_; -text: .text%__1cUPSMarkSweepDecoratorbHset_destination_decorator_tenured6F_v_; -text: .text%Unsafe_AllocateInstance; -text: .text%__1cUPSAdaptiveSizePolicyUmajor_collection_end6MLnHGCCauseFCause__v_; -text: .text%__1cUPSAdaptiveSizePolicyWmajor_collection_begin6M_v_; -text: .text%jni_AllocObject: jni.o; -text: .text%__1cIAddFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKConv2BNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%JVM_NewArray; -text: .text%__1cLStrCompNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSDeoptimizationBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cVLoaderConstraintTableYpurge_loader_constraints6MpnRBoolObjectClosure__v_; -text: .text%__1cVLoaderConstraintTableYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cJCodeCacheLgc_prologue6F_v_; -text: .text%__1cKPSYoungGenKprecompact6M_v_; -text: .text%__1cKPSYoungGenPadjust_pointers6M_v_; -text: .text%__1cKPSYoungGenHcompact6M_v_; -text: .text%__1cJCodeCacheHoops_do6FpnKOopClosure__v_; -text: .text%__1cZInterpreterMacroAssemblerFpop_l6MpnMRegisterImpl__v_; -text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__; -text: .text%__1cJCodeCacheLgc_epilogue6F_v_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; -text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%JVM_GC; -text: .text%JVM_GetSystemPackage; -text: .text%__1cLstoreC0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRSignatureIteratorHiterate6M_v_; -text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; -text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_; -text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; -text: .text%__1cMStubCodeMark2T6M_v_; -text: .text%__1cJArgumentsQPropertyList_add6FppnOSystemProperty_2_v_; -text: .text%__1cSInterpreterRuntimeQcreate_exception6FpnKJavaThread_pc3_v_; -text: .text%__1cKoopFactoryUnew_compiledICHolder6FnMmethodHandle_nLKlassHandle_pnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cUParallelScavengeHeapHcollect6MnHGCCauseFCause__v_; -text: .text%__1cLClassLoaderSget_system_package6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cQaddL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQshlI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPBytecode_invokeLresult_type6kMpnGThread__nJBasicType__; -text: .text%__1cLMoveF2INodeGOpcode6kM_i_; -text: .text%__1cJCmpF3NodeGOpcode6kM_i_; -text: .text%__1cVVM_ParallelGCSystemGCEdoit6M_v_; -text: .text%__1cVcompiledICHolderKlassIallocate6MpnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cLConvD2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJBasicLockHmove_to6MpnHoopDesc_p0_v_; -text: .text%jni_GetStringRegion: jni.o; -text: .text%__1cNStubGeneratorLstub_prolog6MpnMStubCodeDesc__v_: stubGenerator_sparc.o; -text: .text%__1cOstackSlotPOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOcmovPI_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQComputeCallStackHdo_byte6M_v_: generateOopMap.o; -text: .text%__1cQdivI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOstackSlotPOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotPOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cQmulI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQregP_to_stkPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHThreadsLnmethods_do6F_v_; -text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; -text: .text%JVM_RawMonitorCreate; -text: .text%__1cIimmDOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%Unsafe_CompareAndSwapInt; -text: .text%__1cWloadConI_x43300000NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cXconvI2D_regDHi_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerQtest_mdp_data_at6MipnMRegisterImpl_rnFLabel_2_v_; -text: .text%__1cXconvI2D_regDHi_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZregDHi_regDLo_to_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKcastPPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSaddD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMnegF_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPorL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPconvD2F_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZregDHi_regDLo_to_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSsubD_regD_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPMultiBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceRefKlass.o; -text: .text%__1cPconvF2D_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; -text: .text%__1cSaddD_regD_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cWloadConI_x41f00000NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvL2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cWloadConI_x43300000NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMnegF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmulD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_Sleep; -text: .text%__1cLconvI2BNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRorI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%JVM_Lseek; -text: .text%__1cQmulD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOloadConL13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulFNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cJOopMapSetQsingular_oop_map6M_pnGOopMap__; -text: .text%__1cSmulD_regD_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSsubD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmembar_releaseNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cQComputeCallStackIdo_float6M_v_: generateOopMap.o; -text: .text%__1cRComputeEntryStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cWloadConI_x41f00000NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_: interpreterRT_sparc.o; -text: .text%Unsafe_GetNativeByte; -text: .text%__1cQmulL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLconvI2BNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQmulF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRsarL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQstkI_to_regFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQaddF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJLoadBNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cGciType2t6MnJBasicType__v_; -text: .text%__1cQandL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%jni_GetEnv; -text: .text%__1cOcmovLI_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSstring_compareNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cMciArrayKlassRbase_element_type6M_pnGciType__; -text: .text%__1cSstring_compareNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_NanoTime; -text: .text%__1cOMacroAssemblerOrestore_thread6MkpnMRegisterImpl__v_; -text: .text%__1cIMulFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cETypeEmake6Fn0AFTYPES__pk0_; -text: .text%__1cOMacroAssemblerLsave_thread6MkpnMRegisterImpl__v_; -text: .text%__1cOcmovIF_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%Unsafe_GetNativeFloat; -text: .text%jni_CallVoidMethod: jni.o; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cKimmU13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cJimmL0OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cFParseOdo_tableswitch6M_v_; -text: .text%__1cKstoreFNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cWloadConI_x41f00000NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWloadConI_x43300000NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKcastPPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOstackSlotFOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cRInlineCacheBufferSic_destination_for6FpnKCompiledIC__pC_; -text: .text%__1cOPhaseIdealLoopJclone_iff6MpnHPhiNode_pnNIdealLoopTree__pnIBoolNode__; -text: .text%__1cSmulL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParseQdo_monitor_enter6M_v_; -text: .text%__1cParrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cQshrI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerEfmov6MnRFloatRegisterImplFWidth_p13_v_; -text: .text%__1cOcmovLL_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSdivL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQstkI_to_regINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIXorINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; -text: .text%__1cLConvI2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIDivDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%JVM_FindPrimitiveClass; -text: .text%__1cOMacroAssemblerKget_thread6M_v_; -text: .text%__1cUdivL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUmulL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSsubL_reg_reg_2NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovIL_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVMoveL2D_stack_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIciSymbolHas_utf86M_pkc_; -text: .text%__1cQregI_to_stkINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIciMethodMnative_entry6M_pC_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cOstackSlotFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cNloadConL0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cSmodL_reg_imm13NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cJname2type6Fpkc_nJBasicType__; -text: .text%__1cOcmovIF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKcastPPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSconvF2I_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsarI_reg_imm5NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cPPerfDataManagerWcreate_string_variable6FnJCounterNS_pkci3pnGThread__pnSPerfStringVariable__; -text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cETypeFxdual6kM_pk0_; -text: .text%__1cZInterpreterMacroAssemblerbCincrement_invocation_counter6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerTnotify_method_entry6M_v_; -text: .text%__1cOtailjmpIndNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseMdo_anewarray6M_v_; -text: .text%__1cPorL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconvI2F_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovLI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%Unsafe_StaticFieldBaseFromField; -text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_; -text: .text%__1cQaddI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreC0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKcmpOpFOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cSconvF2I_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvD2F_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%Unsafe_EnsureClassInitialized; -text: .text%Unsafe_StaticFieldOffset; -text: .text%__1cOMacroAssemblerZtotal_frame_size_in_bytes6Mi_i_; -text: .text%__1cVMoveL2D_stack_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%Unsafe_GetObjectVolatile; -text: .text%__1cRshlL_reg_imm6NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadDNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRshlI_reg_imm5NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQstkI_to_regINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvD2F_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVMoveF2I_stack_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOtypeArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlass.o; -text: .text%__1cPconvI2F_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cFStateO_sub_Op_CMoveP6MpknENode__v_; -text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerQaccess_local_int6MpnMRegisterImpl_2_v_; -text: .text%__1cOcmovIF_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cObranchConFNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cLstoreC0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_GetClassContext; -text: .text%__1cZInterpreterMacroAssemblerWempty_expression_stack6M_v_; -text: .text%__1cMnegD_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQandI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmulL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulD_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_; -text: .text%__1cJLoadLNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cOcmovIF_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cJLoadDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableXresolve_cache_and_index6FipnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_; -text: .text%__1cPciObjArrayKlassJmake_impl6FpnHciKlass__p0_; -text: .text%JVM_IsSameClassPackage; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cRComputeEntryStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cGEventsDlog6FpkcE_v_: compiledIC.o; -text: .text%jni_SetStaticObjectField: jni.o; -text: .text%__1cRComputeEntryStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cKVtableStub2n6FLi_pv_; -text: .text%__1cNSharedRuntimeVhandle_ic_miss_helper6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; -text: .text%__1cKcmpOpFOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%__1cQregF_to_stkINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNMemoryManagerIadd_pool6MpnKMemoryPool__v_; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_; -text: .text%__1cQshlL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovLI_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cPorL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cCosMuser_handler6F_pv_; -text: .text%__1cKMemoryPoolLadd_manager6MpnNMemoryManager__v_; -text: .text%__1cNTemplateTableGiconst6Fi_v_; -text: .text%__1cXPartialSubtypeCheckNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cCosEstat6FpkcpnEstat__i_; -text: .text%__1cLOptoRuntimeMrethrow_Type6F_pknITypeFunc__; -text: .text%jni_RegisterNatives: jni.o; -text: .text%JVM_GetClassDeclaredFields; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2t6M_v_; -text: .text%__1cVMoveL2D_stack_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPPerfDataManagerKname_space6Fpkci_pc_; -text: .text%__1cOcmovLL_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNSharedRuntimeEdrem6Fdd_d_; -text: .text%__1cLTypeInstPtrOxmeet_unloaded6kMpk0_2_; -text: .text%__1cHciKlass2t6MnLKlassHandle_pnIciSymbol__v_; -text: .text%__1cLConvL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFParseVcatch_call_exceptions6MrnYciExceptionHandlerStream__v_; -text: .text%__1cODeoptimizationLUnrollBlockOsize_of_frames6kM_i_; -text: .text%__1cMMonitorValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cQdivL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cCosZvm_allocation_granularity6F_i_; -text: .text%__1cNRegisterSaverWrestore_live_registers6FpnOMacroAssembler__v_; -text: .text%__1cKJavaThreadUremove_monitor_chunk6MpnMMonitorChunk__v_; -text: .text%__1cKJavaThreadRadd_monitor_chunk6MpnMMonitorChunk__v_; -text: .text%__1cOLibraryCallKitXgenerate_current_thread6MrpnENode__2_; -text: .text%__1cOcmovII_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRMachSpillCopyNodeHsize_of6kM_I_: ad_sparc.o; -text: .text%__1cNTemplateTableHif_icmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableHif_0cmp6Fn0AJCondition__v_; -text: .text%__1cJMemRegion2t6M_v_: cardTableModRefBS.o; -text: .text%__1cZInterpreterMacroAssemblerSget_cpool_and_tags6MpnMRegisterImpl_2_v_; -text: .text%__1cMOopMapStream2t6MpnGOopMap_i_v_; -text: .text%__1cZInterpreterMacroAssemblerYtest_method_data_pointer6MrnFLabel__v_; -text: .text%__1cNTemplateTableH_return6FnITosState__v_; -text: .text%__1cKimmP13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cULinearLeastSquareFit2t6MI_v_; -text: .text%__1cFframebLprevious_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; -text: .text%__1cPstoreI_FregNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRtestI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvF2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cLConvD2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cHOrLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIAddDNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cMMonitorChunk2t6Mi_v_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_pnUPerfLongSampleHelper__v_; -text: .text%jni_GetJavaVM; -text: .text%jni_MonitorExit: jni.o; -text: .text%jni_MonitorEnter: jni.o; -text: .text%__1cOloadI_fregNodeOmemory_operand6kM_pknIMachOper__; -text: .text%Unsafe_ObjectFieldOffset; -text: .text%__1cSandL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSObjectSynchronizerIjni_exit6FpnHoopDesc_pnGThread__v_; -text: .text%JVM_IsSupportedJNIVersion; -text: .text%__1cMTailJumpNodeGOpcode6kM_i_; -text: .text%__1cSObjectSynchronizerJjni_enter6FnGHandle_pnGThread__v_; -text: .text%JVM_LoadLibrary; -text: .text%__1cXNativeSignatureIteratorJdo_double6M_v_: interpreterRT_sparc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_double6M_v_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_int_field06FnJBasicType__pC_; -text: .text%__1cISubDNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cSdivL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSconvD2I_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNRegisterSaverTsave_live_registers6FpnOMacroAssembler_ipi_pnGOopMap__; -text: .text%__1cNSpaceCounters2t6MpkciLpnMMutableSpace_pnSGenerationCounters__v_; -text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_; -text: .text%bootstrap_flush_windows; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__; -text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; -text: .text%__1cSCardTableExtensionVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cSmulL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerEfneg6MnRFloatRegisterImplFWidth_p13_v_; -text: .text%__1cPstoreI_FregNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_GetLastErrorString; -text: .text%__1cLcmpF_ccNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseRjump_if_true_fork6MpnGIfNode_ii_v_; -text: .text%__1cOcmovLI_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNReservedSpace2t6ML_v_; -text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_; -text: .text%__1cFParsePdo_lookupswitch6M_v_; -text: .text%__1cLMoveL2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cRtestI_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerbCverify_oop_or_return_address6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC_v_; -text: .text%__1cINegFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_; -text: .text%__1cNTemplateTableEdop26Fn0AJOperation__v_; -text: .text%__1cSsubL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_SetObjectField: jni.o; -text: .text%__1cLconvP2BNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQmodL_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pCi_v_; -text: .text%__1cMnegD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSandI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSmulL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQmulD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPstoreI_FregNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_Throw: jni.o; -text: .text%__1cOloadI_fregNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadFNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSconvD2I_helperNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cPconvD2I_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%Unsafe_AllocateMemory; -text: .text%__1cNTemplateTableGlstore6Fi_v_; -text: .text%__1cUcompI_iReg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableGfstore6Fi_v_; -text: .text%__1cNTemplateTableGdstore6Fi_v_; -text: .text%__1cNTemplateTableGastore6Fi_v_; -text: .text%__1cRcompL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableFaload6Fi_v_; -text: .text%__1cNTemplateTableGistore6Fi_v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC2_v_; -text: .text%__1cKstfSSFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableFdload6Fi_v_; -text: .text%__1cNTemplateTableFfload6Fi_v_; -text: .text%__1cOcmovDF_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovLI_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableFlload6Fi_v_; -text: .text%__1cZInterpreterMacroAssemblerQaccess_local_ptr6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_x6MnJAssemblerJCondition_pCpnMRegisterImpl__v_; -text: .text%__1cMnegF_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIRetTableUfind_jsrs_for_target6Mi_pnNRetTableEntry__; -text: .text%__1cIRetTableHadd_jsr6Mii_v_; -text: .text%__1cNinstanceKlassSremove_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cIimmFOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cOcmovLL_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cISubDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKstfSSFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIDivDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSconvD2I_helperNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIDivINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQregF_to_stkINodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; -text: .text%__1cINegDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLcmpD_ccNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%Unsafe_SetMemory; -text: .text%__1cSconvI2D_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQsubI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQaddD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvD2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOcmovPI_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIAddDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapTret_jump_targets_do6MpnOBytecodeStream_pFp0ipi_vi4_v_; -text: .text%__1cOClassPathEntry2t6M_v_; -text: .text%__1cVMoveF2I_stack_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_; -text: .text%__1cRsubI_zero_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNTemplateTableFiload6Fi_v_; -text: .text%__1cLconvP2BNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_CallStaticObjectMethod: jni.o; -text: .text%__1cCosGsignal6Fipv_1_; -text: .text%__1cLstoreF0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvL2I_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC22_v_; -text: .text%__1cLstoreF0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovII_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVMoveF2I_stack_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstfSSFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshrI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLstoreF0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJMemRegionFminus6kMk0_0_; -text: .text%__1cQsubD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRComputeEntryStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cQsubF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRComputeEntryStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_; -text: .text%__1cLOptoRuntimeTmultianewarray_Type6Fi_pknITypeFunc__; -text: .text%__1cQshrL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pLi_v_: oopMapCache.o; -text: .text%__1cNTemplateTableGfconst6Fi_v_; -text: .text%__1cOGenerateOopMapRdo_multianewarray6Mii_v_; -text: .text%JVM_FindSignal; -text: .text%__1cOcmovIF_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKConv2BNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOcmovPI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovDF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cCosFyield6F_v_; -text: .text%__1cFParseRdo_multianewarray6M_v_; -text: .text%__1cSInterpreterRuntimebKthrow_ArrayIndexOutOfBoundsException6FpnKJavaThread_pci_v_; -text: .text%__1cXNativeSignatureIteratorIdo_float6M_v_: interpreterRT_sparc.o; -text: .text%__1cOPSVirtualSpace2t6MnNReservedSpace_L_v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorKpass_float6M_v_; -text: .text%__1cZInterpreterMacroAssemblerQtop_most_monitor6M_nHAddress__; -text: .text%__1cODeoptimizationLUnrollBlock2T6M_v_; -text: .text%JVM_GetInterfaceVersion; -text: .text%jni_CallStaticObjectMethodV: jni.o; -text: .text%__1cNSafepointBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; -text: .text%__1cQregL_to_stkLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNciMethodKlassEmake6F_p0_; -text: .text%__1cKloadUBNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; -text: .text%jni_GetDoubleArrayRegion: jni.o; -text: .text%__1cLconvP2BNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; -text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; -text: .text%__1cUPSGenerationCounters2t6MpkciipnOPSVirtualSpace__v_; -text: .text%__1cKo2RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cPstoreI_FregNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPconvI2D_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; -text: .text%__1cFStateO_sub_Op_Conv2B6MpknENode__v_; -text: .text%JVM_Available; -text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_; -text: .text%jio_vsnprintf; -text: .text%__1cISubFNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_i2_v_; -text: .text%__1cISubFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cGThreadbArecord_stack_base_and_size6M_v_; -text: .text%__1cZInterpreterMacroAssemblerLlock_object6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerRget_constant_pool6MpnMRegisterImpl__v_; -text: .text%__1cGThreadbFinitialize_thread_local_storage6M_v_; -text: .text%__1cNMemoryManager2t6M_v_; -text: .text%__1cIDivDNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_2222rnFLabel__v_; -text: .text%__1cMLinkResolverbBlookup_method_in_interfaces6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_; -text: .text%JVM_RegisterSignal; -text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; -text: .text%__1cFStateO_sub_Op_CMoveD6MpknENode__v_; -text: .text%__1cQshlL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o; -text: .text%__1cLMoveF2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_222_v_; -text: .text%__1cMVirtualSpace2t6M_v_; -text: .text%__1cOcmovLL_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%Unsafe_CompareAndSwapObject; -text: .text%__1cMGCTaskThread2t6MpnNGCTaskManager_II_v_; -text: .text%__1cMGCTaskThreadDrun6M_v_; -text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_; -text: .text%__1cMGCTaskThreadFstart6M_v_; -text: .text%__1cLConvD2FNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJArgumentsVset_parallel_gc_flags6F_v_; -text: .text%__1cWloadConI_x43300000NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cINegFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cWloadConI_x41f00000NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSconvF2I_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cISubFNodeDsub6kMpknEType_3_3_; -text: .text%__1cZregDHi_regDLo_to_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXconvI2D_regDHi_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSaddD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSsubD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvD2F_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNVM_DeoptimizeEdoit6M_v_; -text: .text%__1cSmulD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvF2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLconvI2BNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvL2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableHif_acmp6Fn0AJCondition__v_; -text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cPGCMemoryManagerXinitialize_gc_stat_info6M_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC22_v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fi_v_; -text: .text%__1cNTemplateTableKdouble_cmp6Fi_v_; -text: .text%__1cNTemplateTableKinitialize6F_v_; -text: .text%__1cNTemplateTableGlconst6Fi_v_; -text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; -text: .text%__1cNTemplateTableGdconst6Fi_v_; -text: .text%__1cQObjectStartArrayKinitialize6MnJMemRegion__v_; -text: .text%__1cFStateO_sub_Op_CMoveL6MpknENode__v_; -text: .text%__1cNTemplateTableKif_nullcmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableUgenerate_vtable_call6FpnMRegisterImpl_22_v_; -text: .text%__1cNTemplateTableTinvokevfinal_helper6FpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerUcalc_mem_param_words6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableEidiv6F_v_; -text: .text%__1cLNamedThread2t6M_v_; -text: .text%__1cLNamedThreadIset_name6MpkcE_v_; -text: .text%__1cPGCMemoryManager2t6M_v_; -text: .text%__1cNTemplateTableHcastore6F_v_; -text: .text%__1cQObjectStartArraySset_covered_region6MnJMemRegion__v_; -text: .text%__1cFStateM_sub_Op_DivI6MpknENode__v_; -text: .text%__1cQdivI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVcompiledICHolderKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cQdivD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRCollectorCounters2t6Mpkci_v_; -text: .text%__1cJCodeCachebGmake_marked_nmethods_not_entrant6F_v_; -text: .text%__1cQstkI_to_regINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMPeriodicTaskGenroll6M_v_; -text: .text%__1cLMoveF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMPeriodicTask2t6ML_v_; -text: .text%__1cLMoveL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cUGcThreadCountClosureJdo_thread6MpnGThread__v_; -text: .text%__1cLConvF2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLConvD2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOcmovIF_immNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovIF_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovIF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_float_field06FnJBasicType__pC_; -text: .text%__1cKJNIHandlesQmake_weak_global6FnGHandle__pnI_jobject__; -text: .text%__1cFParseDl2f6M_v_; -text: .text%__1cRComputeEntryStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cZInterpreterMacroAssemblerSupdate_mdp_for_ret6MnITosState_pnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; -text: .text%__1cTMaskFillerForNativeJpass_long6M_v_: oopMapCache.o; -text: .text%__1cOGenerateOopMapTadd_to_ref_init_set6Mi_v_; -text: .text%__1cZInterpreterMacroAssemblerUprofile_virtual_call6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MnITosState_pnMRegisterImpl_3_v_; -text: .text%__1cCosIjvm_path6Fpci_v_; -text: .text%__1cZInterpreterMacroAssemblerbAdispatch_next_noverify_oop6MnITosState_i_v_; -text: .text%__1cPfilename_to_pid6Fpkc_i_: perfMemory_solaris.o; -text: .text%__1cSconvF2I_helperNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLconvI2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%jni_NewWeakGlobalRef: jni.o; -text: .text%__1cIPSOldGenPinitialize_work6Mpkci_v_; -text: .text%__1cOstackSlotFOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; -text: .text%__1cKcmpOpFOperJnot_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cPconvF2I_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cCosHrealloc6FpvL_1_; -text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_1_x6MnJAssemblerJCondition_rnFLabel__v_; -text: .text%__1cOtailjmpIndNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_icc6MnJAssemblerJCondition_pCpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_xcc6MnJAssemblerJCondition_pCpnMRegisterImpl__v_; -text: .text%__1cbAconvL2D_reg_slow_fxtofNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLOptoRuntimeIl2f_Type6F_pknITypeFunc__; -text: .text%__1cOstackSlotFOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotFOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOPSVirtualSpace2t6M_v_; -text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; -text: .text%__1cZInterpreterMacroAssemblerQstore_local_long6MpnMRegisterImpl_2_v_; -text: .text%__1cTMaskFillerForNativeLpass_object6M_v_: oopMapCache.o; -text: .text%__1cZInterpreterMacroAssemblerRstore_local_float6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerSstore_local_double6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; -text: .text%jni_CallStaticBooleanMethod: jni.o; -text: .text%jni_IsInstanceOf: jni.o; -text: .text%__1cTAbstractInterpreterKinitialize6F_v_; -text: .text%__1cCosWactive_processor_count6F_i_; -text: .text%__1cZInterpreterMacroAssemblerRaccess_local_long6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerZget_4_byte_integer_at_bcp6MipnMRegisterImpl_2n0AKsetCCOrNot__v_; -text: .text%__1cZInterpreterMacroAssemblerSaccess_local_float6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerTaccess_local_double6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerPstore_local_int6MpnMRegisterImpl_2_v_; -text: .text%jni_CallStaticVoidMethodV: jni.o; -text: .text%__1cHRetDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; -text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cLPSMarkSweepKinitialize6F_v_; -text: .text%__1cNCompileBrokerQset_should_block6F_v_; -text: .text%__1cHRetDataJfixup_ret6MinQmethodDataHandle__pC_; -text: .text%__1cNCompileBrokerVinit_compiler_threads6Fi_v_; -text: .text%__1cLstoreC0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPmethodDataKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodDataKlass.o; -text: .text%__1cPmethodDataKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; -text: .text%__1cCosHSolarisUsynchronization_init6F_v_; -text: .text%__1cCosHSolarisOlibthread_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cMciKlassKlassEmake6F_p0_; -text: .text%__1cQPlaceholderTable2t6Mi_v_; -text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o; -text: .text%__1cKTypeOopPtrEmake6FnHTypePtrDPTR_i_pk0_; -text: .text%__1cUInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cKTypeOopPtrFxdual6kM_pknEType__; -text: .text%__1cCosEinit6F_v_; -text: .text%__1cCosGinit_26F_i_; -text: .text%__1cRCompilationPolicyUcompleted_vm_startup6F_v_; -text: .text%__1cWcompilationPolicy_init6F_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyQinitialize_flags6M_v_; -text: .text%__1cOloadConL13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cbCTwoGenerationCollectorPolicyUinitialize_size_info6M_v_; -text: .text%__1cUInterpreterGeneratorXgenerate_accessor_entry6M_pC_; -text: .text%__1cbAPSGCAdaptivePolicyCounters2t6MpkciipnUPSAdaptiveSizePolicy__v_; -text: .text%__1cHvm_exit6Fi_v_; -text: .text%__1cPmethodDataKlassOset_alloc_size6MI_v_: methodDataKlass.o; -text: .text%__1cLbefore_exit6FpnKJavaThread__v_; -text: .text%__1cOcodeCache_init6F_v_; -text: .text%__1cWinvocationCounter_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: codeCache.o; -text: .text%__1cKklassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: klassKlass.o; -text: .text%__1cUInterpreterGeneratorUgenerate_empty_entry6M_pC_; -text: .text%__1cNCollectedHeap2t6M_v_; -text: .text%__1cNThreadServiceEinit6F_v_; -text: .text%__1cKPSYoungGenRavailable_to_live6M_L_; -text: .text%__1cETypeRInitialize_shared6FpnHCompile__v_; -text: .text%__1cQsubL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQconstMethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassOset_alloc_size6MI_v_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cXNativeSignatureIteratorHdo_byte6M_v_: interpreterRT_sparc.o; -text: .text%__1cKPSYoungGenPinitialize_work6M_v_; -text: .text%__1cKPSYoungGenKinitialize6MnNReservedSpace_L_v_; -text: .text%__1cKPSYoungGenYinitialize_virtual_space6MnNReservedSpace_L_v_; -text: .text%__1cKPSYoungGen2t6MLLL_v_; -text: .text%__1cRconstantPoolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cWconstantPoolCacheKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: cpCacheKlass.o; -text: .text%__1cWconstantPoolCacheKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlassKlass.o; -text: .text%__1cRconstantPoolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constantPoolKlass.o; -text: .text%__1cCosLsignal_wait6F_i_; -text: .text%__1cSmulL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKPSYoungGenbCreset_survivors_after_shrink6M_v_; -text: .text%__1cKPSYoungGenQlimit_gen_shrink6ML_L_; -text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; -text: .text%__1cIPSOldGenOgen_size_limit6M_L_; -text: .text%__1cIPSOldGenGresize6ML_v_; -text: .text%__1cbCAbstractInterpreterGeneratorbFgenerate_slow_signature_handler6M_pC_; -text: .text%__1cKstfSSFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIPSOldGenKinitialize6MnNReservedSpace_Lpkci_v_; -text: .text%__1cSobjArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cTcompilerOracle_init6F_v_; -text: .text%__1cVcompiledICHolderKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: compiledICHolderKlass.o; -text: .text%__1cVcompiledICHolderKlassOset_alloc_size6MI_v_: compiledICHolderKlass.o; -text: .text%__1cIPSOldGen2t6MLLLpkci_v_; -text: .text%__1cIPSOldGen2t6MnNReservedSpace_LLLLpkci_v_; -text: .text%__1cNMemoryServiceZadd_code_heap_memory_pool6FpnICodeHeap__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o; -text: .text%__1cSInterpreterRuntimeWcreate_klass_exception6FpnKJavaThread_pcpnHoopDesc__v_; -text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_L_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o; -text: .text%__1cKPSScavengeKinitialize6F_v_; -text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_; -text: .text%__1cSobjArrayKlassKlassbEallocate_system_objArray_klass6MpnGThread__pnMklassOopDesc__; -text: .text%__1cKcastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeSupdate_mdp_for_ret6FpnKJavaThread_i_v_; -text: .text%__1cSPSPromotionManagerKinitialize6F_v_; -text: .text%__1cOcmovLI_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovLI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKcmpOpFOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cNpriocntl_stub6FinGidtype_iipc_l_: os_solaris.o; -text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; -text: .text%__1cJPSPermGen2t6MnNReservedSpace_LLLLpkci_v_; -text: .text%__1cQjavaClasses_init6F_v_; -text: .text%JVM_InitProperties; -text: .text%JVM_Halt; -text: .text%__1cFParseMjump_if_join6MpnENode_2_2_; -text: .text%JVM_MaxMemory; -text: .text%__1cNReservedSpaceUpage_align_size_down6FL_L_; -text: .text%__1cNReservedSpaceYallocation_align_size_up6FL_L_; -text: .text%JVM_GetClassDeclaredMethods; -text: .text%__1cLMoveL2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLMoveF2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOvmStructs_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; -text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_; -text: .text%__1cLJvmtiExportbMtransition_pending_onload_raw_monitors6F_v_; -text: .text%__1cIVMThreadGcreate6F_v_; -text: .text%__1cIVMThreadDrun6M_v_; -text: .text%__1cLJvmtiExportNpost_vm_death6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; -text: .text%__1cMMutableSpaceOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cXPartialSubtypeCheckNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cVquicken_jni_functions6F_v_; -text: .text%__1cKg1RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%JNI_CreateJavaVM; -text: .text%__1cKklassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cQJNI_FastGetFieldbFgenerate_fast_get_boolean_field6F_pC_; -text: .text%__1cHOrLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cHOrLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_byte_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_char_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_short_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbBgenerate_fast_get_int_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_long_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_float_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_double_field6F_pC_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiImpl.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_sparc_expand.o; -text: .text%__1cQjni_handles_init6F_v_; -text: .text%__1cUJvmtiPendingMonitorsXtransition_raw_monitors6F_v_; -text: .text%__1cUParallelScavengeHeapKinitialize6M_i_; -text: .text%__1cUJvmtiEventControllerIvm_start6F_v_; -text: .text%__1cTAbstract_VM_VersionKvm_release6F_pkc_; -text: .text%__1cTAbstract_VM_VersionXinternal_vm_info_string6F_pkc_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; -text: .text%__1cPVM_Version_init6F_v_; -text: .text%__1cKVM_VersionKinitialize6F_v_; -text: .text%__1cbEinitialize_converter_functions6F_v_; -text: .text%__1cUParallelScavengeHeapItop_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; -text: .text%__1cUParallelScavengeHeapIend_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; -text: .text%__1cUParallelScavengeHeapOresize_old_gen6ML_v_; -text: .text%__1cQvtableStubs_init6F_v_; -text: .text%__1cQaccessFlags_init6F_v_; -text: .text%__1cFVTuneEexit6F_v_; -text: .text%__1cUParallelScavengeHeapEheap6F_p0_; -text: .text%__1cUParallelScavengeHeapNgc_threads_do6kMpnNThreadClosure__v_; -text: .text%__1cUParallelScavengeHeapYpermanent_object_iterate6MpnNObjectClosure__v_; -text: .text%__1cKvtune_init6F_v_; -text: .text%JVM_SupportsCX8; -text: .text%__1cTAbstract_VM_VersionJvm_vendor6F_pkc_; -text: .text%__1cUParallelScavengeHeapPpost_initialize6M_v_; -text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_; -text: .text%__1cLJvmtiExportNpost_vm_start6F_v_; -text: .text%__1cLJvmtiExportQenter_live_phase6F_v_; -text: .text%__1cUParallelScavengeHeapMmax_capacity6kM_L_; -text: .text%__1cLJvmtiExportRenter_start_phase6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEventController.o; -text: .text%__1cKmutex_init6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_death6F_v_; -text: .text%JVM_InitializeSocketLibrary; -text: .text%__1cHVM_ExitEdoit6M_v_; -text: .text%JVM_Socket; -text: .text%__1cUJvmtiEventControllerHvm_init6F_v_; -text: .text%__1cJLoadFNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cPGenerationSizerQinitialize_flags6M_v_: parallelScavengeHeap.o; -text: .text%__1cTAbstract_VM_VersionHvm_name6F_pkc_; -text: .text%__1cKi0RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMostream_init6F_v_; -text: .text%__1cUciObjArrayKlassKlassEmake6F_p0_; -text: .text%__1cYjni_GetBooleanField_addr6F_pC_; -text: .text%__1cVjni_GetByteField_addr6F_pC_; -text: .text%__1cVjni_GetCharField_addr6F_pC_; -text: .text%__1cWjni_GetShortField_addr6F_pC_; -text: .text%__1cTtypeArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cUjni_GetIntField_addr6F_pC_; -text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; -text: .text%__1cVjni_GetLongField_addr6F_pC_; -text: .text%__1cWjni_GetFloatField_addr6F_pC_; -text: .text%__1cNExceptionBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cQUncommonTrapBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlassKlass.o; -text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodKlass.o; -text: .text%__1cIciMethodMvtable_index6M_i_; -text: .text%__1cQjava_lang_ThreadPcompute_offsets6F_v_; -text: .text%__1cVjava_lang_ThreadGroupPcompute_offsets6F_v_; -text: .text%__1cCosXnon_memory_address_word6F_pc_; -text: .text%__1cYjava_lang_reflect_MethodPcompute_offsets6F_v_; -text: .text%__1cLmethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cYjava_lang_reflect_MethodNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldPcompute_offsets6F_v_; -text: .text%__1cPciObjArrayKlass2t6MpnIciSymbol_pnHciKlass_i_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cQregF_to_stkINodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLJavaClassesbAcompute_hard_coded_offsets6F_v_; -text: .text%jni_ToReflectedMethod: jni.o; -text: .text%__1cOtypeArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cLmethodKlassOset_alloc_size6MI_v_: methodKlass.o; -text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; -text: .text%__1cNget_user_name6Fi_pc_: perfMemory_solaris.o; -text: .text%__1cPperfMemory_exit6F_v_; -text: .text%__1cPperfMemory_init6F_v_; -text: .text%__1cMPerfDataList2T6M_v_; -text: .text%JVM_RegisterUnsafeMethods; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnPPerfLongCounter__; -text: .text%__SLIP.DELETER__C: ostream.o; -text: .text%__1cPClassFileParserbFjava_lang_ref_Reference_fix_pre6MpnPtypeArrayHandle_nSconstantPoolHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_; -text: .text%__1cPPerfDataManagerHsampled6F_pnMPerfDataList__; -text: .text%__1cLClassLoaderQload_zip_library6F_v_; -text: .text%__1cPPerfDataManagerHdestroy6F_v_; -text: .text%__1cLClassLoaderZcreate_package_info_table6F_v_; -text: .text%__1cLClassLoaderKinitialize6F_v_; -text: .text%__1cLClassLoaderVcompute_Object_vtable6F_i_; -text: .text%__1cQclassLoader_init6F_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: classLoader.o; -text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cbBcleanup_sharedmem_resources6Fpkc_v_: perfMemory_solaris.o; -text: .text%__1cIUniversePcheck_alignment6FLLpkc_v_; -text: .text%__1cIUniverseHgenesis6FpnGThread__v_; -text: .text%__1cIUniverseNfixup_mirrors6FpnGThread__v_; -text: .text%__1cXjni_GetDoubleField_addr6F_pC_; -text: .text%__1cQostream_init_log6F_v_; -text: .text%__1cICodeBlobMset_oop_maps6MpnJOopMapSet__v_; -text: .text%__1cNuniverse_init6F_i_; -text: .text%__1cOuniverse2_init6F_v_; -text: .text%__1cMostream_exit6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: phase.o; -text: .text%__1cOtailjmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: methodLiveness.o; -text: .text%Unsafe_SetNativeLong; -text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; -text: .text%__1cKPerfMemoryUcreate_memory_region6FL_v_; -text: .text%__1cSmmap_create_shared6FL_pc_: perfMemory_solaris.o; -text: .text%Unsafe_FreeMemory; -text: .text%__1cbAcreate_sharedmem_resources6Fpkc1L_i_: perfMemory_solaris.o; -text: .text%Unsafe_PageSize; -text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_; -text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; -text: .text%__1cQshrL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMPeriodicTask2T5B6M_v_; -text: .text%__1cMPeriodicTaskJdisenroll6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o; -text: .text%__1cORuntimeServiceYrecord_application_start6F_v_; -text: .text%__1cDhpiKinitialize6F_i_; -text: .text%__1cDhpiZinitialize_socket_library6F_i_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: matcher.o; -text: .text%__1cScheck_ThreadShadow6F_v_; -text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_; -text: .text%__1cQSystemDictionarybAcompute_java_system_loader6FpnGThread__v_; -text: .text%__1cQdivD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cCosGstrdup6Fpkc_pc_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_sparc_pipeline.o; -text: .text%__1cOmarksweep_init6F_v_; -text: .text%__1cQsubD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC222_v_; -text: .text%__1cCosLinit_random6Fl_v_; -text: .text%__1cNIdealLoopTreeUmerge_many_backedges6MpnOPhaseIdealLoop__v_; -text: .text%__1cICodeHeap2t6M_v_; -text: .text%__1cQaddF_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; -text: .text%__1cOMacroAssemblerNset_vm_result6MpnMRegisterImpl__v_; -text: .text%__1cQSystemDictionaryKclasses_do6FpFpnMklassOopDesc__v_v_; -text: .text%__1cORuntimeServiceEinit6F_v_; -text: .text%__1cNTemplateTableGbipush6F_v_; -text: .text%__1cNTemplateTableGsipush6F_v_; -text: .text%__1cNTemplateTableGldc2_w6F_v_; -text: .text%__1cNTemplateTableFiload6F_v_; -text: .text%__1cNTemplateTableLfast_iload26F_v_; -text: .text%__1cNTemplateTableKfast_iload6F_v_; -text: .text%__1cNTemplateTableFlload6F_v_; -text: .text%__1cNTemplateTableFfload6F_v_; -text: .text%__1cNTemplateTableFdload6F_v_; -text: .text%__1cNTemplateTableFaload6F_v_; -text: .text%__1cNTemplateTableKwide_iload6F_v_; -text: .text%__1cNTemplateTableKwide_lload6F_v_; -text: .text%__1cNTemplateTableKwide_fload6F_v_; -text: .text%__1cNTemplateTableKwide_dload6F_v_; -text: .text%__1cNTemplateTableKwide_aload6F_v_; -text: .text%__1cNTemplateTableGiaload6F_v_; -text: .text%__1cNTemplateTableGlaload6F_v_; -text: .text%__1cNTemplateTableGfaload6F_v_; -text: .text%__1cNTemplateTableGdaload6F_v_; -text: .text%__1cNTemplateTableGaaload6F_v_; -text: .text%__1cWInlineCacheBuffer_init6F_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC222_v_; -text: .text%__1cNTemplateTableF_goto6F_v_; -text: .text%__1cNTemplateTableGgoto_w6F_v_; -text: .text%__1cNTemplateTableFjsr_w6F_v_; -text: .text%__1cNTemplateTableDjsr6F_v_; -text: .text%__1cNeventlog_init6F_v_; -text: .text%__1cOMacroAssemblerVverify_oop_subroutine6M_v_; -text: .text%__1cKfix_parent6FpnNIdealLoopTree_1_v_: loopnode.o; -text: .text%__1cStemplateTable_init6F_v_; -text: .text%__1cNTemplateTableNpd_initialize6F_v_; -text: .text%__1cNTemplateTableDnop6F_v_; -text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_; -text: .text%__1cNTemplateTableLaconst_null6F_v_; -text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_; -text: .text%__1cNIdealLoopTreeQsplit_outer_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; -text: .text%__1cNStubGeneratorYgenerate_catch_exception6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorSgenerate_test_stop6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorbEgenerate_partial_subtype_check6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNGCTaskManagerKthreads_do6MpnNThreadClosure__v_; -text: .text%__1cNGCTaskManagerKinitialize6M_v_; -text: .text%__1cNGCTaskManager2t6MI_v_; -text: .text%__1cRStubCodeGeneratorLstub_prolog6MpnMStubCodeDesc__v_; -text: .text%__1cMSysClassPathPexpand_endorsed6M_v_; -text: .text%__1cOtailjmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLStatSamplerbMcreate_system_property_instrumentation6FpnGThread__v_; -text: .text%__1cLStatSamplerHdestroy6F_v_; -text: .text%__1cJArgumentsFparse6FpknOJavaVMInitArgs__i_; -text: .text%__1cLStatSamplerJdisengage6F_v_; -text: .text%__1cMSysClassPathQadd_jars_to_path6Fpcpkc_1_; -text: .text%__1cRLowMemoryDetectorKinitialize6F_v_; -text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_; -text: .text%__1cSstubRoutines_init26F_v_; -text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__L_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cSstubRoutines_init16F_v_; -text: .text%__1cNStubGeneratorbNgenerate_flush_callers_register_windows6M_pC_: stubGenerator_sparc.o; -text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsUset_ergonomics_flags6F_v_; -text: .text%__1cNStubGeneratorbIgenerate_handler_for_unsafe_access6M_pC_: stubGenerator_sparc.o; -text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_; -text: .text%__1cNStubGeneratorbAgenerate_forward_exception6M_pC_: stubGenerator_sparc.o; -text: .text%__1cJArgumentsSparse_vm_init_args6FpknOJavaVMInitArgs__i_; -text: .text%__1cNStubGeneratorSgenerate_call_stub6MrpC_1_: stubGenerator_sparc.o; -text: .text%__1cVMoveL2D_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cWResolveOopMapConflictsUdo_potential_rewrite6MpnGThread__nMmethodHandle__; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: arrayKlassKlass.o; -text: .text%__1cParrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: arrayKlassKlass.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: machnode.o; -text: .text%__1cPmanagement_init6F_v_; -text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; -text: .text%__1cFframeVinterpreter_frame_mdp6kM_pC_; -text: .text%__1cKManagementKinitialize6FpnGThread__v_; -text: .text%__1cCosLsignal_init6F_v_; -text: .text%__1cCosXterminate_signal_thread6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; -text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpnMRegisterImpl_pCi_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cParrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cVMoveF2I_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLStatSamplerGengage6F_v_; -text: .text%__1cJArgumentsWPropertyList_get_value6FpnOSystemProperty_pkc_4_; -text: .text%__1cLsymbolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cJArgumentsWinit_system_properties6F_v_; -text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHGCStats2t6M_v_; -text: .text%__1cOchunkpool_init6F_v_; -text: .text%__1cWAdjoiningVirtualSpaces2t6MnNReservedSpace_LLL_v_; -text: .text%__1cLconvP2BNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUAdjoiningGenerations2t6MnNReservedSpace_LLLLLLL_v_; -text: .text%__1cQGCPolicyCounters2t6Mpkcii_v_; -text: .text%__1cLsymbolKlassOset_alloc_size6MI_v_: symbolKlass.o; -text: .text%__1cLsymbolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: symbolKlass.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: arguments.o; -text: .text%__1cPorL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableGbaload6F_v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpnMRegisterImpl_pC2_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_normal6MnITosState__v_; -text: .text%__1cCosScurrent_process_id6F_i_; -text: .text%__1cCosbDallocate_thread_local_storage6F_i_; -text: .text%__1cZInterpreterMacroAssemblerbFset_method_data_pointer_for_bcp6M_v_; -text: .text%__1cGThreadMset_priority6Fp0nOThreadPriority__v_; -text: .text%__1cRsarL_reg_imm6NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_; -text: .text%__1cKDictionaryKclasses_do6MpFpnMklassOopDesc__v_v_; -text: .text%__1cNMemoryManagerbDget_psScavenge_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cNMemoryManagerbEget_psMarkSweep_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cKDictionary2t6Mi_v_; -text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o; -text: .text%__1cNTemplateTableOmultianewarray6F_v_; -text: .text%__1cNTemplateTableIputfield6Fi_v_; -text: .text%__1cNTemplateTableJputstatic6Fi_v_; -text: .text%__1cVInterfaceSupport_init6F_v_; -text: .text%__1cNTemplateTableNinvokevirtual6Fi_v_; -text: .text%__1cNTemplateTableRfast_invokevfinal6Fi_v_; -text: .text%__1cNTemplateTableNinvokespecial6Fi_v_; -text: .text%__1cNTemplateTableMinvokestatic6Fi_v_; -text: .text%__1cNTemplateTablebDinvokeinterface_object_method6FpnMRegisterImpl_222_v_; -text: .text%__1cNTemplateTablePinvokeinterface6Fi_v_; -text: .text%__1cNTemplateTableE_new6F_v_; -text: .text%__1cNTemplateTableInewarray6F_v_; -text: .text%__1cNTemplateTableJanewarray6F_v_; -text: .text%__1cNTemplateTableLarraylength6F_v_; -text: .text%__1cNTemplateTableJcheckcast6F_v_; -text: .text%__1cNTemplateTableKinstanceof6F_v_; -text: .text%__1cNTemplateTableL_breakpoint6F_v_; -text: .text%__1cNTemplateTableGathrow6F_v_; -text: .text%__1cNTemplateTableMmonitorenter6F_v_; -text: .text%__1cNTemplateTableLmonitorexit6F_v_; -text: .text%__1cNTemplateTableEwide6F_v_; -text: .text%__1cVcreate_initial_thread6FnGHandle_pnKJavaThread_pnGThread__pnHoopDesc__: thread.o; -text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cOThreadCriticalKinitialize6F_v_; -text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; -text: .text%__1cXreferenceProcessor_init6F_v_; -text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; -text: .text%__1cTConstantDoubleValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cJBytecodesKinitialize6F_v_; -text: .text%__1cObytecodes_init6F_v_; -text: .text%__1cJBytecodesNpd_initialize6F_v_; -text: .text%__1cWThreadLocalAllocBufferWstartup_initialization6F_v_; -text: .text%__1cPGlobalTLABStats2t6M_v_; -text: .text%__1cHCompileRpd_compiler2_init6F_v_; -text: .text%__1cKC2CompilerKinitialize6M_v_; -text: .text%__1cSThreadLocalStorageEinit6F_v_; -text: .text%__1cQinterpreter_init6F_v_; -text: .text%__1cbAcall_initializeSystemClass6FpnGThread__v_: thread.o; -text: .text%__1cWreset_vm_info_property6FpnGThread__v_: thread.o; -text: .text%__1cNWatcherThreadDrun6M_v_; -text: .text%__1cNWatcherThreadEstop6F_v_; -text: .text%__1cOMacroAssemblerElcmp6MpnMRegisterImpl_22_v_; -text: .text%__1cFStatebB_sub_Op_PartialSubtypeCheck6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_MoveF2I6MpknENode__v_; -text: .text%__1cVRegistersForDebuggingRrestore_registers6FpnOMacroAssembler_pnMRegisterImpl__v_: assembler_sparc.o; -text: .text%__1cVRegistersForDebuggingOsave_registers6FpnOMacroAssembler__v_: assembler_sparc.o; -text: .text%__1cCosSget_temp_directory6F_pkc_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: regmask.o; -text: .text%__1cFStateO_sub_Op_CastPP6MpknENode__v_; -text: .text%__1cCosNsigexitnum_pd6F_i_; -text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; -text: .text%__1cCosOsignal_init_pd6F_v_; -text: .text%__1cCosNsignal_notify6Fi_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: interp_masm_sparc.o; -text: .text%__1cQshlI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; -text: .text%__1cNTemplateTableHfastore6F_v_; -text: .text%__1cNTemplateTableHdastore6F_v_; -text: .text%__1cNTemplateTableHaastore6F_v_; -text: .text%__1cNTemplateTableHbastore6F_v_; -text: .text%__1cLOptoRuntimeUmultianewarray3_Type6F_pknITypeFunc__; -text: .text%__1cNTemplateTableHsastore6F_v_; -text: .text%__1cLOptoRuntimeUmultianewarray2_Type6F_pknITypeFunc__; -text: .text%__1cSThreadLocalStorageHpd_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: indexSet.o; -text: .text%__1cPvm_init_globals6F_v_; -text: .text%__1cNTemplateTableDpop6F_v_; -text: .text%__1cNTemplateTableEpop26F_v_; -text: .text%__1cNTemplateTableDdup6F_v_; -text: .text%__1cNTemplateTableGdup_x16F_v_; -text: .text%__1cNTemplateTableGdup_x26F_v_; -text: .text%__1cNTemplateTableEdup26F_v_; -text: .text%__1cNTemplateTableHdup2_x16F_v_; -text: .text%__1cNTemplateTableHdup2_x26F_v_; -text: .text%__1cNTemplateTableEswap6F_v_; -text: .text%__1cNTemplateTableHlastore6F_v_; -text: .text%__1cNTemplateTableGcaload6F_v_; -text: .text%__1cNTemplateTableMfast_icaload6F_v_; -text: .text%__1cNTemplateTableGsaload6F_v_; -text: .text%__1cLicache_init6F_v_; -text: .text%__1cTICacheStubGeneratorVgenerate_icache_flush6MppFpCii_i_v_; -text: .text%__1cLOptoRuntimeUmultianewarray5_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray4_Type6F_pknITypeFunc__; -text: .text%__1cNTemplateTableHaload_06F_v_; -text: .text%__1cNTemplateTableGistore6F_v_; -text: .text%__1cNTemplateTableGlstore6F_v_; -text: .text%__1cNTemplateTableGfstore6F_v_; -text: .text%__1cNTemplateTableGdstore6F_v_; -text: .text%__1cNTemplateTableGastore6F_v_; -text: .text%__1cNTemplateTableLwide_istore6F_v_; -text: .text%__1cNTemplateTableLwide_lstore6F_v_; -text: .text%__1cNTemplateTableLwide_fstore6F_v_; -text: .text%__1cNTemplateTableLwide_dstore6F_v_; -text: .text%__1cNTemplateTableLwide_astore6F_v_; -text: .text%__1cNTemplateTableHiastore6F_v_; -text: .text%__1cMinit_globals6F_i_; -text: .text%__1cQcreate_os_thread6FpnGThread_I_pnIOSThread__: os_solaris.o; -text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cNTemplateTableDret6F_v_; -text: .text%__1cNTemplateTableIwide_ret6F_v_; -text: .text%__1cNTemplateTableLtableswitch6F_v_; -text: .text%__1cNTemplateTableMlookupswitch6F_v_; -text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; -text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; -text: .text%__1cSinstanceKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlassKlass.o; -text: .text%__1cNTemplateTableIgetfield6Fi_v_; -text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; -text: .text%__1cVLoaderConstraintTable2t6Mi_v_; -text: .text%__1cCosPphysical_memory6F_X_; -text: .text%__1cNTemplateTableEirem6F_v_; -text: .text%__1cNTemplateTableElmul6F_v_; -text: .text%__1cNTemplateTableEldiv6F_v_; -text: .text%__1cNTemplateTableElrem6F_v_; -text: .text%__1cNTemplateTableElshl6F_v_; -text: .text%__1cNTemplateTableElshr6F_v_; -text: .text%__1cNTemplateTableFlushr6F_v_; -text: .text%__1cMexit_globals6F_v_; -text: .text%__1cCosbDinit_system_properties_values6F_v_; -text: .text%__1cNTemplateTableEineg6F_v_; -text: .text%__1cNTemplateTableElneg6F_v_; -text: .text%__1cNTemplateTableEfneg6F_v_; -text: .text%__1cNTemplateTableEdneg6F_v_; -text: .text%__1cNTemplateTableEiinc6F_v_; -text: .text%__1cNTemplateTableJwide_iinc6F_v_; -text: .text%__1cLOptoRuntimeIgenerate6FpnFciEnv__v_; -text: .text%__1cNTemplateTableElcmp6F_v_; -text: .text%__1cSset_init_completed6F_v_; -text: .text%__1cOMacroAssemblerPstop_subroutine6M_v_; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_CORE_i486 --- a/make/solaris/makefiles/reorder_CORE_i486 Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -# reordering not support for CORE builds diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_CORE_sparc --- a/make/solaris/makefiles/reorder_CORE_sparc Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -# reordering not support for CORE builds diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_CORE_sparcv9 --- a/make/solaris/makefiles/reorder_CORE_sparcv9 Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -# reordering not support for CORE builds diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_TIERED_amd64 --- a/make/solaris/makefiles/reorder_TIERED_amd64 Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5377 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; - - -text: .text%__1cECopyRpd_disjoint_words6FpnIHeapWord_2L_v_; -text: .text%__1cSPSPromotionManagerWcopy_to_survivor_space6MpnHoopDesc__2_; -text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOtypeArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQIndexSetIteratorEnext6M_I_; -text: .text%__1cQIndexSetIteratorQadvance_and_next6M_I_; -text: .text%__1cIUniverseMnon_oop_word6F_pv_; -text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQObjectStartArrayMobject_start6kMpnIHeapWord__2_; -text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cIPhaseIFGIadd_edge6MII_i_; -text: .text%__1cQIndexSetIterator2t6MpnIIndexSet__v_; -text: .text%__1cOPhaseIdealLoopOidom_no_update6kMpnENode__2_; -text: .text%__1cXresource_allocate_bytes6FL_pc_; -text: .text%__1cNRelocIteratorFreloc6M_pnKRelocation__; -text: .text%__1cHRegMaskESize6kM_I_; -text: .text%__1cIIndexSetLalloc_block6M_pn0AIBitBlock__; -text: .text%__1cWConstantPoolCacheEntryPadjust_pointers6M_v_; -text: .text%__1cWConstantPoolCacheEntryPfollow_contents6M_v_; -text: .text%__1cJMarkSweepSMarkAndPushClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cDLRGOcompute_degree6kMr0_i_; -text: .text%__1cLsymbolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cWPSScavengeRootsClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cLsymbolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cYPSPromotionFailedClosureJdo_object6MpnHoopDesc__v_; -text: .text%__1cENodeEjvms6kM_pnIJVMState__; -text: .text%__1cIIndexSetWalloc_block_containing6MI_pn0AIBitBlock__; -text: .text%__1cENodeHdel_out6Mp0_v_; -text: .text%__1cKRelocationLunpack_data6M_v_; -text: .text%__1cIMachNodeJideal_reg6kM_I_; -text: .text%__1cJAssemblerOlocate_operand6FpCn0AMWhichOperand__1_; -text: .text%__1cKRelocationSpd_address_in_code6M_ppC_; -text: .text%__1cOoop_RelocationIoop_addr6M_ppnHoopDesc__; -text: .text%__1cOPhaseIdealLoopSget_ctrl_no_update6kMpnENode__2_; -text: .text%__1cJCProjNodeNis_block_proj6kM_pknENode__; -text: .text%__1cETypeDcmp6Fpk02_i_; -text: .text%__1cOoop_RelocationLunpack_data6M_v_; -text: .text%__1cHRegMaskJis_bound16kM_i_; -text: .text%__1cHRegMaskJis_bound26kM_i_; -text: .text%__1cRmethodDataOopDescHdata_at6Mi_pnLProfileData__; -text: .text%__1cNGrowableArray4CI_Hat_grow6MirkI_I_; -text: .text%__1cLmethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cQconstMethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQconstMethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cRmethodDataOopDescJnext_data6MpnLProfileData__2_; -text: .text%__1cOoop_RelocationJoop_value6M_pnHoopDesc__; -text: .text%__1cJrRegPOperEtype6kM_pknEType__; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_LI_v_; -text: .text%__1cJVectorSet2R6MI_rnDSet__; -text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_; -text: .text%__1cPDictionaryEntrybDprotection_domain_set_oops_do6MpnKOopClosure__v_; -text: .text%__1cMOopMapStreamJfind_next6M_v_; -text: .text%__1cMloadConPNodeErule6kM_I_; -text: .text%__1cITypeNodeLbottom_type6kM_pknEType__; -text: .text%__1cDff16FI_i_; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_; -text: .text%__1cIIndexSetKinitialize6MI_v_; -text: .text%__1cMMutableSpaceMcas_allocate6ML_pnIHeapWord__; -text: .text%__1cIMachNodeGOpcode6kM_i_; -text: .text%__1cENodeHadd_req6Mp0_v_; -text: .text%__1cENodeIout_grow6MI_v_; -text: .text%__1cKTypeOopPtrFklass6kM_pnHciKlass__; -text: .text%__1cIIndexSetKfree_block6MI_v_; -text: .text%__1cETypeFuhash6Fpk0_i_; -text: .text%__1cJrRegIOperEtype6kM_pknEType__; -text: .text%__1cMPhaseChaitinLskip_copies6MpnENode__2_; -text: .text%__1cICallNodeKmatch_edge6kMI_I_; -text: .text%__1cNCollectedHeapbDcheck_for_bad_heap_word_value6MpnIHeapWord_L_v_; -text: .text%JVM_CurrentTimeMillis; -text: .text%__1cOPSPromotionLABKinitialize6MnJMemRegion__v_; -text: .text%__1cOPSPromotionLABFflush6M_v_; -text: .text%__1cMPhaseChaitinTinterfere_with_live6MIpnIIndexSet__v_; -text: .text%__1cINodeHashQhash_find_insert6MpnENode__2_; -text: .text%__1cHPhiNodeGOpcode6kM_i_; -text: .text%__1cKjmpDirNodeNis_block_proj6kM_pknENode__; -text: .text%__1cRMachSpillCopyNodeJideal_reg6kM_I_; -text: .text%__1cETypeIhashcons6M_pk0_; -text: .text%__1cENodeEhash6kM_I_; -text: .text%__1cIProjNodeGOpcode6kM_i_; -text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_; -text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_; -text: .text%__1cPVirtualCallDataKcell_count6M_i_; -text: .text%__1cENodeMcisc_operand6kM_i_; -text: .text%__1cRInterpreterOopMapLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cMMachCallNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cHNTarjanEEVAL6M_p0_; -text: .text%__1cNMachIdealNodeErule6kM_I_; -text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_; -text: .text%__1cKHandleMark2T6M_v_; -text: .text%__1cENode2t6MI_v_; -text: .text%__1cJloadPNodeErule6kM_I_; -text: .text%__1cMloadConINodeErule6kM_I_; -text: .text%__1cICodeHeapKfind_start6kMpv_1_; -text: .text%__1cWShouldNotReachHereNodeNis_block_proj6kM_pknENode__; -text: .text%__1cLProfileDataPfollow_contents6M_v_; -text: .text%__1cLProfileDataPadjust_pointers6M_v_; -text: .text%__1cHRegMaskMClearToPairs6M_v_; -text: .text%__1cJPhaseLiveLadd_liveout6MpnFBlock_IrnJVectorSet__v_; -text: .text%__1cLemit_opcode6FrnKCodeBuffer_i_v_; -text: .text%__1cIPhaseIFGQeffective_degree6kMI_i_; -text: .text%__1cFArenaIArealloc6MpvLL_1_; -text: .text%__1cGIfNodeGOpcode6kM_i_; -text: .text%__1cHTypePtrEhash6kM_i_; -text: .text%__1cIPhaseIFGLremove_node6MI_pnIIndexSet__; -text: .text%__1cIPhaseIFGJre_insert6MI_v_; -text: .text%__1cRMachSpillCopyNodeLbottom_type6kM_pknEType__; -text: .text%__1cETypeEmeet6kMpk0_2_; -text: .text%__1cKBranchDataKcell_count6M_i_; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__; -text: .text%__1cOPhaseIdealLoopYsplit_if_with_blocks_pre6MpnENode__2_; -text: .text%__1cNIdealLoopTreeJis_member6kMpk0_i_; -text: .text%__1cOPhaseIdealLoopZsplit_if_with_blocks_post6MpnENode__v_; -text: .text%__1cDfh16FI_i_; -text: .text%__1cDLRGFscore6kM_d_; -text: .text%__1cKTypeOopPtrEhash6kM_i_; -text: .text%__1cIAddPNodeGOpcode6kM_i_; -text: .text%__1cKIfTrueNodeGOpcode6kM_i_; -text: .text%__1cMPhaseChaitinMchoose_color6MrnDLRG_i_i_; -text: .text%__1cMPhaseIterGVNNtransform_old6MpnENode__2_; -text: .text%__1cGcmpkey6Fpkv1_i_; -text: .text%__1cIMachNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cHConNodeGOpcode6kM_i_; -text: .text%__1cUParallelScavengeHeapVlarge_typearray_limit6M_L_; -text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cMPhaseChaitinKbias_color6MrnDLRG_i_i_; -text: .text%__1cICodeHeapKnext_block6kMpnJHeapBlock__2_; -text: .text%__1cICodeHeapJnext_free6kMpnJHeapBlock__pv_; -text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__; -text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_; -text: .text%__1cRMachSpillCopyNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cMMachProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cSCallStaticJavaNodeGOpcode6kM_i_; -text: .text%__1cYCallStaticJavaDirectNodeMideal_Opcode6kM_i_; -text: .text%__1cJCodeCacheFalive6FpnICodeBlob__2_; -text: .text%__1cRMachSpillCopyNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMPhaseIterGVNWadd_users_to_worklist06MpnENode__v_; -text: .text%__1cECopyYconjoint_words_to_higher6FpnIHeapWord_2L_v_; -text: .text%__1cILRG_ListGextend6MII_v_; -text: .text%__1cWstatic_stub_RelocationLunpack_data6M_v_; -text: .text%__1cJPhaseLiveGgetset6MpnFBlock__pnIIndexSet__; -text: .text%__1cIConINodeGOpcode6kM_i_; -text: .text%__1cLIfFalseNodeGOpcode6kM_i_; -text: .text%__1cKNode_ArrayGinsert6MIpnENode__v_; -text: .text%__1cLCounterDataKcell_count6M_i_; -text: .text%__1cMMachProjNodeGOpcode6kM_i_; -text: .text%__1cENodeEgrow6MI_v_; -text: .text%__1cIMachNodePcompute_padding6kMi_i_; -text: .text%__1cIMachNodeSalignment_required6kM_i_; -text: .text%__1cOPhaseIdealLoopEsort6MpnNIdealLoopTree_2_2_; -text: .text%__1cNCollectedHeapXallocate_from_tlab_slow6FpnGThread_L_pnIHeapWord__; -text: .text%__1cHNTarjanICOMPRESS6M_v_; -text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_; -text: .text%__1cIBoolNodeGOpcode6kM_i_; -text: .text%__1cSInterpreterRuntimeInewarray6FpnKJavaThread_nJBasicType_i_v_; -text: .text%__1cUParallelScavengeHeapRallocate_new_tlab6ML_pnIHeapWord__; -text: .text%__1cWThreadLocalAllocBufferKinitialize6MpnIHeapWord_22_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; -text: .text%__1cWThreadLocalAllocBufferEfill6MpnIHeapWord_2L_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; -text: .text%__1cRMachSpillCopyNodePoper_input_base6kM_I_; -text: .text%__1cIIndexSetFclear6M_v_; -text: .text%__1cJPhaseLiveLadd_liveout6MpnFBlock_pnIIndexSet_rnJVectorSet__v_; -text: .text%__1cECopyXconjoint_words_to_lower6FpnIHeapWord_2L_v_; -text: .text%__1cNRelocIteratorKset_limits6MpC1_v_; -text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cSinstanceKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cITypeNodeJideal_reg6kM_I_; -text: .text%__1cHTypeIntEhash6kM_i_; -text: .text%__1cIPhaseGVNJtransform6MpnENode__2_; -text: .text%__1cNinstanceKlassGitable6kM_pnLklassItable__; -text: .text%__1cLklassItable2t6MnTinstanceKlassHandle__v_; -text: .text%__1cIciObjectEhash6M_i_; -text: .text%__1cNCellTypeStateFmerge6kM0i_0_; -text: .text%__1cOPhaseIdealLoopUbuild_loop_tree_impl6MpnENode_i_i_; -text: .text%__1cWNode_Backward_IteratorEnext6M_pnENode__; -text: .text%__1cHemit_rm6FrnKCodeBuffer_iii_v_; -text: .text%__1cITypeNodeEhash6kM_I_; -text: .text%__1cIIndexSetKinitialize6MIpnFArena__v_; -text: .text%__1cJPhaseLiveKgetfreeset6M_pnIIndexSet__; -text: .text%__1cMMachProjNodeJideal_reg6kM_I_; -text: .text%__1cHPhiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNCollectedHeapMobj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cKRegionNodeGOpcode6kM_i_; -text: .text%__1cMMachProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__; -text: .text%__1cIProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLTypeInstPtrEhash6kM_i_; -text: .text%__1cITypeLongEhash6kM_i_; -text: .text%__1cOPhaseIdealLoopOget_early_ctrl6MpnENode__2_; -text: .text%__1cOPhaseIdealLoopOset_early_ctrl6MpnENode__v_; -text: .text%__1cIJumpDataKcell_count6M_i_; -text: .text%__1cHNTarjanELINK6Mp01_v_; -text: .text%__1cENodeIIdentity6MpnOPhaseTransform__p0_; -text: .text%__1cRPSOldPromotionLABFflush6M_v_; -text: .text%__1cENodeRraise_bottom_type6MpknEType__v_; -text: .text%__1cOJNIHandleBlockPallocate_handle6MpnHoopDesc__pnI_jobject__; -text: .text%__1cENodeNis_block_proj6kM_pk0_; -text: .text%__1cOPhaseIdealLoopThas_local_phi_input6MpnENode__2_; -text: .text%__1cJVectorSet2F6kMI_i_; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cICallNodeLbottom_type6kM_pknEType__; -text: .text%JVM_ArrayCopy; -text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cIMachNodeLbottom_type6kM_pknEType__; -text: .text%__1cFState2t6M_v_; -text: .text%__1cJPhaseLiveHfreeset6MpknFBlock__v_; -text: .text%__1cOPhaseIdealLoopbIdom_lca_for_get_late_ctrl_internal6MpnENode_22_2_; -text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; -text: .text%__1cRSignatureIteratorGexpect6Mc_v_; -text: .text%__1cIProjNodeEhash6kM_I_; -text: .text%__1cENodeFclone6kM_p0_; -text: .text%__1cILocationIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cIPhaseCCPOtransform_once6MpnENode__2_; -text: .text%__1cHRegMaskPfind_first_pair6kM_i_; -text: .text%__1cENodeKmatch_edge6kMI_I_; -text: .text%__1cKJNIHandlesKmake_local6FpnHJNIEnv__pnHoopDesc__pnI_jobject__; -text: .text%__1cNLocationValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cNPhaseRegAllocKreg2offset6kMi_i_; -text: .text%__1cNPhaseRegAllocUreg2offset_unchecked6kMi_i_; -text: .text%__1cbAfinal_graph_reshaping_impl6FpnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cETypeFxmeet6kMpk0_2_; -text: .text%__1cJStartNodeLbottom_type6kM_pknEType__; -text: .text%__1cICmpPNodeGOpcode6kM_i_; -text: .text%__1cOMethodLivenessKBasicBlockXcompute_gen_kill_single6MpnQciBytecodeStream__v_; -text: .text%__1cKjmpDirNodeMideal_Opcode6kM_i_; -text: .text%__1cOPhaseIdealLoopZremix_address_expressions6MpnENode__2_; -text: .text%__1cGciTypeEmake6FnJBasicType__p0_; -text: .text%__1cQUnique_Node_ListGremove6MpnENode__v_; -text: .text%__1cKNode_Array2t6MpnFArena__v_; -text: .text%__1cRMachSafePointNodeEjvms6kM_pnIJVMState__; -text: .text%__1cNinstanceKlassMclass_loader6kM_pnHoopDesc__; -text: .text%__1cOPhaseIdealLoopNget_late_ctrl6MpnENode_2_2_; -text: .text%__1cKTypeAryPtrEhash6kM_i_; -text: .text%__1cIIndexSet2t6Mp0_v_; -text: .text%__1cNrFlagsRegOperEtype6kM_pknEType__; -text: .text%__1cHTypeInt2t6Miii_v_; -text: .text%__1cMPhaseChaitinSuse_prior_register6MpnENode_I2pnFBlock_rnJNode_List_6_i_; -text: .text%__1cENodeQIdeal_DU_postCCP6MpnIPhaseCCP__p0_; -text: .text%__1cIConLNodeGOpcode6kM_i_; -text: .text%__1cHPhiNodeEhash6kM_I_; -text: .text%__1cENodeHsize_of6kM_I_; -text: .text%__1cHRegMaskMSmearToPairs6M_v_; -text: .text%jni_GetObjectField: jni.o; -text: .text%__1cJMarkSweepXrevisit_weak_klass_link6FpnFKlass__v_; -text: .text%__1cKklassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cKklassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cFKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cKNode_ArrayEgrow6MI_v_; -text: .text%__1cLklassVtableToop_adjust_pointers6M_v_; -text: .text%__1cLklassVtableToop_follow_contents6M_v_; -text: .text%__1cICmpINodeGOpcode6kM_i_; -text: .text%__1cMPhaseChaitinHnew_lrg6MpknENode_I_v_; -text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__; -text: .text%__1cUGenericGrowableArrayMraw_allocate6Mi_pv_; -text: .text%__1cJMarkSweepNpreserve_mark6FpnHoopDesc_pnLmarkOopDesc__v_; -text: .text%__1cIMachNodeKconst_size6kM_i_; -text: .text%__1cINodeHashLhash_insert6MpnENode__v_; -text: .text%JVM_Read; -text: .text%__1cDhpiEread6FipvI_L_; -text: .text%__1cMPhaseIterGVNVadd_users_to_worklist6MpnENode__v_; -text: .text%__1cPClassFileStreamGget_u16MpnGThread__C_; -text: .text%__1cMMergeMemNodeGOpcode6kM_i_; -text: .text%__1cPciObjectFactoryEfind6MpnHoopDesc_pnNGrowableArray4CpnIciObject____i_; -text: .text%__1cHemit_d86FrnKCodeBuffer_i_v_; -text: .text%__1cLOopRecorder2t6MpnFArena__v_; -text: .text%__1cKCodeBuffer2T6M_v_; -text: .text%__1cIMachNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIMachNodeJemit_size6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJloadINodeErule6kM_I_; -text: .text%__1cMOopMapStream2t6MpnGOopMap_i_v_; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode__i_; -text: .text%__1cIAddINodeGOpcode6kM_i_; -text: .text%__1cWShouldNotReachHereNodeMideal_Opcode6kM_i_; -text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cIJVMStateIof_depth6kMi_p0_; -text: .text%__1cJrRegLOperEtype6kM_pknEType__; -text: .text%__1cENode2t6Mp0_v_; -text: .text%__1cHhashptr6Fpkv_i_; -text: .text%__1cLklassItableToop_adjust_pointers6M_v_; -text: .text%__1cLklassItableToop_follow_contents6M_v_; -text: .text%__1cRconstantPoolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cRconstantPoolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSinstanceKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSinstanceKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNinstanceKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cNinstanceKlassUadjust_static_fields6M_v_; -text: .text%__1cNinstanceKlassUfollow_static_fields6M_v_; -text: .text%__1cEDict2F6kMpkv_pv_; -text: .text%__1cIProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cNCatchProjNodeGOpcode6kM_i_; -text: .text%__1cJCodeCacheJfind_blob6Fpv_pnICodeBlob__; -text: .text%__1cICallNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cWconstantPoolCacheKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cKjmpConNodeMideal_Opcode6kM_i_; -text: .text%__1cJLoadPNodeGOpcode6kM_i_; -text: .text%__1cLSymbolTableGlookup6MipkciI_pnNsymbolOopDesc__; -text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cHPhiNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cGIfNodeLbottom_type6kM_pknEType__; -text: .text%__1cENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMachNodeFreloc6kM_i_; -text: .text%__1cPciObjectFactoryDget6MpnHoopDesc__pnIciObject__; -text: .text%__1cOThreadCritical2T6M_v_; -text: .text%__1cOThreadCritical2t6M_v_; -text: .text%__1cIAddPNodeKmatch_edge6kMI_I_; -text: .text%__1cILoadNodeEhash6kM_I_; -text: .text%__1cRMachSpillCopyNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIimmIOperIconstant6kM_l_; -text: .text%__1cENodeHdel_req6MI_v_; -text: .text%__1cJCProjNodeEhash6kM_I_; -text: .text%__1cJMultiNodeEhash6kM_I_; -text: .text%__1cRSignatureIteratorKparse_type6M_i_; -text: .text%__1cIHaltNodeGOpcode6kM_i_; -text: .text%__1cHPhiNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMPhaseIterGVNZremove_globally_dead_node6MpnENode__v_; -text: .text%__1cETypeEhash6kM_i_; -text: .text%__1cJHashtableLhash_symbol6Fpkci_I_; -text: .text%__1cOMachReturnNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cFframeVinterpreter_frame_bcp6kM_pC_; -text: .text%__1cICmpUNodeGOpcode6kM_i_; -text: .text%__1cJOopMapSetSfind_map_at_offset6kMi_pnGOopMap__; -text: .text%__1cICodeBlobbAoop_map_for_return_address6MpC_pnGOopMap__; -text: .text%__1cIConPNodeGOpcode6kM_i_; -text: .text%__1cIMachNodeHtwo_adr6kM_I_; -text: .text%__1cIParmNodeGOpcode6kM_i_; -text: .text%__1cTconvI2L_reg_regNodeErule6kM_I_; -text: .text%__1cHTypeIntFxmeet6kMpknEType__3_; -text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cMloadConINodeMideal_Opcode6kM_i_; -text: .text%__1cGTarjanEEVAL6M_p0_; -text: .text%__1cYexternal_word_RelocationLunpack_data6M_v_; -text: .text%__1cJCatchNodeGOpcode6kM_i_; -text: .text%__1cZPhaseConservativeCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cTCreateExceptionNodeErule6kM_I_; -text: .text%__1cIJVMStateLdebug_start6kM_I_; -text: .text%__1cMloadConPNodeMideal_Opcode6kM_i_; -text: .text%__1cIMachNodeNoperand_index6kMI_i_; -text: .text%__1cFBlockIis_Empty6kM_i_; -text: .text%__1cMMachTypeNodeLbottom_type6kM_pknEType__; -text: .text%__1cIAddPNodeLbottom_type6kM_pknEType__; -text: .text%__1cFBlockOcode_alignment6M_I_; -text: .text%__1cGBitMapUclear_range_of_words6MLL_v_; -text: .text%__1cJrRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKCastPPNodeGOpcode6kM_i_; -text: .text%__1cIPhaseIFGMtest_edge_sq6kMII_i_; -text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__; -text: .text%__1cFStateRMachNodeGenerator6MipnHCompile__pnIMachNode__; -text: .text%__1cHMatcherKReduceInst6MpnFState_irpnENode__pnIMachNode__; -text: .text%__1cPClassFileStreamHskip_u16MipnGThread__v_; -text: .text%__1cMMergeMemNodeLbottom_type6kM_pknEType__; -text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cILoadNodeLbottom_type6kM_pknEType__; -text: .text%__1cLConvI2LNodeGOpcode6kM_i_; -text: .text%__1cHTypeIntEmake6Fi_pk0_; -text: .text%__1cJMultiNodeIproj_out6kMI_pnIProjNode__; -text: .text%__1cIBoolNodeEhash6kM_I_; -text: .text%__1cIimmPOperEtype6kM_pknEType__; -text: .text%__1cMloadConPNodeLbottom_type6kM_pknEType__; -text: .text%__1cOrFlagsRegUOperEtype6kM_pknEType__; -text: .text%__1cGIfNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNsymbolOopDescLas_C_string6kM_pc_; -text: .text%__1cNsymbolOopDescLas_C_string6kMpci_1_; -text: .text%__1cITypeLongFxmeet6kMpknEType__3_; -text: .text%__1cNCollectedHeapbHcheck_for_non_bad_heap_word_value6MpnIHeapWord_L_v_; -text: .text%__1cMPhaseChaitinLinsert_proj6MpnFBlock_IpnENode_I_v_; -text: .text%__1cHCompileRprobe_alias_cache6MpknHTypePtr__pn0APAliasCacheEntry__; -text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_; -text: .text%__1cENodeIdestruct6M_v_; -text: .text%__1cIAddPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPClassFileParserRverify_legal_utf86MpkCipnGThread__v_; -text: .text%__1cMMachHaltNodeEjvms6kM_pnIJVMState__; -text: .text%__1cKoopFactoryMnew_objArray6FpnMklassOopDesc_ipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassRallocate_objArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cGBitMapJset_union6M0_v_; -text: .text%__1cHTypeIntEmake6Fiii_pk0_; -text: .text%__1cJTypeTupleEhash6kM_i_; -text: .text%__1cFParsePdo_one_bytecode6M_v_; -text: .text%__1cFParseNdo_exceptions6M_v_; -text: .text%__1cKRegionNodeEhash6kM_I_; -text: .text%__1cMMutableSpaceIallocate6ML_pnIHeapWord__; -text: .text%__1cUParallelScavengeHeapWpermanent_mem_allocate6ML_pnIHeapWord__; -text: .text%__1cJPSPermGenSallocate_permanent6ML_pnIHeapWord__; -text: .text%__1cPmethodDataKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cIHaltNodeKmatch_edge6kMI_I_; -text: .text%__1cPmethodDataKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cPmethodDataKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cMPhaseIterGVNKis_IterGVN6M_p0_; -text: .text%__1cGBitMap2t6MpLL_v_; -text: .text%__1cNnew_loc_value6FpnNPhaseRegAlloc_inILocationEType__pnNLocationValue__: output.o; -text: .text%__1cOindOffset8OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cOindOffset8OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cKNode_ArrayGremove6MI_v_; -text: .text%__1cHPhiNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRSignatureIterator2t6MnMsymbolHandle__v_; -text: .text%__1cJloadPNodeMideal_Opcode6kM_i_; -text: .text%__1cPSignatureStreamEnext6M_v_; -text: .text%__1cOindOffset8OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLjmpConUNodeMideal_Opcode6kM_i_; -text: .text%__1cFBlockJfind_node6kMpknENode__I_; -text: .text%__1cHhashkey6Fpkv_i_; -text: .text%__1cNLoadRangeNodeGOpcode6kM_i_; -text: .text%__1cJLoadINodeGOpcode6kM_i_; -text: .text%__1cGTarjanICOMPRESS6M_v_; -text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%JVM_ReleaseUTF; -text: .text%__1cHSubNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFChunk2t6ML_v_; -text: .text%__1cFChunk2n6FLL_pv_; -text: .text%__1cOindOffset8OperFscale6kM_i_; -text: .text%__1cMCreateExNodeGOpcode6kM_i_; -text: .text%__1cFframebCsender_for_interpreter_frame6kMpnLRegisterMap__0_; -text: .text%__1cFChunk2k6Fpv_v_; -text: .text%__1cOMachReturnNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cHMatcherKmatch_tree6MpknENode__pnIMachNode__; -text: .text%__1cLTypeInstPtrFxmeet6kMpknEType__3_; -text: .text%__1cKjmpConNodePoper_input_base6kM_I_; -text: .text%__1cIJVMState2t6MpnIciMethod_p0_v_; -text: .text%__1cMciMethodDataHdata_at6Mi_pnLProfileData__; -text: .text%__1cJrelocInfoNfinish_prefix6Mph_p0_; -text: .text%__1cIProjNodeHsize_of6kM_I_; -text: .text%__1cHBitDataKcell_count6M_i_; -text: .text%__1cFArenaEgrow6ML_pv_; -text: .text%__1cMPhaseIterGVNMsubsume_node6MpnENode_2_v_; -text: .text%__1cJloadBNodeErule6kM_I_; -text: .text%__1cHConNodeEhash6kM_I_; -text: .text%__1cENodeRdisconnect_inputs6Mp0_i_; -text: .text%__1cIHaltNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTconstantPoolOopDescWsignature_ref_index_at6Mi_i_; -text: .text%__1cRMachSpillCopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__; -text: .text%__1cIJVMStateJdebug_end6kM_I_; -text: .text%__1cENode2t6Mp011_v_; -text: .text%__1cNSafePointNodeHsize_of6kM_I_; -text: .text%__1cKPSScavengeUoop_promotion_failed6FpnHoopDesc_pnLmarkOopDesc__v_; -text: .text%__1cHTypePtrLmeet_offset6kMi_i_; -text: .text%__1cSPSPromotionManagerUoop_promotion_failed6MpnHoopDesc_pnLmarkOopDesc__2_; -text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; -text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cLLShiftLNodeGOpcode6kM_i_; -text: .text%__1cOMethodLivenessKBasicBlockIload_one6Mi_v_; -text: .text%__1cHCmpNodeLbottom_type6kM_pknEType__; -text: .text%__1cFDictI2i6M_v_; -text: .text%JVM_GetMethodIxExceptionTableLength; -text: .text%__1cENodeHget_int6kM_i_; -text: .text%__1cMMachCallNodeLbottom_type6kM_pknEType__; -text: .text%__1cOGenerateOopMapHinterp16MpnOBytecodeStream__v_; -text: .text%__1cMloadConINodeLbottom_type6kM_pknEType__; -text: .text%__1cPCheckCastPPNodeGOpcode6kM_i_; -text: .text%__1cMloadConINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeKreplace_by6Mp0_v_; -text: .text%__1cHPhiNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cIBoolTestKcc2logical6kMpknEType__3_; -text: .text%__1cIBoolNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJrelocInfoKset_format6Mi_v_; -text: .text%__1cXruntime_call_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cNPhaseCoalesceRcombine_these_two6MpnENode_2_v_; -text: .text%__1cNtestP_regNodeMideal_Opcode6kM_i_; -text: .text%__1cICallNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJTypeTupleGfields6FI_ppknEType__; -text: .text%__1cPClassFileParserUassemble_annotations6MpCi1ipnGThread__nPtypeArrayHandle__; -text: .text%method_compare: methodOop.o; -text: .text%__1cMMergeMemNodeEhash6kM_I_; -text: .text%__1cJloadPNodePoper_input_base6kM_I_; -text: .text%__1cILoadNodeKmatch_edge6kMI_I_; -text: .text%__1cFBlockUneeded_for_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; -text: .text%__1cIIndexSetSpopulate_free_list6F_v_; -text: .text%__1cIAddPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIemit_d326FrnKCodeBuffer_i_v_; -text: .text%__1cJStoreNodeKmatch_edge6kMI_I_; -text: .text%__1cITypeNodeDcmp6kMrknENode__I_; -text: .text%__1cMPhaseChaitinFUnion6MpknENode_3_v_; -text: .text%__1cRSignatureIteratorTcheck_signature_end6M_v_; -text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_; -text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cILoadNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNSafePointNodeKmatch_edge6kMI_I_; -text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_; -text: .text%__1cKarrayKlassLobject_size6kMi_i_; -text: .text%__1cKarrayKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cYCallStaticJavaDirectNodePoper_input_base6kM_I_; -text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_; -text: .text%__1cPciInstanceKlassGloader6M_pnHoopDesc__; -text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__; -text: .text%__1cYDebugInformationRecorderWserialize_scope_values6MpnNGrowableArray4CpnKScopeValue____i_; -text: .text%__1cYDebugInformationRecorderTcreate_scope_values6MpnNGrowableArray4CpnKScopeValue____pnKDebugToken__; -text: .text%__1cITypeNodeHsize_of6kM_I_; -text: .text%__1cILoadNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cPPerfLongVariantGsample6M_v_; -text: .text%__1cNloadConI0NodeErule6kM_I_; -text: .text%__1cQciBytecodeStreamMreset_to_bci6Mi_v_; -text: .text%__1cHPhiNodeHsize_of6kM_I_; -text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; -text: .text%__1cMPhaseChaitinNFind_compress6MI_I_; -text: .text%__1cIMachNodeRget_base_and_disp6kMrlrpknHTypePtr__pknENode__; -text: .text%__1cLOopMapCacheIentry_at6kMi_pnQOopMapCacheEntry__; -text: .text%__1cOGenerateOopMapKcheck_type6MnNCellTypeState_1_v_; -text: .text%__1cPciInstanceKlassRprotection_domain6M_pnHoopDesc__; -text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cLRegisterMapFclear6M_v_; -text: .text%__1cIBoolNodeLbottom_type6kM_pknEType__; -text: .text%__1cITypeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKRegionNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLBlock_Array2t6MpnFArena__v_; -text: .text%__1cKStoreINodeGOpcode6kM_i_; -text: .text%__1cJcmpOpOperJnum_edges6kM_I_; -text: .text%__1cNExceptionMark2t6MrpnGThread__v_; -text: .text%__1cNExceptionMark2T6M_v_; -text: .text%__1cCosMvm_page_size6F_i_; -text: .text%__1cMPhaseChaitinSget_spillcopy_wide6MpnENode_2I_2_; -text: .text%__1cIGraphKitJsync_jvms6kM_pnIJVMState__; -text: .text%__1cFframebFinterpreter_frame_monitor_begin6kM_pnPBasicObjectLock__; -text: .text%__1cNidealize_test6FpnIPhaseGVN_pnGIfNode__3_: ifnode.o; -text: .text%__1cNSafePointNodeLbottom_type6kM_pknEType__; -text: .text%__1cPTwoOopHashtableMcompute_hash6MnMsymbolHandle_nGHandle__I_; -text: .text%__1cRSignatureIterator2t6MpnNsymbolOopDesc__v_; -text: .text%__1cKStorePNodeGOpcode6kM_i_; -text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; -text: .text%__1cHRetNodeNis_block_proj6kM_pknENode__; -text: .text%__1cMPhaseChaitinMyank_if_dead6MpnENode_pnFBlock_pnJNode_List_6_i_; -text: .text%__1cENodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFBlockLfind_remove6MpknENode__v_; -text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_; -text: .text%__1cNSafePointNodeSset_next_exception6Mp0_v_; -text: .text%__1cPloadConUL32NodeErule6kM_I_; -text: .text%__1cFChunkEchop6M_v_; -text: .text%__1cMciMethodDataJnext_data6MpnLProfileData__2_; -text: .text%__1cJStoreNodeLbottom_type6kM_pknEType__; -text: .text%__1cLBlock_StackXmost_frequent_successor6MpnFBlock__I_; -text: .text%__1cFBlockScall_catch_cleanup6MrnLBlock_Array__v_; -text: .text%__1cXPhaseAggressiveCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cOGenerateOopMapFppop16MnNCellTypeState__v_; -text: .text%__1cKstorePNodePoper_input_base6kM_I_; -text: .text%__1cPsplit_flow_path6FpnIPhaseGVN_pnHPhiNode__pnENode__: cfgnode.o; -text: .text%__1cKRegionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGTarjanELINK6Mp01_v_; -text: .text%__1cIsplit_if6FpnGIfNode_pnMPhaseIterGVN__pnENode__: ifnode.o; -text: .text%__1cMPhaseChaitinNFind_compress6MpknENode__I_; -text: .text%__1cRInterpreterOopMapKinitialize6M_v_; -text: .text%__1cJTypeTupleEmake6FIppknEType__pk0_; -text: .text%__1cKDictionaryJget_entry6MiInMsymbolHandle_nGHandle__pnPDictionaryEntry__; -text: .text%__1cLLShiftINodeGOpcode6kM_i_; -text: .text%__1cQResultTypeFinderDset6MinJBasicType__v_; -text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__; -text: .text%__1cIMachOperOindex_position6kM_i_; -text: .text%__1cOemit_d32_reloc6FrnKCodeBuffer_irknQRelocationHolder_i_v_; -text: .text%__1cLjmpConUNodePoper_input_base6kM_I_; -text: .text%__1cHAddNodeEhash6kM_I_; -text: .text%__1cPcheckCastPPNodePoper_input_base6kM_I_; -text: .text%__1cIRootNodeGOpcode6kM_i_; -text: .text%__1cFframebDinterpreter_frame_monitor_end6kM_pnPBasicObjectLock__; -text: .text%__1cNmethodOopDescImask_for6MipnRInterpreterOopMap__v_; -text: .text%__1cNinstanceKlassImask_for6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cRInterpreterOopMapLiterate_oop6MpnNOffsetClosure__v_; -text: .text%__1cRInterpreterOopMap2T6M_v_; -text: .text%__1cRInterpreterOopMapNresource_copy6MpnQOopMapCacheEntry__v_; -text: .text%__1cLOopMapCacheGlookup6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cRInterpreterOopMap2t6M_v_; -text: .text%__1cSInterpreterRuntimeLcache_entry6FpnKJavaThread__pnWConstantPoolCacheEntry__; -text: .text%__1cOindOffset8OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; -text: .text%__1cKstorePNodeMideal_Opcode6kM_i_; -text: .text%__1cFChunkJnext_chop6M_v_; -text: .text%__1cENode2t6Mp0111_v_; -text: .text%__1cPciObjectFactoryNfind_non_perm6MpnHoopDesc__rpn0ANNonPermObject__; -text: .text%__1cHCmpNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIAddINodeLbottom_type6kM_pknEType__; -text: .text%__1cNloadRangeNodeErule6kM_I_; -text: .text%__1cNrFlagsRegOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIIndexSetJlrg_union6MIIIpknIPhaseIFG_rknHRegMask__I_; -text: .text%__1cISubINodeGOpcode6kM_i_; -text: .text%__1cYciExceptionHandlerStreamEnext6M_v_; -text: .text%__1cOBasicHashtableJnew_entry6MI_pnTBasicHashtableEntry__; -text: .text%__1cJHashtableJnew_entry6MIpnHoopDesc__pnOHashtableEntry__; -text: .text%__1cSCountedLoopEndNodeGOpcode6kM_i_; -text: .text%__1cKstoreINodePoper_input_base6kM_I_; -text: .text%__1cCosVcurrent_stack_pointer6F_pC_; -text: .text%__1cMMergeMemNodePiteration_setup6Mpk0_v_; -text: .text%__1cRMachSafePointNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cJStoreNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMMergeMemNodeJmemory_at6kMI_pnENode__; -text: .text%__1cJloadSNodeErule6kM_I_; -text: .text%__1cLLShiftLNodeLbottom_type6kM_pknEType__; -text: .text%__1cTconstantPoolOopDescSklass_at_if_loaded6FnSconstantPoolHandle_i_pnMklassOopDesc__; -text: .text%__1cKjmpDirNodeHsize_of6kM_I_; -text: .text%__1cJCProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJMultiNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cHOopFlowNcompute_reach6MpnNPhaseRegAlloc_ipnEDict__v_; -text: .text%__1cJCatchNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cGGCTaskKinitialize6M_v_; -text: .text%__1cNGCTaskManagerIget_task6MI_pnGGCTask__; -text: .text%__1cNGCTaskManagerWdecrement_busy_workers6M_I_; -text: .text%__1cLGCTaskQdDueueGremove6M_pnGGCTask__; -text: .text%__1cLGCTaskQdDueueHenqueue6MpnGGCTask__v_; -text: .text%__1cNGCTaskManagerWincrement_busy_workers6M_I_; -text: .text%__1cLGCTaskQdDueueHdequeue6M_pnGGCTask__; -text: .text%__1cNGCTaskManagerPnote_completion6MI_v_; -text: .text%__1cTCreateExceptionNodeMideal_Opcode6kM_i_; -text: .text%__1cKIfTrueNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_; -text: .text%__1cXindIndexScaleOffsetOperJnum_edges6kM_I_; -text: .text%__1cLRShiftINodeGOpcode6kM_i_; -text: .text%Unsafe_CompareAndSwapLong; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__; -text: .text%__1cNtestI_regNodeMideal_Opcode6kM_i_; -text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__; -text: .text%__1cJStoreNodeEhash6kM_I_; -text: .text%__1cKmethodOperGmethod6kM_l_; -text: .text%__1cKstoreINodeMideal_Opcode6kM_i_; -text: .text%__1cGGCTask2t6M_v_; -text: .text%__1cNSafePointNodeOnext_exception6kM_p0_; -text: .text%__1cOindOffset8OperNbase_position6kM_i_; -text: .text%__1cOindOffset8OperNconstant_disp6kM_i_; -text: .text%__1cENodeHset_req6MIp0_v_; -text: .text%__1cTconstantPoolOopDescNklass_name_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cSObjectSynchronizerJfast_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cWShouldNotReachHereNodePoper_input_base6kM_I_; -text: .text%__1cLIfFalseNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cXAdaptiveWeightedAverageYcompute_adaptive_average6Mff_f_; -text: .text%__1cOcompU_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cJloadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTconvI2L_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cSPSPromotionManagerbBgc_thread_promotion_manager6Fi_p0_; -text: .text%__1cQinstanceRefKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cMMergeMemNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLciSignatureLreturn_type6kM_pnGciType__; -text: .text%__1cIGraphKitJclone_map6M_pnNSafePointNode__; -text: .text%__1cLMachNopNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJchar2type6Fc_nJBasicType__; -text: .text%__1cJFieldTypeKbasic_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__; -text: .text%__1cJrRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMObjectLocker2T6M_v_; -text: .text%__1cNloadRangeNodeMideal_Opcode6kM_i_; -text: .text%__1cRInvocationCounterJset_state6Mn0AFState__v_; -text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cRInvocationCounterEinit6M_v_; -text: .text%__1cNSafePointNodeEjvms6kM_pnIJVMState__; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_; -text: .text%__1cTconstantPoolOopDescRname_ref_index_at6Mi_i_; -text: .text%__1cIHaltNodeLbottom_type6kM_pknEType__; -text: .text%__1cSsafePoint_pollNodeMideal_Opcode6kM_i_; -text: .text%__1cYCallStaticJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYCallStaticJavaDirectNodeSalignment_required6kM_i_; -text: .text%__1cMloadConPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; -text: .text%__1cKRegionNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKNativeCallGverify6M_v_; -text: .text%__1cNCompileBrokerLmaybe_block6F_v_; -text: .text%__1cFPhase2t6Mn0ALPhaseNumber__v_; -text: .text%__1cJloadINodeMideal_Opcode6kM_i_; -text: .text%__1cNLoadKlassNodeGOpcode6kM_i_; -text: .text%__1cIBoolNodeKmatch_edge6kMI_I_; -text: .text%__1cCosGmalloc6FL_pv_; -text: .text%__1cXAdaptiveWeightedAverageGsample6Mf_v_; -text: .text%__1cFStateM_sub_Op_RegP6MpknENode__v_; -text: .text%__1cPcheckCastPPNodeHtwo_adr6kM_I_; -text: .text%__1cOGenerateOopMapGppush16MnNCellTypeState__v_; -text: .text%__1cGBitMapOset_difference6M0_v_; -text: .text%__1cMvalue_of_loc6FppnHoopDesc__l_; -text: .text%__1cRmethodDataOopDescTbytecode_cell_count6FnJBytecodesECode__i_; -text: .text%__1cRmethodDataOopDescRcompute_data_size6FpnOBytecodeStream__i_; -text: .text%__1cRmethodDataOopDescPinitialize_data6MpnOBytecodeStream_i_i_; -text: .text%__1cLSymbolTableJbasic_add6MipCiIpnGThread__pnNsymbolOopDesc__; -text: .text%__1cLsymbolKlassPallocate_symbol6MpCipnGThread__pnNsymbolOopDesc__; -text: .text%__1cNGrowableArray4CpnKciTypeFlowFBlock__2t6MpnFArena_iirk2_v_; -text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cOcompI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cKTypeAryPtrFxmeet6kMpknEType__3_; -text: .text%__1cOcompU_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cNSafePointNodeGOpcode6kM_i_; -text: .text%__1cMTypeKlassPtrEhash6kM_i_; -text: .text%__1cMLinkResolverYlookup_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cMciMethodDataLbci_to_data6Mi_pnLProfileData__; -text: .text%JVM_GetCPMethodSignatureUTF; -text: .text%__1cPfieldDescriptorKinitialize6MpnMklassOopDesc_i_v_; -text: .text%__1cMMergeMemNodeNset_memory_at6MIpnENode__v_; -text: .text%JVM_CurrentThread; -text: .text%__1cHTypeAryEhash6kM_i_; -text: .text%JVM_GetClassModifiers; -text: .text%JVM_GetClassAccessFlags; -text: .text%__1cRAbstractAssemblerGa_byte6Mi_v_; -text: .text%__1cJAssemblerGprefix6Mn0AGPrefix__v_; -text: .text%__1cKMemBarNodeKmatch_edge6kMI_I_; -text: .text%__1cMMergeMemNodePset_base_memory6MpnENode__v_; -text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_; -text: .text%__1cCosEfree6Fpv_v_; -text: .text%__1cENodeDcmp6kMrk0_I_; -text: .text%__1cMLinkResolverbAcheck_method_accessability6FnLKlassHandle_11nMmethodHandle_pnGThread__v_; -text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cMrax_RegPOperEtype6kM_pknEType__; -text: .text%__1cKTypeRawPtrEhash6kM_i_; -text: .text%__1cXindIndexScaleOffsetOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cVCompressedWriteStream2t6Mi_v_; -text: .text%__1cENode2t6Mp01_v_; -text: .text%__1cHAddNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMURShiftINodeGOpcode6kM_i_; -text: .text%__1cYDebugInformationRecorderVcreate_monitor_values6MpnNGrowableArray4CpnMMonitorValue____pnKDebugToken__; -text: .text%__1cYDebugInformationRecorderYserialize_monitor_values6MpnNGrowableArray4CpnMMonitorValue____i_; -text: .text%__1cMloadConINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMachNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cOMethodLivenessKBasicBlockWcompute_gen_kill_range6MpnQciBytecodeStream__v_; -text: .text%__1cJAssemblerJemit_data6MirknQRelocationHolder_i_v_; -text: .text%__1cIMachOperMdisp_as_type6kM_pknHTypePtr__; -text: .text%__1cOcompU_rRegNodeErule6kM_I_; -text: .text%__1cRMemBarReleaseNodeGOpcode6kM_i_; -text: .text%__1cKRelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cETypeOget_const_type6FpnGciType__pk0_; -text: .text%__1cMPhaseChaitinPset_was_spilled6MpnENode__v_; -text: .text%__1cKcmpOpUOperJnum_edges6kM_I_; -text: .text%__1cIGraphKitMsaved_ex_oop6FpnNSafePointNode__pnENode__; -text: .text%__1cMtlsLoadPNodeErule6kM_I_; -text: .text%__1cIGraphKitGmemory6MI_pnENode__; -text: .text%__1cNRelocIteratorJset_limit6MpC_v_; -text: .text%__1cPcheckCastPPNodeErule6kM_I_; -text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; -text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSobjArrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQciBytecodeStreamPget_field_index6M_i_; -text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cKCompiledIC2t6MpnKRelocation__v_; -text: .text%__1cRaddI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cENodeHins_req6MIp0_v_; -text: .text%__1cIGraphKitLclean_stack6Mi_v_; -text: .text%__1cKRegionNodeHhas_phi6kM_pnHPhiNode__; -text: .text%__1cNloadRangeNodePoper_input_base6kM_I_; -text: .text%__1cWConstantPoolCacheEntryPbytecode_number6FnJBytecodesECode__i_; -text: .text%__1cNtestP_regNodeErule6kM_I_; -text: .text%__1cFStateM_sub_Op_ConI6MpknENode__v_; -text: .text%__1cUArgumentSizeComputerDset6MinJBasicType__v_; -text: .text%__1cHPhiNodeEmake6FpnENode_2pknEType_pknHTypePtr__p0_; -text: .text%__1cNtestI_regNodeErule6kM_I_; -text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__; -text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_; -text: .text%__1cOGenerateOopMapSget_basic_block_at6kMi_pnKBasicBlock__; -text: .text%__1cFStateM_sub_Op_AddP6MpknENode__v_; -text: .text%__1cICallNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cOcompI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cPciObjectFactoryNinit_ident_of6MpnIciObject__v_; -text: .text%__1cIciObjectJset_ident6MI_v_; -text: .text%__1cLMachNopNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLMachNopNodeMideal_Opcode6kM_i_; -text: .text%__1cKJNIHandlesKmake_local6FpnHoopDesc__pnI_jobject__; -text: .text%__1cITypeFuncEhash6kM_i_; -text: .text%__1cOcompI_rRegNodeErule6kM_I_; -text: .text%__1cJAssemblerJemit_data6MinJrelocInfoJrelocType_i_v_; -text: .text%__1cJLoadSNodeGOpcode6kM_i_; -text: .text%__1cRMemBarAcquireNodeGOpcode6kM_i_; -text: .text%__1cJVectorSet2L6MI_rnDSet__; -text: .text%__1cJVectorSetEgrow6MI_v_; -text: .text%__1cPcheckCastPPNodeMideal_Opcode6kM_i_; -text: .text%__1cJLoadLNodeGOpcode6kM_i_; -text: .text%__1cMLinkResolverNresolve_klass6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__; -text: .text%__1cIAndINodeGOpcode6kM_i_; -text: .text%__1cTCreateExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNArgumentCountDset6MinJBasicType__v_; -text: .text%__1cLBoxLockNodeGOpcode6kM_i_; -text: .text%__1cKStoreBNodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapHget_var6Mi_nNCellTypeState__; -text: .text%__1cWShouldNotReachHereNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHoopDescGverify6M_v_; -text: .text%__1cHTypePtrHget_con6kM_l_; -text: .text%__1cMTypeKlassPtr2t6MnHTypePtrDPTR_pnHciKlass_i_v_; -text: .text%__1cYCallStaticJavaDirectNodeKmethod_set6Ml_v_; -text: .text%__1cWMachCallStaticJavaNodePret_addr_offset6M_i_; -text: .text%__1cYCallStaticJavaDirectNodePcompute_padding6kMi_i_; -text: .text%__1cJVectorSet2t6MpnFArena__v_; -text: .text%__1cFStateM_sub_Op_RegI6MpknENode__v_; -text: .text%__1cICmpPNodeDsub6kMpknEType_3_3_; -text: .text%__1cOAbstractICachePinvalidate_word6FpC_v_; -text: .text%__1cRNativeInstructionFwrote6Mi_v_; -text: .text%__1cMURShiftLNodeGOpcode6kM_i_; -text: .text%__1cOrFlagsRegUOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQciBytecodeStreamQget_method_index6M_i_; -text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__; -text: .text%JVM_GetMethodIxLocalsCount; -text: .text%__1cJlabelOperFlabel6kM_pnFLabel__; -text: .text%__1cGOopMapJheap_size6kM_i_; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cMloadConLNodeErule6kM_I_; -text: .text%__1cLas_TosState6FnJBasicType__nITosState__; -text: .text%__1cNloadKlassNodeMideal_Opcode6kM_i_; -text: .text%__1cWThreadLocalAllocBufferVinitialize_statistics6M_v_; -text: .text%__1cWThreadLocalAllocBufferGresize6M_v_; -text: .text%__1cJloadINodePoper_input_base6kM_I_; -text: .text%__1cIRootNodeLbottom_type6kM_pknEType__; -text: .text%__1cWConstantPoolCacheEntryGverify6kMpnMoutputStream__v_; -text: .text%__1cHCompileYout_preserve_stack_slots6F_I_; -text: .text%__1cFParsePload_state_from6Mpn0AFBlock__v_; -text: .text%__1cFParseMmerge_common6Mpn0AFBlock_i_v_; -text: .text%__1cIGraphKitQkill_dead_locals6M_v_; -text: .text%__1cKMemBarNodeLbottom_type6kM_pknEType__; -text: .text%__1cIciObject2t6MnGHandle__v_; -text: .text%__1cITypeFuncEmake6FpknJTypeTuple_3_pk0_; -text: .text%__1cLConvI2LNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPciObjectFactoryGinsert6MipnIciObject_pnNGrowableArray4C2___v_; -text: .text%__1cRaddP_rReg_immNodePoper_input_base6kM_I_; -text: .text%__1cLBoxLockNodeJideal_reg6kM_I_; -text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cICHeapObj2n6FL_pv_; -text: .text%__1cKInlineTreeJcallee_at6kMipnIciMethod__p0_; -text: .text%__1cOFastUnlockNodeGOpcode6kM_i_; -text: .text%__1cFStateM_sub_Op_ConL6MpknENode__v_; -text: .text%__1cMTypeKlassPtrEmake6FnHTypePtrDPTR_pnHciKlass_i_pk0_; -text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cOCallRelocationFvalue6M_pC_; -text: .text%__1cMmerge_region6FpnKRegionNode_pnIPhaseGVN__pnENode__: cfgnode.o; -text: .text%__1cNloadConP0NodeErule6kM_I_; -text: .text%__1cIGraphKitMreset_memory6M_pnENode__; -text: .text%__1cPciObjectFactoryRcreate_new_object6MpnHoopDesc__pnIciObject__; -text: .text%__1cNloadRangeNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNloadConI0NodeMideal_Opcode6kM_i_; -text: .text%__1cNSignatureInfoGdo_int6M_v_; -text: .text%__1cKjmpDirNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPThreadRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cPThreadRootsTaskEname6M_pc_; -text: .text%__1cUThreadSafepointStateMroll_forward6Mn0AMsuspend_type__v_; -text: .text%__1cUThreadSafepointStateHrestart6M_v_; -text: .text%__1cLciSignatureHtype_at6kMi_pnGciType__; -text: .text%__1cJrRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIAddLNodeGOpcode6kM_i_; -text: .text%__1cJLoadPNodeJideal_reg6kM_I_; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cFParseFBlockRsuccessor_for_bci6Mi_p1_; -text: .text%__1cNGrowableArray4CpnOMethodLivenessKBasicBlock__2t6MpnFArena_iirk2_v_; -text: .text%__1cQSystemDictionaryEfind6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNtestP_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNincI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cHOrINodeGOpcode6kM_i_; -text: .text%__1cMPhaseChaitinJsplit_DEF6MpnENode_pnFBlock_iIp25nNGrowableArray4CI__i_I_; -text: .text%__1cICHeapObj2k6Fpv_v_; -text: .text%__1cRaddP_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cICmpINodeDsub6kMpknEType_3_3_; -text: .text%__1cIAddINodeGadd_id6kM_pknEType__; -text: .text%__1cKStoreCNodeGOpcode6kM_i_; -text: .text%__1cTconvI2L_reg_regNodeMcisc_operand6kM_i_; -text: .text%__1cHMemNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cNFingerprinterLfingerprint6M_L_; -text: .text%__1cOGenerateOopMapGppload6MpnNCellTypeState_i_v_; -text: .text%__1cKBlock_ListGremove6MI_v_; -text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; -text: .text%__1cKciTypeFlowGJsrSetJcopy_into6Mp1_v_; -text: .text%__1cICmpLNodeGOpcode6kM_i_; -text: .text%__1cTciConstantPoolCacheEfind6Mi_i_; -text: .text%__1cOPhaseIdealLoopGspinup6MpnENode_2222pnLsmall_cache__2_; -text: .text%__1cMVirtualSpaceOcommitted_size6kM_L_; -text: .text%__1cNGrowableArray4CpnIciObject__Praw_at_put_grow6Mirk14_v_; -text: .text%__1cIRootNodeNis_block_proj6kM_pknENode__; -text: .text%__1cJloadLNodeErule6kM_I_; -text: .text%__1cNloadConI0NodeLbottom_type6kM_pknEType__; -text: .text%__1cJimmI0OperIconstant6kM_l_; -text: .text%__1cScompI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cLBoxLockNodeLbottom_type6kM_pknEType__; -text: .text%__1cNaddI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cOPhaseIdealLoopKhandle_use6MpnENode_2pnLsmall_cache_22222_v_; -text: .text%__1cOPhaseIdealLoopOfind_use_block6MpnENode_22222_2_; -text: .text%__1cJStoreNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNSignatureInfoHdo_void6M_v_; -text: .text%JVM_GetCPMethodClassNameUTF; -text: .text%__1cHOopFlowFclone6Mp0i_v_; -text: .text%__1cRSignatureIteratorSiterate_parameters6ML_v_; -text: .text%__1cPindOffset32OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cPindOffset32OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMCallLeafNodeGOpcode6kM_i_; -text: .text%__1cPadd_derived_oop6FppnHoopDesc_2_v_: oopMap.o; -text: .text%__1cTDerivedPointerTableDadd6FppnHoopDesc_3_v_; -text: .text%__1cFParseFBlockJinit_node6Mp0i_v_; -text: .text%__1cFParseFBlockKinit_graph6Mp0_v_; -text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cKjmpDirNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJTraceTime2T6M_v_; -text: .text%__1cNmethodOopDescbAcompute_size_of_parameters6MpnGThread__v_; -text: .text%__1cSconstMethodOopDescLobject_size6Fiiii_i_; -text: .text%__1cSconstMethodOopDescZset_inlined_tables_length6Miii_v_; -text: .text%__1cLmethodKlassIallocate6MnRconstMethodHandle_nLAccessFlags_pnGThread__pnNmethodOopDesc__; -text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__; -text: .text%__1cFciEnvXget_field_by_index_impl6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cFciEnvSget_field_by_index6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cWConstantPoolCacheEntryOset_bytecode_16MnJBytecodesECode__v_; -text: .text%__1cMMergeMemNodeNgrow_to_match6Mpk0_v_; -text: .text%__1cTCreateExceptionNodePoper_input_base6kM_I_; -text: .text%__1cPciInstanceKlassYunique_concrete_subklass6M_p0_; -text: .text%__1cLStringTableGlookup6MipHiI_pnHoopDesc__; -text: .text%__1cLBoxLockNodeHsize_of6kM_I_; -text: .text%__1cIPhaseGVNUtransform_no_reclaim6MpnENode__2_; -text: .text%__1cNloadKlassNodePoper_input_base6kM_I_; -text: .text%__1cNObjectMonitorEexit6MpnGThread__v_; -text: .text%__1cMMergeMemNode2t6MpnENode__v_; -text: .text%__1cMMergeMemNodeRmake_empty_memory6F_pnENode__; -text: .text%__1cMindIndexOperJnum_edges6kM_I_; -text: .text%__1cRInterpretedRFrameKtop_method6kM_nMmethodHandle__; -text: .text%__1cXmembar_acquire_lockNodeLbottom_type6kM_pknEType__; -text: .text%__1cQPreserveJVMState2T6M_v_; -text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; -text: .text%__1cKjmpConNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIemit_d646FrnKCodeBuffer_l_v_; -text: .text%__1cFParseFmerge6Mi_v_; -text: .text%__1cOPhaseIdealLoopIset_idom6MpnENode_2I_v_; -text: .text%__1cFParseMdo_one_block6M_v_; -text: .text%__1cFParseFBlockMrecord_state6Mp0_v_; -text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__; -text: .text%__1cIPhaseIFGFUnion6MII_v_; -text: .text%__1cWConstantPoolCacheEntryOset_bytecode_26MnJBytecodesECode__v_; -text: .text%__1cOcompP_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cIBoolNodeJideal_reg6kM_I_; -text: .text%__1cHCmpNodeJideal_reg6kM_I_; -text: .text%__1cFStateM_sub_Op_Bool6MpknENode__v_; -text: .text%__1cJLoadBNodeGOpcode6kM_i_; -text: .text%__1cENodeHlatency6MI_I_; -text: .text%__1cIGraphKit2t6MpnIJVMState__v_; -text: .text%__1cKTypeAryPtrFklass6kM_pnHciKlass__; -text: .text%__1cTciConstantPoolCacheDget6Mi_pv_; -text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; -text: .text%__1cKTypeOopPtrHget_con6kM_l_; -text: .text%__1cIJVMStateLdebug_depth6kM_I_; -text: .text%__1cENodeNadd_req_batch6Mp0I_v_; -text: .text%__1cFStateK_sub_Op_If6MpknENode__v_; -text: .text%__1cXindIndexScaleOffsetOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cXindIndexScaleOffsetOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMelapsedTimerFstart6M_v_; -text: .text%__1cJStartNodeGOpcode6kM_i_; -text: .text%__1cMelapsedTimerEstop6M_v_; -text: .text%__1cOPhaseIdealLoopQconditional_move6MpnENode__2_; -text: .text%__1cJloadLNodeMideal_Opcode6kM_i_; -text: .text%__1cOMethodLivenessKBasicBlockJstore_one6Mi_v_; -text: .text%__1cPFieldAccessInfoDset6MnLKlassHandle_nMsymbolHandle_iinJBasicType_nLAccessFlags__v_; -text: .text%__1cMLinkResolverZcheck_field_accessability6FnLKlassHandle_11rnPfieldDescriptor_pnGThread__v_; -text: .text%__1cNsubI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cPindOffset32OperFscale6kM_i_; -text: .text%__1cHAddNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSconstMethodOopDescbBcompressed_linenumber_table6kM_pC_; -text: .text%__1cHTypePtrLdual_offset6kM_i_; -text: .text%__1cNMachIdealNodePoper_input_base6kM_I_; -text: .text%__1cSObjectSynchronizerOinflate_helper6FpnHoopDesc__pnNObjectMonitor__; -text: .text%__1cKciTypeFlowIblock_at6Mipn0AGJsrSet_n0AMCreateOption__pn0AFBlock__; -text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cPJavaCallWrapperHoops_do6MpnKOopClosure__v_; -text: .text%__1cFframeNoops_entry_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cXindIndexScaleOffsetOperFscale6kM_i_; -text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; -text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_; -text: .text%__1cNstoreImmBNodePoper_input_base6kM_I_; -text: .text%__1cNLoadRangeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cITypeFuncEmake6FpnIciMethod__pk0_; -text: .text%__1cKCompiledICOic_destination6kM_pC_; -text: .text%__1cTconvI2L_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cICmpUNodeDsub6kMpknEType_3_3_; -text: .text%__1cPSignatureStreamJas_symbol6MpnGThread__pnNsymbolOopDesc__; -text: .text%__1cRshrL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__; -text: .text%__1cKciTypeFlowLStateVector2t6Mp0_v_; -text: .text%__1cNCatchProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cOcompU_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCatchProjNodeHsize_of6kM_I_; -text: .text%__1cNCatchProjNodeEhash6kM_I_; -text: .text%__1cSvframeStreamCommonEnext6M_v_; -text: .text%__1cFKlassIsubklass6kM_p0_; -text: .text%__1cJimmI8OperIconstant6kM_l_; -text: .text%__1cILoadNodeHsize_of6kM_I_; -text: .text%__1cURethrowExceptionNodeNis_block_proj6kM_pknENode__; -text: .text%__1cKPerfStringKset_string6Mpkc_v_; -text: .text%__1cENodeLnonnull_req6kM_p0_; -text: .text%__1cQSystemDictionaryKfind_class6FiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cQUnique_Node_ListEpush6MpnENode__v_; -text: .text%__1cILoopNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitTadd_exception_state6MpnNSafePointNode__v_; -text: .text%__1cJloadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopRregister_new_node6MpnENode_2_v_; -text: .text%__1cQPSGenerationPoolImax_size6kM_L_; -text: .text%__1cQPSGenerationPoolNused_in_bytes6M_L_; -text: .text%__1cQPSGenerationPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cOMethodLivenessNwork_list_get6M_pn0AKBasicBlock__; -text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cHTypeAryFxmeet6kMpknEType__3_; -text: .text%__1cNstoreImmBNodeMideal_Opcode6kM_i_; -text: .text%__1cNaddI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cHMatcherKmatch_sfpt6MpnNSafePointNode__pnIMachNode__; -text: .text%__1cOcompP_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cMPhaseChaitinKFind_const6kMpknENode__I_; -text: .text%__1cMPhaseChaitinKFind_const6kMI_I_; -text: .text%__1cNinstanceKlassKinitialize6MpnGThread__v_; -text: .text%__1cRInterpretedRFrameEinit6M_v_; -text: .text%__1cHemit_cc6FrnKCodeBuffer_ii_v_; -text: .text%__1cNtestI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFframeMpd_gc_epilog6M_v_; -text: .text%__1cFframeLgc_epilogue6M_v_; -text: .text%__1cRframe_gc_prologue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cRframe_gc_epilogue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_prologue6M_v_; -text: .text%__1cOGenerateOopMapUreachable_basicblock6Fp0ipi_v_; -text: .text%__1cXvirtual_call_RelocationJfirst_oop6M_pC_; -text: .text%__1cXvirtual_call_RelocationJoop_limit6M_pC_; -text: .text%__1cMciMethodDataLhas_trap_at6MpnLProfileData_i_i_; -text: .text%__1cKciTypeFlowLStateVectorOpush_translate6MpnGciType__v_; -text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_; -text: .text%__1cMloadConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIimmPOperIconstant6kM_l_; -text: .text%__1cHGCCauseJto_string6Fn0AFCause__pkc_; -text: .text%__1cTleaPIdxScaleOffNodeErule6kM_I_; -text: .text%JVM_IsNaN; -text: .text%__1cJloadINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHCompileKTracePhase2T6M_v_; -text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_; -text: .text%__1cHMatcherPc_frame_pointer6kM_i_; -text: .text%__1cFBlockKsched_call6MrnHMatcher_rnLBlock_Array_IrnJNode_List_pipnMMachCallNode_rnJVectorSet__I_; -text: .text%__1cICallNodeJideal_reg6kM_I_; -text: .text%__1cOleaPIdxOffNodeErule6kM_I_; -text: .text%__1cOGenerateOopMapEppop6MpnNCellTypeState__v_; -text: .text%__1cSCallLeafDirectNodeMideal_Opcode6kM_i_; -text: .text%__1cOcompP_rRegNodeErule6kM_I_; -text: .text%__1cMany_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cScompI_rReg_immNodeErule6kM_I_; -text: .text%__1cLBoxLockNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cIGraphKitOset_all_memory6MpnENode__v_; -text: .text%__1cLRegisterMap2t6Mpk0_v_; -text: .text%__1cGvframe2t6MpknFframe_pknLRegisterMap_pnKJavaThread__v_; -text: .text%__1cKstoreCNodePoper_input_base6kM_I_; -text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_; -text: .text%__1cHi2sNodeErule6kM_I_; -text: .text%__1cIMulLNodeGOpcode6kM_i_; -text: .text%__1cKciTypeFlowGJsrSet2t6MpnFArena_i_v_; -text: .text%__1cIAddINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIMachOperNconstant_disp6kM_i_; -text: .text%__1cIMachOperFscale6kM_i_; -text: .text%__1cOMethodLivenessKBasicBlockJpropagate6Mp0_v_; -text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; -text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; -text: .text%__1cNloadKlassNodeErule6kM_I_; -text: .text%__1cKCompiledICKcached_oop6kM_pnHoopDesc__; -text: .text%__1cGOopMap2t6Mii_v_; -text: .text%__1cJOopMapSetKadd_gc_map6MipnGOopMap__v_; -text: .text%__1cNincI_rRegNodeErule6kM_I_; -text: .text%__1cYDebugInformationRecorderNadd_safepoint6MipnGOopMap__v_; -text: .text%__1cHCompileTProcess_OopMap_Node6MpnIMachNode_i_v_; -text: .text%__1cYDebugInformationRecorderKadd_oopmap6MipnGOopMap__v_; -text: .text%__1cHOopFlowNbuild_oop_map6MpnENode_ipnNPhaseRegAlloc_pi_pnGOopMap__; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNsubI_rRegNodeMcisc_operand6kM_i_; -text: .text%JVM_GetCPFieldClassNameUTF; -text: .text%__1cRaddI_rReg_immNodeErule6kM_I_; -text: .text%__1cRMachNullCheckNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cHRetNodeMideal_Opcode6kM_i_; -text: .text%__1cGvframeKnew_vframe6FpknFframe_pknLRegisterMap_pnKJavaThread__p0_; -text: .text%__1cNsubI_rRegNodeErule6kM_I_; -text: .text%__1cRaddP_rReg_immNodeErule6kM_I_; -text: .text%__1cJloadLNodePoper_input_base6kM_I_; -text: .text%__1cITypeLongFxdual6kM_pknEType__; -text: .text%__1cENodeJset_req_X6MIp0pnMPhaseIterGVN__v_; -text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cIAndLNodeGOpcode6kM_i_; -text: .text%__1cMindIndexOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cOtypeArrayKlassSallocate_permanent6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cOGenerateOopMapCpp6MpnNCellTypeState_2_v_; -text: .text%__1cHCompileSflatten_alias_type6kMpknHTypePtr__3_; -text: .text%__1cYCallStaticJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateW_sub_Op_CallStaticJava6MpknENode__v_; -text: .text%__1cIGraphKitbDtransfer_exceptions_into_jvms6M_pnIJVMState__; -text: .text%__1cLConvL2INodeGOpcode6kM_i_; -text: .text%__1cOcompI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQSystemDictionarybEresolve_instance_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNaddI_rRegNodeErule6kM_I_; -text: .text%__1cYCallStaticJavaDirectNodeFreloc6kM_i_; -text: .text%__1cRcmpFastUnlockNodeMideal_Opcode6kM_i_; -text: .text%__1cWstatic_stub_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cIGraphKitQset_saved_ex_oop6FpnNSafePointNode_pnENode__v_; -text: .text%__1cIGraphKitUmake_exception_state6MpnENode__pnNSafePointNode__; -text: .text%__1cJloadBNodeMideal_Opcode6kM_i_; -text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoolHandle_inJBytecodesECode_pnGThread__v_; -text: .text%__1cMLinkResolverMresolve_pool6FrnLKlassHandle_rnMsymbolHandle_42nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cGOopMapHcopy_to6MpC_v_; -text: .text%__1cVLoaderConstraintTableWfind_loader_constraint6MnMsymbolHandle_nGHandle__ppnVLoaderConstraintEntry__; -text: .text%__1cJTimeStampGupdate6M_v_; -text: .text%__1cFframeZinterpreter_frame_set_bcx6Ml_v_; -text: .text%__1cMCreateExNodeKmatch_edge6kMI_I_; -text: .text%__1cLPCTableNodeLbottom_type6kM_pknEType__; -text: .text%__1cLOptoRuntimeSuncommon_trap_Type6F_pknITypeFunc__; -text: .text%__1cIHaltNode2t6MpnENode_2_v_; -text: .text%__1cNSafePointNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKciTypeFlowLStateVectorJcopy_into6kMp1_v_; -text: .text%__1cXmembar_release_lockNodeMideal_Opcode6kM_i_; -text: .text%__1cMoutputStreamPupdate_position6MpkcL_v_; -text: .text%__1cMstringStreamFwrite6MpkcL_v_; -text: .text%__1cKciTypeFlowQadd_to_work_list6Mpn0AFBlock__v_; -text: .text%__1cKciTypeFlowKflow_block6Mpn0AFBlock_pn0ALStateVector_pn0AGJsrSet__v_; -text: .text%__1cKciTypeFlowFBlockKsuccessors6MpnQciBytecodeStream_pn0ALStateVector_pn0AGJsrSet__pnNGrowableArray4Cp1___; -text: .text%__1cKciTypeFlowOwork_list_next6M_pn0AFBlock__; -text: .text%__1cIPipelineXfunctional_unit_latency6kMIpk0_I_; -text: .text%__1cMPhaseIterGVNJtransform6MpnENode__2_; -text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNGrowableArray4CpnKciTypeFlowJJsrRecord__2t6MpnFArena_iirk2_v_; -text: .text%__1cNmodI_rRegNodeErule6kM_I_; -text: .text%__1cNGrowableArray4CpnPciInstanceKlass__2t6MpnFArena_iirk1_v_; -text: .text%__1cKciTypeFlowFBlockScompute_exceptions6M_v_; -text: .text%__1cYciExceptionHandlerStreamFcount6M_i_; -text: .text%__1cINodeHashJhash_find6MpknENode__p1_; -text: .text%__1cPThreadLocalNodeLbottom_type6kM_pknEType__; -text: .text%__1cKciTypeFlowPflow_successors6MpnNGrowableArray4Cpn0AFBlock___pn0ALStateVector__v_; -text: .text%__1cRsalI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cJloadFNodeErule6kM_I_; -text: .text%__1cSMemBarCPUOrderNodeGOpcode6kM_i_; -text: .text%__1cLklassVtableNput_method_at6MpnNmethodOopDesc_i_v_; -text: .text%__1cHi2sNodeMideal_Opcode6kM_i_; -text: .text%__1cKstoreCNodeMideal_Opcode6kM_i_; -text: .text%__1cRshrI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cNloadConI0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHCompileKalias_type6MpnHciField__pn0AJAliasType__; -text: .text%__1cLStringTableGintern6FnGHandle_pHipnGThread__pnHoopDesc__; -text: .text%__1cLStringTableLhash_string6FpHi_i_; -text: .text%__1cNloadKlassNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRScavengeRootsTaskEname6M_pc_; -text: .text%__1cRScavengeRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cPCountedLoopNodeGOpcode6kM_i_; -text: .text%__1cJloadSNodeMideal_Opcode6kM_i_; -text: .text%__1cIregFOperEtype6kM_pknEType__; -text: .text%__1cLLShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%JVM_GetCPMethodNameUTF; -text: .text%__1cLTypeInstPtrFxdual6kM_pknEType__; -text: .text%__1cIGraphKitOreplace_in_map6MpnENode_2_v_; -text: .text%__1cMPhaseChaitinLclone_projs6MpnFBlock_IpnENode_4rI_i_; -text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPoolHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cOMethodLivenessNwork_list_add6Mpn0AKBasicBlock__v_; -text: .text%__1cFParseFBlockNlocal_type_at6kMi_pknEType__; -text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; -text: .text%__1cHTypeIntFxdual6kM_pknEType__; -text: .text%__1cEUTF8Hstrrchr6FpWiW_1_; -text: .text%__1cQConstantIntValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cNLoadKlassNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJVectorSetFClear6M_v_; -text: .text%__1cMMergeMemNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_; -text: .text%__1cICodeHeapSallocated_capacity6kM_L_; -text: .text%__1cIMachOperEtype6kM_pknEType__; -text: .text%__1cLjmpConUNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cNCallGenerator2t6MpnIciMethod__v_; -text: .text%__1cLStatSamplerLsample_data6FpnMPerfDataList__v_; -text: .text%__1cPStatSamplerTaskEtask6M_v_; -text: .text%__1cMPeriodicTaskMtime_to_wait6F_L_; -text: .text%__1cMPeriodicTaskOreal_time_tick6FL_v_; -text: .text%__1cLStatSamplerOcollect_sample6F_v_; -text: .text%__1cJloadBNodePoper_input_base6kM_I_; -text: .text%__1cMVM_OperationPevaluation_mode6kM_n0AEMode__; -text: .text%__1cIGraphKit2t6M_v_; -text: .text%__1cOemit_d64_reloc6FrnKCodeBuffer_lnJrelocInfoJrelocType_i_v_; -text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; -text: .text%__1cIGraphKitNset_map_clone6MpnNSafePointNode__v_; -text: .text%__1cENodeHget_ptr6kM_l_; -text: .text%__1cFStateM_sub_Op_ConP6MpknENode__v_; -text: .text%__1cJloadPNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOcompU_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cQciBytecodeStreamWget_field_holder_index6M_i_; -text: .text%__1cQciBytecodeStreamZget_declared_field_holder6M_pnPciInstanceKlass__; -text: .text%__1cRinterpretedVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cNdecI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cJLoadINodeJideal_reg6kM_I_; -text: .text%__1cPindOffset32OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cHAddNodePadd_of_identity6kMpknEType_3_3_; -text: .text%__1cMFastLockNodeGOpcode6kM_i_; -text: .text%__1cLBuildCutout2T6M_v_; -text: .text%__1cLBuildCutout2t6MpnIGraphKit_pnENode_ff_v_; -text: .text%__1cTconstantPoolOopDescOstring_at_impl6FnSconstantPoolHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cICodeHeapIcapacity6kM_L_; -text: .text%__1cKMemoryPoolImax_size6kM_L_; -text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cMCodeHeapPoolNused_in_bytes6M_L_; -text: .text%__1cJcmpOpOperFccode6kM_i_; -text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_; -text: .text%__1cEUTF8Enext6FpkcpH_pc_; -text: .text%__1cOcompL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cbAPSEvacuateFollowersClosureHdo_void6M_v_; -text: .text%__1cHMulNodeEhash6kM_I_; -text: .text%__1cGRFrame2t6MnFframe_pnKJavaThread_p0_v_; -text: .text%__1cOGenerateOopMapLbb_mark_fct6Fp0ipi_v_; -text: .text%__1cScompU_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cNFingerprinterJdo_object6Mii_v_; -text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_; -text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cKjmpConNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMethodLivenessKBasicBlockQcompute_gen_kill6MpnIciMethod__v_; -text: .text%__1cOMethodLivenessKBasicBlock2t6Mp0ii_v_; -text: .text%__1cMloadConFNodeErule6kM_I_; -text: .text%__1cIMachOperIconstant6kM_l_; -text: .text%__1cPcheckCastPPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUEdenMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cYSurvivorMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cYSurvivorMutableSpacePoolImax_size6kM_L_; -text: .text%__1cUEdenMutableSpacePoolNused_in_bytes6M_L_; -text: .text%__1cUEdenMutableSpacePoolImax_size6kM_L_; -text: .text%__1cYSurvivorMutableSpacePoolNused_in_bytes6M_L_; -text: .text%__1cHConNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTemit_java_to_interp6FrnKCodeBuffer__v_; -text: .text%__1cKciTypeFlowGJsrSetNapply_control6Mp0pnQciBytecodeStream_pn0ALStateVector__v_; -text: .text%__1cRSignatureIteratorSskip_optional_size6M_v_; -text: .text%__1cRaddI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTCompareAndSwapLNodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_; -text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_; -text: .text%__1cPloadConUL32NodeMideal_Opcode6kM_i_; -text: .text%__1cEUTF8Ounicode_length6Fpkci_i_; -text: .text%__1cIciMethodRget_flow_analysis6M_pnKciTypeFlow__; -text: .text%__1cSmembar_acquireNodeMideal_Opcode6kM_i_; -text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__l_; -text: .text%__1cHoopDescSslow_identity_hash6M_l_; -text: .text%__1cKMemBarNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; -text: .text%__1cIMachNodeOpipeline_class6F_pknIPipeline__; -text: .text%__1cIMachNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRMachNullCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXindIndexScaleOffsetOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__; -text: .text%__1cETypeRget_typeflow_type6FpnGciType__pk0_; -text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_; -text: .text%__1cKstorePNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKReturnNodeKmatch_edge6kMI_I_; -text: .text%__1cIHaltNodeJideal_reg6kM_I_; -text: .text%__1cFStateM_sub_Op_Halt6MpknENode__v_; -text: .text%__1cWShouldNotReachHereNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKReturnNodeGOpcode6kM_i_; -text: .text%__1cJTypeTupleKmake_range6FpnLciSignature__pk0_; -text: .text%__1cKStoreLNodeGOpcode6kM_i_; -text: .text%__1cJTypeTupleLmake_domain6FpnPciInstanceKlass_pnLciSignature__pk0_; -text: .text%__1cMindirectOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMindirectOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cLProfileDataOtranslate_from6Mp0_v_; -text: .text%__1cKstorePNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKstoreINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSPSKeepAliveClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cNloadConI0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvI2L_reg_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cMWarmCallInfoKalways_hot6F_p0_; -text: .text%__1cNprefetchwNodeMideal_Opcode6kM_i_; -text: .text%__1cIAddINodeJideal_reg6kM_I_; -text: .text%__1cLBoxLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIProjNodeDcmp6kMrknENode__I_; -text: .text%__1cNCatchProjNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_GetCPFieldSignatureUTF; -text: .text%__1cHCompileFstart6kM_pnJStartNode__; -text: .text%__1cNmulL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cLPCTableNodeEhash6kM_I_; -text: .text%__1cIGraphKitZadd_exception_states_from6MpnIJVMState__v_; -text: .text%__1cQComputeCallStackHdo_void6M_v_; -text: .text%__1cNaddI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIciMethodTcall_profile_at_bci6Mi_nNciCallProfile__; -text: .text%__1cMindIndexOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMindIndexOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%jni_GetPrimitiveArrayCritical: jni.o; -text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; -text: .text%__1cIAddINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cLPCTableNodeHsize_of6kM_I_; -text: .text%__1cNincI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKJNIHandlesKmake_local6FpnGThread_pnHoopDesc__pnI_jobject__; -text: .text%__1cQciBytecodeStreamXget_method_holder_index6M_i_; -text: .text%__1cMorI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cIGraphKitWround_double_arguments6MpnIciMethod__v_; -text: .text%__1cFParseHdo_call6M_v_; -text: .text%__1cIGraphKitTround_double_result6MpnIciMethod__v_; -text: .text%__1cQciBytecodeStreambAget_declared_method_holder6M_pnHciKlass__; -text: .text%__1cFParseMprofile_call6MpnENode__v_; -text: .text%__1cScompP_mem_rRegNodePoper_input_base6kM_I_; -text: .text%__1cICodeHeapLheader_size6F_L_; -text: .text%__1cENodeLbottom_type6kM_pknEType__; -text: .text%__1cXindIndexScaleOffsetOperNconstant_disp6kM_i_; -text: .text%__1cSindIndexOffsetOperJnum_edges6kM_I_; -text: .text%__1cFKlassMnext_sibling6kM_p0_; -text: .text%__1cOGenerateOopMapNrestore_state6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapQnext_bb_start_pc6MpnKBasicBlock__i_; -text: .text%__1cOGenerateOopMapJinterp_bb6MpnKBasicBlock__v_; -text: .text%__1cKciTypeFlowLStateVectorStype_meet_internal6FpnGciType_3p0_3_; -text: .text%__1cRcmpFastUnlockNodeErule6kM_I_; -text: .text%__1cIBoolNodeHsize_of6kM_I_; -text: .text%__1cLLShiftINodeLbottom_type6kM_pknEType__; -text: .text%jni_DeleteLocalRef: jni.o; -text: .text%__1cJloadSNodePoper_input_base6kM_I_; -text: .text%__1cOcompI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%jni_SetIntField: jni.o; -text: .text%__1cMURShiftLNodeLbottom_type6kM_pknEType__; -text: .text%__1cNtestI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nGHandle__; -text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cLStringTableJbasic_add6MinGHandle_pHiIpnGThread__pnHoopDesc__; -text: .text%__1cNprefetchwNodePoper_input_base6kM_I_; -text: .text%__1cTCreateExceptionNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cHMulNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cVExceptionHandlerTableJadd_entry6MnRHandlerTableEntry__v_; -text: .text%__1cPsalI_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%__1cRaddP_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQComputeCallStackJdo_object6Mii_v_; -text: .text%__1cTconvL2I_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cKPSYoungGenNused_in_bytes6kM_L_; -text: .text%__1cOGenerateOopMapHset_var6MinNCellTypeState__v_; -text: .text%__1cGIfNodeHsize_of6kM_I_; -text: .text%__1cPciInstanceKlassFsuper6M_p0_; -text: .text%__1cOcompL_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cLLShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cScompI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMMergeMemNodeJideal_reg6kM_I_; -text: .text%__1cTleaPIdxScaleOffNodeMideal_Opcode6kM_i_; -text: .text%__1cTleaPIdxScaleOffNodePoper_input_base6kM_I_; -text: .text%__1cKMemBarNodeEhash6kM_I_; -text: .text%__1cOcompP_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNsubI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIXorINodeGOpcode6kM_i_; -text: .text%__1cMoutputStreamDput6Mc_v_; -text: .text%__1cPindOffset32OperNbase_position6kM_i_; -text: .text%__1cPindOffset32OperNconstant_disp6kM_i_; -text: .text%__1cOcompU_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLRShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cZPhaseConservativeCoalesceKupdate_ifg6MIIpnIIndexSet_2_v_; -text: .text%__1cZPhaseConservativeCoalesceMunion_helper6MpnENode_2II222pnFBlock_I_v_; -text: .text%__1cIIndexSetEswap6Mp0_v_; -text: .text%__1cOPhaseIdealLoopIsink_use6MpnENode_2_v_; -text: .text%__1cRshrL_rReg_immNodeErule6kM_I_; -text: .text%__1cKInlineTreeMok_to_inline6MpnIciMethod_pnIJVMState_rnNciCallProfile_pnMWarmCallInfo__8_; -text: .text%__1cScompU_rReg_immNodeErule6kM_I_; -text: .text%__1cKjmpDirNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cKjmpDirNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMindirectOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cILoadNodeDcmp6kMrknENode__I_; -text: .text%__1cLTypeInstPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cIGraphKitHjava_bc6kM_nJBytecodesECode__; -text: .text%__1cRAbstractAssemblerEbind6MrnFLabel__v_; -text: .text%__1cNloadConL0NodeErule6kM_I_; -text: .text%__1cJStoreNodeSIdeal_masked_input6MpnIPhaseGVN_I_pnENode__; -text: .text%__1cIGraphKitNbuiltin_throw6MnODeoptimizationLDeoptReason_pnENode__v_; -text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cMindIndexOperFscale6kM_i_; -text: .text%__1cScompP_mem_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; -text: .text%__1cRandI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cMMachProjNodeHsize_of6kM_I_; -text: .text%__1cJStoreNodeZIdeal_sign_extended_input6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cTconvF2D_reg_memNodeErule6kM_I_; -text: .text%__1cPindOffset32OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFStateM_sub_Op_CmpP6MpknENode__v_; -text: .text%__1cPciInstanceKlassUget_canonical_holder6Mi_p0_; -text: .text%__1cMloadConLNodeMideal_Opcode6kM_i_; -text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_; -text: .text%__1cIciSymbolEmake6Fpkc_p0_; -text: .text%__1cIciSymbolJmake_impl6Fpkc_p0_; -text: .text%__1cKimmL32OperIconstant6kM_l_; -text: .text%__1cKimmL32OperJnum_edges6kM_I_; -text: .text%__1cMMonitorValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cLBoxLockNodeKstack_slot6FpnENode__i_; -text: .text%__1cIBoolNodeDcmp6kMrknENode__I_; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_; -text: .text%__1cKDataLayoutKinitialize6MCHi_v_; -text: .text%__1cJloadLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFframebHnext_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; -text: .text%__1cPshrI_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%__1cOcompL_rRegNodeErule6kM_I_; -text: .text%__1cNGrowableArray4Cpv_Praw_at_put_grow6Mirk03_v_; -text: .text%__1cNGrowableArray4Cl_Praw_at_put_grow6Mirkl2_v_; -text: .text%__1cISubINodeLbottom_type6kM_pknEType__; -text: .text%__1cMtlsLoadPNodeLbottom_type6kM_pknEType__; -text: .text%__1cJAssemblerEmovq6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cNloadRangeNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGRFrameMset_distance6Mi_v_; -text: .text%__1cFframeLreal_sender6kMpnLRegisterMap__0_; -text: .text%__1cGRFrameGcaller6M_p0_; -text: .text%__1cTStackWalkCompPolicyIsenderOf6MpnGRFrame_pnNGrowableArray4C2___2_; -text: .text%__1cGRFrameKnew_RFrame6FnFframe_pnKJavaThread_p0_4_; -text: .text%__1cKstoreLNodePoper_input_base6kM_I_; -text: .text%__1cTconstantPoolOopDescMklass_at_put6MipnMklassOopDesc__v_; -text: .text%__1cNFingerprinterGdo_int6M_v_; -text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cRshrL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHPhiNodeEmake6FpnENode_2_p0_; -text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cIciObjectFklass6M_pnHciKlass__; -text: .text%__1cNloadConP0NodeMideal_Opcode6kM_i_; -text: .text%__1cOPhaseIdealLoopOsplit_thru_phi6MpnENode_2i_2_; -text: .text%__1cLklassVtableIindex_of6kMpnNmethodOopDesc_i_i_; -text: .text%__1cKEntryPointFentry6kMnITosState__pC_; -text: .text%__1cKJavaThreadJframes_do6MpFpnFframe_pknLRegisterMap__v_v_; -text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_; -text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cFStateM_sub_Op_RegL6MpknENode__v_; -text: .text%__1cNdecI_rRegNodeErule6kM_I_; -text: .text%__1cKjmpConNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcmpFastLockNodeMideal_Opcode6kM_i_; -text: .text%__1cKjmpConNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fl_v_; -text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_; -text: .text%__1cCosRcurrent_thread_id6F_l_; -text: .text%__1cKciTypeFlowLStateVectorMdo_getstatic6MpnQciBytecodeStream__v_; -text: .text%__1cNSignatureInfoHdo_bool6M_v_; -text: .text%__1cLLShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKstoreLNodeMideal_Opcode6kM_i_; -text: .text%__1cHPhiNodeMslice_memory6kMpknHTypePtr__p0_; -text: .text%__1cPcmpFastLockNodePoper_input_base6kM_I_; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__; -text: .text%__1cNPhaseRegAllocKoffset2reg6kMi_i_; -text: .text%__1cQjmpCon_shortNodeMideal_Opcode6kM_i_; -text: .text%__1cQjmpCon_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_pnGRFrame__v_; -text: .text%__1cTconvI2L_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNGrowableArray4CI_Praw_at_put_grow6MirkI2_v_; -text: .text%__1cXmembar_acquire_lockNodeMideal_Opcode6kM_i_; -text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cXindIndexScaleOffsetOperOindex_position6kM_i_; -text: .text%__1cXindIndexScaleOffsetOperNbase_position6kM_i_; -text: .text%__1cIGraphKitJpush_node6MnJBasicType_pnENode__v_; -text: .text%__1cSconstMethodOopDescbEchecked_exceptions_length_addr6kM_pH_; -text: .text%__1cPThreadLocalNodeGOpcode6kM_i_; -text: .text%__1cRsubI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; -text: .text%__1cCosXthread_local_storage_at6Fi_pv_; -text: .text%__1cIAddPNodeJideal_reg6kM_I_; -text: .text%__1cRaddI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cFParseNthrow_to_exit6MpnNSafePointNode__v_; -text: .text%__1cQCallLeafNoFPNodeGOpcode6kM_i_; -text: .text%__1cKTypeRawPtrHget_con6kM_l_; -text: .text%__1cOClearArrayNodeGOpcode6kM_i_; -text: .text%__1cFStateM_sub_Op_CmpI6MpknENode__v_; -text: .text%__1cJimmP0OperEtype6kM_pknEType__; -text: .text%__1cNloadConP0NodeLbottom_type6kM_pknEType__; -text: .text%__1cPloadConUL32NodeLbottom_type6kM_pknEType__; -text: .text%__1cNloadConI0NodeHsize_of6kM_I_; -text: .text%JVM_handle_solaris_signal; -text: .text%signalHandler; -text: .text%__1cQJNI_FastGetFieldQfind_slowcase_pc6FpC_1_; -text: .text%__1cFStateN_sub_Op_LoadP6MpknENode__v_; -text: .text%__1cISubINodeDsub6kMpknEType_3_3_; -text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; -text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cUPSGenerationCountersKupdate_all6M_v_; -text: .text%__1cTStackWalkCompPolicyMshouldInline6FnMmethodHandle_fi_pkc_; -text: .text%__1cFArenaRdestruct_contents6M_v_; -text: .text%__1cXPhaseAggressiveCoalesceYinsert_copy_with_overlap6MpnFBlock_pnENode_II_v_; -text: .text%__1cULinearLeastSquareFitGupdate6Mdd_v_; -text: .text%__1cENodeIadd_prec6Mp0_v_; -text: .text%__1cIMulINodeGOpcode6kM_i_; -text: .text%__1cLciSignature2t6MpnHciKlass_pnIciSymbol__v_; -text: .text%__1cNGrowableArray4CpnGciType__2t6MpnFArena_iirk1_v_; -text: .text%__1cIciMethod2t6MnMmethodHandle__v_; -text: .text%__1cJAssemblerDjcc6Mn0AJCondition_rnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cMelapsedTimerHseconds6kM_d_; -text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; -text: .text%__1cJArrayDataKcell_count6M_i_; -text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%__1cKType_ArrayEgrow6MI_v_; -text: .text%JVM_Write; -text: .text%__1cDhpiFwrite6FipkvI_L_; -text: .text%__1cSindIndexOffsetOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; -text: .text%__1cIAddLNodeLbottom_type6kM_pknEType__; -text: .text%__1cKMemBarNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cIParmNodeJideal_reg6kM_I_; -text: .text%__1cVAdaptivePaddedAverageGsample6Mf_v_; -text: .text%__1cMtlsLoadPNodeMideal_Opcode6kM_i_; -text: .text%__1cRshrI_rReg_immNodeErule6kM_I_; -text: .text%__1cJcmpOpOperGnegate6M_v_; -text: .text%__1cHTypeAryEmake6FpknEType_pknHTypeInt__pk0_; -text: .text%__1cPCheckCastPPNodeJideal_reg6kM_I_; -text: .text%__1cJAssemblerEmovq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cUSafepointSynchronizebDhandle_polling_page_exception6FpnKJavaThread__v_; -text: .text%__1cUThreadSafepointStatebDhandle_polling_page_exception6M_v_; -text: .text%__1cLjmpConUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNandL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cKcmpOpUOperFccode6kM_i_; -text: .text%__1cIPipelinePoperand_latency6kMIpk0_I_; -text: .text%__1cWCallLeafNoFPDirectNodeMideal_Opcode6kM_i_; -text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cURethrowExceptionNodeMideal_Opcode6kM_i_; -text: .text%__1cJloadPNodeFreloc6kM_i_; -text: .text%__1cTno_rax_rbx_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKjmpConNodeGnegate6M_v_; -text: .text%__1cMindirectOperFscale6kM_i_; -text: .text%__1cRsubI_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; -text: .text%__1cQComputeCallStackGdo_int6M_v_; -text: .text%__1cNloadRangeNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNtestP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadRangeNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPCheckCastPPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQjmpDir_shortNodeMideal_Opcode6kM_i_; -text: .text%__1cQjmpDir_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKciTypeFlowLStateVectorLdo_getfield6MpnQciBytecodeStream__v_; -text: .text%__1cNaddI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cScompP_mem_rRegNodeErule6kM_I_; -text: .text%__1cPSignatureStreamRas_symbol_or_null6M_pnNsymbolOopDesc__; -text: .text%__1cNSafePointNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJloadSNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOjmpLoopEndNodeMideal_Opcode6kM_i_; -text: .text%__1cKCastPPNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cOGenerateOopMapKcopy_state6MpnNCellTypeState_2_v_; -text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; -text: .text%__1cQVMOperationQdDueueSqueue_remove_front6Mi_pnMVM_Operation__; -text: .text%__1cOcompI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVCompressedWriteStreamEgrow6M_v_; -text: .text%JVM_RawMonitorEnter; -text: .text%JVM_RawMonitorExit; -text: .text%__1cHUNICODELutf8_length6FpHi_i_; -text: .text%__1cRaddP_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cPCountedLoopNodeDphi6kM_pnENode__; -text: .text%__1cLBoxLockNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSmembar_releaseNodeMideal_Opcode6kM_i_; -text: .text%__1cFParseOreturn_current6MpnENode__v_; -text: .text%__1cLConvI2LNodeJideal_reg6kM_I_; -text: .text%__1cJStartNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cMorI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cMloadConPNodeFreloc6kM_i_; -text: .text%__1cSPSPromotionManagerFreset6M_v_; -text: .text%__1cSPSPromotionManagerKflush_labs6M_v_; -text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; -text: .text%__1cNincI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cTJvmtiEventCollectorYunset_jvmti_thread_state6M_v_; -text: .text%__1cLRShiftINodeLbottom_type6kM_pknEType__; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; -text: .text%__1cJTypeTupleFxdual6kM_pknEType__; -text: .text%__1cOcompP_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cHi2sNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_2_v_; -text: .text%__1cRciVirtualCallDataOtranslate_from6MpnLProfileData__v_; -text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: classFileParser.o; -text: .text%__1cKstoreCNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNloadKlassNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJMultiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMURShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRcmpFastUnlockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHSubNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLRethrowNodeGOpcode6kM_i_; -text: .text%__1cFParseQcreate_entry_map6M_pnNSafePointNode__; -text: .text%__1cFParseIdo_exits6M_v_; -text: .text%__1cFParseLbuild_exits6M_v_; -text: .text%__1cFParseLinit_blocks6M_v_; -text: .text%__1cFParse2t6MpnIJVMState_pnIciMethod_f_v_; -text: .text%__1cFParseNdo_all_blocks6M_v_; -text: .text%__1cOParseGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cFArenaEused6kM_L_; -text: .text%__1cRandI_rReg_immNodeErule6kM_I_; -text: .text%jni_GetSuperclass: jni.o; -text: .text%__1cPno_rax_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFStateM_sub_Op_AddI6MpknENode__v_; -text: .text%__1cFParsePdo_method_entry6M_v_; -text: .text%__1cNCallGeneratorKfor_inline6FpnIciMethod_f_p0_; -text: .text%__1cLOpaque1NodeGOpcode6kM_i_; -text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; -text: .text%__1cPJavaCallWrapper2t6MnMmethodHandle_nGHandle_pnJJavaValue_pnGThread__v_; -text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; -text: .text%__1cRJavaCallArgumentsKparameters6M_pl_; -text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cPJavaCallWrapper2T6M_v_; -text: .text%__1cVPreserveExceptionMark2T6M_v_; -text: .text%__1cVPreserveExceptionMark2t6MrpnGThread__v_; -text: .text%__1cMrax_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cITypeFuncFxdual6kM_pknEType__; -text: .text%__1cLRShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJloadPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTconstantPoolOopDescbDresolve_string_constants_impl6FnSconstantPoolHandle_pnGThread__v_; -text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; -text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cMLinkResolverXresolve_klass_no_update6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cISubINodeGadd_id6kM_pknEType__; -text: .text%__1cNsubI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cGciType2t6MnLKlassHandle__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle__v_; -text: .text%__1cJEventMark2t6MpkcE_v_; -text: .text%__1cNaddI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cQComputeCallStackHdo_long6M_v_; -text: .text%__1cMindirectOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cRaddI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; -text: .text%__1cQVMOperationQdDueueNqueue_oops_do6MipnKOopClosure__v_; -text: .text%__1cMCreateExNodeJideal_reg6kM_I_; -text: .text%__1cRmethodDataOopDescLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cNSCMemProjNodeGOpcode6kM_i_; -text: .text%__1cNSignatureInfoHdo_long6M_v_; -text: .text%__1cMCreateExNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRinterpretedVFrameDbci6kM_i_; -text: .text%__1cKInlineTreeYcompute_callee_frequency6kMi_f_; -text: .text%__1cKInlineTreebCbuild_inline_tree_for_callee6MpnIciMethod_pnIJVMState_i_p0_; -text: .text%__1cRinterpretedVFrameDbcp6kM_pC_; -text: .text%__1cRInterpretedRFrameKtop_vframe6kM_pnKjavaVFrame__; -text: .text%__1cIciMethodbBinterpreter_call_site_count6Mi_i_; -text: .text%__1cLRShiftLNodeGOpcode6kM_i_; -text: .text%__1cPsarI_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%__1cNsubI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cOMethodLivenessKBasicBlockIload_two6Mi_v_; -text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__; -text: .text%__1cNmulL_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_; -text: .text%__1cNCatchProjNodeDcmp6kMrknENode__I_; -text: .text%__1cTcompareAndSwapLNodePoper_input_base6kM_I_; -text: .text%__1cMloadConINodeHsize_of6kM_I_; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_i_v_; -text: .text%__1cNstoreImmINodeMideal_Opcode6kM_i_; -text: .text%__1cHOrINodeLbottom_type6kM_pknEType__; -text: .text%__1cPstoreImmI16NodeMideal_Opcode6kM_i_; -text: .text%__1cMindIndexOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cFStateQ_sub_Op_CreateEx6MpknENode__v_; -text: .text%__1cRshrL_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cLjmpConUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLjmpConUNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cRaddI_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; -text: .text%__1cHCompileXin_preserve_stack_slots6M_I_; -text: .text%__1cNdecI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cTtypeArrayKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cRalign_code_offset6Fi_I_; -text: .text%__1cMURShiftINodeLbottom_type6kM_pknEType__; -text: .text%__1cMorI_rRegNodeErule6kM_I_; -text: .text%__1cMLinkResolverVresolve_invokespecial6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cHMulNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cTconvL2I_reg_regNodeErule6kM_I_; -text: .text%__1cRmethodDataOopDescJbci_to_dp6Mi_pC_; -text: .text%__1cIAddLNodeGadd_id6kM_pknEType__; -text: .text%__1cRaddL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cFTypeFEhash6kM_i_; -text: .text%__1cPsalI_rReg_1NodeErule6kM_I_; -text: .text%__1cIJVMState2t6Mi_v_; -text: .text%__1cScompU_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcompP_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTCreateExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMURShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKRegionNodeOhas_unique_phi6kM_pnHPhiNode__; -text: .text%__1cIMulINodeLbottom_type6kM_pknEType__; -text: .text%__1cKTypeAryPtrFxdual6kM_pknEType__; -text: .text%__1cVExceptionHandlerTableMadd_subtable6MipnNGrowableArray4Cl__22_v_; -text: .text%__1cNandL_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cNObjectMonitorHis_busy6kM_l_; -text: .text%__1cEDict2t6MpFpkv2_ipF2_i_v_; -text: .text%__1cJAssemblerElock6M_v_; -text: .text%__1cJAssemblerIcmpxchgq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cSsafePoint_pollNodePoper_input_base6kM_I_; -text: .text%__1cLRuntimeStubbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cPshrI_rReg_1NodeErule6kM_I_; -text: .text%__1cRmethodDataOopDescKmileage_of6FpnNmethodOopDesc__i_; -text: .text%__1cIPSOldGenPupdate_counters6M_v_; -text: .text%__1cIregDOperEtype6kM_pknEType__; -text: .text%__1cTStackWalkCompPolicyPshouldNotInline6FnMmethodHandle__pkc_; -text: .text%__1cPcmpFastLockNodeErule6kM_I_; -text: .text%__1cFArena2t6M_v_; -text: .text%__1cSCallLeafDirectNodePoper_input_base6kM_I_; -text: .text%__1cQleaPIdxScaleNodeMideal_Opcode6kM_i_; -text: .text%__1cJcmpOpOperFequal6kM_i_; -text: .text%__1cScompI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_IsSameObject: jni.o; -text: .text%__1cIGraphKitYcombine_exception_states6MpnNSafePointNode_2_v_; -text: .text%__1cJloadBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulLNodeLbottom_type6kM_pknEType__; -text: .text%__1cONMethodSweeperPprocess_nmethod6FpnHnmethod__v_; -text: .text%__1cRaddP_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMrep_stosNodePoper_input_base6kM_I_; -text: .text%__1cRsalI_rReg_immNodeErule6kM_I_; -text: .text%__1cJFieldTypeSskip_optional_size6FpnNsymbolOopDesc_pi_v_; -text: .text%__1cMloadConPNodeHsize_of6kM_I_; -text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; -text: .text%__1cIGraphKitTcreate_and_xform_if6MpnENode_2ff_pnGIfNode__; -text: .text%__1cRaddI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; -text: .text%__1cSconstMethodOopDescZchecked_exceptions_length6kM_i_; -text: .text%__1cNIdealLoopTreeIset_nest6MI_i_; -text: .text%__1cNIdealLoopTreeMcounted_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cFStateM_sub_Op_CmpU6MpknENode__v_; -text: .text%__1cLRethrowNodeKmatch_edge6kMI_I_; -text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; -text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cKTypeRawPtrFxmeet6kMpknEType__3_; -text: .text%__1cJFieldTypeOget_array_info6FpnNsymbolOopDesc_pip2pnGThread__nJBasicType__; -text: .text%__1cNincI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIciObject2t6M_v_; -text: .text%__1cPstoreImmI16NodePoper_input_base6kM_I_; -text: .text%__1cPClassFileParserbCverify_legal_class_modifiers6MipnGThread__v_; -text: .text%__1cPciObjectFactoryUget_empty_methodData6M_pnMciMethodData__; -text: .text%__1cMciMethodData2t6M_v_; -text: .text%__1cNstoreImmBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFTypeDEhash6kM_i_; -text: .text%__1cPloadConUL32NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOpaque1NodeEhash6kM_I_; -text: .text%JVM_GetMethodIxModifiers; -text: .text%__1cJloadBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; -text: .text%__1cTCallDynamicJavaNodeGOpcode6kM_i_; -text: .text%__1cJloadINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIHaltNodeEhash6kM_I_; -text: .text%__1cNstoreImmINodePoper_input_base6kM_I_; -text: .text%__1cLAccessFlagsPatomic_set_bits6Mi_v_; -text: .text%__1cNinstanceKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cOcompL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQVMOperationQdDueueLremove_next6M_pnMVM_Operation__; -text: .text%__1cRsubI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFStateP_sub_Op_LShiftL6MpknENode__v_; -text: .text%__1cLjmpConUNodeGnegate6M_v_; -text: .text%__1cKcmpOpUOperGnegate6M_v_; -text: .text%__1cLGCTaskQdDueueKinitialize6M_v_; -text: .text%__1cJStealTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cTOldToYoungRootsTaskEname6M_pc_; -text: .text%__1cTOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cNGCTaskManagerMnote_release6MI_v_; -text: .text%__1cJStealTaskEname6M_pc_; -text: .text%__1cSCardTableExtensionbAscavenge_contents_parallel6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager_I_v_; -text: .text%__1cQciBytecodeStreamMget_constant6M_nKciConstant__; -text: .text%__1cMrep_stosNodeMideal_Opcode6kM_i_; -text: .text%__1cKJavaThreadLgc_epilogue6M_v_; -text: .text%__1cKJavaThreadLgc_prologue6M_v_; -text: .text%__1cTsize_java_to_interp6F_I_; -text: .text%__1cUreloc_java_to_interp6F_I_; -text: .text%__1cQinit_input_masks6FIrnHRegMask_1_p0_: matcher.o; -text: .text%__1cRitableMethodEntryKinitialize6MpnNmethodOopDesc__v_; -text: .text%__1cTcompareAndSwapLNodeMideal_Opcode6kM_i_; -text: .text%__1cIGraphKitbBset_arguments_for_java_call6MpnMCallJavaNode__v_; -text: .text%__1cNCallGeneratorCtf6kM_pknITypeFunc__; -text: .text%__1cMloadConLNodeLbottom_type6kM_pknEType__; -text: .text%__1cNaddL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cFStateO_sub_Op_StoreI6MpknENode__v_; -text: .text%__1cQleaPIdxScaleNodePoper_input_base6kM_I_; -text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_; -text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_; -text: .text%__1cNloadConP0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; -text: .text%__1cRsalI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMindIndexOperNbase_position6kM_i_; -text: .text%__1cMindIndexOperOindex_position6kM_i_; -text: .text%__1cMindIndexOperNconstant_disp6kM_i_; -text: .text%__1cKstoreINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTDirectCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cMWarmCallInfoLalways_cold6F_p0_; -text: .text%__1cFframeIpatch_pc6MpnGThread_pC_v_; -text: .text%JVM_IsInterface; -text: .text%__1cFKlassQset_next_sibling6MpnMklassOopDesc__v_; -text: .text%__1cRshrL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjmpCon_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjmpCon_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cTStackWalkCompPolicyVfindTopInlinableFrame6MpnNGrowableArray4CpnGRFrame____2_; -text: .text%__1cKJavaThreadQlast_java_vframe6MpnLRegisterMap__pnKjavaVFrame__; -text: .text%__1cTStackWalkCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; -text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_nMmethodHandle__v_; -text: .text%__1cRMachNullCheckNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsarI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cKstorePNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cWImplicitExceptionTableGappend6MII_v_; -text: .text%__1cHUNICODEHas_utf86FpHi_pc_; -text: .text%__1cIMinINodeGOpcode6kM_i_; -text: .text%__1cFArena2T6M_v_; -text: .text%__1cKmethodOperJnum_edges6kM_I_; -text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; -text: .text%__1cISubLNodeGOpcode6kM_i_; -text: .text%__1cFStateO_sub_Op_StoreP6MpknENode__v_; -text: .text%__1cRshrI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsarL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cNstoreImmBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKstorePNodeFreloc6kM_i_; -text: .text%__1cYCallStaticJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQleaPIdxScaleNodeErule6kM_I_; -text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; -text: .text%__1cIGraphKitTuse_exception_state6MpnNSafePointNode__pnENode__; -text: .text%__1cIGraphKitSclear_saved_ex_oop6FpnNSafePointNode__pnENode__; -text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cKcmpOpUOperNgreater_equal6kM_i_; -text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; -text: .text%__1cJAssemblerFtestq6MpnMRegisterImpl_2_v_; -text: .text%__1cJCMoveNodeLis_cmove_id6FpnOPhaseTransform_pnENode_44pnIBoolNode__4_; -text: .text%__1cZresource_reallocate_bytes6FpcLL_0_; -text: .text%__1cKstoreINodeFreloc6kM_i_; -text: .text%__1cIDivINodeGOpcode6kM_i_; -text: .text%__1cPshrI_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMorI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFParseQarray_addressing6MnJBasicType_ippknEType__pnENode__; -text: .text%__1cPsalI_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHciField2t6MpnPfieldDescriptor__v_; -text: .text%__1cIModINodeGOpcode6kM_i_; -text: .text%__1cNmulL_rRegNodeErule6kM_I_; -text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; -text: .text%__1cLConvL2INodeLbottom_type6kM_pknEType__; -text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cScompP_mem_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreBNodePoper_input_base6kM_I_; -text: .text%__1cRandI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCallLeafDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cUDebugInfoWriteStreamMwrite_handle6MpnI_jobject__v_; -text: .text%__1cNaddI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvL2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitPpush_pair_local6Mi_v_; -text: .text%__1cOjmpLoopEndNodePoper_input_base6kM_I_; -text: .text%__1cMURShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cHCompileSregister_intrinsic6MpnNCallGenerator__v_; -text: .text%__1cIAddLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNloadKlassNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQjava_lang_StringRas_unicode_string6FpnHoopDesc_ri_pH_; -text: .text%__1cHCmpNodeGadd_id6kM_pknEType__; -text: .text%JVM_InternString; -text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_; -text: .text%__1cFKlassQup_cast_abstract6M_p0_; -text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cSCountedLoopEndNodeKstride_con6kM_i_; -text: .text%__1cPCheckCastPPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; -text: .text%__1cLOpaque1NodeLbottom_type6kM_pknEType__; -text: .text%__1cOPhaseIdealLoopRsplit_thru_region6MpnENode_2_2_; -text: .text%__1cFciEnvRfind_system_klass6MpnIciSymbol__pnHciKlass__; -text: .text%__1cNandL_rRegNodeErule6kM_I_; -text: .text%__1cQjmpDir_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cQjmpDir_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLBlock_ArrayEgrow6MI_v_; -text: .text%__1cMPhaseChaitinVfind_base_for_derived6MppnENode_2rI_2_; -text: .text%__1cSindIndexOffsetOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cSindIndexOffsetOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cNGrowableArray4CI_Egrow6Mi_v_; -text: .text%__1cFStateP_sub_Op_ConvI2L6MpknENode__v_; -text: .text%__1cNsubI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRcmpFastUnlockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcheckCastPPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPciInstanceKlassLfind_method6MpnIciSymbol_2_pnIciMethod__; -text: .text%__1cILoopNodeHsize_of6kM_I_; -text: .text%__1cSindIndexOffsetOperFscale6kM_i_; -text: .text%__1cLBoxLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_; -text: .text%__1cKstoreBNodeMideal_Opcode6kM_i_; -text: .text%__1cHi2bNodeErule6kM_I_; -text: .text%__1cFStateN_sub_Op_LoadI6MpknENode__v_; -text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__; -text: .text%__1cICmpLNodeDsub6kMpknEType_3_3_; -text: .text%__1cRjmpConU_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRjmpConU_shortNodeMideal_Opcode6kM_i_; -text: .text%__1cOClearArrayNodeKmatch_edge6kMI_I_; -text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; -text: .text%__1cXmembar_release_lockNodeLbottom_type6kM_pknEType__; -text: .text%__1cPThreadLocalNodeJideal_reg6kM_I_; -text: .text%__1cTleaPIdxScaleOffNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPsarI_rReg_1NodeErule6kM_I_; -text: .text%__1cOPhaseIdealLoopPis_counted_loop6MpnENode_pnNIdealLoopTree__2_; -text: .text%__1cMloadConDNodeErule6kM_I_; -text: .text%__1cHCompileQsync_stack_slots6kM_i_; -text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; -text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNdecI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cJScopeDescJstream_at6kMi_pnTDebugInfoReadStream__; -text: .text%__1cVjava_lang_ClassLoaderGparent6FpnHoopDesc__2_; -text: .text%__1cIPhaseIFGEinit6MI_v_; -text: .text%__1cJPhaseLiveHcompute6MI_v_; -text: .text%JVM_GetCPClassNameUTF; -text: .text%__1cMLinkResolverUresolve_invokestatic6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cHRetNodePoper_input_base6kM_I_; -text: .text%jni_GetStringLength: jni.o; -text: .text%__1cPloadConUL32NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOFastUnlockNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__; -text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cNaddL_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cOcompL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cFStateR_sub_Op_LoadRange6MpknENode__v_; -text: .text%__1cOcompiledVFrame2t6MpknFframe_pknLRegisterMap_pnKJavaThread_pnJScopeDesc__v_; -text: .text%__1cOcompU_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNsubL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cJMarkSweepMfollow_stack6F_v_; -text: .text%__1cNloadRangeNodeFreloc6kM_i_; -text: .text%__1cTcompareAndSwapLNodeErule6kM_I_; -text: .text%__1cZCallDynamicJavaDirectNodeMideal_Opcode6kM_i_; -text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cNxorI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cKciTypeFlow2t6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_; -text: .text%__1cKciTypeFlowKmap_blocks6M_v_; -text: .text%__1cKciTypeFlowHdo_flow6M_v_; -text: .text%__1cKciTypeFlowPget_start_state6M_pkn0ALStateVector__; -text: .text%__1cKciTypeFlowKflow_types6M_v_; -text: .text%__1cIAndINodeGadd_id6kM_pknEType__; -text: .text%__1cMURShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKPSYoungGenRcapacity_in_bytes6kM_L_; -text: .text%__1cYciExceptionHandlerStreamPcount_remaining6M_i_; -text: .text%__1cFParseXcatch_inline_exceptions6MpnNSafePointNode__v_; -text: .text%__1cMciMethodDataJload_data6M_v_; -text: .text%__1cIciMethodJload_code6M_v_; -text: .text%__1cJCmpL3NodeGOpcode6kM_i_; -text: .text%__1cIAndINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cUParallelScavengeHeapEused6kM_L_; -text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; -text: .text%__1cMTypeKlassPtrFxdual6kM_pknEType__; -text: .text%__1cIMaxINodeGOpcode6kM_i_; -text: .text%__1cOPhaseTransform2t6MnFPhaseLPhaseNumber__v_; -text: .text%__1cQSystemDictionarybAcompute_loader_lock_object6FnGHandle_pnGThread__1_; -text: .text%__1cIMulLNodeGadd_id6kM_pknEType__; -text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; -text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; -text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; -text: .text%__1cQVMOperationQdDueueHoops_do6MpnKOopClosure__v_; -text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cOJNIHandleBlockMweak_oops_do6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; -text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_; -text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; -text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollectorXoops_do_for_all_threads6FpnKOopClosure__v_; -text: .text%__1cRindIndexScaleOperJnum_edges6kM_I_; -text: .text%__1cRindIndexScaleOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNSignatureInfoJdo_double6M_v_; -text: .text%__1cJAssemblerEmovl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cRsalI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cMrdx_RegIOperEtype6kM_pknEType__; -text: .text%__1cMciMethodData2t6MnQmethodDataHandle__v_; -text: .text%__1cRshrI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%jni_ExceptionOccurred: jni.o; -text: .text%jni_SetObjectArrayElement: jni.o; -text: .text%__1cISubINodeJideal_reg6kM_I_; -text: .text%__1cICodeHeapIallocate6ML_pv_; -text: .text%__1cICodeHeapPsearch_freelist6ML_pnJFreeBlock__; -text: .text%__1cPcmpFastLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmulL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; -text: .text%jni_GetStringUTFRegion: jni.o; -text: .text%jni_GetStringUTFLength: jni.o; -text: .text%__1cOMacroAssemblerWbang_stack_with_offset6Mi_v_; -text: .text%__1cScompU_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMoutputStream2t6Mi_v_; -text: .text%__1cMstringStreamJas_string6M_pc_; -text: .text%__1cMstringStream2t6ML_v_; -text: .text%__1cJloadINodeFreloc6kM_i_; -text: .text%__1cMstringStream2T6M_v_; -text: .text%__1cOMethodLivenessKBasicBlockJstore_two6Mi_v_; -text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cOAbstractICacheQinvalidate_range6FpCi_v_; -text: .text%__1cOAbstractICachePcall_flush_stub6FpCi_v_; -text: .text%__1cICodeBlobMset_oop_maps6MpnJOopMapSet__v_; -text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__; -text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__; -text: .text%__1cICodeHeapPfollowing_block6MpnJFreeBlock__2_; -text: .text%__1cOClearArrayNodeLbottom_type6kM_pknEType__; -text: .text%__1cEDictIdoubhash6M_v_; -text: .text%__1cIProjNodeJideal_reg6kM_I_; -text: .text%__1cHi2sNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLimmI_16OperJnum_edges6kM_I_; -text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; -text: .text%__1cMloadConLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRaddL_rReg_immNodeErule6kM_I_; -text: .text%__1cJLoadLNodeJideal_reg6kM_I_; -text: .text%__1cHCompileTset_cached_top_node6MpnENode__v_; -text: .text%__1cENodeMsetup_is_top6M_v_; -text: .text%__1cIGotoNodeGOpcode6kM_i_; -text: .text%__1cOMachPrologNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cNFingerprinterIdo_array6Mii_v_; -text: .text%jni_GetArrayLength: jni.o; -text: .text%__1cJloadSNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKReturnNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_; -text: .text%__1cMorI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cPsalI_rReg_1NodeHtwo_adr6kM_I_; -text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cHRetNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPGlobalTLABStatsKinitialize6M_v_; -text: .text%__1cTDerivedPointerTableFclear6F_v_; -text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; -text: .text%__1cNCollectedHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cTDerivedPointerTablePupdate_pointers6F_v_; -text: .text%__1cKDictionaryHoops_do6MpnKOopClosure__v_; -text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; -text: .text%__1cQLRUMaxHeapPolicy2t6M_v_; -text: .text%__1cVLoaderConstraintTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cUParallelScavengeHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cKPSYoungGenPupdate_counters6M_v_; -text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; -text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; -text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cUParallelScavengeHeapPupdate_counters6M_v_; -text: .text%__1cQPlaceholderTableMremove_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cNCollectedHeapQresize_all_tlabs6M_v_; -text: .text%__1cUParallelScavengeHeapQresize_all_tlabs6M_v_; -text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersPupdate_counters6M_v_; -text: .text%__1cYGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; -text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; -text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cKstoreLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cUPSAdaptiveSizePolicybPeden_increment_with_supplement_aligned_up6ML_L_; -text: .text%__1cIPSOldGenMmax_gen_size6M_L_; -text: .text%__1cUPSAdaptiveSizePolicybHclear_generation_free_space_flags6M_v_; -text: .text%__1cUPSAdaptiveSizePolicyOeden_increment6MLI_L_; -text: .text%__1cQSystemDictionaryTload_instance_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cPjava_lang_ClassNcreate_mirror6FnLKlassHandle_pnGThread__pnHoopDesc__; -text: .text%__1cJAssemblerDjmp6MrnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cPshrI_rReg_1NodeHtwo_adr6kM_I_; -text: .text%__1cRmulI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cOMachEpilogNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLklassVtableVinitialize_from_super6MnLKlassHandle__i_; -text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; -text: .text%__1cLklassVtableOcopy_vtable_to6MpnLvtableEntry__v_; -text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; -text: .text%__1cPVM_GC_OperationbKrelease_and_notify_pending_list_lock6M_v_; -text: .text%__1cPVM_GC_OperationZacquire_pending_list_lock6M_v_; -text: .text%__1cMTypeKlassPtrFxmeet6kMpknEType__3_; -text: .text%__1cKReturnNodeEhash6kM_I_; -text: .text%__1cLlog2_intptr6Fl_i_; -text: .text%__1cKKlass_vtbl2n6FLrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_; -text: .text%__1cFKlassRbase_create_klass6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__1_; -text: .text%__1cSCallLeafDirectNodeKmethod_set6Ml_v_; -text: .text%__1cJcmpOpOperJnot_equal6kM_i_; -text: .text%__1cJloadLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRAbstractAssemblerbDgenerate_stack_overflow_check6Mi_v_; -text: .text%__1cNandL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftINodeJideal_reg6kM_I_; -text: .text%__1cJLoadSNodeJideal_reg6kM_I_; -text: .text%__1cIPhaseIFGISquareUp6M_v_; -text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; -text: .text%__1cCosJyield_all6Fi_v_; -text: .text%__1cCosbCmake_polling_page_unreadable6F_v_; -text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_; -text: .text%__1cMCounterDecayFdecay6F_v_; -text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; -text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; -text: .text%__1cCosXserialize_thread_states6F_v_; -text: .text%__1cUSafepointSynchronizeFbegin6F_v_; -text: .text%__1cUSafepointSynchronizeQdo_cleanup_tasks6F_v_; -text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_; -text: .text%__1cNloadConP0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cCosbAmake_polling_page_readable6F_v_; -text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; -text: .text%__1cUSafepointSynchronizeDend6F_v_; -text: .text%__1cQVMOperationQdDueueGinsert6MpnMVM_Operation_2_v_; -text: .text%__1cQVMOperationQdDueueGunlink6MpnMVM_Operation__v_; -text: .text%__1cMVM_OperationIevaluate6M_v_; -text: .text%__1cMVM_OperationSset_calling_thread6MpnGThread_nOThreadPriority__v_; -text: .text%__1cCosMget_priority6FpknGThread_rnOThreadPriority__nIOSReturn__; -text: .text%__1cQVMOperationQdDueueOqueue_add_back6MipnMVM_Operation__v_; -text: .text%__1cGThreadMget_priority6Fpk0_nOThreadPriority__; -text: .text%__1cCosTget_native_priority6FpknGThread_pi_nIOSReturn__; -text: .text%__1cIVMThreadSevaluate_operation6MpnMVM_Operation__v_; -text: .text%__1cSmembar_releaseNodeLbottom_type6kM_pknEType__; -text: .text%__1cCosGrandom6F_l_; -text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; -text: .text%__1cPGlobalTLABStatsHpublish6M_v_; -text: .text%__1cUinitialize_hashtable6FppnLNameSigHash__v_; -text: .text%__1cNtestP_regNodeFreloc6kM_i_; -text: .text%__1cbDVM_ParallelGCFailedAllocationEdoit6M_v_; -text: .text%__1cKDictionaryJnew_entry6MIpnMklassOopDesc_pnHoopDesc__pnPDictionaryEntry__; -text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; -text: .text%__1cQSystemDictionaryRupdate_dictionary6FiIiInTinstanceKlassHandle_nGHandle_pnGThread__v_; -text: .text%__1cQSystemDictionaryQfind_placeholder6FiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cPsarI_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKciTypeFlowPflow_exceptions6MpnNGrowableArray4Cpn0AFBlock___pnNGrowableArray4CpnPciInstanceKlass___pn0ALStateVector__v_; -text: .text%__1cNIdealLoopTreeNDCE_loop_body6M_v_; -text: .text%__1cNprefetchwNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXmembar_release_lockNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFStateP_sub_Op_LShiftI6MpknENode__v_; -text: .text%__1cNIdealLoopTreeVadjust_loop_exit_prob6MpnOPhaseIdealLoop__v_; -text: .text%__1cKstoreCNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMPhaseChaitinMreset_uf_map6MI_v_; -text: .text%__1cMPhaseChaitinSbuild_ifg_physical6MpnMResourceArea__I_; -text: .text%__1cNPhaseCoalescePcoalesce_driver6M_v_; -text: .text%__1cNdecI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; -text: .text%__1cSTailCalljmpIndNodeNis_block_proj6kM_pknENode__; -text: .text%__1cMrcx_RegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIMulLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cHPhiNodeKmake_blank6FpnENode_2_p0_; -text: .text%JVM_GetMethodIxSignatureUTF; -text: .text%JVM_GetMethodIxMaxStack; -text: .text%JVM_GetMethodIxArgsSize; -text: .text%JVM_GetMethodIxByteCodeLength; -text: .text%JVM_GetMethodIxByteCode; -text: .text%JVM_GetMethodIxExceptionIndexes; -text: .text%JVM_GetMethodIxExceptionsCount; -text: .text%__1cOPhaseIdealLoopMdominated_by6MpnENode_2_v_; -text: .text%__1cNaddL_rRegNodeErule6kM_I_; -text: .text%__1cGGCTask2t6Mn0AEKindEkind__v_; -text: .text%__1cZSerialOldToYoungRootsTaskEname6M_pc_; -text: .text%__1cZSerialOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cSPSPromotionManagerNpost_scavenge6F_v_; -text: .text%__1cSPSPromotionManagerMpre_scavenge6F_v_; -text: .text%__1cUWaitForBarrierGCTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cSPSPromotionManagerbBvm_thread_promotion_manager6F_p0_; -text: .text%__1cSAdaptiveSizePolicyWminor_collection_begin6M_v_; -text: .text%__1cSAdaptiveSizePolicyUminor_collection_end6MnHGCCauseFCause__v_; -text: .text%__1cUWaitForBarrierGCTaskEname6M_pc_; -text: .text%__1cNMonitorSupplyHrelease6FpnHMonitor__v_; -text: .text%__1cNMonitorSupplyHreserve6F_pnHMonitor__; -text: .text%__1cUWaitForBarrierGCTaskIwait_for6M_v_; -text: .text%__1cUWaitForBarrierGCTaskIdestruct6M_v_; -text: .text%__1cUWaitForBarrierGCTaskHdestroy6Fp0_v_; -text: .text%__1cUWaitForBarrierGCTaskGcreate6F_p0_; -text: .text%__1cNBarrierGCTaskIdestruct6M_v_; -text: .text%__1cNBarrierGCTaskOdo_it_internal6MpnNGCTaskManager_I_v_; -text: .text%__1cNGCTaskManagerVrelease_all_resources6M_v_; -text: .text%__1cNGCTaskManagerIadd_list6MpnLGCTaskQdDueue__v_; -text: .text%__1cLGCTaskQdDueueHenqueue6Mp0_v_; -text: .text%__1cLGCTaskQdDueueGcreate6F_p0_; -text: .text%__1cGGCTaskIdestruct6M_v_; -text: .text%__1cSCardTableExtensionRscavenge_contents6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager__v_; -text: .text%__1cHThreadsZcreate_thread_roots_tasks6FpnLGCTaskQdDueue__v_; -text: .text%__1cKPSYoungGenLswap_spaces6M_v_; -text: .text%__1cUParallelScavengeHeapQresize_young_gen6MLL_v_; -text: .text%__1cKPSYoungGenGresize6MLL_v_; -text: .text%__1cKPSYoungGenNresize_spaces6MLL_v_; -text: .text%__1cSAdaptiveSizePolicybIupdate_minor_pause_young_estimator6Md_v_; -text: .text%__1cUPSAdaptiveSizePolicybGupdate_minor_pause_old_estimator6Md_v_; -text: .text%__1cNsubL_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cMStartOSRNodeGOpcode6kM_i_; -text: .text%__1cRsubI_rReg_memNodeErule6kM_I_; -text: .text%__1cNandI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cMURShiftINodeJideal_reg6kM_I_; -text: .text%__1cMorI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cLRShiftINodeJideal_reg6kM_I_; -text: .text%__1cLklassVtableQfill_in_mirandas6Mri_v_; -text: .text%__1cRandI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cFStateR_sub_Op_LoadKlass6MpknENode__v_; -text: .text%__1cJcmpOpOperEless6kM_i_; -text: .text%__1cFKlassWappend_to_sibling_list6M_v_; -text: .text%__1cOcompL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQSystemDictionarySjava_system_loader6F_pnHoopDesc__; -text: .text%__1cNloadKlassNodeFreloc6kM_i_; -text: .text%__1cRshrI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIAndINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cTjava_lang_ThrowableNset_backtrace6FpnHoopDesc_2_v_; -text: .text%__1cIAndINodeGmul_id6kM_pknEType__; -text: .text%__1cTClassLoadingServiceScompute_class_size6FpnNinstanceKlass__L_; -text: .text%__1cLklassVtableQget_num_mirandas6FpnMklassOopDesc_pnPobjArrayOopDesc_4_i_; -text: .text%__1cPClassFileParserbAparse_classfile_attributes6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cQSystemDictionaryQadd_to_hierarchy6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserYcheck_super_class_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_; -text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; -text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileStream2t6MpCipc_v_; -text: .text%__1cNinstanceKlassbBdo_local_static_fields_impl6FnTinstanceKlassHandle_pFpnPfieldDescriptor_pnGThread__v5_v_; -text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; -text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; -text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; -text: .text%__1cNinstanceKlassQinit_implementor6M_v_; -text: .text%__1cNinstanceKlassQeager_initialize6MpnGThread__v_; -text: .text%__1cKTypeRawPtrEmake6FpC_pk0_; -text: .text%__1cScompI_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cScompI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cOMethodLiveness2t6MpnFArena_pnIciMethod__v_; -text: .text%__1cOMethodLivenessSpropagate_liveness6M_v_; -text: .text%__1cOMethodLivenessRinit_basic_blocks6M_v_; -text: .text%__1cOMethodLivenessNinit_gen_kill6M_v_; -text: .text%__1cOMethodLivenessQcompute_liveness6M_v_; -text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; -text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; -text: .text%__1cQSystemDictionaryRload_shared_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cQSystemDictionaryRfind_shared_class6FnMsymbolHandle__pnMklassOopDesc__; -text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cSMemBarVolatileNodeGOpcode6kM_i_; -text: .text%__1cRaddL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cKciTypeFlowLStateVectorGdo_ldc6MpnQciBytecodeStream__v_; -text: .text%__1cMPhaseIterGVNIoptimize6M_v_; -text: .text%__1cNmulL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cRsalI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLklassVtableYadd_new_mirandas_to_list6FpnNGrowableArray4CpnNmethodOopDesc___pnPobjArrayOopDesc_6pnMklassOopDesc__v_; -text: .text%__1cQPackageHashtableMcompute_hash6Mpkci_I_; -text: .text%__1cRsalL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_; -text: .text%__1cLOpaque2NodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_; -text: .text%__1cJloadBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPClassFileStreamGget_u86MpnGThread__X_; -text: .text%__1cKstoreINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cScompP_mem_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_; -text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; -text: .text%__1cFframeWsender_for_entry_frame6kMpnLRegisterMap__0_; -text: .text%__1cHPhiNodeDcmp6kMrknENode__I_; -text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; -text: .text%__1cKoopFactoryWnew_permanent_intArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cPClassFileParserVparse_exception_table6MIInSconstantPoolHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_; -text: .text%__1cMtlsLoadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmodI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cNtestL_regNodeMideal_Opcode6kM_i_; -text: .text%__1cIConFNodeGOpcode6kM_i_; -text: .text%__1cLOpaque1NodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIAndINodeKmul_opcode6kM_i_; -text: .text%__1cIAndINodeKadd_opcode6kM_i_; -text: .text%__1cKCMoveINodeGOpcode6kM_i_; -text: .text%__1cIRootNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPloadConUL32NodeHsize_of6kM_I_; -text: .text%__1cJAssemblerEandq6MpnMRegisterImpl_i_v_; -text: .text%__1cLClassLoaderOlookup_package6Fpkc_pnLPackageInfo__; -text: .text%__1cQPackageHashtableJget_entry6MiIpkcL_pnLPackageInfo__; -text: .text%JVM_Clone; -text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; -text: .text%__1cPsalI_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSTailCalljmpIndNodeMideal_Opcode6kM_i_; -text: .text%__1cQComputeCallStackJdo_double6M_v_; -text: .text%__1cKciTypeFlowLStateVectorMdo_putstatic6MpnQciBytecodeStream__v_; -text: .text%__1cIGraphKitHopt_iff6MpnENode_2_2_; -text: .text%__1cGEventsDlog6FpkcE_v_; -text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cSsafePoint_pollNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_; -text: .text%__1cPshrI_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseWensure_phis_everywhere6M_v_; -text: .text%__1cNsubL_rRegNodeErule6kM_I_; -text: .text%__1cUPSMarkSweepDecoratorVdestination_decorator6F_p0_; -text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_; -text: .text%__1cKBufferBlob2n6FLI_pv_; -text: .text%__1cFParseKarray_load6MnJBasicType__v_; -text: .text%__1cKBufferBlob2t6Mpkci_v_; -text: .text%__1cKBufferBlobGcreate6Fpkci_p0_; -text: .text%__1cKciTypeFlowLStateVectorLdo_putfield6MpnQciBytecodeStream__v_; -text: .text%__1cHnmethodNscope_desc_at6MpC_pnJScopeDesc__; -text: .text%__1cOPhaseIdealLoopQset_subtree_ctrl6MpnENode__v_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_i_v_; -text: .text%__1cNinstanceKlassbBcall_class_initializer_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassRclass_initializer6M_pnNmethodOopDesc__; -text: .text%__1cNinstanceKlassWcall_class_initializer6MpnGThread__v_; -text: .text%__1cNinstanceKlassbOset_initialization_state_and_notify_impl6FnTinstanceKlassHandle_n0AKClassState_pnGThread__v_; -text: .text%__1cNinstanceKlassbJset_initialization_state_and_notify6Mn0AKClassState_pnGThread__v_; -text: .text%__1cNRelocIteratorTlocs_and_index_size6Fii_i_; -text: .text%__1cMrdi_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cTconvL2I_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMrax_RegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNSignatureInfoIdo_short6M_v_; -text: .text%JVM_GetFieldIxModifiers; -text: .text%__1cNandL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cTMachCallRuntimeNodePret_addr_offset6M_i_; -text: .text%__1cOcompiledVFrameEcode6kM_pnHnmethod__; -text: .text%__1cICodeHeapTmark_segmap_as_used6MLL_v_; -text: .text%__1cMorI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIAddLNodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cHOrINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_IsConstructorIx; -text: .text%__1cEDict2t6MpFpkv2_ipF2_ipnFArena_i_v_; -text: .text%__1cHMatcherLfind_shared6MpnENode__v_; -text: .text%__1cHMatcherFxform6MpnENode_i_2_; -text: .text%__1cJStartNodeHsize_of6kM_I_; -text: .text%__1cILRG_List2t6MI_v_; -text: .text%__1cHMatcherLreturn_addr6kM_i_; -text: .text%__1cSindIndexOffsetOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cOMachPrologNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cHMemNodeHsize_of6kM_I_; -text: .text%__1cNSignatureInfoIdo_float6M_v_; -text: .text%__1cRaddI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseNadd_safepoint6M_v_; -text: .text%__1cFStateT_sub_Op_CheckCastPP6MpknENode__v_; -text: .text%__1cRaddI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOCompiledRFrameEinit6M_v_; -text: .text%__1cGvframeDtop6kM_p0_; -text: .text%__1cRmethodDataOopDescYcompute_extra_data_count6Fii_i_; -text: .text%__1cPcheckCastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateM_sub_Op_SubI6MpknENode__v_; -text: .text%__1cRxorI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cNloadConP0NodeHsize_of6kM_I_; -text: .text%__1cJAssemblerEaddq6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerEsubq6MpnMRegisterImpl_2_v_; -text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6ML_v_; -text: .text%__1cTresource_free_bytes6FpcL_v_; -text: .text%__1cUPSMarkSweepDecoratorPadjust_pointers6M_v_; -text: .text%__1cUPSMarkSweepDecoratorKprecompact6M_v_; -text: .text%__1cRindIndexScaleOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cRindIndexScaleOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cPCountedLoopNodeHsize_of6kM_I_; -text: .text%__1cENodeHrm_prec6MI_v_; -text: .text%__1cHCompilebAvarargs_C_out_slots_killed6kM_I_; -text: .text%__1cICodeHeapLmerge_right6MpnJFreeBlock__v_; -text: .text%__1cNmulL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cWandI_rReg_imm65535NodeMideal_Opcode6kM_i_; -text: .text%__1cRjmpConU_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRjmpConU_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; -text: .text%__1cSindIndexOffsetOperNconstant_disp6kM_i_; -text: .text%__1cIAndLNodeGadd_id6kM_pknEType__; -text: .text%__1cLConvL2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQleaPIdxScaleNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIAndLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cMloadConLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateV_sub_Op_MemBarRelease6MpknENode__v_; -text: .text%__1cOleaPIdxOffNodeMideal_Opcode6kM_i_; -text: .text%__1cJAssemblerDorq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cScompI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPcmpFastLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXmembar_release_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTcompareAndSwapLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKciTypeFlowLStateVectorJhalf_type6FpnGciType__3_; -text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; -text: .text%__1cNaddL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNxorI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cWCallLeafNoFPDirectNodePoper_input_base6kM_I_; -text: .text%__1cJLoadFNodeGOpcode6kM_i_; -text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cJAssemblerEleaq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJloadINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHTypePtrFxmeet6kMpknEType__3_; -text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__; -text: .text%__1cIPhaseIFGYCompute_Effective_Degree6M_v_; -text: .text%__1cbCfind_class_from_class_loader6FpnHJNIEnv__nMsymbolHandle_CnGHandle_3CpnGThread__pnH_jclass__; -text: .text%__1cMPhaseChaitinOcache_lrg_info6M_v_; -text: .text%__1cMPhaseChaitinISimplify6M_v_; -text: .text%__1cMPhaseChaitinGSelect6M_I_; -text: .text%__1cRsarL_rReg_immNodeErule6kM_I_; -text: .text%__1cKcmpOpUOperJnot_equal6kM_i_; -text: .text%__1cScompU_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cScompU_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cRNativeGeneralJumpQjump_destination6kM_pC_; -text: .text%__1cLRethrowNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNandL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cTleaPIdxScaleOffNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNmulL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cODataRelocationGoffset6M_i_; -text: .text%__1cODataRelocationJset_value6MpC_v_; -text: .text%__1cKRelocationRpd_set_data_value6MpCl_v_; -text: .text%__1cLOptoRuntimeJstub_name6FpC_pkc_; -text: .text%__1cFStateO_sub_Op_StoreB6MpknENode__v_; -text: .text%__1cRaddL_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cRandI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIRootNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOleaPIdxOffNodePoper_input_base6kM_I_; -text: .text%__1cJcmpOpOperKless_equal6kM_i_; -text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; -text: .text%__1cIMulLNodeGmul_id6kM_pknEType__; -text: .text%__1cHMemNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cHMemNodeScalculate_adr_type6FpknEType_pknHTypePtr__6_; -text: .text%__1cRmulI_rReg_immNodeErule6kM_I_; -text: .text%__1cURethrowExceptionNodePoper_input_base6kM_I_; -text: .text%__1cNaddP_rRegNodePoper_input_base6kM_I_; -text: .text%__1cFStateP_sub_Op_RShiftI6MpknENode__v_; -text: .text%__1cNnegI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cbFloadConL_0x6666666666666667NodeErule6kM_I_; -text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; -text: .text%__1cNloadKlassNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmembar_acquireNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMoutputStreamFprint6MpkcE_v_; -text: .text%__1cMURShiftLNodeJideal_reg6kM_I_; -text: .text%__1cZPhaseConservativeCoalesce2t6MrnMPhaseChaitin__v_; -text: .text%__1cMPhaseChaitinFSplit6MI_I_; -text: .text%__1cMPhaseChaitinHcompact6M_v_; -text: .text%__1cMPhaseChaitinZcompress_uf_map_for_nodes6M_v_; -text: .text%__1cZPhaseConservativeCoalesceGverify6M_v_; -text: .text%__1cQComputeCallStackIdo_short6M_v_; -text: .text%__1cNFingerprinterHdo_long6M_v_; -text: .text%__1cSsafePoint_pollNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNloadConL0NodeLbottom_type6kM_pknEType__; -text: .text%__1cIAndINodeJideal_reg6kM_I_; -text: .text%__1cZInterpreterMacroAssemblerKverify_oop6MpnMRegisterImpl_nITosState__v_; -text: .text%__1cOemit_d32_reloc6FrnKCodeBuffer_inJrelocInfoJrelocType_i_v_; -text: .text%__1cYexternal_word_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cNstoreImmBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateQ_sub_Op_URShiftL6MpknENode__v_; -text: .text%__1cJNode_ListEyank6MpnENode__v_; -text: .text%jni_ExceptionCheck: jni.o; -text: .text%__1cMFastLockNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIXorINodeLbottom_type6kM_pknEType__; -text: .text%__1cJAssemblerEsubq6MpnMRegisterImpl_i_v_; -text: .text%__1cNloadConL0NodeMideal_Opcode6kM_i_; -text: .text%__1cKBlock_ListGinsert6MIpnFBlock__v_; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_; -text: .text%__1cRxorI_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cKTypeAryPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cKTypeRawPtrEmake6FnHTypePtrDPTR__pk0_; -text: .text%__1cJCodeCacheEfree6FpnICodeBlob__v_; -text: .text%__1cICodeHeapPadd_to_freelist6MpnJHeapBlock__v_; -text: .text%__1cICodeHeapKdeallocate6Mpv_v_; -text: .text%__1cJVectorSetGslamin6Mrk0_v_; -text: .text%__1cFStateQ_sub_Op_URShiftI6MpknENode__v_; -text: .text%__1cScompI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRaddI_rReg_memNodeErule6kM_I_; -text: .text%__1cKRelocationYpd_get_address_from_code6M_pC_; -text: .text%__1cRxorI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_; -text: .text%__1cNandL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNstoreImmBNodeFreloc6kM_i_; -text: .text%__1cJcmpOpOperNgreater_equal6kM_i_; -text: .text%__1cKBufferBlobEfree6Fp0_v_; -text: .text%__1cZInterpreterMacroAssemblerKverify_FPU6MinITosState__v_; -text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; -text: .text%__1cOGenerateOopMapIppop_any6Mi_v_; -text: .text%__1cKNode_ArrayFclear6M_v_; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cIJumpDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cRsalL_rReg_immNodeErule6kM_I_; -text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_; -text: .text%jni_NewObject: jni.o; -text: .text%__1cNaddP_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cPsarI_rReg_1NodeHtwo_adr6kM_I_; -text: .text%__1cFciEnvKcompile_id6M_I_; -text: .text%__1cOPhaseIdealLoopNreorg_offsets6MpnNIdealLoopTree__v_; -text: .text%__1cNtestL_regNodeErule6kM_I_; -text: .text%__1cLOptoRuntimebAcomplete_monitor_exit_Type6F_pknITypeFunc__; -text: .text%__1cIGraphKitNshared_unlock6MpnENode_2_v_; -text: .text%__1cNSafePointNodeLpop_monitor6M_v_; -text: .text%__1cRsarI_rReg_immNodeErule6kM_I_; -text: .text%__1cRsarL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMindirectOperNbase_position6kM_i_; -text: .text%__1cMindirectOperNconstant_disp6kM_i_; -text: .text%__1cMTailCallNodeKmatch_edge6kMI_I_; -text: .text%__1cKciTypeFlowLStateVectorGdo_new6MpnQciBytecodeStream__v_; -text: .text%__1cGIfNodeMdominated_by6MpnENode_pnMPhaseIterGVN__v_; -text: .text%__1cFStateV_sub_Op_MemBarAcquire6MpknENode__v_; -text: .text%__1cNSharedRuntimeQfind_callee_info6FpnKJavaThread_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cFKlassDLCA6Mp0_1_; -text: .text%__1cHciKlassVleast_common_ancestor6Mp0_1_; -text: .text%__1cNSCMemProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cJScopeDescGsender6kM_p0_; -text: .text%__1cSindIndexOffsetOperOindex_position6kM_i_; -text: .text%__1cSindIndexOffsetOperNbase_position6kM_i_; -text: .text%__1cNSafePointNodeMpush_monitor6MpknMFastLockNode__v_; -text: .text%__1cOcompiledVFrameGsender6kM_pnGvframe__; -text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; -text: .text%__1cNGrowableArray4Cpv_2t6MpnFArena_iirk0_v_; -text: .text%__1cKstoreFNodePoper_input_base6kM_I_; -text: .text%__1cNGrowableArray4Cl_2t6MpnFArena_iirkl_v_; -text: .text%__1cNstoreImmINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOMachEpilogNodeFreloc6kM_i_; -text: .text%__1cOMachEpilogNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovI_regNodeMideal_Opcode6kM_i_; -text: .text%__1cKCompiledIC2t6MpnKNativeCall__v_; -text: .text%__1cFStateN_sub_Op_LoadL6MpknENode__v_; -text: .text%__1cSCallLeafDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSignatureInfoHdo_char6M_v_; -text: .text%__1cNtestU_regNodeMideal_Opcode6kM_i_; -text: .text%__1cFStateQ_sub_Op_CallLeaf6MpknENode__v_; -text: .text%__1cRAbstractAssemblerFflush6M_v_; -text: .text%__1cJloadLNodeFreloc6kM_i_; -text: .text%__1cSCallLeafDirectNodeFreloc6kM_i_; -text: .text%__1cIGraphKitNgen_checkcast6MpnENode_2p2_2_; -text: .text%__1cIGraphKitRgen_subtype_check6MpnENode_2_2_; -text: .text%__1cNsubL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXmembar_release_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cJAssemblerEmovq6MpnMRegisterImpl_2_v_; -text: .text%__1cRmulL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cFframeRretrieve_receiver6MpnLRegisterMap__pnHoopDesc__; -text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__; -text: .text%jni_NewGlobalRef: jni.o; -text: .text%__1cOPhaseIdealLoopLdo_split_if6MpnENode__v_; -text: .text%__1cNandI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cHOrINodeGadd_id6kM_pknEType__; -text: .text%__1cIPhaseCFGOinsert_goto_at6MII_v_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_tree6M_v_; -text: .text%__1cRsubI_rReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMinINodeLbottom_type6kM_pknEType__; -text: .text%__1cJLoadBNodeJideal_reg6kM_I_; -text: .text%__1cFStateS_sub_Op_FastUnlock6MpknENode__v_; -text: .text%__1cXmembar_release_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMVirtualSpaceNreserved_size6kM_L_; -text: .text%__1cScompU_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRsarI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKStoreFNodeGOpcode6kM_i_; -text: .text%__1cPcmovI_reg_gNodeErule6kM_I_; -text: .text%__1cScompU_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cQjava_lang_ThreadRset_thread_status6FpnHoopDesc_n0AMThreadStatus__v_; -text: .text%__1cWCallLeafNoFPDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKstoreFNodeMideal_Opcode6kM_i_; -text: .text%__1cIimmFOperJconstantF6kM_f_; -text: .text%__1cIDivINodeLbottom_type6kM_pknEType__; -text: .text%__1cHOrINodeJideal_reg6kM_I_; -text: .text%__1cNcmovI_regNodeMcisc_operand6kM_i_; -text: .text%__1cIAndLNodeGmul_id6kM_pknEType__; -text: .text%__1cIAndLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cJloadFNodeMideal_Opcode6kM_i_; -text: .text%__1cbFunnecessary_membar_volatileNodeMideal_Opcode6kM_i_; -text: .text%__1cSmembar_acquireNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cIAndLNodeKadd_opcode6kM_i_; -text: .text%__1cFStateO_sub_Op_StoreC6MpknENode__v_; -text: .text%__1cIAndLNodeKmul_opcode6kM_i_; -text: .text%__1cRaddL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMrep_stosNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXmembar_acquire_lockNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMrcx_RegIOperEtype6kM_pknEType__; -text: .text%__1cOPhaseIdealLoopKDominators6M_v_; -text: .text%__1cHNTarjanDDFS6Fp0rnJVectorSet_pnOPhaseIdealLoop_pI_i_; -text: .text%__1cHNTarjanIsetdepth6MIpI_v_; -text: .text%__1cIMulLNodeKmul_opcode6kM_i_; -text: .text%__1cIMulLNodeKadd_opcode6kM_i_; -text: .text%jni_SetLongField: jni.o; -text: .text%__1cOPhaseIdealLoopRinit_dom_lca_tags6M_v_; -text: .text%__1cKstoreLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLPcDescCacheLadd_pc_desc6MpnGPcDesc__v_; -text: .text%__1cJloadSNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRsubI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMloadConFNodeMideal_Opcode6kM_i_; -text: .text%__1cNaddP_rRegNodeErule6kM_I_; -text: .text%__1cNmethodOopDescVclear_native_function6M_v_; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_; -text: .text%__1cTjava_lang_ThrowableQclear_stacktrace6FpnHoopDesc__v_; -text: .text%__1cKJavaThreadGactive6F_p0_; -text: .text%JVM_FillInStackTrace; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle__v_; -text: .text%__1cSInterpreterRuntimePset_bcp_and_mdp6FpCpnKJavaThread__v_; -text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_; -text: .text%jni_DeleteGlobalRef: jni.o; -text: .text%__1cLOpaque2NodeEhash6kM_I_; -text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; -text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; -text: .text%__1cFParseGdo_new6M_v_; -text: .text%__1cFParseFBlockMadd_new_path6M_i_; -text: .text%__1cJimmI0OperJnum_edges6kM_I_; -text: .text%__1cRmulI_rReg_immNodeMcisc_operand6kM_i_; -text: .text%__1cICodeHeapMmax_capacity6kM_L_; -text: .text%__1cMciMethodDataStrap_recompiled_at6MpnLProfileData__i_; -text: .text%__1cRindIndexScaleOperFscale6kM_i_; -text: .text%__1cNxorI_rRegNodeErule6kM_I_; -text: .text%__1cFParseFBlockNstack_type_at6kMi_pknEType__; -text: .text%__1cLConvL2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFTypeFEmake6Ff_pk0_; -text: .text%__1cIModINodeLbottom_type6kM_pknEType__; -text: .text%__1cJcmpOpOperHgreater6kM_i_; -text: .text%__1cQComputeCallStackHdo_bool6M_v_; -text: .text%__1cJMemRegionMintersection6kM0_0_; -text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cRmulI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHciKlassGloader6M_pnHoopDesc__; -text: .text%__1cIConDNodeGOpcode6kM_i_; -text: .text%__1cLRethrowNodeEhash6kM_I_; -text: .text%__1cIDivLNodeGOpcode6kM_i_; -text: .text%__1cSmembar_releaseNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cHMatcherQinline_cache_reg6F_i_; -text: .text%__1cbBInterpreterCodeletInterfaceRcode_size_to_size6kMi_i_; -text: .text%__1cbBInterpreterCodeletInterfaceKinitialize6MpnEStub_i_v_; -text: .text%jni_NewLocalRef: jni.o; -text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_; -text: .text%__1cPstoreImmI16NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLRShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIemit_d166FrnKCodeBuffer_i_v_; -text: .text%__1cKimmI16OperIconstant6kM_l_; -text: .text%__1cPClassFileParserbNparse_classfile_inner_classes_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__H_; -text: .text%__1cMloadConFNodeLbottom_type6kM_pknEType__; -text: .text%__1cJCodeCacheNalive_nmethod6FpnICodeBlob__pnHnmethod__; -text: .text%__1cJAssemblerGmovzbl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cMloadConLNodeHsize_of6kM_I_; -text: .text%__1cOMacroAssemblerSload_unsigned_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cNaddL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cNaddL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cLLShiftLNodeJideal_reg6kM_I_; -text: .text%__1cPlocal_vsnprintf6FpcLpkcpnR__va_list_element__i_; -text: .text%jio_vsnprintf; -text: .text%__1cNstoreImmINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIAndLNodeJideal_reg6kM_I_; -text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; -text: .text%jio_snprintf; -text: .text%__1cNSafePointNodeKgrow_stack6MpnIJVMState_I_v_; -text: .text%__1cURethrowExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTcompareAndSwapLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetCPMethodModifiers; -text: .text%__1cFStateR_sub_Op_SafePoint6MpknENode__v_; -text: .text%__1cQorI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cPsarI_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLRShiftLNodeLbottom_type6kM_pknEType__; -text: .text%__1cKReturnNodeJideal_reg6kM_I_; -text: .text%__1cNinstanceKlassPadd_implementor6MpnMklassOopDesc__v_; -text: .text%__1cRPrivilegedElementKinitialize6MpnMvframeStream_pnHoopDesc_p0pnGThread__v_; -text: .text%JVM_DoPrivileged; -text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_; -text: .text%__1cPpoll_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cSsafePoint_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSsafePoint_pollNodeFreloc6kM_i_; -text: .text%__1cLStrCompNodeGOpcode6kM_i_; -text: .text%__1cJOopMapSet2t6M_v_; -text: .text%__1cKstoreCNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeGOpcode6kM_i_; -text: .text%__1cNFingerprinterHdo_bool6M_v_; -text: .text%__1cOPhaseIdealLoopUsplit_if_with_blocks6MrnJVectorSet_rnKNode_Stack__v_; -text: .text%__1cNmethodOopDescbDbuild_interpreter_method_data6FnMmethodHandle_pnGThread__v_; -text: .text%__1cQLibraryIntrinsicIgenerate6MpnIJVMState__2_; -text: .text%__1cLOopRecorderIoop_size6M_i_; -text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_; -text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; -text: .text%__1cHnmethodKtotal_size6kM_i_; -text: .text%__1cNtestU_regNodeErule6kM_I_; -text: .text%__1cJOopMapSetJheap_size6kM_i_; -text: .text%__1cRAbstractAssemblerOcode_fill_byte6F_i_; -text: .text%__1cMrdx_RegLOperEtype6kM_pknEType__; -text: .text%__1cVPatchingRelocIteratorHprepass6M_v_; -text: .text%__1cVPatchingRelocIteratorIpostpass6M_v_; -text: .text%__1cJOopMapSetHcopy_to6MpC_v_; -text: .text%__1cLPhaseValues2t6Mp0_v_; -text: .text%__1cINodeHash2t6Mp0_v_; -text: .text%__1cOPhaseTransform2t6Mp0nFPhaseLPhaseNumber__v_; -text: .text%__1cJAssemblerDjmp6MnHAddress__v_; -text: .text%__1cOJNIHandleBlockRrebuild_free_list6M_v_; -text: .text%jni_GetObjectArrayElement: jni.o; -text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_; -text: .text%__1cVCallRuntimeDirectNodeMideal_Opcode6kM_i_; -text: .text%__1cICmpDNodeGOpcode6kM_i_; -text: .text%__1cPcmovI_reg_gNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_AndI6MpknENode__v_; -text: .text%__1cHCompilebBregister_library_intrinsics6M_v_; -text: .text%__1cETypeKInitialize6FpnHCompile__v_; -text: .text%__1cYDebugInformationRecorder2t6MpnLOopRecorder__v_; -text: .text%__1cOCompileWrapper2t6MpnHCompile__v_; -text: .text%__1cHCompileEInit6Mi_v_; -text: .text%__1cVExceptionHandlerTable2t6Mi_v_; -text: .text%__1cFDictIFreset6MpknEDict__v_; -text: .text%__1cUDebugInfoWriteStream2t6MpnYDebugInformationRecorder_i_v_; -text: .text%JVM_FindLoadedClass; -text: .text%__1cHMatcherZnumber_of_saved_registers6F_i_; -text: .text%__1cXPhaseAggressiveCoalesceNinsert_copies6MrnHMatcher__v_; -text: .text%__1cIPhaseCFGDDFS6MpnGTarjan__I_; -text: .text%__1cFArenaNmove_contents6Mp0_1_; -text: .text%__1cIPhaseIFG2t6MpnFArena__v_; -text: .text%__1cHMatcherUvalidate_null_checks6M_v_; -text: .text%__1cHCompileOcompute_old_SP6M_i_; -text: .text%__1cJPhaseLive2t6MrknIPhaseCFG_rnILRG_List_pnFArena__v_; -text: .text%__1cMPhaseChaitinRbuild_ifg_virtual6M_v_; -text: .text%__1cXPhaseAggressiveCoalesceGverify6M_v_; -text: .text%__1cJStartNodeJideal_reg6kM_I_; -text: .text%__1cHMatcher2t6MrnJNode_List__v_; -text: .text%__1cFArena2t6ML_v_; -text: .text%__1cWNode_Backward_Iterator2t6MpnENode_rnJVectorSet_rnJNode_List_rnLBlock_Array__v_; -text: .text%__1cHMatcherFmatch6M_v_; -text: .text%__1cFStateM_sub_Op_Goto6MpknENode__v_; -text: .text%__1cIPhaseCFGQGlobalCodeMotion6MrnHMatcher_IrnJNode_List__v_; -text: .text%__1cIPhaseCFGYEstimate_Block_Frequency6M_v_; -text: .text%__1cIPhaseCFGJbuild_cfg6M_I_; -text: .text%__1cHCompileICode_Gen6M_v_; -text: .text%__1cMPhaseChaitin2t6MIrnIPhaseCFG_rnHMatcher__v_; -text: .text%__1cMPhaseChaitinRRegister_Allocate6M_v_; -text: .text%__1cMPhaseChaitinGde_ssa6M_v_; -text: .text%__1cNPhaseRegAllocTpd_preallocate_hook6M_v_; -text: .text%__1cHMatcherPinit_spill_mask6MpnENode__v_; -text: .text%__1cHMatcherTFixup_Save_On_Entry6M_v_; -text: .text%__1cHMatcherVinit_first_stack_mask6M_v_; -text: .text%__1cIPhaseCFG2t6MpnFArena_pnIRootNode_rnHMatcher__v_; -text: .text%__1cGTarjanIsetdepth6MI_v_; -text: .text%__1cIPhaseCFGKDominators6M_v_; -text: .text%__1cNPhaseRegAlloc2t6MIrnIPhaseCFG_rnHMatcher_pF_v_v_; -text: .text%__1cIPhaseCFGVschedule_pinned_nodes6MrnJVectorSet__v_; -text: .text%__1cHCompileTframe_size_in_words6kM_i_; -text: .text%__1cOCompileWrapper2T6M_v_; -text: .text%__1cHCompileYinit_scratch_buffer_blob6M_v_; -text: .text%__1cNPhasePeephole2t6MpnNPhaseRegAlloc_rnIPhaseCFG__v_; -text: .text%__1cHCompileGOutput6M_v_; -text: .text%__1cHCompileQShorten_branches6MpnFLabel_ri333_v_; -text: .text%__1cHCompileLFill_buffer6M_v_; -text: .text%__1cHCompileTFillExceptionTables6MIpI1pnFLabel__v_; -text: .text%__1cHCompileRScheduleAndBundle6M_v_; -text: .text%__1cOMachPrologNodeFreloc6kM_i_; -text: .text%__1cWsize_exception_handler6F_I_; -text: .text%__1cWImplicitExceptionTableIset_size6MI_v_; -text: .text%__1cNPhasePeepholeMdo_transform6M_v_; -text: .text%__1cMPhaseChaitinMfixup_spills6M_v_; -text: .text%__1cNPhaseRegAllocPalloc_node_regs6Mi_v_; -text: .text%__1cLdo_liveness6FpnNPhaseRegAlloc_pnIPhaseCFG_pnKBlock_List_ipnFArena_pnEDict__v_: buildOopMap.o; -text: .text%__1cHCompileMBuildOopMaps6M_v_; -text: .text%__1cMPhaseChaitinbApost_allocate_copy_removal6M_v_; -text: .text%__1cRsarL_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; -text: .text%__1cFStateM_sub_Op_CmpL6MpknENode__v_; -text: .text%__1cJloadSNodeFreloc6kM_i_; -text: .text%__1cFStateN_sub_Op_LoadS6MpknENode__v_; -text: .text%__1cSInterpreterRuntimeOprofile_method6FpnKJavaThread_pC_i_; -text: .text%__1cOCompiledRFrame2t6MnFframe_pnKJavaThread_pnGRFrame__v_; -text: .text%__1cOCompiledRFrameKtop_method6kM_nMmethodHandle__; -text: .text%__1cKoopFactoryOnew_methodData6FnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cPmethodDataKlassIallocate6MnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cNxorI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRmethodDataOopDescPpost_initialize6MpnOBytecodeStream__v_; -text: .text%__1cHRetNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateO_sub_Op_Return6MpknENode__v_; -text: .text%__1cHRetNodeFreloc6kM_i_; -text: .text%__1cKScopeValueJread_from6FpnTDebugInfoReadStream__p0_; -text: .text%__1cOcompiledVFrameScreate_stack_value6kMpnKScopeValue__pnKStackValue__; -text: .text%__1cQleaPIdxScaleNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRindIndexScaleOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cNSignatureInfoHdo_byte6M_v_; -text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; -text: .text%__1cNandI_rRegNodeErule6kM_I_; -text: .text%__1cIMulINodeGadd_id6kM_pknEType__; -text: .text%__1cVcompiledICHolderKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cNmodI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cKloadUBNodeMideal_Opcode6kM_i_; -text: .text%__1cQsalI_rReg_CLNodeMideal_Opcode6kM_i_; -text: .text%__1cJAssemblerEcmpq6MnHAddress_i_v_; -text: .text%__1cNloadConP0NodeFreloc6kM_i_; -text: .text%__1cSmembar_acquireNodeLbottom_type6kM_pknEType__; -text: .text%__1cOMacroAssemblerKincrementq6MpnMRegisterImpl_i_v_; -text: .text%__1cRsarI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; -text: .text%__1cLConvL2INodeJideal_reg6kM_I_; -text: .text%JVM_GetClassNameUTF; -text: .text%__1cNprefetchwNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOjmpLoopEndNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNprefetchwNodeFreloc6kM_i_; -text: .text%__1cIAddLNodeJideal_reg6kM_I_; -text: .text%__1cILocation2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cKstoreCNodeFreloc6kM_i_; -text: .text%__1cWCallLeafNoFPDirectNodeKmethod_set6Ml_v_; -text: .text%__1cOPhaseIdealLoopOplace_near_use6kMpnENode__2_; -text: .text%__1cHi2bNodeMideal_Opcode6kM_i_; -text: .text%__1cNLocationValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cIMulLNodeJideal_reg6kM_I_; -text: .text%__1cNsubL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cFStateN_sub_Op_LoadB6MpknENode__v_; -text: .text%__1cNnegI_rRegNodeErule6kM_I_; -text: .text%__1cNFingerprinterJdo_double6M_v_; -text: .text%JVM_FindClassFromClass; -text: .text%__1cKcmpOpUOperEless6kM_i_; -text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_; -text: .text%__1cKReflectionDbox6FpnGjvalue_nJBasicType_pnGThread__pnHoopDesc__; -text: .text%__1cLBoxLockNodeEhash6kM_I_; -text: .text%__1cJOopMapSetMgrow_om_data6M_v_; -text: .text%__1cWandI_rReg_imm65535NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cWandI_rReg_imm65535NodeErule6kM_I_; -text: .text%__1cZInterpreterMacroAssemblerGpush_i6MpnMRegisterImpl__v_; -text: .text%__1cNcmovI_regNodeErule6kM_I_; -text: .text%__1cRsalL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNGrowableArray4CpnKInlineTree__Egrow6Mi_v_; -text: .text%__1cLConvF2DNodeGOpcode6kM_i_; -text: .text%__1cISubLNodeLbottom_type6kM_pknEType__; -text: .text%__1cSmembar_acquireNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmembar_acquireNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNmodL_rRegNodeErule6kM_I_; -text: .text%__1cJAssemblerDret6Mi_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; -text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; -text: .text%JVM_NewInstanceFromConstructor; -text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_; -text: .text%__1cFStateL_sub_Op_OrI6MpknENode__v_; -text: .text%JVM_IHashCode; -text: .text%__1cMtlsLoadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cEUTF8Ounicode_length6Fpkc_i_; -text: .text%__1cHTypePtrEmake6FnETypeFTYPES_n0ADPTR_i_pk0_; -text: .text%__1cPfieldDescriptorUstring_initial_value6kMpnGThread__pnHoopDesc__; -text: .text%__1cNxorI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cIregFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLMachUEPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLOpaque2NodeLbottom_type6kM_pknEType__; -text: .text%__1cNtestL_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadFNodePoper_input_base6kM_I_; -text: .text%__1cHRetDataKcell_count6M_i_; -text: .text%__1cSinstanceKlassKlassOklass_oop_size6kM_i_; -text: .text%__1cSobjArrayKlassKlassOklass_oop_size6kM_i_; -text: .text%__1cPCallRuntimeNodeGOpcode6kM_i_; -text: .text%__1cLsymbolKlassOklass_oop_size6kM_i_; -text: .text%__1cLmethodKlassOklass_oop_size6kM_i_; -text: .text%__1cMdecI_memNodePoper_input_base6kM_I_; -text: .text%__1cRconstantPoolKlassOklass_oop_size6kM_i_; -text: .text%__1cVcompiledICHolderKlassOklass_oop_size6kM_i_; -text: .text%__1cTtypeArrayKlassKlassOklass_oop_size6kM_i_; -text: .text%__1cWconstantPoolCacheKlassOklass_oop_size6kM_i_; -text: .text%__1cQconstMethodKlassOklass_oop_size6kM_i_; -text: .text%__1cPmethodDataKlassOklass_oop_size6kM_i_; -text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; -text: .text%__1cSsafePoint_pollNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIPSOldGenHcompact6M_v_; -text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_; -text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; -text: .text%__1cQObjectStartArrayFreset6M_v_; -text: .text%__1cIPSOldGenPadjust_pointers6M_v_; -text: .text%__1cScompP_mem_rRegNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJloadBNodeFreloc6kM_i_; -text: .text%__1cUandI_rReg_imm255NodeMideal_Opcode6kM_i_; -text: .text%__1cScompP_mem_rRegNodeFreloc6kM_i_; -text: .text%__1cKciTypeFlowLStateVectorJdo_aaload6MpnQciBytecodeStream__v_; -text: .text%__1cNaddL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRaddI_rReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsubI_rReg_memNodeHtwo_adr6kM_I_; -text: .text%__1cIModLNodeGOpcode6kM_i_; -text: .text%__1cIMaxINodeLbottom_type6kM_pknEType__; -text: .text%__1cFParseMdo_checkcast6M_v_; -text: .text%__1cIMulINodeGmul_id6kM_pknEType__; -text: .text%__1cIregDOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIMulDNodeGOpcode6kM_i_; -text: .text%__1cRsarL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNsubL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cFParseLarray_store6MnJBasicType__v_; -text: .text%JVM_FindClassFromClassLoader; -text: .text%JVM_FindClassFromBootLoader; -text: .text%__1cRmulL_rReg_immNodeMcisc_operand6kM_i_; -text: .text%__1cMMergeMemNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cLPhaseValuesKis_IterGVN6M_pnMPhaseIterGVN__; -text: .text%__1cQciTypeArrayKlassJmake_impl6FnJBasicType__p0_; -text: .text%__1cFStateM_sub_Op_AddL6MpknENode__v_; -text: .text%__1cQciTypeArrayKlassEmake6FnJBasicType__p0_; -text: .text%__1cNSCMemProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKciTypeFlowLStateVectorMdo_checkcast6MpnQciBytecodeStream__v_; -text: .text%__1cMrax_RegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%lwp_mutex_init: os_solaris.o; -text: .text%__1cJStubQdDueueGcommit6Mi_v_; -text: .text%__1cJStubQdDueueHrequest6Mi_pnEStub__; -text: .text%__1cNmodL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cQjava_lang_ThreadRget_thread_status6FpnHoopDesc__n0AMThreadStatus__; -text: .text%__1cMincI_memNodePoper_input_base6kM_I_; -text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; -text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; -text: .text%__1cJAssemblerEmovl6MnHAddress_i_v_; -text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cNandI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIModINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTno_rax_rdx_RegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cJAssemblerGmovzwl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cRmulL_rReg_immNodeErule6kM_I_; -text: .text%__1cZCallDynamicJavaDirectNodePoper_input_base6kM_I_; -text: .text%__1cOGenerateOopMapXdo_return_monitor_check6M_v_; -text: .text%__1cFStateP_sub_Op_ConvL2I6MpknENode__v_; -text: .text%__1cLOptoRuntimebBcomplete_monitor_enter_Type6F_pknITypeFunc__; -text: .text%__1cIGraphKitMnext_monitor6M_i_; -text: .text%__1cLBoxLockNode2t6Mi_v_; -text: .text%__1cIGraphKitLshared_lock6MpnENode__pnMFastLockNode__; -text: .text%__1cMloadConDNodeMideal_Opcode6kM_i_; -text: .text%__1cNCompileBrokerNallocate_task6F_pnLCompileTask__; -text: .text%__1cMCompileQdDueueDadd6MpnLCompileTask__v_; -text: .text%__1cRxorI_rReg_memNodeErule6kM_I_; -text: .text%__1cMCompileQdDueueDget6M_pnLCompileTask__; -text: .text%__1cRsarI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCompileTaskWrapper2t6MpnLCompileTask__v_; -text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; -text: .text%__1cXmembar_acquire_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_MulL6MpknENode__v_; -text: .text%__1cCosPhint_no_preempt6F_v_; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_i_v_; -text: .text%__1cNCompileBrokerJfree_task6FpnLCompileTask__v_; -text: .text%__1cSCompileTaskWrapper2T6M_v_; -text: .text%__1cLCompileTaskEfree6M_v_; -text: .text%__1cNnegI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMincI_memNodeMideal_Opcode6kM_i_; -text: .text%__1cRandL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cRaddI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__; -text: .text%jni_NewString: jni.o; -text: .text%__1cFStateM_sub_Op_AndL6MpknENode__v_; -text: .text%__1cKloadUBNodePoper_input_base6kM_I_; -text: .text%__1cPcmovI_reg_lNodeErule6kM_I_; -text: .text%__1cNSharedRuntimebJcontinuation_for_implicit_exception6FpnKJavaThread_pCn0AVImplicitExceptionKind__3_; -text: .text%__1cIimmDOperJconstantD6kM_d_; -text: .text%__1cFParsePmerge_exception6Mi_v_; -text: .text%__1cXmembar_acquire_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cNGrowableArray4CpnIciObject__2t6MpnFArena_iirk1_v_; -text: .text%__1cNGrowableArray4CpnIciObject__JappendAll6Mpk2_v_; -text: .text%__1cNGrowableArray4CpnIciMethod__2t6MpnFArena_iirk1_v_; -text: .text%__1cNGrowableArray4CpnHciKlass__2t6MpnFArena_iirk1_v_; -text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; -text: .text%__1cNGrowableArray4CpnPciReturnAddress__2t6MpnFArena_iirk1_v_; -text: .text%__1cFciEnvWget_method_from_handle6MpnI_jobject__pnIciMethod__; -text: .text%__1cNCompileBrokerVpush_jni_handle_block6F_v_; -text: .text%__1cIJVMStateNmonitor_depth6kM_i_; -text: .text%__1cHciKlassSsuper_check_offset6M_I_; -text: .text%__1cFciEnv2T6M_v_; -text: .text%__1cKstoreBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNCompileBrokerUpop_jni_handle_block6F_v_; -text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cFStateQ_sub_Op_FastLock6MpknENode__v_; -text: .text%__1cXmembar_acquire_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvD2I_reg_regNodeErule6kM_I_; -text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; -text: .text%__1cWImplicitExceptionTableCat6kMI_I_; -text: .text%__1cWImplicitExceptionTable2t6MpknHnmethod__v_; -text: .text%__1cLVtableStubsPstub_containing6FpC_pnKVtableStub__; -text: .text%__1cNFingerprinterIdo_float6M_v_; -text: .text%__1cHnmethodbJcontinuation_for_implicit_exception6MpC_1_; -text: .text%__1cLRShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cUjmpLoopEnd_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cUjmpLoopEnd_shortNodeMideal_Opcode6kM_i_; -text: .text%__1cKEntryPoint2t6MpC11111111_v_; -text: .text%jni_GetObjectClass: jni.o; -text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_; -text: .text%__1cISubLNodeDsub6kMpknEType_3_3_; -text: .text%__1cJloadSNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRtestI_reg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cSstring_compareNodePoper_input_base6kM_I_; -text: .text%__1cNcmovI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMdecI_memNodeMideal_Opcode6kM_i_; -text: .text%__1cMrax_RegLOperEtype6kM_pknEType__; -text: .text%__1cIXorINodeGadd_id6kM_pknEType__; -text: .text%__1cNtestP_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPcmovI_reg_gNodeHtwo_adr6kM_I_; -text: .text%__1cKBinaryNodeGOpcode6kM_i_; -text: .text%__1cNxorI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cFStateO_sub_Op_Binary6MpknENode__v_; -text: .text%JVM_GetClassLoader; -text: .text%__1cMstoreSSPNodeMideal_Opcode6kM_i_; -text: .text%__1cINodeHashIround_up6FI_I_; -text: .text%__1cHCompileKinit_start6MpnJStartNode__v_; -text: .text%__1cOPhaseTransform2t6MpnFArena_nFPhaseLPhaseNumber__v_; -text: .text%__1cLPhaseValues2t6MpnFArena_I_v_; -text: .text%__1cRaddP_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cINodeHash2t6MpnFArena_I_v_; -text: .text%__1cRaddI_rReg_memNodeHtwo_adr6kM_I_; -text: .text%__1cOMacroAssemblerFalign6Mi_v_; -text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%lwp_cond_init: os_solaris.o; -text: .text%__1cSmembar_releaseNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmembar_releaseNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOPhaseIdealLoopVclone_up_backedge_goo6MpnENode_22_2_; -text: .text%__1cSInterpreterCodeletKinitialize6MpkcnJBytecodesECode__v_; -text: .text%__1cNxorI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNaddP_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerZcheck_and_handle_popframe6MpnMRegisterImpl__v_; -text: .text%__1cOloadConL32NodeErule6kM_I_; -text: .text%__1cHi2bNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKcmpOpUOperKless_equal6kM_i_; -text: .text%__1cFParseTprofile_switch_case6Mi_v_; -text: .text%__1cKNativeJumpbEcheck_verified_entry_alignment6FpC1_v_; -text: .text%__1cFParseSjump_switch_ranges6MpnENode_pnLSwitchRange_4i_v_; -text: .text%__1cFParseOmerge_new_path6Mi_v_; -text: .text%__1cNandI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cOleaPIdxOffNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNCompileBrokerRassign_compile_id6FnMmethodHandle_i_I_; -text: .text%__1cIMulFNodeGOpcode6kM_i_; -text: .text%__1cNtestU_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; -text: .text%__1cITemplateIgenerate6MpnZInterpreterMacroAssembler__v_; -text: .text%__1cITemplateKinitialize6MinITosState_1pFi_vi_v_; -text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_; -text: .text%__1cNloadConL0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEcall6MrnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; -text: .text%__1cKC2CompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cQshrI_rReg_CLNodeMideal_Opcode6kM_i_; -text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_; -text: .text%__1cFciEnvbOcheck_for_system_dictionary_modification6MpnIciMethod__v_; -text: .text%__1cMelapsedTimerDadd6M0_v_; -text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTimer_pnLCompileTask__v_; -text: .text%__1cICodeHeapMinsert_after6MpnJFreeBlock_2_v_; -text: .text%__1cKloadUBNodeErule6kM_I_; -text: .text%__1cQsalL_rReg_CLNodeMideal_Opcode6kM_i_; -text: .text%__1cPstoreImmI16NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; -text: .text%__1cRmulL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVExceptionHandlerTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cPcmovI_reg_lNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHnmethod2n6FLi_pv_; -text: .text%__1cKTypeRawPtrFxdual6kM_pknEType__; -text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; -text: .text%__1cFParseQjump_if_fork_int6MpnENode_2nIBoolTestEmask__pnGIfNode__; -text: .text%__1cWandI_rReg_imm65535NodeHtwo_adr6kM_I_; -text: .text%__1cINodeHashUremove_useless_nodes6MrnJVectorSet__v_; -text: .text%__1cQUnique_Node_ListUremove_useless_nodes6MrnJVectorSet__v_; -text: .text%__1cKInlineTreeWbuild_inline_tree_root6F_p0_; -text: .text%__1cHCompileWprint_compile_messages6M_v_; -text: .text%__1cQsalI_rReg_CLNodeErule6kM_I_; -text: .text%__1cHCompileRbuild_start_state6MpnJStartNode_pknITypeFunc__pnIJVMState__; -text: .text%__1cHCompileVidentify_useful_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cIciMethodRbuild_method_data6M_v_; -text: .text%__1cHCompileIOptimize6M_v_; -text: .text%__1cHCompileUremove_useless_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cSPhaseRemoveUseless2t6MpnIPhaseGVN_pnQUnique_Node_List__v_; -text: .text%__1cHCompileLFinish_Warm6M_v_; -text: .text%__1cHCompileLInline_Warm6M_i_; -text: .text%__1cMPhaseIterGVN2t6MpnIPhaseGVN__v_; -text: .text%__1cIciMethodRbuild_method_data6MnMmethodHandle__v_; -text: .text%__1cSstring_compareNodeErule6kM_I_; -text: .text%__1cbAfinal_graph_reshaping_walk6FrnKNode_Stack_pnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cScompI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cJStartNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNTemplateTableKtransition6FnITosState_1_v_; -text: .text%__1cIPhaseCCPJtransform6MpnENode__2_; -text: .text%__1cHCompileNreturn_values6MpnIJVMState__v_; -text: .text%__1cMPhaseIterGVN2t6Mp0_v_; -text: .text%__1cIPhaseCCP2t6MpnMPhaseIterGVN__v_; -text: .text%__1cIPhaseCCPHanalyze6M_v_; -text: .text%__1cIPhaseCCPMdo_transform6M_v_; -text: .text%__1cOcompI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNsubL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLklassItableUcompute_itable_index6FpnNmethodOopDesc__i_; -text: .text%__1cWpoll_return_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cWConstantPoolCacheEntrySset_interface_call6MnMmethodHandle_i_v_; -text: .text%__1cJloadFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_; -text: .text%__1cPsalL_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; -text: .text%__1cOClearArrayNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cHMatcherbDinterpreter_frame_pointer_reg6F_i_; -text: .text%__1cQorI_rReg_immNodeErule6kM_I_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_; -text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; -text: .text%__1cKcmpOpUOperHgreater6kM_i_; -text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cRmulI_rReg_immNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_epilog6MnITosState_i_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_prolog6MnITosState_i_v_; -text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__; -text: .text%__1cLBoxLockNodeDcmp6kMrknENode__I_; -text: .text%__1cMTailCallNodeGOpcode6kM_i_; -text: .text%__1cJChunkPoolMfree_all_but6ML_v_; -text: .text%__1cRsalL_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cNdecL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__; -text: .text%__1cZCallDynamicJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOemit_d64_reloc6FrnKCodeBuffer_lrknQRelocationHolder_i_v_; -text: .text%__1cRtestI_reg_immNodeErule6kM_I_; -text: .text%__1cIAddFNodeGOpcode6kM_i_; -text: .text%__1cSstring_compareNodeMideal_Opcode6kM_i_; -text: .text%__1cZCallDynamicJavaDirectNodeSalignment_required6kM_i_; -text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cQorI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUParallelScavengeHeapIcapacity6kM_L_; -text: .text%__1cJAssemblerEcmpq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cPDictionaryEntryVadd_protection_domain6MpnHoopDesc__v_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectMset_override6FpnHoopDesc_C_v_; -text: .text%__1cRCardTableModRefBSPclear_MemRegion6MnJMemRegion__v_; -text: .text%__1cNdivL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cFParsebLincrement_and_test_invocation_counter6Mi_v_; -text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%JVM_IsInterrupted; -text: .text%__1cFParseRarray_store_check6M_v_; -text: .text%__1cNobjArrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cScompL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cTmembar_volatileNodeMideal_Opcode6kM_i_; -text: .text%__1cXSignatureHandlerLibraryKinitialize6F_v_; -text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_; -text: .text%__1cSInterpreterRuntimeTprepare_native_call6FpnKJavaThread_pnNmethodOopDesc__v_; -text: .text%__1cNGrowableArray4CL_Efind6kMrkL_i_; -text: .text%__1cSInterpreterRuntimeNquicken_io_cc6FpnKJavaThread__v_; -text: .text%__1cHOrINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cSobjArrayKlassKlassXallocate_objArray_klass6MinLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cKPerfMemoryFalloc6FL_pc_; -text: .text%__1cIPerfData2T6M_v_; -text: .text%__1cIPerfDataMcreate_entry6MnJBasicType_LL_v_; -text: .text%__1cKPerfMemoryMmark_updated6F_v_; -text: .text%__1cPcmovI_reg_gNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEfrom6F_pnMRegisterImpl__; -text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_; -text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_; -text: .text%__1cLStrCompNodeKmatch_edge6kMI_I_; -text: .text%__1cOjmpLoopEndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_ReleaseStringUTFChars: jni.o; -text: .text%jni_GetStringUTFChars: jni.o; -text: .text%__1cFStateW_sub_Op_CountedLoopEnd6MpknENode__v_; -text: .text%__1cNFingerprinterIdo_short6M_v_; -text: .text%__1cJAssemblerEincq6MpnMRegisterImpl__v_; -text: .text%__1cFTypeDEmake6Fd_pk0_; -text: .text%__1cScompU_rReg_memNodeFreloc6kM_i_; -text: .text%__1cNtestL_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseLdo_newarray6MnJBasicType__v_; -text: .text%__1cWCallLeafNoFPDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cWCallLeafNoFPDirectNodeFreloc6kM_i_; -text: .text%__1cFStateU_sub_Op_CallLeafNoFP6MpknENode__v_; -text: .text%JVM_FindLibraryEntry; -text: .text%JVM_GetMethodIxExceptionTableEntry; -text: .text%__1cNObjectMonitorHRecycle6M_v_; -text: .text%__1cISubLNodeGadd_id6kM_pknEType__; -text: .text%__1cNmodI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRxorI_rReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMachNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRmulI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMachOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cIMachOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_; -text: .text%__1cNandI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cIDivINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNnegI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cFStateS_sub_Op_ClearArray6MpknENode__v_; -text: .text%__1cIXorINodeJideal_reg6kM_I_; -text: .text%__1cMrep_stosNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateO_sub_Op_StoreL6MpknENode__v_; -text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__; -text: .text%__1cIMinINodeGadd_id6kM_pknEType__; -text: .text%__1cKstoreLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreLNodeFreloc6kM_i_; -text: .text%__1cMstoreSSPNodeLbottom_type6kM_pknEType__; -text: .text%__1cRsubI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cTconvF2D_reg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_; -text: .text%__1cScompU_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNFingerprinterHdo_char6M_v_; -text: .text%__1cMloadConDNodeLbottom_type6kM_pknEType__; -text: .text%__1cNGrowableArray4CpnHoopDesc__Uclear_and_deallocate6M_v_; -text: .text%__1cLMachUEPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZget_mirror_from_signature6FnMmethodHandle_pnPSignatureStream_pnGThread__pnHoopDesc__; -text: .text%__1cNGrowableArray4CpnJNode_List__Egrow6Mi_v_; -text: .text%__1cMciArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cKarrayKlassKjava_super6kM_pnMklassOopDesc__; -text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; -text: .text%__1cJCodeCacheLgc_prologue6F_v_; -text: .text%__1cJCodeCacheLgc_epilogue6F_v_; -text: .text%__1cVLoaderConstraintTableYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_; -text: .text%__1cJMarkSweepMadjust_marks6F_v_; -text: .text%__1cJMarkSweepNrestore_marks6F_v_; -text: .text%__1cHThreadsLgc_epilogue6F_v_; -text: .text%__1cHThreadsLgc_prologue6F_v_; -text: .text%__1cQSystemDictionaryPplaceholders_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryYalways_strong_classes_do6FpnKOopClosure__v_; -text: .text%__1cUPSAdaptiveSizePolicyWmajor_collection_begin6M_v_; -text: .text%__1cUPSAdaptiveSizePolicyUmajor_collection_end6MLnHGCCauseFCause__v_; -text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_; -text: .text%__1cNGrowableArray4CpnFKlass__Uclear_and_deallocate6M_v_; -text: .text%__1cKPSYoungGenHcompact6M_v_; -text: .text%__1cKPSYoungGenPadjust_pointers6M_v_; -text: .text%__1cKPSYoungGenKprecompact6M_v_; -text: .text%__1cLPSMarkSweepPallocate_stacks6F_v_; -text: .text%__1cLPSMarkSweepRdeallocate_stacks6F_v_; -text: .text%__1cLPSMarkSweepRmark_sweep_phase26F_v_; -text: .text%__1cLPSMarkSweepRmark_sweep_phase36F_v_; -text: .text%__1cLPSMarkSweepRmark_sweep_phase46F_v_; -text: .text%__1cLPSMarkSweepbAreset_millis_since_last_gc6F_v_; -text: .text%__1cUPSMarkSweepDecoratorbHset_destination_decorator_tenured6F_v_; -text: .text%__1cUPSMarkSweepDecoratorbIset_destination_decorator_perm_gen6F_v_; -text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cIPSOldGenKprecompact6M_v_; -text: .text%__1cVLoaderConstraintTableYpurge_loader_constraints6MpnRBoolObjectClosure__v_; -text: .text%__1cJPSPermGenQcompute_new_size6ML_v_; -text: .text%__1cJPSPermGenKprecompact6M_v_; -text: .text%__1cIDivINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIciSymbolHas_utf86M_pkc_; -text: .text%__1cQorI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cCosTnative_java_library6F_pv_; -text: .text%__1cSTailCalljmpIndNodePoper_input_base6kM_I_; -text: .text%__1cOstackSlotPOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cOstackSlotPOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cNandI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cPstoreImmI16NodeFreloc6kM_i_; -text: .text%__1cPstoreImmI16NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; -text: .text%jni_ReleaseStringCritical: jni.o; -text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; -text: .text%jni_GetStringCritical: jni.o; -text: .text%__1cIPSOldGenOgen_size_limit6M_L_; -text: .text%__1cUPSAdaptiveSizePolicybQpromo_increment_with_supplement_aligned_up6ML_L_; -text: .text%__1cUParallelScavengeHeapOresize_old_gen6ML_v_; -text: .text%__1cUPSAdaptiveSizePolicyPpromo_increment6MLI_L_; -text: .text%__1cWandI_rReg_imm65535NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIPSOldGenGresize6ML_v_; -text: .text%__1cKConv2BNodeGOpcode6kM_i_; -text: .text%__1cKarrayKlassOset_alloc_size6MI_v_; -text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__; -text: .text%__1cNstoreImmINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cLConvI2FNodeGOpcode6kM_i_; -text: .text%__1cNcmovI_regNodeHtwo_adr6kM_I_; -text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__; -text: .text%__1cIGraphKitbKcombine_and_pop_all_exception_states6M_pnNSafePointNode__; -text: .text%__1cLRethrowNode2t6MpnENode_22222_v_; -text: .text%__1cHCompileSrethrow_exceptions6MpnIJVMState__v_; -text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; -text: .text%__1cKReflectionTget_exception_types6FnMmethodHandle_pnGThread__nOobjArrayHandle__; -text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_i_v_; -text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; -text: .text%__1cFStateP_sub_Op_Rethrow6MpknENode__v_; -text: .text%__1cQComputeCallStackIdo_array6Mii_v_; -text: .text%__1cNdecL_rRegNodeErule6kM_I_; -text: .text%__1cLRethrowNodeJideal_reg6kM_I_; -text: .text%__1cNstoreImmINodeFreloc6kM_i_; -text: .text%__1cURethrowExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMNativeLookupNpure_jni_name6FnMmethodHandle__pc_; -text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_; -text: .text%__1cURethrowExceptionNodeFreloc6kM_i_; -text: .text%__1cTcompareAndSwapLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateX_sub_Op_CompareAndSwapL6MpknENode__v_; -text: .text%__1cNSCMemProjNodeJideal_reg6kM_I_; -text: .text%__1cTcompareAndSwapLNodeFreloc6kM_i_; -text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_; -text: .text%__1cOcompP_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; -text: .text%__1cMmulD_immNodeMideal_Opcode6kM_i_; -text: .text%__1cPcmpD_cc_regNodeMideal_Opcode6kM_i_; -text: .text%__1cJLoadPNodeMstore_Opcode6kM_i_; -text: .text%__1cJCMoveNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKciTypeFlowLStateVectorEtrap6MpnQciBytecodeStream_pnHciKlass_i_v_; -text: .text%__1cIDivLNodeLbottom_type6kM_pknEType__; -text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_; -text: .text%__1cOGenerateOopMapKinterp_all6M_v_; -text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; -text: .text%__1cOGenerateOopMapRinit_basic_blocks6M_v_; -text: .text%__1cOGenerateOopMapYsetup_method_entry_state6M_v_; -text: .text%__1cFframeZinterpreter_frame_set_mdx6Ml_v_; -text: .text%__1cOGenerateOopMapbAmake_context_uninitialized6M_v_; -text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_; -text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cOGenerateOopMapKinit_state6M_v_; -text: .text%__1cOGenerateOopMapNinitialize_bb6M_v_; -text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; -text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; -text: .text%__1cOGenerateOopMapbImark_bbheaders_and_count_gc_points6M_v_; -text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; -text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; -text: .text%__1cRxorI_rReg_memNodeHtwo_adr6kM_I_; -text: .text%__1cFStateM_sub_Op_XorI6MpknENode__v_; -text: .text%__1cISubLNodeJideal_reg6kM_I_; -text: .text%__1cLStrCompNodeLbottom_type6kM_pknEType__; -text: .text%__1cQOopMapCacheEntryFflush6M_v_; -text: .text%__1cQOopMapCacheEntryRallocate_bit_mask6M_v_; -text: .text%__1cQOopMapCacheEntryTdeallocate_bit_mask6M_v_; -text: .text%__1cQOopMapCacheEntryEfill6MnMmethodHandle_i_v_; -text: .text%__1cRsalL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopOadd_constraint6MiipnENode_22p23_v_; -text: .text%jni_IsAssignableFrom: jni.o; -text: .text%__1cOstackSlotPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFParseWcheck_interpreter_type6MpnENode_pknEType_rpnNSafePointNode__2_; -text: .text%__1cNaddP_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; -text: .text%__1cOGenerateOopMapKpp_new_ref6MpnNCellTypeState_i_v_; -text: .text%__1cNcmovI_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cQOopMapCacheEntryIset_mask6MpnNCellTypeState_2i_v_; -text: .text%__1cOGenerateOopMapVresult_for_basicblock6Mi_v_; -text: .text%__1cTOopMapForCacheEntry2t6MnMmethodHandle_ipnQOopMapCacheEntry__v_; -text: .text%__1cPcmpD_cc_immNodeMideal_Opcode6kM_i_; -text: .text%__1cTOopMapForCacheEntryLcompute_map6MpnGThread__v_; -text: .text%__1cTconvF2D_reg_memNodePoper_input_base6kM_I_; -text: .text%__1cNdivL_rRegNodeErule6kM_I_; -text: .text%__1cRmulL_rReg_immNodeQuse_cisc_RegMask6M_v_; -text: .text%JVM_GetCallerClass; -text: .text%__1cQsalL_rReg_CLNodeErule6kM_I_; -text: .text%__1cJloadLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cXMachCallDynamicJavaNodePret_addr_offset6M_i_; -text: .text%__1cRxorI_rReg_immNodeErule6kM_I_; -text: .text%__1cZCallDynamicJavaDirectNodePcompute_padding6kMi_i_; -text: .text%__1cZCallDynamicJavaDirectNodeKmethod_set6Ml_v_; -text: .text%__1cPcmovI_reg_lNodeHtwo_adr6kM_I_; -text: .text%__1cLConvD2INodeGOpcode6kM_i_; -text: .text%__1cNcmovP_regNodeMideal_Opcode6kM_i_; -text: .text%__1cTconvI2F_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cKstorePNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQorI_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; -text: .text%__1cUjmpLoopEnd_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cFParseSjump_if_false_fork6MpnGIfNode_ii_v_; -text: .text%__1cJAssemblerEshll6MpnMRegisterImpl_i_v_; -text: .text%__1cUjmpLoopEnd_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPCountedLoopNodeGstride6kM_pnENode__; -text: .text%__1cHTypeAryFxdual6kM_pknEType__; -text: .text%__1cOMacroAssemblerKverify_oop6MpnMRegisterImpl_pkc_v_; -text: .text%__1cNnegI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLencode_copy6FrnKCodeBuffer_ii_v_; -text: .text%__1cPcmpD_cc_regNodeMcisc_operand6kM_i_; -text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_; -text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_; -text: .text%__1cPcmpD_cc_regNodeErule6kM_I_; -text: .text%__1cNtestU_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRandL_rReg_immNodeErule6kM_I_; -text: .text%__1cIMulINodeKmul_opcode6kM_i_; -text: .text%__1cIMulINodeKadd_opcode6kM_i_; -text: .text%__1cRxorI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTno_rax_rdx_RegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQsalI_rReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLRShiftLNodeJideal_reg6kM_I_; -text: .text%jni_SetBooleanField: jni.o; -text: .text%__1cVLoaderConstraintTableWfind_constrained_klass6MnMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cIModLNodeLbottom_type6kM_pknEType__; -text: .text%__1cRxorI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQorI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cODeoptimizationVtrap_state_has_reason6Fii_i_; -text: .text%__1cOloadConL32NodeMideal_Opcode6kM_i_; -text: .text%__1cNGrowableArray4Cpv_Egrow6Mi_v_; -text: .text%jni_GetFieldID: jni.o; -text: .text%__1cNGrowableArray4Cl_Egrow6Mi_v_; -text: .text%__1cLResourceObj2n6FLn0APallocation_type__pv_; -text: .text%__1cFframeZinterpreter_frame_set_mdp6MpC_v_; -text: .text%__1cFBlockNset_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; -text: .text%__1cIciObject2t6MpnHciKlass__v_; -text: .text%__1cScompL_rReg_immNodeErule6kM_I_; -text: .text%__1cQshrI_rReg_CLNodeErule6kM_I_; -text: .text%__1cFStateT_sub_Op_ThreadLocal6MpknENode__v_; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcinMsymbolHandle_4nGHandle_6_v_; -text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_; -text: .text%__1cMmulF_immNodeMideal_Opcode6kM_i_; -text: .text%__1cRandL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMloadConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUandI_rReg_imm255NodeErule6kM_I_; -text: .text%__1cRmulL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadConL0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMethodLivenessKBasicBlockFsplit6Mi_p1_; -text: .text%__1cFStateP_sub_Op_RShiftL6MpknENode__v_; -text: .text%__1cPClassFileParserbJparse_classfile_signature_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNaddP_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseHdo_irem6M_v_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_2_v_; -text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cZInterpreterMacroAssemblerYtest_method_data_pointer6MpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cRtestI_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHMatcherbAinterpreter_method_oop_reg6F_i_; -text: .text%__1cIciMethodRinterpreter_entry6M_pC_; -text: .text%__1cSTailCalljmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_SetByteArrayRegion: jni.o; -text: .text%__1cIMulINodeJideal_reg6kM_I_; -text: .text%__1cKCMovePNodeGOpcode6kM_i_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF_vc_v_; -text: .text%__1cGciType2t6MpnHciKlass__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_object6M_v_; -text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; -text: .text%__1cFParseTjump_if_always_fork6Mii_v_; -text: .text%__1cKloadUBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUciInstanceKlassKlassEmake6F_p0_; -text: .text%__1cJAssemblerDhlt6M_v_; -text: .text%__1cOMacroAssemblerEstop6Mpkc_v_; -text: .text%__1cQComputeCallStackIdo_float6M_v_; -text: .text%__1cKciTypeFlowLStateVectorLdo_newarray6MpnQciBytecodeStream__v_; -text: .text%__1cJloadFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcmovI_reg_lNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIciSymbolHbyte_at6Mi_i_; -text: .text%__1cNFingerprinterHdo_byte6M_v_; -text: .text%__1cENode2t6Mp0111111_v_; -text: .text%__1cIMaxINodeGadd_id6kM_pknEType__; -text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; -text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_; -text: .text%__1cMmulD_immNodeErule6kM_I_; -text: .text%__1cMaddF_regNodeMideal_Opcode6kM_i_; -text: .text%__1cbDjava_lang_reflect_ConstructorIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDesc__; -text: .text%__1cbDjava_lang_reflect_ConstructorPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorNset_modifiers6FpnHoopDesc_i_v_; -text: .text%JVM_DefineClassWithSource; -text: .text%__1cbDjava_lang_reflect_ConstructorZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cPciInstanceKlassNloader_handle6M_pnI_jobject__; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; -text: .text%__1cbDjava_lang_reflect_ConstructorJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorGcreate6FpnGThread__nGHandle__; -text: .text%__1cKstoreFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKstoreBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRxorI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cJAssemblerExorl6MpnMRegisterImpl_2_v_; -text: .text%__1cINegDNodeGOpcode6kM_i_; -text: .text%__1cNdecL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPjava_lang_ClassQprimitive_mirror6FnJBasicType__pnHoopDesc__; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_; -text: .text%__1cMloadConDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMrsi_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cRindIndexScaleOperNconstant_disp6kM_i_; -text: .text%jni_NewStringUTF: jni.o; -text: .text%__1cTAbstractInterpreterSBasicType_as_index6FnJBasicType__i_; -text: .text%__1cNtestI_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerGpush_l6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerFpop_i6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerIpush_ptr6MpnMRegisterImpl__v_; -text: .text%__1cOleaPIdxOffNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_i_v_; -text: .text%__1cNmulI_rRegNodeErule6kM_I_; -text: .text%__1cNGrowableArray4Ci_Uclear_and_deallocate6M_v_; -text: .text%__1cJloadDNodeMideal_Opcode6kM_i_; -text: .text%__1cENodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIDivLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIModINodeJideal_reg6kM_I_; -text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; -text: .text%__1cPshrL_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%JVM_GetClassCPTypes; -text: .text%__1cQComputeCallStackHdo_byte6M_v_; -text: .text%JVM_GetClassCPEntriesCount; -text: .text%JVM_GetClassFieldsCount; -text: .text%JVM_GetClassMethodsCount; -text: .text%__1cINodeHashEgrow6M_v_; -text: .text%__1cJloadBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKmul_hiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEnegq6MpnMRegisterImpl__v_; -text: .text%__1cNmodL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVCallRuntimeDirectNodePoper_input_base6kM_I_; -text: .text%__1cSstring_compareNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOjmpLoopEndNodeGnegate6M_v_; -text: .text%__1cQorI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVCallRuntimeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPsalL_rReg_1NodeErule6kM_I_; -text: .text%__1cPcmpD_cc_immNodeErule6kM_I_; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_2_v_; -text: .text%__1cHCompileQgrow_alias_types6M_v_; -text: .text%__1cUandI_rReg_imm255NodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_CallIntMethod: jni.o; -text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cPno_rax_RegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMrdx_RegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNmulI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cTconvF2D_reg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJLoadINodeMstore_Opcode6kM_i_; -text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cbFunnecessary_membar_volatileNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cENodeEgetd6kM_d_; -text: .text%__1cICmpFNodeGOpcode6kM_i_; -text: .text%__1cNGrowableArray4CpnOMethodLivenessKBasicBlock__Egrow6Mi_v_; -text: .text%__1cKstoreFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%JVM_SetClassSigners; -text: .text%__1cNdivL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cScompI_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZCallDynamicJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOstackSlotPOperFscale6kM_i_; -text: .text%__1cNmulI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cOstackSlotPOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cPsarL_rReg_2NodeErule6kM_I_; -text: .text%__1cOPhaseIdealLoopUpeeled_dom_test_elim6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%jni_NewByteArray: jni.o; -text: .text%__1cYinternal_word_RelocationFvalue6M_pC_; -text: .text%__1cFStateM_sub_Op_SubL6MpknENode__v_; -text: .text%__1cJAssemblerSemit_arith_operand6MipnMRegisterImpl_nHAddress_i_v_; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cMaddF_regNodeMcisc_operand6kM_i_; -text: .text%__1cOstackSlotPOperEtype6kM_pknEType__; -text: .text%__1cTconvD2I_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cMstoreSSPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreBNodeFreloc6kM_i_; -text: .text%__1cQshrI_rReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_SystemTout_offset_in_bytes6F_i_; -text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; -text: .text%__1cQjava_lang_SystemSin_offset_in_bytes6F_i_; -text: .text%__1cRandL_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_2_v_; -text: .text%__1cIAddFNodeLbottom_type6kM_pknEType__; -text: .text%__1cPciObjectFactoryPinsert_non_perm6Mrpn0ANNonPermObject_pnHoopDesc_pnIciObject__v_; -text: .text%__1cKmul_hiNodeErule6kM_I_; -text: .text%__1cFJNIidEfind6Mi_p0_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIgenerate6ML_v_; -text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; -text: .text%__1cILogDNodeGOpcode6kM_i_; -text: .text%__1cXSignatureHandlerLibraryLset_handler6FpnKCodeBuffer__pC_; -text: .text%JVM_IsPrimitiveClass; -text: .text%__1cIDivDNodeGOpcode6kM_i_; -text: .text%__1cMnegD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cPciObjArrayKlassJmake_impl6FpnHciKlass__p0_; -text: .text%__1cJAssemblerEcmpl6MnHAddress_i_v_; -text: .text%__1cHi2bNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLimmI_24OperJnum_edges6kM_I_; -text: .text%__1cRxorI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPsalI_rReg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIModLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cXPipeline_Use_Cycle_Mask2t6MI_v_; -text: .text%__1cKCompiledICMset_to_clean6M_v_; -text: .text%__1cIciMethodOresolve_invoke6MpnHciKlass_2_p0_; -text: .text%__1cQChunkPoolCleanerEtask6M_v_; -text: .text%__1cICmpDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPsalL_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_MulI6MpknENode__v_; -text: .text%__1cZCallDynamicJavaDirectNodeFreloc6kM_i_; -text: .text%__1cFStateX_sub_Op_CallDynamicJava6MpknENode__v_; -text: .text%jni_FindClass: jni.o; -text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cIMinINodeJideal_reg6kM_I_; -text: .text%__1cJCMoveNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cTconvI2F_reg_regNodeErule6kM_I_; -text: .text%__1cNcmovP_regNodeErule6kM_I_; -text: .text%__1cWPredictedCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%JVM_MonitorWait; -text: .text%__1cUVirtualCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cUPSMarkSweepDecoratorbDadvance_destination_decorator6F_v_; -text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_; -text: .text%JVM_GetClassDeclaredConstructors; -text: .text%__1cJLoadFNodeJideal_reg6kM_I_; -text: .text%__1cJAssemblerEaddq6MpnMRegisterImpl_2_v_; -text: .text%__1cTconvF2D_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cMstoreSSPNodeErule6kM_I_; -text: .text%__1cOloadConL32NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKcmpOpUOperFequal6kM_i_; -text: .text%__1cHRegMask2t6M_v_; -text: .text%__1cIGraphKitPdstore_rounding6MpnENode__2_; -text: .text%__1cNGrowableArray4Ci_2t6MpnFArena_iirki_v_; -text: .text%__1cNloadConL0NodeHsize_of6kM_I_; -text: .text%__1cQset_lwp_priority6Fiii_i_; -text: .text%__1cJCmpD3NodeGOpcode6kM_i_; -text: .text%__1cKloadUBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvL2DNodeGOpcode6kM_i_; -text: .text%__1cJAssemblerFcmovq6Mn0AJCondition_pnMRegisterImpl_3_v_; -text: .text%__1cMmulD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cFStateM_sub_Op_MinI6MpknENode__v_; -text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; -text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__; -text: .text%__1cScompL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGICStubIfinalize6M_v_; -text: .text%__1cNCallGeneratorRfor_uncommon_trap6FpnIciMethod_nODeoptimizationLDeoptReason_n0CLDeoptAction__p0_; -text: .text%__1cUandI_rReg_imm255NodeHtwo_adr6kM_I_; -text: .text%__1cJStubQdDueueMremove_first6M_v_; -text: .text%__1cOPhaseIdealLoopOdo_range_check6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cPICStubInterfaceIfinalize6MpnEStub__v_; -text: .text%__1cZUncommonTrapCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cPICStubInterfaceEsize6kMpnEStub__i_; -text: .text%__1cJAssemblerEcmpq6MpnMRegisterImpl_2_v_; -text: .text%__1cNGrowableArray4CpnIciObject__Egrow6Mi_v_; -text: .text%__1cFStateM_sub_Op_ModI6MpknENode__v_; -text: .text%__1cNObjectMonitor2t6M_v_; -text: .text%__1cFParseNdo_instanceof6M_v_; -text: .text%__1cPcmpD_cc_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cIGraphKitOgen_instanceof6MpnENode_2_2_; -text: .text%__1cHciKlassOsuper_of_depth6MI_p0_; -text: .text%__1cJLoadDNodeGOpcode6kM_i_; -text: .text%__1cMdecI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXNativeSignatureIteratorJdo_object6Mii_v_; -text: .text%__1cQsalL_rReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cbFunnecessary_membar_volatileNodeLbottom_type6kM_pknEType__; -text: .text%__1cYjava_lang_reflect_MethodZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cJloadDNodePoper_input_base6kM_I_; -text: .text%__1cENodeEgetf6kM_f_; -text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodPset_return_type6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__; -text: .text%__1cYjava_lang_reflect_MethodPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cVCallRuntimeDirectNodeKmethod_set6Ml_v_; -text: .text%__1cKstoreFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRaddI_mem_rRegNodePoper_input_base6kM_I_; -text: .text%__1cMmulF_immNodeErule6kM_I_; -text: .text%__1cCosbBthread_local_storage_at_put6Fipv_v_; -text: .text%__1cOjmpLoopEndNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cNinstanceKlassSregister_finalizer6FpnPinstanceOopDesc_pnGThread__2_; -text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; -text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FLi_pnGThread__; -text: .text%__1cMrax_RegIOperEtype6kM_pknEType__; -text: .text%__1cOjmpLoopEndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateW_sub_Op_MemBarVolatile6MpknENode__v_; -text: .text%jni_GetMethodID: jni.o; -text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_; -text: .text%get_thread; -text: .text%__1cMincI_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; -text: .text%__1cCosHSolarisKmmap_chunk6FpcLii_2_; -text: .text%__1cbFloadConL_0x6666666666666667NodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_MonitorNotifyAll; -text: .text%__1cOloadConL32NodeLbottom_type6kM_pknEType__; -text: .text%__1cRxorI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cMmulD_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNcmovP_regNodeLbottom_type6kM_pknEType__; -text: .text%__1cJScopeDescTdecode_scope_values6Mi_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cLconvI2BNodeMideal_Opcode6kM_i_; -text: .text%__1cIDivLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQsalI_rReg_CLNodeHtwo_adr6kM_I_; -text: .text%__1cPsarL_rReg_2NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVLoaderConstraintTableYextend_loader_constraint6MpnVLoaderConstraintEntry_nGHandle_pnMklassOopDesc__v_; -text: .text%__1cIimmIOperJnum_edges6kM_I_; -text: .text%__1cRtestI_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRandL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNGrowableArray4CpnKciTypeFlowFBlock__Gremove6Mrk2_v_; -text: .text%__1cVLoaderConstraintTablebHensure_loader_constraint_capacity6MpnVLoaderConstraintEntry_i_v_; -text: .text%__1cMnegD_regNodeHtwo_adr6kM_I_; -text: .text%__1cMdivD_immNodeMideal_Opcode6kM_i_; -text: .text%__1cTconvI2F_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsarL_rReg_63NodeErule6kM_I_; -text: .text%__1cRsubL_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cMVirtualSpaceQuncommitted_size6kM_L_; -text: .text%__1cRsubL_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cNstoreImmPNodeMideal_Opcode6kM_i_; -text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_; -text: .text%__1cLOopMapCache2t6M_v_; -text: .text%__1cQComputeCallStackHdo_char6M_v_; -text: .text%__1cZInterpreterMacroAssemblerEpush6MnITosState__v_; -text: .text%__1cSvframeArrayElementDbci6kM_i_; -text: .text%__1cMaddF_regNodeErule6kM_I_; -text: .text%__1cNdecL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cMdecI_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFStateN_sub_Op_LoadF6MpknENode__v_; -text: .text%__1cIMulDNodeLbottom_type6kM_pknEType__; -text: .text%__1cNaddI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJAssemblerEdecl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerGbswapl6MpnMRegisterImpl__v_; -text: .text%__1cRInlineCacheBufferLnew_ic_stub6F_pnGICStub__; -text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cIAddDNodeGOpcode6kM_i_; -text: .text%__1cMincI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIpass_int6M_v_; -text: .text%__1cGICStubIset_stub6MpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_; -text: .text%__1cTconvD2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerHpop_ptr6MpnMRegisterImpl__v_; -text: .text%__1cMelapsedTimer2t6M_v_; -text: .text%__1cMdivD_immNodeErule6kM_I_; -text: .text%__1cTconvI2D_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cFTypeFFxmeet6kMpknEType__3_; -text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl_i_v_; -text: .text%__1cGICStubLdestination6kM_pC_; -text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_; -text: .text%__1cPcmpD_cc_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMaddD_immNodeMideal_Opcode6kM_i_; -text: .text%__1cNdivI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cNobjArrayKlassKinitialize6MpnGThread__v_; -text: .text%jni_NewObjectArray: jni.o; -text: .text%__1cIMulFNodeLbottom_type6kM_pknEType__; -text: .text%__1cTmembar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovP_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUandI_rReg_imm255NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNdivL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cKcastPPNodePoper_input_base6kM_I_; -text: .text%__1cFTypeDFxmeet6kMpknEType__3_; -text: .text%__1cKloadUBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJloadDNodeErule6kM_I_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cPsarL_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%__1cKCompiledICMstub_address6kM_pC_; -text: .text%__1cMmulD_regNodeMcisc_operand6kM_i_; -text: .text%__1cMmulF_memNodePoper_input_base6kM_I_; -text: .text%lwp_cond_destroy: os_solaris.o; -text: .text%lwp_mutex_destroy: os_solaris.o; -text: .text%__1cISubFNodeGOpcode6kM_i_; -text: .text%__1cOJavaAssertionsNmatch_package6Fpkc_pn0AKOptionList__; -text: .text%__1cOJavaAssertionsLmatch_class6Fpkc_pn0AKOptionList__; -text: .text%JVM_DesiredAssertionStatus; -text: .text%__1cHTypePtrFxdual6kM_pknEType__; -text: .text%__1cQjava_lang_ThreadLthreadGroup6FpnHoopDesc__2_; -text: .text%__1cLConvI2FNodeLbottom_type6kM_pknEType__; -text: .text%__1cXjava_lang_reflect_FieldNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cMaddF_immNodeMideal_Opcode6kM_i_; -text: .text%__1cQshrL_rReg_CLNodeMideal_Opcode6kM_i_; -text: .text%__1cKReflectionInew_type6FnMsymbolHandle_nLKlassHandle_pnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_name6FpnHoopDesc_2_v_; -text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cMloadConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXjava_lang_reflect_FieldIset_type6FpnHoopDesc_2_v_; -text: .text%__1cKJavaThreadbScheck_safepoint_and_suspend_for_native_trans6Fp0_v_; -text: .text%__1cXjava_lang_reflect_FieldPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldGcreate6FpnGThread__nGHandle__; -text: .text%__1cISubDNodeGOpcode6kM_i_; -text: .text%__1cJloadFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cRaddI_mem_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cMmulF_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; -text: .text%JVM_MonitorNotify; -text: .text%__1cQsarL_rReg_63NodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_GetStaticFieldID: jni.o; -text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; -text: .text%__1cKReflectionbFbasic_type_mirror_to_basic_type6FpnHoopDesc_pnGThread__nJBasicType__; -text: .text%__1cPcmpF_cc_regNodeMideal_Opcode6kM_i_; -text: .text%__1cNinstanceKlassKjni_id_for6Mi_pnFJNIid__; -text: .text%__1cJLoadSNodeMstore_Opcode6kM_i_; -text: .text%__1cPcmpD_cc_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cMlogD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cbFunnecessary_membar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvL2FNodeGOpcode6kM_i_; -text: .text%__1cFKlassNexternal_name6kM_pkc_; -text: .text%__1cMPipeline_Use2t6MIIIpnUPipeline_Use_Element__v_; -text: .text%__1cKstorePNodeErule6kM_I_; -text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; -text: .text%__1cbFunnecessary_membar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRComputeEntryStackGdo_int6M_v_; -text: .text%__1cMstoreSSPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSMachBreakpointNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRsubL_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNtestU_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPsalL_rReg_1NodeHtwo_adr6kM_I_; -text: .text%__1cNmodL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvF2D_reg_regNodeErule6kM_I_; -text: .text%__1cQsalI_rReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQorI_rReg_memNodeErule6kM_I_; -text: .text%__1cLConvF2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMaddF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRxorI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cKCMoveLNodeGOpcode6kM_i_; -text: .text%__1cICodeHeapTmark_segmap_as_free6MLL_v_; -text: .text%__1cRaddL_rReg_memNodePoper_input_base6kM_I_; -text: .text%JVM_IsArrayClass; -text: .text%__1cJAssemblerEsbbq6MnHAddress_i_v_; -text: .text%__1cZInterpreterMacroAssemblerFpop_l6MpnMRegisterImpl__v_; -text: .text%__1cLConvF2DNodeLbottom_type6kM_pknEType__; -text: .text%__1cJAssemblerEaddq6MnHAddress_i_v_; -text: .text%JVM_GetClassName; -text: .text%__1cTconvF2D_reg_regNodeMcisc_operand6kM_i_; -text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cNmulI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQorI_rReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; -text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_; -text: .text%__1cRsubL_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRaddL_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cPshrL_rReg_1NodeErule6kM_I_; -text: .text%__1cQshrI_rReg_CLNodeHtwo_adr6kM_I_; -text: .text%__1cFStateO_sub_Op_CMoveI6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_RegD6MpknENode__v_; -text: .text%__1cQorI_rReg_memNodeHtwo_adr6kM_I_; -text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_; -text: .text%__1cIMaxINodeJideal_reg6kM_I_; -text: .text%__1cFJNIid2t6MpnMklassOopDesc_ip0_v_; -text: .text%__1cNinstanceKlassPjni_id_for_impl6FnTinstanceKlassHandle_i_pnFJNIid__; -text: .text%__1cJAssemblerEaddq6MpnMRegisterImpl_nHAddress__v_; -text: .text%JVM_Open; -text: .text%__1cHRegMask2t6Miiiiiii_v_; -text: .text%__1cNsubI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPsarL_rReg_2NodeHtwo_adr6kM_I_; -text: .text%__1cQConstantIntValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cFStateM_sub_Op_ConD6MpknENode__v_; -text: .text%__1cLConvI2DNodeGOpcode6kM_i_; -text: .text%__1cVLoaderConstraintTableJnew_entry6MIpnNsymbolOopDesc_pnMklassOopDesc_ii_pnVLoaderConstraintEntry__; -text: .text%__1cPcmpF_cc_regNodeMcisc_operand6kM_i_; -text: .text%__1cJAssemblerFcmovl6Mn0AJCondition_pnMRegisterImpl_3_v_; -text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; -text: .text%__1cMmulF_memNodeMideal_Opcode6kM_i_; -text: .text%__1cKConv2BNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFStateM_sub_Op_RegF6MpknENode__v_; -text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; -text: .text%__1cNcmovP_regNodeHtwo_adr6kM_I_; -text: .text%jni_GetStaticObjectField: jni.o; -text: .text%__1cIGraphKitSprecision_rounding6MpnENode__2_; -text: .text%__1cScompL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSTailCalljmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTconvD2F_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cTconvF2D_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMmulD_immNodeHtwo_adr6kM_I_; -text: .text%__1cOMacroAssemblerFleave6M_v_; -text: .text%__1cMloadConDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMTailCallNode2t6MpnENode_222222_v_; -text: .text%__1cXPartialSubtypeCheckNodeGOpcode6kM_i_; -text: .text%__1cSTailCalljmpIndNodeFreloc6kM_i_; -text: .text%__1cOloadConL32NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegD_regNodeErule6kM_I_; -text: .text%__1cLvframeArrayRregister_location6kMi_pC_; -text: .text%__1cQorI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateQ_sub_Op_TailCall6MpknENode__v_; -text: .text%__1cIOSThreadNpd_initialize6M_v_; -text: .text%__1cCosScurrent_process_id6F_i_; -text: .text%__1cMaddD_immNodeErule6kM_I_; -text: .text%__1cPshrL_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMaxINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cCosRinitialize_thread6F_v_; -text: .text%__1cCosHSolarisKvm_signals6F_pnIsigset_t__; -text: .text%__1cCosHSolarisRunblocked_signals6F_pnIsigset_t__; -text: .text%__1cMaddF_immNodeErule6kM_I_; -text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_; -text: .text%__1cFStateM_sub_Op_MaxI6MpknENode__v_; -text: .text%__1cGThread2t6M_v_; -text: .text%__1cGThreadbFinitialize_thread_local_storage6M_v_; -text: .text%__1cGThreadbArecord_stack_base_and_size6M_v_; -text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; -text: .text%__1cIOSThread2t6MpFpv_i1_v_; -text: .text%jni_CallStaticVoidMethod: jni.o; -text: .text%__1cCosScurrent_stack_size6F_L_; -text: .text%__1cCosScurrent_stack_base6F_pC_; -text: .text%__1cJloadFNodeFreloc6kM_i_; -text: .text%__1cCosMstart_thread6FpnGThread__v_; -text: .text%__1cKstoreFNodeFreloc6kM_i_; -text: .text%__1cKstoreLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_; -text: .text%__1cNcmovL_memNodeErule6kM_I_; -text: .text%__1cFStateO_sub_Op_StoreF6MpknENode__v_; -text: .text%__1cCosPpd_start_thread6FpnGThread__v_; -text: .text%__1cNcmovL_regNodeMcisc_operand6kM_i_; -text: .text%__1cOGenerateOopMapMdo_checkcast6M_v_; -text: .text%JVM_SetThreadPriority; -text: .text%__1cLOptoRuntimeMrethrow_Type6F_pknITypeFunc__; -text: .text%JVM_GetStackAccessControlContext; -text: .text%JVM_IsThreadAlive; -text: .text%__1cTconvL2D_reg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cSstring_compareNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNdivI_rRegNodeErule6kM_I_; -text: .text%__1cNdecL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNGrowableArray4CpknEType__2t6MpnFArena_iirk2_v_; -text: .text%__1cFParseVcatch_call_exceptions6MrnYciExceptionHandlerStream__v_; -text: .text%jni_CallObjectMethod: jni.o; -text: .text%__1cJAssemblerExorq6MpnMRegisterImpl_2_v_; -text: .text%__1cLOptoRuntimeYcurrent_time_millis_Type6F_pknITypeFunc__; -text: .text%__1cOcmovI_regUNodeMideal_Opcode6kM_i_; -text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; -text: .text%__1cMsubD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cPcmpF_cc_regNodeErule6kM_I_; -text: .text%__1cNmodI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTconvL2D_reg_memNodePoper_input_base6kM_I_; -text: .text%__1cLConvD2FNodeGOpcode6kM_i_; -text: .text%__1cWThreadLocalAllocBufferKinitialize6M_v_; -text: .text%__1cJloadDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEtemp6F_pnMRegisterImpl__; -text: .text%__1cMmulF_immNodeHtwo_adr6kM_I_; -text: .text%__1cQsarL_rReg_63NodeHtwo_adr6kM_I_; -text: .text%__1cMsubF_regNodeMideal_Opcode6kM_i_; -text: .text%__1cTconvI2L_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorJpass_long6M_v_; -text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_; -text: .text%__1cTconvF2I_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cRandI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cRandI_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%JVM_NativePath; -text: .text%__1cKJavaThreadKinitialize6M_v_; -text: .text%__1cOPhaseIdealLoopKdo_peeling6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cUThreadSafepointStateGcreate6FpnKJavaThread__v_; -text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cKJavaThreadYcreate_stack_guard_pages6M_v_; -text: .text%__1cUThreadSafepointState2t6MpnKJavaThread__v_; -text: .text%__1cMnegD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHnmethodTinc_decompile_count6M_v_; -text: .text%__1cIMinINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cMResourceMarkNreset_to_mark6M_v_; -text: .text%__1cQThreadStatistics2t6M_v_; -text: .text%__1cMmulD_regNodeErule6kM_I_; -text: .text%__1cMdivD_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKJavaThread2t6MpFp0pnGThread__vL_v_; -text: .text%__1cPcmpD_cc_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvI2D_reg_regNodeErule6kM_I_; -text: .text%__1cNcmovL_memNodePoper_input_base6kM_I_; -text: .text%__1cNdivL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcmpD_cc_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateT_sub_Op_CallRuntime6MpknENode__v_; -text: .text%__1cXJNI_ArgumentPusherVaArgJget_float6M_v_; -text: .text%__1cKcastPPNodeHtwo_adr6kM_I_; -text: .text%__1cKarrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cMsubD_regNodeMcisc_operand6kM_i_; -text: .text%__1cGThreadFstart6Fp0_v_; -text: .text%__1cVCallRuntimeDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsalL_rReg_CLNodeHtwo_adr6kM_I_; -text: .text%__1cVCallRuntimeDirectNodeFreloc6kM_i_; -text: .text%__1cIGraphKitIset_jvms6MpnIJVMState__v_; -text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%__1cOsalI_mem_1NodePoper_input_base6kM_I_; -text: .text%__1cMLinkResolverbEresolve_interface_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cMrdi_RegIOperEtype6kM_pknEType__; -text: .text%__1cKJavaThreadRthread_main_inner6M_v_; -text: .text%__1cPsalL_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMResourceMark2t6M_v_; -text: .text%__1cQshrI_rReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJScopeDescGlocals6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cJScopeDescVdecode_monitor_values6Mi_pnNGrowableArray4CpnMMonitorValue____; -text: .text%__1cOcompiledVFrameLexpressions6kM_pnUStackValueCollection__; -text: .text%__1cOcompiledVFrameImonitors6kM_pnNGrowableArray4CpnLMonitorInfo____; -text: .text%__1cOcompiledVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cSvframeArrayElementHfill_in6MpnOcompiledVFrame__v_; -text: .text%__1cOcompiledVFrameHraw_bci6kM_i_; -text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; -text: .text%__1cOMacroAssemblerKincrementl6MpnMRegisterImpl_i_v_; -text: .text%__1cFframebCinterpreter_frame_set_locals6Mpl_v_; -text: .text%__1cFframebHinterpreter_frame_set_monitor_end6MpnPBasicObjectLock__v_; -text: .text%__1cSPerfStringConstant2t6MnJCounterNS_pkc3_v_; -text: .text%__1cFframebCinterpreter_frame_set_method6MpnNmethodOopDesc__v_; -text: .text%__1cMmulF_regNodeMideal_Opcode6kM_i_; -text: .text%__1cFframebBinterpreter_frame_sender_sp6kM_pl_; -text: .text%__1cMaddF_regNodeHtwo_adr6kM_I_; -text: .text%__1cKCompiledICOset_cached_oop6MpnHoopDesc__v_; -text: .text%__1cKstoreINodeErule6kM_I_; -text: .text%__1cJScopeDescImonitors6M_pnNGrowableArray4CpnMMonitorValue____; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_i_v_; -text: .text%__1cOcompiledVFrameGlocals6kM_pnUStackValueCollection__; -text: .text%__1cJScopeDescLexpressions6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cXjava_lang_boxing_objectJget_value6FpnHoopDesc_pnGjvalue__nJBasicType__; -text: .text%__1cPcmovI_reg_gNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKReflectionTunbox_for_primitive6FpnHoopDesc_pnGjvalue_pnGThread__nJBasicType__; -text: .text%__1cCosMset_priority6FpnGThread_nOThreadPriority__nIOSReturn__; -text: .text%__1cIMulDNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cODeoptimizationVtrap_state_add_reason6Fii_i_; -text: .text%__1cDhpiFclose6Fi_i_; -text: .text%__1cJMemRegionFminus6kM0_0_; -text: .text%__1cMmulD_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_i_v_; -text: .text%__1cNcmovL_regNodeMideal_Opcode6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerWupdate_mdp_by_constant6MpnMRegisterImpl_i_v_; -text: .text%__1cOtailjmpIndNodeNis_block_proj6kM_pknENode__; -text: .text%__1cTconvI2F_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvL2F_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cGICStubKcached_oop6kM_pnHoopDesc__; -text: .text%__1cRInlineCacheBufferUic_buffer_cached_oop6FpC_pnHoopDesc__; -text: .text%JVM_Close; -text: .text%__1cRComputeEntryStackJdo_object6Mii_v_; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cGThreadMset_priority6Fp0nOThreadPriority__v_; -text: .text%jni_NewObjectV: jni.o; -text: .text%__1cKConv2BNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQshrL_rReg_CLNodeErule6kM_I_; -text: .text%__1cTconvF2D_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSafePointNodeQpeek_monitor_obj6kM_pnENode__; -text: .text%__1cOcmovI_regUNodeMcisc_operand6kM_i_; -text: .text%__1cNSafePointNodeQpeek_monitor_box6kM_pnENode__; -text: .text%__1cJLoadBNodeMstore_Opcode6kM_i_; -text: .text%__1cLConvF2INodeGOpcode6kM_i_; -text: .text%__1cPMultiBranchDataScompute_cell_count6FpnOBytecodeStream__i_; -text: .text%__1cFParsePdo_monitor_exit6M_v_; -text: .text%__1cMStubCodeMark2T6M_v_; -text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_; -text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; -text: .text%__1cRStubCodeGeneratorLstub_prolog6MpnMStubCodeDesc__v_; -text: .text%__1cKcastPPNodeErule6kM_I_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF3_v3_v_; -text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; -text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; -text: .text%__1cJAssemblerGmovslq6MpnMRegisterImpl_2_v_; -text: .text%__1cRandI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRConstantLongValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%JVM_StartThread; -text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; -text: .text%__1cMsubD_regNodeErule6kM_I_; -text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; -text: .text%__1cNmulI_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cIMulFNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cLRuntimeStub2n6FLI_pv_; -text: .text%__1cMmulF_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbFloadConL_0x6666666666666667NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOloadConL32NodeHsize_of6kM_I_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJOperation__v4_v_; -text: .text%__1cRaddL_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivLNodeJideal_reg6kM_I_; -text: .text%__1cGICStubFclear6M_v_; -text: .text%__1cNdecI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFTypeFFxdual6kM_pknEType__; -text: .text%__1cFStateM_sub_Op_ConF6MpknENode__v_; -text: .text%__1cMloadConFNodeHsize_of6kM_I_; -text: .text%__1cPsarL_rReg_2NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQsarL_rReg_63NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPoldgetTimeNanos6F_x_; -text: .text%__1cKmul_hiNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHMonitor2T6M_v_; -text: .text%__1cINegDNodeLbottom_type6kM_pknEType__; -text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_; -text: .text%__1cHThreadsGremove6FpnKJavaThread__v_; -text: .text%__1cODeoptimizationTuncommon_trap_inner6FpnKJavaThread_i_v_; -text: .text%__1cLensure_join6FpnKJavaThread__v_: thread.o; -text: .text%__1cIOSThread2T6M_v_; -text: .text%__1cODeoptimizationNuncommon_trap6FpnKJavaThread_i_pn0ALUnrollBlock__; -text: .text%__1cTconvI2D_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cODeoptimizationRgather_statistics6Fn0ALDeoptReason_n0ALDeoptAction_nJBytecodesECode__v_; -text: .text%__1cUThreadSafepointStateHdestroy6FpnKJavaThread__v_; -text: .text%__1cIGraphKitTdprecision_rounding6MpnENode__2_; -text: .text%__1cOcmovI_regUNodeErule6kM_I_; -text: .text%__1cCosLfree_thread6FpnIOSThread__v_; -text: .text%__1cXpartialSubtypeCheckNodeMideal_Opcode6kM_i_; -text: .text%JVM_GetInheritedAccessControlContext; -text: .text%__1cNThreadServiceWcurrent_thread_exiting6FpnKJavaThread__v_; -text: .text%__1cLvframeArrayZdeallocate_monitor_chunks6M_v_; -text: .text%__1cGThread2T5B6M_v_; -text: .text%__1cIAddDNodeLbottom_type6kM_pknEType__; -text: .text%__1cKJavaThread2T6M_v_; -text: .text%__1cQjava_lang_ThreadNset_stillborn6FpnHoopDesc__v_; -text: .text%__1cMmulD_memNodePoper_input_base6kM_I_; -text: .text%__1cRInlineCacheBufferSic_destination_for6FpnKCompiledIC__pC_; -text: .text%__1cLvframeArrayPunpack_to_stack6MrnFframe_i_v_; -text: .text%__1cOcompL_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIOSThreadKpd_destroy6M_v_; -text: .text%__1cMaddF_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cODeoptimizationYfetch_unroll_info_helper6FpnKJavaThread__pn0ALUnrollBlock__; -text: .text%__1cODeoptimizationRlast_frame_adjust6Fii_i_; -text: .text%__1cKJavaThreadYremove_stack_guard_pages6M_v_; -text: .text%__1cODeoptimizationNunpack_frames6FpnKJavaThread_i_nJBasicType__; -text: .text%__1cNnmethodLocker2t6MpC_v_; -text: .text%__1cOtailjmpIndNodeMideal_Opcode6kM_i_; -text: .text%__1cLconvI2BNodeErule6kM_I_; -text: .text%__1cTconvF2I_reg_regNodeErule6kM_I_; -text: .text%__1cIciMethodVget_osr_flow_analysis6Mi_pnKciTypeFlow__; -text: .text%__1cSCallLeafDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRaddL_mem_rRegNodePoper_input_base6kM_I_; -text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_; -text: .text%__1cMmulL_memNodePoper_input_base6kM_I_; -text: .text%__1cODeoptimizationLUnrollBlock2T6M_v_; -text: .text%__1cHciKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cMaddF_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cSCompiledStaticCallMset_to_clean6M_v_; -text: .text%__1cMincL_memNodePoper_input_base6kM_I_; -text: .text%jni_NewDirectByteBuffer; -text: .text%__1cMmulL_memNodeMideal_Opcode6kM_i_; -text: .text%__1cMaddD_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__; -text: .text%__1cJAssemblerEmovb6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cJSubFPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_only6MnITosState__v_; -text: .text%__1cRcmpFastUnlockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKloadUBNodeFreloc6kM_i_; -text: .text%__1cMStartOSRNodeKosr_domain6F_pknJTypeTuple__; -text: .text%__1cMmulD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_; -text: .text%__1cNCallGeneratorHfor_osr6FpnIciMethod_i_p0_; -text: .text%__1cKstoreINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOstackSlotDOperKin_RegMask6kMi_pknHRegMask__; -text: .text%jni_GetFloatArrayRegion: jni.o; -text: .text%__1cPfieldDescriptorUdouble_initial_value6kM_d_; -text: .text%__1cKEntryPoint2t6M_v_; -text: .text%__1cJAssemblerEsarl6MpnMRegisterImpl_i_v_; -text: .text%__1cSCardTableExtensionbEresize_covered_region_by_start6MnJMemRegion__v_; -text: .text%__1cQshrL_rReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRaddL_mem_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cIAddFNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJloadDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMlogD_regNodeErule6kM_I_; -text: .text%__1cNmulI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cMdecI_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsalL_rReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKemit_break6FrnKCodeBuffer__v_; -text: .text%jni_GetStaticMethodID: jni.o; -text: .text%__1cMsubF_regNodeMcisc_operand6kM_i_; -text: .text%__1cMdecI_memNodeFreloc6kM_i_; -text: .text%__1cRCardTableModRefBSbCfind_covering_region_by_base6MpnIHeapWord__i_; -text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cINegFNodeGOpcode6kM_i_; -text: .text%__1cRCardTableModRefBSbAlargest_prev_committed_end6kMi_pnIHeapWord__; -text: .text%__1cSMachBreakpointNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCardTableExtensionVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cNstoreImmPNodePoper_input_base6kM_I_; -text: .text%__1cKReflectionUarray_component_type6FpnHoopDesc_pnGThread__2_; -text: .text%__1cKoopFactoryUnew_compiledICHolder6FnMmethodHandle_nLKlassHandle_pnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cTconvL2F_reg_regNodeMcisc_operand6kM_i_; -text: .text%__1cKarrayKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cFStateM_sub_Op_CmpD6MpknENode__v_; -text: .text%__1cKcastPPNodeMideal_Opcode6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_; -text: .text%__1cPshrL_rReg_1NodeHtwo_adr6kM_I_; -text: .text%__1cbDcatch_cleanup_find_cloned_def6FpnFBlock_pnENode_1rnLBlock_Array_i_3_: lcm.o; -text: .text%__1cVcompiledICHolderKlassIallocate6MpnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cISubDNodeLbottom_type6kM_pknEType__; -text: .text%__1cbCcatch_cleanup_fix_all_inputs6FpnENode_11_v_: lcm.o; -text: .text%__1cISubFNodeLbottom_type6kM_pknEType__; -text: .text%__1cNdivI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_GetComponentType; -text: .text%__1cIMulDNodeJideal_reg6kM_I_; -text: .text%__1cJAssemblerEsbbq6MpnMRegisterImpl_i_v_; -text: .text%__1cNcmovL_memNodeMideal_Opcode6kM_i_; -text: .text%jni_GetStringRegion: jni.o; -text: .text%jni_EnsureLocalCapacity: jni.o; -text: .text%__1cMaddF_memNodePoper_input_base6kM_I_; -text: .text%__1cFParseMdo_anewarray6M_v_; -text: .text%__1cLConvI2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLconvI2BNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsYis_supported_jni_version6Fi_C_; -text: .text%__1cKarrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%JVM_NewArray; -text: .text%JVM_FreeMemory; -text: .text%JVM_TotalMemory; -text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cMincI_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__; -text: .text%__1cMmulF_memNodeErule6kM_I_; -text: .text%__1cODeoptimizationbJupdate_method_data_from_interpreter6FnQmethodDataHandle_ii_v_; -text: .text%__1cLClassLoaderSget_system_package6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cMTailJumpNodeKmatch_edge6kMI_I_; -text: .text%__1cRaddL_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cTconvL2F_reg_regNodeErule6kM_I_; -text: .text%__1cKPSYoungGenLpost_resize6M_v_; -text: .text%__1cNcmovL_regNodeErule6kM_I_; -text: .text%__1cRandI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegF_regNodeHtwo_adr6kM_I_; -text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_; -text: .text%__1cKstoreBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMincL_memNodeMideal_Opcode6kM_i_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cSInterpreterRuntimeJnote_trap6FpnKJavaThread_ipnGThread__v_; -text: .text%__1cRSignatureIteratorHiterate6M_v_; -text: .text%__1cIModLNodeJideal_reg6kM_I_; -text: .text%__1cLConvD2INodeLbottom_type6kM_pknEType__; -text: .text%__1cMaddF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateM_sub_Op_DivL6MpknENode__v_; -text: .text%__1cTconvL2D_reg_memNodeErule6kM_I_; -text: .text%JVM_GetSystemPackage; -text: .text%__1cOMacroAssemblerFenter6M_v_; -text: .text%__1cLConvF2DNodeJideal_reg6kM_I_; -text: .text%__1cNTemplateTableLindex_check6FpnMRegisterImpl_2_v_; -text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; -text: .text%__1cLMoveL2DNodeGOpcode6kM_i_; -text: .text%__1cFStateP_sub_Op_ConvF2D6MpknENode__v_; -text: .text%__1cMmulL_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%Unsafe_DefineClass1; -text: .text%__1cFTypeDFxdual6kM_pknEType__; -text: .text%__1cMincI_memNodeFreloc6kM_i_; -text: .text%__1cPcmpF_cc_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMsubF_memNodeMideal_Opcode6kM_i_; -text: .text%__1cMsubF_memNodePoper_input_base6kM_I_; -text: .text%__1cTconvF2D_reg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%JVM_DefineClass; -text: .text%__1cMaddF_memNodeMideal_Opcode6kM_i_; -text: .text%__1cJAssemblerEshrq6MpnMRegisterImpl_i_v_; -text: .text%__1cPcmpFastLockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerYprofile_not_taken_branch6MpnMRegisterImpl__v_; -text: .text%__1cTleaPIdxScaleOffNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; -text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; -text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; -text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; -text: .text%JVM_GetCPFieldModifiers; -text: .text%JVM_InvokeMethod; -text: .text%__1cFKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cOsalI_mem_1NodeMideal_Opcode6kM_i_; -text: .text%__1cMmulF_regNodeMcisc_operand6kM_i_; -text: .text%__1cMmulD_regNodeHtwo_adr6kM_I_; -text: .text%__1cTconvD2F_reg_regNodeMcisc_operand6kM_i_; -text: .text%jni_AllocObject: jni.o; -text: .text%__1cTconvF2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFParseOdo_tableswitch6M_v_; -text: .text%__1cTmembar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKReflectionNinvoke_method6FpnHoopDesc_nGHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cICmpFNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJCondition__v4_v_; -text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_; -text: .text%__1cTconvF2D_reg_regNodeQuse_cisc_RegMask6M_v_; -text: .text%Unsafe_AllocateInstance; -text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; -text: .text%__1cOcmovD_regUNodeMideal_Opcode6kM_i_; -text: .text%__1cMsubD_immNodeMideal_Opcode6kM_i_; -text: .text%__1cRInlineCacheBufferOinit_next_stub6F_v_; -text: .text%__1cPshrL_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMsubD_immNodeErule6kM_I_; -text: .text%__1cNTemplateTableHconvert6F_v_; -text: .text%__1cMnegD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQorI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLMoveF2INodeGOpcode6kM_i_; -text: .text%__1cNcmovL_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_2_v_; -text: .text%__1cOcmovD_regUNodeErule6kM_I_; -text: .text%__1cKConv2BNodeLbottom_type6kM_pknEType__; -text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; -text: .text%__1cMorL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cTconvD2I_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cScompL_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cXpartialSubtypeCheckNodeErule6kM_I_; -text: .text%__1cOstackSlotDOperEtype6kM_pknEType__; -text: .text%__1cLloadSSDNodeErule6kM_I_; -text: .text%__1cMsubD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRComputeEntryStackIdo_short6M_v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorCto6F_pnMRegisterImpl__; -text: .text%__1cTconvF2D_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMmulL_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; -text: .text%__1cLTypeInstPtrOxmeet_unloaded6kMpk0_2_; -text: .text%__1cMloadConFNodeKconst_size6kM_i_; -text: .text%__1cMorL_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cMmulD_memNodeMideal_Opcode6kM_i_; -text: .text%__1cMaddD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cMnegF_regNodeMideal_Opcode6kM_i_; -text: .text%__1cMloadConFNodeFreloc6kM_i_; -text: .text%__1cILogDNodeLbottom_type6kM_pknEType__; -text: .text%__1cLConvI2DNodeLbottom_type6kM_pknEType__; -text: .text%__1cNstoreImmPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLStrCompNodeJideal_reg6kM_I_; -text: .text%__1cMlogD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMaddD_regNodeMcisc_operand6kM_i_; -text: .text%__1cMaddD_regNodeErule6kM_I_; -text: .text%__1cScompL_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cIAddFNodeJideal_reg6kM_I_; -text: .text%__1cJimmP0OperIconstant6kM_l_; -text: .text%__1cNciMethodKlassEmake6F_p0_; -text: .text%__1cHnmethodFflush6M_v_; -text: .text%JVM_GetClassContext; -text: .text%__1cRfind_field_offset6FpnI_jobject_ipnGThread__i_; -text: .text%__1cXPartialSubtypeCheckNodeLbottom_type6kM_pknEType__; -text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; -text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; -text: .text%__1cMsubF_regNodeErule6kM_I_; -text: .text%__1cRsubL_rReg_memNodeFreloc6kM_i_; -text: .text%__1cTconvL2F_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMmulF_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJStubQdDueueKremove_all6M_v_; -text: .text%__1cIDivDNodeLbottom_type6kM_pknEType__; -text: .text%__1cLStatSamplerTget_system_property6FpkcpnGThread__2_; -text: .text%__1cICodeBlobFflush6M_v_; -text: .text%__1cVMoveF2I_reg_stackNodeMideal_Opcode6kM_i_; -text: .text%__1cJArgumentsQPropertyList_add6FppnOSystemProperty_2_v_; -text: .text%__1cKstoreCNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmembar_releaseNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cSInterpreterRuntimeQcreate_exception6FpnKJavaThread_pc3_v_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_2_v_; -text: .text%__1cJStubQdDueueMremove_first6Mi_v_; -text: .text%__1cQinitialize_class6FnMsymbolHandle_pnGThread__v_: thread.o; -text: .text%__1cJAssemblerFcmovq6Mn0AJCondition_pnMRegisterImpl_nHAddress__v_; -text: .text%__1cMmulD_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cMaddF_immNodeHtwo_adr6kM_I_; -text: .text%__1cIMulDNodeGmul_id6kM_pknEType__; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cTconvL2D_reg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTconvD2F_reg_regNodeErule6kM_I_; -text: .text%__1cVMoveL2D_reg_stackNodeMideal_Opcode6kM_i_; -text: .text%__1cFStateM_sub_Op_MulD6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_ModL6MpknENode__v_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; -text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%__1cQshrL_rReg_CLNodeHtwo_adr6kM_I_; -text: .text%__1cKJavaThreadbOcheck_special_condition_for_native_trans6Fp0_v_; -text: .text%__1cZCallDynamicJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHOrLNodeGOpcode6kM_i_; -text: .text%__1cIMulFNodeGmul_id6kM_pknEType__; -text: .text%__1cMnegF_regNodeErule6kM_I_; -text: .text%__1cMsubF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTconvD2F_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_RawMonitorCreate; -text: .text%__1cMMutableSpaceOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cKCMoveDNodeGOpcode6kM_i_; -text: .text%__1cFParseQdo_monitor_enter6M_v_; -text: .text%__1cPMultiBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cXpartialSubtypeCheckNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvD2INodeJideal_reg6kM_I_; -text: .text%__1cKcastPPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%Unsafe_CompareAndSwapInt; -text: .text%__1cOstackSlotIOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cOstackSlotIOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMmulD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNmulI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_22pC_v_; -text: .text%__1cScompL_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cNTemplateTableRlocals_index_wide6FpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerPset_mdp_data_at6MpnMRegisterImpl_i2_v_; -text: .text%__1cJAssemblerEincl6MnHAddress__v_; -text: .text%__1cMmulF_regNodeErule6kM_I_; -text: .text%__1cIMulFNodeJideal_reg6kM_I_; -text: .text%__1cFStateM_sub_Op_MulF6MpknENode__v_; -text: .text%__1cJOopMapSetQsingular_oop_map6M_pnGOopMap__; -text: .text%__1cHnmethodVmark_as_seen_on_stack6M_v_; -text: .text%__1cMloadConDNodeHsize_of6kM_I_; -text: .text%__1cOcmovI_regUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQorI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cMaddD_immNodeHtwo_adr6kM_I_; -text: .text%__1cMloadConDNodeKconst_size6kM_i_; -text: .text%__1cLConvL2FNodeLbottom_type6kM_pknEType__; -text: .text%__1cLConvL2DNodeLbottom_type6kM_pknEType__; -text: .text%__1cOstackSlotDOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cTconvF2D_reg_memNodeFreloc6kM_i_; -text: .text%__1cLConvD2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMloadConDNodeFreloc6kM_i_; -text: .text%JVM_Lseek; -text: .text%__1cPsarL_rReg_1NodeErule6kM_I_; -text: .text%__1cPsarL_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOstackSlotDOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMmulF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMlogD_regNodeHtwo_adr6kM_I_; -text: .text%__1cFStateM_sub_Op_AddF6MpknENode__v_; -text: .text%__1cIXorINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cFStateP_sub_Op_StrComp6MpknENode__v_; -text: .text%__1cGciType2t6MnJBasicType__v_; -text: .text%__1cScompL_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_; -text: .text%__1cPcmpF_cc_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_; -text: .text%__1cQmulI_mem_immNodePoper_input_base6kM_I_; -text: .text%__1cZInterpreterMacroAssemblerTnotify_method_entry6M_v_; -text: .text%__1cJAssemblerEsubq6MpnMRegisterImpl_nHAddress__v_; -text: .text%jni_GetEnv; -text: .text%JVM_NanoTime; -text: .text%__1cRmulI_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cETypeEmake6Fn0AFTYPES__pk0_; -text: .text%__1cQmulI_mem_immNodeMideal_Opcode6kM_i_; -text: .text%__1cJAssemblerFpushq6MnHAddress__v_; -text: .text%__1cRComputeEntryStackIdo_array6Mii_v_; -text: .text%__1cPcmpD_cc_immNodeKconst_size6kM_i_; -text: .text%__1cMorL_rRegNodeErule6kM_I_; -text: .text%__1cScompP_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cScompP_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cNdivI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cMnegF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKciTypeFlowLStateVectorOdo_null_assert6MpnHciKlass__v_; -text: .text%__1cMsubD_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cJLoadLNodeMstore_Opcode6kM_i_; -text: .text%__1cNGrowableArray4CpnGciType__Egrow6Mi_v_; -text: .text%__1cMdivD_immNodeHtwo_adr6kM_I_; -text: .text%__1cLConvI2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIciMethodMnative_entry6M_pC_; -text: .text%__1cPcmpD_cc_immNodeFreloc6kM_i_; -text: .text%__1cMmulD_memNodeErule6kM_I_; -text: .text%jni_CallVoidMethod: jni.o; -text: .text%__1cMmulF_regNodeHtwo_adr6kM_I_; -text: .text%__1cNTemplateTableQvolatile_barrier6FnJAssemblerQMembar_mask_bits__v_; -text: .text%__1cVMoveL2D_reg_stackNodeErule6kM_I_; -text: .text%__1cRsalI_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJBasicLockHmove_to6MpnHoopDesc_p0_v_; -text: .text%__1cOstackSlotIOperEtype6kM_pknEType__; -text: .text%__1cKPSYoungGenRavailable_to_live6M_L_; -text: .text%__1cOstackSlotIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNcmovL_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cSstore_to_stackslot6FrnKCodeBuffer_iii_v_; -text: .text%__1cQshrL_rReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUInterpreterGeneratorbDgenerate_stack_overflow_check6M_v_; -text: .text%__1cRComputeEntryStackHdo_bool6M_v_; -text: .text%__1cMmulD_immNodeFreloc6kM_i_; -text: .text%__1cQmulI_mem_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%JVM_FindPrimitiveClass; -text: .text%JVM_IsSameClassPackage; -text: .text%__1cRaddI_mem_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMaddF_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLconvI2BNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMaddD_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMlogD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRCardTableModRefBSYcommitted_unique_to_self6kMinJMemRegion__1_; -text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; -text: .text%__1cFStateN_sub_Op_LoadD6MpknENode__v_; -text: .text%__1cTconvL2F_reg_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cPcmpF_cc_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKPSYoungGenUavailable_to_min_gen6M_L_; -text: .text%__1cJAssemblerKrepne_scan6M_v_; -text: .text%__1cJname2type6Fpkc_nJBasicType__; -text: .text%__1cKPSYoungGenbCreset_survivors_after_shrink6M_v_; -text: .text%__1cKPSYoungGenQlimit_gen_shrink6ML_L_; -text: .text%__1cTconvI2D_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateP_sub_Op_ConvI2F6MpknENode__v_; -text: .text%__1cMmulD_immNodeKconst_size6kM_i_; -text: .text%__1cMmulF_immNodeFreloc6kM_i_; -text: .text%__1cJloadBNodeHsize_of6kM_I_; -text: .text%__1cOcompI_rRegNodeHsize_of6kM_I_; -text: .text%__1cPPerfDataManagerWcreate_string_variable6FnJCounterNS_pkci3pnGThread__pnSPerfStringVariable__; -text: .text%__1cJloadPNodeHsize_of6kM_I_; -text: .text%__1cOtypeArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cOtypeArrayKlassNexternal_name6FnJBasicType__pkc_; -text: .text%Unsafe_StaticFieldOffset; -text: .text%__1cNcmovL_regNodeHtwo_adr6kM_I_; -text: .text%__1cLloadSSDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateO_sub_Op_CMoveP6MpknENode__v_; -text: .text%__1cVVM_ParallelGCSystemGCEdoit6M_v_; -text: .text%__1cETypeFxdual6kM_pk0_; -text: .text%__1cVVM_ParallelGCSystemGC2t6MIInHGCCauseFCause__v_; -text: .text%__1cJCmpF3NodeGOpcode6kM_i_; -text: .text%Unsafe_GetObjectVolatile; -text: .text%__1cMsubD_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%Unsafe_EnsureClassInitialized; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cOcmovI_regUNodeHtwo_adr6kM_I_; -text: .text%__1cMaddD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEmovw6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cJAssemblerGmovsbl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cMorL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUParallelScavengeHeapHcollect6MnHGCCauseFCause__v_; -text: .text%__1cJLoadDNodeJideal_reg6kM_I_; -text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cQmulI_mem_immNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCi_v_; -text: .text%__1cPcheckCastPPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmembar_acquireNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKimmL10OperJnum_edges6kM_I_; -text: .text%Unsafe_StaticFieldBaseFromField; -text: .text%__1cMsubD_regNodeHtwo_adr6kM_I_; -text: .text%__1cRsubI_rReg_memNodeHsize_of6kM_I_; -text: .text%__1cJAssemblerMemit_arith_b6MiipnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_; -text: .text%JVM_GC; -text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_; -text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; -text: .text%__1cIPSOldGenGexpand6ML_v_; -text: .text%__1cIPSOldGenXexpand_and_cas_allocate6ML_pnIHeapWord__; -text: .text%__1cPsarL_rReg_1NodeHtwo_adr6kM_I_; -text: .text%__1cJAssemblerFtestb6MpnMRegisterImpl_i_v_; -text: .text%__1cMsubF_regNodeHtwo_adr6kM_I_; -text: .text%__1cRaddL_rReg_memNodeFreloc6kM_i_; -text: .text%__1cVMoveL2D_reg_stackNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cScompP_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOGenerateOopMapGdo_jsr6Mi_v_; -text: .text%__1cMmulF_memNodeHtwo_adr6kM_I_; -text: .text%__1cOcmovD_regUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNcmovL_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMmulF_immNodeKconst_size6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerbGget_unsigned_2_byte_index_at_bcp6MpnMRegisterImpl_i_v_; -text: .text%__1cZInterpreterMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cNTemplateTableGiconst6Fi_v_; -text: .text%__1cMdecI_memNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cCosMuser_handler6F_pv_; -text: .text%__1cJloadDNodeFreloc6kM_i_; -text: .text%__1cMincL_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNinstanceKlassSremove_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cTconvD2F_reg_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cKMemoryPoolLadd_manager6MpnNMemoryManager__v_; -text: .text%__1cMmulD_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMsubF_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovI_regUNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkci_pc_; -text: .text%jni_RegisterNatives: jni.o; -text: .text%Unsafe_GetNativeFloat; -text: .text%JVM_GetClassDeclaredFields; -text: .text%__1cMsubF_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cJMemRegion2t6M_v_; -text: .text%jni_SetStaticObjectField: jni.o; -text: .text%__1cCosEstat6FpkcpnEstat__i_; -text: .text%__1cLOptoRuntimeTmultianewarray_Type6Fi_pknITypeFunc__; -text: .text%__1cRComputeEntryStackHdo_long6M_v_; -text: .text%__1cHnmethodVinvalidate_osr_method6M_v_; -text: .text%__1cNMemoryManagerIadd_pool6MpnKMemoryPool__v_; -text: .text%jni_SetObjectField: jni.o; -text: .text%__1cJloadDNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLConvD2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOBasicHashtable2t6Mii_v_; -text: .text%__1cOPhaseIdealLoopJclone_iff6MpnHPhiNode_pnNIdealLoopTree__pnIBoolNode__; -text: .text%__1cMTailJumpNodeGOpcode6kM_i_; -text: .text%__1cCosHSolarisVcleanup_interruptible6FpnKJavaThread__v_; -text: .text%__1cCosHSolarisTsetup_interruptible6F_pnKJavaThread__; -text: .text%__1cCosHSolarisTsetup_interruptible6FpnKJavaThread__v_; -text: .text%__1cMdivD_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_IsSupportedJNIVersion; -text: .text%JVM_LoadLibrary; -text: .text%JVM_Sleep; -text: .text%__1cHOrLNodeLbottom_type6kM_pknEType__; -text: .text%__1cOstackSlotIOperFscale6kM_i_; -text: .text%__1cLConvD2FNodeLbottom_type6kM_pknEType__; -text: .text%__1cLConvF2INodeLbottom_type6kM_pknEType__; -text: .text%jint_cmp: parse2.o; -text: .text%__1cOstackSlotIOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cLloadSSINodeErule6kM_I_; -text: .text%__1cLConvI2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLConvL2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIDivDNodeJideal_reg6kM_I_; -text: .text%__1cRandI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_int_field06FnJBasicType__pC_; -text: .text%jni_GetJavaVM: jni.o; -text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_pnUPerfLongSampleHelper__v_; -text: .text%jni_MonitorExit: jni.o; -text: .text%jni_MonitorEnter: jni.o; -text: .text%__1cHciKlass2t6MnLKlassHandle_pnIciSymbol__v_; -text: .text%__1cNGrowableArray4CpnIPerfData__Praw_at_put_grow6Mirk14_v_; -text: .text%__1cFciEnvOrecord_failure6Mpkc_v_; -text: .text%__1cMciArrayKlassRbase_element_type6M_pnGciType__; -text: .text%__1cLConvL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOstackSlotDOperFscale6kM_i_; -text: .text%__1cOstackSlotDOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cOcmovI_regUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovL_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvD2F_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTconvF2I_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvL2F_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRaddI_mem_rRegNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNTemplateTableH_return6FnITosState__v_; -text: .text%__1cNTemplateTableHif_icmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableHif_0cmp6Fn0AJCondition__v_; -text: .text%__1cTconvL2D_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXpartialSubtypeCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNSharedRuntimeEdrem6Fdd_d_; -text: .text%__1cRaddI_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cScompP_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJAssemblerGmovswl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cMsubF_memNodeErule6kM_I_; -text: .text%__1cOMacroAssemblerQload_signed_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cNdivI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRMachSpillCopyNodeHsize_of6kM_I_; -text: .text%__1cFframebFset_interpreter_frame_sender_sp6Mpl_v_; -text: .text%__1cPsarL_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cULinearLeastSquareFit2t6MI_v_; -text: .text%__1cSObjectSynchronizerIjni_exit6FpnHoopDesc_pnGThread__v_; -text: .text%__1cSObjectSynchronizerJjni_enter6FnGHandle_pnGThread__v_; -text: .text%__1cMaddF_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMsubF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMsubD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMmulF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMmulF_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cCosZvm_allocation_granularity6F_i_; -text: .text%Unsafe_ObjectFieldOffset; -text: .text%__1cNSpaceCounters2t6MpkciLpnMMutableSpace_pnSGenerationCounters__v_; -text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; -text: .text%__1cOcompiledVFrameUresolve_monitor_lock6kMnILocation__pnJBasicLock__; -text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; -text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; -text: .text%__1cNCellTypeStateImake_any6Fi_0_; -text: .text%__1cMorL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cNTemplateTableFaload6Fi_v_; -text: .text%__1cXNativeSignatureIteratorJdo_double6M_v_; -text: .text%__1cISubDNodeGadd_id6kM_pknEType__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_double6M_v_; -text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_; -text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_; -text: .text%__1cNTemplateTableEdop26Fn0AJOperation__v_; -text: .text%__1cMaddD_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cMMonitorChunk2t6Mi_v_; -text: .text%__1cLMoveL2DNodeLbottom_type6kM_pknEType__; -text: .text%__1cZCompiledArgumentOopFinderDset6MinJBasicType__v_; -text: .text%__1cNstoreImmPNodeFreloc6kM_i_; -text: .text%__1cNSharedRuntimeVhandle_ic_miss_helper6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cKJavaThreadUremove_monitor_chunk6MpnMMonitorChunk__v_; -text: .text%__1cKJavaThreadRadd_monitor_chunk6MpnMMonitorChunk__v_; -text: .text%__1cNReservedSpace2t6ML_v_; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__; -text: .text%Unsafe_GetNativeByte; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_; -text: .text%__1cFframebLprevious_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2t6M_v_; -text: .text%__1cFStateP_sub_Op_ConvD2I6MpknENode__v_; -text: .text%__1cKVtableStubRpd_code_alignment6F_i_; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_2_v_; -text: .text%__1cINegDNodeJideal_reg6kM_I_; -text: .text%__1cTconvF2D_reg_memNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_; -text: .text%__1cNandI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pLi_v_; -text: .text%__1cMsubF_memNodeHtwo_adr6kM_I_; -text: .text%__1cINegFNodeLbottom_type6kM_pknEType__; -text: .text%__1cMmulL_memNodeFreloc6kM_i_; -text: .text%__1cMMonitorValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cFStateM_sub_Op_NegD6MpknENode__v_; -text: .text%__1cOtailjmpIndNodePoper_input_base6kM_I_; -text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_; -text: .text%__1cNstoreImmPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIDivINodeJideal_reg6kM_I_; -text: .text%__1cRInvocationCounterDdef6Fn0AFState_ipFnMmethodHandle_pnGThread__pC_v_; -text: .text%__1cMNativeLookupNlong_jni_name6FnMmethodHandle__pc_; -text: .text%__1cMaddF_memNodeErule6kM_I_; -text: .text%__1cOcmovD_regUNodeHtwo_adr6kM_I_; -text: .text%__1cMaddF_memNodeHtwo_adr6kM_I_; -text: .text%__1cOGenerateOopMapTret_jump_targets_do6MpnOBytecodeStream_pFp0ipi_vi4_v_; -text: .text%__1cOClassPathEntry2t6M_v_; -text: .text%__1cMorL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cOMacroAssemblerNpop_CPU_state6M_v_; -text: .text%__1cOMacroAssemblerOpush_CPU_state6M_v_; -text: .text%__1cOMacroAssemblerNpop_FPU_state6M_v_; -text: .text%__1cOMacroAssemblerOpush_FPU_state6M_v_; -text: .text%__1cOMacroAssemblerMpop_IU_state6M_v_; -text: .text%__1cOMacroAssemblerNpush_IU_state6M_v_; -text: .text%__1cOMacroAssemblerSstore_check_part_26MpnMRegisterImpl__v_; -text: .text%__1cTconvL2D_reg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOMacroAssemblerSstore_check_part_16MpnMRegisterImpl__v_; -text: .text%__1cRaddL_rReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMaddF_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cVMoveF2I_reg_stackNodeErule6kM_I_; -text: .text%__1cJAssemblerEandq6MpnMRegisterImpl_2_v_; -text: .text%__1cFParsePdo_lookupswitch6M_v_; -text: .text%__1cLConvF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFParseRjump_if_true_fork6MpnGIfNode_ii_v_; -text: .text%__1cIAddDNodeJideal_reg6kM_I_; -text: .text%__1cJloadFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRComputeEntryStackJdo_double6M_v_; -text: .text%__1cMaddD_regNodeHtwo_adr6kM_I_; -text: .text%__1cLConvD2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJAssemblerEcmpb6MnHAddress_i_v_; -text: .text%__1cCosGsignal6Fipv_1_; -text: .text%__1cMsubD_immNodeHtwo_adr6kM_I_; -text: .text%__1cKPSScavengeZclean_up_failed_promotion6F_v_; -text: .text%JVM_Available; -text: .text%__1cIAddDNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJAssemblerFimulq6MpnMRegisterImpl_2_v_; -text: .text%__1cIRetTableUfind_jsrs_for_target6Mi_pnNRetTableEntry__; -text: .text%__1cNRegisterSaverWrestore_live_registers6FpnOMacroAssembler__v_; -text: .text%__1cLClassLoaderLadd_to_list6FpnOClassPathEntry__v_; -text: .text%__1cNTemplateTableGastore6Fi_v_; -text: .text%__1cNTemplateTableGdstore6Fi_v_; -text: .text%__1cNTemplateTableGfstore6Fi_v_; -text: .text%__1cNTemplateTableGlstore6Fi_v_; -text: .text%__1cNRegisterSaverTsave_live_registers6FpnOMacroAssembler_ipi_pnGOopMap__; -text: .text%__1cNTemplateTableGistore6Fi_v_; -text: .text%__1cIRetTableHadd_jsr6Mii_v_; -text: .text%__1cKPSYoungGenOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cISubDNodeJideal_reg6kM_I_; -text: .text%__1cNTemplateTableFdload6Fi_v_; -text: .text%__1cNTemplateTableFfload6Fi_v_; -text: .text%__1cNTemplateTableFlload6Fi_v_; -text: .text%__1cNTemplateTableFiload6Fi_v_; -text: .text%__1cMmulI_memNodePoper_input_base6kM_I_; -text: .text%__1cNGrowableArray4CpnLmarkOopDesc__Uclear_and_deallocate6M_v_; -text: .text%__1cMLinkResolverbBlookup_method_in_interfaces6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_; -text: .text%__1cRaddL_rReg_memNodeErule6kM_I_; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl__v_; -text: .text%__1cHRetNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRaddL_rReg_memNodeHtwo_adr6kM_I_; -text: .text%__1cMmulF_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cMaddF_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEmovb6MnHAddress_i_v_; -text: .text%Unsafe_AllocateMemory; -text: .text%__1cVMoveF2I_reg_stackNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerHfxrstor6MnHAddress__v_; -text: .text%__1cJAssemblerGfxsave6MnHAddress__v_; -text: .text%__1cJAssemblerEsetb6Mn0AJCondition_pnMRegisterImpl__v_; -text: .text%__1cNGCTaskManagerGthread6MI_pnMGCTaskThread__; -text: .text%__1cRConstantLongValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cMmulD_memNodeHtwo_adr6kM_I_; -text: .text%jni_CallStaticObjectMethod: jni.o; -text: .text%__1cNcmovL_memNodeHtwo_adr6kM_I_; -text: .text%__1cFStateM_sub_Op_AddD6MpknENode__v_; -text: .text%__1cMmulI_memNodeMideal_Opcode6kM_i_; -text: .text%__1cScompL_rReg_memNodeFreloc6kM_i_; -text: .text%__1cLloadSSINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; -text: .text%__1cMPerfDataList2T6M_v_; -text: .text%__1cMmulI_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOcmovD_regUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; -text: .text%__1cNnegI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJAssemblerEnegl6MpnMRegisterImpl__v_; -text: .text%__1cOGenerateOopMapRdo_multianewarray6Mii_v_; -text: .text%__1cLconvI2BNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUPSGenerationCounters2t6MpkciipnOPSVirtualSpace__v_; -text: .text%__1cMPerfDataList2t6Mi_v_; -text: .text%__1cFStateP_sub_Op_ConvI2D6MpknENode__v_; -text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; -text: .text%__1cJCodeCachebCmake_marked_nmethods_zombies6F_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_; -text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cFStateM_sub_Op_CmpF6MpknENode__v_; -text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; -text: .text%__1cJAssemblerGmovzbl6MpnMRegisterImpl_2_v_; -text: .text%__1cILogDNodeJideal_reg6kM_I_; -text: .text%__1cRaddL_mem_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMincL_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateO_sub_Op_Conv2B6MpknENode__v_; -text: .text%__1cNcmovL_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_CallStaticObjectMethodV: jni.o; -text: .text%__1cMmulD_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNMemoryManager2t6M_v_; -text: .text%__1cMaddF_immNodeKconst_size6kM_i_; -text: .text%__1cVMoveL2D_reg_stackNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFciEnvbNArrayIndexOutOfBoundsException_instance6M_pnKciInstance__; -text: .text%__1cMsubD_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMmulI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMaddF_immNodeFreloc6kM_i_; -text: .text%__1cMaddD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMaddD_immNodeFreloc6kM_i_; -text: .text%jni_IsInstanceOf: jni.o; -text: .text%__1cMaddD_immNodeKconst_size6kM_i_; -text: .text%jni_Throw: jni.o; -text: .text%__1cOsalI_mem_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSPSPromotionManager2t6M_v_; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cOLibraryCallKitXgenerate_current_thread6MrpnENode__2_; -text: .text%__1cMsubF_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetLastErrorString; -text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_22_v_; -text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; -text: .text%__1cFStateM_sub_Op_SubF6MpknENode__v_; -text: .text%JVM_GetInterfaceVersion; -text: .text%__1cKstoreBNodeErule6kM_I_; -text: .text%__1cKVtableStub2n6FLi_pv_; -text: .text%__1cJAssemblerEdecq6MpnMRegisterImpl__v_; -text: .text%__1cOtailjmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cCosFyield6F_v_; -text: .text%__1cOPSVirtualSpace2t6MnNReservedSpace_L_v_; -text: .text%Unsafe_SetMemory; -text: .text%__1cCosIjvm_path6Fpci_v_; -text: .text%__1cJTimeStamp2t6M_v_; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_2i_v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorKpass_float6M_v_; -text: .text%__1cISubFNodeJideal_reg6kM_I_; -text: .text%__1cNGrowableArray4CpnIPerfData__Egrow6Mi_v_; -text: .text%__1cMSysClassPathNreset_item_at6Mi_v_; -text: .text%__1cFStateM_sub_Op_LogD6MpknENode__v_; -text: .text%__1cLloadSSINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerLlock_object6MpnMRegisterImpl__v_; -text: .text%__1cISubFNodeGadd_id6kM_pknEType__; -text: .text%__1cFStateM_sub_Op_SubD6MpknENode__v_; -text: .text%JVM_RegisterSignal; -text: .text%JVM_FindSignal; -text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o; -text: .text%__1cMorL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_; -text: .text%__1cKConv2BNodeJideal_reg6kM_I_; -text: .text%__1cXNativeSignatureIteratorIdo_float6M_v_; -text: .text%jni_GetDoubleArrayRegion: jni.o; -text: .text%__1cLloadSSDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJArgumentsObuild_jvm_args6Fpkc_v_; -text: .text%__1cOLibraryCallKitMpop_math_arg6M_pnENode__; -text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cFStateO_sub_Op_CMoveL6MpknENode__v_; -text: .text%__1cMVM_OperationNdoit_epilogue6M_v_; -text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; -text: .text%__1cRaddI_mem_rRegNodeFreloc6kM_i_; -text: .text%__1cSInterpreterRuntimebKthrow_ArrayIndexOutOfBoundsException6FpnKJavaThread_pci_v_; -text: .text%__1cVMoveF2I_reg_stackNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableGfconst6Fi_v_; -text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%__1cQmulI_mem_immNodeFreloc6kM_i_; -text: .text%__1cNincI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNVM_DeoptimizeEdoit6M_v_; -text: .text%__1cLMoveF2INodeLbottom_type6kM_pknEType__; -text: .text%__1cUConstantOopReadValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cRaddI_mem_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMdivD_immNodeKconst_size6kM_i_; -text: .text%__1cQObjectStartArrayKinitialize6MnJMemRegion__v_; -text: .text%__1cQObjectStartArraySset_covered_region6MnJMemRegion__v_; -text: .text%__1cUGcThreadCountClosureJdo_thread6MpnGThread__v_; -text: .text%__1cNGrowableArray4CpnTDerivedPointerEntry__Egrow6Mi_v_; -text: .text%__1cPGCMemoryManagerXinitialize_gc_stat_info6M_v_; -text: .text%__1cPGCMemoryManager2t6M_v_; -text: .text%__1cKGCStatInfo2t6Mi_v_; -text: .text%__1cTMaskFillerForNativeLpass_object6M_v_; -text: .text%__1cTMaskFillerForNativeJpass_long6M_v_; -text: .text%__1cCosHrealloc6FpvL_1_; -text: .text%__1cCosWactive_processor_count6F_i_; -text: .text%__1cCosNsigexitnum_pd6F_i_; -text: .text%__1cMLinkResolverbEvtable_index_of_miranda_method6FnLKlassHandle_nMsymbolHandle_2pnGThread__i_; -text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; -text: .text%__1cNstoreImmBNodeErule6kM_I_; -text: .text%__1cNstoreImmINodeErule6kM_I_; -text: .text%__1cFParseMjump_if_join6MpnENode_2_2_; -text: .text%__1cKJNIHandlesQmake_weak_global6FnGHandle__pnI_jobject__; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_float_field06FnJBasicType__pC_; -text: .text%__1cFParseRdo_multianewarray6M_v_; -text: .text%jni_NewWeakGlobalRef: jni.o; -text: .text%jni_CallStaticVoidMethodV: jni.o; -text: .text%jni_CallStaticBooleanMethod: jni.o; -text: .text%__1cNGrowableArray4CpnNmethodOopDesc__Egrow6Mi_v_; -text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; -text: .text%__1cNGrowableArray4CpC_Egrow6Mi_v_; -text: .text%__1cNGrowableArray4CL_Egrow6Mi_v_; -text: .text%__1cIPSOldGenKinitialize6MnNReservedSpace_Lpkci_v_; -text: .text%__1cIPSOldGenYinitialize_virtual_space6MnNReservedSpace_L_v_; -text: .text%__1cIPSOldGenPinitialize_work6Mpkci_v_; -text: .text%__1cTAbstractInterpreterKinitialize6F_v_; -text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; -text: .text%__1cOPSVirtualSpace2t6M_v_; -text: .text%__1cZInterpreterMacroAssemblerSupdate_mdp_for_ret6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerPset_mdp_flag_at6MpnMRegisterImpl_i_v_; -text: .text%__1cZInterpreterMacroAssemblerWdispatch_only_noverify6MnITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl__v_; -text: .text%__1cKReflectionbFbasic_type_arrayklass_to_mirror6FpnMklassOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cJArgumentsVset_parallel_gc_flags6F_v_; -text: .text%__1cQAgentLibraryList2t6M_v_; -text: .text%__1cMmulF_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJAssemblerGmovsbl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerGmovswl6MpnMRegisterImpl_2_v_; -text: .text%__1cRaddL_mem_rRegNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJAssemblerGmovzwl6MpnMRegisterImpl_2_v_; -text: .text%__1cRComputeEntryStackIdo_float6M_v_; -text: .text%__1cJAssemblerFcmovl6Mn0AJCondition_pnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerEaddl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cOGenerateOopMapTadd_to_ref_init_set6Mi_v_; -text: .text%__1cJAssemblerEcmpq6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerFidivl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerFidivq6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEcdql6M_v_; -text: .text%__1cJAssemblerEcdqq6M_v_; -text: .text%__1cJAssemblerEleal6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerDorq6MnHAddress_i_v_; -text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; -text: .text%__1cMGCTaskThreadDrun6M_v_; -text: .text%__1cMGCTaskThreadFstart6M_v_; -text: .text%__1cMGCTaskThread2t6MpnNGCTaskManager_II_v_; -text: .text%__1cJStubQdDueueOregister_queue6Fp0_v_; -text: .text%__1cISubFNodeDsub6kMpknEType_3_3_; -text: .text%__1cJAssemblerFxaddl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cNGCTaskManagerKset_thread6MIpnMGCTaskThread__v_; -text: .text%__1cJAssemblerHldmxcsr6MnHAddress__v_; -text: .text%__1cKcastPPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMPeriodicTask2t6ML_v_; -text: .text%__1cMPeriodicTaskGenroll6M_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC22_v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fi_v_; -text: .text%__1cNTemplateTableKdouble_cmp6Fi_v_; -text: .text%__1cNTemplateTableKinitialize6F_v_; -text: .text%__1cNTemplateTableGlconst6Fi_v_; -text: .text%__1cNTemplateTableGdconst6Fi_v_; -text: .text%__1cNTemplateTableHcastore6F_v_; -text: .text%__1cNTemplateTableKif_nullcmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableHif_acmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableUinvokevirtual_helper6FpnMRegisterImpl_22_v_; -text: .text%__1cEMIN24CL_6FTA0_0_; -text: .text%__1cRCardTableModRefBSbCpar_chunk_heapword_alignment6F_L_; -text: .text%__1cOMacroAssemblerPcorrected_idivl6MpnMRegisterImpl__i_; -text: .text%__1cOMacroAssemblerPcorrected_idivq6MpnMRegisterImpl__i_; -text: .text%__1cLNamedThread2t6M_v_; -text: .text%__1cLNamedThreadIset_name6MpkcE_v_; -text: .text%__1cIDivDNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFStatebB_sub_Op_PartialSubtypeCheck6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_DivI6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_DivD6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_ConvL2F6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_ConvL2D6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_ConvF2I6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_ConvD2F6MpknENode__v_; -text: .text%__1cScompP_rReg_memNodeFreloc6kM_i_; -text: .text%__1cKCastPPNodeJideal_reg6kM_I_; -text: .text%__1cLMoveF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLMoveL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTconvL2D_reg_memNodeFreloc6kM_i_; -text: .text%__1cMdivD_immNodeFreloc6kM_i_; -text: .text%__1cMmulF_memNodeFreloc6kM_i_; -text: .text%__1cMaddF_memNodeFreloc6kM_i_; -text: .text%__1cLConvF2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLConvD2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKciTypeFlowLStateVectorRdo_multianewarray6MpnQciBytecodeStream__v_; -text: .text%__1cRCollectorCounters2t6Mpkci_v_; -text: .text%Unsafe_CompareAndSwapObject; -text: .text%__1cNSafepointBlob2n6FLI_pv_; -text: .text%__1cNSafepointBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNSafepointBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cINegFNodeJideal_reg6kM_I_; -text: .text%__1cMVirtualSpace2t6M_v_; -text: .text%__1cLConvD2FNodeJideal_reg6kM_I_; -text: .text%__1cLConvF2INodeJideal_reg6kM_I_; -text: .text%__1cLConvL2DNodeJideal_reg6kM_I_; -text: .text%__1cLConvL2FNodeJideal_reg6kM_I_; -text: .text%__1cXPartialSubtypeCheckNodeJideal_reg6kM_I_; -text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_; -text: .text%__1cTAbstract_VM_VersionKvm_release6F_pkc_; -text: .text%__1cTAbstract_VM_VersionXinternal_vm_info_string6F_pkc_; -text: .text%__1cJAssemblerEshrq6MpnMRegisterImpl__v_; -text: .text%__1cMsubF_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cParrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerEsubq6MnHAddress_i_v_; -text: .text%__1cLOptoRuntimeIgenerate6FpnFciEnv__v_; -text: .text%__1cMmulD_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cParrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: arguments.o; -text: .text%__1cJArgumentsWPropertyList_get_value6FpnOSystemProperty_pkc_4_; -text: .text%__1cJArgumentsFparse6FpknOJavaVMInitArgs__i_; -text: .text%__1cKNoopGCTaskQcreate_on_c_heap6F_p0_; -text: .text%__1cJAssemblerFxchgl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerFxchgq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJArgumentsSparse_vm_init_args6FpknOJavaVMInitArgs__i_; -text: .text%__1cJAssemblerIcmpxchgl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cICodeHeap2t6M_v_; -text: .text%__1cHVM_ExitNset_vm_exited6F_i_; -text: .text%__1cQRelocationHolder2t6M_v_; -text: .text%__1cICodeHeapFclear6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; -text: .text%__1cLsymbolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cJArgumentsSset_bytecode_flags6F_v_; -text: .text%__1cJArgumentsUset_ergonomics_flags6F_v_; -text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsMget_property6Fpkc_2_; -text: .text%__1cLsymbolKlassOset_alloc_size6MI_v_; -text: .text%__1cLsymbolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cNGCTaskManagerKthreads_do6MpnNThreadClosure__v_; -text: .text%__1cNGCTaskManagerKinitialize6M_v_; -text: .text%__1cNGCTaskManager2t6MI_v_; -text: .text%__1cDhpiKinitialize6F_i_; -text: .text%__1cDhpiZinitialize_socket_library6F_i_; -text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_; -text: .text%__1cRInlineCacheBufferKinitialize6F_v_; -text: .text%__1cWInlineCacheBuffer_init6F_v_; -text: .text%__1cJAssemblerHclflush6MnHAddress__v_; -text: .text%__1cOAbstractICacheKinitialize6F_v_; -text: .text%__1cLGCTaskQdDueueQcreate_on_c_heap6F_p0_; -text: .text%__1cMSysClassPathQadd_jars_to_path6Fpcpkc_1_; -text: .text%__1cHGCStats2t6M_v_; -text: .text%__1cQGCPolicyCounters2t6Mpkcii_v_; -text: .text%__1cMSysClassPathPexpand_endorsed6M_v_; -text: .text%__1cMSysClassPath2T6M_v_; -text: .text%__1cLicache_init6F_v_; -text: .text%__1cYGCAdaptivePolicyCounters2t6MpkciipnSAdaptiveSizePolicy__v_; -text: .text%__1cHVM_ExitbJwait_for_threads_in_native_to_block6F_i_; -text: .text%__1cJAssemblerHstmxcsr6MnHAddress__v_; -text: .text%__1cTICacheStubGeneratorVgenerate_icache_flush6MppFpCii_i_v_; -text: .text%__1cMSysClassPath2t6Mpkc_v_; -text: .text%__1cJArgumentsWinit_system_properties6F_v_; -text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_; -text: .text%__1cOchunkpool_init6F_v_; -text: .text%__1cQSystemDictionarybAcompute_java_system_loader6FpnGThread__v_; -text: .text%__1cHVM_ExitEdoit6M_v_; -text: .text%__1cWAdjoiningVirtualSpaces2t6MnNReservedSpace_LLL_v_; -text: .text%__1cUAdjoiningGenerations2t6MnNReservedSpace_LLLLLLL_v_; -text: .text%__1cHOrLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cZCompiledArgumentOopFinderRhandle_oop_offset6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: adaptiveSizePolicy.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: regmask.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: indexSet.o; -text: .text%__1cFframeVinterpreter_frame_mdp6kM_pC_; -text: .text%__1cPvm_init_globals6F_v_; -text: .text%__1cQSystemDictionaryKclasses_do6FpFpnMklassOopDesc__v_v_; -text: .text%__1cQSystemDictionaryKmethods_do6FpFpnNmethodOopDesc__v_v_; -text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_; -text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_; -text: .text%__1cMinit_globals6F_i_; -text: .text%__1cMexit_globals6F_v_; -text: .text%__1cOMacroAssemblerKdecrementl6MpnMRegisterImpl_i_v_; -text: .text%__1cKcastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; -text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_; -text: .text%__1cMPeriodicTask2T5B6M_v_; -text: .text%__1cNMemoryServicebFadd_parallel_scavenge_heap_info6FpnUParallelScavengeHeap__v_; -text: .text%__1cMPeriodicTaskJdisenroll6M_v_; -text: .text%__1cSset_init_completed6F_v_; -text: .text%__1cNMemoryServiceXadd_psYoung_memory_pool6FpnKPSYoungGen_pnNMemoryManager_4_v_; -text: .text%__1cTAbstract_VM_VersionHvm_name6F_pkc_; -text: .text%__1cTAbstract_VM_VersionJvm_vendor6F_pkc_; -text: .text%__1cSobjArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC222_v_; -text: .text%__1cKmutex_init6F_v_; -text: .text%__1cHnmethodbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cNTemplateTableF_goto6F_v_; -text: .text%__1cNTemplateTableGgoto_w6F_v_; -text: .text%__1cNTemplateTableFjsr_w6F_v_; -text: .text%__1cNTemplateTableDjsr6F_v_; -text: .text%__1cNinstanceKlassZrelease_C_heap_structures6M_v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCpnMRegisterImpl_3_v_; -text: .text%__1cFJNIidKdeallocate6Fp0_v_; -text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; -text: .text%__1cStemplateTable_init6F_v_; -text: .text%__1cNTemplateTableNpd_initialize6F_v_; -text: .text%__1cNTemplateTableDnop6F_v_; -text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_; -text: .text%__1cNTemplateTableLaconst_null6F_v_; -text: .text%__1cSinstanceKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cKVM_VersionKinitialize6F_v_; -text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_; -text: .text%__1cPVM_Version_init6F_v_; -text: .text%__1cNTemplateTableGbipush6F_v_; -text: .text%__1cNTemplateTableGsipush6F_v_; -text: .text%__1cYVM_Version_StubGeneratorTgenerate_getPsrInfo6M_pC_; -text: .text%__1cNTemplateTableGldc2_w6F_v_; -text: .text%__1cNTemplateTableFiload6F_v_; -text: .text%__1cNTemplateTableLfast_iload26F_v_; -text: .text%__1cNTemplateTableKfast_iload6F_v_; -text: .text%__1cNTemplateTableFlload6F_v_; -text: .text%__1cNTemplateTableFfload6F_v_; -text: .text%__1cNTemplateTableFdload6F_v_; -text: .text%__1cNTemplateTableFaload6F_v_; -text: .text%__1cVInterfaceSupport_init6F_v_; -text: .text%__1cNTemplateTableKwide_iload6F_v_; -text: .text%__1cNTemplateTableKwide_lload6F_v_; -text: .text%__1cNTemplateTableKwide_fload6F_v_; -text: .text%__1cNTemplateTableKwide_dload6F_v_; -text: .text%__1cNTemplateTableKwide_aload6F_v_; -text: .text%__1cScheck_ThreadShadow6F_v_; -text: .text%__1cNTemplateTableGiaload6F_v_; -text: .text%__1cNTemplateTableGlaload6F_v_; -text: .text%__1cNTemplateTableGfaload6F_v_; -text: .text%__1cNTemplateTableGdaload6F_v_; -text: .text%__1cNTemplateTableGaaload6F_v_; -text: .text%__1cNTemplateTableGbaload6F_v_; -text: .text%__1cNTemplateTableGcaload6F_v_; -text: .text%__1cNTemplateTableMfast_icaload6F_v_; -text: .text%__1cNTemplateTableGsaload6F_v_; -text: .text%__1cSReferenceProcessorMinit_statics6F_v_; -text: .text%__1cXreferenceProcessor_init6F_v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl_33_v_; -text: .text%__1cZInterpreterMacroAssemblerUdispatch_only_normal6MnITosState__v_; -text: .text%__1cNTemplateTableHaload_06F_v_; -text: .text%__1cNTemplateTableGistore6F_v_; -text: .text%__1cNTemplateTableGlstore6F_v_; -text: .text%__1cNTemplateTableGfstore6F_v_; -text: .text%__1cNTemplateTableGdstore6F_v_; -text: .text%__1cNTemplateTableGastore6F_v_; -text: .text%__1cNTemplateTableLwide_istore6F_v_; -text: .text%__1cNTemplateTableLwide_lstore6F_v_; -text: .text%__1cNTemplateTableLwide_fstore6F_v_; -text: .text%__1cNTemplateTableLwide_dstore6F_v_; -text: .text%__1cNTemplateTableLwide_astore6F_v_; -text: .text%__1cNTemplateTableHiastore6F_v_; -text: .text%__1cNTemplateTableHlastore6F_v_; -text: .text%__1cNTemplateTableHfastore6F_v_; -text: .text%__1cNTemplateTableHdastore6F_v_; -text: .text%__1cNTemplateTableHaastore6F_v_; -text: .text%__1cNTemplateTableHbastore6F_v_; -text: .text%__1cNMemoryServiceVadd_psOld_memory_pool6FpnIPSOldGen_pnNMemoryManager__v_; -text: .text%__1cNTemplateTableHsastore6F_v_; -text: .text%__1cZInterpreterMacroAssemblerbFset_method_data_pointer_for_bcp6M_v_; -text: .text%__1cKPSYoungGenUset_space_boundaries6MLL_v_; -text: .text%__1cKPSYoungGenbGcompute_initial_space_boundaries6M_v_; -text: .text%__1cKPSYoungGenPinitialize_work6M_v_; -text: .text%__1cKPSYoungGenKinitialize6MnNReservedSpace_L_v_; -text: .text%__1cNTemplateTableDpop6F_v_; -text: .text%__1cNTemplateTableEpop26F_v_; -text: .text%__1cNTemplateTableDdup6F_v_; -text: .text%__1cNTemplateTableGdup_x16F_v_; -text: .text%__1cNTemplateTableGdup_x26F_v_; -text: .text%__1cNTemplateTableEdup26F_v_; -text: .text%__1cNTemplateTableHdup2_x16F_v_; -text: .text%__1cNTemplateTableHdup2_x26F_v_; -text: .text%__1cNTemplateTableEswap6F_v_; -text: .text%__1cKPSYoungGenYinitialize_virtual_space6MnNReservedSpace_L_v_; -text: .text%__1cKPSYoungGen2t6MLLL_v_; -text: .text%__1cNTemplateTableEidiv6F_v_; -text: .text%__1cNTemplateTableEirem6F_v_; -text: .text%__1cNTemplateTableElmul6F_v_; -text: .text%__1cNTemplateTableEldiv6F_v_; -text: .text%__1cNTemplateTableElrem6F_v_; -text: .text%__1cNTemplateTableElshl6F_v_; -text: .text%__1cNTemplateTableElshr6F_v_; -text: .text%__1cNTemplateTableFlushr6F_v_; -text: .text%__1cNTemplateTableEineg6F_v_; -text: .text%__1cNTemplateTableElneg6F_v_; -text: .text%__1cLVtableStubsKinitialize6F_v_; -text: .text%__1cNTemplateTableEfneg6F_v_; -text: .text%__1cNTemplateTableEdneg6F_v_; -text: .text%__1cNTemplateTableEiinc6F_v_; -text: .text%__1cNTemplateTableJwide_iinc6F_v_; -text: .text%__1cNTemplateTableElcmp6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o; -text: .text%__1cKPSScavengeKinitialize6F_v_; -text: .text%__1cQinterpreter_init6F_v_; -text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cNMemoryServiceWadd_psPerm_memory_pool6FpnJPSPermGen_pnNMemoryManager__v_; -text: .text%__1cNMemoryServiceZadd_code_heap_memory_pool6FpnICodeHeap__v_; -text: .text%__1cNTemplateTableDret6F_v_; -text: .text%__1cNTemplateTableIwide_ret6F_v_; -text: .text%__1cNTemplateTableLtableswitch6F_v_; -text: .text%__1cNTemplateTableMlookupswitch6F_v_; -text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; -text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; -text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; -text: .text%__1cSPSPromotionManagerKinitialize6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o; -text: .text%__1cNTemplateTableIgetfield6Fi_v_; -text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cNTemplateTableIputfield6Fi_v_; -text: .text%__1cNTemplateTableJputstatic6Fi_v_; -text: .text%__1cJPSPermGen2t6MnNReservedSpace_LLLLpkci_v_; -text: .text%__1cXNativeSignatureIteratorHdo_byte6M_v_; -text: .text%__1cIPSOldGen2t6MLLLpkci_v_; -text: .text%__1cPmethodDataKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cNTemplateTableNinvokevirtual6Fi_v_; -text: .text%__1cNTemplateTableNinvokespecial6Fi_v_; -text: .text%__1cNTemplateTableMinvokestatic6Fi_v_; -text: .text%__1cNTemplateTableRfast_invokevfinal6Fi_v_; -text: .text%__1cNTemplateTablePinvokeinterface6Fi_v_; -text: .text%__1cNTemplateTableE_new6F_v_; -text: .text%__1cNTemplateTableInewarray6F_v_; -text: .text%__1cNTemplateTableJanewarray6F_v_; -text: .text%__1cNTemplateTableLarraylength6F_v_; -text: .text%__1cNTemplateTableJcheckcast6F_v_; -text: .text%__1cNTemplateTableKinstanceof6F_v_; -text: .text%__1cNTemplateTableL_breakpoint6F_v_; -text: .text%__1cNTemplateTableGathrow6F_v_; -text: .text%__1cNTemplateTableMmonitorenter6F_v_; -text: .text%__1cNTemplateTableLmonitorexit6F_v_; -text: .text%__1cNTemplateTableEwide6F_v_; -text: .text%__1cNTemplateTableOmultianewarray6F_v_; -text: .text%__1cIPSOldGen2t6MnNReservedSpace_LLLLpkci_v_; -text: .text%__1cQvtableStubs_init6F_v_; -text: .text%__1cQaccessFlags_init6F_v_; -text: .text%__1cSInterpreterRuntimeYthrow_ClassCastException6FpnKJavaThread_pnHoopDesc__v_; -text: .text%__1cSInterpreterRuntimeSupdate_mdp_for_ret6FpnKJavaThread_i_v_; -text: .text%__1cNeventlog_init6F_v_; -text: .text%__1cOMacroAssemblerGc2bool6MpnMRegisterImpl__v_; -text: .text%__1cPmethodDataKlassOset_alloc_size6MI_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cXSignatureHandlerLibraryQset_handler_blob6F_pC_; -text: .text%__1cOMacroAssemblerRsign_extend_short6MpnMRegisterImpl__v_; -text: .text%__1cLPSMarkSweepKinitialize6F_v_; -text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o; -text: .text%__1cVcreate_initial_thread6FnGHandle_pnKJavaThread_pnGThread__pnHoopDesc__: thread.o; -text: .text%__1cbAcall_initializeSystemClass6FpnGThread__v_: thread.o; -text: .text%__1cWreset_vm_info_property6FpnGThread__v_: thread.o; -text: .text%__1cPmethodDataKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cHRetDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cNWatcherThread2t6M_v_; -text: .text%__1cNWatcherThreadDrun6M_v_; -text: .text%__1cNWatcherThreadFstart6F_v_; -text: .text%__1cNWatcherThreadEstop6F_v_; -text: .text%__1cOMacroAssemblerQsign_extend_byte6MpnMRegisterImpl__v_; -text: .text%__1cHRetDataJfixup_ret6MinQmethodDataHandle__pC_; -text: .text%__1cLmethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cbAPSGCAdaptivePolicyCounters2t6MpkciipnUPSAdaptiveSizePolicy__v_; -text: .text%__1cKDictionaryKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cKDictionaryKclasses_do6MpFpnMklassOopDesc__v_v_; -text: .text%__1cbCAbstractInterpreterGeneratorbFgenerate_slow_signature_handler6M_pC_; -text: .text%__1cUInterpreterGeneratorTgenerate_math_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cUInterpreterGeneratorXgenerate_abstract_entry6M_pC_; -text: .text%__1cUInterpreterGeneratorUgenerate_empty_entry6M_pC_; -text: .text%__1cKDictionaryKfree_entry6MpnPDictionaryEntry__v_; -text: .text%__1cUInterpreterGeneratorXgenerate_accessor_entry6M_pC_; -text: .text%__1cKDictionary2t6Mi_v_; -text: .text%__1cJBytecodesKinitialize6F_v_; -text: .text%__1cObytecodes_init6F_v_; -text: .text%__1cJBytecodesNpd_initialize6F_v_; -text: .text%__1cHCompileRpd_compiler2_init6F_v_; -text: .text%__1cKC2CompilerKinitialize6M_v_; -text: .text%__1cFStateQ_sub_Op_TailJump6MpknENode__v_; -text: .text%__1cUInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cWinvocationCounter_init6F_v_; -text: .text%__1cQPlaceholderTable2t6Mi_v_; -text: .text%__1cFStateL_sub_Op_OrL6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_NegF6MpknENode__v_; -text: .text%__1cQprint_statistics6F_v_; -text: .text%__1cLbefore_exit6FpnKJavaThread__v_; -text: .text%__1cFStateP_sub_Op_MoveL2D6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_MoveF2I6MpknENode__v_; -text: .text%__1cHvm_exit6Fi_v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cQjava_lang_ThreadPcompute_offsets6F_v_; -text: .text%__1cVjava_lang_ThreadGroupPcompute_offsets6F_v_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectPcompute_offsets6F_v_; -text: .text%__1cYjava_lang_reflect_MethodPcompute_offsets6F_v_; -text: .text%__1cOThreadCriticalKinitialize6F_v_; -text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; -text: .text%__1cYjava_lang_reflect_MethodNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cYsun_reflect_ConstantPoolPcompute_offsets6F_v_; -text: .text%__1cbIjava_security_AccessControlContextPcompute_offsets6F_v_; -text: .text%__1cQjava_lang_SystemPcompute_offsets6F_v_; -text: .text%__1cPjava_nio_BufferPcompute_offsets6F_v_; -text: .text%__1cFStateO_sub_Op_CMoveD6MpknENode__v_; -text: .text%__1cZsun_misc_AtomicLongCSImplPcompute_offsets6F_v_; -text: .text%__1cFStateO_sub_Op_CastPP6MpknENode__v_; -text: .text%__1cWThreadLocalAllocBufferWstartup_initialization6F_v_; -text: .text%__1cLJavaClassesbAcompute_hard_coded_offsets6F_v_; -text: .text%__1cLJavaClassesPcompute_offsets6F_v_; -text: .text%__1cPGlobalTLABStats2t6M_v_; -text: .text%__1cQjavaClasses_init6F_v_; -text: .text%jni_ToReflectedMethod: jni.o; -text: .text%__1cSThreadLocalStorageEinit6F_v_; -text: .text%__1cNThreadServiceEinit6F_v_; -text: .text%__1cYjni_GetBooleanField_addr6F_pC_; -text: .text%__1cVjni_GetByteField_addr6F_pC_; -text: .text%__1cVjni_GetCharField_addr6F_pC_; -text: .text%__1cWjni_GetShortField_addr6F_pC_; -text: .text%__1cUjni_GetIntField_addr6F_pC_; -text: .text%__1cVjni_GetLongField_addr6F_pC_; -text: .text%__1cWjni_GetFloatField_addr6F_pC_; -text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; -text: .text%__1cXjni_GetDoubleField_addr6F_pC_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: phase.o; -text: .text%__1cTConstantDoubleValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; -text: .text%__1cKPerfMemoryUcreate_memory_region6FL_v_; -text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_L_; -text: .text%__1cOtailjmpIndNodeFreloc6kM_i_; -text: .text%__1cETypeRInitialize_shared6FpnHCompile__v_; -text: .text%__1cWconstantPoolCacheKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cWconstantPoolCacheKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_; -text: .text%__1cRconstantPoolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cFciEnvXget_or_create_exception6MrpnI_jobject_nMsymbolHandle__pnKciInstance__; -text: .text%__1cRconstantPoolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cKPerfMemoryHdestroy6F_v_; -text: .text%__1cQconstMethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cKPerfMemoryKinitialize6F_v_; -text: .text%__1cPperfMemory_exit6F_v_; -text: .text%__1cQconstMethodKlassOset_alloc_size6MI_v_; -text: .text%__1cPperfMemory_init6F_v_; -text: .text%__1cNGrowableArray4CpnIPerfData__JappendAll6Mpk2_v_; -text: .text%__1cMPerfDataListFclone6M_p0_; -text: .text%__1cQconstMethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cMciKlassKlassEmake6F_p0_; -text: .text%__1cMPerfDataList2t6Mp0_v_; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnPPerfLongCounter__; -text: .text%__1cPPerfDataManagerHsampled6F_pnMPerfDataList__; -text: .text%__1cMmulD_memNodeFreloc6kM_i_; -text: .text%__1cPPerfDataManagerHdestroy6F_v_; -text: .text%__1cMsubD_immNodeFreloc6kM_i_; -text: .text%__1cMsubF_memNodeFreloc6kM_i_; -text: .text%lookupDirectBufferClasses: jni.o; -text: .text%__1cVquicken_jni_functions6F_v_; -text: .text%JNI_CreateJavaVM; -text: .text%__1cFParseWprofile_null_checkcast6M_v_; -text: .text%__1cQJNI_FastGetFieldbFgenerate_fast_get_boolean_field6F_pC_; -text: .text%__1cOsalI_mem_1NodeFreloc6kM_i_; -text: .text%__1cIciMethodMvtable_index6M_i_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_byte_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_char_field6F_pC_; -text: .text%__1cMmulI_memNodeFreloc6kM_i_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_short_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbBgenerate_fast_get_int_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_long_field6F_pC_; -text: .text%__1cMincL_memNodeFreloc6kM_i_; -text: .text%__1cRaddL_mem_rRegNodeFreloc6kM_i_; -text: .text%__1cRaddL_mem_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMincL_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_float_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_double_field6F_pC_; -text: .text%__1cNcmovL_memNodeFreloc6kM_i_; -text: .text%__1cKJNIHandlesKinitialize6F_v_; -text: .text%__1cQjni_handles_init6F_v_; -text: .text%JVM_InitProperties; -text: .text%JVM_Halt; -text: .text%JVM_MaxMemory; -text: .text%JVM_GetClassDeclaredMethods; -text: .text%__1cOsalI_mem_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_InitializeSocketLibrary; -text: .text%JVM_Socket; -text: .text%__1cPciObjArrayKlass2t6MpnIciSymbol_pnHciKlass_i_v_; -text: .text%__1cbEinitialize_converter_functions6F_v_; -text: .text%JVM_SupportsCX8; -text: .text%__1cUciObjArrayKlassKlassEmake6F_p0_; -text: .text%__1cTcompilerOracle_init6F_v_; -text: .text%__1cOCompilerOraclePparse_from_file6F_v_; -text: .text%__1cKTypeOopPtrFxdual6kM_pknEType__; -text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; -text: .text%__1cVcompiledICHolderKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cVcompiledICHolderKlassOset_alloc_size6MI_v_; -text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cRJvmtiEventEnabled2t6M_v_; -text: .text%__1cRJvmtiEventEnabledFclear6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; -text: .text%__1cNGrowableArray4CpnIciMethod__Egrow6Mi_v_; -text: .text%__1cNCompileBrokerQset_should_block6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_start6F_v_; -text: .text%__1cPGenerationSizerQinitialize_flags6M_v_; -text: .text%__1cUJvmtiEventControllerHvm_init6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_death6F_v_; -text: .text%__1cUParallelScavengeHeapItop_addr6kM_ppnIHeapWord__; -text: .text%__1cUParallelScavengeHeapIend_addr6kM_ppnIHeapWord__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEventController.o; -text: .text%__1cLJvmtiExportRenter_start_phase6F_v_; -text: .text%__1cUParallelScavengeHeapEheap6F_p0_; -text: .text%__1cUParallelScavengeHeapNgc_threads_do6kMpnNThreadClosure__v_; -text: .text%__1cUParallelScavengeHeapYpermanent_object_iterate6MpnNObjectClosure__v_; -text: .text%__1cLJvmtiExportQenter_live_phase6F_v_; -text: .text%__1cLJvmtiExportNpost_vm_start6F_v_; -text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_; -text: .text%__1cLJvmtiExportNpost_vm_death6F_v_; -text: .text%__1cLJvmtiExportbMtransition_pending_onload_raw_monitors6F_v_; -text: .text%__1cUParallelScavengeHeapMmax_capacity6kM_L_; -text: .text%__1cUJvmtiPendingMonitorsXtransition_raw_monitors6F_v_; -text: .text%__1cUParallelScavengeHeapPpost_initialize6M_v_; -text: .text%__1cUParallelScavengeHeapKinitialize6M_i_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o; -text: .text%__1cPClassFileParserbFjava_lang_ref_Reference_fix_pre6MpnPtypeArrayHandle_nSconstantPoolHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cPClassFileParserXjava_lang_Class_fix_pre6MpnOobjArrayHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cPClassFileParserYjava_lang_Class_fix_post6Mpi_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiImpl.o; -text: .text%__1cNGrowableArray4CpnPJvmtiRawMonitor__Uclear_and_deallocate6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o; -text: .text%__1cRCompilationPolicyUcompleted_vm_startup6F_v_; -text: .text%__1cOtypeArrayKlassKinitialize6MpnGThread__v_; -text: .text%__SLIP.DELETER__C: ostream.o; -text: .text%__1cWcompilationPolicy_init6F_v_; -text: .text%__1cMostream_exit6F_v_; -text: .text%__1cTtypeArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cbCTwoGenerationCollectorPolicyMrem_set_name6M_nJGenRemSetEName__; -text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cQostream_init_log6F_v_; -text: .text%__1cIUniversePcheck_alignment6FLLpkc_v_; -text: .text%__1cIUniverseHgenesis6FpnGThread__v_; -text: .text%__1cIUniverseNfixup_mirrors6FpnGThread__v_; -text: .text%__1cMostream_init6F_v_; -text: .text%__1cNdefaultStreamEinit6M_v_; -text: .text%__1cKklassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cKklassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cNuniverse_init6F_i_; -text: .text%__1cIUniversePinitialize_heap6F_i_; -text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_; -text: .text%__1cOuniverse2_init6F_v_; -text: .text%__1cIUniverseYcompute_base_vtable_size6F_v_; -text: .text%__1cCosXnon_memory_address_word6F_pc_; -text: .text%__1cCosGinit_26F_i_; -text: .text%__1cbCTwoGenerationCollectorPolicyUinitialize_size_info6M_v_; -text: .text%__1cCosEinit6F_v_; -text: .text%__1cCosHSolarisUsynchronization_init6F_v_; -text: .text%Unsafe_SetNativeLong; -text: .text%__1cCosHSolarisOlibthread_init6F_v_; -text: .text%__1cJLoadFNodeMstore_Opcode6kM_i_; -text: .text%Unsafe_FreeMemory; -text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; -text: .text%Unsafe_PageSize; -text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; -text: .text%__1cNpriocntl_stub6FinGidtype_iipc_l_: os_solaris.o; -text: .text%__1cbCTwoGenerationCollectorPolicyQinitialize_flags6M_v_; -text: .text%__1cCosLsignal_wait6F_i_; -text: .text%JVM_RegisterUnsafeMethods; -text: .text%__1cCosNsignal_notify6Fi_v_; -text: .text%__1cCosOsignal_init_pd6F_v_; -text: .text%__1cLClassLoaderQload_zip_library6F_v_; -text: .text%__1cLClassLoaderZcreate_package_info_table6F_v_; -text: .text%__1cLClassLoaderKinitialize6F_v_; -text: .text%__1cLClassLoaderVcompute_Object_vtable6F_i_; -text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; -text: .text%__1cNCollectedHeap2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: codeCache.o; -text: .text%__1cQclassLoader_init6F_v_; -text: .text%__1cCosSget_temp_directory6F_pkc_; -text: .text%__1cVLoaderConstraintTable2t6Mi_v_; -text: .text%__1cCosbDallocate_thread_local_storage6F_i_; -text: .text%__1cOcodeCache_init6F_v_; -text: .text%__1cJCodeCacheKinitialize6F_v_; -text: .text%__1cNIdealLoopTreeQsplit_outer_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cKfix_parent6FpnNIdealLoopTree_1_v_: loopnode.o; -text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; -text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cNIdealLoopTreeUmerge_many_backedges6MpnOPhaseIdealLoop__v_; -text: .text%__1cRLowMemoryDetectorKinitialize6F_v_; -text: .text%__1cLmethodKlassOset_alloc_size6MI_v_; -text: .text%__1cNExceptionBlob2n6FLI_pv_; -text: .text%__1cNExceptionBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNExceptionBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cQUncommonTrapBlob2n6FLI_pv_; -text: .text%__1cQUncommonTrapBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cQUncommonTrapBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cSDeoptimizationBlob2n6FLI_pv_; -text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; -text: .text%__1cSDeoptimizationBlob2t6MpnKCodeBuffer_ipnJOopMapSet_iiii_v_; -text: .text%__1cCosbDinit_system_properties_values6F_v_; -text: .text%__1cCosHSolarisWinitialize_system_info6F_v_; -text: .text%__1cCosPphysical_memory6F_X_; -text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_; -text: .text%__1cSThreadLocalStorageHpd_init6F_v_; -text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: machnode.o; -text: .text%__1cPmanagement_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: cmsAdaptiveSizePolicy.o; -text: .text%__1cKManagementEinit6F_v_; -text: .text%__1cKManagementKinitialize6FpnGThread__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; -text: .text%__1cOmarksweep_init6F_v_; -text: .text%__1cCosZset_memory_serialize_page6FpC_v_; -text: .text%__1cNReservedSpaceUpage_align_size_down6FL_L_; -text: .text%__1cNReservedSpaceYallocation_align_size_up6FL_L_; -text: .text%__1cCosLinit_random6Fl_v_; -text: .text%__1cHOrLNodeJideal_reg6kM_I_; -text: .text%__1cOvmStructs_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; -text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; -text: .text%__1cQVMOperationQdDueue2t6M_v_; -text: .text%__1cCosGstrdup6Fpkc_pc_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: methodLiveness.o; -text: .text%__1cCosXterminate_signal_thread6F_v_; -text: .text%__1cCosLsignal_init6F_v_; -text: .text%__1cMsubD_immNodeKconst_size6kM_i_; -text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; -text: .text%__1cOtailjmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSobjArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cIVMThreadGcreate6F_v_; -text: .text%__1cIVMThread2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cIVMThreadDrun6M_v_; -text: .text%__1cWResolveOopMapConflictsUdo_potential_rewrite6MpnGThread__nMmethodHandle__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; -text: .text%__1cNCellTypeStateImake_top6F_0_; -text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_2_v_; -text: .text%__1cNCellTypeStateLmake_bottom6F_0_; -text: .text%__1cNcmovL_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNSharedRuntimebBgenerate_class_cast_message6FpnKJavaThread_pkc_pc_; -text: .text%__1cIVMThreadEloop6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: matcher.o; -text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_; -text: .text%__1cNMemoryManagerbDget_psScavenge_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cNMemoryManagerbEget_psMarkSweep_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cJAssemblerFimull6MpnMRegisterImpl_2_v_; -text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; -text: .text%__1cNRegisterSaverYrestore_result_registers6FpnOMacroAssembler__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o; -text: .text%__1cORuntimeServiceYrecord_application_start6F_v_; -text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__L_; -text: .text%__1cORuntimeServiceEinit6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_i_v_; -text: .text%__1cLStatSamplerKinitialize6F_v_; -text: .text%__1cLStatSamplerGengage6F_v_; -text: .text%__1cLStatSamplerJdisengage6F_v_; -text: .text%__1cLStatSamplerHdestroy6F_v_; -text: .text%__1cSobjArrayKlassKlassbEallocate_system_objArray_klass6MpnGThread__pnMklassOopDesc__; -text: .text%__1cLOptoRuntimeUmultianewarray5_Type6F_pknITypeFunc__; -text: .text%__1cLStatSamplerbMcreate_system_property_instrumentation6FpnGThread__v_; -text: .text%__1cLStatSamplerUcreate_misc_perfdata6F_v_; -text: .text%__1cLStatSamplerXcreate_sampled_perfdata6F_v_; -text: .text%__1cJAssemblerDorq6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEsarl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEsarq6MpnMRegisterImpl__v_; -text: .text%__1cLOptoRuntimeUmultianewarray4_Type6F_pknITypeFunc__; -text: .text%__1cJAssemblerEshll6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEshlq6MpnMRegisterImpl__v_; -text: .text%__1cNStubGeneratorQgenerate_initial6M_v_; -text: .text%__1cNStubGeneratorYgenerate_catch_exception6M_pC_; -text: .text%__1cNStubGeneratorSgenerate_call_stub6MrpC_1_; -text: .text%__1cNStubGeneratorbAgenerate_forward_exception6M_pC_; -text: .text%__1cNStubGeneratorMgenerate_all6M_v_; -text: .text%__1cNStubGeneratorSgenerate_d2l_fixup6M_pC_; -text: .text%__1cNStubGeneratorSgenerate_d2i_fixup6M_pC_; -text: .text%__1cNStubGeneratorSgenerate_f2l_fixup6M_pC_; -text: .text%__1cNStubGeneratorSgenerate_f2i_fixup6M_pC_; -text: .text%__1cLOptoRuntimeUmultianewarray3_Type6F_pknITypeFunc__; -text: .text%__1cNStubGeneratorTgenerate_verify_oop6M_pC_; -text: .text%__1cNStubGeneratorVgenerate_verify_mxcsr6M_pC_; -text: .text%__1cMStubRoutinesLinitialize16F_v_; -text: .text%__1cMStubRoutinesLinitialize26F_v_; -text: .text%__1cSstubRoutines_init16F_v_; -text: .text%__1cSstubRoutines_init26F_v_; -text: .text%__1cLMoveL2DNodeJideal_reg6kM_I_; -text: .text%__1cLMoveF2INodeJideal_reg6kM_I_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cLOptoRuntimeUmultianewarray2_Type6F_pknITypeFunc__; -text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl__v_; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_TIERED_i486 --- a/make/solaris/makefiles/reorder_TIERED_i486 Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4461 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; - - -text: .text%__1cQIndexSetIteratorQadvance_and_next6M_I_; -text: .text%__1cNSharedRuntimeElrem6Fxx_x_; -text: .text%__1cCosOjavaTimeMillis6F_x_; -text: .text%__1cQIndexSetIteratorEnext6M_I_: chaitin.o; -text: .text%__1cNSharedRuntimeEldiv6Fxx_x_; -text: .text%__1cIPhaseIFGIadd_edge6MII_i_; -text: .text%__1cQIndexSetIterator2t6MpnIIndexSet__v_; -text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOtypeArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cIIndexSetLalloc_block6M_pn0AIBitBlock__; -text: .text%__1cDLRGOcompute_degree6kMr0_i_; -text: .text%__1cIIndexSetWalloc_block_containing6MI_pn0AIBitBlock__; -text: .text%__1cENodeEjvms6kM_pnIJVMState__; -text: .text%__1cHRegMaskJis_bound16kM_i_; -text: .text%__1cETypeDcmp6Fkpk03_i_; -text: .text%__1cHRegMaskJis_bound26kM_i_; -text: .text%__1cHRegMaskESize6kM_I_; -text: .text%__1cJVectorSet2R6MI_rnDSet__; -text: .text%__1cXresource_allocate_bytes6FI_pc_; -text: .text%__1cDff16FI_i_; -text: .text%__1cIIndexSetKinitialize6MI_v_; -text: .text%__1cIIndexSetKfree_block6MI_v_; -text: .text%__1cIMachNodeGOpcode6kM_i_; -text: .text%__1cWPSScavengeRootsClosureGdo_oop6MppnHoopDesc__v_: psTasks.o; -text: .text%__1cITypeNodeLbottom_type6kM_pknEType__; -text: .text%__1cENodeIout_grow6MI_v_; -text: .text%__1cENodeHadd_req6Mp0_v_; -text: .text%__1cKTypeOopPtrFklass6kM_pnHciKlass__: type.o; -text: .text%__1cMPhaseChaitinTinterfere_with_live6MIpnIIndexSet__v_; -text: .text%__1cETypeFuhash6Fkpk0_i_; -text: .text%__1cMPhaseChaitinLskip_copies6MpnENode__2_; -text: .text%__1cICallNodeKmatch_edge6kMI_I_; -text: .text%__1cHPhiNodeGOpcode6kM_i_; -text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cINodeHashQhash_find_insert6MpnENode__2_; -text: .text%__1cIPhaseIFGQeffective_degree6kMI_i_; -text: .text%__1cIUniverseMnon_oop_word6F_pv_; -text: .text%__1cIPhaseIFGLremove_node6MI_pnIIndexSet__; -text: .text%__1cIPhaseIFGJre_insert6MI_v_; -text: .text%__1cDLRGFscore6kM_d_; -text: .text%__1cETypeIhashcons6M_pk0_; -text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_; -text: .text%__1cENodeEhash6kM_I_; -text: .text%__1cHNTarjanEEVAL6M_p0_; -text: .text%__1cMMachCallNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cIProjNodeGOpcode6kM_i_; -text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJPhaseLiveLadd_liveout6MpnFBlock_IrnJVectorSet__v_; -text: .text%__1cDfh16FI_i_; -text: .text%__1cNIdealLoopTreeJis_member6kMpk0_i_; -text: .text%__1cIConINodeGOpcode6kM_i_; -text: .text%__1cGIfNodeGOpcode6kM_i_; -text: .text%__1cHTypePtrEhash6kM_i_; -text: .text%__1cENode2t6MI_v_; -text: .text%JVM_ArrayCopy; -text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cOPhaseIdealLoopYsplit_if_with_blocks_pre6MpnENode__2_; -text: .text%__1cOPhaseIdealLoopZsplit_if_with_blocks_post6MpnENode__v_; -text: .text%__1cETypeEmeet6kMpk0_2_; -text: .text%__1cFArenaIArealloc6MpvII_1_; -text: .text%__1cKTypeOopPtrEhash6kM_i_; -text: .text%__1cIMachNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cKIfTrueNodeGOpcode6kM_i_; -text: .text%__1cIAddPNodeGOpcode6kM_i_; -text: .text%__1cPDictionaryEntrybDprotection_domain_set_oops_do6MpnKOopClosure__v_: dictionary.o; -text: .text%__1cHTypeIntEhash6kM_i_; -text: .text%__1cMMachProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cMPhaseIterGVNNtransform_old6MpnENode__2_; -text: .text%__1cMMachProjNodeGOpcode6kM_i_; -text: .text%__1cJCProjNodeNis_block_proj6kM_pknENode__: cfgnode.o; -text: .text%__1cJPhaseLiveGgetset6MpnFBlock__pnIIndexSet__; -text: .text%__1cHConNodeGOpcode6kM_i_; -text: .text%__1cJMarkSweepSMarkAndPushClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cILRG_ListGextend6MII_v_; -text: .text%__1cLIfFalseNodeGOpcode6kM_i_; -text: .text%__1cSCallStaticJavaNodeGOpcode6kM_i_; -text: .text%__1cMPhaseIterGVNWadd_users_to_worklist06MpnENode__v_; -text: .text%__1cOPhaseIdealLoopEsort6MpnNIdealLoopTree_2_2_; -text: .text%__1cJPhaseLiveLadd_liveout6MpnFBlock_pnIIndexSet_rnJVectorSet__v_; -text: .text%__1cMMutableSpaceMcas_allocate6MI_pnIHeapWord__; -text: .text%__1cHNTarjanICOMPRESS6M_v_; -text: .text%__1cLsymbolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cKNode_ArrayGinsert6MIpnENode__v_; -text: .text%__1cIBoolNodeGOpcode6kM_i_; -text: .text%__1cNRelocIteratorFreloc6M_pnKRelocation__; -text: .text%__1cENodeEgrow6MI_v_; -text: .text%__1cWConstantPoolCacheEntryPfollow_contents6M_v_; -text: .text%__1cWConstantPoolCacheEntryPadjust_pointers6M_v_; -text: .text%__1cLemit_opcode6FrnKCodeBuffer_i_v_; -text: .text%__1cMMachProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLsymbolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cIIndexSetKinitialize6MIpnFArena__v_; -text: .text%__1cJPhaseLiveKgetfreeset6M_pnIIndexSet__; -text: .text%__1cMMachProjNodeLout_RegMask6kM_rknHRegMask__: classes.o; -text: .text%__1cOPhaseIdealLoopUbuild_loop_tree_impl6MpnENode_i_i_; -text: .text%__1cHTypeInt2t6Miii_v_; -text: .text%__1cEUTF8Enext6FpkcpH_pc_; -text: .text%__1cHemit_rm6FrnKCodeBuffer_iii_v_; -text: .text%__1cIciObjectEhash6M_i_; -text: .text%__1cKRegionNodeGOpcode6kM_i_; -text: .text%__1cWNode_Backward_IteratorEnext6M_pnENode__; -text: .text%__1cOPhaseIdealLoopOget_early_ctrl6MpnENode__2_; -text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cUParallelScavengeHeapVlarge_typearray_limit6M_I_: parallelScavengeHeap.o; -text: .text%__1cOPhaseIdealLoopOset_early_ctrl6MpnENode__v_; -text: .text%__1cHPhiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cHNTarjanELINK6Mp01_v_; -text: .text%__1cIPhaseGVNJtransform6MpnENode__2_; -text: .text%__1cOPSPromotionLABKinitialize6MnJMemRegion__v_; -text: .text%__1cOPSPromotionLABFflush6M_v_; -text: .text%__1cITypeNodeEhash6kM_I_; -text: .text%__1cJVectorSet2F6kMI_i_; -text: .text%__1cJPhaseLiveHfreeset6MpknFBlock__v_; -text: .text%__1cENodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOPhaseIdealLoopThas_local_phi_input6MpnENode__2_; -text: .text%__1cITypeNodeJideal_reg6kM_I_; -text: .text%__1cLTypeInstPtrEhash6kM_i_; -text: .text%__1cENodeNis_block_proj6kM_pk0_; -text: .text%__1cSInterpreterRuntimeInewarray6FpnKJavaThread_nJBasicType_i_v_; -text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; -text: .text%__1cFState2t6M_v_; -text: .text%__1cHRegMaskMSmearToPairs6M_v_; -text: .text%__1cIIndexSet2t6Mp0_v_; -text: .text%__1cENodeFclone6kM_p0_; -text: .text%__1cRmethodDataOopDescHdata_at6Mi_pnLProfileData__; -text: .text%__1cETypeFxmeet6kMpk0_2_; -text: .text%__1cOPhaseIdealLoopZremix_address_expressions6MpnENode__2_; -text: .text%__1cENodeKmatch_edge6kMI_I_; -text: .text%__1cIPhaseCCPOtransform_once6MpnENode__2_; -text: .text%__1cICallNodeLbottom_type6kM_pknEType__; -text: .text%__1cKTypeAryPtrEhash6kM_i_; -text: .text%__1cbAfinal_graph_reshaping_impl6FpnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cOPhaseIdealLoopNget_late_ctrl6MpnENode_2_2_; -text: .text%__1cLmethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cIProjNodeEhash6kM_I_; -text: .text%__1cHemit_d86FrnKCodeBuffer_i_v_; -text: .text%__1cENodeIIdentity6MpnOPhaseTransform__p0_; -text: .text%__1cRSignatureIteratorGexpect6Mc_v_; -text: .text%__1cQUnique_Node_ListGremove6MpnENode__v_; -text: .text%__1cICmpPNodeGOpcode6kM_i_; -text: .text%__1cILocationIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cHPhiNodeEhash6kM_I_; -text: .text%__1cRmethodDataOopDescJnext_data6MpnLProfileData__2_; -text: .text%__1cQconstMethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cGciTypeEmake6FnJBasicType__p0_; -text: .text%__1cNLocationValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cENodeQIdeal_DU_postCCP6MpnIPhaseCCP__p0_; -text: .text%__1cMPhaseChaitinSuse_prior_register6MpnENode_I2pnFBlock_rnJNode_List_6_i_; -text: .text%__1cENodeHsize_of6kM_I_; -text: .text%__1cMOopMapStreamJfind_next6M_v_; -text: .text%__1cIAddINodeGOpcode6kM_i_; -text: .text%__1cJStartNodeLbottom_type6kM_pknEType__; -text: .text%__1cMPhaseChaitinHnew_lrg6MpknENode_I_v_; -text: .text%__1cJAssemblerOlocate_operand6FpCn0AMWhichOperand__1_; -text: .text%__1cPClassFileStreamGget_u16MpnGThread__C_; -text: .text%__1cHTypeIntFxmeet6kMpknEType__3_; -text: .text%__1cKRelocationSpd_address_in_code6M_ppC_; -text: .text%__1cOoop_RelocationIoop_addr6M_ppnHoopDesc__; -text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cLmethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cQconstMethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cICmpINodeGOpcode6kM_i_; -text: .text%JVM_CurrentTimeMillis; -text: .text%__1cMPhaseIterGVNVadd_users_to_worklist6MpnENode__v_; -text: .text%__1cOoop_RelocationLunpack_data6M_v_; -text: .text%__1cNSharedRuntimeDd2i6Fd_i_; -text: .text%__1cGcmpkey6Fpkv1_i_; -text: .text%__1cMMergeMemNodeGOpcode6kM_i_; -text: .text%__1cPciObjectFactoryEfind6MpnHoopDesc_pnNGrowableArray4CpnIciObject____i_; -text: .text%__1cINodeHashLhash_insert6MpnENode__v_; -text: .text%__1cENode2t6Mp0_v_; -text: .text%__1cLSymbolTableGlookup6MipkciI_pnNsymbolOopDesc__; -text: .text%__1cIProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cIJVMStateIof_depth6kMi_p0_; -text: .text%__1cKNode_ArrayEgrow6MI_v_; -text: .text%__1cRPSOldPromotionLABFflush6M_v_; -text: .text%__1cNCatchProjNodeGOpcode6kM_i_; -text: .text%__1cIPhaseIFGMtest_edge_sq6kMII_i_; -text: .text%__1cGIfNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIConPNodeGOpcode6kM_i_; -text: .text%__1cHTypeIntEmake6Fiii_pk0_; -text: .text%__1cRMachSpillCopyNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cHPhiNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cICallNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJLoadPNodeGOpcode6kM_i_; -text: .text%__1cLOopRecorder2t6MpnFArena__v_; -text: .text%__1cKCodeBuffer2T6M_v_; -text: .text%__1cIAddPNodeKmatch_edge6kMI_I_; -text: .text%__1cIMachNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIMachNodeJemit_size6kMpnNPhaseRegAlloc__I_; -text: .text%__1cZPhaseConservativeCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cHTypeIntEmake6Fi_pk0_; -text: .text%__1cPciObjectFactoryDget6MpnHoopDesc__pnIciObject__; -text: .text%__1cENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cILoadNodeEhash6kM_I_; -text: .text%__1cJeRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cICmpUNodeGOpcode6kM_i_; -text: .text%__1cJHashtableLhash_symbol6Fpkci_I_: symbolTable.o; -text: .text%__1cJCProjNodeEhash6kM_I_: classes.o; -text: .text%__1cHPhiNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__; -text: .text%__1cENodeHdel_req6MI_v_; -text: .text%__1cETypeEhash6kM_i_; -text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cIHaltNodeGOpcode6kM_i_; -text: .text%__1cMPhaseIterGVNZremove_globally_dead_node6MpnENode__v_; -text: .text%__1cIParmNodeGOpcode6kM_i_; -text: .text%__1cIJVMStateLdebug_start6kM_I_; -text: .text%__1cGTarjanEEVAL6M_p0_; -text: .text%__1cOThreadCritical2T6M_v_; -text: .text%__1cOThreadCritical2t6M_v_; -text: .text%__1cRSignatureIteratorKparse_type6M_i_; -text: .text%__1cFframeVinterpreter_frame_bcp6kM_pC_; -text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_; -text: .text%__1cOPhaseIdealLoopbIdom_lca_for_get_late_ctrl_internal6MpnENode_22_2_; -text: .text%__1cEDict2F6kMpkv_pv_; -text: .text%__1cICodeHeapKfind_start6kMpv_1_; -text: .text%__1cKTypeAryPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cHhashptr6Fpkv_i_; -text: .text%__1cIAddPNodeLbottom_type6kM_pknEType__; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cJCatchNodeGOpcode6kM_i_; -text: .text%__1cPClassFileStreamHskip_u16MipnGThread__v_; -text: .text%__1cOoop_RelocationJoop_value6M_pnHoopDesc__; -text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__; -text: .text%__1cFBlockIis_Empty6kM_i_; -text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cMMergeMemNodeLbottom_type6kM_pknEType__: memnode.o; -text: .text%__1cLLShiftINodeGOpcode6kM_i_; -text: .text%__1cFBlockOcode_alignment6M_I_; -text: .text%__1cMPhaseChaitinLinsert_proj6MpnFBlock_IpnENode_I_v_; -text: .text%__1cKCastPPNodeGOpcode6kM_i_; -text: .text%__1cFStateRMachNodeGenerator6MipnHCompile__pnIMachNode__; -text: .text%__1cHMatcherKReduceInst6MpnFState_irpnENode__pnIMachNode__; -text: .text%__1cNCollectedHeapXallocate_from_tlab_slow6FpnGThread_I_pnIHeapWord__; -text: .text%__1cJMultiNodeIproj_out6kMI_pnIProjNode__; -text: .text%__1cILoadNodeLbottom_type6kM_pknEType__; -text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_; -text: .text%__1cWThreadLocalAllocBufferKinitialize6MpnIHeapWord_22_v_; -text: .text%__1cUParallelScavengeHeapRallocate_new_tlab6MI_pnIHeapWord__; -text: .text%__1cWThreadLocalAllocBufferEfill6MpnIHeapWord_2I_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; -text: .text%__1cIBoolNodeEhash6kM_I_; -text: .text%__1cOindOffset8OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cGIfNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPClassFileParserRverify_legal_utf86MpkCipnGThread__v_; -text: .text%__1cMMachHaltNodeEjvms6kM_pnIJVMState__; -text: .text%__1cNsymbolOopDescLas_C_string6kMpci_1_; -text: .text%__1cNsymbolOopDescLas_C_string6kM_pc_; -text: .text%__1cPSignatureStreamEnext6M_v_; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode__i_; -text: .text%__1cJPSPermGenSallocate_permanent6MI_pnIHeapWord__; -text: .text%__1cMMutableSpaceIallocate6MI_pnIHeapWord__; -text: .text%__1cUParallelScavengeHeapWpermanent_mem_allocate6MI_pnIHeapWord__; -text: .text%__1cHCompileRprobe_alias_cache6MpknHTypePtr__pn0APAliasCacheEntry__; -text: .text%__1cENodeIdestruct6M_v_; -text: .text%__1cIMachNodeNoperand_index6kMI_i_; -text: .text%__1cKRegionNodeEhash6kM_I_: classes.o; -text: .text%__1cOMachReturnNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cGBitMapJset_union6M0_v_; -text: .text%__1cIAddPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNCollectedHeapMobj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__: instanceKlass.o; -text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cMPhaseIterGVNKis_IterGVN6M_p0_: phaseX.o; -text: .text%__1cJTypeTupleEhash6kM_i_; -text: .text%__1cNCellTypeStateFmerge6kM0i_0_; -text: .text%__1cHPhiNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFParseNdo_exceptions6M_v_; -text: .text%__1cFParsePdo_one_bytecode6M_v_; -text: .text%__1cFBlockJfind_node6kMpknENode__I_; -text: .text%__1cRSignatureIterator2t6MnMsymbolHandle__v_; -text: .text%__1cGBitMap2t6MpII_v_; -text: .text%method_compare: methodOop.o; -text: .text%__1cIHaltNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cNLoadRangeNodeGOpcode6kM_i_; -text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_; -text: .text%__1cKHandleMark2T6M_v_; -text: .text%__1cOMachReturnNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cGTarjanICOMPRESS6M_v_; -text: .text%__1cHRegMaskMClearToPairs6M_v_; -text: .text%__1cIJVMStateJdebug_end6kM_I_; -text: .text%__1cHSubNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJLoadINodeGOpcode6kM_i_; -text: .text%__1cIProjNodeHsize_of6kM_I_; -text: .text%__1cRMachSpillCopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHMatcherKmatch_tree6MpknENode__pnIMachNode__; -text: .text%__1cIIndexSetSpopulate_free_list6F_v_; -text: .text%__1cMloadConINodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_ReleaseUTF; -text: .text%__1cKNode_ArrayGremove6MI_v_; -text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMPhaseIterGVNMsubsume_node6MpnENode_2_v_; -text: .text%__1cMciMethodDataHdata_at6Mi_pnLProfileData__; -text: .text%__1cJrelocInfoNfinish_prefix6Mph_p0_; -text: .text%__1cMCreateExNodeGOpcode6kM_i_; -text: .text%__1cHhashkey6Fpkv_i_; -text: .text%__1cLTypeInstPtrFxmeet6kMpknEType__3_; -text: .text%__1cIJVMState2t6MpnIciMethod_p0_v_; -text: .text%__1cLTypeInstPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cENode2t6Mp011_v_; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: generateOopMap.o; -text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cHCmpNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMMachCallNodeLbottom_type6kM_pknEType__; -text: .text%__1cOMethodLivenessKBasicBlockIload_one6Mi_v_; -text: .text%__1cIemit_d326FrnKCodeBuffer_i_v_; -text: .text%__1cFDictI2i6M_v_; -text: .text%__1cNSafePointNodeHsize_of6kM_I_; -text: .text%__1cPCheckCastPPNodeGOpcode6kM_i_; -text: .text%__1cHTypePtrLmeet_offset6kMi_i_; -text: .text%__1cIHaltNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFChunk2t6MI_v_; -text: .text%__1cFChunk2n6FII_pv_; -text: .text%__1cFChunk2k6Fpv_v_; -text: .text%__1cENodeRdisconnect_inputs6Mp0_i_; -text: .text%__1cIIndexSetJlrg_union6MIIkIpknIPhaseIFG_rknHRegMask__I_; -text: .text%JVM_GetMethodIxExceptionTableLength; -text: .text%__1cPClassFileParserUassemble_annotations6MpCi1ipnGThread__nPtypeArrayHandle__; -text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; -text: .text%__1cNPhaseCoalesceRcombine_these_two6MpnENode_2_v_; -text: .text%__1cJStoreNodeKmatch_edge6kMI_I_; -text: .text%__1cIBoolNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIBoolTestKcc2logical6kMpknEType__3_; -text: .text%__1cFArenaEgrow6MI_pv_; -text: .text%__1cOJNIHandleBlockPallocate_handle6MpnHoopDesc__pnI_jobject__; -text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_; -text: .text%__1cFBlockUneeded_for_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; -text: .text%__1cTconstantPoolOopDescWsignature_ref_index_at6Mi_i_; -text: .text%__1cILoadNodeKmatch_edge6kMI_I_; -text: .text%__1cENodeKreplace_by6Mp0_v_; -text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cSCountedLoopEndNodeGOpcode6kM_i_; -text: .text%__1cHPhiNodeIadr_type6kM_pknHTypePtr__: cfgnode.o; -text: .text%__1cHPhiNodeHsize_of6kM_I_: cfgnode.o; -text: .text%__1cJTypeTupleGfields6FI_ppknEType__; -text: .text%__1cMPhaseChaitinFUnion6MpknENode_3_v_; -text: .text%__1cKRegionNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMPhaseChaitinSget_spillcopy_wide6MpnENode_2I_2_; -text: .text%__1cKNativeCallLdestination6kM_pC_; -text: .text%__1cICallNodeIIdentity6MpnOPhaseTransform__pnENode__: callnode.o; -text: .text%__1cIAddPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cMMergeMemNodeEhash6kM_I_; -text: .text%__1cKoopFactoryMnew_objArray6FpnMklassOopDesc_ipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_; -text: .text%__1cNinstanceKlassRallocate_objArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cILoadNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIBoolNodeLbottom_type6kM_pknEType__: subnode.o; -text: .text%__1cMPhaseChaitinNFind_compress6MI_I_; -text: .text%__1cKStorePNodeGOpcode6kM_i_; -text: .text%__1cPciInstanceKlassGloader6M_pnHoopDesc__; -text: .text%__1cICodeHeapKnext_block6kMpnJHeapBlock__2_; -text: .text%__1cICodeHeapJnext_free6kMpnJHeapBlock__pv_; -text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__; -text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_; -text: .text%__1cILoadNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cISubINodeGOpcode6kM_i_; -text: .text%__1cKStoreINodeGOpcode6kM_i_; -text: .text%__1cJStoreNodeLbottom_type6kM_pknEType__; -text: .text%__1cRSignatureIteratorTcheck_signature_end6M_v_; -text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_; -text: .text%__1cPciInstanceKlassRprotection_domain6M_pnHoopDesc__; -text: .text%__1cITypeLongEhash6kM_i_; -text: .text%__1cLBlock_Array2t6MpnFArena__v_: block.o; -text: .text%__1cPsplit_flow_path6FpnIPhaseGVN_pnHPhiNode__pnENode__: cfgnode.o; -text: .text%__1cKNode_Array2t6MpnFArena__v_: block.o; -text: .text%__1cITypeNodeHsize_of6kM_I_; -text: .text%__1cIMachNodeRget_base_and_disp6kMrirpknHTypePtr__pknENode__; -text: .text%__1cIAddINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIIndexSetFclear6M_v_: chaitin.o; -text: .text%__1cXPhaseAggressiveCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cFBlockScall_catch_cleanup6MrnLBlock_Array__v_; -text: .text%__1cLBlock_StackXmost_frequent_successor6MpnFBlock__I_; -text: .text%__1cNidealize_test6FpnIPhaseGVN_pnGIfNode__3_: ifnode.o; -text: .text%__1cENodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLLShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cLCounterDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cKRegionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGTarjanELINK6Mp01_v_; -text: .text%__1cMPhaseChaitinMyank_if_dead6MpnENode_pnFBlock_pnJNode_List_6_i_; -text: .text%__1cYDebugInformationRecorderWserialize_scope_values6MpnNGrowableArray4CpnKScopeValue____i_; -text: .text%__1cYDebugInformationRecorderTcreate_scope_values6MpnNGrowableArray4CpnKScopeValue____pnKDebugToken__; -text: .text%__1cIGraphKitJsync_jvms6kM_pnIJVMState__; -text: .text%__1cMciMethodDataJnext_data6MpnLProfileData__2_; -text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cNSafePointNodeSset_next_exception6Mp0_v_; -text: .text%__1cQResultTypeFinderDset6MinJBasicType__v_: bytecode.o; -text: .text%__1cJCodeCacheJfind_blob6Fpv_pnICodeBlob__; -text: .text%__1cMPhaseChaitinNFind_compress6MpknENode__I_; -text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__; -text: .text%__1cFStateM_sub_Op_ConI6MpknENode__v_; -text: .text%__1cNRelocIteratorKset_limits6MpC1_v_; -text: .text%__1cIsplit_if6FpnGIfNode_pnMPhaseIterGVN__pnENode__: ifnode.o; -text: .text%__1cJeRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; -text: .text%__1cHAddNodeEhash6kM_I_; -text: .text%__1cNSafePointNodeLbottom_type6kM_pknEType__: callnode.o; -text: .text%__1cOemit_d32_reloc6FrnKCodeBuffer_irknQRelocationHolder_i_v_; -text: .text%__1cNSafePointNodeKmatch_edge6kMI_I_; -text: .text%__1cMURShiftINodeGOpcode6kM_i_; -text: .text%__1cIRootNodeGOpcode6kM_i_; -text: .text%__1cFChunkEchop6M_v_; -text: .text%__1cIMachOperOindex_position6kM_i_; -text: .text%__1cJTypeTupleEmake6FIppknEType__pk0_; -text: .text%__1cNeFlagsRegOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKDictionaryJget_entry6MiInMsymbolHandle_nGHandle__pnPDictionaryEntry__; -text: .text%__1cHCmpNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRSignatureIterator2t6MpnNsymbolOopDesc__v_; -text: .text%__1cOBasicHashtableJnew_entry6MI_pnTBasicHashtableEntry__; -text: .text%__1cJHashtableJnew_entry6MIpnHoopDesc__pnOHashtableEntry__; -text: .text%__1cHConNodeEhash6kM_I_; -text: .text%Unsafe_CompareAndSwapLong; -text: .text%__1cJStoreNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPciObjectFactoryNfind_non_perm6MpnHoopDesc__rpn0ANNonPermObject__; -text: .text%__1cFBlockLfind_remove6MpknENode__v_; -text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cJStoreNodeEhash6kM_I_; -text: .text%__1cENode2t6Mp0111_v_; -text: .text%__1cKTypeRawPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__; -text: .text%__1cMMergeMemNodePiteration_setup6Mpk0_v_; -text: .text%__1cJMultiNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cJCProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; -text: .text%__1cFChunkJnext_chop6M_v_; -text: .text%__1cKIfTrueNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJCodeCacheFalive6FpnICodeBlob__2_; -text: .text%__1cLRShiftINodeGOpcode6kM_i_; -text: .text%__1cKJNIHandlesKmake_local6FpnHJNIEnv__pnHoopDesc__pnI_jobject__; -text: .text%__1cJloadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJchar2type6Fc_nJBasicType__: fieldType.o; -text: .text%__1cJFieldTypeKbasic_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cSinstanceKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceKlass.o; -text: .text%__1cMMergeMemNodeJmemory_at6kMI_pnENode__; -text: .text%__1cTconstantPoolOopDescSklass_at_if_loaded6FnSconstantPoolHandle_i_pnMklassOopDesc__; -text: .text%__1cNExceptionMark2T6M_v_; -text: .text%__1cNExceptionMark2t6MrpnGThread__v_; -text: .text%__1cHOopFlowNcompute_reach6MpnNPhaseRegAlloc_ipnEDict__v_; -text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cRInvocationCounterJset_state6Mn0AFState__v_; -text: .text%__1cRInvocationCounterEinit6M_v_; -text: .text%__1cRMachSafePointNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%JVM_GetClassModifiers; -text: .text%__1cTconstantPoolOopDescNklass_name_at6Mi_pnNsymbolOopDesc__; -text: .text%JVM_GetClassAccessFlags; -text: .text%__1cJCatchNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLIfFalseNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSObjectSynchronizerJfast_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cNSafePointNodeOnext_exception6kM_p0_; -text: .text%__1cTconstantPoolOopDescRname_ref_index_at6Mi_i_; -text: .text%__1cMMergeMemNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLMachNopNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKRegionNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cMObjectLocker2T6M_v_; -text: .text%__1cOPhaseIdealLoopOidom_no_update6kMpnENode__2_: loopTransform.o; -text: .text%__1cRmethodDataOopDescPinitialize_data6MpnOBytecodeStream_i_i_; -text: .text%__1cRmethodDataOopDescTbytecode_cell_count6FnJBytecodesECode__i_; -text: .text%__1cRmethodDataOopDescRcompute_data_size6FpnOBytecodeStream__i_; -text: .text%__1cIGraphKitJclone_map6M_pnNSafePointNode__; -text: .text%__1cWstatic_stub_RelocationLunpack_data6M_v_; -text: .text%__1cMOopMapStream2t6MpnGOopMap_i_v_; -text: .text%__1cIBoolNodeKmatch_edge6kMI_I_: subnode.o; -text: .text%__1cLklassItable2t6MnTinstanceKlassHandle__v_; -text: .text%__1cNinstanceKlassGitable6kM_pnLklassItable__; -text: .text%__1cNCompileBrokerLmaybe_block6F_v_; -text: .text%__1cFStateM_sub_Op_RegP6MpknENode__v_; -text: .text%__1cFPhase2t6Mn0ALPhaseNumber__v_; -text: .text%__1cLciSignatureLreturn_type6kM_pnGciType__; -text: .text%__1cLsymbolKlassPallocate_symbol6MpCipnGThread__pnNsymbolOopDesc__; -text: .text%__1cLSymbolTableJbasic_add6MipCiIpnGThread__pnNsymbolOopDesc__; -text: .text%__1cNSafePointNodeEjvms6kM_pnIJVMState__: callnode.o; -text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__; -text: .text%__1cIHaltNodeLbottom_type6kM_pknEType__; -text: .text%__1cKTypeAryPtrFxmeet6kMpknEType__3_; -text: .text%__1cMMergeMemNodeNset_memory_at6MIpnENode__v_; -text: .text%__1cRMemBarReleaseNodeGOpcode6kM_i_; -text: .text%__1cCosPelapsed_counter6F_x_; -text: .text%__1cGBitMapOset_difference6M0_v_; -text: .text%__1cKMemBarNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cYCallStaticJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXindIndexScaleOffsetOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cITypeNodeDcmp6kMrknENode__I_; -text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_: frame.o; -text: .text%__1cMPhaseChaitinPset_was_spilled6MpnENode__v_; -text: .text%__1cHTypeAryEhash6kM_i_; -text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cPfieldDescriptorKinitialize6MpnMklassOopDesc_i_v_; -text: .text%__1cMLinkResolverYlookup_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cMMergeMemNodePset_base_memory6MpnENode__v_; -text: .text%__1cNLoadKlassNodeGOpcode6kM_i_; -text: .text%__1cKTypeRawPtrEhash6kM_i_; -text: .text%__1cPPerfLongVariantGsample6M_v_; -text: .text%__1cIAndINodeGOpcode6kM_i_; -text: .text%__1cVCompressedWriteStream2t6Mi_v_; -text: .text%__1cHAddNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMLinkResolverbAcheck_method_accessability6FnLKlassHandle_11nMmethodHandle_pnGThread__v_; -text: .text%__1cENode2t6Mp01_v_; -text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_; -text: .text%__1cKTypeOopPtrHget_con6kM_i_; -text: .text%__1cMloadConINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKRelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cMTypeKlassPtrEhash6kM_i_; -text: .text%__1cKRegionNodeHhas_phi6kM_pnHPhiNode__; -text: .text%__1cIMachNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cENodeHins_req6MIp0_v_; -text: .text%__1cMciMethodDataLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cKStoreCNodeGOpcode6kM_i_; -text: .text%JVM_GetCPMethodSignatureUTF; -text: .text%__1cJAssemblerJemit_data6MirknQRelocationHolder_i_v_; -text: .text%__1cRInterpreterOopMapLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cOeFlagsRegUOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNSafePointNodeGOpcode6kM_i_; -text: .text%__1cJVectorSet2L6MI_rnDSet__; -text: .text%__1cJVectorSetEgrow6MI_v_; -text: .text%__1cKStoreBNodeGOpcode6kM_i_; -text: .text%__1cOFastUnlockNodeGOpcode6kM_i_; -text: .text%__1cHPhiNodeEmake6FpnENode_2pknEType_pknHTypePtr__p0_; -text: .text%__1cUArgumentSizeComputerDset6MinJBasicType__v_: frame.o; -text: .text%__1cETypeOget_const_type6FpnGciType__pk0_; -text: .text%__1cJVectorSet2t6MpnFArena__v_; -text: .text%__1cIGraphKitGmemory6MI_pnENode__; -text: .text%__1cITypeLong2t6Mxxi_v_; -text: .text%__1cCosMvm_page_size6F_i_; -text: .text%__1cENodeDcmp6kMrk0_I_; -text: .text%__1cNloadRangeNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_RegI6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_AddP6MpknENode__v_; -text: .text%__1cIGraphKitMsaved_ex_oop6FpnNSafePointNode__pnENode__; -text: .text%__1cIciObjectJset_ident6MI_v_; -text: .text%__1cPciObjectFactoryNinit_ident_of6MpnIciObject__v_; -text: .text%__1cQPreserveJVMState2T6M_v_; -text: .text%__1cKJNIHandlesKmake_local6FpnHoopDesc__pnI_jobject__; -text: .text%__1cIGraphKitLclean_stack6Mi_v_; -text: .text%__1cYDebugInformationRecorderYserialize_monitor_values6MpnNGrowableArray4CpnMMonitorValue____i_; -text: .text%__1cYDebugInformationRecorderVcreate_monitor_values6MpnNGrowableArray4CpnMMonitorValue____pnKDebugToken__; -text: .text%__1cWMutableSpaceUsedHelperLtake_sample6M_x_: spaceCounters.o; -text: .text%__1cICallNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cLBoxLockNodeGOpcode6kM_i_; -text: .text%__1cHTypePtrHget_con6kM_i_; -text: .text%__1cITypeFuncEhash6kM_i_; -text: .text%__1cJAssemblerJemit_data6MinJrelocInfoJrelocType_i_v_; -text: .text%__1cLBoxLockNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMLinkResolverNresolve_klass6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__; -text: .text%__1cRMemBarAcquireNodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapHinterp16MpnOBytecodeStream__v_; -text: .text%__1cMCallLeafNodeGOpcode6kM_i_; -text: .text%__1cJLoadSNodeGOpcode6kM_i_; -text: .text%__1cKjmpDirNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_; -text: .text%__1cKMemBarNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMmerge_region6FpnKRegionNode_pnIPhaseGVN__pnENode__: cfgnode.o; -text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cTCreateExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_GetMethodIxLocalsCount; -text: .text%__1cRNativeInstructionFwrote6Mi_v_; -text: .text%__1cICmpPNodeDsub6kMpknEType_3_3_; -text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cWConstantPoolCacheEntryGverify6kMpnMoutputStream__v_; -text: .text%__1cJeRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cGOopMapJheap_size6kM_i_; -text: .text%__1cLMachNopNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHCompileYout_preserve_stack_slots6F_I_; -text: .text%__1cIAddINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cIciObject2t6MnGHandle__v_; -text: .text%__1cJTraceTime2T6M_v_; -text: .text%__1cPciObjectFactoryGinsert6MipnIciObject_pnNGrowableArray4C2___v_; -text: .text%__1cWShouldNotReachHereNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cITypeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIRootNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cWMachCallStaticJavaNodePret_addr_offset6M_i_; -text: .text%__1cYCallStaticJavaDirectNodePcompute_padding6kMi_i_; -text: .text%__1cYCallStaticJavaDirectNodeKmethod_set6Mi_v_; -text: .text%__1cMTypeKlassPtr2t6MnHTypePtrDPTR_pnHciKlass_i_v_; -text: .text%JVM_IsNaN; -text: .text%__1cLBoxLockNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__; -text: .text%__1cRInterpretedRFrameKtop_method6kM_nMmethodHandle__: rframe.o; -text: .text%__1cITypeFuncEmake6FpknJTypeTuple_3_pk0_; -text: .text%__1cPciObjectFactoryRcreate_new_object6MpnHoopDesc__pnIciObject__; -text: .text%__1cIGraphKitQkill_dead_locals6M_v_; -text: .text%__1cCosVcurrent_stack_pointer6F_pC_; -text: .text%__1cJLoadPNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIGraphKitMreset_memory6M_pnENode__; -text: .text%__1cFParsePload_state_from6Mpn0AFBlock__v_; -text: .text%__1cFParseMmerge_common6Mpn0AFBlock_i_v_; -text: .text%__1cICmpINodeDsub6kMpknEType_3_3_; -text: .text%__1cHMemNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cLProfileDataPfollow_contents6M_v_: ciMethodData.o; -text: .text%__1cLProfileDataPadjust_pointers6M_v_: ciMethodData.o; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cJStoreNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLciSignatureHtype_at6kMi_pnGciType__; -text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_; -text: .text%__1cKklassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cKklassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cJMarkSweepXrevisit_weak_klass_link6FpnFKlass__v_; -text: .text%__1cFKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cNtestP_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMTypeKlassPtrEmake6FnHTypePtrDPTR_pnHciKlass_i_pk0_; -text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cRSignatureIteratorSiterate_parameters6MX_v_; -text: .text%__1cOPhaseIdealLoopIset_idom6MpnENode_2I_v_; -text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__; -text: .text%__1cWconstantPoolCacheKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cLklassVtableToop_follow_contents6M_v_; -text: .text%__1cLklassVtableToop_adjust_pointers6M_v_; -text: .text%__1cIRootNodeNis_block_proj6kM_pknENode__: classes.o; -text: .text%__1cOPhaseIdealLoopQconditional_move6MpnENode__2_; -text: .text%__1cNSignatureInfoHdo_void6M_v_: bytecode.o; -text: .text%__1cICmpLNodeGOpcode6kM_i_; -text: .text%__1cSconstMethodOopDescLobject_size6Fiiii_i_; -text: .text%__1cSconstMethodOopDescZset_inlined_tables_length6Miii_v_; -text: .text%__1cLmethodKlassIallocate6MnRconstMethodHandle_nLAccessFlags_pnGThread__pnNmethodOopDesc__; -text: .text%__1cNmethodOopDescbAcompute_size_of_parameters6MpnGThread__v_; -text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_; -text: .text%__1cOcompU_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTciConstantPoolCacheEfind6Mi_i_; -text: .text%__1cKciTypeFlowGJsrSetJcopy_into6Mp1_v_; -text: .text%__1cJLoadLNodeGOpcode6kM_i_; -text: .text%__1cHOrINodeGOpcode6kM_i_; -text: .text%__1cJMarkSweepNpreserve_mark6FpnHoopDesc_pnLmarkOopDesc__v_; -text: .text%__1cQSystemDictionaryEfind6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cFParseFBlockRsuccessor_for_bci6Mi_p1_; -text: .text%JVM_CurrentThread; -text: .text%__1cKBranchDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cLOopMapCacheIentry_at6kMi_pnQOopMapCacheEntry__; -text: .text%__1cOGenerateOopMapKcheck_type6MnNCellTypeState_1_v_; -text: .text%__1cMMergeMemNodeNgrow_to_match6Mpk0_v_; -text: .text%__1cHTypeIntFxdual6kM_pknEType__; -text: .text%__1cNSharedRuntimeDf2i6Ff_i_; -text: .text%__1cLLShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKTypeAryPtrFklass6kM_pnHciKlass__; -text: .text%__1cRInterpretedRFrameEinit6M_v_; -text: .text%__1cMMergeMemNodeRmake_empty_memory6F_pnENode__; -text: .text%__1cMMergeMemNode2t6MpnENode__v_; -text: .text%__1cFciEnvXget_field_by_index_impl6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__; -text: .text%__1cFciEnvSget_field_by_index6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cKBlock_ListGremove6MI_v_; -text: .text%__1cECopyXconjoint_words_to_lower6FpnIHeapWord_2I_v_: block.o; -text: .text%__1cWConstantPoolCacheEntryOset_bytecode_16MnJBytecodesECode__v_; -text: .text%__1cIPhaseGVNUtransform_no_reclaim6MpnENode__2_; -text: .text%JVM_GetCPMethodClassNameUTF; -text: .text%__1cHOopFlowFclone6Mp0i_v_; -text: .text%__1cKCompiledICOic_destination6kM_pC_; -text: .text%__1cMPhaseChaitinJsplit_DEF6MpnENode_pnFBlock_iIp25nNGrowableArray4CI__i_I_; -text: .text%__1cLStringTableGlookup6MipHiI_pnHoopDesc__; -text: .text%__1cIBoolNodeJideal_reg6kM_I_: subnode.o; -text: .text%__1cFStateM_sub_Op_Bool6MpknENode__v_; -text: .text%__1cHCmpNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cPSignatureStreamJas_symbol6MpnGThread__pnNsymbolOopDesc__; -text: .text%__1cPciInstanceKlassYunique_concrete_subklass6M_p0_; -text: .text%__1cHAddNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKjmpDirNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJStartNodeGOpcode6kM_i_; -text: .text%__1cOMethodLivenessKBasicBlockJstore_one6Mi_v_; -text: .text%__1cSconstMethodOopDescbBcompressed_linenumber_table6kM_pC_; -text: .text%__1cFStateK_sub_Op_If6MpknENode__v_; -text: .text%__1cFParseFBlockJinit_node6Mp0i_v_; -text: .text%__1cFParseFBlockKinit_graph6Mp0_v_; -text: .text%__1cOPhaseIdealLoopRregister_new_node6MpnENode_2_v_; -text: .text%__1cNtestI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIPhaseIFGFUnion6MII_v_; -text: .text%__1cIGraphKit2t6MpnIJVMState__v_; -text: .text%__1cKCompiledIC2t6MpnKRelocation__v_; -text: .text%__1cWConstantPoolCacheEntryOset_bytecode_26MnJBytecodesECode__v_; -text: .text%__1cLBoxLockNodeHsize_of6kM_I_; -text: .text%__1cNinstanceKlassUfollow_static_fields6M_v_; -text: .text%__1cNinstanceKlassUadjust_static_fields6M_v_; -text: .text%__1cRconstantPoolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cLklassItableToop_adjust_pointers6M_v_; -text: .text%__1cSinstanceKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cLklassItableToop_follow_contents6M_v_; -text: .text%__1cSinstanceKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cRconstantPoolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cICmpUNodeDsub6kMpknEType_3_3_; -text: .text%__1cKjmpConNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cTciConstantPoolCacheDget6Mi_pv_; -text: .text%__1cOGenerateOopMapFppop16MnNCellTypeState__v_; -text: .text%__1cNLoadRangeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cHTypePtrLdual_offset6kM_i_; -text: .text%__1cNGCTaskManagerIget_task6MI_pnGGCTask__; -text: .text%__1cGGCTaskKinitialize6M_v_; -text: .text%__1cNGCTaskManagerWdecrement_busy_workers6M_I_; -text: .text%__1cLGCTaskQdDueueGremove6M_pnGGCTask__; -text: .text%__1cNGCTaskManagerWincrement_busy_workers6M_I_; -text: .text%__1cLGCTaskQdDueueHdequeue6M_pnGGCTask__; -text: .text%__1cLGCTaskQdDueueHenqueue6MpnGGCTask__v_; -text: .text%__1cNGCTaskManagerPnote_completion6MI_v_; -text: .text%__1cENodeHlatency6MI_I_; -text: .text%__1cFParseFBlockMrecord_state6Mp0_v_; -text: .text%__1cFParseMdo_one_block6M_v_; -text: .text%__1cLConvI2LNodeGOpcode6kM_i_; -text: .text%__1cENodeNadd_req_batch6Mp0I_v_; -text: .text%__1cIJVMStateLdebug_depth6kM_I_; -text: .text%__1cJloadINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFParseFmerge6Mi_v_; -text: .text%__1cMLinkResolverZcheck_field_accessability6FnLKlassHandle_11rnPfieldDescriptor_pnGThread__v_; -text: .text%__1cPFieldAccessInfoDset6MnLKlassHandle_nMsymbolHandle_iinJBasicType_nLAccessFlags__v_; -text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cFframebFinterpreter_frame_monitor_begin6kM_pnPBasicObjectLock__; -text: .text%__1cGGCTask2t6M_v_; -text: .text%__1cJLoadBNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopGspinup6MpnENode_2222pnLsmall_cache__2_; -text: .text%__1cPCountedLoopNodeGOpcode6kM_i_; -text: .text%__1cKciTypeFlowIblock_at6Mipn0AGJsrSet_n0AMCreateOption__pn0AFBlock__; -text: .text%__1cHTypeAryFxmeet6kMpknEType__3_; -text: .text%__1cGvframe2t6MpknFframe_pknLRegisterMap_pnKJavaThread__v_; -text: .text%__1cLRegisterMap2t6Mpk0_v_; -text: .text%__1cSvframeStreamCommonEnext6M_v_; -text: .text%__1cITypeFuncEmake6FpnIciMethod__pk0_; -text: .text%__1cENodeLnonnull_req6kM_p0_; -text: .text%__1cSPSPromotionManagerbBgc_thread_promotion_manager6Fi_p0_; -text: .text%__1cITypeLongFxmeet6kMpknEType__3_; -text: .text%__1cIAddINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKciTypeFlowLStateVector2t6Mp0_v_; -text: .text%__1cOMethodLivenessNwork_list_get6M_pn0AKBasicBlock__; -text: .text%__1cOPhaseIdealLoopKhandle_use6MpnENode_2pnLsmall_cache_22222_v_; -text: .text%__1cOPhaseIdealLoopOfind_use_block6MpnENode_22222_2_; -text: .text%__1cGvframeKnew_vframe6FpknFframe_pknLRegisterMap_pnKJavaThread__p0_; -text: .text%__1cCosGmalloc6FI_pv_; -text: .text%__1cRInterpreterOopMapKinitialize6M_v_; -text: .text%__1cRMachNullCheckNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cILoopNodeGOpcode6kM_i_; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_: bytecode.o; -text: .text%__1cHCompileKTracePhase2T6M_v_; -text: .text%__1cILoadNodeHsize_of6kM_I_; -text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_; -text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; -text: .text%__1cNCatchProjNodeLbottom_type6kM_pknEType__: cfgnode.o; -text: .text%__1cNCatchProjNodeHsize_of6kM_I_: cfgnode.o; -text: .text%__1cHMatcherKmatch_sfpt6MpnNSafePointNode__pnIMachNode__; -text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; -text: .text%__1cOcompI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHemit_cc6FrnKCodeBuffer_ii_v_; -text: .text%__1cNCatchProjNodeEhash6kM_I_; -text: .text%__1cJloadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIGraphKitTadd_exception_state6MpnNSafePointNode__v_; -text: .text%__1cXAdaptiveWeightedAverageYcompute_adaptive_average6Mff_f_; -text: .text%__1cIGraphKitOset_all_memory6MpnENode__v_; -text: .text%__1cFKlassIsubklass6kM_p0_; -text: .text%__1cFframebDinterpreter_frame_monitor_end6kM_pnPBasicObjectLock__; -text: .text%__1cMciMethodDataLhas_trap_at6MpnLProfileData_i_i_; -text: .text%__1cNmethodOopDescImask_for6MipnRInterpreterOopMap__v_; -text: .text%__1cLOopMapCacheGlookup6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cRInterpreterOopMap2t6M_v_; -text: .text%__1cRInterpreterOopMap2T6M_v_; -text: .text%__1cRInterpreterOopMapLiterate_oop6MpnNOffsetClosure__v_; -text: .text%__1cRInterpreterOopMapNresource_copy6MpnQOopMapCacheEntry__v_; -text: .text%__1cNinstanceKlassImask_for6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cNinstanceKlassKinitialize6MpnGThread__v_; -text: .text%__1cFBlockKsched_call6MrnHMatcher_rnLBlock_Array_IrnJNode_List_pipnMMachCallNode_rnJVectorSet__I_; -text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; -text: .text%__1cOMethodLivenessKBasicBlockJpropagate6Mp0_v_; -text: .text%__1cQSystemDictionaryKfind_class6FiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%JVM_GetCPFieldClassNameUTF; -text: .text%__1cHBitDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cKciTypeFlowLStateVectorOpush_translate6MpnGciType__v_; -text: .text%__1cQSystemDictionarybEresolve_instance_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cKciTypeFlowGJsrSet2t6MpnFArena_i_v_; -text: .text%__1cENodeJset_req_X6MIp0pnMPhaseIterGVN__v_; -text: .text%__1cOcompU_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cOtypeArrayKlassSallocate_permanent6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cLBoxLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNloadConI0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHCompileSflatten_alias_type6kMpknHTypePtr__3_; -text: .text%__1cLBoxLockNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cGOopMap2t6Mii_v_; -text: .text%__1cMoutputStreamPupdate_position6MpkcI_v_; -text: .text%__1cMstringStreamFwrite6MpkcI_v_; -text: .text%__1cMFastLockNodeGOpcode6kM_i_; -text: .text%__1cMLinkResolverMresolve_pool6FrnLKlassHandle_rnMsymbolHandle_42nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoolHandle_inJBytecodesECode_pnGThread__v_; -text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; -text: .text%__1cNloadKlassNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvL2INodeGOpcode6kM_i_; -text: .text%__1cIGraphKitbDtransfer_exceptions_into_jvms6M_pnIJVMState__; -text: .text%__1cITypeLongEmake6Fx_pk0_; -text: .text%__1cICallNodeJideal_reg6kM_I_: callnode.o; -text: .text%__1cHOopFlowNbuild_oop_map6MpnENode_ipnNPhaseRegAlloc_pi_pnGOopMap__; -text: .text%__1cHCompileTProcess_OopMap_Node6MpnIMachNode_i_v_; -text: .text%__1cJVectorSetFClear6M_v_; -text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cYCallStaticJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMachOperIconstant6kM_i_; -text: .text%__1cRaddI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXAdaptiveWeightedAverageGsample6Mf_v_; -text: .text%__1cFStateW_sub_Op_CallStaticJava6MpknENode__v_; -text: .text%__1cRinterpretedVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cLklassVtableNput_method_at6MpnNmethodOopDesc_i_v_; -text: .text%__1cMloadConPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPVirtualCallDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cGOopMapHcopy_to6MpC_v_; -text: .text%__1cOGenerateOopMapGppush16MnNCellTypeState__v_; -text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cLas_TosState6FnJBasicType__nITosState__: cpCacheOop.o; -text: .text%__1cMPhaseChaitinLclone_projs6MpnFBlock_IpnENode_4rI_i_; -text: .text%__1cCosEfree6Fpv_v_; -text: .text%__1cKInlineTreeJcallee_at6kMipnIciMethod__p0_; -text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cMVirtualSpaceOcommitted_size6kM_I_; -text: .text%__1cGRFrame2t6MnFframe_pnKJavaThread_kp0_v_; -text: .text%__1cYCallStaticJavaDirectNodeFreloc6kM_i_; -text: .text%__1cKciTypeFlowLStateVectorJcopy_into6kMp1_v_; -text: .text%__1cPThreadLocalNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKciTypeFlowQadd_to_work_list6Mpn0AFBlock__v_; -text: .text%__1cKciTypeFlowOwork_list_next6M_pn0AFBlock__; -text: .text%__1cKciTypeFlowKflow_block6Mpn0AFBlock_pn0ALStateVector_pn0AGJsrSet__v_; -text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; -text: .text%__1cLOptoRuntimeSuncommon_trap_Type6F_pknITypeFunc__; -text: .text%__1cIHaltNode2t6MpnENode_2_v_; -text: .text%__1cLPCTableNodeLbottom_type6kM_pknEType__; -text: .text%__1cMCreateExNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cYciExceptionHandlerStreamFcount6M_i_; -text: .text%__1cKciTypeFlowFBlockScompute_exceptions6M_v_; -text: .text%__1cWstatic_stub_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cLanyRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cOMethodLivenessNwork_list_add6Mpn0AKBasicBlock__v_; -text: .text%__1cMURShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIAndLNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitQset_saved_ex_oop6FpnNSafePointNode_pnENode__v_; -text: .text%__1cKciTypeFlowPflow_successors6MpnNGrowableArray4Cpn0AFBlock___pn0ALStateVector__v_; -text: .text%__1cIGraphKitUmake_exception_state6MpnENode__pnNSafePointNode__; -text: .text%__1cRshrI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGPcDesc2t6Miii_v_; -text: .text%__1cIPipelineXfunctional_unit_latency6kMIpk0_I_; -text: .text%__1cLTypeInstPtrFxdual6kM_pknEType__; -text: .text%__1cIJumpDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cIMulLNodeGOpcode6kM_i_; -text: .text%__1cHCompileKalias_type6MpnHciField__pn0AJAliasType__; -text: .text%__1cINodeHashJhash_find6MpknENode__p1_; -text: .text%__1cJLoadINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cFParseFBlockNlocal_type_at6kMi_pknEType__; -text: .text%__1cMelapsedTimerFstart6M_v_; -text: .text%__1cMelapsedTimerEstop6M_v_; -text: .text%__1cNaddI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLStringTableGintern6FnGHandle_pHipnGThread__pnHoopDesc__; -text: .text%__1cLStringTableLhash_string6FpHi_i_; -text: .text%__1cMMergeMemNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cEUTF8Hstrrchr6FpWiW_1_; -text: .text%__1cIXorINodeGOpcode6kM_i_; -text: .text%__1cVLoaderConstraintTableWfind_loader_constraint6MnMsymbolHandle_nGHandle__ppnVLoaderConstraintEntry__; -text: .text%__1cMPhaseIterGVNJtransform6MpnENode__2_; -text: .text%__1cLLShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRindIndexScaleOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; -text: .text%__1cIConLNodeGOpcode6kM_i_; -text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cNCallGenerator2t6MpnIciMethod__v_; -text: .text%__1cIGraphKit2t6M_v_; -text: .text%__1cHMulNodeEhash6kM_I_; -text: .text%__1cFStateM_sub_Op_ConP6MpknENode__v_; -text: .text%__1cIAddLNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitNset_map_clone6MpnNSafePointNode__v_; -text: .text%__1cIGraphKitOreplace_in_map6MpnENode_2_v_; -text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_; -text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cITypeLongEmake6Fxxi_pk0_; -text: .text%JVM_GetCPMethodNameUTF; -text: .text%__1cPmethodDataKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cLjmpConUNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNLoadKlassNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNSafePointNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTconstantPoolOopDescOstring_at_impl6FnSconstantPoolHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPoolHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cPcheckCastPPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cOemit_d32_reloc6FrnKCodeBuffer_inJrelocInfoJrelocType_i_v_; -text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_; -text: .text%__1cKjmpConNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLBuildCutout2t6MpnIGraphKit_pnENode_ff_v_; -text: .text%__1cLBuildCutout2T6M_v_; -text: .text%__1cIAddINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOPhaseIdealLoopIsink_use6MpnENode_2_v_; -text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; -text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; -text: .text%__1cKMemBarNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__; -text: .text%__1cNsubI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMethodLivenessKBasicBlockQcompute_gen_kill6MpnIciMethod__v_; -text: .text%__1cOMethodLivenessKBasicBlock2t6Mp0ii_v_; -text: .text%__1cOcompI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__; -text: .text%__1cIciMethodRget_flow_analysis6M_pnKciTypeFlow__; -text: .text%__1cEUTF8Ounicode_length6Fpkci_i_; -text: .text%__1cRSignatureIteratorSskip_optional_size6M_v_; -text: .text%__1cOGenerateOopMapSget_basic_block_at6kMi_pnKBasicBlock__; -text: .text%__1cJleaP8NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cISubINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKReturnNodeKmatch_edge6kMI_I_; -text: .text%__1cKReturnNodeGOpcode6kM_i_; -text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cKstorePNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_; -text: .text%__1cIMachNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMachNodeOpipeline_class6F_pknIPipeline__; -text: .text%__1cKTypeRawPtrHget_con6kM_i_; -text: .text%__1cKStoreLNodeGOpcode6kM_i_; -text: .text%__1cHConNodeLout_RegMask6kM_rknHRegMask__: classes.o; -text: .text%__1cETypeRget_typeflow_type6FpnGciType__pk0_; -text: .text%__1cHPhiNodeEmake6FpnENode_2_p0_; -text: .text%__1cHAddNodePadd_of_identity6kMpknEType_3_3_; -text: .text%__1cQindOffset32XOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMWarmCallInfoKalways_hot6F_p0_; -text: .text%__1cMTypeKlassPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cMPhaseChaitinKFind_const6kMI_I_; -text: .text%__1cMPhaseChaitinKFind_const6kMpknENode__I_; -text: .text%__1cOPhaseIdealLoopSget_ctrl_no_update6kMpnENode__2_: loopTransform.o; -text: .text%__1cHCompileFstart6kM_pnJStartNode__; -text: .text%JVM_GetCPFieldSignatureUTF; -text: .text%__1cTemit_java_to_interp6FrnKCodeBuffer__v_; -text: .text%__1cPThreadRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cPThreadRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cIBoolNodeHsize_of6kM_I_; -text: .text%__1cPmethodDataKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cPmethodDataKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cRMachNullCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICodeHeapLheader_size6F_I_; -text: .text%__1cJTypeTupleKmake_range6FpnLciSignature__pk0_; -text: .text%__1cJStoreNodeSIdeal_masked_input6MpnIPhaseGVN_I_pnENode__; -text: .text%__1cIAddINodeIadd_ring6kMpknEType_3_3_; -text: .text%jni_DeleteLocalRef: jni.o; -text: .text%__1cJTypeTupleLmake_domain6FpnPciInstanceKlass_pnLciSignature__pk0_; -text: .text%__1cSMemBarCPUOrderNodeGOpcode6kM_i_; -text: .text%__1cWShouldNotReachHereNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_Halt6MpknENode__v_; -text: .text%__1cIHaltNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMoutputStreamDput6Mc_v_; -text: .text%__1cJStoreNodeZIdeal_sign_extended_input6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cWThreadLocalAllocBufferVinitialize_statistics6M_v_; -text: .text%__1cLProfileDataOtranslate_from6Mp0_v_: ciMethodData.o; -text: .text%__1cFframeLreal_sender6kMpnLRegisterMap__0_; -text: .text%__1cTStackWalkCompPolicyIsenderOf6MpnGRFrame_pnNGrowableArray4C2___2_; -text: .text%__1cENodeLbottom_type6kM_pknEType__; -text: .text%__1cGRFrameGcaller6M_p0_; -text: .text%__1cGRFrameMset_distance6Mi_v_; -text: .text%__1cGRFrameKnew_RFrame6FnFframe_pnKJavaThread_kp0_4_; -text: .text%__1cWThreadLocalAllocBufferGresize6M_v_; -text: .text%__1cJloadPNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKJNIHandlesKmake_local6FpnGThread_pnHoopDesc__pnI_jobject__; -text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cUThreadSafepointStateHrestart6M_v_; -text: .text%__1cGIfNodeHsize_of6kM_I_: classes.o; -text: .text%__1cZPhaseConservativeCoalesceKupdate_ifg6MIIpnIIndexSet_2_v_; -text: .text%__1cIIndexSetEswap6Mp0_v_; -text: .text%__1cZPhaseConservativeCoalesceMunion_helper6MpnENode_2II222pnFBlock_I_v_; -text: .text%__1cIGraphKitZadd_exception_states_from6MpnIJVMState__v_; -text: .text%__1cScompP_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nGHandle__; -text: .text%__1cLStringTableJbasic_add6MinGHandle_pHiIpnGThread__pnHoopDesc__; -text: .text%__1cOGenerateOopMapHget_var6Mi_nNCellTypeState__; -text: .text%__1cQCallLeafNoFPNodeGOpcode6kM_i_; -text: .text%__1cIciMethodTcall_profile_at_bci6Mi_nNciCallProfile__; -text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_kpnGRFrame__v_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cFParseHdo_call6M_v_; -text: .text%__1cIGraphKitWround_double_arguments6MpnIciMethod__v_; -text: .text%__1cIGraphKitTround_double_result6MpnIciMethod__v_; -text: .text%__1cFParseMprofile_call6MpnENode__v_; -text: .text%__1cMMachProjNodeHsize_of6kM_I_: classes.o; -text: .text%__1cPciInstanceKlassFsuper6M_p0_; -text: .text%__1cNCatchProjNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSindIndexOffsetOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cHMulNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLPCTableNodeEhash6kM_I_; -text: .text%__1cMURShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNObjectMonitorEexit6MpnGThread__v_; -text: .text%__1cIProjNodeDcmp6kMrknENode__I_; -text: .text%__1cKDataLayoutKinitialize6MCHi_v_; -text: .text%__1cNincI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cScompI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMindirectOperKin_RegMask6kMi_pknHRegMask__; -text: .text%jni_GetObjectField: jni.o; -text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cRAbstractAssemblerEbind6MrnFLabel__v_; -text: .text%__1cMnabxRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; -text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; -text: .text%__1cHPhiNodeMslice_memory6kMpknHTypePtr__p0_; -text: .text%__1cKMemBarNodeEhash6kM_I_; -text: .text%__1cIciSymbolJmake_impl6Fpkc_p0_; -text: .text%__1cIciSymbolEmake6Fpkc_p0_; -text: .text%__1cNloadConI0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNtestI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKEntryPointFentry6kMnITosState__pC_; -text: .text%__1cPciInstanceKlassUget_canonical_holder6Mi_p0_; -text: .text%__1cILoadNodeDcmp6kMrknENode__I_; -text: .text%__1cTStackWalkCompPolicyMshouldInline6FnMmethodHandle_fi_pkc_; -text: .text%__1cFTypeDEhash6kM_i_; -text: .text%__1cIGraphKitHjava_bc6kM_nJBytecodesECode__; -text: .text%__1cKarrayKlassLobject_size6kMi_i_; -text: .text%__1cIGraphKitNbuiltin_throw6MnODeoptimizationLDeoptReason_pnENode__v_; -text: .text%__1cKInlineTreeMok_to_inline6MpnIciMethod_pnIJVMState_rnNciCallProfile_pnMWarmCallInfo__8_; -text: .text%__1cVExceptionHandlerTableJadd_entry6MnRHandlerTableEntry__v_; -text: .text%__1cKstoreINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLRShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTCreateExceptionNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLklassVtableIindex_of6kMpnNmethodOopDesc_i_i_; -text: .text%__1cFStateM_sub_Op_CmpP6MpknENode__v_; -text: .text%__1cLTypeInstPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cOGenerateOopMapGppload6MpnNCellTypeState_i_v_; -text: .text%__1cTCompareAndSwapLNodeGOpcode6kM_i_; -text: .text%__1cKarrayKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cJAssemblerEmovl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cLOpaque1NodeGOpcode6kM_i_; -text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cLnaxRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKciTypeFlowLStateVectorStype_meet_internal6FpnGciType_3p0_3_; -text: .text%__1cJFieldTypeSskip_optional_size6FpnNsymbolOopDesc_pi_v_; -text: .text%__1cQjmpCon_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_: objArrayKlassKlass.o; -text: .text%__1cJloadSNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKjmpDirNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIBoolNodeDcmp6kMrknENode__I_; -text: .text%__1cKjmpDirNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cNloadRangeNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJFieldTypeOget_array_info6FpnNsymbolOopDesc_pip2pnGThread__nJBasicType__; -text: .text%__1cFKlassMnext_sibling6kM_p0_; -text: .text%__1cPCheckCastPPNodeJideal_reg6kM_I_: connode.o; -text: .text%__1cOClearArrayNodeGOpcode6kM_i_; -text: .text%__1cPThreadLocalNodeGOpcode6kM_i_; -text: .text%__1cRcmpFastUnlockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLeAXRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cISubINodeDsub6kMpknEType_3_3_; -text: .text%__1cNaddI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceKlass.o; -text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cIParmNodeJideal_reg6kM_I_; -text: .text%__1cICodeHeapSallocated_capacity6kM_I_; -text: .text%__1cNtestP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICHeapObj2n6FI_pv_; -text: .text%__1cQleaPIdxScaleNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNgetTimeMillis6F_x_; -text: .text%__1cOPhaseIdealLoopOsplit_thru_phi6MpnENode_2i_2_; -text: .text%__1cXPhaseAggressiveCoalesceYinsert_copy_with_overlap6MpnFBlock_pnENode_II_v_; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_i_v_; -text: .text%__1cFStateN_sub_Op_LoadP6MpknENode__v_; -text: .text%__1cTconstantPoolOopDescbDresolve_string_constants_impl6FnSconstantPoolHandle_pnGThread__v_; -text: .text%__1cJloadINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFArenaRdestruct_contents6M_v_; -text: .text%__1cFStateM_sub_Op_CmpI6MpknENode__v_; -text: .text%__1cIAddPNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJAssemblerDjcc6Mn0AJCondition_rnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cHi2sNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_; -text: .text%__1cNdecI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIciObjectFklass6M_pnHciKlass__; -text: .text%__1cQPSGenerationPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cLRShiftLNodeGOpcode6kM_i_; -text: .text%__1cKMemBarNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cMURShiftLNodeGOpcode6kM_i_; -text: .text%__1cIMulINodeGOpcode6kM_i_; -text: .text%__1cIConDNodeGOpcode6kM_i_; -text: .text%__1cNSignatureInfoGdo_int6M_v_: bytecode.o; -text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; -text: .text%__1cFParseNthrow_to_exit6MpnNSafePointNode__v_; -text: .text%__1cJloadLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKjmpConNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cKjmpConNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLencode_Copy6FrnKCodeBuffer_ii_v_; -text: .text%__1cQjmpDir_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; -text: .text%__1cENodeIadd_prec6Mp0_v_; -text: .text%__1cLjmpConUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKType_ArrayEgrow6MI_v_; -text: .text%__1cSconstMethodOopDescbEchecked_exceptions_length_addr6kM_pH_; -text: .text%__1cLBoxLockNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJxRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLciSignature2t6MpnHciKlass_pnIciSymbol__v_; -text: .text%__1cIciMethod2t6MnMmethodHandle__v_; -text: .text%__1cNloadRangeNodeIpipeline6kM_pknIPipeline__; -text: .text%jni_ExceptionOccurred: jni.o; -text: .text%__1cQConstantIntValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cHTypeAryEmake6FpknEType_pknHTypeInt__pk0_; -text: .text%__1cNsubI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cSHighResTimeSamplerLtake_sample6M_x_: statSampler.o; -text: .text%__1cLStatSamplerLsample_data6FpnMPerfDataList__v_; -text: .text%__1cMPeriodicTaskOreal_time_tick6FI_v_; -text: .text%__1cLStatSamplerOcollect_sample6F_v_; -text: .text%__1cPStatSamplerTaskEtask6M_v_: statSampler.o; -text: .text%__1cMPeriodicTaskMtime_to_wait6F_I_: thread.o; -text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cKstorePNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateP_sub_Op_LShiftI6MpknENode__v_; -text: .text%jni_GetArrayLength: jni.o; -text: .text%__1cICodeHeapIcapacity6kM_I_; -text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cMCodeHeapPoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cIPipelinePoperand_latency6kMIpk0_I_; -text: .text%__1cIMachOperEtype6kM_pknEType__; -text: .text%__1cVCompressedWriteStreamEgrow6M_v_; -text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; -text: .text%__1cNloadRangeNodeOmemory_operand6kM_pknIMachOper__; -text: .text%JVM_Write; -text: .text%__1cDhpiFwrite6FipkvI_I_: jvm.o; -text: .text%__1cPCheckCastPPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJStartNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cRsalI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcompU_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLOpaque1NodeEhash6kM_I_; -text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_2_v_; -text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%JVM_RawMonitorEnter; -text: .text%JVM_RawMonitorExit; -text: .text%__1cFParseOreturn_current6MpnENode__v_; -text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: classFileParser.o; -text: .text%__1cHSubNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNSignatureInfoHdo_bool6M_v_: bytecode.o; -text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; -text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_; -text: .text%__1cMMonitorValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cKCastPPNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cJloadPNodeFreloc6kM_i_; -text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; -text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; -text: .text%__1cLRShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJTypeTupleFxdual6kM_pknEType__; -text: .text%__1cJTimeStampJupdate_to6Mx_v_; -text: .text%__1cJTimeStampGupdate6M_v_; -text: .text%__1cMloadConLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cISubINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cFStateM_sub_Op_AddI6MpknENode__v_; -text: .text%__1cOGenerateOopMapEppop6MpnNCellTypeState__v_; -text: .text%__1cRScavengeRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cRScavengeRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cOGenerateOopMapUreachable_basicblock6Fp0ipi_v_; -text: .text%__1cNSafePointNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRmethodDataOopDescLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cZload_long_indOffset32OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMloadConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHUNICODELutf8_length6FpHi_i_; -text: .text%__1cRInterpretedRFrameKtop_vframe6kM_pnKjavaVFrame__: rframe.o; -text: .text%__1cRinterpretedVFrameDbcp6kM_pC_; -text: .text%__1cRinterpretedVFrameDbci6kM_i_; -text: .text%__1cLRethrowNodeGOpcode6kM_i_; -text: .text%__1cFArenaEused6kM_I_; -text: .text%__1cFParseNdo_all_blocks6M_v_; -text: .text%__1cFParseLbuild_exits6M_v_; -text: .text%__1cFParseIdo_exits6M_v_; -text: .text%__1cFParse2t6MpnIJVMState_pnIciMethod_f_v_; -text: .text%__1cFParseQcreate_entry_map6M_pnNSafePointNode__; -text: .text%__1cOParseGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cFParseLinit_blocks6M_v_; -text: .text%__1cFframeNoops_entry_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cPJavaCallWrapperHoops_do6MpnKOopClosure__v_; -text: .text%__1cNCallGeneratorKfor_inline6FpnIciMethod_f_p0_; -text: .text%__1cFParsePdo_method_entry6M_v_; -text: .text%__1cKstoreCNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQComputeCallStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cTStackWalkCompPolicyPshouldNotInline6FnMmethodHandle__pkc_; -text: .text%__1cRaddI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPSignatureStreamRas_symbol_or_null6M_pnNsymbolOopDesc__; -text: .text%__1cICHeapObj2k6Fpv_v_; -text: .text%__1cFArena2T6M_v_; -text: .text%jni_GetSuperclass: jni.o; -text: .text%__1cScompU_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cPJavaCallWrapper2t6MnMmethodHandle_nGHandle_pnJJavaValue_pnGThread__v_; -text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; -text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cRJavaCallArgumentsKparameters6M_pi_; -text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; -text: .text%__1cJMultiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPJavaCallWrapper2T6M_v_; -text: .text%__1cITypeFuncFxdual6kM_pknEType__; -text: .text%__1cMLinkResolverXresolve_klass_no_update6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; -text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cNloadKlassNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapCpp6MpnNCellTypeState_2_v_; -text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__i_; -text: .text%__1cHoopDescSslow_identity_hash6M_i_; -text: .text%__1cIMulINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cGciType2t6MnLKlassHandle__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle__v_; -text: .text%__1cLRShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKInlineTreeYcompute_callee_frequency6kMi_f_; -text: .text%__1cKInlineTreebCbuild_inline_tree_for_callee6MpnIciMethod_pnIJVMState_i_p0_; -text: .text%__1cIciMethodbBinterpreter_call_site_count6Mi_i_; -text: .text%__1cJAssemblerElock6M_v_; -text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__; -text: .text%__1cRandI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNIdealLoopTreeIset_nest6MI_i_; -text: .text%__1cNIdealLoopTreeMcounted_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cPshlI_eReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRalign_code_offset6Fi_I_; -text: .text%__1cRciVirtualCallDataOtranslate_from6MpnLProfileData__v_; -text: .text%__1cMLinkResolverVresolve_invokespecial6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cONMethodSweeperPprocess_nmethod6FpnHnmethod__v_; -text: .text%__1cKTypeAryPtrFxdual6kM_pknEType__; -text: .text%__1cRmethodDataOopDescJbci_to_dp6Mi_pC_; -text: .text%__1cbAPSEvacuateFollowersClosureHdo_void6M_v_: psScavenge.o; -text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; -text: .text%__1cIDivINodeGOpcode6kM_i_; -text: .text%__1cMURShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; -text: .text%jni_GetPrimitiveArrayCritical: jni.o; -text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; -text: .text%__1cOMethodLivenessKBasicBlockIload_two6Mi_v_; -text: .text%__1cMCreateExNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cFArena2t6M_v_; -text: .text%__1cHMulNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cMCreateExNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cIJVMState2t6Mi_v_; -text: .text%__1cKPerfStringKset_string6Mpkc_v_; -text: .text%__1cFStateQ_sub_Op_CreateEx6MpknENode__v_; -text: .text%__1cLjmpConUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLjmpConUNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cLOpaque1NodeLbottom_type6kM_pknEType__: connode.o; -text: .text%__1cEDict2t6MpFpkv2_ipF2_i_v_; -text: .text%__1cEDict2T6M_v_; -text: .text%__1cNCatchProjNodeDcmp6kMrknENode__I_; -text: .text%__1cSCountedLoopEndNodeKstride_con6kM_i_; -text: .text%__1cRmethodDataOopDescKmileage_of6FpnNmethodOopDesc__i_; -text: .text%__1cHCompileXin_preserve_stack_slots6M_I_; -text: .text%__1cKTypeRawPtrFxmeet6kMpknEType__3_; -text: .text%__1cTJvmtiEventCollectorYunset_jvmti_thread_state6M_v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_; -text: .text%__1cIMinINodeGOpcode6kM_i_; -text: .text%__1cHMemNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cHMemNodeScalculate_adr_type6FpknEType_pknHTypePtr__6_; -text: .text%__1cFStateM_sub_Op_CmpU6MpknENode__v_; -text: .text%__1cSPSKeepAliveClosureGdo_oop6MppnHoopDesc__v_: psScavenge.o; -text: .text%__1cFTypeDEmake6Fd_pk0_; -text: .text%jni_IsSameObject: jni.o; -text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_; -text: .text%__1cNstoreImmBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJloadPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHOrINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKJavaThreadQlast_java_vframe6MpnLRegisterMap__pnKjavaVFrame__; -text: .text%__1cTStackWalkCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; -text: .text%__1cTStackWalkCompPolicyVfindTopInlinableFrame6MpnNGrowableArray4CpnGRFrame____2_; -text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_nMmethodHandle__v_; -text: .text%__1cPClassFileParserbCverify_legal_class_modifiers6MipnGThread__v_; -text: .text%__1cOcompI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cUEdenMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cYSurvivorMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cTleaPIdxScaleOffNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMorI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; -text: .text%__1cKRegionNodeOhas_unique_phi6kM_pnHPhiNode__; -text: .text%__1cLRethrowNodeKmatch_edge6kMI_I_; -text: .text%__1cNinstanceKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cLAccessFlagsPatomic_set_bits6Mi_v_; -text: .text%__1cTCreateExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFTypeFEhash6kM_i_; -text: .text%__1cScompP_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIciObject2t6M_v_; -text: .text%__1cIMulLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIGraphKitYcombine_exception_states6MpnNSafePointNode_2_v_; -text: .text%__1cMciMethodData2t6M_v_; -text: .text%__1cPciObjectFactoryUget_empty_methodData6M_pnMciMethodData__; -text: .text%__1cRitableMethodEntryKinitialize6MpnNmethodOopDesc__v_; -text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQinstanceRefKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cJloadBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIHaltNodeEhash6kM_I_: classes.o; -text: .text%__1cQinit_input_masks6FIrnHRegMask_1_p0_: matcher.o; -text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_; -text: .text%__1cSconstMethodOopDescZchecked_exceptions_length6kM_i_; -text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_; -text: .text%__1cOGenerateOopMapLbb_mark_fct6Fp0ipi_v_; -text: .text%__1cFStateO_sub_Op_StoreP6MpknENode__v_; -text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; -text: .text%__1cPCountedLoopNodeDphi6kM_pnENode__: cfgnode.o; -text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_: jni.o; -text: .text%__1cQjmpCon_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjmpCon_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cNstoreImmPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cFKlassQset_next_sibling6MpnMklassOopDesc__v_; -text: .text%__1cNstoreImmBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_; -text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_2_v_; -text: .text%JVM_GetMethodIxModifiers; -text: .text%__1cNSCMemProjNodeGOpcode6kM_i_; -text: .text%__1cJleaP8NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cScompU_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPcmpFastLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateO_sub_Op_StoreI6MpknENode__v_; -text: .text%JVM_IsInterface; -text: .text%__1cFStateM_sub_Op_RegL6MpknENode__v_; -text: .text%__1cRMachNullCheckNodeLout_RegMask6kM_rknHRegMask__: machnode.o; -text: .text%__1cRshrI_eReg_immNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cScompP_mem_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftLNodeGOpcode6kM_i_; -text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; -text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSobjArrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cZresource_reallocate_bytes6FpcII_0_; -text: .text%__1cLeCXRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cScompI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUreloc_java_to_interp6F_I_; -text: .text%__1cTsize_java_to_interp6F_I_; -text: .text%__1cKstoreINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cScompU_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCallLeafDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQComputeCallStackHdo_void6M_v_: generateOopMap.o; -text: .text%__1cHciField2t6MpnPfieldDescriptor__v_; -text: .text%__1cKPSYoungGenNused_in_bytes6kM_I_; -text: .text%__1cLLShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; -text: .text%__1cIModINodeGOpcode6kM_i_; -text: .text%__1cHUNICODEHas_utf86FpHi_pc_; -text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cIMaxINodeGOpcode6kM_i_; -text: .text%__1cQjmpDir_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjmpDir_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cWImplicitExceptionTableGappend6MII_v_; -text: .text%__1cIGraphKitbBset_arguments_for_java_call6MpnMCallJavaNode__v_; -text: .text%__1cIGraphKitJpush_node6MnJBasicType_pnENode__v_: callGenerator.o; -text: .text%__1cNCallGeneratorCtf6kM_pknITypeFunc__; -text: .text%__1cHGCCauseJto_string6Fn0AFCause__pkc_; -text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; -text: .text%__1cLBoxLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cScompI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFParseQarray_addressing6MnJBasicType_ippknEType__pnENode__; -text: .text%__1cHCompileSregister_intrinsic6MpnNCallGenerator__v_; -text: .text%__1cMeADXRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cRcmpFastUnlockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; -text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cPciInstanceKlassLfind_method6MpnIciSymbol_2_pnIciMethod__; -text: .text%__1cTDirectCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cMWarmCallInfoLalways_cold6F_p0_; -text: .text%__1cFciEnvRfind_system_klass6MpnIciSymbol__pnHciKlass__; -text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; -text: .text%__1cOClearArrayNodeKmatch_edge6kMI_I_; -text: .text%__1cLConvI2LNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPThreadLocalNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLBlock_ArrayEgrow6MI_v_; -text: .text%__1cLConvL2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_; -text: .text%__1cIAndINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cOGenerateOopMapQnext_bb_start_pc6MpnKBasicBlock__i_; -text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cOGenerateOopMapNrestore_state6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapJinterp_bb6MpnKBasicBlock__v_; -text: .text%__1cISubINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIAndINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cTCallDynamicJavaNodeGOpcode6kM_i_; -text: .text%__1cPCheckCastPPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSloadL_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; -text: .text%__1cJPhaseLiveHcompute6MI_v_; -text: .text%__1cIPhaseIFGEinit6MI_v_; -text: .text%__1cRjmpConU_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIAddLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFStateN_sub_Op_LoadI6MpknENode__v_; -text: .text%__1cPsarI_eReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHCmpNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cOPhaseIdealLoopPis_counted_loop6MpnENode_pnNIdealLoopTree__2_; -text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: oopFactory.o; -text: .text%__1cOGenerateOopMapHset_var6MinNCellTypeState__v_; -text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__; -text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_: universe.o; -text: .text%__1cNloadKlassNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIGraphKitPpush_pair_local6Mi_v_: parse2.o; -text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; -text: .text%__1cMLinkResolverUresolve_invokestatic6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cXcmpL_reg_flags_LTGENodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cFStateR_sub_Op_LoadRange6MpknENode__v_; -text: .text%__1cOcompU_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cICmpLNodeDsub6kMpknEType_3_3_; -text: .text%__1cHMemNodeHsize_of6kM_I_; -text: .text%__1cYCallStaticJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNRelocIteratorJset_limit6MpC_v_; -text: .text%__1cHPhiNodeDcmp6kMrknENode__I_; -text: .text%jni_SetObjectArrayElement: jni.o; -text: .text%__1cVjava_lang_ClassLoaderGparent6FpnHoopDesc__2_; -text: .text%__1cLOpaque2NodeGOpcode6kM_i_; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_: bytecode.o; -text: .text%__1cMloadConLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIGraphKitSclear_saved_ex_oop6FpnNSafePointNode__pnENode__; -text: .text%__1cIGraphKitTuse_exception_state6MpnNSafePointNode__pnENode__; -text: .text%__1cKstoreINodeFreloc6kM_i_; -text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; -text: .text%__1cPcheckCastPPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKciTypeFlowHdo_flow6M_v_; -text: .text%__1cKciTypeFlowKmap_blocks6M_v_; -text: .text%__1cKciTypeFlowKflow_types6M_v_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_i_v_; -text: .text%__1cKciTypeFlow2t6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cKciTypeFlowPget_start_state6M_pkn0ALStateVector__; -text: .text%__1cOPhaseIdealLoopRsplit_thru_region6MpnENode_2_2_; -text: .text%__1cOPhaseTransform2t6MnFPhaseLPhaseNumber__v_; -text: .text%__1cFKlassQup_cast_abstract6M_p0_; -text: .text%__1cFframebHnext_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; -text: .text%__1cVPreserveExceptionMark2t6MrpnGThread__v_; -text: .text%__1cVPreserveExceptionMark2T6M_v_; -text: .text%__1cIciMethodJload_code6M_v_; -text: .text%__1cMciMethodDataJload_data6M_v_; -text: .text%__1cPconvL2I_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJCMoveNodeLis_cmove_id6FpnOPhaseTransform_pnENode_44pnIBoolNode__4_; -text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_; -text: .text%JVM_GetCPClassNameUTF; -text: .text%__1cNIdealLoopTreeNDCE_loop_body6M_v_; -text: .text%__1cNIdealLoopTreeVadjust_loop_exit_prob6MpnOPhaseIdealLoop__v_; -text: .text%__1cJAssemblerEleal6MpnMRegisterImpl_nHAddress__v_; -text: .text%jni_GetStringLength: jni.o; -text: .text%__1cICodeHeapPsearch_freelist6MI_pnJFreeBlock__; -text: .text%__1cICodeHeapIallocate6MI_pv_; -text: .text%__1cKstorePNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQSystemDictionarybAcompute_loader_lock_object6FnGHandle_pnGThread__1_; -text: .text%__1cMciMethodData2t6MnQmethodDataHandle__v_; -text: .text%__1cLOpaque1NodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOClearArrayNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cUPSGenerationCountersKupdate_all6M_v_: psGenerationCounters.o; -text: .text%__1cMoutputStream2t6Mi_v_; -text: .text%__1cWflagsReg_long_LTGEOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNloadRangeNodeFreloc6kM_i_; -text: .text%__1cMstringStream2t6MI_v_; -text: .text%__1cMstringStreamJas_string6M_pc_; -text: .text%__1cMstringStream2T6M_v_; -text: .text%__1cMURShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJrelocInfoKset_format6Mi_v_; -text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; -text: .text%__1cJTimeStampSticks_since_update6kM_x_; -text: .text%__1cISubLNodeGOpcode6kM_i_; -text: .text%__1cICodeBlobMset_oop_maps6MpnJOopMapSet__v_; -text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__; -text: .text%__1cQVMOperationQdDueueSqueue_remove_front6Mi_pnMVM_Operation__; -text: .text%__1cMorI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cScompI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVAdaptivePaddedAverageGsample6Mf_v_; -text: .text%__1cSPSPromotionManagerFreset6M_v_; -text: .text%__1cSPSPromotionManagerKflush_labs6M_v_; -text: .text%__1cJloadSNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__; -text: .text%__1cICodeHeapPfollowing_block6MpnJFreeBlock__2_; -text: .text%__1cFStateQ_sub_Op_URShiftI6MpknENode__v_; -text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_; -text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fi_v_; -text: .text%__1cCosRcurrent_thread_id6F_i_; -text: .text%__1cMTypeKlassPtrFxdual6kM_pknEType__; -text: .text%__1cNtestP_regNodeFreloc6kM_i_; -text: .text%__1cHCompileTset_cached_top_node6MpnENode__v_; -text: .text%__1cIGotoNodeGOpcode6kM_i_; -text: .text%__1cENodeMsetup_is_top6M_v_; -text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; -text: .text%__1cOMachPrologNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cULinearLeastSquareFitGupdate6Mdd_v_; -text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_; -text: .text%__1cNsubI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cHRetNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQleaPIdxScaleNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopQset_subtree_ctrl6MpnENode__v_; -text: .text%__1cOMethodLivenessKBasicBlockJstore_two6Mi_v_; -text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cJloadINodeFreloc6kM_i_; -text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cKReturnNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPjava_lang_ClassNcreate_mirror6FnLKlassHandle_pnGThread__pnHoopDesc__; -text: .text%__1cLklassVtableVinitialize_from_super6MnLKlassHandle__i_; -text: .text%__1cLklassVtableOcopy_vtable_to6MpnLvtableEntry__v_; -text: .text%__1cSCallLeafDirectNodeKmethod_set6Mi_v_; -text: .text%__1cKReturnNodeEhash6kM_I_: classes.o; -text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; -text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cIPhaseIFGISquareUp6M_v_; -text: .text%__1cKKlass_vtbl2n6FIrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_; -text: .text%jni_GetStringUTFLength: jni.o; -text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; -text: .text%__1cFKlassRbase_create_klass6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__1_; -text: .text%jni_GetStringUTFRegion: jni.o; -text: .text%__1cIAndINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQPlaceholderTableMremove_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cIAndINodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cKCMoveINodeGOpcode6kM_i_; -text: .text%__1cOMachEpilogNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMPhaseChaitinSbuild_ifg_physical6MpnMResourceArea__I_; -text: .text%__1cMPhaseChaitinMreset_uf_map6MI_v_; -text: .text%__1cRaddI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNPhaseCoalescePcoalesce_driver6M_v_; -text: .text%__1cHCompileQsync_stack_slots6kM_i_; -text: .text%__1cPindOffset32OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cJloadLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQSystemDictionaryTload_instance_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cUDebugInfoWriteStreamMwrite_handle6MpnI_jobject__v_; -text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cRAbstractAssemblerbDgenerate_stack_overflow_check6Mi_v_; -text: .text%__1cRaddI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbBjava_lang_ref_SoftReferenceFclock6F_x_; -text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_; -text: .text%JVM_InternString; -text: .text%__1cQjava_lang_StringRas_unicode_string6FpnHoopDesc_ri_pH_; -text: .text%__1cCosGrandom6F_l_; -text: .text%__1cXmembar_release_lockNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cJCmpL3NodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapKcopy_state6MpnNCellTypeState_2_v_; -text: .text%__1cEDictIdoubhash6M_v_; -text: .text%__1cUinitialize_hashtable6FppnLNameSigHash__v_; -text: .text%__1cScompU_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; -text: .text%__1cLRShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKstoreLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%jni_SetIntField: jni.o; -text: .text%__1cKstorePNodeFreloc6kM_i_; -text: .text%__1cNincI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPCountedLoopNodeHsize_of6kM_I_: classes.o; -text: .text%__1cTresource_free_bytes6FpcI_v_; -text: .text%__1cQSystemDictionaryRupdate_dictionary6FiIiInTinstanceKlassHandle_nGHandle_pnGThread__v_; -text: .text%__1cPTwoOopHashtableMcompute_hash6MnMsymbolHandle_nGHandle__I_: dictionary.o; -text: .text%__1cQSystemDictionaryQfind_placeholder6FiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cIProjNodeJideal_reg6kM_I_; -text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; -text: .text%__1cKDictionaryJnew_entry6MIpnMklassOopDesc_pnHoopDesc__pnPDictionaryEntry__; -text: .text%__1cIAndINodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIAndINodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cRandI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJLoadSNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_: ciMethodData.o; -text: .text%__1cOPhaseIdealLoopMdominated_by6MpnENode_2_v_; -text: .text%__1cPRoundDoubleNodeGOpcode6kM_i_; -text: .text%__1cRsarI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_i_v_; -text: .text%__1cLklassVtableQfill_in_mirandas6Mri_v_; -text: .text%__1cCosXthread_local_storage_at6Fi_pv_; -text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; -text: .text%__1cLregFPR1OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNstoreImmBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFKlassWappend_to_sibling_list6M_v_; -text: .text%__1cIGraphKitHopt_iff6MpnENode_2_2_; -text: .text%__1cQSystemDictionarySjava_system_loader6F_pnHoopDesc__; -text: .text%__1cJLoadFNodeGOpcode6kM_i_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_2_v_; -text: .text%__1cTjava_lang_ThrowableNset_backtrace6FpnHoopDesc_2_v_; -text: .text%__1cKstoreCNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMStartOSRNodeGOpcode6kM_i_; -text: .text%__1cHPhiNodeKmake_blank6FpnENode_2_p0_; -text: .text%__1cTClassLoadingServiceScompute_class_size6FpnNinstanceKlass__I_; -text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassQeager_initialize6MpnGThread__v_; -text: .text%__1cPClassFileStream2t6MpCipc_v_; -text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; -text: .text%__1cNinstanceKlassQinit_implementor6M_v_; -text: .text%__1cNinstanceKlassbBdo_local_static_fields_impl6FnTinstanceKlassHandle_pFpnPfieldDescriptor_pnGThread__v5_v_; -text: .text%__1cLklassVtableQget_num_mirandas6FpnMklassOopDesc_pnPobjArrayOopDesc_4_i_; -text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; -text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_; -text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; -text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cQSystemDictionaryQadd_to_hierarchy6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; -text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__; -text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cPClassFileParserYcheck_super_class_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbAparse_classfile_attributes6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; -text: .text%__1cNObjectMonitorHis_busy6kM_i_; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o; -text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o; -text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; -text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; -text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cQSystemDictionaryRfind_shared_class6FnMsymbolHandle__pnMklassOopDesc__; -text: .text%__1cQSystemDictionaryRload_shared_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; -text: .text%__1cNnegI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFframeZinterpreter_frame_set_bcx6Mi_v_; -text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cMPhaseIterGVNIoptimize6M_v_; -text: .text%__1cQPackageHashtableMcompute_hash6Mpkci_I_: classLoader.o; -text: .text%__1cOMethodLivenessRinit_basic_blocks6M_v_; -text: .text%__1cOMethodLivenessNinit_gen_kill6M_v_; -text: .text%__1cOMethodLivenessSpropagate_liveness6M_v_; -text: .text%__1cOMethodLiveness2t6MpnFArena_pnIciMethod__v_; -text: .text%__1cOMethodLivenessQcompute_liveness6M_v_; -text: .text%__1cHCompilebAvarargs_C_out_slots_killed6kM_I_; -text: .text%__1cSMemBarVolatileNodeGOpcode6kM_i_; -text: .text%__1cMloadConPNodeFreloc6kM_i_; -text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; -text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_; -text: .text%__1cLklassVtableYadd_new_mirandas_to_list6FpnNGrowableArray4CpnNmethodOopDesc___pnPobjArrayOopDesc_6pnMklassOopDesc__v_; -text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; -text: .text%JVM_GetMethodIxExceptionIndexes; -text: .text%JVM_GetMethodIxSignatureUTF; -text: .text%JVM_GetMethodIxExceptionsCount; -text: .text%JVM_GetMethodIxMaxStack; -text: .text%JVM_GetMethodIxByteCode; -text: .text%JVM_GetMethodIxArgsSize; -text: .text%JVM_GetMethodIxByteCodeLength; -text: .text%__1cKoopFactoryWnew_permanent_intArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cKTypeRawPtrEmake6FpC_pk0_; -text: .text%__1cPClassFileParserVparse_exception_table6MIInSconstantPoolHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cFParseXcatch_inline_exceptions6MpnNSafePointNode__v_; -text: .text%__1cNmulL_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cYciExceptionHandlerStreamPcount_remaining6M_i_; -text: .text%__1cJLoadLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cPshrI_eReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cYmulI_imm_RShift_highNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; -text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; -text: .text%__1cCosRelapsed_frequency6F_x_; -text: .text%__1cRshrI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMelapsedTimerHseconds6kM_d_; -text: .text%__1cRaddL_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNaddI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQPackageHashtableJget_entry6MiIpkcI_pnLPackageInfo__: classLoader.o; -text: .text%__1cLClassLoaderOlookup_package6Fpkc_pnLPackageInfo__; -text: .text%__1cLeDIRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFStateR_sub_Op_LoadKlass6MpknENode__v_; -text: .text%__1cQVMOperationQdDueueNqueue_oops_do6MipnKOopClosure__v_; -text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; -text: .text%__1cRsalI_eReg_immNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNloadKlassNodeFreloc6kM_i_; -text: .text%__1cFStateV_sub_Op_MemBarRelease6MpknENode__v_; -text: .text%__1cZInterpreterMacroAssemblerKverify_oop6MpnMRegisterImpl_nITosState__v_; -text: .text%__1cFStateM_sub_Op_SubI6MpknENode__v_; -text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; -text: .text%__1cLeSIRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIRootNodeFValue6kMpnOPhaseTransform__pknEType__: classes.o; -text: .text%__1cIXorINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cKManagementJtimestamp6F_x_; -text: .text%__1cIPSOldGenPupdate_counters6M_v_; -text: .text%__1cHOrINodeGadd_id6kM_pknEType__: classes.o; -text: .text%signalHandler; -text: .text%JVM_handle_solaris_signal; -text: .text%__1cNinstanceKlassbBcall_class_initializer_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassRclass_initializer6M_pnNmethodOopDesc__; -text: .text%__1cNinstanceKlassbOset_initialization_state_and_notify_impl6FnTinstanceKlassHandle_n0AKClassState_pnGThread__v_; -text: .text%__1cNinstanceKlassbJset_initialization_state_and_notify6Mn0AKClassState_pnGThread__v_; -text: .text%__1cNinstanceKlassWcall_class_initializer6MpnGThread__v_; -text: .text%__1cMtlsLoadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQVMOperationQdDueueLremove_next6M_pnMVM_Operation__; -text: .text%__1cOPhaseIdealLoopNreorg_offsets6MpnNIdealLoopTree__v_; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_i_v_; -text: .text%__1cPcmpFastLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKBufferBlob2t6Mpkci_v_; -text: .text%__1cKBufferBlobGcreate6Fpkci_p0_; -text: .text%__1cNaddL_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKBufferBlob2n6FII_pv_; -text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_; -text: .text%__1cNRelocIteratorTlocs_and_index_size6Fii_i_; -text: .text%__1cScompP_mem_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLGCTaskQdDueueKinitialize6M_v_; -text: .text%__1cSCardTableExtensionbAscavenge_contents_parallel6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager_I_v_; -text: .text%__1cTOldToYoungRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cJStealTaskEname6M_pc_: psTasks.o; -text: .text%__1cTOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cJStealTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cNGCTaskManagerMnote_release6MI_v_; -text: .text%__1cICodeHeapTmark_segmap_as_used6MII_v_; -text: .text%__1cJloadBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseWensure_phis_everywhere6M_v_; -text: .text%__1cLConvL2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNxorI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNandL_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJStartNodeHsize_of6kM_I_; -text: .text%__1cHMatcherFxform6MpnENode_i_2_; -text: .text%__1cHMatcherLfind_shared6MpnENode__v_; -text: .text%__1cTMachCallRuntimeNodePret_addr_offset6M_i_; -text: .text%__1cILRG_List2t6MI_v_; -text: .text%__1cILoopNodeHsize_of6kM_I_: classes.o; -text: .text%__1cEDict2t6MpFpkv2_ipF2_ipnFArena_i_v_; -text: .text%__1cOMachPrologNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNstoreImmPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRmethodDataOopDescYcompute_extra_data_count6Fii_i_; -text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6MX_v_: jni.o; -text: .text%__1cSshrL_eReg_1_31NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPstoreImmI16NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIemit_d166FrnKCodeBuffer_i_v_; -text: .text%__1cJAssemblerEmovl6MnHAddress_i_v_; -text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cFStateT_sub_Op_CheckCastPP6MpknENode__v_; -text: .text%__1cKciTypeFlowLStateVectorJhalf_type6FpnGciType__3_: ciTypeFlow.o; -text: .text%JVM_GetFieldIxModifiers; -text: .text%__1cIMulINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cFParseKarray_load6MnJBasicType__v_; -text: .text%__1cRjmpConU_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cRjmpConU_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateO_sub_Op_StoreB6MpknENode__v_; -text: .text%__1cFParseNadd_safepoint6M_v_; -text: .text%__1cLOpaque2NodeEhash6kM_I_; -text: .text%JVM_IsConstructorIx; -text: .text%__1cXmembar_release_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__; -text: .text%__1cNdecI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cICodeHeapLmerge_right6MpnJFreeBlock__v_; -text: .text%__1cIregDOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIPhaseIFGYCompute_Effective_Degree6M_v_; -text: .text%__1cMPhaseChaitinISimplify6M_v_; -text: .text%__1cMPhaseChaitinGSelect6M_I_; -text: .text%__1cMPhaseChaitinOcache_lrg_info6M_v_; -text: .text%__1cJScopeDescJstream_at6kMi_pnTDebugInfoReadStream__; -text: .text%__1cLOptoRuntimeJstub_name6FpC_pkc_; -text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_; -text: .text%__1cENodeHrm_prec6MI_v_; -text: .text%__1cWflagsReg_long_EQdDNEOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKciTypeFlowPflow_exceptions6MpnNGrowableArray4Cpn0AFBlock___pnNGrowableArray4CpnPciInstanceKlass___pn0ALStateVector__v_; -text: .text%__1cXmembar_release_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cMPhaseChaitinFSplit6MI_I_; -text: .text%__1cZPhaseConservativeCoalesce2t6MrnMPhaseChaitin__v_; -text: .text%__1cMPhaseChaitinHcompact6M_v_; -text: .text%__1cMPhaseChaitinZcompress_uf_map_for_nodes6M_v_; -text: .text%__1cZPhaseConservativeCoalesceGverify6M_v_; -text: .text%__1cHTypePtrFxmeet6kMpknEType__3_; -text: .text%__1cSsafePoint_pollNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcompiledVFrame2t6MpknFframe_pknLRegisterMap_pnKJavaThread_pnJScopeDesc__v_; -text: .text%__1cNSignatureInfoHdo_long6M_v_: bytecode.o; -text: .text%__1cXvirtual_call_RelocationJfirst_oop6M_pC_; -text: .text%__1cXvirtual_call_RelocationJoop_limit6M_pC_; -text: .text%__1cQComputeCallStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cSCallLeafDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateQ_sub_Op_CallLeaf6MpknENode__v_; -text: .text%__1cHi2sNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRNativeGeneralJumpQjump_destination6kM_pC_; -text: .text%__1cMoutputStreamFprint6MpkcE_v_; -text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; -text: .text%__1cITypeLongFxdual6kM_pknEType__; -text: .text%__1cScompP_eReg_immNodeFreloc6kM_i_; -text: .text%__1cPcheckCastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__: cfgnode.o; -text: .text%__1cPClassFileStreamGget_u86MpnGThread__X_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJtimestamp6FpnHoopDesc__x_; -text: .text%__1cJNode_ListEyank6MpnENode__v_; -text: .text%__1cWflagsReg_long_LEGTOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cSThreadLocalStorageTpd_getTlsAccessMode6F_n0AQpd_tlsAccessMode__; -text: .text%__1cOMacroAssemblerKget_thread6MpnMRegisterImpl__v_; -text: .text%__1cLRethrowNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIGraphKitNshared_unlock6MpnENode_2_v_; -text: .text%__1cNSafePointNodeLpop_monitor6M_v_; -text: .text%__1cLOptoRuntimebAcomplete_monitor_exit_Type6F_pknITypeFunc__; -text: .text%__1cIRootNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cFStateS_sub_Op_FastUnlock6MpknENode__v_; -text: .text%__1cSstore_to_stackslot6FrnKCodeBuffer_iii_v_; -text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; -text: .text%__1cMnadxRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIAndINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cPconvI2L_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; -text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%jni_ExceptionCheck: jni.o; -text: .text%__1cIMulLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cFStateP_sub_Op_RShiftI6MpknENode__v_; -text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; -text: .text%__1cIMulLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cMvalue_of_loc6FppnHoopDesc__i_; -text: .text%__1cNSafePointNodeMpush_monitor6MpknMFastLockNode__v_; -text: .text%__1cTcompareAndSwapLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNstoreImmPNodeFreloc6kM_i_; -text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; -text: .text%__1cIAndLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cIAndLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cNstoreImmBNodeFreloc6kM_i_; -text: .text%JVM_Clone; -text: .text%__1cNloadKlassNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVeADXRegL_low_onlyOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cMeBCXRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cRsubI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIJumpDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cHOrINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKTypeRawPtrEmake6FnHTypePtrDPTR__pk0_; -text: .text%__1cKTypeAryPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cFKlassDLCA6Mp0_1_; -text: .text%__1cHciKlassVleast_common_ancestor6Mp0_1_; -text: .text%__1cbCfind_class_from_class_loader6FpnHJNIEnv__nMsymbolHandle_CnGHandle_3CpnGThread__pnH_jclass__; -text: .text%__1cPshlI_eReg_1NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIMinINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMTypeKlassPtrFxmeet6kMpknEType__3_; -text: .text%__1cICodeHeapPadd_to_freelist6MpnJHeapBlock__v_; -text: .text%__1cICodeHeapKdeallocate6Mpv_v_; -text: .text%__1cJCodeCacheEfree6FpnICodeBlob__v_; -text: .text%__1cJVectorSetGslamin6Mrk0_v_; -text: .text%__1cKNode_ArrayFclear6M_v_; -text: .text%__1cKBufferBlobEfree6Fp0_v_; -text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_: jni.o; -text: .text%__1cNminI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNsubI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_; -text: .text%__1cMorI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%jni_NewObject: jni.o; -text: .text%__1cMTailCallNodeKmatch_edge6kMI_I_; -text: .text%__1cKStoreFNodeGOpcode6kM_i_; -text: .text%__1cFStateO_sub_Op_StoreC6MpknENode__v_; -text: .text%__1cFciEnvKcompile_id6M_I_; -text: .text%__1cRAbstractAssemblerFflush6M_v_; -text: .text%__1cJloadINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cScompU_eReg_memNodeFreloc6kM_i_; -text: .text%__1cTleaPIdxScaleOffNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMURShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNSharedRuntimeQfind_callee_info6FpnKJavaThread_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cSCallLeafDirectNodeFreloc6kM_i_; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cKCompiledIC2t6MpnKNativeCall__v_; -text: .text%__1cGIfNodeMdominated_by6MpnENode_pnMPhaseIterGVN__v_; -text: .text%__1cIMulDNodeGOpcode6kM_i_; -text: .text%__1cFStateV_sub_Op_MemBarAcquire6MpknENode__v_; -text: .text%__1cOMachEpilogNodeFreloc6kM_i_; -text: .text%__1cOMachEpilogNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivLNodeGOpcode6kM_i_; -text: .text%__1cSsafePoint_pollNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitNgen_checkcast6MpnENode_2p2_2_; -text: .text%__1cLStrCompNodeGOpcode6kM_i_; -text: .text%__1cXmembar_acquire_lockNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEtemp6F_pnMRegisterImpl__; -text: .text%__1cPstoreImmI16NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFframeRretrieve_receiver6MpnLRegisterMap__pnHoopDesc__; -text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__; -text: .text%__1cXcmpL_reg_flags_EQdDNENodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerDjmp6MrnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cIGraphKitRgen_subtype_check6MpnENode_2_2_; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_tree6M_v_; -text: .text%__1cLConvD2INodeGOpcode6kM_i_; -text: .text%__1cFframeIpatch_pc6MpnGThread_pC_v_; -text: .text%__1cXmembar_release_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXcmpL_reg_flags_LTGENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cJloadLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNandL_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; -text: .text%__1cXcmpL_reg_flags_LEGTNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNincI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNSafePointNodeKgrow_stack6MpnIJVMState_I_v_; -text: .text%__1cNxorI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cLRShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cKBlock_ListGinsert6MIpnFBlock__v_; -text: .text%__1cECopyYconjoint_words_to_higher6FpnIHeapWord_2I_v_: block.o; -text: .text%__1cLRShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNaddL_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cKstoreCNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_NewGlobalRef: jni.o; -text: .text%__1cKPSYoungGenRcapacity_in_bytes6kM_I_; -text: .text%__1cMVirtualSpaceNreserved_size6kM_I_; -text: .text%__1cHNTarjanIsetdepth6MIpI_v_; -text: .text%__1cOPhaseIdealLoopKDominators6M_v_; -text: .text%__1cHNTarjanDDFS6Fp0rnJVectorSet_pnOPhaseIdealLoop_pI_i_; -text: .text%__1cOPhaseIdealLoopRinit_dom_lca_tags6M_v_; -text: .text%__1cSmembar_acquireNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQjava_lang_ThreadRset_thread_status6FpnHoopDesc_n0AMThreadStatus__v_; -text: .text%__1cMPhaseChaitinVfind_base_for_derived6MppnENode_2rI_2_; -text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cENodeGOpcode6kM_i_; -text: .text%__1cKJavaThreadGactive6F_p0_; -text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_; -text: .text%__1cKstoreLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle__v_; -text: .text%JVM_FillInStackTrace; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_; -text: .text%__1cSInterpreterRuntimePset_bcp_and_mdp6FpCpnKJavaThread__v_; -text: .text%__1cTjava_lang_ThrowableQclear_stacktrace6FpnHoopDesc__v_; -text: .text%__1cJloadSNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSshlL_eReg_1_31NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_; -text: .text%__1cLPcDescCacheLadd_pc_desc6MpnGPcDesc__v_; -text: .text%__1cOstackSlotFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFStateN_sub_Op_LoadL6MpknENode__v_; -text: .text%__1cJAssemblerEcmpl6MnHAddress_i_v_; -text: .text%__1cIModINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; -text: .text%__1cIPhaseCFGOinsert_goto_at6MII_v_; -text: .text%__1cUParallelScavengeHeapEused6kM_I_; -text: .text%__1cLOpaque2NodeLbottom_type6kM_pknEType__: connode.o; -text: .text%__1cHciKlassSsuper_check_offset6M_I_; -text: .text%__1cOMacroAssemblerSload_unsigned_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cICmpDNodeGOpcode6kM_i_; -text: .text%__1cLRuntimeStubbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; -text: .text%__1cNmethodOopDescVclear_native_function6M_v_; -text: .text%__1cJLoadBNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cLeAXRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%jni_NewLocalRef: jni.o; -text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_; -text: .text%__1cLConvF2DNodeGOpcode6kM_i_; -text: .text%__1cIMulINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cPconvL2I_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateM_sub_Op_AndI6MpknENode__v_; -text: .text%__1cPClassFileParserbNparse_classfile_inner_classes_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__H_; -text: .text%__1cICodeHeapMmax_capacity6kM_I_; -text: .text%jni_DeleteGlobalRef: jni.o; -text: .text%__1cOPhaseIdealLoopLdo_split_if6MpnENode__v_; -text: .text%__1cRsubI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNaddI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMURShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%jni_GetObjectArrayElement: jni.o; -text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; -text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_; -text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; -text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cOJNIHandleBlockMweak_oops_do6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cQVMOperationQdDueueHoops_do6MpnKOopClosure__v_; -text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_; -text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; -text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollectorXoops_do_for_all_threads6FpnKOopClosure__v_; -text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; -text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; -text: .text%__1cNstoreImmINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPlocal_vsnprintf6FpcIpkcpv_i_; -text: .text%JVM_GetCPMethodModifiers; -text: .text%__1cIModLNodeGOpcode6kM_i_; -text: .text%__1cNSCMemProjNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIAndLNodeGmul_id6kM_pknEType__: classes.o; -text: .text%jni_SetLongField: jni.o; -text: .text%__1cIAndLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%jio_vsnprintf; -text: .text%__1cLRethrowNodeEhash6kM_I_: classes.o; -text: .text%__1cWCallLeafNoFPDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRsalI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJAssemblerDjmp6MnHAddress__v_; -text: .text%jio_snprintf; -text: .text%__1cLConvL2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOjmpLoopEndNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNinstanceKlassPadd_implementor6MpnMklassOopDesc__v_; -text: .text%__1cOcompiledVFrameEcode6kM_pnHnmethod__; -text: .text%__1cOleaPIdxOffNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKReturnNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQComputeCallStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cPGlobalTLABStatsKinitialize6M_v_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJset_clock6Fx_v_; -text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; -text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; -text: .text%__1cUParallelScavengeHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; -text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; -text: .text%__1cRaddL_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKDictionaryHoops_do6MpnKOopClosure__v_; -text: .text%__1cUParallelScavengeHeapQresize_all_tlabs6M_v_; -text: .text%__1cVLoaderConstraintTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cUParallelScavengeHeapPupdate_counters6M_v_; -text: .text%__1cNCollectedHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersPupdate_counters6M_v_; -text: .text%__1cKPSYoungGenPupdate_counters6M_v_; -text: .text%__1cNCollectedHeapQresize_all_tlabs6M_v_; -text: .text%__1cTDerivedPointerTableFclear6F_v_; -text: .text%__1cQLRUMaxHeapPolicy2t6M_v_; -text: .text%__1cTDerivedPointerTablePupdate_pointers6F_v_; -text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; -text: .text%__1cJOopMapSet2t6M_v_; -text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; -text: .text%__1cOPhaseIdealLoopUsplit_if_with_blocks6MrnJVectorSet_rnKNode_Stack__v_; -text: .text%__1cIMachOperFscale6kM_i_; -text: .text%__1cIMachOperNconstant_disp6kM_i_; -text: .text%__1cPVM_GC_OperationZacquire_pending_list_lock6M_v_; -text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; -text: .text%__1cPVM_GC_OperationbKrelease_and_notify_pending_list_lock6M_v_; -text: .text%__1cIAndLNodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIAndLNodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cNmodI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUSafepointSynchronizeFbegin6F_v_; -text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; -text: .text%__1cCosbCmake_polling_page_unreadable6F_v_; -text: .text%__1cUSafepointSynchronizeQdo_cleanup_tasks6F_v_; -text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; -text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_; -text: .text%__1cJloadFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMCounterDecayFdecay6F_v_; -text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_; -text: .text%__1cUSafepointSynchronizeDend6F_v_; -text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; -text: .text%__1cCosbAmake_polling_page_readable6F_v_; -text: .text%__1cOCompiledRFrameEinit6M_v_; -text: .text%__1cGvframeDtop6kM_p0_; -text: .text%__1cJOopMapSetJheap_size6kM_i_; -text: .text%__1cJOopMapSetHcopy_to6MpC_v_; -text: .text%__1cRAbstractAssemblerOcode_fill_byte6F_i_; -text: .text%__1cNSignatureInfoJdo_double6M_v_: bytecode.o; -text: .text%JVM_DoPrivileged; -text: .text%__1cVPatchingRelocIteratorIpostpass6M_v_; -text: .text%__1cVPatchingRelocIteratorHprepass6M_v_; -text: .text%__1cIAddLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cRPrivilegedElementKinitialize6MpnMvframeStream_pnHoopDesc_p0pnGThread__v_; -text: .text%__1cZInterpreterMacroAssemblerKverify_FPU6MinITosState__v_; -text: .text%__1cURethrowExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGThreadMget_priority6Fkpk0_nOThreadPriority__; -text: .text%__1cIVMThreadSevaluate_operation6MpnMVM_Operation__v_; -text: .text%__1cQVMOperationQdDueueGunlink6MpnMVM_Operation__v_; -text: .text%__1cQVMOperationQdDueueOqueue_add_back6MipnMVM_Operation__v_; -text: .text%__1cMVM_OperationIevaluate6M_v_; -text: .text%__1cCosTget_native_priority6FkpknGThread_pi_nIOSReturn__; -text: .text%__1cMVM_OperationSset_calling_thread6MpnGThread_nOThreadPriority__v_; -text: .text%__1cQVMOperationQdDueueGinsert6MpnMVM_Operation_2_v_; -text: .text%__1cCosMget_priority6FkpknGThread_rnOThreadPriority__nIOSReturn__; -text: .text%__1cScompI_eReg_memNodeFreloc6kM_i_; -text: .text%__1cGGCTask2t6Mn0AEKindEkind__v_; -text: .text%__1cFParseGdo_new6M_v_; -text: .text%__1cNJvmtiGCMarker2T6M_v_; -text: .text%__1cNBarrierGCTaskIdestruct6M_v_; -text: .text%__1cNBarrierGCTaskOdo_it_internal6MpnNGCTaskManager_I_v_; -text: .text%__1cGGCTaskIdestruct6M_v_; -text: .text%__1cLGCTaskQdDueueGcreate6F_p0_; -text: .text%__1cKPSYoungGenLswap_spaces6M_v_; -text: .text%__1cKPSYoungGenNresize_spaces6MII_v_; -text: .text%__1cLGCTaskQdDueueHenqueue6Mp0_v_; -text: .text%__1cKPSYoungGenGresize6MII_v_; -text: .text%__1cZSerialOldToYoungRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cUParallelScavengeHeapQresize_young_gen6MII_v_; -text: .text%__1cZSerialOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cNGCTaskManagerIadd_list6MpnLGCTaskQdDueue__v_; -text: .text%__1cNGCTaskManagerVrelease_all_resources6M_v_; -text: .text%__1cUWaitForBarrierGCTaskEname6M_pc_: gcTaskManager.o; -text: .text%__1cUWaitForBarrierGCTaskGcreate6F_p0_; -text: .text%__1cSPSPromotionManagerMpre_scavenge6F_v_; -text: .text%__1cSPSPromotionManagerNpost_scavenge6F_v_; -text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; -text: .text%__1cSPSPromotionManagerbBvm_thread_promotion_manager6F_p0_; -text: .text%__1cSCardTableExtensionRscavenge_contents6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager__v_; -text: .text%__1cNMonitorSupplyHrelease6FpnHMonitor__v_; -text: .text%__1cNMonitorSupplyHreserve6F_pnHMonitor__; -text: .text%__1cUWaitForBarrierGCTaskIwait_for6M_v_; -text: .text%__1cUWaitForBarrierGCTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cUWaitForBarrierGCTaskIdestruct6M_v_; -text: .text%__1cUWaitForBarrierGCTaskHdestroy6Fp0_v_; -text: .text%__1cHThreadsZcreate_thread_roots_tasks6FpnLGCTaskQdDueue__v_; -text: .text%__1cPGlobalTLABStatsHpublish6M_v_; -text: .text%__1cJloadSNodeFreloc6kM_i_; -text: .text%__1cMrep_stosNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateN_sub_Op_LoadS6MpknENode__v_; -text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_; -text: .text%__1cIMulLNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cLOopRecorderIoop_size6M_i_; -text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; -text: .text%__1cHnmethodKtotal_size6kM_i_; -text: .text%__1cNstoreImmINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cINodeHash2t6Mp0_v_; -text: .text%__1cOPhaseTransform2t6Mp0nFPhaseLPhaseNumber__v_; -text: .text%__1cLPhaseValues2t6Mp0_v_; -text: .text%__1cNmethodOopDescbDbuild_interpreter_method_data6FnMmethodHandle_pnGThread__v_; -text: .text%__1cOJNIHandleBlockRrebuild_free_list6M_v_; -text: .text%__1cFStateM_sub_Op_Goto6MpknENode__v_; -text: .text%__1cFDictIFreset6MpknEDict__v_; -text: .text%__1cMPhaseChaitinRRegister_Allocate6M_v_; -text: .text%__1cIPhaseCFGJbuild_cfg6M_I_; -text: .text%__1cIPhaseCFG2t6MpnFArena_pnIRootNode_rnHMatcher__v_; -text: .text%__1cHMatcherZnumber_of_saved_registers6F_i_; -text: .text%__1cMPhaseChaitin2t6MIrnIPhaseCFG_rnHMatcher__v_; -text: .text%__1cOCompileWrapper2t6MpnHCompile__v_; -text: .text%__1cETypeKInitialize6FpnHCompile__v_; -text: .text%__1cIPhaseCFGKDominators6M_v_; -text: .text%__1cHCompileEInit6Mi_v_; -text: .text%__1cIPhaseCFGDDFS6MpnGTarjan__I_; -text: .text%__1cIPhaseCFGVschedule_pinned_nodes6MrnJVectorSet__v_; -text: .text%__1cXPhaseAggressiveCoalesceGverify6M_v_: coalesce.o; -text: .text%__1cWNode_Backward_Iterator2t6MpnENode_rnJVectorSet_rnJNode_List_rnLBlock_Array__v_; -text: .text%__1cIPhaseCFGQGlobalCodeMotion6MrnHMatcher_IrnJNode_List__v_; -text: .text%__1cVExceptionHandlerTable2t6Mi_v_; -text: .text%__1cGTarjanIsetdepth6MI_v_; -text: .text%__1cHCompileICode_Gen6M_v_; -text: .text%__1cIPhaseCFGYEstimate_Block_Frequency6M_v_; -text: .text%__1cXPhaseAggressiveCoalesceNinsert_copies6MrnHMatcher__v_; -text: .text%__1cNPhaseRegAllocTpd_preallocate_hook6M_v_; -text: .text%__1cYDebugInformationRecorder2t6MpnLOopRecorder__v_; -text: .text%__1cHMatcherUvalidate_null_checks6M_v_; -text: .text%__1cHMatcherPinit_spill_mask6MpnENode__v_; -text: .text%__1cHMatcherTFixup_Save_On_Entry6M_v_; -text: .text%__1cHMatcherVinit_first_stack_mask6M_v_; -text: .text%__1cHMatcherFmatch6M_v_; -text: .text%__1cHMatcher2t6MrnJNode_List__v_; -text: .text%__1cUDebugInfoWriteStream2t6MpnYDebugInformationRecorder_i_v_; -text: .text%__1cHCompilebBregister_library_intrinsics6M_v_; -text: .text%__1cMURShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cMPhaseChaitinRbuild_ifg_virtual6M_v_; -text: .text%__1cIAndLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJPhaseLive2t6MrknIPhaseCFG_rnILRG_List_pnFArena__v_; -text: .text%__1cIPhaseIFG2t6MpnFArena__v_; -text: .text%__1cMPhaseChaitinGde_ssa6M_v_; -text: .text%__1cFArenaNmove_contents6Mp0_1_; -text: .text%__1cNPhaseRegAlloc2t6MIrnIPhaseCFG_rnHMatcher_pF_v_v_; -text: .text%__1cFArena2t6MI_v_; -text: .text%__1cWsize_exception_handler6F_I_; -text: .text%__1cHCompileYinit_scratch_buffer_blob6M_v_; -text: .text%__1cOCompileWrapper2T6M_v_; -text: .text%__1cNPhasePeepholeMdo_transform6M_v_; -text: .text%__1cHCompileTframe_size_in_words6kM_i_; -text: .text%__1cNPhasePeephole2t6MpnNPhaseRegAlloc_rnIPhaseCFG__v_; -text: .text%__1cHCompileMBuildOopMaps6M_v_; -text: .text%__1cLdo_liveness6FpnNPhaseRegAlloc_pnIPhaseCFG_pnKBlock_List_ipnFArena_pnEDict__v_: buildOopMap.o; -text: .text%__1cMPhaseChaitinbApost_allocate_copy_removal6M_v_; -text: .text%__1cNPhaseRegAllocPalloc_node_regs6Mi_v_; -text: .text%__1cMPhaseChaitinMfixup_spills6M_v_; -text: .text%__1cHCompileGOutput6M_v_; -text: .text%__1cHCompileQShorten_branches6MpnFLabel_ri333_v_; -text: .text%__1cHCompileLFill_buffer6M_v_; -text: .text%__1cHCompileTFillExceptionTables6MIpI1pnFLabel__v_; -text: .text%__1cHCompileRScheduleAndBundle6M_v_; -text: .text%__1cUPSAdaptiveSizePolicybPeden_increment_with_supplement_aligned_up6MI_I_; -text: .text%__1cUPSAdaptiveSizePolicyOeden_increment6MII_I_; -text: .text%__1cOMachPrologNodeFreloc6kM_i_; -text: .text%__1cWImplicitExceptionTableIset_size6MI_v_; -text: .text%__1cIPSOldGenMmax_gen_size6M_I_: psOldGen.o; -text: .text%__1cUPSAdaptiveSizePolicybHclear_generation_free_space_flags6M_v_; -text: .text%__1cRmethodDataOopDescPpost_initialize6MpnOBytecodeStream__v_; -text: .text%__1cNmulL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbDVM_ParallelGCFailedAllocationEdoit6M_v_; -text: .text%__1cKoopFactoryOnew_methodData6FnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cPmethodDataKlassIallocate6MnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cHRetNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateO_sub_Op_Return6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_ConL6MpknENode__v_; -text: .text%__1cSmembar_acquireNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cHRetNodeFreloc6kM_i_; -text: .text%__1cIConFNodeGOpcode6kM_i_; -text: .text%__1cJCodeCacheNalive_nmethod6FpnICodeBlob__pnHnmethod__; -text: .text%__1cQLibraryIntrinsicIgenerate6MpnIJVMState__2_; -text: .text%__1cOcompP_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_CmpL6MpknENode__v_; -text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; -text: .text%__1cLConvL2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; -text: .text%__1cSmembar_releaseNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNandL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNdecI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJLoadDNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopOplace_near_use6kMpnENode__2_; -text: .text%__1cSInterpreterRuntimeOprofile_method6FpnKJavaThread_pC_i_; -text: .text%__1cJloadLNodeFreloc6kM_i_; -text: .text%__1cRxorI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRaddI_eReg_memNodeFreloc6kM_i_; -text: .text%__1cNsubL_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulLNodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cIMulLNodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cXmembar_acquire_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRxorI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateR_sub_Op_SafePoint6MpknENode__v_; -text: .text%__1cMciMethodDataStrap_recompiled_at6MpnLProfileData__i_; -text: .text%__1cSsafePoint_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSsafePoint_pollNodeFreloc6kM_i_; -text: .text%__1cNandI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHi2sNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateL_sub_Op_OrI6MpknENode__v_; -text: .text%JVM_GetClassNameUTF; -text: .text%__1cKStoreDNodeGOpcode6kM_i_; -text: .text%__1cIXorINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cFframeMpd_gc_epilog6M_v_; -text: .text%__1cRframe_gc_epilogue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_epilogue6M_v_; -text: .text%__1cRframe_gc_prologue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_prologue6M_v_; -text: .text%__1cHTypePtrEmake6FnETypeFTYPES_n0ADPTR_i_pk0_; -text: .text%__1cIAddLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_FindLoadedClass; -text: .text%__1cIMulFNodeGOpcode6kM_i_; -text: .text%__1cCosJyield_all6Fi_v_; -text: .text%__1cNstoreImmINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRaddI_eReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvI2DNodeGOpcode6kM_i_; -text: .text%__1cTcompareAndSwapLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSloadL_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUjmpLoopEnd_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEfrom6F_pnMRegisterImpl__; -text: .text%__1cTDerivedPointerTableDadd6FppnHoopDesc_3_v_; -text: .text%__1cPadd_derived_oop6FppnHoopDesc_2_v_: oopMap.o; -text: .text%__1cKstoreCNodeFreloc6kM_i_; -text: .text%__1cJOopMapSetMgrow_om_data6M_v_; -text: .text%__1cScompP_mem_eRegNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_; -text: .text%__1cKReflectionDbox6FpnGjvalue_nJBasicType_pnGThread__pnHoopDesc__; -text: .text%__1cJAssemblerDret6Mi_v_; -text: .text%__1cJAssemblerEcall6MrnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cLBoxLockNode2t6Mi_v_; -text: .text%__1cIGraphKitMnext_monitor6M_i_; -text: .text%__1cTshrL_eReg_32_63NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOptoRuntimebBcomplete_monitor_enter_Type6F_pknITypeFunc__; -text: .text%__1cIMaxINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFStateQ_sub_Op_FastLock6MpknENode__v_; -text: .text%__1cIGraphKitLshared_lock6MpnENode__pnMFastLockNode__; -text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; -text: .text%__1cEUTF8Ounicode_length6Fpkc_i_; -text: .text%__1cPCallRuntimeNodeGOpcode6kM_i_; -text: .text%__1cFParseFBlockMadd_new_path6M_i_; -text: .text%JVM_FindClassFromClass; -text: .text%__1cIMulINodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cPshlI_eReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; -text: .text%JVM_NewInstanceFromConstructor; -text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_; -text: .text%__1cLConvI2LNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cMtlsLoadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYmulI_imm_RShift_highNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseFBlockNstack_type_at6kMi_pknEType__; -text: .text%__1cFStateN_sub_Op_LoadB6MpknENode__v_; -text: .text%__1cIMulLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNloadConL0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; -text: .text%__1cLLShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMorI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYcmpL_zero_flags_EQdDNENodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLMachUEPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIAddLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRsarI_eReg_immNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIJVMStateNmonitor_depth6kM_i_: graphKit.o; -text: .text%__1cWCallLeafNoFPDirectNodeKmethod_set6Mi_v_; -text: .text%__1cIregFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%lwp_mutex_init: os_solaris.o; -text: .text%__1cFParseLarray_store6MnJBasicType__v_; -text: .text%__1cLRShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cPsarI_eReg_1NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFParseMdo_checkcast6M_v_; -text: .text%__1cMloadConDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOPhaseIdealLoopVclone_up_backedge_goo6MpnENode_22_2_; -text: .text%__1cJStubQdDueueHrequest6Mi_pnEStub__; -text: .text%__1cJStubQdDueueGcommit6Mi_v_; -text: .text%__1cPfieldDescriptorUstring_initial_value6kMpnGThread__pnHoopDesc__; -text: .text%jni_NewString: jni.o; -text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_i_v_; -text: .text%__1cXmembar_acquire_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMMergeMemNodeIadr_type6kM_pknHTypePtr__: memnode.o; -text: .text%__1cIModINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cScompP_mem_eRegNodeFreloc6kM_i_; -text: .text%__1cNtestU_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateP_sub_Op_ConvI2L6MpknENode__v_; -text: .text%__1cJScopeDescGsender6kM_p0_; -text: .text%__1cOcompiledVFrameGsender6kM_pnGvframe__; -text: .text%__1cQciTypeArrayKlassEmake6FnJBasicType__p0_; -text: .text%__1cLPhaseValuesKis_IterGVN6M_pnMPhaseIterGVN__: phaseX.o; -text: .text%__1cQciTypeArrayKlassJmake_impl6FnJBasicType__p0_; -text: .text%__1cJloadBNodeFreloc6kM_i_; -text: .text%__1cKJavaThreadJframes_do6MpFpnFframe_pknLRegisterMap__v_v_; -text: .text%__1cKEntryPoint2t6MpC11111111_v_; -text: .text%__1cQjava_lang_ThreadRget_thread_status6FpnHoopDesc__n0AMThreadStatus__; -text: .text%__1cRmulI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTtypeArrayKlassKlassIoop_size6kMpnHoopDesc__i_: typeArrayKlassKlass.o; -text: .text%__1cPstoreImmI16NodeFreloc6kM_i_; -text: .text%__1cFStateP_sub_Op_ConvL2I6MpknENode__v_; -text: .text%__1cIXorINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cYcmpL_zero_flags_LEGTNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNcmovI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVloadConL_low_onlyNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmembar_acquireNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCompileBrokerNallocate_task6F_pnLCompileTask__; -text: .text%__1cMCompileQdDueueDadd6MpnLCompileTask__v_; -text: .text%jni_GetObjectClass: jni.o; -text: .text%__1cMCompileQdDueueDget6M_pnLCompileTask__; -text: .text%__1cSmembar_acquireNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLBoxLockNodeDcmp6kMrknENode__I_; -text: .text%__1cXmembar_acquire_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cSCompileTaskWrapper2t6MpnLCompileTask__v_; -text: .text%__1cCosPhint_no_preempt6F_v_; -text: .text%__1cFStateM_sub_Op_MulL6MpknENode__v_; -text: .text%__1cLCompileTaskEfree6M_v_; -text: .text%__1cSCompileTaskWrapper2T6M_v_; -text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; -text: .text%__1cNCompileBrokerJfree_task6FpnLCompileTask__v_; -text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_; -text: .text%__1cNCompileBrokerVpush_jni_handle_block6F_v_; -text: .text%__1cFciEnvWget_method_from_handle6MpnI_jobject__pnIciMethod__; -text: .text%__1cFciEnv2T6M_v_; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cNCompileBrokerUpop_jni_handle_block6F_v_; -text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_II_v_: arrayKlass.o; -text: .text%__1cNaddP_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; -text: .text%__1cRxorI_eReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcompP_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cOMacroAssemblerFalign6Mi_v_; -text: .text%__1cOstackSlotPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLloadSSFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMinINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cNandI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cITemplateIgenerate6MpnZInterpreterMacroAssembler__v_; -text: .text%__1cITemplateKinitialize6MinITosState_1pFi_vi_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; -text: .text%JVM_FindClassFromClassLoader; -text: .text%JVM_FindClassFromBootLoader; -text: .text%__1cPshrI_eReg_1NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNnegI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOPhaseTransform2t6MpnFArena_nFPhaseLPhaseNumber__v_; -text: .text%__1cHCompileKinit_start6MpnJStartNode__v_; -text: .text%__1cLPhaseValues2t6MpnFArena_I_v_; -text: .text%__1cINodeHash2t6MpnFArena_I_v_; -text: .text%__1cINodeHashIround_up6FI_I_; -text: .text%__1cKScopeValueJread_from6FpnTDebugInfoReadStream__p0_; -text: .text%JVM_IHashCode; -text: .text%lwp_cond_init: os_solaris.o; -text: .text%__1cOcompiledVFrameScreate_stack_value6kMpnKScopeValue__pnKStackValue__; -text: .text%__1cKstoreBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorCto6F_pnMRegisterImpl__; -text: .text%__1cPconvI2L_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLStrCompNodeKmatch_edge6kMI_I_; -text: .text%__1cZInterpreterMacroAssemblerEpush6MnITosState__v_; -text: .text%__1cNmaxI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_AddL6MpknENode__v_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_i_v_; -text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cENodeEgetd6kM_d_; -text: .text%__1cFStateM_sub_Op_AndL6MpknENode__v_; -text: .text%__1cKConv2BNodeGOpcode6kM_i_; -text: .text%JVM_GetClassLoader; -text: .text%__1cOjmpLoopEndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateW_sub_Op_CountedLoopEnd6MpknENode__v_; -text: .text%__1cKBinaryNodeGOpcode6kM_i_; -text: .text%__1cNSCMemProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFStateO_sub_Op_Binary6MpknENode__v_; -text: .text%__1cNSignatureInfoIdo_float6M_v_: bytecode.o; -text: .text%__1cZInterpreterMacroAssemblerZcheck_and_handle_popframe6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableKtransition6FnITosState_1_v_; -text: .text%__1cKNativeJumpbEcheck_verified_entry_alignment6FpC1_v_; -text: .text%__1cFStateU_sub_Op_CallLeafNoFP6MpknENode__v_; -text: .text%__1cWCallLeafNoFPDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNLocationValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cILocation2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_2_v_; -text: .text%__1cFParseRarray_store_check6M_v_; -text: .text%__1cNCompileBrokerRassign_compile_id6FnMmethodHandle_i_I_; -text: .text%__1cNsubL_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_prolog6MnITosState_i_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_epilog6MnITosState_i_v_; -text: .text%__1cJAssemblerLemit_farith6Miii_v_; -text: .text%__1cJStartNodeJideal_reg6kM_I_: callnode.o; -text: .text%__1cKC2CompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; -text: .text%__1cNSignatureInfoIdo_short6M_v_: bytecode.o; -text: .text%__1cOCompiledRFrameKtop_method6kM_nMmethodHandle__: rframe.o; -text: .text%__1cNminI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOCompiledRFrame2t6MnFframe_pnKJavaThread_kpnGRFrame__v_; -text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_; -text: .text%__1cMelapsedTimerDadd6M0_v_; -text: .text%__1cSmembar_releaseNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFciEnvbOcheck_for_system_dictionary_modification6MpnIciMethod__v_; -text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTimer_pnLCompileTask__v_; -text: .text%__1cLConvI2FNodeGOpcode6kM_i_; -text: .text%__1cQComputeCallStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cICodeHeapMinsert_after6MpnJFreeBlock_2_v_; -text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; -text: .text%__1cVExceptionHandlerTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cHnmethod2n6FIi_pv_; -text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; -text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cQorI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHCompileUremove_useless_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cIciMethodRbuild_method_data6MnMmethodHandle__v_; -text: .text%__1cHCompileWprint_compile_messages6M_v_; -text: .text%__1cQUnique_Node_ListUremove_useless_nodes6MrnJVectorSet__v_; -text: .text%__1cHCompileVidentify_useful_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cINodeHashUremove_useless_nodes6MrnJVectorSet__v_; -text: .text%__1cSPhaseRemoveUseless2t6MpnIPhaseGVN_pnQUnique_Node_List__v_; -text: .text%__1cIciMethodRbuild_method_data6M_v_; -text: .text%__1cHCompileLInline_Warm6M_i_; -text: .text%__1cMPhaseIterGVN2t6MpnIPhaseGVN__v_; -text: .text%__1cKloadUBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIPhaseCCP2t6MpnMPhaseIterGVN__v_; -text: .text%__1cHCompileRbuild_start_state6MpnJStartNode_pknITypeFunc__pnIJVMState__; -text: .text%__1cIPhaseCCPHanalyze6M_v_; -text: .text%__1cIPhaseCCPMdo_transform6M_v_; -text: .text%__1cHCompileNreturn_values6MpnIJVMState__v_; -text: .text%__1cKInlineTreeWbuild_inline_tree_root6F_p0_; -text: .text%__1cIPhaseCCPJtransform6MpnENode__2_; -text: .text%__1cHCompileLFinish_Warm6M_v_; -text: .text%__1cMPhaseIterGVN2t6Mp0_v_; -text: .text%__1cJStartNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cHCompileIOptimize6M_v_; -text: .text%__1cQComputeCallStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cOMachEpilogNodeQsafepoint_offset6kM_i_; -text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; -text: .text%__1cQComputeCallStackJdo_double6M_v_: generateOopMap.o; -text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cJAssemblerEincl6MpnMRegisterImpl__v_; -text: .text%__1cIDivINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKTypeRawPtrFxdual6kM_pknEType__; -text: .text%__1cMTailCallNodeGOpcode6kM_i_; -text: .text%__1cXcmpL_reg_flags_EQdDNENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cISubLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNobjArrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_; -text: .text%__1cSInterpreterRuntimeTprepare_native_call6FpnKJavaThread_pnNmethodOopDesc__v_; -text: .text%__1cXSignatureHandlerLibraryKinitialize6F_v_; -text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_; -text: .text%__1cIAddFNodeGOpcode6kM_i_; -text: .text%__1cJAssemblerFffree6Mi_v_; -text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__; -text: .text%__1cOGenerateOopMapIppop_any6Mi_v_; -text: .text%__1cXroundDouble_mem_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKPerfMemoryMmark_updated6F_v_; -text: .text%__1cKPerfMemoryFalloc6FI_pc_; -text: .text%__1cIPerfDataMcreate_entry6MnJBasicType_II_v_; -text: .text%__1cIPerfData2T6M_v_; -text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_; -text: .text%__1cSobjArrayKlassKlassXallocate_objArray_klass6MinLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cFStateM_sub_Op_XorI6MpknENode__v_; -text: .text%__1cCosLelapsedTime6F_d_; -text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__; -text: .text%jni_GetStringUTFChars: jni.o; -text: .text%jni_ReleaseStringUTFChars; -text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; -text: .text%__1cXcmpL_reg_flags_LEGTNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOClearArrayNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_IsInterrupted; -text: .text%__1cSmembar_releaseNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeNquicken_io_cc6FpnKJavaThread__v_; -text: .text%__1cNSignatureInfoHdo_char6M_v_: bytecode.o; -text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_; -text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_; -text: .text%__1cNdivL_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_FindLibraryEntry; -text: .text%__1cPCountedLoopNodeGstride6kM_pnENode__: loopTransform.o; -text: .text%__1cWConstantPoolCacheEntrySset_interface_call6MnMmethodHandle_i_v_; -text: .text%__1cLklassItableUcompute_itable_index6FpnNmethodOopDesc__i_; -text: .text%__1cLLShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_; -text: .text%__1cFParsebLincrement_and_test_invocation_counter6Mi_v_; -text: .text%__1cQsalI_eReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSshrL_eReg_1_31NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJleaP8NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParsePmerge_exception6Mi_v_; -text: .text%__1cFStateS_sub_Op_ClearArray6MpknENode__v_; -text: .text%__1cMrep_stosNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcompI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFTypeFEmake6Ff_pk0_; -text: .text%__1cKstoreLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; -text: .text%__1cIDivINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLStrCompNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_: jni.o; -text: .text%__1cNtestP_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectMset_override6FpnHoopDesc_C_v_; -text: .text%__1cIDivLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOPhaseIdealLoopOadd_constraint6MiipnENode_22p23_v_; -text: .text%__1cJCMoveNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%jni_SetByteArrayRegion: jni.o; -text: .text%__1cUjmpLoopEnd_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cJloadFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKarrayKlassKjava_super6kM_pnMklassOopDesc__; -text: .text%__1cUjmpLoopEnd_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHi2bNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateO_sub_Op_StoreL6MpknENode__v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cFParseLdo_newarray6MnJBasicType__v_; -text: .text%__1cSsafePoint_pollNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreLNodeFreloc6kM_i_; -text: .text%__1cPRoundDoubleNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cCosTnative_java_library6F_pv_; -text: .text%__1cIModLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cScompP_eReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; -text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_; -text: .text%__1cRmulI_eReg_immNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; -text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_; -text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__: ciObjArrayKlass.o; -text: .text%__1cPDictionaryEntryVadd_protection_domain6MpnHoopDesc__v_; -text: .text%__1cRxorI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__; -text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_; -text: .text%__1cJMarkSweepMfollow_stack6F_v_; -text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cLregDPR1OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; -text: .text%__1cJAssemblerSemit_arith_operand6MipnMRegisterImpl_nHAddress_i_v_; -text: .text%__1cISubLNodeDsub6kMpknEType_3_3_; -text: .text%__1cMNativeLookupNpure_jni_name6FnMmethodHandle__pc_; -text: .text%JVM_GetMethodIxExceptionTableEntry; -text: .text%__1cMciArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cJLoadINodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cScompU_eReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJAssemblerGfstp_d6MnHAddress__v_; -text: .text%__1cQleaPIdxScaleNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPfieldDescriptorSlong_initial_value6kM_x_; -text: .text%__1cRsubI_eReg_memNodeFreloc6kM_i_; -text: .text%__1cKstoreBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJLoadPNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cNcmovI_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cZCallDynamicJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLMachUEPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_; -text: .text%__1cNstoreImmINodeFreloc6kM_i_; -text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cRsarI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWCallLeafNoFPDirectNodeFreloc6kM_i_; -text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlass.o; -text: .text%jni_GetStringCritical: jni.o; -text: .text%jni_ReleaseStringCritical: jni.o; -text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cPsarI_eReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvF2D_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; -text: .text%__1cHCompileSrethrow_exceptions6MpnIJVMState__v_; -text: .text%__1cLRethrowNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cURethrowExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateP_sub_Op_Rethrow6MpknENode__v_; -text: .text%__1cOstackSlotIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLRethrowNode2t6MpnENode_22222_v_; -text: .text%__1cFTypeDFxmeet6kMpknEType__3_; -text: .text%__1cHOrINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cZget_mirror_from_signature6FnMmethodHandle_pnPSignatureStream_pnGThread__pnHoopDesc__; -text: .text%__1cURethrowExceptionNodeFreloc6kM_i_; -text: .text%__1cKJavaThreadbScheck_safepoint_and_suspend_for_native_trans6Fp0_v_; -text: .text%__1cLRShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJAssemblerEshll6MpnMRegisterImpl_i_v_; -text: .text%__1cKJavaThreadLgc_prologue6M_v_; -text: .text%__1cRaddL_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOMacroAssemblerKverify_oop6MpnMRegisterImpl_pkc_v_; -text: .text%__1cFParseTprofile_switch_case6Mi_v_; -text: .text%__1cKJavaThreadLgc_epilogue6M_v_; -text: .text%__1cFParseOmerge_new_path6Mi_v_; -text: .text%__1cFParseSjump_switch_ranges6MpnENode_pnLSwitchRange_4i_v_; -text: .text%jni_NewByteArray: jni.o; -text: .text%__1cMstoreSSINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; -text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__; -text: .text%__1cKReflectionTget_exception_types6FnMmethodHandle_pnGThread__nOobjArrayHandle__; -text: .text%__1cOstackSlotDOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cHnmethodbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cOleaPIdxOffNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRaddL_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFframeZinterpreter_frame_set_mdx6Mi_v_; -text: .text%__1cPstoreImmI16NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOcmpD_cc_P6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRandI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNObjectMonitorHRecycle6M_v_; -text: .text%__1cFBlockNset_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; -text: .text%__1cJloadSNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEmove6Mii_v_; -text: .text%__1cENode2t6Mp0111111_v_; -text: .text%__1cFStateP_sub_Op_RShiftL6MpknENode__v_; -text: .text%__1cIAddDNodeGOpcode6kM_i_; -text: .text%__1cNmodL_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cFParseQjump_if_fork_int6MpnENode_2nIBoolTestEmask__pnGIfNode__; -text: .text%__1cOcompP_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: arrayKlass.o; -text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: arrayKlass.o; -text: .text%__1cKstorePNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRxorI_eReg_memNodeFreloc6kM_i_; -text: .text%__1cHTypeAryFxdual6kM_pknEType__; -text: .text%__1cOMethodLivenessKBasicBlockFsplit6Mi_p1_; -text: .text%__1cLloadSSFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVLoaderConstraintTableWfind_constrained_klass6MnMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cNaddL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSshlL_eReg_1_31NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetCallerClass; -text: .text%__1cNSignatureInfoHdo_byte6M_v_: bytecode.o; -text: .text%__1cIMaxINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cOGenerateOopMapXdo_return_monitor_check6M_v_; -text: .text%__1cQsalL_eReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPshrI_eReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_GetFieldID: jni.o; -text: .text%jni_IsAssignableFrom: jni.o; -text: .text%__1cNnegI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseWcheck_interpreter_type6MpnENode_pknEType_rpnNSafePointNode__2_; -text: .text%__1cJAssemblerEaddl6MnHAddress_i_v_; -text: .text%__1cTsarL_eReg_32_63NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerGfstp_s6MnHAddress__v_; -text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cKCMovePNodeGOpcode6kM_i_; -text: .text%__1cNmodI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJloadDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSCMemProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateX_sub_Op_CompareAndSwapL6MpknENode__v_; -text: .text%__1cSloadL_volatileNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNtestU_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSloadL_volatileNodeFreloc6kM_i_; -text: .text%__1cISubLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cOPhaseIdealLoopUpeeled_dom_test_elim6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cJAssemblerDhlt6M_v_; -text: .text%__1cYcmpL_zero_flags_LEGTNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYcmpL_zero_flags_EQdDNENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerEstop6Mpkc_v_; -text: .text%__1cPClassFileParserbJparse_classfile_signature_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cQshrI_eReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFframeZinterpreter_frame_set_mdp6MpC_v_; -text: .text%__1cIDivLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%jni_SetBooleanField: jni.o; -text: .text%__1cTconvD2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateT_sub_Op_ThreadLocal6MpknENode__v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF_vc_v_; -text: .text%__1cIciObject2t6MpnHciKlass__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorDbox6Mii_v_; -text: .text%__1cPRoundDoubleNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKloadUBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMURShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cPRoundDoubleNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIGraphKitPdstore_rounding6MpnENode__2_; -text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cGciType2t6MpnHciKlass__v_; -text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; -text: .text%__1cIciMethodRinterpreter_entry6M_pC_; -text: .text%__1cUciInstanceKlassKlassEmake6F_p0_; -text: .text%__1cLLShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIciSymbolHbyte_at6Mi_i_; -text: .text%__1cZCallDynamicJavaDirectNodePcompute_padding6kMi_i_; -text: .text%__1cZCallDynamicJavaDirectNodeKmethod_set6Mi_v_; -text: .text%__1cIModINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSTailCalljmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXMachCallDynamicJavaNodePret_addr_offset6M_i_; -text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; -text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cOmulIS_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcinMsymbolHandle_4nGHandle_6_v_; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; -text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; -text: .text%__1cRandI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPciInstanceKlassNloader_handle6M_pnI_jobject__; -text: .text%__1cJChunkPoolMfree_all_but6MI_v_: allocation.o; -text: .text%__1cNxorI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%JVM_MonitorWait; -text: .text%__1cSObjectSynchronizerEwait6FnGHandle_xpnGThread__v_; -text: .text%__1cZInterpreterMacroAssemblerYtest_method_data_pointer6MpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cENodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTAbstractInterpreterSBasicType_as_index6FnJBasicType__i_; -text: .text%__1cIMulDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPjava_lang_ClassQprimitive_mirror6FnJBasicType__pnHoopDesc__; -text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_; -text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_: markSweep.o; -text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_: icBuffer.o; -text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_: icBuffer.o; -text: .text%__1cSleaP_eReg_immINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateQ_sub_Op_URShiftL6MpknENode__v_; -text: .text%__1cIModLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_i_v_; -text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_; -text: .text%__1cJloadLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJAssemblerEnegl6MpnMRegisterImpl__v_; -text: .text%__1cNloadConL0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_; -text: .text%__1cFParseHdo_irem6M_v_; -text: .text%__1cQmulD_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRtestI_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNtestI_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUParallelScavengeHeapIcapacity6kM_I_; -text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; -text: .text%__1cQset_lwp_priority6Fiii_i_; -text: .text%__1cNmaxI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongVariable__; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cICmpFNodeGOpcode6kM_i_; -text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; -text: .text%__1cSstring_compareNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIAddLNodeIadd_ring6kMpknEType_3_3_; -text: .text%jni_NewStringUTF: jni.o; -text: .text%__1cQorI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVloadConL_low_onlyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPshlI_eReg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_SetClassSigners; -text: .text%JVM_DefineClassWithSource; -text: .text%__1cIMulINodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIMulINodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cNsubL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVCallRuntimeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cODeoptimizationVtrap_state_has_reason6Fii_i_; -text: .text%__1cJloadBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRmulI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; -text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; -text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FIi_pnGThread__; -text: .text%__1cCosbBthread_local_storage_at_put6Fipv_v_; -text: .text%__1cLConvF2INodeGOpcode6kM_i_; -text: .text%get_thread; -text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_; -text: .text%jni_CallIntMethod: jni.o; -text: .text%__1cRsubI_eReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cTshrL_eReg_32_63NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopOdo_range_check6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cKstoreFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUPSMarkSweepDecoratorPadjust_pointers6M_v_; -text: .text%__1cUPSMarkSweepDecoratorVdestination_decorator6F_p0_; -text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_; -text: .text%__1cUPSMarkSweepDecoratorKprecompact6M_v_; -text: .text%__1cICmpDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIDivDNodeGOpcode6kM_i_; -text: .text%__1cHCompileQgrow_alias_types6M_v_; -text: .text%JVM_GetClassCPTypes; -text: .text%JVM_GetClassMethodsCount; -text: .text%JVM_GetClassCPEntriesCount; -text: .text%JVM_GetClassFieldsCount; -text: .text%__1cKstoreBNodeFreloc6kM_i_; -text: .text%__1cPconvI2F_SSFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_; -text: .text%__1cMdecI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerKverify_FPU6Mipkc_v_; -text: .text%__1cJLoadFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMloadConDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKstoreBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIgenerate6MX_v_; -text: .text%__1cXSignatureHandlerLibraryLset_handler6FpnKCodeBuffer__pC_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_; -text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; -text: .text%__1cFJNIidEfind6Mi_p0_; -text: .text%__1cJCmpD3NodeGOpcode6kM_i_; -text: .text%__1cbFunnecessary_membar_volatileNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%JVM_IsPrimitiveClass; -text: .text%__1cIMinINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNSharedRuntimeDd2l6Fd_x_; -text: .text%__1cRsubL_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPciObjArrayKlassJmake_impl6FpnHciKlass__p0_; -text: .text%jni_FindClass: jni.o; -text: .text%__1cbDjava_lang_reflect_ConstructorPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cFStateM_sub_Op_RegD6MpknENode__v_; -text: .text%__1cbDjava_lang_reflect_ConstructorZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cKCompiledICMset_to_clean6M_v_; -text: .text%__1cTcmovII_reg_LEGTNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_2_v_; -text: .text%__1cJloadFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDesc__; -text: .text%__1cbDjava_lang_reflect_ConstructorGcreate6FpnGThread__nGHandle__; -text: .text%__1cFParseSjump_if_false_fork6MpnGIfNode_ii_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cIDivLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKstoreFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRxorI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_2_v_; -text: .text%__1cNcmovI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRandL_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMloadConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateM_sub_Op_MinI6MpknENode__v_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cFMutex2T6M_v_; -text: .text%lwp_mutex_destroy: os_solaris.o; -text: .text%__1cHMonitor2T6M_v_; -text: .text%__1cIMinINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cIAddFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%lwp_cond_destroy: os_solaris.o; -text: .text%__1cLConvD2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMstoreSSPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cISubLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cINodeHashEgrow6M_v_; -text: .text%__1cQjava_lang_ThreadLthreadGroup6FpnHoopDesc__2_; -text: .text%__1cIMulINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvI2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJCMoveNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_; -text: .text%__1cFTypeFFxmeet6kMpknEType__3_; -text: .text%__1cLloadSSDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXroundDouble_mem_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; -text: .text%__1cNaddP_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; -text: .text%__1cPciObjectFactoryPinsert_non_perm6Mrpn0ANNonPermObject_pnHoopDesc_pnIciObject__v_; -text: .text%__1cKloadUBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cISubDNodeGOpcode6kM_i_; -text: .text%__1cNObjectMonitor2t6M_v_; -text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; -text: .text%__1cOcmpD_cc_P6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvD2FNodeGOpcode6kM_i_; -text: .text%__1cTmembar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_MonitorNotify; -text: .text%__1cFParseNdo_instanceof6M_v_; -text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl_i_v_; -text: .text%__1cIGraphKitOgen_instanceof6MpnENode_2_2_; -text: .text%__1cYjava_lang_reflect_MethodPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodPset_return_type6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v_; -text: .text%__1cZCallDynamicJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFStateN_sub_Op_LoadF6MpknENode__v_; -text: .text%__1cWPredictedCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__; -text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_slot6FpnHoopDesc_i_v_; -text: .text%jni_GetMethodID: jni.o; -text: .text%__1cOGenerateOopMapKpp_new_ref6MpnNCellTypeState_i_v_; -text: .text%__1cFParseTjump_if_always_fork6Mii_v_; -text: .text%__1cFStateW_sub_Op_MemBarVolatile6MpknENode__v_; -text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; -text: .text%__1cHRegMask2t6M_v_: matcher.o; -text: .text%__1cJLoadSNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cPconvI2D_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_GetClassDeclaredConstructors; -text: .text%__1cINegDNodeGOpcode6kM_i_; -text: .text%__1cNCallGeneratorRfor_uncommon_trap6FpnIciMethod_nODeoptimizationLDeoptReason_n0CLDeoptAction__p0_; -text: .text%__1cNmodI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateP_sub_Op_LShiftL6MpknENode__v_; -text: .text%__1cLConvI2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: callGenerator.o; -text: .text%__1cZUncommonTrapCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cFStateM_sub_Op_ModI6MpknENode__v_; -text: .text%__1cMVirtualSpaceQuncommitted_size6kM_I_; -text: .text%__1cJAssemblerFfld_d6MnHAddress__v_; -text: .text%__1cJloadFNodeFreloc6kM_i_; -text: .text%__1cMincI_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cVCallRuntimeDirectNodeKmethod_set6Mi_v_; -text: .text%__1cOGenerateOopMapKinit_state6M_v_; -text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_; -text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_; -text: .text%__1cNinstanceKlassSregister_finalizer6FpnPinstanceOopDesc_pnGThread__2_; -text: .text%__1cOGenerateOopMapRinit_basic_blocks6M_v_; -text: .text%__1cOGenerateOopMapYsetup_method_entry_state6M_v_; -text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; -text: .text%__1cOGenerateOopMapbAmake_context_uninitialized6M_v_; -text: .text%__1cQsalI_eReg_CLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNdivI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapKinterp_all6M_v_; -text: .text%__1cNandI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMmulD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_SystemSin_offset_in_bytes6F_i_; -text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cQjava_lang_SystemTout_offset_in_bytes6F_i_; -text: .text%__1cNmulI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; -text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; -text: .text%__1cNdivL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMaxINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; -text: .text%__1cRsubL_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; -text: .text%__1cQshrL_eReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapbImark_bbheaders_and_count_gc_points6M_v_; -text: .text%__1cOGenerateOopMapNinitialize_bb6M_v_; -text: .text%__1cNcmovP_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQorI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMdecI_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_; -text: .text%__1cIMulDNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cOmulF24_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; -text: .text%__1cOjmpLoopEndNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cOjmpLoopEndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_; -text: .text%__1cFStateX_sub_Op_CallDynamicJava6MpknENode__v_; -text: .text%JVM_IsThreadAlive; -text: .text%__1cZCallDynamicJavaDirectNodeFreloc6kM_i_; -text: .text%__1cTcmovII_reg_LTGENodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEdecl6MpnMRegisterImpl__v_; -text: .text%__1cVLoaderConstraintTableYextend_loader_constraint6MpnVLoaderConstraintEntry_nGHandle_pnMklassOopDesc__v_; -text: .text%__1cUVirtualCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cVcompiledICHolderKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cVLoaderConstraintTablebHensure_loader_constraint_capacity6MpnVLoaderConstraintEntry_i_v_; -text: .text%__1cQOopMapCacheEntryFflush6M_v_; -text: .text%__1cQOopMapCacheEntryEfill6MnMmethodHandle_i_v_; -text: .text%__1cQOopMapCacheEntryTdeallocate_bit_mask6M_v_; -text: .text%__1cQOopMapCacheEntryRallocate_bit_mask6M_v_; -text: .text%__1cICodeHeapTmark_segmap_as_free6MII_v_; -text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cNsubI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTcmovII_reg_LEGTNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cJAssemblerFfld_s6MnHAddress__v_; -text: .text%__1cNxorI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJMemRegionMintersection6kMk0_0_; -text: .text%__1cMincI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__; -text: .text%__1cFStateM_sub_Op_ConD6MpknENode__v_; -text: .text%__1cNmodL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNaddI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cCosHSolarisKvm_signals6F_pnIsigset_t__; -text: .text%__1cODataRelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cODataRelocationJset_value6MpC_v_: relocInfo.o; -text: .text%__1cPICStubInterfaceEsize6kMpnEStub__i_: icBuffer.o; -text: .text%__1cFStateO_sub_Op_CMoveI6MpknENode__v_; -text: .text%__1cPICStubInterfaceIfinalize6MpnEStub__v_: icBuffer.o; -text: .text%__1cTOopMapForCacheEntry2t6MnMmethodHandle_ipnQOopMapCacheEntry__v_; -text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_; -text: .text%__1cGICStubIfinalize6M_v_; -text: .text%__1cCosScurrent_stack_base6F_pC_; -text: .text%__1cOGenerateOopMapVresult_for_basicblock6Mi_v_; -text: .text%__1cGThread2t6M_v_; -text: .text%__1cCosScurrent_stack_size6F_I_; -text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; -text: .text%__1cJAssemblerExorl6MpnMRegisterImpl_2_v_; -text: .text%__1cCosHSolarisRunblocked_signals6F_pnIsigset_t__; -text: .text%__1cJStubQdDueueMremove_first6M_v_; -text: .text%__1cGThreadbArecord_stack_base_and_size6M_v_; -text: .text%__1cLMoveL2DNodeGOpcode6kM_i_; -text: .text%__1cIOSThreadNpd_initialize6M_v_; -text: .text%__1cQOopMapCacheEntryIset_mask6MpnNCellTypeState_2i_v_; -text: .text%__1cCosScurrent_process_id6F_i_; -text: .text%__1cIOSThread2t6MpFpv_i1_v_; -text: .text%__1cKRelocationRpd_set_data_value6MpCi_v_; -text: .text%__1cKConv2BNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cGThreadbFinitialize_thread_local_storage6M_v_; -text: .text%__1cCosRinitialize_thread6F_v_; -text: .text%__1cTOopMapForCacheEntryLcompute_map6MpnGThread__v_; -text: .text%__1cCosMstart_thread6FpnGThread__v_; -text: .text%__1cFStateM_sub_Op_SubL6MpknENode__v_; -text: .text%JVM_SetThreadPriority; -text: .text%__1cNobjArrayKlassKinitialize6MpnGThread__v_; -text: .text%jni_NewObjectArray: jni.o; -text: .text%__1cKCompiledICKcached_oop6kM_pnHoopDesc__; -text: .text%__1cFStateM_sub_Op_MulI6MpknENode__v_; -text: .text%__1cCosPpd_start_thread6FpnGThread__v_; -text: .text%__1cPRoundDoubleNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cKReflectionInew_type6FnMsymbolHandle_nLKlassHandle_pnGThread__nGHandle__; -text: .text%__1cDhpiEread6FipvI_I_: jvm.o; -text: .text%__1cXjava_lang_reflect_FieldPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cMstoreSSINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cXjava_lang_reflect_FieldJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cSmembar_releaseNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cXjava_lang_reflect_FieldGcreate6FpnGThread__nGHandle__; -text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cXjava_lang_reflect_FieldIset_name6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_type6FpnHoopDesc_2_v_; -text: .text%__1cRtestI_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopKdo_peeling6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%JVM_GetStackAccessControlContext; -text: .text%JVM_Read; -text: .text%__1cOJavaAssertionsNmatch_package6Fpkc_pn0AKOptionList__; -text: .text%__1cHciKlassOsuper_of_depth6MI_p0_; -text: .text%JVM_DesiredAssertionStatus; -text: .text%__1cWThreadLocalAllocBufferKinitialize6M_v_; -text: .text%__1cRaddL_eReg_memNodeFreloc6kM_i_; -text: .text%jni_GetStaticFieldID: jni.o; -text: .text%__1cOJavaAssertionsLmatch_class6Fpkc_pn0AKOptionList__: javaAssertions.o; -text: .text%__1cNinstanceKlassKjni_id_for6Mi_pnFJNIid__; -text: .text%__1cENodeEgetf6kM_f_; -text: .text%__1cLConvL2FNodeGOpcode6kM_i_; -text: .text%__1cKJavaThreadKinitialize6M_v_; -text: .text%__1cLConvL2DNodeGOpcode6kM_i_; -text: .text%__1cLConvF2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQThreadStatistics2t6M_v_; -text: .text%__1cIAddDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cLConvF2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cUThreadSafepointStateGcreate6FpnKJavaThread__v_; -text: .text%__1cUThreadSafepointState2t6MpnKJavaThread__v_; -text: .text%__1cIGraphKitSprecision_rounding6MpnENode__2_; -text: .text%__1cKJavaThreadYcreate_stack_guard_pages6M_v_; -text: .text%__1cOaddF24_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKJavaThread2t6MpFp0pnGThread__vI_v_; -text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; -text: .text%jni_GetFloatArrayRegion: jni.o; -text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%__1cKJavaThreadRthread_main_inner6M_v_; -text: .text%__1cKReflectionbFbasic_type_mirror_to_basic_type6FpnHoopDesc_pnGThread__nJBasicType__; -text: .text%__1cJAssemblerFcmovl6Mn0AJCondition_pnMRegisterImpl_3_v_; -text: .text%__1cSleaP_eReg_immINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopJclone_iff6MpnHPhiNode_pnNIdealLoopTree__pnIBoolNode__; -text: .text%__1cGThreadFstart6Fp0_v_; -text: .text%__1cNSharedRuntimeEdsin6Fd_d_; -text: .text%__1cNSharedRuntimeEdcos6Fd_d_; -text: .text%jni_CallStaticVoidMethod: jni.o; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnPPerfLongCounter__; -text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; -text: .text%__1cNdecI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTconvF2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEsbbl6MnHAddress_i_v_; -text: .text%__1cFKlassNexternal_name6kM_pkc_; -text: .text%__1cLConvD2INodeJideal_reg6kM_I_: classes.o; -text: .text%JVM_IsArrayClass; -text: .text%__1cHTypePtrFxdual6kM_pknEType__; -text: .text%__1cSMachBreakpointNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQshrI_eReg_CLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%JVM_GetClassName; -text: .text%__1cSsarL_eReg_1_31NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cCosMset_priority6FpnGThread_nOThreadPriority__nIOSReturn__; -text: .text%__1cFJNIid2t6MpnMklassOopDesc_ip0_v_; -text: .text%__1cSstring_compareNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateM_sub_Op_RegF6MpknENode__v_; -text: .text%__1cIMulFNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cNinstanceKlassPjni_id_for_impl6FnTinstanceKlassHandle_i_pnFJNIid__; -text: .text%__1cKRelocationYpd_get_address_from_code6M_pC_; -text: .text%__1cbFunnecessary_membar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNtestU_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cbFunnecessary_membar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGThreadMset_priority6Fp0nOThreadPriority__v_; -text: .text%__1cJArrayDataKcell_count6M_i_: ciMethodData.o; -text: .text%JVM_Open; -text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; -text: .text%__1cQjava_lang_ThreadJstackSize6FpnHoopDesc__x_; -text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; -text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; -text: .text%JVM_StartThread; -text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; -text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; -text: .text%__1cGICStubLdestination6kM_pC_; -text: .text%__1cLConvD2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_; -text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; -text: .text%jni_GetStaticObjectField: jni.o; -text: .text%__1cQmulI_mem_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cScompI_eReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cXPartialSubtypeCheckNodeGOpcode6kM_i_; -text: .text%__1cQmulD_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapMdo_checkcast6M_v_; -text: .text%__1cQmulI_mem_immNodeOmemory_operand6kM_pknIMachOper__; -text: .text%JVM_TotalMemory; -text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__: generateOptoStub.o; -text: .text%JVM_FreeMemory; -text: .text%__1cIMaxINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cTshlL_eReg_32_63NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPconvI2F_SSFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJScopeDescTdecode_scope_values6Mi_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cUThreadSafepointStateHdestroy6FpnKJavaThread__v_; -text: .text%__1cKJavaThread2T6M_v_; -text: .text%__1cKJavaThreadYremove_stack_guard_pages6M_v_; -text: .text%__1cIOSThreadKpd_destroy6M_v_; -text: .text%__1cIOSThread2T6M_v_; -text: .text%__1cCosLfree_thread6FpnIOSThread__v_; -text: .text%__1cQorI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRmulI_imm_highNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsGremove6FpnKJavaThread__v_; -text: .text%__1cKloadUBNodeFreloc6kM_i_; -text: .text%__1cLensure_join6FpnKJavaThread__v_: thread.o; -text: .text%__1cGThread2T5B6M_v_; -text: .text%__1cNThreadServiceWcurrent_thread_exiting6FpnKJavaThread__v_; -text: .text%__1cFStateT_sub_Op_RoundDouble6MpknENode__v_; -text: .text%__1cQjava_lang_ThreadNset_stillborn6FpnHoopDesc__v_; -text: .text%__1cIGraphKitTdprecision_rounding6MpnENode__2_; -text: .text%__1cHOrLNodeGOpcode6kM_i_; -text: .text%__1cWconstantPoolCacheKlassOklass_oop_size6kM_i_: cpCacheKlass.o; -text: .text%__1cRconstantPoolKlassOklass_oop_size6kM_i_: constantPoolKlass.o; -text: .text%__1cSobjArrayKlassKlassOklass_oop_size6kM_i_: objArrayKlassKlass.o; -text: .text%__1cLmethodKlassOklass_oop_size6kM_i_: methodKlass.o; -text: .text%__1cPmethodDataKlassOklass_oop_size6kM_i_: methodDataKlass.o; -text: .text%__1cTcmovII_reg_EQdDNENodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTtypeArrayKlassKlassOklass_oop_size6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cSTailCalljmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_: arrayKlassKlass.o; -text: .text%__1cSinstanceKlassKlassOklass_oop_size6kM_i_: instanceKlassKlass.o; -text: .text%__1cQconstMethodKlassOklass_oop_size6kM_i_: constMethodKlass.o; -text: .text%__1cLsymbolKlassOklass_oop_size6kM_i_: symbolKlass.o; -text: .text%__1cKstoreLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cFStateQ_sub_Op_TailCall6MpknENode__v_; -text: .text%__1cVcompiledICHolderKlassOklass_oop_size6kM_i_: compiledICHolderKlass.o; -text: .text%__1cSTailCalljmpIndNodeFreloc6kM_i_; -text: .text%__1cQChunkPoolCleanerEtask6M_v_: allocation.o; -text: .text%__1cFStateO_sub_Op_StoreF6MpknENode__v_; -text: .text%__1cQaddD_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTsarL_eReg_32_63NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_CallObjectMethod: jni.o; -text: .text%__1cNaddP_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLOptoRuntimeMrethrow_Type6F_pknITypeFunc__; -text: .text%__1cMstoreSSPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRandI_eReg_memNodeFreloc6kM_i_; -text: .text%__1cRCardTableModRefBSPclear_MemRegion6MnJMemRegion__v_; -text: .text%__1cRInlineCacheBufferLnew_ic_stub6F_pnGICStub__; -text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_; -text: .text%__1cGICStubIset_stub6MpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_; -text: .text%__1cQorI_eReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHi2bNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; -text: .text%__1cLOptoRuntimeYcurrent_time_millis_Type6F_pknITypeFunc__; -text: .text%__1cIPSOldGenHcompact6M_v_; -text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; -text: .text%__1cIPSOldGenPadjust_pointers6M_v_; -text: .text%__1cNmulI_eRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cQObjectStartArrayFreset6M_v_; -text: .text%__1cFParseVcatch_call_exceptions6MrnYciExceptionHandlerStream__v_; -text: .text%__1cMsubD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_MonitorNotifyAll; -text: .text%__1cLConvI2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKConv2BNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSvframeArrayElementDbci6kM_i_; -text: .text%__1cIDivDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMloadConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKarrayKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cNminI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMnegD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKarrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cFStateM_sub_Op_MaxI6MpknENode__v_; -text: .text%__1cXJNI_ArgumentPusherVaArgJget_float6M_v_: jni.o; -text: .text%__1cTcmovII_reg_LTGENodeQuse_cisc_RegMask6M_v_; -text: .text%__1cSPerfStringConstant2t6MnJCounterNS_pkc3_v_; -text: .text%__1cIMulDNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; -text: .text%__1cOMacroAssemblerFleave6M_v_; -text: .text%JVM_GetInheritedAccessControlContext; -text: .text%JVM_NativePath; -text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_; -text: .text%__1cVLoaderConstraintTableJnew_entry6MIpnNsymbolOopDesc_pnMklassOopDesc_ii_pnVLoaderConstraintEntry__; -text: .text%__1cFStateT_sub_Op_CallRuntime6MpknENode__v_; -text: .text%__1cCosXnon_memory_address_word6F_pc_; -text: .text%__1cQsalI_eReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVCallRuntimeDirectNodeFreloc6kM_i_; -text: .text%__1cISubFNodeGOpcode6kM_i_; -text: .text%__1cNandI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVCallRuntimeDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOmulF24_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cRandL_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOaddF24_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cNcmovP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKCompiledICOset_cached_oop6MpnHoopDesc__v_; -text: .text%__1cCosHSolarisKmmap_chunk6FpcIii_2_; -text: .text%__1cKstoreFNodeFreloc6kM_i_; -text: .text%jni_GetStaticMethodID: jni.o; -text: .text%__1cZInterpreterMacroAssemblerWupdate_mdp_by_constant6MpnMRegisterImpl_i_v_; -text: .text%__1cKCompiledICMstub_address6kM_pC_; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_i_v_; -text: .text%__1cKstoreFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSaddD_reg_roundNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cISubDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKReflectionTunbox_for_primitive6FpnHoopDesc_pnGjvalue_pnGThread__nJBasicType__; -text: .text%__1cMloadConDNodeFreloc6kM_i_; -text: .text%__1cPMultiBranchDataScompute_cell_count6FpnOBytecodeStream__i_; -text: .text%__1cJloadDNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cMdecI_memNodeFreloc6kM_i_; -text: .text%__1cFTypeDFxdual6kM_pknEType__; -text: .text%__1cXjava_lang_boxing_objectJget_value6FpnHoopDesc_pnGjvalue__nJBasicType__; -text: .text%__1cWCallLeafNoFPDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMdecI_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmulF24_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cODeoptimizationVtrap_state_add_reason6Fii_i_; -text: .text%__1cJLoadBNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF3_v3_v_; -text: .text%__1cYcmpL_zero_flags_LTGENodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLRuntimeStub2n6FII_pv_; -text: .text%__1cLloadSSDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvI2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQsalL_eReg_CLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNSafePointNodeQpeek_monitor_obj6kM_pnENode__; -text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cPoldgetTimeNanos6F_x_: os_solaris.o; -text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cIDivLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJOperation__v4_v_; -text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; -text: .text%__1cJAssemblerEsarl6MpnMRegisterImpl_i_v_; -text: .text%__1cIModLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cFParsePdo_monitor_exit6M_v_; -text: .text%__1cFStateN_sub_Op_LoadD6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_MulD6MpknENode__v_; -text: .text%__1cPPerfDataManagerUcreate_long_constant6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongConstant__; -text: .text%JVM_Close; -text: .text%__1cLConvD2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNSafePointNodeQpeek_monitor_box6kM_pnENode__; -text: .text%__1cIMulDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOmulIS_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_i_v_; -text: .text%__1cIMulFNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cQComputeCallStackIdo_float6M_v_: generateOopMap.o; -text: .text%__1cQComputeCallStackHdo_byte6M_v_: generateOopMap.o; -text: .text%__1cFParseMdo_anewarray6M_v_; -text: .text%__1cJLoadDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_; -text: .text%__1cMsubD_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cTcmovII_reg_EQdDNENodeQuse_cisc_RegMask6M_v_; -text: .text%__1cFStateM_sub_Op_CmpD6MpknENode__v_; -text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_; -text: .text%__1cJAssemblerEmovb6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_only6MnITosState__v_; -text: .text%jni_NewObjectV: jni.o; -text: .text%__1cSCallLeafDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRcmpFastUnlockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLOopMapCache2t6M_v_; -text: .text%__1cGICStubKcached_oop6kM_pnHoopDesc__; -text: .text%__1cJSubFPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRInlineCacheBufferUic_buffer_cached_oop6FpC_pnHoopDesc__; -text: .text%__1cTmembar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_; -text: .text%jni_EnsureLocalCapacity; -text: .text%__1cTcmovII_reg_LEGTNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPfieldDescriptorUdouble_initial_value6kM_d_; -text: .text%__1cKEntryPoint2t6M_v_; -text: .text%__1cKstoreINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cXcmpL_reg_flags_LTGENodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSMachBreakpointNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKemit_break6FrnKCodeBuffer__v_; -text: .text%__1cQshrI_eReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIciMethodVget_osr_flow_analysis6Mi_pnKciTypeFlow__; -text: .text%__1cLResourceObj2n6FIn0APallocation_type__pv_; -text: .text%__1cIAddFNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cINegDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJAssemblerEsbbl6MpnMRegisterImpl_i_v_; -text: .text%__1cMStartOSRNodeKosr_domain6F_pknJTypeTuple__; -text: .text%__1cNCallGeneratorHfor_osr6FpnIciMethod_i_p0_; -text: .text%__1cINegFNodeGOpcode6kM_i_; -text: .text%__1cQorl_eReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_; -text: .text%__1cHciKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cVMoveL2D_reg_stackNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateO_sub_Op_StoreD6MpknENode__v_; -text: .text%__1cPmovI_nocopyNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsYis_supported_jni_version6Fi_C_; -text: .text%__1cFStateM_sub_Op_ConF6MpknENode__v_; -text: .text%__1cKConv2BNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJLoadLNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cKarrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cIci2bNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOmulF24_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcompiledVFrameHraw_bci6kM_i_; -text: .text%__1cFTypeFFxdual6kM_pknEType__; -text: .text%__1cODeoptimizationbJupdate_method_data_from_interpreter6FnQmethodDataHandle_ii_v_; -text: .text%__1cOcompiledVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cSvframeArrayElementHfill_in6MpnOcompiledVFrame__v_; -text: .text%__1cRComputeEntryStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cTcmovII_reg_LTGENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQorI_eReg_memNodeFreloc6kM_i_; -text: .text%__1cFframebHinterpreter_frame_set_monitor_end6MpnPBasicObjectLock__v_; -text: .text%__1cOstoreF_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvF2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cFframebBinterpreter_frame_sender_sp6kM_pi_; -text: .text%__1cJScopeDescImonitors6M_pnNGrowableArray4CpnMMonitorValue____; -text: .text%__1cJScopeDescLexpressions6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cJScopeDescGlocals6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cJScopeDescVdecode_monitor_values6Mi_pnNGrowableArray4CpnMMonitorValue____; -text: .text%__1cOcompiledVFrameGlocals6kM_pnUStackValueCollection__; -text: .text%__1cOcompiledVFrameLexpressions6kM_pnUStackValueCollection__; -text: .text%__1cTconvD2I_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFframebCinterpreter_frame_set_locals6Mpi_v_; -text: .text%__1cFframebCinterpreter_frame_set_method6MpnNmethodOopDesc__v_; -text: .text%__1cSInterpreterRuntimeJnote_trap6FpnKJavaThread_ipnGThread__v_; -text: .text%__1cICmpFNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRmulI_imm_highNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcompiledVFrameImonitors6kM_pnNGrowableArray4CpnLMonitorInfo____; -text: .text%__1cRsubL_eReg_memNodeFreloc6kM_i_; -text: .text%__1cMTailJumpNodeKmatch_edge6kMI_I_; -text: .text%__1cFStateP_sub_Op_ConvF2D6MpknENode__v_; -text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_; -text: .text%__1cFStateM_sub_Op_DivL6MpknENode__v_; -text: .text%__1cNTemplateTableLindex_check6FpnMRegisterImpl_2_v_; -text: .text%__1cSCompiledStaticCallMset_to_clean6M_v_; -text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; -text: .text%Unsafe_DefineClass1; -text: .text%JVM_GetComponentType; -text: .text%JVM_DefineClass; -text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; -text: .text%__1cNmodI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLStrCompNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJAssemblerGfrstor6MnHAddress__v_; -text: .text%JVM_GetCPFieldModifiers; -text: .text%__1cJBasicLockHmove_to6MpnHoopDesc_p0_v_; -text: .text%__1cSObjectSynchronizerOinflate_helper6FpnHoopDesc__pnNObjectMonitor__: synchronizer.o; -text: .text%__1cSdivD_reg_roundNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvI2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNSharedRuntimebJcontinuation_for_implicit_exception6FpnKJavaThread_pCn0AVImplicitExceptionKind__3_; -text: .text%__1cKReflectionUarray_component_type6FpnHoopDesc_pnGThread__2_; -text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; -text: .text%__1cKPSYoungGenKprecompact6M_v_; -text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; -text: .text%__1cKPSYoungGenPadjust_pointers6M_v_; -text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; -text: .text%__1cLPSMarkSweepRmark_sweep_phase26F_v_; -text: .text%__1cKPSYoungGenHcompact6M_v_; -text: .text%Unsafe_AllocateInstance; -text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; -text: .text%__1cLPSMarkSweepRmark_sweep_phase36F_v_; -text: .text%__1cRInlineCacheBufferSic_destination_for6FpnKCompiledIC__pC_; -text: .text%__1cLPSMarkSweepRmark_sweep_phase46F_v_; -text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; -text: .text%__1cLPSMarkSweepbAreset_millis_since_last_gc6F_v_; -text: .text%__1cUPSAdaptiveSizePolicyUmajor_collection_end6MInHGCCauseFCause__v_; -text: .text%__1cJCodeCacheLgc_epilogue6F_v_; -text: .text%__1cJMarkSweepNrestore_marks6F_v_; -text: .text%__1cYinternal_word_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cJCodeCacheLgc_prologue6F_v_; -text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__: jni.o; -text: .text%__1cLPSMarkSweepPallocate_stacks6F_v_; -text: .text%jni_NewDirectByteBuffer; -text: .text%__1cMdivD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLPSMarkSweepRdeallocate_stacks6F_v_; -text: .text%__1cRInlineCacheBufferOinit_next_stub6F_v_; -text: .text%__1cKReflectionNinvoke_method6FpnHoopDesc_nGHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cMincI_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUPSAdaptiveSizePolicyWmajor_collection_begin6M_v_; -text: .text%__1cJMarkSweepMadjust_marks6F_v_; -text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_; -text: .text%jni_AllocObject: jni.o; -text: .text%__1cPcmpFastLockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQSystemDictionaryYalways_strong_classes_do6FpnKOopClosure__v_; -text: .text%__1cVLoaderConstraintTableYpurge_loader_constraints6MpnRBoolObjectClosure__v_; -text: .text%__1cVLoaderConstraintTableYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cUPSMarkSweepDecoratorbIset_destination_decorator_perm_gen6F_v_; -text: .text%__1cUPSMarkSweepDecoratorbHset_destination_decorator_tenured6F_v_; -text: .text%JVM_InvokeMethod; -text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_; -text: .text%__1cFKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cIPSOldGenKprecompact6M_v_; -text: .text%__1cHThreadsLgc_epilogue6F_v_; -text: .text%__1cHThreadsLgc_prologue6F_v_; -text: .text%__1cJPSPermGenQcompute_new_size6MI_v_; -text: .text%__1cZInterpreterMacroAssemblerYprofile_not_taken_branch6MpnMRegisterImpl__v_; -text: .text%__1cHi2bNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQSystemDictionaryPplaceholders_do6FpnKOopClosure__v_; -text: .text%__1cFStateM_sub_Op_ModL6MpknENode__v_; -text: .text%__1cJPSPermGenKprecompact6M_v_; -text: .text%__1cTleaPIdxScaleOffNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJCondition__v4_v_; -text: .text%__1cMincI_memNodeFreloc6kM_i_; -text: .text%__1cOaddF24_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNcmovI_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJStubQdDueueMremove_first6Mi_v_; -text: .text%__1cSsarL_eReg_1_31NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_NewArray; -text: .text%__1cLConvF2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOcmpF_cc_P6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__; -text: .text%__1cFStateM_sub_Op_MulF6MpknENode__v_; -text: .text%__1cTconvF2I_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTshlL_eReg_32_63NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableHconvert6F_v_; -text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; -text: .text%__1cSmulF24_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIMulFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cFStateP_sub_Op_ConvD2I6MpknENode__v_; -text: .text%__1cLMoveF2INodeGOpcode6kM_i_; -text: .text%__1cPconvI2D_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJStubQdDueueKremove_all6M_v_; -text: .text%__1cOcmovI_regUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cScompP_eReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; -text: .text%__1cJArgumentsQPropertyList_add6FppnOSystemProperty_2_v_; -text: .text%__1cSaddF24_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKoopFactoryUnew_compiledICHolder6FnMmethodHandle_nLKlassHandle_pnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cMciArrayKlassRbase_element_type6M_pnGciType__; -text: .text%__1cSInterpreterRuntimeQcreate_exception6FpnKJavaThread_pc3_v_; -text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%__1cVcompiledICHolderKlassIallocate6MpnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cLTypeInstPtrOxmeet_unloaded6kMpk0_2_; -text: .text%JVM_GC; -text: .text%__1cVVM_ParallelGCSystemGCEdoit6M_v_; -text: .text%__1cXpartialSubtypeCheckNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLClassLoaderSget_system_package6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cQinitialize_class6FnMsymbolHandle_pnGThread__v_: thread.o; -text: .text%__1cRfind_field_offset6FpnI_jobject_ipnGThread__i_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; -text: .text%__1cUParallelScavengeHeapHcollect6MnHGCCauseFCause__v_; -text: .text%JVM_GetSystemPackage; -text: .text%__1cLStatSamplerTget_system_property6FpkcpnGThread__2_; -text: .text%__1cPconvL2D_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXPartialSubtypeCheckNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPMultiBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%JVM_RawMonitorCreate; -text: .text%__1cQConstantIntValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_22pC_v_; -text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cISubFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFStateP_sub_Op_StrComp6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_ConvI2F6MpknENode__v_; -text: .text%__1cOMacroAssemblerPempty_FPU_stack6M_v_; -text: .text%jni_GetStringRegion: jni.o; -text: .text%__1cSmulF24_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQaddD_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIAddFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cHOrLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cScompP_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvL2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cLConvL2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cTcmovII_reg_EQdDNENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceRefKlass.o; -text: .text%__1cLvframeArrayPunpack_to_stack6MrnFframe_i_v_; -text: .text%__1cLvframeArrayZdeallocate_monitor_chunks6M_v_; -text: .text%__1cOstoreF_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNcmovI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cImulINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%Unsafe_CompareAndSwapInt; -text: .text%__1cZInterpreterMacroAssemblerPset_mdp_data_at6MpnMRegisterImpl_i2_v_; -text: .text%__1cQsalL_eReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMsubD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYcmpL_zero_flags_LTGENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableRlocals_index_wide6FpnMRegisterImpl__v_; -text: .text%__1cSmulF24_reg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cCosHSolarisVcleanup_interruptible6FpnKJavaThread__v_; -text: .text%__1cCosHSolarisTsetup_interruptible6F_pnKJavaThread__; -text: .text%__1cQmulI_mem_immNodeFreloc6kM_i_; -text: .text%__1cJloadFNodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_Sleep; -text: .text%JVM_Lseek; -text: .text%__1cNnmethodLocker2t6MpC_v_; -text: .text%__1cHnmethodVmark_as_seen_on_stack6M_v_; -text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; -text: .text%__1cQmulD_reg_immNodeFreloc6kM_i_; -text: .text%__1cODeoptimizationRlast_frame_adjust6Fii_i_; -text: .text%__1cFParseQdo_monitor_enter6M_v_; -text: .text%__1cCosHSolarisTsetup_interruptible6FpnKJavaThread__v_; -text: .text%__1cLConvF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cODeoptimizationNuncommon_trap6FpnKJavaThread_i_pn0ALUnrollBlock__; -text: .text%__1cODeoptimizationTuncommon_trap_inner6FpnKJavaThread_i_v_; -text: .text%__1cODeoptimizationRgather_statistics6Fn0ALDeoptReason_n0ALDeoptAction_nJBytecodesECode__v_; -text: .text%__1cODeoptimizationNunpack_frames6FpnKJavaThread_i_nJBasicType__; -text: .text%__1cODeoptimizationYfetch_unroll_info_helper6FpnKJavaThread__pn0ALUnrollBlock__; -text: .text%__1cOMacroAssemblerFenter6M_v_; -text: .text%Unsafe_GetNativeByte; -text: .text%__1cOMacroAssemblerNpop_FPU_state6M_v_; -text: .text%__1cPconvL2F_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKCMoveLNodeGOpcode6kM_i_; -text: .text%JVM_NanoTime; -text: .text%__1cIXorINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cFParseOdo_tableswitch6M_v_; -text: .text%__1cCosNjavaTimeNanos6F_x_; -text: .text%__1cETypeEmake6Fn0AFTYPES__pk0_; -text: .text%__1cJAssemblerFpushl6MnHAddress__v_; -text: .text%jni_GetEnv; -text: .text%__1cKstoreCNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cGICStubFclear6M_v_; -text: .text%__1cODeoptimizationLUnrollBlock2T6M_v_; -text: .text%__1cGciType2t6MnJBasicType__v_; -text: .text%__1cKstoreDNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRComputeEntryStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cMloadConFNodeFreloc6kM_i_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCi_v_; -text: .text%__1cHTypePtrKadd_offset6kMi_pk0_; -text: .text%__1cFStateP_sub_Op_ConvI2D6MpknENode__v_; -text: .text%__1cJAssemblerEmovw6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cQshrL_eReg_CLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFStateM_sub_Op_AddF6MpknENode__v_; -text: .text%jint_cmp: parse2.o; -text: .text%__1cJAssemblerExorl6MpnMRegisterImpl_i_v_; -text: .text%jni_CallVoidMethod: jni.o; -text: .text%__1cOsubF24_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOstoreF_immNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; -text: .text%__1cRStubCodeGeneratorLstub_prolog6MpnMStubCodeDesc__v_; -text: .text%__1cMnegF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%Unsafe_GetNativeFloat; -text: .text%__1cKstoreDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRaddI_eReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWroundFloat_mem_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cLMoveL2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNstoreImmPNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cMStubCodeMark2T6M_v_; -text: .text%__1cRSignatureIteratorHiterate6M_v_; -text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; -text: .text%__1cFStateO_sub_Op_CMoveP6MpknENode__v_; -text: .text%__1cPmovI_nocopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJAssemblerFfwait6M_v_; -text: .text%__1cJAssemblerKrepne_scan6M_v_; -text: .text%__1cNRegisterSaverWrestore_live_registers6FpnOMacroAssembler__v_; -text: .text%__1cNcmovL_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cImulINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJname2type6Fpkc_nJBasicType__; -text: .text%__1cOcmpF_cc_P6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLvframeArrayRregister_location6kMi_pC_; -text: .text%JVM_FindPrimitiveClass; -text: .text%__1cRaddI_mem_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSaddF24_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cIDivINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSstoreD_roundedNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMdivD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMmulD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJCmpF3NodeGOpcode6kM_i_; -text: .text%__1cIAddDNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cJAssemblerFtestb6MpnMRegisterImpl_i_v_; -text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; -text: .text%Unsafe_StaticFieldBaseFromField; -text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_; -text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_; -text: .text%Unsafe_StaticFieldOffset; -text: .text%Unsafe_GetObjectVolatile; -text: .text%__1cHnmethodFflush6M_v_; -text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; -text: .text%__1cICodeBlobFflush6M_v_; -text: .text%__1cJAssemblerMemit_arith_b6MiipnMRegisterImpl_i_v_; -text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cNaddP_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMachOperNbase_position6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerGf2ieee6M_v_; -text: .text%Unsafe_EnsureClassInitialized; -text: .text%__1cIciSymbolHas_utf86M_pkc_; -text: .text%__1cOtypeArrayKlassNexternal_name6FnJBasicType__pkc_; -text: .text%JVM_GetClassContext; -text: .text%__1cPPerfDataManagerWcreate_string_variable6FnJCounterNS_pkci3pnGThread__pnSPerfStringVariable__; -text: .text%__1cOtypeArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlass.o; -text: .text%__1cIciMethodMnative_entry6M_pC_; -text: .text%__1cNdivI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJAssemblerHfincstp6M_v_; -text: .text%__1cETypeFxdual6kM_pk0_; -text: .text%__1cOMacroAssemblerEfpop6M_v_; -text: .text%__1cLOptoRuntimeTmultianewarray_Type6Fi_pknITypeFunc__; -text: .text%__1cOGenerateOopMapGdo_jsr6Mi_v_; -text: .text%__1cZInterpreterMacroAssemblerbGget_unsigned_2_byte_index_at_bcp6MpnMRegisterImpl_i_v_; -text: .text%__1cIAddDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOMacroAssemblerOpush_FPU_state6M_v_; -text: .text%__1cZInterpreterMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cZInterpreterMacroAssemblerGd2ieee6M_v_; -text: .text%jni_RegisterNatives: jni.o; -text: .text%__1cSmulF24_reg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSaddF24_reg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%JVM_GetClassDeclaredFields; -text: .text%JVM_IsSameClassPackage; -text: .text%__1cCosMuser_handler6F_pv_; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cOcmovI_regUNodeQuse_cisc_RegMask6M_v_; -text: .text%jni_SetStaticObjectField: jni.o; -text: .text%__1cNTemplateTableGiconst6Fi_v_; -text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cFStateM_sub_Op_AddD6MpknENode__v_; -text: .text%__1cLConvD2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cRComputeEntryStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cCosEstat6FpkcpnEstat__i_; -text: .text%__1cOPhaseIdealLoopTdo_maximally_unroll6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkci_pc_; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_2_v_; -text: .text%__1cNMemoryManagerIadd_pool6MpnKMemoryPool__v_; -text: .text%__1cJAssemblerGfnsave6MnHAddress__v_; -text: .text%__1cMdecI_memNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKMemoryPoolLadd_manager6MpnNMemoryManager__v_; -text: .text%__1cJloadDNodeFreloc6kM_i_; -text: .text%__1cSObjectSynchronizerIjni_exit6FpnHoopDesc_pnGThread__v_; -text: .text%__1cSObjectSynchronizerJjni_enter6FnGHandle_pnGThread__v_; -text: .text%__1cSaddF24_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cISubDNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cQorl_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_MonitorExit: jni.o; -text: .text%__1cNTemplateTableHif_0cmp6Fn0AJCondition__v_; -text: .text%jni_MonitorEnter: jni.o; -text: .text%__1cSaddD_reg_roundNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvL2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNTemplateTableHif_icmp6Fn0AJCondition__v_; -text: .text%__1cPcheckCastPPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFframebFset_interpreter_frame_sender_sp6Mpi_v_; -text: .text%__1cRmulI_eReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovI_regUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cULinearLeastSquareFit2t6MI_v_; -text: .text%__1cNTemplateTableH_return6FnITosState__v_; -text: .text%__1cOMacroAssemblerEfcmp6MpnMRegisterImpl__v_; -text: .text%__1cMTailJumpNodeGOpcode6kM_i_; -text: .text%__1cOsubF24_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWroundFloat_mem_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle_pnIciSymbol__v_; -text: .text%jni_GetJavaVM; -text: .text%__1cLConvL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJOopMapSetQsingular_oop_map6M_pnGOopMap__; -text: .text%__1cLConvF2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cCosZvm_allocation_granularity6F_i_; -text: .text%JVM_LoadLibrary; -text: .text%JVM_IsSupportedJNIVersion; -text: .text%__1cOstoreF_immNodeFreloc6kM_i_; -text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_pnUPerfLongSampleHelper__v_; -text: .text%__1cJAssemblerGfild_d6MnHAddress__v_; -text: .text%Unsafe_ObjectFieldOffset; -text: .text%__1cRaddL_eReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerEincl6MnHAddress__v_; -text: .text%__1cXpartialSubtypeCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVMoveL2D_reg_stackNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRaddI_mem_eRegNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOMacroAssemblerQload_signed_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cPconvL2D_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKciTypeFlowLStateVectorOdo_null_assert6MpnHciKlass__v_; -text: .text%__1cPconvL2F_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIci2bNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJMemRegion2t6M_v_: cardTableModRefBS.o; -text: .text%__1cQmulD_reg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJAssemblerHfucomip6Mi_v_; -text: .text%__1cFciEnvbNArrayIndexOutOfBoundsException_instance6M_pnKciInstance__; -text: .text%__1cRsalI_eReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%jni_SetObjectField: jni.o; -text: .text%Unsafe_AllocateMemory; -text: .text%__1cNSharedRuntimeVhandle_ic_miss_helper6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cTconvI2F_SSF_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cISubDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvI2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvF2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRaddD_reg_imm1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_; -text: .text%jni_Throw: jni.o; -text: .text%__1cNSpaceCounters2t6MpkciIpnMMutableSpace_pnSGenerationCounters__v_; -text: .text%__1cSaddF24_reg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableFaload6Fi_v_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_int_field06FnJBasicType__pC_; -text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_; -text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; -text: .text%__1cPmovP_nocopyNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableEdop26Fn0AJOperation__v_; -text: .text%__1cIcp2bNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHnmethodbJcontinuation_for_implicit_exception6MpC_1_; -text: .text%__1cWImplicitExceptionTable2t6MpknHnmethod__v_; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__; -text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_; -text: .text%__1cLVtableStubsPstub_containing6FpC_pnKVtableStub__; -text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; -text: .text%__1cFStateP_sub_Op_ConvF2I6MpknENode__v_; -text: .text%__1cQshrL_eReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNCellTypeStateImake_any6Fi_0_: generateOopMap.o; -text: .text%__1cJAssemblerEmovb6MnHAddress_i_v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_; -text: .text%__1cWImplicitExceptionTableCat6kMI_I_; -text: .text%__1cJAssemblerFfinit6M_v_; -text: .text%__1cFParseRjump_if_true_fork6MpnGIfNode_ii_v_; -text: .text%__1cKVtableStubRpd_code_alignment6F_i_; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerSstore_check_part_26MpnMRegisterImpl__v_; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2t6M_v_; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_; -text: .text%__1cNReservedSpace2t6MI_v_; -text: .text%__1cVMoveF2I_reg_stackNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cINegFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSmulF24_reg_immNodeFreloc6kM_i_; -text: .text%__1cLloadSSINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMacroAssemblerSstore_check_part_16MpnMRegisterImpl__v_; -text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_; -text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; -text: .text%JVM_GetLastErrorString; -text: .text%__1cIDivDNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cZInterpreterMacroAssemblerTnotify_method_entry6M_v_; -text: .text%__1cFStateM_sub_Op_DivD6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_DivI6MpknENode__v_; -text: .text%__1cRComputeEntryStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cNTemplateTableGdstore6Fi_v_; -text: .text%__1cNTemplateTableFdload6Fi_v_; -text: .text%__1cLConvD2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNTemplateTableGlstore6Fi_v_; -text: .text%__1cNTemplateTableGfstore6Fi_v_; -text: .text%__1cNTemplateTableGastore6Fi_v_; -text: .text%__1cKConv2BNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNGCTaskManagerGthread6MI_pnMGCTaskThread__; -text: .text%__1cFStateM_sub_Op_SubD6MpknENode__v_; -text: .text%__1cSmulF24_reg_memNodeFreloc6kM_i_; -text: .text%__1cScompP_eReg_memNodeFreloc6kM_i_; -text: .text%__1cLMoveL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFStateM_sub_Op_NegD6MpknENode__v_; -text: .text%__1cJlog2_long6Fx_i_: divnode.o; -text: .text%__1cQaddD_reg_immNodeFreloc6kM_i_; -text: .text%__1cIRetTableHadd_jsr6Mii_v_; -text: .text%__1cNTemplateTableFfload6Fi_v_; -text: .text%__1cNTemplateTableFlload6Fi_v_; -text: .text%__1cNcmovI_memNodeFreloc6kM_i_; -text: .text%__1cNTemplateTableFiload6Fi_v_; -text: .text%__1cOGenerateOopMapTret_jump_targets_do6MpnOBytecodeStream_pFp0ipi_vi4_v_; -text: .text%__1cNdivI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cImulINodeFreloc6kM_i_; -text: .text%__1cNmulI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFStateO_sub_Op_Conv2B6MpknENode__v_; -text: .text%__1cIRetTableUfind_jsrs_for_target6Mi_pnNRetTableEntry__; -text: .text%__1cNTemplateTableGistore6Fi_v_; -text: .text%__1cLClassLoaderLadd_to_list6FpnOClassPathEntry__v_; -text: .text%__1cOLibraryCallKitXgenerate_current_thread6MrpnENode__2_; -text: .text%__1cSmembar_acquireNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMstoreSSINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerEcmpb6MnHAddress_i_v_; -text: .text%__1cINegDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJAssemblerEdecl6MnHAddress__v_; -text: .text%__1cCosGsignal6Fipv_1_; -text: .text%jni_CallStaticObjectMethod: jni.o; -text: .text%__1cMNativeLookupNlong_jni_name6FnMmethodHandle__pc_; -text: .text%__1cHRetNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcompP_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMPerfDataList2T6M_v_; -text: .text%__1cOClassPathEntry2t6M_v_; -text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; -text: .text%Unsafe_SetMemory; -text: .text%__1cFciEnvOrecord_failure6Mpkc_v_; -text: .text%__1cJAssemblerEfld16M_v_; -text: .text%__1cJAssemblerFfld_x6MnHAddress__v_; -text: .text%__1cLConvD2FNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJAssemblerHfistp_d6MnHAddress__v_; -text: .text%__1cKstoreFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJAssemblerFimull6MpnMRegisterImpl_2_v_; -text: .text%__1cRInvocationCounterDdef6Fn0AFState_ipFnMmethodHandle_pnGThread__pC_v_; -text: .text%__1cFciEnvXget_or_create_exception6MrpnI_jobject_nMsymbolHandle__pnKciInstance__; -text: .text%__1cMPerfDataList2t6Mi_v_; -text: .text%__1cLloadSSINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRaddI_mem_eRegNodeFreloc6kM_i_; -text: .text%__1cUInterpreterGeneratorTgenerate_math_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cMLinkResolverbBlookup_method_in_interfaces6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cCosFyield6F_v_; -text: .text%__1cRComputeEntryStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cSCardTableExtensionVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cSCardTableExtensionbEresize_covered_region_by_start6MnJMemRegion__v_; -text: .text%__1cJArgumentsObuild_jvm_args6Fpkc_v_; -text: .text%__1cJAssemblerFfmulp6Mi_v_; -text: .text%__1cNcmovL_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_22_v_; -text: .text%__1cRaddI_mem_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_FindSignal; -text: .text%__1cKVtableStub2n6FIi_pv_; -text: .text%__1cSInterpreterRuntimebKthrow_ArrayIndexOutOfBoundsException6FpnKJavaThread_pci_v_; -text: .text%__1cOGenerateOopMapRdo_multianewarray6Mii_v_; -text: .text%JVM_RegisterSignal; -text: .text%__1cFParsePdo_lookupswitch6M_v_; -text: .text%__1cSaddF24_reg_memNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; -text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_2_v_; -text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; -text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%__1cJAssemblerEcdql6M_v_; -text: .text%__1cUInterpreterGeneratorbDgenerate_stack_overflow_check6M_v_; -text: .text%__1cRCardTableModRefBSbCfind_covering_region_by_base6MpnIHeapWord__i_; -text: .text%__1cRCardTableModRefBSbAlargest_prev_committed_end6kMi_pnIHeapWord__; -text: .text%__1cMSysClassPathNreset_item_at6Mi_v_: arguments.o; -text: .text%__1cFStateM_sub_Op_CmpF6MpknENode__v_; -text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cFParseRdo_multianewarray6M_v_; -text: .text%__1cJAssemblerGfmul_d6MnHAddress__v_; -text: .text%__1cZInterpreterMacroAssemblerLlock_object6MpnMRegisterImpl__v_; -text: .text%__1cLMoveF2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pIi_v_: oopMapCache.o; -text: .text%__1cNTemplateTableLwide_istore6F_v_; -text: .text%__1cNandI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOtailjmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o; -text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; -text: .text%__1cNSafepointBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cUPSGenerationCounters2t6MpkciipnOPSVirtualSpace__v_; -text: .text%__1cNSafepointBlob2n6FII_pv_; -text: .text%__1cQmulD_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvI2F_SSF_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPSVirtualSpace2t6MnNReservedSpace_I_v_; -text: .text%JVM_GetInterfaceVersion; -text: .text%__1cNMemoryManager2t6M_v_; -text: .text%__1cSPSPromotionManager2t6M_v_; -text: .text%__1cMnegF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVMoveF2I_reg_stackNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSaddF24_reg_memNodeFreloc6kM_i_; -text: .text%__1cNTemplateTableGfconst6Fi_v_; -text: .text%__1cSdivD_reg_roundNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNSafepointBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cPmovP_nocopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_CallStaticObjectMethodV: jni.o; -text: .text%__1cIci2bNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_rnFLabel__v_; -text: .text%JVM_Available; -text: .text%__1cCosIjvm_path6Fpci_v_; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_2i_v_; -text: .text%__1cPmovI_nocopyNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIci2bNodeIpipeline6kM_pknIPipeline__; -text: .text%jni_GetDoubleArrayRegion: jni.o; -text: .text%__1cIcp2bNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJAssemblerGfild_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfstp_d6Mi_v_; -text: .text%__1cTMaskFillerForNativeLpass_object6M_v_: oopMapCache.o; -text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; -text: .text%__1cLMoveF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTMaskFillerForNativeJpass_long6M_v_: oopMapCache.o; -text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; -text: .text%__1cNTemplateTableUinvokevirtual_helper6FpnMRegisterImpl_22_v_; -text: .text%__1cJAssemblerEfxch6Mi_v_; -text: .text%__1cJAssemblerFfprem6M_v_; -text: .text%__1cJAssemblerJfnstsw_ax6M_v_; -text: .text%__1cJAssemblerEsahf6M_v_; -text: .text%__1cQObjectStartArraySset_covered_region6MnJMemRegion__v_; -text: .text%__1cQObjectStartArrayKinitialize6MnJMemRegion__v_; -text: .text%__1cJAssemblerEfchs6M_v_; -text: .text%__1cNVM_DeoptimizeEdoit6M_v_; -text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_; -text: .text%__1cSaddF24_reg_immNodeFreloc6kM_i_; -text: .text%__1cJAssemblerEfabs6M_v_; -text: .text%__1cJStubQdDueueOregister_queue6Fp0_v_; -text: .text%__1cOMacroAssemblerPcorrected_idivl6MpnMRegisterImpl__i_; -text: .text%__1cMLinkResolverbEvtable_index_of_miranda_method6FnLKlassHandle_nMsymbolHandle_2pnGThread__i_; -text: .text%__1cRsubI_eReg_memNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFStatebB_sub_Op_PartialSubtypeCheck6MpknENode__v_; -text: .text%__1cNTemplateTableKdouble_cmp6Fi_v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fi_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC22_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC_v_; -text: .text%__1cFStateL_sub_Op_OrL6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_SubF6MpknENode__v_; -text: .text%__1cMPeriodicTaskGenroll6M_v_; -text: .text%__1cMPeriodicTask2t6MI_v_; -text: .text%__1cFStateP_sub_Op_MoveL2D6MpknENode__v_; -text: .text%__1cNincI_eRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNTemplateTableHcastore6F_v_; -text: .text%__1cUGcThreadCountClosureJdo_thread6MpnGThread__v_; -text: .text%__1cPGCMemoryManagerXinitialize_gc_stat_info6M_v_; -text: .text%__1cNTemplateTableLwide_lstore6F_v_; -text: .text%__1cPGCMemoryManager2t6M_v_; -text: .text%__1cKGCStatInfo2t6Mi_v_; -text: .text%__1cNTemplateTableKif_nullcmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableHif_acmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableGdconst6Fi_v_; -text: .text%__1cNTemplateTableGlconst6Fi_v_; -text: .text%__1cNTemplateTableKinitialize6F_v_; -text: .text%__1cJAssemblerEaddl6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cJAssemblerFidivl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEmull6MnHAddress__v_; -text: .text%__1cJAssemblerDorl6MnHAddress_i_v_; -text: .text%__1cJAssemblerEsarl6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEshll6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerFshrdl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl__v_; -text: .text%__1cTAbstract_VM_VersionXinternal_vm_info_string6F_pkc_; -text: .text%__1cTAbstract_VM_VersionKvm_release6F_pkc_; -text: .text%__1cJAssemblerEfldz6M_v_; -text: .text%__1cJAssemblerFfld_s6Mi_v_; -text: .text%__1cJAssemblerFfst_s6MnHAddress__v_; -text: .text%__1cJAssemblerFfst_d6MnHAddress__v_; -text: .text%__1cFStateP_sub_Op_ConvL2F6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_ConvL2D6MpknENode__v_; -text: .text%__1cJArgumentsVset_parallel_gc_flags6F_v_; -text: .text%__1cFStateP_sub_Op_ConvD2F6MpknENode__v_; -text: .text%__1cHnmethodVinvalidate_osr_method6M_v_; -text: .text%__1cQAgentLibraryList2t6M_v_: arguments.o; -text: .text%__1cJAssemblerEmovb6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; -text: .text%__1cNmulI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cINegFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_; -text: .text%__1cOGenerateOopMapTadd_to_ref_init_set6Mi_v_; -text: .text%__1cIPSOldGenOgen_size_limit6M_I_; -text: .text%__1cIPSOldGenGresize6MI_v_; -text: .text%__1cNciMethodKlassEmake6F_p0_; -text: .text%__1cUParallelScavengeHeapItop_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; -text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; -text: .text%__1cMGCTaskThread2t6MpnNGCTaskManager_II_v_; -text: .text%__1cMGCTaskThreadFstart6M_v_; -text: .text%__1cMGCTaskThreadDrun6M_v_; -text: .text%__1cJLoadFNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; -text: .text%__1cISubFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cISubFNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cIPSOldGenPinitialize_work6Mpkci_v_; -text: .text%__1cRComputeEntryStackHdo_long6M_v_: generateOopMap.o; -text: .text%Unsafe_CompareAndSwapObject; -text: .text%__1cJCodeCachebGmake_marked_nmethods_not_entrant6F_v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerWdispatch_only_noverify6MnITosState__v_; -text: .text%__1cRCollectorCounters2t6Mpkci_v_; -text: .text%__1cZInterpreterMacroAssemblerPset_mdp_flag_at6MpnMRegisterImpl_i_v_; -text: .text%__1cZInterpreterMacroAssemblerSupdate_mdp_for_ret6MpnMRegisterImpl__v_; -text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MpnMRegisterImpl_2_v_; -text: .text%__1cIPSOldGenYinitialize_virtual_space6MnNReservedSpace_I_v_; -text: .text%__1cIPSOldGenKinitialize6MnNReservedSpace_Ipkci_v_; -text: .text%__1cMVirtualSpace2t6M_v_; -text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; -text: .text%__1cNinstanceKlassSremove_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cTAbstractInterpreterKinitialize6F_v_; -text: .text%__1cLNamedThread2t6M_v_; -text: .text%__1cLNamedThreadIset_name6MpkcE_v_; -text: .text%__1cUPSAdaptiveSizePolicybQpromo_increment_with_supplement_aligned_up6MI_I_; -text: .text%__1cUPSAdaptiveSizePolicyPpromo_increment6MII_I_; -text: .text%__1cLConvD2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%jni_IsInstanceOf: jni.o; -text: .text%jni_CallStaticBooleanMethod: jni.o; -text: .text%jni_CallStaticVoidMethodV: jni.o; -text: .text%__1cCosWactive_processor_count6F_i_; -text: .text%jni_NewWeakGlobalRef: jni.o; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_float_field06FnJBasicType__pC_; -text: .text%__1cOMacroAssemblerFfremr6MpnMRegisterImpl__v_; -text: .text%__1cLMoveL2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKJNIHandlesQmake_weak_global6FnGHandle__pnI_jobject__; -text: .text%__1cHOrLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKReflectionbFbasic_type_arrayklass_to_mirror6FpnMklassOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cCosHrealloc6FpvI_1_; -text: .text%__1cXPartialSubtypeCheckNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cCosNsigexitnum_pd6F_i_; -text: .text%__1cNGCTaskManagerKset_thread6MIpnMGCTaskThread__v_; -text: .text%__1cLConvL2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOPSVirtualSpace2t6M_v_; -text: .text%__1cLConvL2FNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cCosVatomic_xchg_bootstrap6Fipoi_i_; -text: .text%__1cUParallelScavengeHeapOresize_old_gen6MI_v_; -text: .text%__1cHOrLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cNTemplateTableEdup26F_v_; -text: .text%__1cOThreadCriticalKinitialize6F_v_; -text: .text%__1cIUniverseHgenesis6FpnGThread__v_; -text: .text%__1cNTemplateTableHdup2_x16F_v_; -text: .text%__1cNTemplateTableHdup2_x26F_v_; -text: .text%Unsafe_SetNativeLong; -text: .text%__1cNTemplateTableEswap6F_v_; -text: .text%__1cNTemplateTableGdup_x16F_v_; -text: .text%__1cNTemplateTableDpop6F_v_; -text: .text%__1cNuniverse_init6F_i_; -text: .text%__1cIUniversePinitialize_heap6F_i_; -text: .text%__1cOuniverse2_init6F_v_; -text: .text%__1cNTemplateTableEpop26F_v_; -text: .text%__1cNTemplateTableIgetfield6Fi_v_; -text: .text%__1cNTemplateTableDdup6F_v_; -text: .text%__1cIUniverseNfixup_mirrors6FpnGThread__v_; -text: .text%__1cNTemplateTableGdup_x26F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; -text: .text%__1cNTemplateTableElmul6F_v_; -text: .text%__1cNTemplateTableEldiv6F_v_; -text: .text%__1cNTemplateTableElrem6F_v_; -text: .text%__1cNTemplateTableElshl6F_v_; -text: .text%__1cNTemplateTableElshr6F_v_; -text: .text%__1cNTemplateTableFlushr6F_v_; -text: .text%__1cNTemplateTableElcmp6F_v_; -text: .text%__1cNTemplateTableJwide_iinc6F_v_; -text: .text%__1cNTemplateTableEiinc6F_v_; -text: .text%__1cNTemplateTableEineg6F_v_; -text: .text%__1cNTemplateTableElneg6F_v_; -text: .text%__1cNTemplateTableEdneg6F_v_; -text: .text%__1cNTemplateTableEfneg6F_v_; -text: .text%__1cNTemplateTableEirem6F_v_; -text: .text%__1cIUniverseYcompute_base_vtable_size6F_v_; -text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; -text: .text%__1cNReservedSpaceUpage_align_size_down6FI_I_; -text: .text%__1cQVMOperationQdDueue2t6M_v_; -text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_; -text: .text%__1cNReservedSpaceYallocation_align_size_up6FI_I_; -text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; -text: .text%__1cNTemplateTableMlookupswitch6F_v_; -text: .text%__1cOvmStructs_init6F_v_; -text: .text%__1cNTemplateTableLtableswitch6F_v_; -text: .text%__1cNTemplateTableIwide_ret6F_v_; -text: .text%Unsafe_PageSize; -text: .text%__1cNTemplateTableDret6F_v_; -text: .text%Unsafe_FreeMemory; -text: .text%__1cNTemplateTableEidiv6F_v_; -text: .text%__1cJTimeStampMmilliseconds6kM_x_; -text: .text%__1cOtypeArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cHVM_ExitEdoit6M_v_; -text: .text%__1cNThreadServiceEinit6F_v_; -text: .text%__1cSThreadLocalStorageEinit6F_v_; -text: .text%__1cNCollectedHeapYlarge_typearray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__: typeArrayKlass.o; -text: .text%__1cTAbstract_VM_VersionHvm_name6F_pkc_; -text: .text%__1cTAbstract_VM_VersionJvm_vendor6F_pkc_; -text: .text%__1cIVMThreadEloop6M_v_; -text: .text%__1cPGlobalTLABStats2t6M_v_; -text: .text%__1cWThreadLocalAllocBufferWstartup_initialization6F_v_; -text: .text%__1cIVMThreadDrun6M_v_; -text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; -text: .text%__1cTtypeArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cKTypeOopPtrFxdual6kM_pknEType__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; -text: .text%__1cKVM_VersionWget_processor_features6F_v_; -text: .text%__1cKVM_VersionKinitialize6F_v_; -text: .text%__1cNTemplateTableKinstanceof6F_v_; -text: .text%__1cNTemplateTableJcheckcast6F_v_; -text: .text%__1cNTemplateTableLarraylength6F_v_; -text: .text%__1cNTemplateTableJanewarray6F_v_; -text: .text%__1cNTemplateTableInewarray6F_v_; -text: .text%__1cNTemplateTableE_new6F_v_; -text: .text%__1cNTemplateTablePinvokeinterface6Fi_v_; -text: .text%__1cNTemplateTableRfast_invokevfinal6Fi_v_; -text: .text%__1cNTemplateTableMinvokestatic6Fi_v_; -text: .text%__1cNTemplateTableNinvokespecial6Fi_v_; -text: .text%__1cNTemplateTableNinvokevirtual6Fi_v_; -text: .text%__1cNTemplateTableL_breakpoint6F_v_; -text: .text%__1cNTemplateTableGathrow6F_v_; -text: .text%__1cNTemplateTableMmonitorenter6F_v_; -text: .text%__1cNTemplateTableLmonitorexit6F_v_; -text: .text%__1cNTemplateTableEwide6F_v_; -text: .text%__1cNTemplateTableOmultianewarray6F_v_; -text: .text%__1cETypeRInitialize_shared6FpnHCompile__v_; -text: .text%__1cHVM_ExitNset_vm_exited6F_i_; -text: .text%__1cHVM_ExitbJwait_for_threads_in_native_to_block6F_i_; -text: .text%__1cNTemplateTableJputstatic6Fi_v_; -text: .text%__1cNWatcherThread2t6M_v_; -text: .text%__1cNWatcherThreadDrun6M_v_; -text: .text%__1cNWatcherThreadFstart6F_v_; -text: .text%__1cNTemplateTableIputfield6Fi_v_; -text: .text%__1cNWatcherThreadEstop6F_v_; -text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cPVM_Version_init6F_v_; -text: .text%__1cLVtableStubsKinitialize6F_v_; -text: .text%__1cIVMThread2t6M_v_; -text: .text%__1cIVMThreadGcreate6F_v_; -text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o; -text: .text%__1cVcreate_initial_thread6FnGHandle_pnKJavaThread_pnGThread__pnHoopDesc__: thread.o; -text: .text%__1cbAcall_initializeSystemClass6FpnGThread__v_: thread.o; -text: .text%__1cWreset_vm_info_property6FpnGThread__v_: thread.o; -text: .text%JVM_RegisterUnsafeMethods; -text: .text%__1cQvtableStubs_init6F_v_; -text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlassKlass.o; -text: .text%__1cIUniversePcheck_alignment6FIIpkc_v_; -text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cFJNIidKdeallocate6Fp0_v_; -text: .text%__1cNinstanceKlassZrelease_C_heap_structures6M_v_; -text: .text%__1cSset_init_completed6F_v_; -text: .text%__1cMexit_globals6F_v_; -text: .text%__1cMinit_globals6F_i_; -text: .text%__1cPvm_init_globals6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: indexSet.o; -text: .text%__1cLicache_init6F_v_; -text: .text%__1cWInlineCacheBuffer_init6F_v_; -text: .text%__1cRInlineCacheBufferKinitialize6F_v_; -text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_; -text: .text%__1cDhpiZinitialize_socket_library6F_i_; -text: .text%__1cDhpiKinitialize6F_i_; -text: .text%__1cICodeHeapFclear6M_v_; -text: .text%__1cICodeHeap2t6M_v_; -text: .text%__1cSInterpreterRuntimeSupdate_mdp_for_ret6FpnKJavaThread_i_v_; -text: .text%__1cSInterpreterRuntimeWcreate_klass_exception6FpnKJavaThread_pcpnHoopDesc__v_; -text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; -text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cQinterpreter_init6F_v_; -text: .text%__1cZInterpreterMacroAssemblerbFset_method_data_pointer_for_bcp6M_v_; -text: .text%__1cZInterpreterMacroAssemblerUdispatch_only_normal6MnITosState__v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl_33_v_; -text: .text%__1cVInterfaceSupport_init6F_v_; -text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_; -text: .text%__1cSinstanceKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlassKlass.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; -text: .text%__1cScheck_ThreadShadow6F_v_; -text: .text%__1cNeventlog_init6F_v_; -text: .text%__1cKDictionaryKclasses_do6MpFpnMklassOopDesc__v_v_; -text: .text%__1cKDictionaryKfree_entry6MpnPDictionaryEntry__v_; -text: .text%__1cKDictionary2t6Mi_v_; -text: .text%__1cFStateQ_sub_Op_TailJump6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_NegF6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_MoveF2I6MpknENode__v_; -text: .text%__1cFStateO_sub_Op_CMoveL6MpknENode__v_; -text: .text%__1cODeoptimizationTload_class_by_index6FnSconstantPoolHandle_i_v_; -text: .text%__1cODeoptimizationTload_class_by_index6FnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cUConstantOopReadValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cWconstantPoolCacheKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: cpCacheKlass.o; -text: .text%__1cFframeVinterpreter_frame_mdp6kM_pC_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; -text: .text%__1cRComputeEntryStackIdo_float6M_v_: generateOopMap.o; -text: .text%__1cNCellTypeStateLmake_bottom6F_0_: generateOopMap.o; -text: .text%__1cNCellTypeStateImake_top6F_0_: generateOopMap.o; -text: .text%__1cWResolveOopMapConflictsUdo_potential_rewrite6MpnGThread__nMmethodHandle__; -text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__I_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cKNoopGCTaskQcreate_on_c_heap6F_p0_; -text: .text%__1cNGCTaskManagerKthreads_do6MpnNThreadClosure__v_; -text: .text%__1cNGCTaskManagerKinitialize6M_v_; -text: .text%__1cNGCTaskManager2t6MI_v_; -text: .text%__1cLGCTaskQdDueueQcreate_on_c_heap6F_p0_; -text: .text%__1cHGCStats2t6M_v_; -text: .text%__1cQGCPolicyCounters2t6Mpkcii_v_; -text: .text%__1cXSignatureHandlerLibraryQset_handler_blob6F_pC_; -text: .text%JVM_MaxMemory; -text: .text%JVM_Halt; -text: .text%JVM_InitProperties; -text: .text%__1cQjni_handles_init6F_v_; -text: .text%__1cKJNIHandlesKinitialize6F_v_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_double_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_float_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_long_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbBgenerate_fast_get_int_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_short_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_char_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_byte_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbFgenerate_fast_get_boolean_field6F_pC_; -text: .text%JNI_CreateJavaVM; -text: .text%__1cVquicken_jni_functions6F_v_; -text: .text%lookupDirectBufferClasses: jni.o; -text: .text%__1cXjni_GetDoubleField_addr6F_pC_; -text: .text%JVM_GetClassDeclaredMethods; -text: .text%__1cLJvmtiExportNpost_vm_start6F_v_; -text: .text%__1cLJvmtiExportQenter_live_phase6F_v_; -text: .text%__1cLJvmtiExportRenter_start_phase6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEventController.o; -text: .text%__1cUJvmtiEventControllerIvm_death6F_v_; -text: .text%__1cUJvmtiEventControllerHvm_init6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_start6F_v_; -text: .text%__1cRJvmtiEventEnabledFclear6M_v_; -text: .text%__1cRJvmtiEventEnabled2t6M_v_; -text: .text%JVM_SupportsCX8; -text: .text%__1cbEinitialize_converter_functions6F_v_; -text: .text%JVM_Socket; -text: .text%JVM_InitializeSocketLibrary; -text: .text%__1cWjni_GetFloatField_addr6F_pC_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectPcompute_offsets6F_v_; -text: .text%__1cVjava_lang_ThreadGroupPcompute_offsets6F_v_; -text: .text%__1cQjava_lang_ThreadPcompute_offsets6F_v_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cHvm_exit6Fi_v_; -text: .text%__1cLbefore_exit6FpnKJavaThread__v_; -text: .text%__1cQprint_statistics6F_v_; -text: .text%__1cWinvocationCounter_init6F_v_; -text: .text%__1cUInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cUInterpreterGeneratorXgenerate_accessor_entry6M_pC_; -text: .text%__1cUInterpreterGeneratorUgenerate_empty_entry6M_pC_; -text: .text%__1cUInterpreterGeneratorXgenerate_abstract_entry6M_pC_; -text: .text%__1cbCAbstractInterpreterGeneratorbFgenerate_slow_signature_handler6M_pC_; -text: .text%__1cYjava_lang_reflect_MethodPcompute_offsets6F_v_; -text: .text%__1cVjni_GetLongField_addr6F_pC_; -text: .text%__1cUjni_GetIntField_addr6F_pC_; -text: .text%__1cWjni_GetShortField_addr6F_pC_; -text: .text%__1cVjni_GetCharField_addr6F_pC_; -text: .text%__1cVjni_GetByteField_addr6F_pC_; -text: .text%__1cYjni_GetBooleanField_addr6F_pC_; -text: .text%jni_ToReflectedMethod: jni.o; -text: .text%__1cQjavaClasses_init6F_v_; -text: .text%__1cLJavaClassesPcompute_offsets6F_v_; -text: .text%__1cLJavaClassesbAcompute_hard_coded_offsets6F_v_; -text: .text%__1cZsun_misc_AtomicLongCSImplPcompute_offsets6F_v_; -text: .text%__1cPjava_nio_BufferPcompute_offsets6F_v_; -text: .text%__1cQjava_lang_SystemPcompute_offsets6F_v_; -text: .text%__1cbIjava_security_AccessControlContextPcompute_offsets6F_v_; -text: .text%__1cYsun_reflect_ConstantPoolPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldPcompute_offsets6F_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPcompute_offsets6F_v_; -text: .text%__1cYjava_lang_reflect_MethodNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cJAssemblerEmull6MpnMRegisterImpl__v_; -text: .text%__1cJAssemblerEadcl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerEadcl6MpnMRegisterImpl_i_v_; -text: .text%__1cParrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: arrayKlassKlass.o; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: arrayKlassKlass.o; -text: .text%__1cParrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: arguments.o; -text: .text%__1cJArgumentsWPropertyList_get_value6FpnOSystemProperty_pkc_4_; -text: .text%__1cJArgumentsFparse6FpknOJavaVMInitArgs__i_; -text: .text%__1cJArgumentsSparse_vm_init_args6FpknOJavaVMInitArgs__i_; -text: .text%__1cJAssemblerEsbbl6MpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerLextend_sign6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerFfaddp6Mi_v_; -text: .text%__1cJAssemblerGfdivrp6Mi_v_; -text: .text%__1cJAssemblerHfdivr_d6MnHAddress__v_; -text: .text%__1cJAssemblerHfdivr_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfmul_s6MnHAddress__v_; -text: .text%__1cJAssemblerHfsubr_d6MnHAddress__v_; -text: .text%__1cJAssemblerHfsubr_s6MnHAddress__v_; -text: .text%__1cJAssemblerGfadd_d6MnHAddress__v_; -text: .text%__1cJAssemblerGfadd_s6MnHAddress__v_; -text: .text%__1cJAssemblerFfsqrt6M_v_; -text: .text%__1cJAssemblerEfcos6M_v_; -text: .text%__1cJAssemblerEfsin6M_v_; -text: .text%__1cJAssemblerEsetb6Mn0AJCondition_pnMRegisterImpl__v_; -text: .text%__1cJAssemblerEsubl6MnHAddress_i_v_; -text: .text%__1cJAssemblerFshldl6MpnMRegisterImpl_2_v_; -text: .text%__1cJArgumentsUset_ergonomics_flags6F_v_; -text: .text%__1cHi2sNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHi2bNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOtailjmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTconvI2F_SSF_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQmulD_reg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOtailjmpIndNodeFreloc6kM_i_; -text: .text%__1cTconvI2F_SSF_memNodeFreloc6kM_i_; -text: .text%__1cQmulD_reg_memNodeFreloc6kM_i_; -text: .text%__1cQaccessFlags_init6F_v_; -text: .text%__1cPconvI2L_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsMget_property6Fpkc_2_; -text: .text%__1cMSysClassPathQadd_jars_to_path6Fpcpkc_1_; -text: .text%__1cMSysClassPathPexpand_endorsed6M_v_; -text: .text%__1cMSysClassPath2T6M_v_; -text: .text%__1cMSysClassPath2t6Mpkc_v_; -text: .text%__1cJArgumentsWinit_system_properties6F_v_; -text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_; -text: .text%__1cOchunkpool_init6F_v_; -text: .text%__1cWAdjoiningVirtualSpaces2t6MnNReservedSpace_III_v_; -text: .text%__1cUAdjoiningGenerations2t6MnNReservedSpace_IIIIIII_v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCpnMRegisterImpl__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o; -text: .text%__1cRCompilationPolicyUcompleted_vm_startup6F_v_; -text: .text%__1cWcompilationPolicy_init6F_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyUinitialize_size_info6M_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyQinitialize_flags6M_v_; -text: .text%__1cNCollectedHeap2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: codeCache.o; -text: .text%__1cOcodeCache_init6F_v_; -text: .text%__1cJCodeCacheKinitialize6F_v_; -text: .text%__1cNExceptionBlob2n6FII_pv_; -text: .text%__1cNExceptionBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNExceptionBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cQUncommonTrapBlob2n6FII_pv_; -text: .text%__1cQUncommonTrapBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cQUncommonTrapBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cSDeoptimizationBlob2n6FII_pv_; -text: .text%__1cWconstantPoolCacheKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cRconstantPoolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constantPoolKlass.o; -text: .text%__1cRconstantPoolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cQconstMethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassOset_alloc_size6MI_v_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cTcompilerOracle_init6F_v_; -text: .text%__1cOCompilerOraclePparse_from_file6F_v_; -text: .text%__1cVcompiledICHolderKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: compiledICHolderKlass.o; -text: .text%__1cVcompiledICHolderKlassOset_alloc_size6MI_v_: compiledICHolderKlass.o; -text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; -text: .text%__1cNCompileBrokerQset_should_block6F_v_; -text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; -text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_I_; -text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; -text: .text%__1cKC2CompilerKinitialize6M_v_; -text: .text%__1cHCompileRpd_compiler2_init6F_v_; -text: .text%__1cJBytecodesNpd_initialize6F_v_; -text: .text%__1cObytecodes_init6F_v_; -text: .text%__1cJBytecodesKinitialize6F_v_; -text: .text%__1cOMacroAssemblerIround_to6MpnMRegisterImpl_i_v_; -text: .text%__1cOMacroAssemblerQsign_extend_byte6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerRsign_extend_short6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerIlcmp2int6MpnMRegisterImpl_222_v_; -text: .text%__1cOMacroAssemblerElshl6MpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerElmul6Mii_v_; -text: .text%__1cOMacroAssemblerElneg6MpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerGc2bool6MpnMRegisterImpl__v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCpnMRegisterImpl_3_v_; -text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_; -text: .text%__1cSDeoptimizationBlob2t6MpnKCodeBuffer_ipnJOopMapSet_iiii_v_; -text: .text%__1cLMoveF2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: classLoader.o; -text: .text%__1cQclassLoader_init6F_v_; -text: .text%__1cLClassLoaderVcompute_Object_vtable6F_i_; -text: .text%__1cLClassLoaderKinitialize6F_v_; -text: .text%__1cLClassLoaderZcreate_package_info_table6F_v_; -text: .text%__1cLClassLoaderQload_zip_library6F_v_; -text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_; -text: .text%__1cPClassFileParserYjava_lang_Class_fix_post6Mpi_v_; -text: .text%__1cPClassFileParserXjava_lang_Class_fix_pre6MpnOobjArrayHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cPClassFileParserbFjava_lang_ref_Reference_fix_pre6MpnPtypeArrayHandle_nSconstantPoolHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; -text: .text%__1cUciObjArrayKlassKlassEmake6F_p0_; -text: .text%__1cPciObjArrayKlass2t6MpnIciSymbol_pnHciKlass_i_v_; -text: .text%__1cMciKlassKlassEmake6F_p0_; -text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_; -text: .text%__1cNRegisterSaverYrestore_result_registers6FpnOMacroAssembler__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o; -text: .text%__1cORuntimeServiceYrecord_application_start6F_v_; -text: .text%__1cORuntimeServiceEinit6F_v_; -text: .text%__1cLOptoRuntimeUmultianewarray5_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray4_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray3_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray2_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeIgenerate6FpnFciEnv__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; -text: .text%__1cQRelocationHolder2t6M_v_: relocInfo.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: regmask.o; -text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; -text: .text%__1cLStatSamplerbMcreate_system_property_instrumentation6FpnGThread__v_; -text: .text%__1cLStatSamplerHdestroy6F_v_; -text: .text%__1cLStatSamplerJdisengage6F_v_; -text: .text%__1cLStatSamplerGengage6F_v_; -text: .text%__1cLStatSamplerKinitialize6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cLPSMarkSweepKinitialize6F_v_; -text: .text%__1cbAPSGCAdaptivePolicyCounters2t6MpkciipnUPSAdaptiveSizePolicy__v_; -text: .text%__1cQPlaceholderTable2t6Mi_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: phase.o; -text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; -text: .text%__1cKPerfMemoryUcreate_memory_region6FI_v_; -text: .text%__1cIPSOldGen2t6MnNReservedSpace_IIIIpkci_v_; -text: .text%__1cSReferenceProcessorMinit_statics6F_v_; -text: .text%__1cXreferenceProcessor_init6F_v_; -text: .text%__1cKPSYoungGenUset_space_boundaries6MII_v_; -text: .text%__1cKPSYoungGenbGcompute_initial_space_boundaries6M_v_; -text: .text%__1cKPSYoungGenPinitialize_work6M_v_; -text: .text%__1cKPSYoungGenKinitialize6MnNReservedSpace_I_v_; -text: .text%__1cKPSYoungGenYinitialize_virtual_space6MnNReservedSpace_I_v_; -text: .text%__1cKPSYoungGen2t6MIII_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o; -text: .text%__1cKPSScavengeKinitialize6F_v_; -text: .text%__1cSPSPromotionManagerKinitialize6F_v_; -text: .text%__1cJPSPermGen2t6MnNReservedSpace_IIIIpkci_v_; -text: .text%__1cIPSOldGen2t6MIIIpkci_v_; -text: .text%__1cLStatSamplerUcreate_misc_perfdata6F_v_; -text: .text%__1cNTemplateTableGbaload6F_v_; -text: .text%__1cNTemplateTableGaaload6F_v_; -text: .text%__1cNTemplateTableGdaload6F_v_; -text: .text%__1cNTemplateTableGfaload6F_v_; -text: .text%__1cNTemplateTableGlaload6F_v_; -text: .text%__1cNTemplateTableGiaload6F_v_; -text: .text%__1cNTemplateTableKwide_aload6F_v_; -text: .text%__1cNTemplateTableKwide_dload6F_v_; -text: .text%__1cNTemplateTableKwide_fload6F_v_; -text: .text%__1cNTemplateTableKwide_lload6F_v_; -text: .text%__1cNTemplateTableKwide_iload6F_v_; -text: .text%__1cNTemplateTableFaload6F_v_; -text: .text%__1cNTemplateTableFdload6F_v_; -text: .text%__1cNTemplateTableFfload6F_v_; -text: .text%__1cNTemplateTableFlload6F_v_; -text: .text%__1cNTemplateTableKfast_iload6F_v_; -text: .text%__1cNTemplateTableLfast_iload26F_v_; -text: .text%__1cNTemplateTableFiload6F_v_; -text: .text%__1cNTemplateTableGcaload6F_v_; -text: .text%__1cNTemplateTableHsastore6F_v_; -text: .text%__1cNTemplateTableHbastore6F_v_; -text: .text%__1cNTemplateTableHaastore6F_v_; -text: .text%__1cNTemplateTableHdastore6F_v_; -text: .text%__1cNTemplateTableHfastore6F_v_; -text: .text%__1cNTemplateTableHlastore6F_v_; -text: .text%__1cNTemplateTableHiastore6F_v_; -text: .text%__1cNTemplateTableLwide_astore6F_v_; -text: .text%__1cNTemplateTableLwide_dstore6F_v_; -text: .text%__1cNTemplateTableLwide_fstore6F_v_; -text: .text%__1cNTemplateTableGastore6F_v_; -text: .text%__1cNTemplateTableGdstore6F_v_; -text: .text%__1cNTemplateTableGfstore6F_v_; -text: .text%__1cNTemplateTableGlstore6F_v_; -text: .text%__1cNTemplateTableGistore6F_v_; -text: .text%__1cNTemplateTableHaload_06F_v_; -text: .text%__1cNTemplateTableGsaload6F_v_; -text: .text%__1cNTemplateTableMfast_icaload6F_v_; -text: .text%__1cNTemplateTableGldc2_w6F_v_; -text: .text%__1cLsymbolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: symbolKlass.o; -text: .text%__1cLsymbolKlassOset_alloc_size6MI_v_: symbolKlass.o; -text: .text%__1cLsymbolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cISubFNodeDsub6kMpknEType_3_3_; -text: .text%__1cSstubRoutines_init26F_v_; -text: .text%__1cSstubRoutines_init16F_v_; -text: .text%__1cMStubRoutinesLinitialize26F_v_; -text: .text%__1cMStubRoutinesLinitialize16F_v_; -text: .text%__1cLStatSamplerXcreate_sampled_perfdata6F_v_; -text: .text%__1cQSystemDictionarybAcompute_java_system_loader6FpnGThread__v_; -text: .text%__1cNTemplateTableGsipush6F_v_; -text: .text%__1cNTemplateTableGbipush6F_v_; -text: .text%__1cNTemplateTableLaconst_null6F_v_; -text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_; -text: .text%__1cNTemplateTableDnop6F_v_; -text: .text%__1cNTemplateTableNpd_initialize6F_v_; -text: .text%__1cStemplateTable_init6F_v_; -text: .text%__1cNTemplateTableDjsr6F_v_; -text: .text%__1cNTemplateTableFjsr_w6F_v_; -text: .text%__1cNTemplateTableGgoto_w6F_v_; -text: .text%__1cNTemplateTableF_goto6F_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC222_v_; -text: .text%__1cMPeriodicTaskJdisenroll6M_v_; -text: .text%__1cMPeriodicTask2T5B6M_v_; -text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_; -text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_; -text: .text%__1cQSystemDictionaryKclasses_do6FpFpnMklassOopDesc__v_v_; -text: .text%__1cNMemoryServicebFadd_parallel_scavenge_heap_info6FpnUParallelScavengeHeap__v_; -text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_; -text: .text%__1cNMemoryManagerbEget_psMarkSweep_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cNMemoryManagerbDget_psScavenge_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: matcher.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; -text: .text%__1cOmarksweep_init6F_v_; -text: .text%__1cNMemoryServiceXadd_psYoung_memory_pool6FpnKPSYoungGen_pnNMemoryManager_4_v_; -text: .text%__1cKmutex_init6F_v_; -text: .text%__1cMMutableSpaceOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: methodLiveness.o; -text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodKlass.o; -text: .text%__1cLmethodKlassOset_alloc_size6MI_v_: methodKlass.o; -text: .text%__1cLmethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cHRetDataJfixup_ret6MinQmethodDataHandle__pC_; -text: .text%__1cHRetDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cPmethodDataKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodDataKlass.o; -text: .text%__1cPmethodDataKlassOset_alloc_size6MI_v_: methodDataKlass.o; -text: .text%__1cPmethodDataKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o; -text: .text%__1cNMemoryServiceZadd_code_heap_memory_pool6FpnICodeHeap__v_; -text: .text%__1cNMemoryServiceWadd_psPerm_memory_pool6FpnJPSPermGen_pnNMemoryManager__v_; -text: .text%__1cNMemoryServiceVadd_psOld_memory_pool6FpnIPSOldGen_pnNMemoryManager__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; -text: .text%__1cKklassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiImpl.o; -text: .text%__1cUJvmtiPendingMonitorsXtransition_raw_monitors6F_v_; -text: .text%__1cLJvmtiExportbMtransition_pending_onload_raw_monitors6F_v_; -text: .text%__1cLJvmtiExportNpost_vm_death6F_v_; -text: .text%__1cKklassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: klassKlass.o; -text: .text%__1cJTimeStamp2t6M_v_: management.o; -text: .text%__1cKManagementWrecord_vm_startup_time6Fxx_v_; -text: .text%__1cKManagementKinitialize6FpnGThread__v_; -text: .text%__1cKManagementEinit6F_v_; -text: .text%__1cPmanagement_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: machnode.o; -text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_; -text: .text%__1cRLowMemoryDetectorKinitialize6F_v_; -text: .text%__1cNIdealLoopTreeUmerge_many_backedges6MpnOPhaseIdealLoop__v_; -text: .text%__1cKfix_parent6FpnNIdealLoopTree_1_v_: loopnode.o; -text: .text%__1cNIdealLoopTreeQsplit_outer_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cVLoaderConstraintTable2t6Mi_v_; -text: .text%__1cUParallelScavengeHeapMmax_capacity6kM_I_; -text: .text%__1cUParallelScavengeHeapPpost_initialize6M_v_; -text: .text%__1cUParallelScavengeHeapKinitialize6M_i_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; -text: .text%__SLIP.DELETER__C: ostream.o; -text: .text%__1cMostream_exit6F_v_; -text: .text%__1cQostream_init_log6F_v_; -text: .text%__1cMostream_init6F_v_; -text: .text%__1cNdefaultStreamEinit6M_v_; -text: .text%__1cCosGinit_26F_i_; -text: .text%__1cCosEinit6F_v_; -text: .text%__1cCosHSolarisUsynchronization_init6F_v_; -text: .text%__1cCosHSolarisOlibthread_init6F_v_; -text: .text%__1cUParallelScavengeHeapYpermanent_object_iterate6MpnNObjectClosure__v_; -text: .text%__1cKPerfMemoryHdestroy6F_v_; -text: .text%__1cKPerfMemoryKinitialize6F_v_; -text: .text%__1cPperfMemory_exit6F_v_; -text: .text%__1cPperfMemory_init6F_v_; -text: .text%__1cMPerfDataListFclone6M_p0_; -text: .text%__1cMPerfDataList2t6Mp0_v_; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnPPerfLongCounter__; -text: .text%__1cPPerfDataManagerHsampled6F_pnMPerfDataList__; -text: .text%__1cPPerfDataManagerHdestroy6F_v_; -text: .text%__1cFParseMjump_if_join6MpnENode_2_2_; -text: .text%__1cPGenerationSizerQinitialize_flags6M_v_: parallelScavengeHeap.o; -text: .text%__1cUParallelScavengeHeapIend_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; -text: .text%__1cUParallelScavengeHeapEheap6F_p0_; -text: .text%__1cUParallelScavengeHeapNgc_threads_do6kMpnNThreadClosure__v_; -text: .text%__1cCosLinit_random6Fl_v_; -text: .text%__1cCosGstrdup6Fpkc_pc_; -text: .text%__1cCosXterminate_signal_thread6F_v_; -text: .text%__1cCosLsignal_init6F_v_; -text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cSobjArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlassKlass.o; -text: .text%__1cSobjArrayKlassKlassbEallocate_system_objArray_klass6MpnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; -text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; -text: .text%__1cNpriocntl_stub6FinGidtype_lipc_l_: os_solaris.o; -text: .text%__1cCosLsignal_wait6F_i_; -text: .text%__1cCosNsignal_notify6Fi_v_; -text: .text%__1cCosOsignal_init_pd6F_v_; -text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; -text: .text%__1cCosSget_temp_directory6F_pkc_; -text: .text%__1cCosbDallocate_thread_local_storage6F_i_; -text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; -text: .text%__1cCosbDinit_system_properties_values6F_v_; -text: .text%__1cCosHSolarisWinitialize_system_info6F_v_; -text: .text%__1cCosPphysical_memory6F_X_; -text: .text%__1cSThreadLocalStorageHpd_init6F_v_; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_TIERED_sparc --- a/make/solaris/makefiles/reorder_TIERED_sparc Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4358 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; - - -text: .text%__1cCosOjavaTimeMillis6F_x_; -text: .text%__1cQIndexSetIteratorQadvance_and_next6M_I_; -text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOtypeArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cIPhaseIFGIadd_edge6MII_i_; -text: .text%__1cQIndexSetIterator2t6MpnIIndexSet__v_; -text: .text%__1cENodeEjvms6kM_pnIJVMState__; -text: .text%__1cIIndexSetWalloc_block_containing6MI_pn0AIBitBlock__; -text: .text%__1cETypeDcmp6Fkpk03_i_; -text: .text%__1cENodeHlatency6MI_I_; -text: .text%__1cHRegMaskJis_bound16kM_i_; -text: .text%__1cDff16FI_i_; -text: .text%__1cHRegMaskESize6kM_I_; -text: .text%__1cXresource_allocate_bytes6FI_pc_; -text: .text%__1cENodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJVectorSet2R6MI_rnDSet__; -text: .text%__1cHRegMaskJis_bound26kM_i_; -text: .text%__1cNSharedRuntimeElmul6Fxx_x_; -text: .text%__1cIMachNodeGOpcode6kM_i_; -text: .text%__1cJiRegIOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cIIndexSetKinitialize6MI_v_; -text: .text%__1cITypeNodeLbottom_type6kM_pknEType__; -text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_; -text: .text%__1cKTypeOopPtrFklass6kM_pnHciKlass__: type.o; -text: .text%__1cETypeFuhash6Fkpk0_i_; -text: .text%__1cQIndexSetIteratorEnext6M_I_: chaitin.o; -text: .text%__1cENodeIout_grow6MI_v_; -text: .text%__1cOloadConI13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cENodeHadd_req6Mp0_v_; -text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOloadConI13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cICallNodeKmatch_edge6kMI_I_; -text: .text%__1cINodeHashQhash_find_insert6MpnENode__2_; -text: .text%__1cHPhiNodeGOpcode6kM_i_; -text: .text%__1cKbranchNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cIProjNodeGOpcode6kM_i_; -text: .text%__1cETypeIhashcons6M_pk0_; -text: .text%__1cMPhaseChaitinTinterfere_with_live6MIpnIIndexSet__v_; -text: .text%__1cWNode_Backward_IteratorEnext6M_pnENode__; -text: .text%__1cNIdealLoopTreeJis_member6kMpk0_i_; -text: .text%__1cMMachCallNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cHCompileNnode_bundling6MpknENode__pnGBundle__; -text: .text%__1cGIfNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopYsplit_if_with_blocks_pre6MpnENode__2_; -text: .text%__1cOPhaseIdealLoopZsplit_if_with_blocks_post6MpnENode__v_; -text: .text%__1cIUniverseMnon_oop_word6F_pv_; -text: .text%__1cDLRGOcompute_degree6kMr0_i_; -text: .text%__1cFArenaIArealloc6MpvII_1_; -text: .text%__1cIConINodeGOpcode6kM_i_; -text: .text%__1cETypeEmeet6kMpk0_2_; -text: .text%__1cENode2t6MI_v_; -text: .text%__1cRMachSpillCopyNodeJideal_reg6kM_I_: ad_sparc.o; -text: .text%__1cIPipelineXfunctional_unit_latency6kMIpk0_I_; -text: .text%__1cWPSScavengeRootsClosureGdo_oop6MppnHoopDesc__v_: psTasks.o; -text: .text%__1cLsymbolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cJCProjNodeNis_block_proj6kM_pknENode__: cfgnode.o; -text: .text%__1cKIfTrueNodeGOpcode6kM_i_; -text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_; -text: .text%__1cIMachNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cJloadPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIPhaseIFGQeffective_degree6kMI_i_; -text: .text%__1cWConstantPoolCacheEntryPfollow_contents6M_v_; -text: .text%__1cWConstantPoolCacheEntryPadjust_pointers6M_v_; -text: .text%__1cIAddPNodeGOpcode6kM_i_; -text: .text%__1cIPhaseIFGJre_insert6MI_v_; -text: .text%__1cIPhaseIFGLremove_node6MI_pnIIndexSet__; -text: .text%__1cKNode_ArrayGinsert6MIpnENode__v_; -text: .text%__1cHTypeIntEhash6kM_i_; -text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cLsymbolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cMPhaseIterGVNNtransform_old6MpnENode__2_; -text: .text%__1cDfh16FI_i_; -text: .text%__1cNMachIdealNodeErule6kM_I_: ad_sparc.o; -text: .text%__1cIIndexSetKfree_block6MI_v_; -text: .text%__1cWShouldNotReachHereNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cLIfFalseNodeGOpcode6kM_i_; -text: .text%__1cSCallStaticJavaNodeGOpcode6kM_i_; -text: .text%__1cENodeEhash6kM_I_; -text: .text%__1cOPhaseIdealLoopEsort6MpnNIdealLoopTree_2_2_; -text: .text%__1cMMachProjNodeLbottom_type6kM_pknEType__; -text: .text%JVM_ArrayCopy; -text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cNSharedRuntimeDl2f6Fx_f_; -text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; -text: .text%__1cHConNodeGOpcode6kM_i_; -text: .text%__1cMPhaseIterGVNWadd_users_to_worklist06MpnENode__v_; -text: .text%__1cMMachProjNodeGOpcode6kM_i_; -text: .text%__1cJiRegPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cXPipeline_Use_Cycle_Mask2L6Mi_r0_: ad_sparc_pipeline.o; -text: .text%__1cIBoolNodeGOpcode6kM_i_; -text: .text%__1cYCallStaticJavaDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cENodeEgrow6MI_v_; -text: .text%__1cIciObjectEhash6M_i_; -text: .text%__1cKRegionNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopUbuild_loop_tree_impl6MpnENode_i_i_; -text: .text%__1cJMarkSweepSMarkAndPushClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cRMachSpillCopyNodeLbottom_type6kM_pknEType__: ad_sparc.o; -text: .text%__1cOPhaseIdealLoopOget_early_ctrl6MpnENode__2_; -text: .text%__1cIIndexSetKinitialize6MIpnFArena__v_; -text: .text%__1cLmethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cIPhaseGVNJtransform6MpnENode__2_; -text: .text%__1cOoop_RelocationLunpack_data6M_v_; -text: .text%__1cRmethodDataOopDescHdata_at6Mi_pnLProfileData__; -text: .text%__1cPJavaFrameAnchorNmake_walkable6MpnKJavaThread__v_; -text: .text%__1cENodeNis_block_proj6kM_pk0_; -text: .text%__1cNRelocIteratorFreloc6M_pnKRelocation__; -text: .text%__1cIProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQconstMethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cPClassFileStreamGget_u16MpnGThread__C_; -text: .text%__1cLTypeInstPtrEhash6kM_i_; -text: .text%__1cYCallStaticJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOPhaseIdealLoopThas_local_phi_input6MpnENode__2_; -text: .text%__1cJloadINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRMachSpillCopyNodeLout_RegMask6kM_rknHRegMask__: ad_sparc.o; -text: .text%__1cKbranchNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMMachProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMMachProjNodeLout_RegMask6kM_rknHRegMask__: classes.o; -text: .text%__1cRMachSpillCopyNodeKin_RegMask6kMI_rknHRegMask__: ad_sparc.o; -text: .text%__1cbAfinal_graph_reshaping_impl6FpnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cUParallelScavengeHeapVlarge_typearray_limit6M_I_: parallelScavengeHeap.o; -text: .text%__1cIPhaseCCPOtransform_once6MpnENode__2_; -text: .text%__1cGciTypeEmake6FnJBasicType__p0_; -text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cENodeFclone6kM_p0_; -text: .text%__1cITypeNodeEhash6kM_I_; -text: .text%__1cMPipeline_UseMfull_latency6kMIrk0_I_; -text: .text%__1cRMachSpillCopyNodePoper_input_base6kM_I_: ad_sparc.o; -text: .text%__1cENodeKmatch_edge6kMI_I_; -text: .text%__1cQconstMethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cOPhaseIdealLoopZremix_address_expressions6MpnENode__2_; -text: .text%__1cSInterpreterRuntimeInewarray6FpnKJavaThread_nJBasicType_i_v_; -text: .text%__1cICallNodeLbottom_type6kM_pknEType__; -text: .text%__1cOPhaseIdealLoopNget_late_ctrl6MpnENode_2_2_; -text: .text%JVM_CurrentTimeMillis; -text: .text%__1cENodeIIdentity6MpnOPhaseTransform__p0_; -text: .text%__1cIPipelinePoperand_latency6kMIpk0_I_; -text: .text%__1cKTypeAryPtrEhash6kM_i_; -text: .text%__1cETypeFxmeet6kMpk0_2_; -text: .text%__1cILRG_ListGextend6MII_v_; -text: .text%__1cJVectorSet2F6kMI_i_; -text: .text%__1cENodeQIdeal_DU_postCCP6MpnIPhaseCCP__p0_; -text: .text%__1cIProjNodeEhash6kM_I_; -text: .text%__1cIAddINodeGOpcode6kM_i_; -text: .text%__1cIIndexSet2t6Mp0_v_; -text: .text%__1cRmethodDataOopDescJnext_data6MpnLProfileData__2_; -text: .text%__1cITypeNodeJideal_reg6kM_I_; -text: .text%__1cYCallStaticJavaDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cMloadConPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHPhiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeHsize_of6kM_I_; -text: .text%__1cICmpPNodeGOpcode6kM_i_; -text: .text%__1cKNode_ArrayGremove6MI_v_; -text: .text%__1cHPhiNodeEhash6kM_I_; -text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cKmethodOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cJStartNodeLbottom_type6kM_pknEType__; -text: .text%__1cHTypeIntFxmeet6kMpknEType__3_; -text: .text%__1cIProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cPciObjectFactoryDget6MpnHoopDesc__pnIciObject__; -text: .text%__1cILocationIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cICmpINodeGOpcode6kM_i_; -text: .text%Unsafe_CompareAndSwapLong; -text: .text%__1cNCatchProjNodeGOpcode6kM_i_; -text: .text%__1cQUnique_Node_ListGremove6MpnENode__v_; -text: .text%__1cENode2t6Mp0_v_; -text: .text%__1cNLocationValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cFframeVinterpreter_frame_bcp6kM_pC_; -text: .text%__1cTCreateExceptionNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPClassFileStreamHskip_u16MipnGThread__v_; -text: .text%__1cHRegMaskMSmearToPairs6M_v_; -text: .text%__1cMPhaseIterGVNVadd_users_to_worklist6MpnENode__v_; -text: .text%__1cMloadConPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__; -text: .text%__1cMPipeline_UseJadd_usage6Mrk0_v_; -text: .text%__1cIAddPNodeKmatch_edge6kMI_I_; -text: .text%__1cJiRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cGIfNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cGcmpkey6Fpkv1_i_; -text: .text%__1cMMergeMemNodeGOpcode6kM_i_; -text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__; -text: .text%__1cIParmNodeGOpcode6kM_i_; -text: .text%__1cPClassFileParserRverify_legal_utf86MpkCipnGThread__v_; -text: .text%__1cHTypeIntEmake6Fiii_pk0_; -text: .text%__1cENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNsymbolOopDescLas_C_string6kM_pc_; -text: .text%__1cKSchedulingWAddNodeToAvailableList6MpnENode__v_; -text: .text%__1cKSchedulingSChooseNodeToBundle6M_pnENode__; -text: .text%__1cKSchedulingPAddNodeToBundle6MpnENode_pknFBlock__v_; -text: .text%__1cICallNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cJLoadPNodeGOpcode6kM_i_; -text: .text%__1cMMutableSpaceIallocate6MI_pnIHeapWord__; -text: .text%__1cJPSPermGenSallocate_permanent6MI_pnIHeapWord__; -text: .text%__1cUParallelScavengeHeapWpermanent_mem_allocate6MI_pnIHeapWord__; -text: .text%__1cIMachNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMMutableSpaceMcas_allocate6MI_pnIHeapWord__; -text: .text%__1cNflagsRegPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cHPhiNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMMachTypeNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cJCatchNodeGOpcode6kM_i_; -text: .text%__1cIJVMStateLdebug_start6kM_I_; -text: .text%__1cENodeHdel_req6MI_v_; -text: .text%__1cRSignatureIterator2t6MnMsymbolHandle__v_; -text: .text%__1cOAbstractICachePinvalidate_word6FpC_v_; -text: .text%__1cFBlockIis_Empty6kM_i_; -text: .text%__1cOThreadCritical2T6M_v_; -text: .text%__1cOThreadCritical2t6M_v_; -text: .text%method_compare: methodOop.o; -text: .text%__1cICodeHeapKfind_start6kMpv_1_; -text: .text%__1cETypeEhash6kM_i_; -text: .text%__1cRNativeInstructionLset_long_at6Mii_v_; -text: .text%__1cIAddPNodeLbottom_type6kM_pknEType__; -text: .text%__1cJCProjNodeEhash6kM_I_: classes.o; -text: .text%__1cIHaltNodeGOpcode6kM_i_; -text: .text%__1cFStateRMachNodeGenerator6MipnHCompile__pnIMachNode__; -text: .text%__1cHMatcherKReduceInst6MpnFState_irpnENode__pnIMachNode__; -text: .text%__1cICmpUNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopbIdom_lca_for_get_late_ctrl_internal6MpnENode_22_2_; -text: .text%__1cXPipeline_Use_Cycle_MaskCOr6Mrk0_v_; -text: .text%__1cILoadNodeEhash6kM_I_; -text: .text%__1cKTypeAryPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_; -text: .text%__1cKHandleMark2T6M_v_; -text: .text%__1cZPhaseConservativeCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cMPhaseIterGVNZremove_globally_dead_node6MpnENode__v_; -text: .text%__1cWShouldNotReachHereNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHPhiNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cILoadNodeLbottom_type6kM_pknEType__; -text: .text%JVM_ReleaseUTF; -text: .text%__1cJloadPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJTypeTupleEhash6kM_i_; -text: .text%__1cMflagsRegOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cObranchConPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKoopFactoryMnew_objArray6FpnMklassOopDesc_ipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassRallocate_objArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cMOopMapStreamJfind_next6M_v_; -text: .text%__1cFDictI2i6M_v_; -text: .text%__1cKNode_ArrayEgrow6MI_v_; -text: .text%__1cHTypeIntEmake6Fi_pk0_; -text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_; -text: .text%__1cJloadPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMMergeMemNodeLbottom_type6kM_pknEType__: memnode.o; -text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; -text: .text%__1cOPSPromotionLABKinitialize6MnJMemRegion__v_; -text: .text%__1cJMultiNodeIproj_out6kMI_pnIProjNode__; -text: .text%__1cPindOffset13OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cUcompI_iReg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cODataRelocationJset_value6MpC_v_: relocInfo.o; -text: .text%__1cKRelocationRpd_set_data_value6MpCi_v_; -text: .text%__1cKCastPPNodeGOpcode6kM_i_; -text: .text%__1cOoop_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cOoop_RelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cPSignatureStreamEnext6M_v_; -text: .text%__1cLLShiftINodeGOpcode6kM_i_; -text: .text%__1cMPhaseChaitinSuse_prior_register6MpnENode_I2pnFBlock_rnJNode_List_6_i_; -text: .text%__1cGIfNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cGBitMapJset_union6M0_v_; -text: .text%__1cIConPNodeGOpcode6kM_i_; -text: .text%__1cJLoadINodeGOpcode6kM_i_; -text: .text%JVM_GetMethodIxExceptionTableLength; -text: .text%__1cOJNIHandleBlockPallocate_handle6MpnHoopDesc__pnI_jobject__; -text: .text%__1cPClassFileParserUassemble_annotations6MpCi1ipnGThread__nPtypeArrayHandle__; -text: .text%__1cNSharedRuntimeDd2i6Fd_i_; -text: .text%__1cVcompP_iRegP_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKRegionNodeEhash6kM_I_: classes.o; -text: .text%__1cNbranchConNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_; -text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; -text: .text%__1cIAddPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cGBitMap2t6MpII_v_; -text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_; -text: .text%__1cMMachCallNodeLbottom_type6kM_pknEType__; -text: .text%__1cFParsePdo_one_bytecode6M_v_; -text: .text%__1cFParseNdo_exceptions6M_v_; -text: .text%__1cHPhiNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cHMatcherKmatch_tree6MpknENode__pnIMachNode__; -text: .text%__1cMPhaseIterGVNKis_IterGVN6M_p0_: phaseX.o; -text: .text%__1cKimmI13OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cCosVcurrent_stack_pointer6F_pC_; -text: .text%__1cEDict2F6kMpkv_pv_; -text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cENodeIdestruct6M_v_; -text: .text%__1cMCreateExNodeGOpcode6kM_i_; -text: .text%__1cIBoolNodeEhash6kM_I_; -text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cLTypeInstPtrFxmeet6kMpknEType__3_; -text: .text%__1cKNode_ArrayFclear6M_v_; -text: .text%__1cObranchConPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIProjNodeHsize_of6kM_I_; -text: .text%__1cTconstantPoolOopDescWsignature_ref_index_at6Mi_i_; -text: .text%__1cMloadConINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIHaltNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cJloadBNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cHhashptr6Fpkv_i_; -text: .text%__1cMMachHaltNodeEjvms6kM_pnIJVMState__; -text: .text%__1cHhashkey6Fpkv_i_; -text: .text%__1cMPhaseChaitinHnew_lrg6MpknENode_I_v_; -text: .text%__1cIJVMStateJdebug_end6kM_I_; -text: .text%__1cIPhaseIFGMtest_edge_sq6kMII_i_; -text: .text%__1cJloadPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cHSubNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_; -text: .text%__1cSaddP_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMachNodeHtwo_adr6kM_I_: ad_sparc.o; -text: .text%__1cNSafePointNodeHsize_of6kM_I_; -text: .text%__1cLTypeInstPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cHCmpNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPcheckCastPPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNLoadRangeNodeGOpcode6kM_i_; -text: .text%__1cNbranchConNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cENode2t6Mp011_v_; -text: .text%__1cJStoreNodeKmatch_edge6kMI_I_; -text: .text%__1cOPSPromotionLABFflush6M_v_; -text: .text%__1cQResultTypeFinderDset6MinJBasicType__v_: bytecode.o; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: generateOopMap.o; -text: .text%__1cOcompU_iRegNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__; -text: .text%__1cICodeHeapJnext_free6kMpnJHeapBlock__pv_; -text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__; -text: .text%__1cICodeHeapKnext_block6kMpnJHeapBlock__2_; -text: .text%__1cSCountedLoopEndNodeGOpcode6kM_i_; -text: .text%__1cPciInstanceKlassGloader6M_pnHoopDesc__; -text: .text%__1cPcheckCastPPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNCellTypeStateFmerge6kM0i_0_; -text: .text%__1cMPhaseIterGVNMsubsume_node6MpnENode_2_v_; -text: .text%__1cILoadNodeKmatch_edge6kMI_I_; -text: .text%__1cJloadINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNExceptionMark2T6M_v_; -text: .text%__1cNExceptionMark2t6MrpnGThread__v_; -text: .text%__1cITypeLongEhash6kM_i_; -text: .text%__1cJHashtableJnew_entry6MIpnHoopDesc__pnOHashtableEntry__; -text: .text%__1cJiRegLOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cKJNIHandlesKmake_local6FpnHJNIEnv__pnHoopDesc__pnI_jobject__; -text: .text%__1cPciInstanceKlassRprotection_domain6M_pnHoopDesc__; -text: .text%__1cOloadConI13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOloadConI13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cObranchConPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKStoreINodeGOpcode6kM_i_; -text: .text%__1cJcmpOpOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cRSignatureIterator2t6MpnNsymbolOopDesc__v_; -text: .text%__1cJiRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKRegionNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKstorePNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cHPhiNodeHsize_of6kM_I_: cfgnode.o; -text: .text%__1cJrelocInfoNfinish_prefix6Mph_p0_; -text: .text%__1cQaddP_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSaddI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cIBoolNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLCounterDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cHRegMaskMClearToPairs6M_v_; -text: .text%__1cRshlI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode__i_; -text: .text%__1cNPhaseCoalesceRcombine_these_two6MpnENode_2_v_; -text: .text%__1cKcmpOpPOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cKTypeRawPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cMloadConINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cFArenaEgrow6MI_pv_; -text: .text%__1cMPhaseChaitinLinsert_proj6MpnFBlock_IpnENode_I_v_; -text: .text%__1cILoadNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJStoreNodeLbottom_type6kM_pknEType__; -text: .text%__1cIBoolNodeLbottom_type6kM_pknEType__: subnode.o; -text: .text%__1cNSafePointNodeSset_next_exception6Mp0_v_; -text: .text%__1cQaddP_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIHaltNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPCheckCastPPNodeGOpcode6kM_i_; -text: .text%__1cKStorePNodeGOpcode6kM_i_; -text: .text%__1cKRelocationLunpack_data6M_v_: relocInfo.o; -text: .text%__1cNflagsRegUOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cPcheckCastPPNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAddPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRInvocationCounterEinit6M_v_; -text: .text%__1cKNode_Array2t6MpnFArena__v_: block.o; -text: .text%__1cTconstantPoolOopDescNklass_name_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cXPhaseAggressiveCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cFBlockScall_catch_cleanup6MrnLBlock_Array__v_; -text: .text%__1cObranchConUNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cTconstantPoolOopDescRname_ref_index_at6Mi_i_; -text: .text%__1cIAddINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cHRetNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cKRegionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstorePNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMObjectLocker2T6M_v_; -text: .text%__1cOcompI_iRegNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cICallNodeIIdentity6MpnOPhaseTransform__pnENode__: callnode.o; -text: .text%__1cMURShiftINodeGOpcode6kM_i_; -text: .text%__1cRmethodDataOopDescPinitialize_data6MpnOBytecodeStream_i_i_; -text: .text%__1cNRelocIteratorKset_limits6MpC1_v_; -text: .text%__1cIRootNodeGOpcode6kM_i_; -text: .text%__1cOloadConI13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cILoadNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cTCreateExceptionNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFStateM_sub_Op_ConI6MpknENode__v_; -text: .text%__1cPcheckCastPPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cISubINodeGOpcode6kM_i_; -text: .text%__1cNbranchConNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJTypeTupleEmake6FIppknEType__pk0_; -text: .text%__1cJTypeTupleGfields6FI_ppknEType__; -text: .text%__1cENodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLSymbolTableJbasic_add6MipCiIpnGThread__pnNsymbolOopDesc__; -text: .text%__1cLsymbolKlassPallocate_symbol6MpCipnGThread__pnNsymbolOopDesc__; -text: .text%__1cSinstanceKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cRAbstractAssemblerEbind6MrnFLabel__v_; -text: .text%__1cKbranchNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cHPhiNodeIadr_type6kM_pknHTypePtr__: cfgnode.o; -text: .text%__1cHAddNodeEhash6kM_I_; -text: .text%__1cENodeRdisconnect_inputs6Mp0_i_; -text: .text%__1cPsplit_flow_path6FpnIPhaseGVN_pnHPhiNode__pnENode__: cfgnode.o; -text: .text%__1cSaddI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJFieldTypeKbasic_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cHConNodeEhash6kM_I_; -text: .text%__1cLLShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cOMachReturnNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cNidealize_test6FpnIPhaseGVN_pnGIfNode__3_: ifnode.o; -text: .text%__1cITypeNodeHsize_of6kM_I_; -text: .text%__1cNSafePointNodeLbottom_type6kM_pknEType__: callnode.o; -text: .text%__1cTconstantPoolOopDescSklass_at_if_loaded6FnSconstantPoolHandle_i_pnMklassOopDesc__; -text: .text%__1cJloadINodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_GetClassModifiers; -text: .text%__1cJCodeCacheJfind_blob6Fpv_pnICodeBlob__; -text: .text%__1cNSafePointNodeOnext_exception6kM_p0_; -text: .text%JVM_GetClassAccessFlags; -text: .text%__1cLklassItable2t6MnTinstanceKlassHandle__v_; -text: .text%__1cIsplit_if6FpnGIfNode_pnMPhaseIterGVN__pnENode__: ifnode.o; -text: .text%__1cHTypeAryEhash6kM_i_; -text: .text%__1cPfieldDescriptorKinitialize6MpnMklassOopDesc_i_v_; -text: .text%__1cJMultiNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cJCProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPPerfLongVariantGsample6M_v_; -text: .text%__1cJStoreNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMPhaseChaitinMyank_if_dead6MpnENode_pnFBlock_pnJNode_List_6_i_; -text: .text%__1cJCatchNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIMachOperNconstant_disp6kM_i_; -text: .text%__1cIMachOperFscale6kM_i_; -text: .text%__1cENode2t6Mp0111_v_; -text: .text%__1cFPhase2t6Mn0ALPhaseNumber__v_; -text: .text%__1cNCompileBrokerLmaybe_block6F_v_; -text: .text%__1cFBlockOcode_alignment6M_I_; -text: .text%__1cNinstanceKlassGitable6kM_pnLklassItable__; -text: .text%__1cLciSignatureLreturn_type6kM_pnGciType__; -text: .text%__1cFStateM_sub_Op_RegP6MpknENode__v_; -text: .text%JVM_GetCPMethodSignatureUTF; -text: .text%__1cFChunkJnext_chop6M_v_; -text: .text%__1cMMergeMemNodeEhash6kM_I_; -text: .text%__1cKSchedulingbFComputeRegisterAntidependencies6MpnFBlock__v_; -text: .text%__1cKSchedulingPComputeUseCount6MpknFBlock__v_; -text: .text%__1cHTypePtrHget_con6kM_i_; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceKlass.o; -text: .text%__1cIMachNodePcompute_padding6kMi_i_: ad_sparc.o; -text: .text%__1cIMachNodeSalignment_required6kM_i_: ad_sparc.o; -text: .text%__1cMPhaseChaitinSget_spillcopy_wide6MpnENode_2I_2_; -text: .text%__1cYDebugInformationRecorderTcreate_scope_values6MpnNGrowableArray4CpnKScopeValue____pnKDebugToken__; -text: .text%__1cWstatic_stub_RelocationLunpack_data6M_v_; -text: .text%__1cQaddI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cObranchConUNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFBlockJfind_node6kMpknENode__I_; -text: .text%__1cUArgumentSizeComputerDset6MinJBasicType__v_: frame.o; -text: .text%__1cHCmpNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNCollectedHeapXallocate_from_tlab_slow6FpnGThread_I_pnIHeapWord__; -text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_; -text: .text%__1cHTypePtrEhash6kM_i_; -text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cWThreadLocalAllocBufferEfill6MpnIHeapWord_2I_v_; -text: .text%__1cUParallelScavengeHeapRallocate_new_tlab6MI_pnIHeapWord__; -text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; -text: .text%__1cFBlockLfind_remove6MpknENode__v_; -text: .text%__1cIIndexSetJlrg_union6MIIkIpknIPhaseIFG_rknHRegMask__I_; -text: .text%__1cKMemBarNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cUcompI_iReg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverbAcheck_method_accessability6FnLKlassHandle_11nMmethodHandle_pnGThread__v_; -text: .text%__1cNObjectMonitorEexit6MpnGThread__v_; -text: .text%__1cIimmPOperEtype6kM_pknEType__: ad_sparc_clone.o; -text: .text%__1cMloadConPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cLMachNopNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadINodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadRangeNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cVCompressedWriteStream2t6Mi_v_; -text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; -text: .text%__1cENodeKreplace_by6Mp0_v_; -text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cMMergeMemNodePiteration_setup6Mpk0_v_; -text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cRMachSpillCopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKRegionNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJStoreNodeEhash6kM_I_; -text: .text%__1cSaddP_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQaddI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitJclone_map6M_pnNSafePointNode__; -text: .text%__1cKIfTrueNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRMemBarReleaseNodeGOpcode6kM_i_; -text: .text%__1cKbranchNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMachOperIconstant6kM_i_; -text: .text%__1cWMutableSpaceUsedHelperLtake_sample6M_x_: spaceCounters.o; -text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; -text: .text%__1cRPSOldPromotionLABFflush6M_v_; -text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__; -text: .text%__1cPcompP_iRegPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLBoxLockNodeGOpcode6kM_i_; -text: .text%__1cIciObjectJset_ident6MI_v_; -text: .text%__1cKJNIHandlesKmake_local6FpnHoopDesc__pnI_jobject__; -text: .text%__1cKTypeRawPtrEhash6kM_i_; -text: .text%__1cIBoolNodeKmatch_edge6kMI_I_: subnode.o; -text: .text%__1cMMergeMemNodePset_base_memory6MpnENode__v_; -text: .text%__1cLIfFalseNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cCosPelapsed_counter6F_x_; -text: .text%__1cGBitMapOset_difference6M0_v_; -text: .text%__1cNSafePointNodeEjvms6kM_pnIJVMState__: callnode.o; -text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cMMergeMemNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_GetMethodIxLocalsCount; -text: .text%__1cNloadRangeNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_CurrentThread; -text: .text%__1cENodeHget_ptr6kM_i_; -text: .text%__1cRcmpFastUnlockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIAndINodeGOpcode6kM_i_; -text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cENodeHins_req6MIp0_v_; -text: .text%__1cMPhaseChaitinFUnion6MpknENode_3_v_; -text: .text%__1cMloadConLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHAddNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKRelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cKstoreINodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOFastUnlockNodeGOpcode6kM_i_; -text: .text%__1cITypeNodeDcmp6kMrknENode__I_; -text: .text%__1cIHaltNodeLbottom_type6kM_pknEType__; -text: .text%__1cKstorePNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKcmpOpUOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLstoreI0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIciObject2t6MnGHandle__v_; -text: .text%__1cNSafePointNodeKmatch_edge6kMI_I_; -text: .text%__1cIMachOperOindex_position6kM_i_; -text: .text%__1cXmembar_release_lockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJVectorSet2L6MI_rnDSet__; -text: .text%__1cOcompU_iRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMMergeMemNodeJmemory_at6kMI_pnENode__; -text: .text%__1cSaddP_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPindOffset13OperNconstant_disp6kM_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperFscale6kM_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperNbase_position6kM_i_: ad_sparc.o; -text: .text%__1cWShouldNotReachHereNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPciObjectFactoryRcreate_new_object6MpnHoopDesc__pnIciObject__; -text: .text%__1cUcompI_iReg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVcompP_iRegP_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddP_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddP_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_; -text: .text%__1cIJVMStateIof_depth6kMi_p0_; -text: .text%__1cNSharedRuntimeElrem6Fxx_x_; -text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cMciMethodDataLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cRMemBarAcquireNodeGOpcode6kM_i_; -text: .text%__1cKo0RegPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cSaddI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cObranchConUNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJVectorSet2t6MpnFArena__v_; -text: .text%__1cKTypeAryPtrFxmeet6kMpknEType__3_; -text: .text%__1cVcompP_iRegP_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRSignatureIteratorSiterate_parameters6MX_v_; -text: .text%__1cICallNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cJTraceTime2T6M_v_; -text: .text%__1cITypeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPcheckCastPPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKMemBarNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSconstMethodOopDescZset_inlined_tables_length6Miii_v_; -text: .text%__1cNmethodOopDescbAcompute_size_of_parameters6MpnGThread__v_; -text: .text%__1cSconstMethodOopDescLobject_size6Fiiii_i_; -text: .text%__1cLmethodKlassIallocate6MnRconstMethodHandle_nLAccessFlags_pnGThread__pnNmethodOopDesc__; -text: .text%__1cMMergeMemNodeNset_memory_at6MIpnENode__v_; -text: .text%__1cLstoreI0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNSignatureInfoHdo_void6M_v_: bytecode.o; -text: .text%__1cQaddI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENode2t6Mp01_v_; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cKstoreINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRshrI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFStateM_sub_Op_AddP6MpknENode__v_; -text: .text%__1cTCreateExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cITypeFuncEhash6kM_i_; -text: .text%__1cLBoxLockNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMTypeKlassPtrEhash6kM_i_; -text: .text%__1cMCallLeafNodeGOpcode6kM_i_; -text: .text%__1cSCallLeafDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHPhiNodeEmake6FpnENode_2pknEType_pknHTypePtr__p0_; -text: .text%__1cOcompU_iRegNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJiRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNflagsRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cHOrINodeGOpcode6kM_i_; -text: .text%__1cXmembar_acquire_lockNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%JVM_GetCPMethodClassNameUTF; -text: .text%__1cMloadConDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMflagsRegOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLProfileDataPfollow_contents6M_v_: ciMethodData.o; -text: .text%__1cLProfileDataPadjust_pointers6M_v_: ciMethodData.o; -text: .text%__1cFStateM_sub_Op_RegI6MpknENode__v_; -text: .text%__1cKklassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cFKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cJMarkSweepXrevisit_weak_klass_link6FpnFKlass__v_; -text: .text%__1cKklassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cWconstantPoolCacheKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cHCompileYout_preserve_stack_slots6F_I_; -text: .text%__1cIGraphKitLclean_stack6Mi_v_; -text: .text%__1cKStoreBNodeGOpcode6kM_i_; -text: .text%__1cLklassVtableToop_adjust_pointers6M_v_; -text: .text%__1cLklassVtableToop_follow_contents6M_v_; -text: .text%__1cSconstMethodOopDescbBcompressed_linenumber_table6kM_pC_; -text: .text%__1cJlabelOperFlabel6kM_pnFLabel__: ad_sparc.o; -text: .text%__1cLciSignatureHtype_at6kMi_pnGciType__; -text: .text%__1cIMachNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cIMachOperMdisp_as_type6kM_pknHTypePtr__: ad_sparc.o; -text: .text%__1cRshlI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_IsNaN; -text: .text%__1cNloadRangeNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKbranchNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJStartNodeGOpcode6kM_i_; -text: .text%__1cQregF_to_stkINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeDcmp6kMrk0_I_; -text: .text%__1cHTypeIntFxdual6kM_pknEType__; -text: .text%__1cMmerge_region6FpnKRegionNode_pnIPhaseGVN__pnENode__: cfgnode.o; -text: .text%__1cJAssemblerOpatched_branch6Fiii_i_; -text: .text%__1cJAssemblerSbranch_destination6Fii_i_; -text: .text%__1cRshlI_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENodeIadd_prec6Mp0_v_; -text: .text%__1cLBoxLockNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPSignatureStreamJas_symbol6MpnGThread__pnNsymbolOopDesc__; -text: .text%__1cSaddP_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWMachCallStaticJavaNodePret_addr_offset6M_i_; -text: .text%__1cITypeFuncEmake6FpknJTypeTuple_3_pk0_; -text: .text%__1cMloadConDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSCallLeafDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKTypeOopPtrHget_con6kM_i_; -text: .text%__1cQsubI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIRootNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJloadLNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverZcheck_field_accessability6FnLKlassHandle_11rnPfieldDescriptor_pnGThread__v_; -text: .text%__1cJLoadBNodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapHinterp16MpnOBytecodeStream__v_; -text: .text%__1cSvframeStreamCommonEnext6M_v_; -text: .text%__1cIAddINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cIRootNodeNis_block_proj6kM_pknENode__: classes.o; -text: .text%__1cMMergeMemNode2t6MpnENode__v_; -text: .text%__1cOcompI_iRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRMachSafePointNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cJloadINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPindOffset13OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cICmpPNodeDsub6kMpknEType_3_3_; -text: .text%__1cHMemNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cIGraphKitQkill_dead_locals6M_v_; -text: .text%__1cCosMvm_page_size6F_i_; -text: .text%__1cRlock_ptr_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cVcompP_iRegP_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUcompI_iReg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_: bytecode.o; -text: .text%__1cRconstantPoolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNinstanceKlassUadjust_static_fields6M_v_; -text: .text%__1cRconstantPoolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLklassItableToop_adjust_pointers6M_v_; -text: .text%__1cNinstanceKlassUfollow_static_fields6M_v_; -text: .text%__1cLklassItableToop_follow_contents6M_v_; -text: .text%__1cSinstanceKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNinstanceKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cSinstanceKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNSafePointNodeGOpcode6kM_i_; -text: .text%__1cJLoadPNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMPhaseChaitinPset_was_spilled6MpnENode__v_; -text: .text%__1cYDebugInformationRecorderVcreate_monitor_values6MpnNGrowableArray4CpnMMonitorValue____pnKDebugToken__; -text: .text%__1cMloadConPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIGraphKit2t6MpnIJVMState__v_; -text: .text%__1cPconvI2L_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQPreserveJVMState2T6M_v_; -text: .text%__1cRshrI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cTCreateExceptionNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cXmembar_release_lockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMloadConLNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvI2LNodeGOpcode6kM_i_; -text: .text%__1cITypeLongFxmeet6kMpknEType__3_; -text: .text%__1cNinstanceKlassKinitialize6MpnGThread__v_; -text: .text%__1cFParseMmerge_common6Mpn0AFBlock_i_v_; -text: .text%__1cPciInstanceKlassYunique_concrete_subklass6M_p0_; -text: .text%__1cLBoxLockNodeHsize_of6kM_I_; -text: .text%__1cOPhaseIdealLoopIset_idom6MpnENode_2I_v_; -text: .text%JVM_GetCPFieldClassNameUTF; -text: .text%__1cSaddI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNLoadKlassNodeGOpcode6kM_i_; -text: .text%__1cRcmpFastUnlockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__; -text: .text%__1cFciEnvSget_field_by_index6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cOcompI_iRegNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshlI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; -text: .text%__1cICmpINodeDsub6kMpknEType_3_3_; -text: .text%__1cLRShiftINodeGOpcode6kM_i_; -text: .text%__1cOtypeArrayKlassSallocate_permanent6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cSCallLeafDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPcheckCastPPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOPhaseIdealLoopQconditional_move6MpnENode__2_; -text: .text%__1cJStoreNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cITypeFuncEmake6FpnIciMethod__pk0_; -text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_; -text: .text%__1cJloadSNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKStoreCNodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_; -text: .text%__1cMstringStreamFwrite6MpkcI_v_; -text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__; -text: .text%__1cHRetNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPcmpFastLockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverMresolve_pool6FrnLKlassHandle_rnMsymbolHandle_42nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoolHandle_inJBytecodesECode_pnGThread__v_; -text: .text%__1cIBoolNodeJideal_reg6kM_I_: subnode.o; -text: .text%__1cHCmpNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRloadConP_pollNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLstoreI0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMloadConPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; -text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cPcompP_iRegPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNloadRangeNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCatchProjNodeLbottom_type6kM_pknEType__: cfgnode.o; -text: .text%__1cNCatchProjNodeHsize_of6kM_I_: cfgnode.o; -text: .text%__1cFStateK_sub_Op_If6MpknENode__v_; -text: .text%__1cTciConstantPoolCacheDget6Mi_pv_; -text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cQsubI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cXmembar_acquire_lockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPCountedLoopNodeGOpcode6kM_i_; -text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cIAndLNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitOset_all_memory6MpnENode__v_; -text: .text%__1cQSystemDictionarybEresolve_instance_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_; -text: .text%__1cFParseFBlockKinit_graph6Mp0_v_; -text: .text%__1cMTypeKlassPtrEmake6FnHTypePtrDPTR_pnHciKlass_i_pk0_; -text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__; -text: .text%__1cCosGmalloc6FI_pv_; -text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cIGraphKitTadd_exception_state6MpnNSafePointNode__v_; -text: .text%__1cIimmPOperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cIregDOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cKstoreINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cICodeHeapLheader_size6F_I_; -text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; -text: .text%__1cNloadRangeNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParseMdo_one_block6M_v_; -text: .text%__1cOPhaseIdealLoopRregister_new_node6MpnENode_2_v_; -text: .text%__1cLstoreB0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAddINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIJVMStateLdebug_depth6kM_I_; -text: .text%__1cENodeNadd_req_batch6Mp0I_v_; -text: .text%__1cKciTypeFlowLStateVectorOpush_translate6MpnGciType__v_; -text: .text%__1cJloadFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPVirtualCallDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cIMachNodeOpipeline_class6F_pknIPipeline__; -text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cIPhaseGVNUtransform_no_reclaim6MpnENode__2_; -text: .text%__1cIAddLNodeGOpcode6kM_i_; -text: .text%__1cLLShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOMethodLivenessKBasicBlockJpropagate6Mp0_v_; -text: .text%__1cKciTypeFlowGJsrSet2t6MpnFArena_i_v_; -text: .text%__1cHMatcherKmatch_sfpt6MpnNSafePointNode__pnIMachNode__; -text: .text%__1cMFastLockNodeGOpcode6kM_i_; -text: .text%__1cLConvL2INodeGOpcode6kM_i_; -text: .text%__1cIXorINodeGOpcode6kM_i_; -text: .text%__1cMVirtualSpaceOcommitted_size6kM_I_; -text: .text%__1cOcompU_iRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPorI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKTypeAryPtrFklass6kM_pnHciKlass__; -text: .text%__1cIGraphKitbDtransfer_exceptions_into_jvms6M_pnIJVMState__; -text: .text%__1cLTypeInstPtrFxdual6kM_pknEType__; -text: .text%__1cNLoadRangeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFBlockKsched_call6MrnHMatcher_rnLBlock_Array_IrnJNode_List_pipnMMachCallNode_rnJVectorSet__I_; -text: .text%__1cSsafePoint_pollNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cILoadNodeHsize_of6kM_I_; -text: .text%__1cRInterpretedRFrameKtop_method6kM_nMmethodHandle__: rframe.o; -text: .text%__1cIGraphKitJsync_jvms6kM_pnIJVMState__; -text: .text%__1cICmpUNodeDsub6kMpknEType_3_3_; -text: .text%__1cEUTF8Hstrrchr6FpWiW_1_; -text: .text%__1cPcompP_iRegPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPsp_ptr_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_; -text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cRshrP_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLBoxLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cITypeLongEmake6Fxxi_pk0_; -text: .text%__1cNloadKlassNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_GetCPMethodNameUTF; -text: .text%__1cMtlsLoadPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreB0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIimmIOperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cNSharedRuntimeEldiv6Fxx_x_; -text: .text%__1cHBitDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cURethrowExceptionNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cQsubI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQaddP_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKmethodOperGmethod6kM_i_: ad_sparc.o; -text: .text%__1cFKlassIsubklass6kM_p0_; -text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_: frame.o; -text: .text%__1cTconstantPoolOopDescOstring_at_impl6FnSconstantPoolHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_; -text: .text%__1cIMulLNodeGOpcode6kM_i_; -text: .text%__1cKReturnNodeKmatch_edge6kMI_I_; -text: .text%__1cGOopMap2t6Mii_v_; -text: .text%__1cNloadConP0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJLoadSNodeGOpcode6kM_i_; -text: .text%__1cLPCTableNodeLbottom_type6kM_pknEType__; -text: .text%__1cKBranchDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cMCreateExNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cRloadConP_pollNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_; -text: .text%__1cRcmpFastUnlockNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJLoadLNodeGOpcode6kM_i_; -text: .text%__1cMciMethodDataLhas_trap_at6MpnLProfileData_i_i_; -text: .text%__1cPThreadLocalNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKReturnNodeGOpcode6kM_i_; -text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__; -text: .text%__1cNflagsRegUOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMloadConINodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cNCatchProjNodeEhash6kM_I_; -text: .text%__1cEUTF8Ounicode_length6Fpkci_i_; -text: .text%__1cHCompileTProcess_OopMap_Node6MpnIMachNode_i_v_; -text: .text%__1cNCallGenerator2t6MpnIciMethod__v_; -text: .text%__1cKCompiledIC2t6MpnKRelocation__v_; -text: .text%__1cKCompiledICOic_destination6kM_pC_; -text: .text%__1cHTypeAryFxmeet6kMpknEType__3_; -text: .text%__1cICallNodeJideal_reg6kM_I_: callnode.o; -text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_; -text: .text%__1cPmethodDataKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cKciTypeFlowQadd_to_work_list6Mpn0AFBlock__v_; -text: .text%__1cKciTypeFlowKflow_block6Mpn0AFBlock_pn0ALStateVector_pn0AGJsrSet__v_; -text: .text%__1cEUTF8Enext6FpkcpH_pc_; -text: .text%__1cJVectorSetFClear6M_v_; -text: .text%__1cHCompileSflatten_alias_type6kMpknHTypePtr__3_; -text: .text%__1cCosEfree6Fpv_v_; -text: .text%__1cRshrI_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPcmpFastLockNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cYciExceptionHandlerStreamFcount6M_i_; -text: .text%__1cKciTypeFlowFBlockScompute_exceptions6M_v_; -text: .text%__1cIPhaseIFGFUnion6MII_v_; -text: .text%__1cYCallStaticJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cILoopNodeGOpcode6kM_i_; -text: .text%__1cICmpLNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopGspinup6MpnENode_2222pnLsmall_cache__2_; -text: .text%__1cQaddI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMindIndexOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cIConLNodeGOpcode6kM_i_; -text: .text%JVM_GetCPFieldSignatureUTF; -text: .text%__1cENodeLnonnull_req6kM_p0_; -text: .text%__1cYCallStaticJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYCallStaticJavaDirectNodeKmethod_set6Mi_v_; -text: .text%__1cMelapsedTimerFstart6M_v_; -text: .text%__1cMelapsedTimerEstop6M_v_; -text: .text%__1cMURShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSaddP_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOPhaseIdealLoopOfind_use_block6MpnENode_22222_2_; -text: .text%__1cOPhaseIdealLoopKhandle_use6MpnENode_2pnLsmall_cache_22222_v_; -text: .text%jni_DeleteLocalRef: jni.o; -text: .text%__1cIGraphKit2t6M_v_; -text: .text%__1cMoutputStreamDput6Mc_v_; -text: .text%__1cIGraphKitNset_map_clone6MpnNSafePointNode__v_; -text: .text%__1cRInterpretedRFrameEinit6M_v_; -text: .text%__1cHMulNodeEhash6kM_I_; -text: .text%__1cENodeJset_req_X6MIp0pnMPhaseIterGVN__v_; -text: .text%__1cJLoadINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cINodeHashLhash_insert6MpnENode__v_; -text: .text%__1cKstoreCNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeLbottom_type6kM_pknEType__; -text: .text%__1cKJNIHandlesKmake_local6FpnGThread_pnHoopDesc__pnI_jobject__; -text: .text%__1cKstoreCNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIAddPNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nGHandle__; -text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cKMemBarNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cGvframe2t6MpknFframe_pknLRegisterMap_pnKJavaThread__v_; -text: .text%__1cLRegisterMap2t6Mpk0_v_; -text: .text%__1cXmembar_acquire_lockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcompI_iRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIciSymbolEmake6Fpkc_p0_; -text: .text%__1cPorI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cGPcDesc2t6Miii_v_; -text: .text%__1cHCompileKalias_type6MpnHciField__pn0AJAliasType__; -text: .text%__1cGvframeKnew_vframe6FpknFframe_pknLRegisterMap_pnKJavaThread__p0_; -text: .text%__1cPconvI2L_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMtlsLoadPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cYcompareAndSwapL_boolNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAddINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIciMethodRget_flow_analysis6M_pnKciTypeFlow__; -text: .text%__1cWCallLeafNoFPDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmembar_acquireNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKbranchNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cKbranchNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOloadConI13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSaddL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%jni_GetObjectField: jni.o; -text: .text%__1cSMemBarCPUOrderNodeGOpcode6kM_i_; -text: .text%__1cJFieldTypeOget_array_info6FpnNsymbolOopDesc_pip2pnGThread__nJBasicType__; -text: .text%__1cQandL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cWstatic_stub_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cQaddL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadKlassNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPmethodDataKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cPmethodDataKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cJloadBNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cYcompareAndSwapL_boolNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRMachNullCheckNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cOPhaseIdealLoopIsink_use6MpnENode_2_v_; -text: .text%__1cIGraphKitOreplace_in_map6MpnENode_2_v_; -text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cHCompileKTracePhase2T6M_v_; -text: .text%__1cMPhaseChaitinLclone_projs6MpnFBlock_IpnENode_4rI_i_; -text: .text%__1cIJVMState2t6MpnIciMethod_p0_v_; -text: .text%__1cIHaltNode2t6MpnENode_2_v_; -text: .text%__1cLOptoRuntimeSuncommon_trap_Type6F_pknITypeFunc__; -text: .text%__1cJloadLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSsafePoint_pollNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cINodeHashJhash_find6MpknENode__p1_; -text: .text%__1cQmulL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOMethodLivenessKBasicBlock2t6Mp0ii_v_; -text: .text%__1cOMethodLivenessKBasicBlockQcompute_gen_kill6MpnIciMethod__v_; -text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; -text: .text%__1cJTypeTupleKmake_range6FpnLciSignature__pk0_; -text: .text%__1cJTypeTupleLmake_domain6FpnPciInstanceKlass_pnLciSignature__pk0_; -text: .text%__1cSmembar_acquireNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMWarmCallInfoKalways_hot6F_p0_; -text: .text%__1cTCreateExceptionNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreB0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMtlsLoadPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLBoxLockNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cITypeLongEmake6Fx_pk0_; -text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; -text: .text%__1cKimmI13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cJloadBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIGraphKitZadd_exception_states_from6MpnIJVMState__v_; -text: .text%__1cMPhaseChaitinNFind_compress6MpknENode__I_; -text: .text%__1cQSystemDictionaryEfind6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cHPhiNodeEmake6FpnENode_2_p0_; -text: .text%__1cNCatchProjNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cWCallLeafNoFPDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIciMethodTcall_profile_at_bci6Mi_nNciCallProfile__; -text: .text%__1cIProjNodeDcmp6kMrknENode__I_; -text: .text%__1cLklassVtableIindex_of6kMpnNmethodOopDesc_i_i_; -text: .text%__1cFParseMprofile_call6MpnENode__v_; -text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__; -text: .text%__1cIGraphKitWround_double_arguments6MpnIciMethod__v_; -text: .text%__1cIGraphKitTround_double_result6MpnIciMethod__v_; -text: .text%__1cFParseHdo_call6M_v_; -text: .text%__1cNloadConP0NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cHMulNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMPhaseIterGVNJtransform6MpnENode__2_; -text: .text%__1cSsafePoint_pollNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadSNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKarrayKlassLobject_size6kMi_i_; -text: .text%__1cKMemBarNodeEhash6kM_I_; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceKlass.o; -text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; -text: .text%__1cMURShiftLNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitUmake_exception_state6MpnENode__pnNSafePointNode__; -text: .text%__1cLProfileDataOtranslate_from6Mp0_v_: ciMethodData.o; -text: .text%__1cRsarI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLBuildCutout2t6MpnIGraphKit_pnENode_ff_v_; -text: .text%__1cTCompareAndSwapLNodeGOpcode6kM_i_; -text: .text%__1cQxorI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMMergeMemNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNflagsRegLOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cQsubI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKarrayKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cRshrI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQCallLeafNoFPNodeGOpcode6kM_i_; -text: .text%__1cMURShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFStateM_sub_Op_ConP6MpknENode__v_; -text: .text%__1cIGraphKitMsaved_ex_oop6FpnNSafePointNode__pnENode__; -text: .text%__1cISubINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPciInstanceKlassFsuper6M_p0_; -text: .text%__1cIBoolNodeHsize_of6kM_I_; -text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_: objArrayKlassKlass.o; -text: .text%__1cPcompP_iRegPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadPNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; -text: .text%__1cNSignatureInfoGdo_int6M_v_: bytecode.o; -text: .text%__1cOstackSlotLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKInlineTreeMok_to_inline6MpnIciMethod_pnIJVMState_rnNciCallProfile_pnMWarmCallInfo__8_; -text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__; -text: .text%__1cICodeHeapSallocated_capacity6kM_I_; -text: .text%__1cICHeapObj2n6FI_pv_; -text: .text%__1cQsubL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cWCallLeafNoFPDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFTypeDEhash6kM_i_; -text: .text%__1cKTypeRawPtrHget_con6kM_i_; -text: .text%__1cJStartNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%jni_ExceptionOccurred: jni.o; -text: .text%__1cKciTypeFlowLStateVectorStype_meet_internal6FpnGciType_3p0_3_; -text: .text%__1cMloadConINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGIfNodeHsize_of6kM_I_: classes.o; -text: .text%__1cPconvL2I_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIimmLOperJconstantL6kM_x_: ad_sparc_clone.o; -text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%__1cSHighResTimeSamplerLtake_sample6M_x_: statSampler.o; -text: .text%__1cHCompileFstart6kM_pnJStartNode__; -text: .text%__1cPStatSamplerTaskEtask6M_v_: statSampler.o; -text: .text%__1cMPeriodicTaskOreal_time_tick6FI_v_; -text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cIParmNodeJideal_reg6kM_I_; -text: .text%__1cQandL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMachNodeRget_base_and_disp6kMrirpknHTypePtr__pknENode__; -text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cIregFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cRbranchLoopEndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cGRFrame2t6MnFframe_pnKJavaThread_kp0_v_; -text: .text%jni_GetArrayLength: jni.o; -text: .text%__1cPciInstanceKlassUget_canonical_holder6Mi_p0_; -text: .text%__1cJloadLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOClearArrayNodeGOpcode6kM_i_; -text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; -text: .text%__1cVCompressedWriteStreamEgrow6M_v_; -text: .text%JVM_Write; -text: .text%__1cLciSignature2t6MpnHciKlass_pnIciSymbol__v_; -text: .text%__1cIciMethod2t6MnMmethodHandle__v_; -text: .text%__1cIHaltNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cWShouldNotReachHereNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOpaque1NodeGOpcode6kM_i_; -text: .text%__1cSbranchCon_longNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKstoreCNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHAddNodePadd_of_identity6kMpknEType_3_3_; -text: .text%__1cUcompU_iReg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_RawMonitorEnter; -text: .text%JVM_RawMonitorExit; -text: .text%__1cOMachReturnNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cMTypeKlassPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cWShouldNotReachHereNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcmpFastLockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cETypeRget_typeflow_type6FpnGciType__pk0_; -text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; -text: .text%__1cRcmpFastUnlockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: classFileParser.o; -text: .text%__1cURethrowExceptionNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; -text: .text%__1cNSignatureInfoHdo_bool6M_v_: bytecode.o; -text: .text%__1cSandI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIAddINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cLTypeInstPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cMloadConLNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cFParseFmerge6Mi_v_; -text: .text%__1cNSafePointNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJTypeTupleFxdual6kM_pknEType__; -text: .text%__1cNLoadKlassNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLRethrowNodeGOpcode6kM_i_; -text: .text%__1cJloadSNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cICodeHeapIcapacity6kM_I_; -text: .text%__1cMCodeHeapPoolNused_in_bytes6M_I_: memoryPool.o; -text: .text%__1cPcmpFastLockNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cFArena2T6M_v_; -text: .text%__1cKMemBarNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cOCallRelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cHoopDescSslow_identity_hash6M_i_; -text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__i_; -text: .text%__1cLPCTableNodeEhash6kM_I_; -text: .text%__1cHConNodeLout_RegMask6kM_rknHRegMask__: classes.o; -text: .text%__1cXPhaseAggressiveCoalesceYinsert_copy_with_overlap6MpnFBlock_pnENode_II_v_; -text: .text%__1cOloadConI13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMtlsLoadPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMPhaseChaitinNFind_compress6MI_I_; -text: .text%__1cMindIndexOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFStateN_sub_Op_LoadP6MpknENode__v_; -text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; -text: .text%__1cNGCTaskManagerIget_task6MI_pnGGCTask__; -text: .text%__1cLGCTaskQdDueueGremove6M_pnGGCTask__; -text: .text%__1cLGCTaskQdDueueHenqueue6MpnGGCTask__v_; -text: .text%__1cNGCTaskManagerPnote_completion6MI_v_; -text: .text%__1cQandI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIGraphKitHjava_bc6kM_nJBytecodesECode__; -text: .text%__1cIGraphKitNbuiltin_throw6MnODeoptimizationLDeoptReason_pnENode__v_; -text: .text%__1cOGenerateOopMapHget_var6Mi_nNCellTypeState__; -text: .text%__1cRinterpretedVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%jni_GetSuperclass: jni.o; -text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; -text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; -text: .text%__1cIMulINodeGOpcode6kM_i_; -text: .text%__1cRcompL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNloadKlassNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGGCTask2t6M_v_; -text: .text%__1cJloadSNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIJumpDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cObranchConPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cITypeFuncFxdual6kM_pknEType__; -text: .text%__1cFStateM_sub_Op_CmpI6MpknENode__v_; -text: .text%__1cJcmpOpOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cGciType2t6MnLKlassHandle__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle__v_; -text: .text%__1cMindirectOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cSPSPromotionManagerbBgc_thread_promotion_manager6Fi_p0_; -text: .text%__1cQxorI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadLNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIregFOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cKcmpOpPOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cNloadKlassNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHPhiNodeMslice_memory6kMpknHTypePtr__p0_; -text: .text%__1cPCheckCastPPNodeJideal_reg6kM_I_: connode.o; -text: .text%__1cObranchConPNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cObranchConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICHeapObj2k6Fpv_v_; -text: .text%__1cSaddL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRmethodDataOopDescJbci_to_dp6Mi_pC_; -text: .text%__1cMloadConFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cFArena2t6M_v_; -text: .text%__1cRInterpreterOopMapLiterate_oop6MpnNOffsetClosure__v_; -text: .text%__1cRInterpreterOopMap2T6M_v_; -text: .text%__1cLOopMapCacheGlookup6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cNinstanceKlassImask_for6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cNmethodOopDescImask_for6MipnRInterpreterOopMap__v_; -text: .text%__1cRInterpreterOopMap2t6M_v_; -text: .text%__1cISubINodeDsub6kMpknEType_3_3_; -text: .text%__1cFParseOreturn_current6MpnENode__v_; -text: .text%__1cRsarI_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMMonitorValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cMloadConLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJStoreNodeSIdeal_masked_input6MpnIPhaseGVN_I_pnENode__; -text: .text%jni_GetPrimitiveArrayCritical: jni.o; -text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; -text: .text%__1cPconvI2L_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; -text: .text%__1cSmembar_releaseNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJimmU5OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; -text: .text%__1cLOpaque1NodeEhash6kM_I_; -text: .text%__1cJStoreNodeZIdeal_sign_extended_input6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cSbranchCon_longNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapGppload6MpnNCellTypeState_i_v_; -text: .text%__1cSmembar_releaseNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNbranchConNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__; -text: .text%__1cZCallDynamicJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJMultiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKStoreLNodeGOpcode6kM_i_; -text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; -text: .text%__1cNloadKlassNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; -text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_; -text: .text%__1cRsarI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRbranchLoopEndNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreP0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLRethrowNodeKmatch_edge6kMI_I_; -text: .text%__1cFTypeFEhash6kM_i_; -text: .text%__1cFStateM_sub_Op_AddI6MpknENode__v_; -text: .text%__1cOParseGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cFParseQcreate_entry_map6M_pnNSafePointNode__; -text: .text%__1cFArenaEused6kM_I_; -text: .text%__1cFParseLbuild_exits6M_v_; -text: .text%__1cFParseIdo_exits6M_v_; -text: .text%__1cFParse2t6MpnIJVMState_pnIciMethod_f_v_; -text: .text%__1cIBoolNodeDcmp6kMrknENode__I_; -text: .text%__1cFParsePdo_method_entry6M_v_; -text: .text%__1cNCallGeneratorKfor_inline6FpnIciMethod_f_p0_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; -text: .text%__1cRciVirtualCallDataOtranslate_from6MpnLProfileData__v_; -text: .text%jni_IsSameObject: jni.o; -text: .text%__1cMloadConINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNbranchConNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cNbranchConNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQandL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIciObjectFklass6M_pnHciKlass__; -text: .text%__1cPThreadLocalNodeGOpcode6kM_i_; -text: .text%__1cZPhaseConservativeCoalesceKupdate_ifg6MIIpnIIndexSet_2_v_; -text: .text%__1cZPhaseConservativeCoalesceMunion_helper6MpnENode_2II222pnFBlock_I_v_; -text: .text%__1cOMethodLivenessKBasicBlockJstore_one6Mi_v_; -text: .text%__1cIIndexSetEswap6Mp0_v_; -text: .text%__1cHTypeAryEmake6FpknEType_pknHTypeInt__pk0_; -text: .text%__1cPClassFileParserbCverify_legal_class_modifiers6MipnGThread__v_; -text: .text%__1cKTypeAryPtrFxdual6kM_pknEType__; -text: .text%__1cLAccessFlagsPatomic_set_bits6Mi_v_; -text: .text%__1cQComputeCallStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cNinstanceKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cKstoreBNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKCastPPNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cKstorePNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOPhaseIdealLoopOsplit_thru_phi6MpnENode_2i_2_; -text: .text%__1cENodeGOpcode6kM_i_; -text: .text%__1cRshrP_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQandI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIciMethodbBinterpreter_call_site_count6Mi_i_; -text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%__1cTconstantPoolOopDescbDresolve_string_constants_impl6FnSconstantPoolHandle_pnGThread__v_; -text: .text%__1cHSubNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFChunk2n6FII_pv_; -text: .text%__1cTCallDynamicJavaNodeGOpcode6kM_i_; -text: .text%__1cKstoreBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cILoadNodeDcmp6kMrknENode__I_; -text: .text%__1cIciObject2t6M_v_; -text: .text%__1cSconstMethodOopDescZchecked_exceptions_length6kM_i_; -text: .text%__1cRcompL_reg_conNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHCompileXin_preserve_stack_slots6M_I_; -text: .text%__1cPciObjectFactoryUget_empty_methodData6M_pnMciMethodData__; -text: .text%__1cMciMethodData2t6M_v_; -text: .text%__1cHOrINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFframeLreal_sender6kMpnLRegisterMap__0_; -text: .text%__1cGRFrameGcaller6M_p0_; -text: .text%__1cPCheckCastPPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRshrP_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cXmembar_release_lockNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cJloadINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_: jni.o; -text: .text%__1cMloadConFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMCreateExNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQaddL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMCreateExNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cISubINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cFKlassQset_next_sibling6MpnMklassOopDesc__v_; -text: .text%__1cQdivD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNCatchProjNodeDcmp6kMrknENode__I_; -text: .text%__1cKTypeOopPtrEhash6kM_i_; -text: .text%__1cIMinINodeGOpcode6kM_i_; -text: .text%__1cMURShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKTypeRawPtrFxmeet6kMpknEType__3_; -text: .text%JVM_GetMethodIxModifiers; -text: .text%__1cIMulLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPconvI2L_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cTCreateExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_IsInterface; -text: .text%__1cPorI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIDivINodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_; -text: .text%__1cICodeHeapIallocate6MI_pv_; -text: .text%__1cICodeHeapPsearch_freelist6MI_pnJFreeBlock__; -text: .text%__1cLOpaque1NodeLbottom_type6kM_pknEType__: connode.o; -text: .text%__1cNloadRangeNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLRShiftLNodeGOpcode6kM_i_; -text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__; -text: .text%__1cSCountedLoopEndNodeKstride_con6kM_i_; -text: .text%__1cUPipeline_Use_Element2t6M_v_: output.o; -text: .text%__1cRshrL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHCompileSregister_intrinsic6MpnNCallGenerator__v_; -text: .text%__1cNSCMemProjNodeGOpcode6kM_i_; -text: .text%__1cNimmP_pollOperEtype6kM_pknEType__: ad_sparc_clone.o; -text: .text%__1cRloadConP_pollNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQinstanceRefKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOGenerateOopMapUreachable_basicblock6Fp0ipi_v_; -text: .text%__1cPciInstanceKlassLfind_method6MpnIciSymbol_2_pnIciMethod__; -text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_; -text: .text%__1cFciEnvRfind_system_klass6MpnIciSymbol__pnHciKlass__; -text: .text%__1cLRegisterMapIpd_clear6M_v_; -text: .text%__1cHUNICODEHas_utf86FpHi_pc_; -text: .text%__1cLstoreP0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cIGraphKitYcombine_exception_states6MpnNSafePointNode_2_v_; -text: .text%__1cQmulL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshrP_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; -text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; -text: .text%__1cKstoreLNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cRbranchLoopEndNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQConstantIntValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cSconvI2D_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; -text: .text%__1cUcompI_iReg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerNverify_thread6M_v_; -text: .text%__1cSbranchCon_longNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; -text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; -text: .text%__1cIAddLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFStateO_sub_Op_StoreI6MpknENode__v_; -text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cHciField2t6MpnPfieldDescriptor__v_; -text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_; -text: .text%__1cMloadConLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cYcompareAndSwapL_boolNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFKlassMnext_sibling6kM_p0_; -text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; -text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSobjArrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJimmU5OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLBlock_ArrayEgrow6MI_v_; -text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_; -text: .text%__1cKcmpOpPOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cObranchConPNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; -text: .text%__1cLBoxLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcmpFastLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHRetNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvL2I_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cbDcatch_cleanup_find_cloned_def6FpnFBlock_pnENode_1rnLBlock_Array_i_3_: lcm.o; -text: .text%__1cQxorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOClearArrayNodeKmatch_edge6kMI_I_; -text: .text%__1cPconvL2I_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadSNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_: universe.o; -text: .text%__1cFStateP_sub_Op_LShiftI6MpknENode__v_; -text: .text%__1cQandL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPSignatureStreamRas_symbol_or_null6M_pnNsymbolOopDesc__; -text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cIGraphKitbBset_arguments_for_java_call6MpnMCallJavaNode__v_; -text: .text%__1cIGraphKitJpush_node6MnJBasicType_pnENode__v_: callGenerator.o; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_: bytecode.o; -text: .text%__1cJcmpOpOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cMloadConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_SetObjectArrayElement: jni.o; -text: .text%__1cSandI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPThreadLocalNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNSafePointNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cObranchConUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRshlL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQandI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSandI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; -text: .text%__1cZresource_reallocate_bytes6FpcII_0_; -text: .text%__1cLConvL2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOAbstractICacheQinvalidate_range6FpCi_v_; -text: .text%__1cKstorePNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMaxINodeGOpcode6kM_i_; -text: .text%__1cTDirectCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cMWarmCallInfoLalways_cold6F_p0_; -text: .text%__1cIimmDOperJconstantD6kM_d_: ad_sparc_clone.o; -text: .text%__1cIPhaseIFGEinit6MI_v_; -text: .text%__1cJPhaseLiveHcompute6MI_v_; -text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cSaddI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFTypeDEmake6Fd_pk0_; -text: .text%__1cPThreadRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cPThreadRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cRshlI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQaddL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMloadConDNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cFStateN_sub_Op_LoadI6MpknENode__v_; -text: .text%__1cIMachOperEtype6kM_pknEType__; -text: .text%JVM_GetCPClassNameUTF; -text: .text%__1cKBufferBlobGcreate6Fpkci_p0_; -text: .text%__1cKcmpOpUOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cObranchConUNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cObranchConUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_GetStringLength: jni.o; -text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cLConvI2LNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJloadPNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cMoutputStream2t6Mi_v_; -text: .text%__1cMstringStreamJas_string6M_pc_; -text: .text%__1cMstringStream2T6M_v_; -text: .text%__1cMstringStream2t6MI_v_; -text: .text%__1cIGraphKitMreset_memory6M_pnENode__; -text: .text%__1cZCallDynamicJavaDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKstorePNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cENodeMsetup_is_top6M_v_; -text: .text%__1cIGotoNodeGOpcode6kM_i_; -text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; -text: .text%__1cNbranchConNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapLbb_mark_fct6Fp0ipi_v_; -text: .text%__1cKcmpOpPOperFequal6kM_i_: ad_sparc_clone.o; -text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_; -text: .text%__1cKReturnNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_; -text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_; -text: .text%__1cJloadINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmembar_releaseNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cSaddL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLRShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cEDict2t6MpFpkv2_ipF2_i_v_; -text: .text%__1cEDict2T6M_v_; -text: .text%__1cKBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cLOopRecorder2t6MpnFArena__v_; -text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__; -text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cIModINodeGOpcode6kM_i_; -text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_nMmethodHandle__v_; -text: .text%__1cKJavaThreadQlast_java_vframe6MpnLRegisterMap__pnKjavaVFrame__; -text: .text%__1cTStackWalkCompPolicyVfindTopInlinableFrame6MpnNGrowableArray4CpnGRFrame____2_; -text: .text%__1cTStackWalkCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; -text: .text%__1cISubLNodeGOpcode6kM_i_; -text: .text%__1cKciTypeFlow2t6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cKciTypeFlowPget_start_state6M_pkn0ALStateVector__; -text: .text%__1cKciTypeFlowHdo_flow6M_v_; -text: .text%__1cKciTypeFlowKflow_types6M_v_; -text: .text%__1cKciTypeFlowKmap_blocks6M_v_; -text: .text%__1cMloadConPNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPoolHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cIciMethodJload_code6M_v_; -text: .text%__1cMciMethodDataJload_data6M_v_; -text: .text%__1cIGraphKitTuse_exception_state6MpnNSafePointNode__pnENode__; -text: .text%__1cOcompU_iRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIGraphKitGmemory6MI_pnENode__; -text: .text%__1cIHaltNodeEhash6kM_I_: classes.o; -text: .text%__1cFKlassQup_cast_abstract6M_p0_; -text: .text%__1cKReturnNodeEhash6kM_I_: classes.o; -text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cPjava_lang_ClassNcreate_mirror6FnLKlassHandle_pnGThread__pnHoopDesc__; -text: .text%__1cIAndINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cMciMethodData2t6MnQmethodDataHandle__v_; -text: .text%__1cIAndINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cLOpaque2NodeGOpcode6kM_i_; -text: .text%__1cOClearArrayNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; -text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cOPhaseIdealLoopPis_counted_loop6MpnENode_pnNIdealLoopTree__2_; -text: .text%__1cQComputeCallStackHdo_void6M_v_: generateOopMap.o; -text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_; -text: .text%__1cKKlass_vtbl2n6FIrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__; -text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; -text: .text%jni_GetStringUTFLength: jni.o; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; -text: .text%jni_GetStringUTFRegion: jni.o; -text: .text%__1cFKlassRbase_create_klass6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__1_; -text: .text%__1cHUNICODELutf8_length6FpHi_i_; -text: .text%__1cQPlaceholderTableMremove_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cKstoreBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQSystemDictionaryTload_instance_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cRsarI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUcompU_iReg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHAddNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cUcompU_iReg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKPerfStringKset_string6Mpkc_v_; -text: .text%__1cQjava_lang_StringRas_unicode_string6FpnHoopDesc_ri_pH_; -text: .text%JVM_InternString; -text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_; -text: .text%__1cCosGrandom6F_l_; -text: .text%__1cKimmP13OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cVcompP_iRegP_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cRcompL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRMachNullCheckNodeLout_RegMask6kM_rknHRegMask__: machnode.o; -text: .text%__1cSTailCalljmpIndNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cIGraphKitPpush_pair_local6Mi_v_: parse2.o; -text: .text%__1cICodeHeapKdeallocate6Mpv_v_; -text: .text%__1cJCodeCacheEfree6FpnICodeBlob__v_; -text: .text%__1cKTypeRawPtrEmake6FpC_pk0_; -text: .text%jni_SetIntField: jni.o; -text: .text%__1cNIdealLoopTreeMcounted_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cKBufferBlobEfree6Fp0_v_; -text: .text%__1cPconvL2I_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; -text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; -text: .text%__1cVshrL_reg_imm6_L2INodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cZCallDynamicJavaDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cWImplicitExceptionTableGappend6MII_v_; -text: .text%__1cRMachNullCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_: ciMethodData.o; -text: .text%__1cQxorI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNIdealLoopTreeVadjust_loop_exit_prob6MpnOPhaseIdealLoop__v_; -text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cSandI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIPhaseIFGISquareUp6M_v_; -text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_; -text: .text%__1cKCodeBuffer2T6M_v_; -text: .text%__1cQPSGenerationPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cLOpaque1NodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cMURShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRcompL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cXAdaptiveWeightedAverageGsample6Mf_v_; -text: .text%__1cFKlassWappend_to_sibling_list6M_v_; -text: .text%__1cQSystemDictionarySjava_system_loader6F_pnHoopDesc__; -text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; -text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; -text: .text%__1cMTypeKlassPtrFxdual6kM_pknEType__; -text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; -text: .text%__1cNinstanceKlassQinit_implementor6M_v_; -text: .text%__1cPClassFileStream2t6MpCipc_v_; -text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; -text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; -text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; -text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; -text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__; -text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_; -text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassQeager_initialize6MpnGThread__v_; -text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserbAparse_classfile_attributes6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cKcmpOpPOperJnot_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cMPhaseIterGVNIoptimize6M_v_; -text: .text%__1cOPhaseTransform2t6MnFPhaseLPhaseNumber__v_; -text: .text%__1cISubINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o; -text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o; -text: .text%__1cHMemNodeHsize_of6kM_I_; -text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; -text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; -text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; -text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cQmodI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLRShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKCMoveINodeGOpcode6kM_i_; -text: .text%__1cLLShiftLNodeGOpcode6kM_i_; -text: .text%__1cYcompareAndSwapL_boolNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMtlsLoadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateQ_sub_Op_URShiftI6MpknENode__v_; -text: .text%__1cKcmpOpUOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cObranchConUNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cQaddP_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapJinterp_bb6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapQnext_bb_start_pc6MpnKBasicBlock__i_; -text: .text%__1cLklassVtableYadd_new_mirandas_to_list6FpnNGrowableArray4CpnNmethodOopDesc___pnPobjArrayOopDesc_6pnMklassOopDesc__v_; -text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_; -text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; -text: .text%JVM_GetMethodIxSignatureUTF; -text: .text%JVM_GetMethodIxMaxStack; -text: .text%JVM_GetMethodIxArgsSize; -text: .text%JVM_GetMethodIxByteCodeLength; -text: .text%JVM_GetMethodIxExceptionIndexes; -text: .text%JVM_GetMethodIxByteCode; -text: .text%JVM_GetMethodIxExceptionsCount; -text: .text%__1cLstoreP0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHCmpNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cMPhaseChaitinSbuild_ifg_physical6MpnMResourceArea__I_; -text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cQmulD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKoopFactoryWnew_permanent_intArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cPClassFileParserVparse_exception_table6MIInSconstantPoolHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cNPhaseCoalescePcoalesce_driver6M_v_; -text: .text%__1cLBuildCutout2T6M_v_; -text: .text%__1cNloadConL0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJloadFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNloadConP0NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cJimmP0OperEtype6kM_pknEType__: ad_sparc_clone.o; -text: .text%__1cLstoreI0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPCheckCastPPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; -text: .text%__1cHNTarjanICOMPRESS6M_v_; -text: .text%__1cNRelocIteratorTlocs_and_index_size6Fii_i_; -text: .text%__1cQsubL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcompI_iRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; -text: .text%__1cQandI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIXorINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cRmethodDataOopDescLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cFframeZinterpreter_frame_set_bcx6Mi_v_; -text: .text%__1cMnegF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLstoreI0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; -text: .text%__1cSaddL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQshrL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cILoopNodeHsize_of6kM_I_: classes.o; -text: .text%__1cHMatcherLfind_shared6MpnENode__v_; -text: .text%__1cJStartNodeHsize_of6kM_I_; -text: .text%__1cHMatcherFxform6MpnENode_i_2_; -text: .text%__1cEDict2t6MpFpkv2_ipF2_ipnFArena_i_v_; -text: .text%__1cRInterpretedRFrameKtop_vframe6kM_pnKjavaVFrame__: rframe.o; -text: .text%__1cQmodI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRinterpretedVFrameDbci6kM_i_; -text: .text%__1cIAndINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIAndINodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cNinstanceKlassbBcall_class_initializer_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNloadRangeNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRcompL_reg_conNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cMnegF_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_; -text: .text%__1cOMethodLivenessQcompute_liveness6M_v_; -text: .text%__1cOMethodLiveness2t6MpnFArena_pnIciMethod__v_; -text: .text%__1cOMethodLivenessNinit_gen_kill6M_v_; -text: .text%__1cOMethodLivenessSpropagate_liveness6M_v_; -text: .text%__1cOMethodLivenessRinit_basic_blocks6M_v_; -text: .text%__1cIGraphKitHopt_iff6MpnENode_2_2_; -text: .text%__1cLRShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJTimeStampGupdate6M_v_; -text: .text%__1cRmethodDataOopDescKmileage_of6FpnNmethodOopDesc__i_; -text: .text%__1cMloadConDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParseQarray_addressing6MnJBasicType_ippknEType__pnENode__; -text: .text%__1cNloadConP0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPCountedLoopNodeHsize_of6kM_I_: classes.o; -text: .text%__1cIProjNodeJideal_reg6kM_I_; -text: .text%__1cQaddI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQcmovI_reg_ltNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRsubI_zero_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJcmpOpOperFequal6kM_i_: ad_sparc_clone.o; -text: .text%__1cHCompilebAvarargs_C_out_slots_killed6kM_I_; -text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6MX_v_: jni.o; -text: .text%__1cbBjava_lang_ref_SoftReferenceFclock6F_x_; -text: .text%__1cOPhaseIdealLoopQset_subtree_ctrl6MpnENode__v_; -text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cNflagsRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cYciExceptionHandlerStreamPcount_remaining6M_i_; -text: .text%__1cFParseXcatch_inline_exceptions6MpnNSafePointNode__v_; -text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cKcmpOpUOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%JVM_GetFieldIxModifiers; -text: .text%__1cRScavengeRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cRScavengeRootsTaskEname6M_pc_: psTasks.o; -text: .text%JVM_IsConstructorIx; -text: .text%__1cPJavaCallWrapperHoops_do6MpnKOopClosure__v_; -text: .text%__1cFframeNoops_entry_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cSaddP_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__; -text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; -text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; -text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__; -text: .text%__1cKg1RegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_; -text: .text%__1cUjni_invoke_nonstatic6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; -text: .text%__1cIAndINodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cIAndINodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cTMachCallRuntimeNodePret_addr_offset6M_i_; -text: .text%__1cLConvL2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKo0RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIregDOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; -text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cLRethrowNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSPSKeepAliveClosureGdo_oop6MppnHoopDesc__v_: psScavenge.o; -text: .text%__1cFParseFBlockRsuccessor_for_bci6Mi_p1_; -text: .text%__1cVPreserveExceptionMark2T6M_v_; -text: .text%__1cVPreserveExceptionMark2t6MrpnGThread__v_; -text: .text%__1cHRetNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIRootNodeFValue6kMpnOPhaseTransform__pknEType__: classes.o; -text: .text%__1cMoutputStreamFprint6MpkcE_v_; -text: .text%__1cOGenerateOopMapKcopy_state6MpnNCellTypeState_2_v_; -text: .text%__1cHCompileQsync_stack_slots6kM_i_; -text: .text%__1cHMulNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJLoadFNodeGOpcode6kM_i_; -text: .text%__1cNSignatureInfoHdo_long6M_v_: bytecode.o; -text: .text%__1cHPhiNodeDcmp6kMrknENode__I_; -text: .text%__1cHOrINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cSTailCalljmpIndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_; -text: .text%__1cKstoreINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRloadConP_pollNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPClassFileStreamGget_u86MpnGThread__X_; -text: .text%__1cLMachNopNodeMideal_Opcode6kM_i_: ad_sparc.o; -text: .text%__1cLMachNopNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopNreorg_offsets6MpnNIdealLoopTree__v_; -text: .text%__1cRshrL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJtimestamp6FpnHoopDesc__x_; -text: .text%__1cPcompP_iRegPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSxorI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOPhaseIdealLoopRsplit_thru_region6MpnENode_2_2_; -text: .text%__1cIAndLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cbAPSEvacuateFollowersClosureHdo_void6M_v_: psScavenge.o; -text: .text%jni_ExceptionCheck: jni.o; -text: .text%__1cIAndLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; -text: .text%__1cOPhaseIdealLoopMdominated_by6MpnENode_2_v_; -text: .text%__1cQshlI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseNthrow_to_exit6MpnNSafePointNode__v_; -text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cJVectorSetGslamin6Mrk0_v_; -text: .text%JVM_Clone; -text: .text%__1cRAbstractAssemblerFflush6M_v_; -text: .text%__1cITypeLongFxdual6kM_pknEType__; -text: .text%__1cIJumpDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cKCompiledIC2t6MpnKNativeCall__v_; -text: .text%__1cOstackSlotLOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cURethrowExceptionNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshrL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOpaque2NodeEhash6kM_I_; -text: .text%__1cJloadFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cUcompU_iReg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUEdenMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cYSurvivorMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cLOptoRuntimeJstub_name6FpC_pkc_; -text: .text%__1cHOrINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cICmpLNodeDsub6kMpknEType_3_3_; -text: .text%__1cHPhiNodeKmake_blank6FpnENode_2_p0_; -text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_: jni.o; -text: .text%__1cIMulINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cOMachEpilogNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateM_sub_Op_SubI6MpknENode__v_; -text: .text%__1cFframeRretrieve_receiver6MpnLRegisterMap__pnHoopDesc__; -text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__; -text: .text%__1cNloadKlassNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cMTailCallNodeKmatch_edge6kMI_I_; -text: .text%jni_NewObject: jni.o; -text: .text%__1cIPhaseIFGYCompute_Effective_Degree6M_v_; -text: .text%__1cHMemNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cXmembar_release_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cJNode_ListEyank6MpnENode__v_; -text: .text%__1cMPhaseChaitinISimplify6M_v_; -text: .text%__1cNIdealLoopTreeIset_nest6MI_i_; -text: .text%__1cIMulLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cMStartOSRNodeGOpcode6kM_i_; -text: .text%__1cSCallLeafDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cLcmpD_ccNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJcmpOpOperEless6kM_i_: ad_sparc_clone.o; -text: .text%__1cKciTypeFlowPflow_exceptions6MpnNGrowableArray4Cpn0AFBlock___pnNGrowableArray4CpnPciInstanceKlass___pn0ALStateVector__v_; -text: .text%__1cKType_ArrayEgrow6MI_v_; -text: .text%__1cNloadConP0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cXmembar_release_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPconvF2D_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshrL_reg_imm6NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMURShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cVshrL_reg_imm6_L2INodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSMemBarVolatileNodeGOpcode6kM_i_; -text: .text%__1cLstoreB0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRshrI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cNSafePointNodeLpop_monitor6M_v_; -text: .text%__1cMPhaseChaitinVfind_base_for_derived6MppnENode_2rI_2_; -text: .text%__1cLOptoRuntimebAcomplete_monitor_exit_Type6F_pknITypeFunc__; -text: .text%__1cOstackSlotIOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cIGraphKitNshared_unlock6MpnENode_2_v_; -text: .text%__1cFStateT_sub_Op_CheckCastPP6MpknENode__v_; -text: .text%__1cQsubI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFKlassDLCA6Mp0_1_; -text: .text%__1cKTypeRawPtrEmake6FnHTypePtrDPTR__pk0_; -text: .text%__1cHciKlassVleast_common_ancestor6Mp0_1_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_tree6M_v_; -text: .text%__1cRcompL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRshlL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRloadConP_pollNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQshlL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMindirectOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindirectOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindirectOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cNSafePointNodeMpush_monitor6MpknMFastLockNode__v_; -text: .text%__1cSCallLeafDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCallLeafDirectNodeKmethod_set6Mi_v_; -text: .text%__1cIDivINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJLoadBNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJloadBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__: cfgnode.o; -text: .text%__1cRcompL_reg_conNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPcheckCastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; -text: .text%__1cJCMoveNodeLis_cmove_id6FpnOPhaseTransform_pnENode_44pnIBoolNode__4_; -text: .text%__1cKTypeAryPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cOPhaseIdealLoopKDominators6M_v_; -text: .text%jni_NewGlobalRef: jni.o; -text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; -text: .text%__1cIAndINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cYcompareAndSwapL_boolNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMPhaseChaitinFSplit6MI_I_; -text: .text%__1cMPhaseChaitinHcompact6M_v_; -text: .text%__1cZPhaseConservativeCoalesce2t6MrnMPhaseChaitin__v_; -text: .text%__1cMPhaseChaitinZcompress_uf_map_for_nodes6M_v_; -text: .text%__1cZPhaseConservativeCoalesceGverify6M_v_; -text: .text%__1cRcmpFastUnlockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQshlI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cXmembar_release_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKPSYoungGenNused_in_bytes6kM_I_; -text: .text%__1cOMachEpilogNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_; -text: .text%__1cJloadFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIRootNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cJLoadLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle__v_; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_; -text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_; -text: .text%JVM_FillInStackTrace; -text: .text%__1cKJavaThreadGactive6F_p0_; -text: .text%__1cKstoreFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_; -text: .text%__1cMVirtualSpaceNreserved_size6kM_I_; -text: .text%__1cICodeHeapMmax_capacity6kM_I_; -text: .text%__1cRsubI_zero_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cHTypePtrFxmeet6kMpknEType__3_; -text: .text%__1cNflagsRegFOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cIMinINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFParseWensure_phis_everywhere6M_v_; -text: .text%__1cLRethrowNodeEhash6kM_I_: classes.o; -text: .text%__1cIDivLNodeGOpcode6kM_i_; -text: .text%__1cPlocal_vsnprintf6FpcIpkcpv_i_; -text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; -text: .text%__1cNmethodOopDescVclear_native_function6M_v_; -text: .text%__1cOloadConL13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQsubL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%jio_snprintf; -text: .text%__1cMloadConINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cSmulI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%jni_NewLocalRef: jni.o; -text: .text%__1cIMulDNodeGOpcode6kM_i_; -text: .text%__1cLStrCompNodeGOpcode6kM_i_; -text: .text%__1cQcmovI_reg_gtNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPClassFileParserbNparse_classfile_inner_classes_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__H_; -text: .text%__1cKStoreFNodeGOpcode6kM_i_; -text: .text%__1cLConvD2INodeGOpcode6kM_i_; -text: .text%__1cIAddLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cMURShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKReturnNodeJideal_reg6kM_I_: classes.o; -text: .text%jni_DeleteGlobalRef: jni.o; -text: .text%__1cVPatchingRelocIteratorIpostpass6M_v_; -text: .text%__1cVPatchingRelocIteratorHprepass6M_v_; -text: .text%__1cRAbstractAssemblerOcode_fill_byte6F_i_; -text: .text%__1cIAndLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIAndLNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cJOopMapSet2t6M_v_; -text: .text%__1cNSCMemProjNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%JVM_GetCPMethodModifiers; -text: .text%jni_GetObjectArrayElement: jni.o; -text: .text%__1cFParseKarray_load6MnJBasicType__v_; -text: .text%jni_SetLongField: jni.o; -text: .text%__1cHGCCauseJto_string6Fn0AFCause__pkc_; -text: .text%__1cJOopMapSetHcopy_to6MpC_v_; -text: .text%__1cQjava_lang_ThreadRset_thread_status6FpnHoopDesc_n0AMThreadStatus__v_; -text: .text%__1cJOopMapSetJheap_size6kM_i_; -text: .text%__1cNSafePointNodeKgrow_stack6MpnIJVMState_I_v_; -text: .text%__1cIJVMState2t6Mi_v_; -text: .text%__1cIAndLNodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIAndLNodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cJLoadSNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMMachProjNodeHsize_of6kM_I_: classes.o; -text: .text%__1cOPhaseIdealLoopUsplit_if_with_blocks6MrnJVectorSet_rnKNode_Stack__v_; -text: .text%__1cNinstanceKlassPadd_implementor6MpnMklassOopDesc__v_; -text: .text%__1cLOopRecorderIoop_size6M_i_; -text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; -text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_; -text: .text%__1cOPhaseIdealLoopOset_early_ctrl6MpnENode__v_; -text: .text%__1cHnmethodKtotal_size6kM_i_; -text: .text%__1cbFunnecessary_membar_volatileNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMloadConLNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseNadd_safepoint6M_v_; -text: .text%__1cOPhaseTransform2t6Mp0nFPhaseLPhaseNumber__v_; -text: .text%__1cLPhaseValues2t6Mp0_v_; -text: .text%__1cQcmovI_reg_ltNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cXPhaseAggressiveCoalesceGverify6M_v_: coalesce.o; -text: .text%__1cHCompilebBregister_library_intrinsics6M_v_; -text: .text%__1cXPhaseAggressiveCoalesceNinsert_copies6MrnHMatcher__v_; -text: .text%__1cNPhaseRegAlloc2t6MIrnIPhaseCFG_rnHMatcher_pF_v_v_; -text: .text%__1cIPhaseCFGJbuild_cfg6M_I_; -text: .text%__1cHCompileEInit6Mi_v_; -text: .text%__1cVExceptionHandlerTable2t6Mi_v_; -text: .text%__1cMPhaseChaitin2t6MIrnIPhaseCFG_rnHMatcher__v_; -text: .text%__1cMPhaseChaitinRRegister_Allocate6M_v_; -text: .text%__1cHCompileTset_cached_top_node6MpnENode__v_; -text: .text%__1cHMatcherZnumber_of_saved_registers6F_i_; -text: .text%__1cNPhaseRegAllocTpd_preallocate_hook6M_v_; -text: .text%__1cLBlock_Array2t6MpnFArena__v_: block.o; -text: .text%__1cMPhaseChaitinMreset_uf_map6MI_v_; -text: .text%__1cMPhaseChaitinRbuild_ifg_virtual6M_v_; -text: .text%__1cIPhaseCFGQGlobalCodeMotion6MrnHMatcher_IrnJNode_List__v_; -text: .text%__1cHMatcherTFixup_Save_On_Entry6M_v_; -text: .text%__1cHMatcherPinit_spill_mask6MpnENode__v_; -text: .text%__1cHCompileICode_Gen6M_v_; -text: .text%__1cFArena2t6MI_v_; -text: .text%__1cUDebugInfoWriteStream2t6MpnYDebugInformationRecorder_i_v_; -text: .text%__1cHMatcherVinit_first_stack_mask6M_v_; -text: .text%__1cFArenaNmove_contents6Mp0_1_; -text: .text%__1cFArenaRdestruct_contents6M_v_; -text: .text%__1cIPhaseIFG2t6MpnFArena__v_; -text: .text%__1cFDictIFreset6MpknEDict__v_; -text: .text%__1cHMatcherFmatch6M_v_; -text: .text%__1cHMatcher2t6MrnJNode_List__v_; -text: .text%__1cIPhaseCFGVschedule_pinned_nodes6MrnJVectorSet__v_; -text: .text%__1cETypeKInitialize6FpnHCompile__v_; -text: .text%__1cIPhaseCFGYEstimate_Block_Frequency6M_v_; -text: .text%__1cYDebugInformationRecorder2t6MpnLOopRecorder__v_; -text: .text%__1cOCompileWrapper2t6MpnHCompile__v_; -text: .text%__1cIPhaseCFGKDominators6M_v_; -text: .text%__1cIPhaseCFG2t6MpnFArena_pnIRootNode_rnHMatcher__v_; -text: .text%__1cJPhaseLive2t6MrknIPhaseCFG_rnILRG_List_pnFArena__v_; -text: .text%__1cHCompileYinit_scratch_buffer_blob6M_v_; -text: .text%__1cOMachPrologNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHCompileTFillExceptionTables6MIpI1pnFLabel__v_; -text: .text%__1cMPhaseChaitinbApost_allocate_copy_removal6M_v_; -text: .text%__1cHCompileGOutput6M_v_; -text: .text%__1cWImplicitExceptionTableIset_size6MI_v_; -text: .text%__1cHCompileMBuildOopMaps6M_v_; -text: .text%__1cLdo_liveness6FpnNPhaseRegAlloc_pnIPhaseCFG_pnKBlock_List_ipnFArena_pnEDict__v_: buildOopMap.o; -text: .text%__1cMPhaseChaitinMfixup_spills6M_v_; -text: .text%__1cNPhaseRegAllocPalloc_node_regs6Mi_v_; -text: .text%__1cHCompileLFill_buffer6M_v_; -text: .text%__1cVCallRuntimeDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNSignatureInfoJdo_double6M_v_: bytecode.o; -text: .text%__1cENodeHrm_prec6MI_v_; -text: .text%__1cHRetNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRPrivilegedElementKinitialize6MpnMvframeStream_pnHoopDesc_p0pnGThread__v_; -text: .text%JVM_DoPrivileged; -text: .text%__1cRsubI_zero_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHRetNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIConDNodeGOpcode6kM_i_; -text: .text%__1cObranchConFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cTresource_free_bytes6FpcI_v_; -text: .text%__1cNmethodOopDescbDbuild_interpreter_method_data6FnMmethodHandle_pnGThread__v_; -text: .text%__1cRcompL_reg_conNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_; -text: .text%__1cPconvL2I_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFciEnvKcompile_id6M_I_; -text: .text%__1cPmethodDataKlassIallocate6MnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cKoopFactoryOnew_methodData6FnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cIAndLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cVshrL_reg_imm6_L2INodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvL2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSmulI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cCosXthread_local_storage_at6Fi_pv_; -text: .text%__1cMindIndexOperNconstant_disp6kM_i_: ad_sparc.o; -text: .text%__1cMindIndexOperOindex_position6kM_i_: ad_sparc.o; -text: .text%__1cMindIndexOperFscale6kM_i_: ad_sparc.o; -text: .text%__1cOMacroAssemblerWbang_stack_with_offset6Mi_v_: assembler_sparc.o; -text: .text%__1cRAbstractAssemblerbDgenerate_stack_overflow_check6Mi_v_; -text: .text%__1cMindIndexOperNbase_position6kM_i_: ad_sparc.o; -text: .text%__1cNloadKlassNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateR_sub_Op_LoadKlass6MpknENode__v_; -text: .text%__1cGTarjanICOMPRESS6M_v_; -text: .text%__1cKstoreCNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cICmpDNodeGOpcode6kM_i_; -text: .text%__1cNloadConL0NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulLNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cOPhaseIdealLoopOplace_near_use6kMpnENode__2_; -text: .text%__1cVCallRuntimeDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreB0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSInterpreterRuntimeOprofile_method6FpnKJavaThread_pC_i_; -text: .text%__1cMURShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJloadPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cLRShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIMachNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLOpaque2NodeLbottom_type6kM_pknEType__: connode.o; -text: .text%__1cSconvI2D_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUPSGenerationCountersKupdate_all6M_v_: psGenerationCounters.o; -text: .text%__1cQComputeCallStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cQregP_to_stkPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; -text: .text%__1cJTimeStampSticks_since_update6kM_x_; -text: .text%__1cQmodI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cURethrowExceptionNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIAddLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQcmovI_reg_ltNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLstoreB0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSaddI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIModINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cJcmpOpOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%__1cJimmL0OperJconstantL6kM_x_: ad_sparc_clone.o; -text: .text%__1cJimmI0OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cFStateM_sub_Op_ConL6MpknENode__v_; -text: .text%__1cOloadConL13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNObjectMonitorHis_busy6kM_i_; -text: .text%JVM_GetClassNameUTF; -text: .text%__1cKloadUBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIXorINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cFStateM_sub_Op_AndI6MpknENode__v_; -text: .text%__1cVshrL_reg_imm6_L2INodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKcmpOpFOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cTmembar_volatileNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateL_sub_Op_OrI6MpknENode__v_; -text: .text%__1cJCmpL3NodeGOpcode6kM_i_; -text: .text%JVM_FindLoadedClass; -text: .text%__1cIMulLNodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIMulLNodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cVAdaptivePaddedAverageGsample6Mf_v_; -text: .text%__1cIConFNodeGOpcode6kM_i_; -text: .text%__1cSmembar_acquireNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cQmulD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIModLNodeGOpcode6kM_i_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_; -text: .text%__1cQLibraryIntrinsicIgenerate6MpnIJVMState__2_; -text: .text%__1cLRShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKTypeRawPtrFxdual6kM_pknEType__; -text: .text%__1cNloadConL0NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cFTypeFEmake6Ff_pk0_; -text: .text%__1cIimmFOperJconstantF6kM_f_: ad_sparc_clone.o; -text: .text%__1cEUTF8Ounicode_length6Fpkc_i_; -text: .text%__1cCosRcurrent_thread_id6F_i_; -text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_; -text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_; -text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fi_v_; -text: .text%__1cSmembar_acquireNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cPorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIPhaseCFGOinsert_goto_at6MII_v_; -text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; -text: .text%__1cPCallRuntimeNodeGOpcode6kM_i_; -text: .text%__1cJcmpOpOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cMindIndexOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindIndexOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindIndexOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%JVM_FindClassFromClass; -text: .text%__1cRshrP_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cObranchConFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQshrI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_; -text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; -text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_; -text: .text%JVM_NewInstanceFromConstructor; -text: .text%__1cFParseFBlockMadd_new_path6M_i_; -text: .text%__1cIimmPOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cQsubL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvF2DNodeGOpcode6kM_i_; -text: .text%__1cLConvI2DNodeGOpcode6kM_i_; -text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; -text: .text%__1cMloadConFNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cKcmpOpPOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cLRShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKimmL13OperJconstantL6kM_x_: ad_sparc_clone.o; -text: .text%__1cSTailCalljmpIndNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cGIfNodeMdominated_by6MpnENode_pnMPhaseIterGVN__v_; -text: .text%__1cOcompiledVFrame2t6MpknFframe_pknLRegisterMap_pnKJavaThread_pnJScopeDesc__v_; -text: .text%__1cQshlI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; -text: .text%__1cbFunnecessary_membar_volatileNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cULinearLeastSquareFitGupdate6Mdd_v_; -text: .text%__1cOoop_RelocationIoop_addr6M_ppnHoopDesc__; -text: .text%__1cKstoreCNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreCNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJcmpOpOperKless_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cXmembar_acquire_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPfieldDescriptorUstring_initial_value6kMpnGThread__pnHoopDesc__; -text: .text%__1cMloadConLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMaxINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMloadConDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMindirectOperNconstant_disp6kM_i_: ad_sparc.o; -text: .text%__1cMindirectOperNbase_position6kM_i_: ad_sparc.o; -text: .text%__1cIAddLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMindirectOperFscale6kM_i_: ad_sparc.o; -text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cSsubL_reg_reg_2NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%jni_NewString: jni.o; -text: .text%__1cLConvL2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__; -text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cOcompiledVFrameEcode6kM_pnHnmethod__; -text: .text%__1cIGraphKitMnext_monitor6M_i_; -text: .text%__1cLBoxLockNode2t6Mi_v_; -text: .text%__1cPconvF2D_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLOptoRuntimebBcomplete_monitor_enter_Type6F_pknITypeFunc__; -text: .text%__1cIGraphKitLshared_lock6MpnENode__pnMFastLockNode__; -text: .text%__1cNloadConP0NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRorI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKcmpOpUOperEless6kM_i_: ad_sparc_clone.o; -text: .text%__1cQaddF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; -text: .text%lwp_mutex_init: os_solaris.o; -text: .text%__1cRsubI_zero_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; -text: .text%__1cQnotemp_iRegIOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; -text: .text%__1cODataRelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cYinternal_word_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cCosPhint_no_preempt6F_v_; -text: .text%__1cOcmovII_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIMulLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIMulINodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; -text: .text%__1cRsarL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFciEnvWget_method_from_handle6MpnI_jobject__pnIciMethod__; -text: .text%__1cSstring_compareNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFciEnv2T6M_v_; -text: .text%__1cIGraphKitNgen_checkcast6MpnENode_2p2_2_; -text: .text%__1cMMergeMemNodeIadr_type6kM_pknHTypePtr__: memnode.o; -text: .text%__1cJcmpOpOperJnot_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cGvframeDtop6kM_p0_; -text: .text%__1cOCompiledRFrameEinit6M_v_; -text: .text%__1cXmembar_acquire_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadSNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cVCallRuntimeDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPcmpFastLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQciTypeArrayKlassEmake6FnJBasicType__p0_; -text: .text%__1cIXorINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIGraphKitRgen_subtype_check6MpnENode_2_2_; -text: .text%__1cOMacroAssemblerLsave_thread6MkpnMRegisterImpl__v_; -text: .text%__1cOcmovII_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMloadConINodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshlL_reg_imm6NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParseGdo_new6M_v_; -text: .text%__1cIimmIOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cQmodI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvI2LNodeJideal_reg6kM_I_: classes.o; -text: .text%jni_GetObjectClass: jni.o; -text: .text%__1cSxorI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOMacroAssemblerFalign6Mi_v_; -text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_; -text: .text%__1cKManagementJtimestamp6F_x_; -text: .text%__1cIPSOldGenPupdate_counters6M_v_; -text: .text%__1cQshrI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cTloadL_unalignedNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJloadLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOMacroAssemblerVreset_last_Java_frame6M_v_; -text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_2_v_; -text: .text%__1cSstring_compareNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOstackSlotIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQregF_to_stkINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cINodeHash2t6MpnFArena_I_v_; -text: .text%__1cPconvI2L_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseTransform2t6MpnFArena_nFPhaseLPhaseNumber__v_; -text: .text%__1cLPhaseValues2t6MpnFArena_I_v_; -text: .text%__1cJStubQdDueueGcommit6Mi_v_; -text: .text%__1cJStubQdDueueHrequest6Mi_pnEStub__; -text: .text%__1cOcmovII_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOMacroAssemblerKsave_frame6Mi_v_; -text: .text%__1cSmulI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreC0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOPhaseIdealLoopVclone_up_backedge_goo6MpnENode_22_2_; -text: .text%__1cITemplateKinitialize6MinITosState_1pFi_vi_v_; -text: .text%__1cITemplateIgenerate6MpnZInterpreterMacroAssembler__v_; -text: .text%JVM_FindClassFromClassLoader; -text: .text%JVM_FindClassFromBootLoader; -text: .text%signalHandler; -text: .text%__1cTtypeArrayKlassKlassIoop_size6kMpnHoopDesc__i_: typeArrayKlassKlass.o; -text: .text%JVM_handle_solaris_signal; -text: .text%__1cQjava_lang_ThreadRget_thread_status6FpnHoopDesc__n0AMThreadStatus__; -text: .text%__1cNSignatureInfoIdo_float6M_v_: bytecode.o; -text: .text%__1cFStateM_sub_Op_AndL6MpknENode__v_; -text: .text%__1cKConv2BNodeGOpcode6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerZcheck_and_handle_popframe6MpnMRegisterImpl__v_; -text: .text%JVM_IHashCode; -text: .text%__1cSconvI2D_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJStartNodeJideal_reg6kM_I_: callnode.o; -text: .text%__1cOMacroAssemblerbBcheck_and_forward_exception6MpnMRegisterImpl__v_; -text: .text%__1cQcmovI_reg_ltNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQandL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLPhaseValuesKis_IterGVN6M_pnMPhaseIterGVN__: phaseX.o; -text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKC2CompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_; -text: .text%JVM_GetClassLoader; -text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; -text: .text%__1cCosRelapsed_frequency6F_x_; -text: .text%__1cFStateP_sub_Op_ConvL2I6MpknENode__v_; -text: .text%__1cOPhaseIdealLoopLdo_split_if6MpnENode__v_; -text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_; -text: .text%__1cKScheduling2t6MpnFArena_rnHCompile__v_; -text: .text%__1cKSchedulingMDoScheduling6M_v_; -text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTimer_pnLCompileTask__v_; -text: .text%__1cFciEnvbOcheck_for_system_dictionary_modification6MpnIciMethod__v_; -text: .text%__1cSCardTableExtensionbAscavenge_contents_parallel6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager_I_v_; -text: .text%__1cRframe_gc_prologue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeMpd_gc_epilog6M_v_; -text: .text%__1cMelapsedTimerHseconds6kM_d_; -text: .text%__1cJStealTaskEname6M_pc_: psTasks.o; -text: .text%__1cRframe_gc_epilogue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_epilogue6M_v_; -text: .text%__1cFframeLgc_prologue6M_v_; -text: .text%__1cTOldToYoungRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cJStealTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cTOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cNGCTaskManagerMnote_release6MI_v_; -text: .text%__1cMciMethodDataStrap_recompiled_at6MpnLProfileData__i_; -text: .text%__1cJloadLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmembar_acquireNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmembar_acquireNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cVExceptionHandlerTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; -text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; -text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cIciMethodRbuild_method_data6M_v_; -text: .text%__1cHCompileIOptimize6M_v_; -text: .text%__1cHCompileLFinish_Warm6M_v_; -text: .text%__1cbAfinal_graph_reshaping_walk6FrnKNode_Stack_pnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cHCompileLInline_Warm6M_i_; -text: .text%__1cSPhaseRemoveUseless2t6MpnIPhaseGVN_pnQUnique_Node_List__v_; -text: .text%__1cJStartNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKInlineTreeWbuild_inline_tree_root6F_p0_; -text: .text%__1cHCompileRbuild_start_state6MpnJStartNode_pknITypeFunc__pnIJVMState__; -text: .text%__1cIPhaseCCPHanalyze6M_v_; -text: .text%__1cIPhaseCCPMdo_transform6M_v_; -text: .text%__1cIPhaseCCPJtransform6MpnENode__2_; -text: .text%__1cIPhaseCCP2t6MpnMPhaseIterGVN__v_; -text: .text%__1cHCompileVidentify_useful_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cHCompileUremove_useless_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cQUnique_Node_ListUremove_useless_nodes6MrnJVectorSet__v_; -text: .text%__1cMPhaseIterGVN2t6MpnIPhaseGVN__v_; -text: .text%__1cMPhaseIterGVN2t6Mp0_v_; -text: .text%__1cQmulI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableKtransition6FnITosState_1_v_; -text: .text%__1cHCompileNreturn_values6MpnIJVMState__v_; -text: .text%__1cOcmovII_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOMachEpilogNodeQsafepoint_offset6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_epilog6MnITosState_i_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_prolog6MnITosState_i_v_; -text: .text%__1cIModINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFStateP_sub_Op_RShiftI6MpknENode__v_; -text: .text%__1cRsarI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%lwp_cond_init: os_solaris.o; -text: .text%__1cTmembar_volatileNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNloadConL0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQComputeCallStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cXmembar_acquire_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cKPSYoungGenRcapacity_in_bytes6kM_I_; -text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cOloadConI13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJloadSNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIAddFNodeGOpcode6kM_i_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cFStateO_sub_Op_Binary6MpknENode__v_; -text: .text%__1cKBinaryNodeGOpcode6kM_i_; -text: .text%__1cNSignatureInfoIdo_short6M_v_: bytecode.o; -text: .text%__1cLBoxLockNodeDcmp6kMrknENode__I_; -text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_; -text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_; -text: .text%__1cRNativeMovConstRegIset_data6Mi_v_; -text: .text%__1cFParsebLincrement_and_test_invocation_counter6Mi_v_; -text: .text%__1cSsafePoint_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMTailCallNodeGOpcode6kM_i_; -text: .text%__1cSInterpreterRuntimeTprepare_native_call6FpnKJavaThread_pnNmethodOopDesc__v_; -text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_; -text: .text%__1cSsafePoint_pollNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNobjArrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; -text: .text%__1cIMulFNodeGOpcode6kM_i_; -text: .text%__1cISubLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQmulD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNSCMemProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSThreadLocalStorageGthread6F_pnGThread__: assembler_sparc.o; -text: .text%jni_SetByteArrayRegion: jni.o; -text: .text%__1cQregI_to_stkINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__; -text: .text%__1cSdivL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFStateM_sub_Op_XorI6MpknENode__v_; -text: .text%__1cHTypePtrEmake6FnETypeFTYPES_n0ADPTR_i_pk0_; -text: .text%__1cCosLelapsedTime6F_d_; -text: .text%__1cKScopeValueJread_from6FpnTDebugInfoReadStream__p0_; -text: .text%__1cKPerfMemoryMmark_updated6F_v_; -text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_; -text: .text%__1cKPerfMemoryFalloc6FI_pc_; -text: .text%__1cLStrCompNodeKmatch_edge6kMI_I_; -text: .text%__1cQmulL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cILocation2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__; -text: .text%jni_ReleaseStringUTFChars; -text: .text%jni_GetStringUTFChars: jni.o; -text: .text%__1cSobjArrayKlassKlassXallocate_objArray_klass6MinLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cFParseLarray_store6MnJBasicType__v_; -text: .text%__1cSInterpreterRuntimeNquicken_io_cc6FpnKJavaThread__v_; -text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; -text: .text%JVM_IsInterrupted; -text: .text%__1cLLShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNSignatureInfoHdo_char6M_v_: bytecode.o; -text: .text%JVM_FindLibraryEntry; -text: .text%__1cWConstantPoolCacheEntrySset_interface_call6MnMmethodHandle_i_v_; -text: .text%__1cLklassItableUcompute_itable_index6FpnNmethodOopDesc__i_; -text: .text%__1cRshlL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQshlL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPconvF2D_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLRShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSstring_compareNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerEstop6Mpkc_v_; -text: .text%__1cObranchConFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKloadUBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddP_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLcmpD_ccNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cTloadL_unalignedNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLLShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectMset_override6FpnHoopDesc_C_v_; -text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_: jni.o; -text: .text%__1cRbranchLoopEndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKcmpOpUOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%__1cUParallelScavengeHeapEused6kM_I_; -text: .text%__1cIDivINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQmulF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQxorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWCallLeafNoFPDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLcmpD_ccNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadINodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; -text: .text%__1cIMinINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cKarrayKlassKjava_super6kM_pnMklassOopDesc__; -text: .text%__1cOClearArrayNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRbranchLoopEndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRbranchLoopEndNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cLMachUEPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cCosTnative_java_library6F_pv_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; -text: .text%__1cSxorI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMPhaseChaitinGSelect6M_I_; -text: .text%__1cFParseSjump_switch_ranges6MpnENode_pnLSwitchRange_4i_v_; -text: .text%__1cSbranchCon_longNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cSbranchCon_longNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSbranchCon_longNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; -text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; -text: .text%__1cLstoreP0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFParseTprofile_switch_case6Mi_v_; -text: .text%__1cSandI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIimmLOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cFParseOmerge_new_path6Mi_v_; -text: .text%__1cQregP_to_stkPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; -text: .text%__1cSmembar_releaseNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_NewByteArray: jni.o; -text: .text%__1cQdivL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_; -text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cFParseLdo_newarray6MnJBasicType__v_; -text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; -text: .text%__1cSconvI2D_helperNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreP0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMciArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cSmembar_releaseNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_; -text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__; -text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cSTailCalljmpIndNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQcmovI_reg_gtNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetMethodIxExceptionTableEntry; -text: .text%__1cIDivINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLstoreP0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQstkI_to_regFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLRethrowNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKloadUBNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cHCompileSrethrow_exceptions6MpnIJVMState__v_; -text: .text%__1cURethrowExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLRethrowNode2t6MpnENode_22222_v_; -text: .text%__1cTLoadL_unalignedNodeGOpcode6kM_i_; -text: .text%__1cSmulI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerZget_2_byte_integer_at_bcp6MipnMRegisterImpl_2n0ALsignedOrNot_n0AKsetCCOrNot__v_; -text: .text%__1cQcmovI_reg_gtNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cURethrowExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPfieldDescriptorSlong_initial_value6kM_x_; -text: .text%__1cISubLNodeDsub6kMpknEType_3_3_; -text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cJLoadINodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cQandI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cQmulI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParsePmerge_exception6Mi_v_; -text: .text%__1cLStrCompNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlass.o; -text: .text%__1cNloadConP0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_ReleaseStringCritical: jni.o; -text: .text%__1cJCMoveNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%jni_GetStringCritical: jni.o; -text: .text%__1cHciKlassSsuper_check_offset6M_I_; -text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__: ciObjArrayKlass.o; -text: .text%__1cWCallLeafNoFPDirectNodeKmethod_set6Mi_v_; -text: .text%__1cWCallLeafNoFPDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_: icBuffer.o; -text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_: icBuffer.o; -text: .text%__1cMloadConFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMadjust_check6FpnENode_11iipnMPhaseIterGVN__v_: ifnode.o; -text: .text%__1cJScopeDescGsender6kM_p0_; -text: .text%__1cSxorI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcompiledVFrameGsender6kM_pnGvframe__; -text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_; -text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; -text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; -text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; -text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; -text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; -text: .text%__1cOPhaseIdealLoopOadd_constraint6MiipnENode_22p23_v_; -text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_; -text: .text%__1cKstoreBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSaddL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; -text: .text%__1cQComputeCallStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cLstoreI0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFframeIpatch_pc6MpnGThread_pC_v_; -text: .text%__1cRtestI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__; -text: .text%__1cFParseMdo_checkcast6M_v_; -text: .text%__1cOCompiledRFrameKtop_method6kM_nMmethodHandle__: rframe.o; -text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; -text: .text%__1cRtestI_reg_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcmovIL_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJimmU6OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cHRegMask2t6M_v_: matcher.o; -text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; -text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_; -text: .text%__1cSmulL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPstoreI_FregNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cLcmpD_ccNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXMachCallDynamicJavaNodePret_addr_offset6M_i_; -text: .text%__1cNflagsRegFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; -text: .text%__1cIModLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMloadConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cbBjava_lang_ref_SoftReferenceJset_clock6Fx_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; -text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; -text: .text%__1cQLRUMaxHeapPolicy2t6M_v_; -text: .text%__1cUParallelScavengeHeapQresize_all_tlabs6M_v_; -text: .text%__1cUParallelScavengeHeapPupdate_counters6M_v_; -text: .text%__1cUParallelScavengeHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cVLoaderConstraintTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cTDerivedPointerTablePupdate_pointers6F_v_; -text: .text%__1cNCollectedHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cNCollectedHeapQresize_all_tlabs6M_v_; -text: .text%__1cMTypeKlassPtrFxmeet6kMpknEType__3_; -text: .text%__1cKPSYoungGenPupdate_counters6M_v_; -text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; -text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; -text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; -text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersPupdate_counters6M_v_; -text: .text%__1cTDerivedPointerTableFclear6F_v_; -text: .text%__1cKDictionaryHoops_do6MpnKOopClosure__v_; -text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; -text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_; -text: .text%__1cMCounterDecayFdecay6F_v_; -text: .text%__1cCosbCmake_polling_page_unreadable6F_v_; -text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_; -text: .text%__1cLConvI2FNodeGOpcode6kM_i_; -text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; -text: .text%__1cQaddF_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUSafepointSynchronizeFbegin6F_v_; -text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cCosbAmake_polling_page_readable6F_v_; -text: .text%__1cUSafepointSynchronizeDend6F_v_; -text: .text%__1cOcmovII_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; -text: .text%__1cKimmU13OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cQshlL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUcompU_iReg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetCallerClass; -text: .text%__1cNSignatureInfoHdo_byte6M_v_: bytecode.o; -text: .text%__1cOcmovPP_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLstoreC0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cTloadL_unalignedNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cICmpFNodeGOpcode6kM_i_; -text: .text%__1cOstackSlotPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQregF_to_stkINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJLoadDNodeGOpcode6kM_i_; -text: .text%__1cQmulD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_IsAssignableFrom: jni.o; -text: .text%jni_GetFieldID: jni.o; -text: .text%__1cJLoadPNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cLstoreB0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cHTypeAryFxdual6kM_pknEType__; -text: .text%__1cMtlsLoadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; -text: .text%__1cCosMget_priority6FkpknGThread_rnOThreadPriority__nIOSReturn__; -text: .text%__1cGThreadMget_priority6Fkpk0_nOThreadPriority__; -text: .text%__1cMVM_OperationIevaluate6M_v_; -text: .text%__1cMVM_OperationSset_calling_thread6MpnGThread_nOThreadPriority__v_; -text: .text%__1cCosTget_native_priority6FkpknGThread_pi_nIOSReturn__; -text: .text%__1cMnegD_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQcmovI_reg_gtNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cGGCTask2t6Mn0AEKindEkind__v_; -text: .text%__1cNGCTaskManagerVrelease_all_resources6M_v_; -text: .text%__1cLGCTaskQdDueueHenqueue6Mp0_v_; -text: .text%__1cSCardTableExtensionRscavenge_contents6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager__v_; -text: .text%__1cUWaitForBarrierGCTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cNGCTaskManagerIadd_list6MpnLGCTaskQdDueue__v_; -text: .text%__1cHThreadsZcreate_thread_roots_tasks6FpnLGCTaskQdDueue__v_; -text: .text%__1cUWaitForBarrierGCTaskGcreate6F_p0_; -text: .text%__1cUWaitForBarrierGCTaskIdestruct6M_v_; -text: .text%__1cSObjectSynchronizerJfast_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cSPSPromotionManagerNpost_scavenge6F_v_; -text: .text%__1cNBarrierGCTaskOdo_it_internal6MpnNGCTaskManager_I_v_; -text: .text%__1cNJvmtiGCMarker2T6M_v_; -text: .text%__1cUWaitForBarrierGCTaskHdestroy6Fp0_v_; -text: .text%__1cLGCTaskQdDueueGcreate6F_p0_; -text: .text%__1cSPSPromotionManagerMpre_scavenge6F_v_; -text: .text%__1cZSerialOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; -text: .text%__1cZSerialOldToYoungRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cKPSYoungGenLswap_spaces6M_v_; -text: .text%__1cUParallelScavengeHeapQresize_young_gen6MII_v_; -text: .text%__1cKPSYoungGenGresize6MII_v_; -text: .text%__1cKPSYoungGenNresize_spaces6MII_v_; -text: .text%__1cSPSPromotionManagerbBvm_thread_promotion_manager6F_p0_; -text: .text%__1cUWaitForBarrierGCTaskIwait_for6M_v_; -text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; -text: .text%__1cNMonitorSupplyHreserve6F_pnHMonitor__; -text: .text%__1cNMonitorSupplyHrelease6FpnHMonitor__v_; -text: .text%__1cUWaitForBarrierGCTaskEname6M_pc_: gcTaskManager.o; -text: .text%__1cTmembar_volatileNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cVLoaderConstraintTableWfind_constrained_klass6MnMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cTloadL_unalignedNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovII_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQComputeCallStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cMURShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_; -text: .text%__1cPClassFileParserbJparse_classfile_signature_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cKstoreBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_; -text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_; -text: .text%__1cFframeZinterpreter_frame_set_mdp6MpC_v_; -text: .text%__1cZInterpreterMacroAssemblerIpush_ptr6MpnMRegisterImpl__v_; -text: .text%__1cISubLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cIciMethodRinterpreter_entry6M_pC_; -text: .text%__1cQmulF_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPconvF2D_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRcompL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadBNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%jni_SetBooleanField: jni.o; -text: .text%__1cKimmL13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLcmpF_ccNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLRuntimeStubbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cRorI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsarL_reg_imm6NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQmulI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_object6M_v_; -text: .text%__1cZInterpreterMacroAssemblerGpush_i6MpnMRegisterImpl__v_; -text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cLLShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQComputeCallStackJdo_double6M_v_: generateOopMap.o; -text: .text%__1cJloadSNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRloadConP_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNObjectMonitorHRecycle6M_v_; -text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cJloadDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQstkI_to_regFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQregP_to_stkPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerFpop_i6MpnMRegisterImpl__v_; -text: .text%__1cIMaxINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cYcompareAndSwapL_boolNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNSCMemProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIPSOldGenMmax_gen_size6M_I_: psOldGen.o; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; -text: .text%__1cSdivL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cbDVM_ParallelGCFailedAllocationEdoit6M_v_; -text: .text%__1cQaddL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPadd_derived_oop6FppnHoopDesc_2_v_: oopMap.o; -text: .text%__1cMregD_lowOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cHOrINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cOMethodLivenessKBasicBlockFsplit6Mi_p1_; -text: .text%__1cOcmovII_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeEgetd6kM_d_; -text: .text%__1cOcmovIL_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTAbstractInterpreterSBasicType_as_index6FnJBasicType__i_; -text: .text%__1cZInterpreterMacroAssemblerGpush_f6MpnRFloatRegisterImpl__v_; -text: .text%__1cIciObject2t6MpnHciKlass__v_; -text: .text%__1cPjava_lang_ClassQprimitive_mirror6FnJBasicType__pnHoopDesc__; -text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_; -text: .text%__1cPstoreI_FregNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKCMovePNodeGOpcode6kM_i_; -text: .text%__1cLstoreC0NodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_MonitorWait; -text: .text%__1cSObjectSynchronizerEwait6FnGHandle_xpnGThread__v_; -text: .text%__1cIAddLNodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; -text: .text%__1cGciType2t6MpnHciKlass__v_; -text: .text%__1cQshlI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQdivD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFParseSjump_if_false_fork6MpnGIfNode_ii_v_; -text: .text%__1cNloadConL0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRshrL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUciInstanceKlassKlassEmake6F_p0_; -text: .text%__1cENode2t6Mp0111111_v_; -text: .text%__1cIDivLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cZInterpreterMacroAssemblerGpush_d6MpnRFloatRegisterImpl__v_; -text: .text%__1cFParseRarray_store_check6M_v_; -text: .text%__1cQsubF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIciSymbolHbyte_at6Mi_i_; -text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; -text: .text%__1cQaddD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongVariable__; -text: .text%__1cQset_lwp_priority6Fiii_i_; -text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; -text: .text%jni_NewStringUTF: jni.o; -text: .text%__1cZInterpreterMacroAssemblerGpush_l6MpnMRegisterImpl__v_; -text: .text%__1cQsubI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cZInterpreterMacroAssemblerXget_constant_pool_cache6MpnMRegisterImpl__v_; -text: .text%__1cSbranchCon_longNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cKcmpOpUOperKless_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cPciInstanceKlassNloader_handle6M_pnI_jobject__; -text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; -text: .text%__1cUParallelScavengeHeapIcapacity6kM_I_; -text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; -text: .text%__1cSsubL_reg_reg_2NodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_DefineClassWithSource; -text: .text%__1cLstoreF0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_SetClassSigners; -text: .text%__1cKCompiledICMset_to_clean6M_v_; -text: .text%__1cSandL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRbranchLoopEndNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cLRShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_: markSweep.o; -text: .text%__1cFParseWcheck_interpreter_type6MpnENode_pknEType_rpnNSafePointNode__2_; -text: .text%__1cOcmovPP_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_; -text: .text%get_thread; -text: .text%__1cKstoreCNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FIi_pnGThread__; -text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; -text: .text%jni_CallIntMethod: jni.o; -text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; -text: .text%__1cKloadUBNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconvD2I_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMulDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSaddP_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIAddDNodeGOpcode6kM_i_; -text: .text%__1cOloadI_fregNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOloadI_fregNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cCosJyield_all6Fi_v_; -text: .text%__1cKstoreLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPstoreI_FregNodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_GetClassMethodsCount; -text: .text%__1cKstoreINodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%JVM_GetClassFieldsCount; -text: .text%__1cLconvI2BNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_GetClassCPEntriesCount; -text: .text%JVM_GetClassCPTypes; -text: .text%__1cQmulI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMacroAssemblerKverify_FPU6Mipkc_v_; -text: .text%__1cbCfind_class_from_class_loader6FpnHJNIEnv__nMsymbolHandle_CnGHandle_3CpnGThread__pnH_jclass__; -text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_; -text: .text%__1cIAddFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQregI_to_stkINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_; -text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIgenerate6MX_v_; -text: .text%JVM_IsPrimitiveClass; -text: .text%__1cJimmU6OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cOPhaseIdealLoopUpeeled_dom_test_elim6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cIDivDNodeGOpcode6kM_i_; -text: .text%__1cQsubI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLStringTableJbasic_add6MinGHandle_pHiIpnGThread__pnHoopDesc__; -text: .text%__1cIModLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%jni_FindClass: jni.o; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cOMacroAssemblerOstore_argument6MpnMRegisterImpl_rnIArgument__v_: interpreterRT_sparc.o; -text: .text%__1cFParseHdo_irem6M_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorGcreate6FpnGThread__nGHandle__; -text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDesc__; -text: .text%__1cOcmovII_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSdivL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTloadL_unalignedNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSharedRuntimeDd2l6Fd_x_; -text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__; -text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_; -text: .text%__1cFStateP_sub_Op_RShiftL6MpknENode__v_; -text: .text%__1cPICStubInterfaceEsize6kMpnEStub__i_: icBuffer.o; -text: .text%__1cPICStubInterfaceIfinalize6MpnEStub__v_: icBuffer.o; -text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cQregI_to_stkINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRorI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; -text: .text%__1cMregD_lowOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cLConvD2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSconvI2F_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHMonitor2T6M_v_; -text: .text%__1cFTypeDFxmeet6kMpknEType__3_; -text: .text%__1cFMutex2T6M_v_; -text: .text%lwp_cond_destroy: os_solaris.o; -text: .text%lwp_mutex_destroy: os_solaris.o; -text: .text%__1cQdivI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cVcompiledICHolderKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cQregP_to_stkPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQstkI_to_regFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQregI_to_stkINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQRelocationHolderEplus6kMi_0_; -text: .text%__1cUPSMarkSweepDecoratorPadjust_pointers6M_v_; -text: .text%__1cUPSMarkSweepDecoratorKprecompact6M_v_; -text: .text%__1cQjava_lang_ThreadLthreadGroup6FpnHoopDesc__2_; -text: .text%__1cHCompileQgrow_alias_types6M_v_; -text: .text%__1cISubLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOcmovII_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; -text: .text%__1cKloadUBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTloadD_unalignedNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJLoadFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOloadConL13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRcompL_reg_conNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQaddF_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cICmpDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKsplit_once6FpnMPhaseIterGVN_pnENode_333_v_: cfgnode.o; -text: .text%__1cLLShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJloadFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJCMoveNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOPhaseIdealLoopOdo_range_check6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cSconvD2I_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitPdstore_rounding6MpnENode__2_; -text: .text%__1cJloadINodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSdivL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRloadConP_pollNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIModINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cZCallDynamicJavaDirectNodeKmethod_set6Mi_v_; -text: .text%__1cZCallDynamicJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSconvD2I_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZCallDynamicJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUmulL_reg_imm13_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQdivL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUdivL_reg_imm13_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cUmulL_reg_imm13_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cUVirtualCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cNObjectMonitor2t6M_v_; -text: .text%__1cIMulINodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIMulINodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cQdivD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJCmpD3NodeGOpcode6kM_i_; -text: .text%__1cJloadDNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMinINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOBasicHashtableJnew_entry6MI_pnTBasicHashtableEntry__; -text: .text%__1cQmulF_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_MonitorNotify; -text: .text%__1cFBlockNset_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; -text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; -text: .text%__1cXNativeSignatureIteratorJdo_object6Mii_v_: interpreterRT_sparc.o; -text: .text%__1cKstoreFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSstring_compareNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRtestI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVshrL_reg_imm6_L2INodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYjava_lang_reflect_MethodIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cOloadConL13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cYjava_lang_reflect_MethodPset_return_type6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__; -text: .text%__1cINegDNodeGOpcode6kM_i_; -text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cOimmI_32_63OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSsubL_reg_reg_2NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovII_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOstackSlotPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%jni_GetMethodID: jni.o; -text: .text%__1cQshlL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRshlI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOloadConL13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; -text: .text%__1cOMacroAssemblerDjmp6MpnMRegisterImpl_ipkci_v_; -text: .text%__1cIDivLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_GetClassDeclaredConstructors; -text: .text%__1cUdivL_reg_imm13_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKJavaThreadbScheck_safepoint_and_suspend_for_native_trans6Fp0_v_; -text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_; -text: .text%__1cUmulL_reg_imm13_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsubD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cUdivL_reg_imm13_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQregP_to_stkPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconvI2F_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_; -text: .text%__1cOcmovIF_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQcmovI_reg_ltNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadConL0NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cKo1RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cSsubL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQshrL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRsarL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIpass_int6M_v_: interpreterRT_sparc.o; -text: .text%__1cRorI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQshrL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQshrI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOimmI_32_63OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cOloadI_fregNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLConvI2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_; -text: .text%__1cQdivL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKCompiledICKcached_oop6kM_pnHoopDesc__; -text: .text%__1cISubFNodeGOpcode6kM_i_; -text: .text%JVM_IsThreadAlive; -text: .text%__1cXPartialSubtypeCheckNodeGOpcode6kM_i_; -text: .text%__1cLconvI2BNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovIF_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRsarL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRtestI_reg_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRtestI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsubI_zero_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmulL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovPI_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKConv2BNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSstring_compareNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQregL_to_stkLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_SystemTout_offset_in_bytes6F_i_; -text: .text%__1cQjava_lang_SystemSin_offset_in_bytes6F_i_; -text: .text%__1cWPredictedCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cSconvI2F_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCallGeneratorRfor_uncommon_trap6FpnIciMethod_nODeoptimizationLDeoptReason_n0CLDeoptAction__p0_; -text: .text%__1cOcmovPP_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZUncommonTrapCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMulFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cGThread2t6M_v_; -text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_; -text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; -text: .text%__1cFTypeFFxmeet6kMpknEType__3_; -text: .text%__1cCosScurrent_stack_size6F_I_; -text: .text%__1cIOSThreadNpd_initialize6M_v_; -text: .text%__1cCosScurrent_stack_base6F_pC_; -text: .text%__1cIOSThread2t6MpFpv_i1_v_; -text: .text%__1cIMulDNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cCosRinitialize_thread6F_v_; -text: .text%__1cSdivL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cCosPpd_start_thread6FpnGThread__v_; -text: .text%__1cLConvI2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNobjArrayKlassKinitialize6MpnGThread__v_; -text: .text%jni_NewObjectArray: jni.o; -text: .text%__1cSsubL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovIF_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_SetThreadPriority; -text: .text%__1cCosMstart_thread6FpnGThread__v_; -text: .text%__1cXjava_lang_reflect_FieldNset_modifiers6FpnHoopDesc_i_v_; -text: .text%JVM_GetStackAccessControlContext; -text: .text%__1cXjava_lang_reflect_FieldPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cFStateM_sub_Op_ModI6MpknENode__v_; -text: .text%JVM_Read; -text: .text%__1cOcmovPI_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKCompiledICOset_cached_oop6MpnHoopDesc__v_; -text: .text%__1cFStateM_sub_Op_SubL6MpknENode__v_; -text: .text%__1cKCompiledICMstub_address6kM_pC_; -text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cQsubL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cISubDNodeGOpcode6kM_i_; -text: .text%__1cQmodI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cRsarI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: callGenerator.o; -text: .text%__1cKReflectionInew_type6FnMsymbolHandle_nLKlassHandle_pnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_type6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldGcreate6FpnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_name6FpnHoopDesc_2_v_; -text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; -text: .text%jni_GetStaticFieldID: jni.o; -text: .text%__1cNloadKlassNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLstoreF0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_; -text: .text%__1cNinstanceKlassKjni_id_for6Mi_pnFJNIid__; -text: .text%__1cFStateO_sub_Op_CMoveI6MpknENode__v_; -text: .text%__1cENodeEgetf6kM_f_; -text: .text%JVM_DesiredAssertionStatus; -text: .text%__1cKJavaThreadKinitialize6M_v_; -text: .text%__1cWThreadLocalAllocBufferKinitialize6M_v_; -text: .text%__1cLConvL2DNodeGOpcode6kM_i_; -text: .text%__1cQThreadStatistics2t6M_v_; -text: .text%__1cUThreadSafepointStateGcreate6FpnKJavaThread__v_; -text: .text%__1cQshrL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsubD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cGThreadFstart6Fp0_v_; -text: .text%__1cOMacroAssemblerIround_to6MpnMRegisterImpl_i_v_: interp_masm_sparc.o; -text: .text%__1cPconvI2D_memNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%jni_GetFloatArrayRegion: jni.o; -text: .text%__1cJMarkSweepMfollow_stack6F_v_; -text: .text%__1cNimmP_pollOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cRtestI_reg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJMemRegionMintersection6kMk0_0_; -text: .text%__1cKJavaThread2t6MpFp0pnGThread__vI_v_; -text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; -text: .text%JVM_IsArrayClass; -text: .text%jni_CallStaticVoidMethod: jni.o; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnPPerfLongCounter__; -text: .text%__1cLConvF2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; -text: .text%__1cHnmethodbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cKstoreBNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFKlassNexternal_name6kM_pkc_; -text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; -text: .text%__1cKstoreLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOGenerateOopMapKinterp_all6M_v_; -text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_; -text: .text%__1cTloadD_unalignedNodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_GetClassName; -text: .text%__1cOloadI_fregNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapbAmake_context_uninitialized6M_v_; -text: .text%__1cOGenerateOopMapKinit_state6M_v_; -text: .text%__1cOGenerateOopMapYsetup_method_entry_state6M_v_; -text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_; -text: .text%__1cOGenerateOopMapRinit_basic_blocks6M_v_; -text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cOcmovIF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cCosMset_priority6FpnGThread_nOThreadPriority__nIOSReturn__; -text: .text%__1cLConvD2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOcmovIL_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_: interpreterRT_sparc.o; -text: .text%__1cINodeHashEgrow6M_v_; -text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; -text: .text%__1cOcmovPP_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cIMaxINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cJloadSNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; -text: .text%__1cLConvF2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%JVM_Open; -text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; -text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; -text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; -text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapNinitialize_bb6M_v_; -text: .text%__1cOGenerateOopMapbImark_bbheaders_and_count_gc_points6M_v_; -text: .text%__1cSmulL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSdivL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerEpush6MnITosState__v_; -text: .text%JVM_StartThread; -text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; -text: .text%jni_GetStaticObjectField: jni.o; -text: .text%__1cJArrayDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cIGraphKitSprecision_rounding6MpnENode__2_; -text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; -text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__: generateOptoStub.o; -text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; -text: .text%__1cQjava_lang_ThreadJstackSize6FpnHoopDesc__x_; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; -text: .text%__1cTLoadD_unalignedNodeGOpcode6kM_i_; -text: .text%__1cQshrI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_FreeMemory; -text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%JVM_TotalMemory; -text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cMloadConDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQdivL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovIL_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvI2D_memNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSandL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHThreadsGremove6FpnKJavaThread__v_; -text: .text%__1cIOSThread2T6M_v_; -text: .text%__1cUThreadSafepointStateHdestroy6FpnKJavaThread__v_; -text: .text%__1cKJavaThreadYremove_stack_guard_pages6M_v_; -text: .text%__1cQandI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQjava_lang_ThreadNset_stillborn6FpnHoopDesc__v_; -text: .text%__1cRInterpreterOopMapNresource_copy6MpnQOopMapCacheEntry__v_; -text: .text%__1cLConvD2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIOSThreadKpd_destroy6M_v_; -text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cKJavaThread2T6M_v_; -text: .text%__1cGThread2T5B6M_v_; -text: .text%__1cCosLfree_thread6FpnIOSThread__v_; -text: .text%__1cFStateM_sub_Op_MulI6MpknENode__v_; -text: .text%__1cNThreadServiceWcurrent_thread_exiting6FpnKJavaThread__v_; -text: .text%__1cLensure_join6FpnKJavaThread__v_: thread.o; -text: .text%__1cQOopMapCacheEntryEfill6MnMmethodHandle_i_v_; -text: .text%__1cSTailCalljmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapEppop6MpnNCellTypeState__v_; -text: .text%__1cSTailCalljmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQsubF_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRNativeMovConstRegEdata6kM_i_; -text: .text%__1cbFunnecessary_membar_volatileNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cLcmpF_ccNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; -text: .text%jni_CallObjectMethod: jni.o; -text: .text%__1cQaddD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvD2F_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRInlineCacheBufferUic_buffer_cached_oop6FpC_pnHoopDesc__; -text: .text%__1cQdivD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerbEset_method_data_pointer_offset6MpnMRegisterImpl__v_; -text: .text%__1cIMaxINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQChunkPoolCleanerEtask6M_v_: allocation.o; -text: .text%__1cHTypeInt2t6Miii_v_; -text: .text%__1cTOopMapForCacheEntryLcompute_map6MpnGThread__v_; -text: .text%__1cOcmovIL_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKConv2BNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSandL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadRangeNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshlI_reg_imm5NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorJpass_long6M_v_; -text: .text%__1cQregL_to_stkLNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapVresult_for_basicblock6Mi_v_; -text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_: interpreterRT_sparc.o; -text: .text%__1cQOopMapCacheEntryIset_mask6MpnNCellTypeState_2i_v_; -text: .text%__1cLOptoRuntimeYcurrent_time_millis_Type6F_pknITypeFunc__; -text: .text%__1cHTypePtrFxdual6kM_pknEType__; -text: .text%__1cOstackSlotIOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotIOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%JVM_MonitorNotifyAll; -text: .text%__1cJloadDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOstackSlotIOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cKCMoveLNodeGOpcode6kM_i_; -text: .text%__1cRshlL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cODeoptimizationVtrap_state_has_reason6Fii_i_; -text: .text%__1cTloadD_unalignedNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNiRegIsafeOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNloadConP0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSinstanceKlassKlassOklass_oop_size6kM_i_: instanceKlassKlass.o; -text: .text%__1cIAddDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMnegD_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSandL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPmethodDataKlassOklass_oop_size6kM_i_: methodDataKlass.o; -text: .text%__1cKarrayKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cLmethodKlassOklass_oop_size6kM_i_: methodKlass.o; -text: .text%__1cKarrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cWconstantPoolCacheKlassOklass_oop_size6kM_i_: cpCacheKlass.o; -text: .text%__1cQconstMethodKlassOklass_oop_size6kM_i_: constMethodKlass.o; -text: .text%__1cXJNI_ArgumentPusherVaArgJget_float6M_v_: jni.o; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_: arrayKlassKlass.o; -text: .text%__1cSobjArrayKlassKlassOklass_oop_size6kM_i_: objArrayKlassKlass.o; -text: .text%__1cLsymbolKlassOklass_oop_size6kM_i_: symbolKlass.o; -text: .text%__1cVcompiledICHolderKlassOklass_oop_size6kM_i_: compiledICHolderKlass.o; -text: .text%__1cSsubL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmulL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSdivL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRconstantPoolKlassOklass_oop_size6kM_i_: constantPoolKlass.o; -text: .text%__1cTtypeArrayKlassKlassOklass_oop_size6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cOloadI_fregNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRtestI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_; -text: .text%__1cJLoadSNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cLstoreF0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMinINodeIadd_ring6kMpknEType_3_3_; -text: .text%JVM_GetInheritedAccessControlContext; -text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; -text: .text%JVM_NativePath; -text: .text%__1cOMacroAssemblerNflush_windows6M_v_; -text: .text%__1cSsubD_regD_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVCallRuntimeDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_; -text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; -text: .text%__1cHCompileKinit_start6MpnJStartNode__v_; -text: .text%__1cKg3RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cVinline_cache_regPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKstorePNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQObjectStartArrayFreset6M_v_; -text: .text%__1cPconvI2D_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvF2INodeGOpcode6kM_i_; -text: .text%__1cVCallRuntimeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; -text: .text%__1cIPSOldGenPadjust_pointers6M_v_; -text: .text%__1cOcmovPI_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIPSOldGenHcompact6M_v_; -text: .text%__1cMtlsLoadPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLcmpF_ccNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cVCallRuntimeDirectNodeKmethod_set6Mi_v_; -text: .text%__1cKimmI11OperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cQcmovI_reg_gtNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLstoreP0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovIF_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovLL_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%jni_GetStaticMethodID: jni.o; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MipnMRegisterImpl__v_; -text: .text%__1cRtestI_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPconvF2D_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopKdo_peeling6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cOcmovLL_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%jint_cmp: parse2.o; -text: .text%__1cXjava_lang_boxing_objectJget_value6FpnHoopDesc_pnGjvalue__nJBasicType__; -text: .text%__1cNloadConL0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; -text: .text%__1cVMoveL2D_stack_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIMulDNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cIGraphKitTdprecision_rounding6MpnENode__2_; -text: .text%__1cOcmovLL_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLConvD2FNodeGOpcode6kM_i_; -text: .text%__1cIMulFNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cWloadConI_x41f00000NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKcmpOpFOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cLstoreC0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQregL_to_stkLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZregDHi_regDLo_to_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovIF_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovDF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQaddL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cZregDHi_regDLo_to_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_Close; -text: .text%__1cSmulD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKstoreFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSsubD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddP_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cXconvI2D_regDHi_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPPerfDataManagerUcreate_long_constant6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongConstant__; -text: .text%__1cOMacroAssemblerNget_vm_result6MpnMRegisterImpl__v_; -text: .text%__1cQsubF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerbIcompute_extra_locals_size_in_bytes6MpnMRegisterImpl_22_v_; -text: .text%__1cLcmpF_ccNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPMultiBranchDataScompute_cell_count6FpnOBytecodeStream__i_; -text: .text%__1cPorI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSxorI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvI2D_memNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQdivI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLconvI2BNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cISubFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cWloadConI_x43300000NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cWloadConI_x41f00000NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmulI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOtailjmpIndNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cRInlineCacheBufferSic_destination_for6FpnKCompiledIC__pC_; -text: .text%__1cbFunnecessary_membar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJSubFPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFParseNdo_instanceof6M_v_; -text: .text%__1cLconvI2BNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitOgen_instanceof6MpnENode_2_2_; -text: .text%__1cbFunnecessary_membar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRshrL_reg_imm6NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJloadBNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQdivI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIDivLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvI2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSmulD_regD_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOstackSlotLOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cKConv2BNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQshlI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_; -text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_; -text: .text%__1cJloadDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovPP_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsubF_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_NewObjectV: jni.o; -text: .text%__1cOcmovLI_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cCosHSolarisKmmap_chunk6FpcIii_2_; -text: .text%__1cXPartialSubtypeCheckNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%jni_EnsureLocalCapacity; -text: .text%__1cLstoreI0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIAddFNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cLConvD2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKoopFactoryUnew_compiledICHolder6FnMmethodHandle_nLKlassHandle_pnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cSCompiledStaticCallMset_to_clean6M_v_; -text: .text%__1cIDivDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cVcompiledICHolderKlassIallocate6MpnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddD_regD_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPfieldDescriptorUdouble_initial_value6kM_d_; -text: .text%__1cQsubD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovPP_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNSafePointNodeQpeek_monitor_obj6kM_pnENode__; -text: .text%__1cJloadFNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddI_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParsePdo_monitor_exit6M_v_; -text: .text%__1cObranchConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cObranchConFNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cSconvF2I_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmembar_releaseNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cObranchConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLcmpD_ccNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadLNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cISubDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_; -text: .text%__1cLResourceObj2n6FIn0APallocation_type__pv_; -text: .text%__1cNSafePointNodeQpeek_monitor_box6kM_pnENode__; -text: .text%__1cFTypeFFxdual6kM_pknEType__; -text: .text%__1cICmpFNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKVtableStubRpd_code_alignment6F_i_; -text: .text%__1cKarrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cKloadUBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTloadL_unalignedNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cINegDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cLConvI2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOcmovLL_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRorI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTloadL_unalignedNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKloadUBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cXconvI2D_regDHi_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerbFtest_invocation_counter_for_mdp6MpnMRegisterImpl_22rnFLabel__v_; -text: .text%__1cXconvI2D_regDHi_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSvframeArrayElementHfill_in6MpnOcompiledVFrame__v_; -text: .text%__1cFTypeDFxdual6kM_pknEType__; -text: .text%__1cSaddD_regD_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerbAincrement_backedge_counter6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerbBtest_backedge_count_for_osr6MpnMRegisterImpl_22_v_; -text: .text%__1cSmulL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcmovPI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKEntryPoint2t6M_v_; -text: .text%__1cTloadD_unalignedNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZregDHi_regDLo_to_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcompiledVFrameImonitors6kM_pnNGrowableArray4CpnLMonitorInfo____; -text: .text%__1cOcompiledVFrameLexpressions6kM_pnUStackValueCollection__; -text: .text%__1cHciKlassOsuper_of_depth6MI_p0_; -text: .text%__1cOcompiledVFrameGlocals6kM_pnUStackValueCollection__; -text: .text%__1cOcompiledVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cJimmP0OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cOcompiledVFrameHraw_bci6kM_i_; -text: .text%__1cQshrI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWloadConI_x43300000NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_; -text: .text%__1cMTailJumpNodeKmatch_edge6kMI_I_; -text: .text%__1cWloadConI_x41f00000NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cODeoptimizationbJupdate_method_data_from_interpreter6FnQmethodDataHandle_ii_v_; -text: .text%__1cIimmDOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cFframeZinterpreter_frame_set_mdx6Mi_v_; -text: .text%__1cOstackSlotLOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotLOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cTloadD_unalignedNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIModLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOtailjmpIndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSmulD_regD_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cINegFNodeGOpcode6kM_i_; -text: .text%__1cSsubD_regD_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJScopeDescImonitors6M_pnNGrowableArray4CpnMMonitorValue____; -text: .text%__1cJScopeDescLexpressions6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cJScopeDescGlocals6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%JVM_GetComponentType; -text: .text%__1cQdivI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%Unsafe_DefineClass1; -text: .text%__1cOcmovII_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLvframeArrayPunpack_to_stack6MrnFframe_i_v_; -text: .text%__1cKReflectionUarray_component_type6FpnHoopDesc_pnGThread__2_; -text: .text%__1cLConvF2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSvframeArrayElementDbci6kM_i_; -text: .text%__1cVMoveF2I_stack_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_GetCPFieldModifiers; -text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; -text: .text%__1cNnmethodLocker2t6MpC_v_; -text: .text%__1cNSharedRuntimebJcontinuation_for_implicit_exception6FpnKJavaThread_pCn0AVImplicitExceptionKind__3_; -text: .text%__1cODeoptimizationNuncommon_trap6FpnKJavaThread_i_pn0ALUnrollBlock__; -text: .text%__1cODeoptimizationTuncommon_trap_inner6FpnKJavaThread_i_v_; -text: .text%__1cODeoptimizationNunpack_frames6FpnKJavaThread_i_nJBasicType__; -text: .text%__1cODeoptimizationYfetch_unroll_info_helper6FpnKJavaThread__pn0ALUnrollBlock__; -text: .text%__1cZInterpreterMacroAssemblerXindex_check_without_pop6MpnMRegisterImpl_2i22_v_; -text: .text%__1cRSignatureIteratorKparse_type6M_i_; -text: .text%__1cPconvD2F_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHciKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cODeoptimizationRlast_frame_adjust6Fii_i_; -text: .text%__1cQsubD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_DefineClass; -text: .text%JVM_InvokeMethod; -text: .text%__1cOcmovPP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_NewDirectByteBuffer; -text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__: jni.o; -text: .text%jni_AllocObject: jni.o; -text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_; -text: .text%__1cTmembar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMnegD_regNodeIpipeline6kM_pknIPipeline__; -text: .text%Unsafe_AllocateInstance; -text: .text%__1cQComputeCallStackHdo_byte6M_v_: generateOopMap.o; -text: .text%__1cQstkI_to_regINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; -text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; -text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; -text: .text%__1cJStubQdDueueKremove_all6M_v_; -text: .text%__1cPconvI2D_memNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPorL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerLindex_check6MpnMRegisterImpl_2i22_v_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cSaddL_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovPI_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cKstfSSFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMloadConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKReflectionNinvoke_method6FpnHoopDesc_nGHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; -text: .text%__1cTmembar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvI2L_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovII_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; -text: .text%__1cJCmpF3NodeGOpcode6kM_i_; -text: .text%__1cLMoveL2DNodeGOpcode6kM_i_; -text: .text%__1cFKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__; -text: .text%__1cOcmovII_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIAddFNodeJideal_reg6kM_I_: classes.o; -text: .text%JVM_NewArray; -text: .text%__1cHOrLNodeGOpcode6kM_i_; -text: .text%__1cLStrCompNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLOopMapCache2t6M_v_; -text: .text%__1cNTemplateTableHconvert6F_v_; -text: .text%__1cOcmovDF_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerFpop_l6MpnMRegisterImpl__v_; -text: .text%__1cOcmovLI_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSMachBreakpointNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeQcreate_exception6FpnKJavaThread_pc3_v_; -text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cKPSYoungGenKprecompact6M_v_; -text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%__1cMnegF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsLgc_prologue6F_v_; -text: .text%__1cHThreadsLgc_epilogue6F_v_; -text: .text%__1cPconvI2L_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; -text: .text%__1cUParallelScavengeHeapHcollect6MnHGCCauseFCause__v_; -text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; -text: .text%__1cVLoaderConstraintTableYpurge_loader_constraints6MpnRBoolObjectClosure__v_; -text: .text%__1cVLoaderConstraintTableYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cLconvP2BNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_; -text: .text%__1cIciMethodVget_osr_flow_analysis6Mi_pnKciTypeFlow__; -text: .text%__1cLMoveF2INodeGOpcode6kM_i_; -text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; -text: .text%__1cMStartOSRNodeKosr_domain6F_pknJTypeTuple__; -text: .text%__1cVVM_ParallelGCSystemGCEdoit6M_v_; -text: .text%__1cJArgumentsQPropertyList_add6FppnOSystemProperty_2_v_; -text: .text%__1cOMacroAssemblerPbreakpoint_trap6M_v_; -text: .text%__1cJBasicLockHmove_to6MpnHoopDesc_p0_v_; -text: .text%__1cJMarkSweepNrestore_marks6F_v_; -text: .text%__1cJMarkSweepMadjust_marks6F_v_; -text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_; -text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; -text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_; -text: .text%__1cMStubCodeMark2T6M_v_; -text: .text%__1cNCallGeneratorHfor_osr6FpnIciMethod_i_p0_; -text: .text%__1cLClassLoaderSget_system_package6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cJPSPermGenKprecompact6M_v_; -text: .text%JVM_GC; -text: .text%__1cIPSOldGenKprecompact6M_v_; -text: .text%__1cUPSMarkSweepDecoratorbIset_destination_decorator_perm_gen6F_v_; -text: .text%__1cUPSMarkSweepDecoratorbHset_destination_decorator_tenured6F_v_; -text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cQmulL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cUPSAdaptiveSizePolicyUmajor_collection_end6MInHGCCauseFCause__v_; -text: .text%__1cUPSAdaptiveSizePolicyWmajor_collection_begin6M_v_; -text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; -text: .text%__1cJPSPermGenQcompute_new_size6MI_v_; -text: .text%__1cKPSYoungGenHcompact6M_v_; -text: .text%JVM_GetSystemPackage; -text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; -text: .text%__1cKPSYoungGenPadjust_pointers6M_v_; -text: .text%__1cJCodeCacheLgc_prologue6F_v_; -text: .text%__1cJCodeCacheLgc_epilogue6F_v_; -text: .text%__1cIXorINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQregL_to_stkLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKcmpOpFOperKless_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cOcmovPI_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmulL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovIF_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKCMoveDNodeGOpcode6kM_i_; -text: .text%__1cJLoadDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIMulFNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cNStubGeneratorLstub_prolog6MpnMStubCodeDesc__v_: stubGenerator_sparc.o; -text: .text%__1cQaddL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%jni_GetStringRegion: jni.o; -text: .text%JVM_RawMonitorCreate; -text: .text%__1cJloadLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIMulFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cOstackSlotPOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotPOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotPOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; -text: .text%JVM_Sleep; -text: .text%__1cLConvL2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQstkI_to_regFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceRefKlass.o; -text: .text%__1cRorI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%Unsafe_CompareAndSwapInt; -text: .text%JVM_Lseek; -text: .text%__1cNloadRangeNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPconvD2F_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRComputeEntryStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cPconvF2D_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQmulF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegF_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSconvF2I_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovLI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPMultiBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cQregP_to_stkPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerQtest_mdp_data_at6MipnMRegisterImpl_rnFLabel_2_v_; -text: .text%__1cQstkI_to_regINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovLI_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cGciType2t6MnJBasicType__v_; -text: .text%__1cJLoadBNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cQaddF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cETypeEmake6Fn0AFTYPES__pk0_; -text: .text%__1cSconvF2I_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsarL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSstring_compareNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_GetEnv; -text: .text%__1cJloadDNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQstkI_to_regINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_: interpreterRT_sparc.o; -text: .text%Unsafe_GetNativeByte; -text: .text%JVM_NanoTime; -text: .text%__1cCosNjavaTimeNanos6F_x_; -text: .text%__1cOMacroAssemblerOrestore_thread6MkpnMRegisterImpl__v_; -text: .text%__1cQandL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIimmFOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cKcmpOpFOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cICodeBlobFflush6M_v_; -text: .text%__1cFParseMdo_anewarray6M_v_; -text: .text%__1cSdivL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_CallVoidMethod: jni.o; -text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; -text: .text%__1cObranchConFNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cFParseOdo_tableswitch6M_v_; -text: .text%__1cOcmovIF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvI2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSaddL_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLstoreC0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%Unsafe_GetNativeFloat; -text: .text%__1cOstackSlotFOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cHnmethodFflush6M_v_; -text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; -text: .text%__1cKo2RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQregI_to_stkINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cWloadConI_x43300000NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParseQdo_monitor_enter6M_v_; -text: .text%__1cPorL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreC0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_FindPrimitiveClass; -text: .text%__1cVMoveL2D_stack_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; -text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cRshrI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cSsubL_reg_reg_2NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUmulL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cOstackSlotFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cUdivL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRSignatureIteratorHiterate6M_v_; -text: .text%__1cOcmovLL_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cJname2type6Fpkc_nJBasicType__; -text: .text%__1cSmulL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOloadConL13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKcmpOpFOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%__1cIDivDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOMacroAssemblerKget_thread6M_v_; -text: .text%__1cOcmovDF_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovIF_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconvI2F_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKVtableStub2n6FIi_pv_; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_; -text: .text%__1cOtypeArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlass.o; -text: .text%__1cPconvD2F_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIciMethodMnative_entry6M_pC_; -text: .text%__1cVMoveF2I_stack_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPPerfDataManagerWcreate_string_variable6FnJCounterNS_pkci3pnGThread__pnSPerfStringVariable__; -text: .text%__1cPorL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvD2F_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIciSymbolHas_utf86M_pkc_; -text: .text%__1cQandI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cMnegD_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cFStateO_sub_Op_CMoveP6MpknENode__v_; -text: .text%__1cQmulD_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerZtotal_frame_size_in_bytes6Mi_i_; -text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; -text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; -text: .text%Unsafe_StaticFieldOffset; -text: .text%__1cQmulI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQaddI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovLI_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetClassContext; -text: .text%Unsafe_StaticFieldBaseFromField; -text: .text%Unsafe_EnsureClassInitialized; -text: .text%__1cOcmovIF_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pCi_v_; -text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_; -text: .text%Unsafe_GetObjectVolatile; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2t6M_v_; -text: .text%__1cKstoreFNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cVMoveL2D_stack_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJLoadLNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cNSharedRuntimeVhandle_ic_miss_helper6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cOloadConL13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_; -text: .text%__1cLstoreF0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPconvI2D_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cETypeFxdual6kM_pk0_; -text: .text%__1cJOopMapSetQsingular_oop_map6M_pnGOopMap__; -text: .text%__1cKimmU13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cZInterpreterMacroAssemblerTnotify_method_entry6M_v_; -text: .text%__1cZInterpreterMacroAssemblerbCincrement_invocation_counter6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerQaccess_local_int6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerWempty_expression_stack6M_v_; -text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_; -text: .text%__1cOcmovIL_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkci_pc_; -text: .text%__1cOtailjmpIndNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNMemoryManagerIadd_pool6MpnKMemoryPool__v_; -text: .text%__1cCosEstat6FpkcpnEstat__i_; -text: .text%__1cQregF_to_stkINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRComputeEntryStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cRComputeEntryStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cMMonitorChunk2t6Mi_v_; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cOPhaseIdealLoopJclone_iff6MpnHPhiNode_pnNIdealLoopTree__pnIBoolNode__; -text: .text%__1cQComputeCallStackIdo_float6M_v_: generateOopMap.o; -text: .text%__1cMMonitorValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cPciObjArrayKlassJmake_impl6FpnHciKlass__p0_; -text: .text%__1cPorL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOptoRuntimeMrethrow_Type6F_pknITypeFunc__; -text: .text%jni_SetStaticObjectField: jni.o; -text: .text%jni_RegisterNatives: jni.o; -text: .text%__1cFframebLprevious_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; -text: .text%__1cQshlL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetClassDeclaredFields; -text: .text%__1cCosMuser_handler6F_pv_; -text: .text%JVM_IsSameClassPackage; -text: .text%__1cKMemoryPoolLadd_manager6MpnNMemoryManager__v_; -text: .text%__1cKJavaThreadRadd_monitor_chunk6MpnMMonitorChunk__v_; -text: .text%__1cKJavaThreadUremove_monitor_chunk6MpnMMonitorChunk__v_; -text: .text%__1cVMoveL2D_stack_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableGiconst6Fi_v_; -text: .text%__1cLConvF2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%JVM_LoadLibrary; -text: .text%JVM_IsSupportedJNIVersion; -text: .text%Unsafe_ObjectFieldOffset; -text: .text%__1cZInterpreterMacroAssemblerYtest_method_data_pointer6MrnFLabel__v_; -text: .text%__1cNTemplateTableHif_0cmp6Fn0AJCondition__v_; -text: .text%__1cZInterpreterMacroAssemblerSget_cpool_and_tags6MpnMRegisterImpl_2_v_; -text: .text%__1cIAddDNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cNTemplateTableHif_icmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableH_return6FnITosState__v_; -text: .text%__1cHOrLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKimmP13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLConvD2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSObjectSynchronizerJjni_enter6FnGHandle_pnGThread__v_; -text: .text%__1cHnmethodbJcontinuation_for_implicit_exception6MpC_1_; -text: .text%__1cNSharedRuntimeEdrem6Fdd_d_; -text: .text%__1cPstoreI_FregNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cTloadD_unalignedNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOloadI_fregNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLconvP2BNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cCosZvm_allocation_granularity6F_i_; -text: .text%__1cMTailJumpNodeGOpcode6kM_i_; -text: .text%__1cTloadD_unalignedNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle_pnIciSymbol__v_; -text: .text%__1cJMemRegion2t6M_v_: cardTableModRefBS.o; -text: .text%__1cSObjectSynchronizerIjni_exit6FpnHoopDesc_pnGThread__v_; -text: .text%__1cNRegisterSaverWrestore_live_registers6FpnOMacroAssembler__v_; -text: .text%__1cLTypeInstPtrOxmeet_unloaded6kMpk0_2_; -text: .text%__1cRtestI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_pnUPerfLongSampleHelper__v_; -text: .text%__1cWImplicitExceptionTable2t6MpknHnmethod__v_; -text: .text%__1cWImplicitExceptionTableCat6kMI_I_; -text: .text%__1cFParseVcatch_call_exceptions6MrnYciExceptionHandlerStream__v_; -text: .text%jni_GetJavaVM; -text: .text%__1cOcmovDF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_MonitorEnter: jni.o; -text: .text%jni_MonitorExit: jni.o; -text: .text%__1cLConvL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cULinearLeastSquareFit2t6MI_v_; -text: .text%__1cQdivL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; -text: .text%__1cNReservedSpace2t6MI_v_; -text: .text%__1cSCardTableExtensionVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cOloadI_fregNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cIAddDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJloadFNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKConv2BNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvI2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSconvD2I_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_Throw: jni.o; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC_v_; -text: .text%__1cLMoveL2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIDivINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cISubDNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cPstoreI_FregNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cINegFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOLibraryCallKitXgenerate_current_thread6MrpnENode__2_; -text: .text%__1cOMacroAssemblerEfneg6MnRFloatRegisterImplFWidth_p13_v_; -text: .text%__1cXNativeSignatureIteratorJdo_double6M_v_: interpreterRT_sparc.o; -text: .text%__1cRtestI_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNSpaceCounters2t6MpkciIpnMMutableSpace_pnSGenerationCounters__v_; -text: .text%__1cLcmpF_ccNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; -text: .text%jni_SetObjectField: jni.o; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__; -text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_; -text: .text%bootstrap_flush_windows; -text: .text%__1cSdivL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerbCverify_oop_or_return_address6MpnMRegisterImpl_2_v_; -text: .text%__1cFStateO_sub_Op_Conv2B6MpknENode__v_; -text: .text%__1cNRegisterSaverTsave_live_registers6FpnOMacroAssembler_ipi_pnGOopMap__; -text: .text%__1cSmulL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_int_field06FnJBasicType__pC_; -text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_; -text: .text%__1cSsubL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_double6M_v_; -text: .text%__1cQmulD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%Unsafe_AllocateMemory; -text: .text%__1cSandL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetLastErrorString; -text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_; -text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; -text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_; -text: .text%__1cPstoreI_FregNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableEdop26Fn0AJOperation__v_; -text: .text%__1cSandI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMnegD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNciMethodKlassEmake6F_p0_; -text: .text%__1cNTemplateTableGlstore6Fi_v_; -text: .text%__1cLConvF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; -text: .text%__1cRcompL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvD2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSconvD2I_helperNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsubI_zero_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstfSSFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOClassPathEntry2t6M_v_; -text: .text%__1cZInterpreterMacroAssemblerQaccess_local_ptr6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableGistore6Fi_v_; -text: .text%__1cIRetTableUfind_jsrs_for_target6Mi_pnNRetTableEntry__; -text: .text%__1cPconvL2I_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cUcompI_iReg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsarI_reg_imm5NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableGastore6Fi_v_; -text: .text%__1cIRetTableHadd_jsr6Mii_v_; -text: .text%__1cMnegF_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQregF_to_stkINodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRComputeEntryStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cNTemplateTableGdstore6Fi_v_; -text: .text%__1cNTemplateTableGfstore6Fi_v_; -text: .text%jni_CallStaticObjectMethod: jni.o; -text: .text%__1cOcmovLL_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLconvI2BNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cODeoptimizationLUnrollBlockOsize_of_frames6kM_i_; -text: .text%__1cCosGsignal6Fipv_1_; -text: .text%__1cQaddD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cISubDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cISubFNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cISubFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableFlload6Fi_v_; -text: .text%__1cNTemplateTableFiload6Fi_v_; -text: .text%__1cMOopMapStream2t6MpnGOopMap_i_v_; -text: .text%__1cLconvP2BNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVMoveF2I_stack_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC22_v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC2_v_; -text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; -text: .text%__1cOGenerateOopMapTret_jump_targets_do6MpnOBytecodeStream_pFp0ipi_vi4_v_; -text: .text%Unsafe_SetMemory; -text: .text%__1cKstfSSFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_x6MnJAssemblerJCondition_pCpnMRegisterImpl__v_; -text: .text%__1cVMoveF2I_stack_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHTypePtrKadd_offset6kMi_pk0_; -text: .text%__1cOcmovLI_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadConL0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovPI_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovDF_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseRjump_if_true_fork6MpnGIfNode_ii_v_; -text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_icc6MnJAssemblerJCondition_pCpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableFfload6Fi_v_; -text: .text%__1cFParsePdo_lookupswitch6M_v_; -text: .text%__1cNTemplateTableFdload6Fi_v_; -text: .text%__1cKstfSSFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cINegDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableFaload6Fi_v_; -text: .text%__1cRMachSpillCopyNodeHsize_of6kM_I_: ad_sparc.o; -text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; -text: .text%__1cOGenerateOopMapRdo_multianewarray6Mii_v_; -text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%jni_CallStaticObjectMethodV: jni.o; -text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_; -text: .text%__1cJMemRegionFminus6kMk0_0_; -text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; -text: .text%__1cSInterpreterRuntimebKthrow_ArrayIndexOutOfBoundsException6FpnKJavaThread_pci_v_; -text: .text%__1cNMemoryManager2t6M_v_; -text: .text%__1cFStatebB_sub_Op_PartialSubtypeCheck6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_DivI6MpknENode__v_; -text: .text%__1cUPSGenerationCounters2t6MpkciipnOPSVirtualSpace__v_; -text: .text%__1cCosFyield6F_v_; -text: .text%__1cQsubD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXNativeSignatureIteratorIdo_float6M_v_: interpreterRT_sparc.o; -text: .text%__1cIDivDNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFParseRdo_multianewarray6M_v_; -text: .text%__1cLOptoRuntimeTmultianewarray_Type6Fi_pknITypeFunc__; -text: .text%__1cZInterpreterMacroAssemblerRget_constant_pool6MpnMRegisterImpl__v_; -text: .text%__1cXPartialSubtypeCheckNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOcmovIF_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLMoveF2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSconvI2D_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLstoreF0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerLlock_object6MpnMRegisterImpl_2_v_; -text: .text%__1cPstoreI_FregNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovLL_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_i2_v_; -text: .text%__1cNSafepointBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cMciArrayKlassRbase_element_type6M_pnGciType__; -text: .text%JVM_GetInterfaceVersion; -text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_2222rnFLabel__v_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableGfconst6Fi_v_; -text: .text%__1cGThreadbFinitialize_thread_local_storage6M_v_; -text: .text%__1cOcmovPI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGThreadbArecord_stack_base_and_size6M_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_; -text: .text%JVM_RegisterSignal; -text: .text%JVM_FindSignal; -text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pIi_v_: oopMapCache.o; -text: .text%jio_vsnprintf; -text: .text%__1cQshrL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_222_v_; -text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; -text: .text%__1cOPSVirtualSpace2t6MnNReservedSpace_I_v_; -text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o; -text: .text%__1cNIdealLoopTreeUmerge_many_backedges6MpnOPhaseIdealLoop__v_; -text: .text%__1cODeoptimizationLUnrollBlock2T6M_v_; -text: .text%jni_GetDoubleArrayRegion: jni.o; -text: .text%__1cMLinkResolverbBlookup_method_in_interfaces6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cLconvP2BNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKfix_parent6FpnNIdealLoopTree_1_v_: loopnode.o; -text: .text%JVM_Available; -text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_; -text: .text%__1cQshlL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cZInterpreterMacroAssemblerQtop_most_monitor6M_nHAddress__; -text: .text%__1cLstoreF0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; -text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_; -text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; -text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cOstackSlotFOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotFOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotFOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cNTemplateTableGlconst6Fi_v_; -text: .text%__1cLstoreC0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMPeriodicTaskGenroll6M_v_; -text: .text%__1cMPeriodicTask2t6MI_v_; -text: .text%__1cNTemplateTableHcastore6F_v_; -text: .text%Unsafe_CompareAndSwapObject; -text: .text%__1cLNamedThread2t6M_v_; -text: .text%__1cLNamedThreadIset_name6MpkcE_v_; -text: .text%__1cJloadDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQdivD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWloadConI_x43300000NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableKinitialize6F_v_; -text: .text%__1cKcmpOpFOperJnot_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cPconvD2F_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableKdouble_cmp6Fi_v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fi_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC22_v_; -text: .text%__1cNTemplateTableGdconst6Fi_v_; -text: .text%__1cSconvF2I_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovIF_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovIF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJimmL0OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cSaddD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSsubD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQregF_to_stkINodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNTemplateTableTinvokevfinal_helper6FpnMRegisterImpl_2_v_; -text: .text%__1cSmulD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableUgenerate_vtable_call6FpnMRegisterImpl_22_v_; -text: .text%__1cNTemplateTableKif_nullcmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableHif_acmp6Fn0AJCondition__v_; -text: .text%__1cNVM_DeoptimizeEdoit6M_v_; -text: .text%__1cMnegF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQsubL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMVirtualSpace2t6M_v_; -text: .text%__1cWloadConI_x41f00000NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQdivI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZregDHi_regDLo_to_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXconvI2D_regDHi_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKloadUBNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNTemplateTableEidiv6F_v_; -text: .text%__1cQstkI_to_regINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLMoveL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLConvD2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLConvF2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_float_field06FnJBasicType__pC_; -text: .text%__1cLMoveF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLOptoRuntimeIl2f_Type6F_pknITypeFunc__; -text: .text%__1cOMacroAssemblerUcalc_mem_param_words6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MnITosState_pnMRegisterImpl_3_v_; -text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; -text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; -text: .text%__1cZInterpreterMacroAssemblerSupdate_mdp_for_ret6MnITosState_pnMRegisterImpl__v_; -text: .text%__1cMLinkResolverbEvtable_index_of_miranda_method6FnLKlassHandle_nMsymbolHandle_2pnGThread__i_; -text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; -text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_26MpCpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_1_x6MnJAssemblerJCondition_rnFLabel__v_; -text: .text%__1cZInterpreterMacroAssemblerZget_4_byte_integer_at_bcp6MipnMRegisterImpl_2n0AKsetCCOrNot__v_; -text: .text%__1cCosHrealloc6FpvI_1_; -text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; -text: .text%__1cFStateO_sub_Op_CMoveL6MpknENode__v_; -text: .text%__1cZInterpreterMacroAssemblerRaccess_local_long6MpnMRegisterImpl_2_v_; -text: .text%__1cIPSOldGenPinitialize_work6Mpkci_v_; -text: .text%__1cCosIjvm_path6Fpci_v_; -text: .text%__1cCosNsigexitnum_pd6F_i_; -text: .text%__1cCosScurrent_process_id6F_i_; -text: .text%__1cINegFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_; -text: .text%__1cLConvL2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvF2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvD2FNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKJNIHandlesQmake_weak_global6FnGHandle__pnI_jobject__; -text: .text%__1cZInterpreterMacroAssemblerSaccess_local_float6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerTaccess_local_double6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerPstore_local_int6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerQstore_local_long6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerRstore_local_float6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerSstore_local_double6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cCosWactive_processor_count6F_i_; -text: .text%__1cTAbstractInterpreterKinitialize6F_v_; -text: .text%jni_NewWeakGlobalRef: jni.o; -text: .text%__1cRComputeEntryStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cTMaskFillerForNativeLpass_object6M_v_: oopMapCache.o; -text: .text%__1cOGenerateOopMapTadd_to_ref_init_set6Mi_v_; -text: .text%__1cUGcThreadCountClosureJdo_thread6MpnGThread__v_; -text: .text%__1cNinstanceKlassSremove_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cOPSVirtualSpace2t6M_v_; -text: .text%jni_IsInstanceOf: jni.o; -text: .text%__1cMGCTaskThreadDrun6M_v_; -text: .text%__1cJCodeCachebGmake_marked_nmethods_not_entrant6F_v_; -text: .text%__1cTMaskFillerForNativeJpass_long6M_v_: oopMapCache.o; -text: .text%jni_CallStaticVoidMethodV: jni.o; -text: .text%jni_CallStaticBooleanMethod: jni.o; -text: .text%__1cMGCTaskThread2t6MpnNGCTaskManager_II_v_; -text: .text%__1cOtailjmpIndNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMGCTaskThreadFstart6M_v_; -text: .text%__1cQObjectStartArrayKinitialize6MnJMemRegion__v_; -text: .text%__1cQObjectStartArraySset_covered_region6MnJMemRegion__v_; -text: .text%__1cZInterpreterMacroAssemblerbAdispatch_next_noverify_oop6MnITosState_i_v_; -text: .text%__1cRCollectorCounters2t6Mpkci_v_; -text: .text%__1cFParseDl2f6M_v_; -text: .text%__1cPGCMemoryManagerXinitialize_gc_stat_info6M_v_; -text: .text%__1cJArgumentsVset_parallel_gc_flags6F_v_; -text: .text%__1cPGCMemoryManager2t6M_v_; -text: .text%__1cRComputeEntryStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cSInterpreterRuntimeWcreate_klass_exception6FpnKJavaThread_pcpnHoopDesc__v_; -text: .text%__1cQcreate_os_thread6FpnGThread_I_pnIOSThread__: os_solaris.o; -text: .text%__1cYjava_lang_reflect_MethodPcompute_offsets6F_v_; -text: .text%__1cSInterpreterRuntimeSupdate_mdp_for_ret6FpnKJavaThread_i_v_; -text: .text%__1cPorL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjava_lang_ThreadPcompute_offsets6F_v_; -text: .text%__1cXNativeSignatureIteratorHdo_byte6M_v_: interpreterRT_sparc.o; -text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; -text: .text%__1cCosbDallocate_thread_local_storage6F_i_; -text: .text%__1cUInterpreterGeneratorVrestore_native_result6M_v_; -text: .text%__1cVjava_lang_ThreadGroupPcompute_offsets6F_v_; -text: .text%__1cLconvP2BNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVshrL_reg_imm6_L2INodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cCosGstrdup6Fpkc_pc_; -text: .text%__1cCosLinit_random6Fl_v_; -text: .text%__1cUInterpreterGeneratorXgenerate_accessor_entry6M_pC_; -text: .text%__1cCosXterminate_signal_thread6F_v_; -text: .text%__1cCosLsignal_init6F_v_; -text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; -text: .text%__1cOtailjmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUInterpreterGeneratorUgenerate_empty_entry6M_pC_; -text: .text%__1cUInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cCosbDinit_system_properties_values6F_v_; -text: .text%__1cCosPphysical_memory6F_X_; -text: .text%__1cHvm_exit6Fi_v_; -text: .text%__1cLbefore_exit6FpnKJavaThread__v_; -text: .text%__1cbCAbstractInterpreterGeneratorbFgenerate_slow_signature_handler6M_pC_; -text: .text%__1cSThreadLocalStorageHpd_init6F_v_; -text: .text%__1cVMoveF2I_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVMoveL2D_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWinvocationCounter_init6F_v_; -text: .text%__1cKTypeOopPtrFxdual6kM_pknEType__; -text: .text%__1cFParseMjump_if_join6MpnENode_2_2_; -text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cSinstanceKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlassKlass.o; -text: .text%__1cETypeRInitialize_shared6FpnHCompile__v_; -text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_; -text: .text%__1cVInterfaceSupport_init6F_v_; -text: .text%__1cPGenerationSizerQinitialize_flags6M_v_: parallelScavengeHeap.o; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_normal6MnITosState__v_; -text: .text%__1cJTimeStampMmilliseconds6kM_x_; -text: .text%__1cDhpiZinitialize_socket_library6F_i_; -text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_; -text: .text%__1cWInlineCacheBuffer_init6F_v_; -text: .text%__1cWThreadLocalAllocBufferWstartup_initialization6F_v_; -text: .text%__1cPGlobalTLABStats2t6M_v_; -text: .text%__1cLicache_init6F_v_; -text: .text%__1cSThreadLocalStorageEinit6F_v_; -text: .text%__1cNThreadServiceEinit6F_v_; -text: .text%__1cTICacheStubGeneratorVgenerate_icache_flush6MppFpCii_i_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: indexSet.o; -text: .text%__1cPvm_init_globals6F_v_; -text: .text%__1cMinit_globals6F_i_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_sparc_expand.o; -text: .text%__1cMexit_globals6F_v_; -text: .text%__1cSset_init_completed6F_v_; -text: .text%__1cNinstanceKlassZrelease_C_heap_structures6M_v_; -text: .text%__1cJTimeStampJupdate_to6Mx_v_; -text: .text%__1cUParallelScavengeHeapItop_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; -text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: interp_masm_sparc.o; -text: .text%__1cQinterpreter_init6F_v_; -text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; -text: .text%__1cNpriocntl_stub6FinGidtype_lipc_l_: os_solaris.o; -text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; -text: .text%__1cCosLsignal_wait6F_i_; -text: .text%__1cCosNsignal_notify6Fi_v_; -text: .text%__1cCosOsignal_init_pd6F_v_; -text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; -text: .text%__1cCosSget_temp_directory6F_pkc_; -text: .text%__1cCosHSolarisOlibthread_init6F_v_; -text: .text%__1cUParallelScavengeHeapIend_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; -text: .text%__1cUParallelScavengeHeapEheap6F_p0_; -text: .text%__1cUParallelScavengeHeapNgc_threads_do6kMpnNThreadClosure__v_; -text: .text%__1cUParallelScavengeHeapYpermanent_object_iterate6MpnNObjectClosure__v_; -text: .text%__1cKcmpOpFOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cUParallelScavengeHeapMmax_capacity6kM_I_; -text: .text%__1cUParallelScavengeHeapPpost_initialize6M_v_; -text: .text%__1cUParallelScavengeHeapKinitialize6M_i_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; -text: .text%__1cZInterpreterMacroAssemblerbFset_method_data_pointer_for_bcp6M_v_; -text: .text%__SLIP.DELETER__C: ostream.o; -text: .text%__1cMostream_exit6F_v_; -text: .text%__1cQostream_init_log6F_v_; -text: .text%__1cMostream_init6F_v_; -text: .text%__1cCosXnon_memory_address_word6F_pc_; -text: .text%__1cCosGinit_26F_i_; -text: .text%__1cCosEinit6F_v_; -text: .text%__1cCosHSolarisUsynchronization_init6F_v_; -text: .text%__1cVjni_GetLongField_addr6F_pC_; -text: .text%__1cNIdealLoopTreeQsplit_outer_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cRLowMemoryDetectorKinitialize6F_v_; -text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_; -text: .text%__1cNReservedSpaceUpage_align_size_down6FI_I_; -text: .text%__1cNReservedSpaceYallocation_align_size_up6FI_I_; -text: .text%__1cTloadL_unalignedNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: machnode.o; -text: .text%__1cPmanagement_init6F_v_; -text: .text%__1cOvmStructs_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; -text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_; -text: .text%__1cKManagementKinitialize6FpnGThread__v_; -text: .text%__1cKManagementWrecord_vm_startup_time6Fxx_v_; -text: .text%__1cIVMThreadGcreate6F_v_; -text: .text%__1cIVMThreadDrun6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; -text: .text%__1cLJvmtiExportNpost_vm_start6F_v_; -text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_; -text: .text%__1cLJvmtiExportNpost_vm_death6F_v_; -text: .text%__1cLJvmtiExportbMtransition_pending_onload_raw_monitors6F_v_; -text: .text%__1cUJvmtiPendingMonitorsXtransition_raw_monitors6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiImpl.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o; -text: .text%__1cKklassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cKklassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: klassKlass.o; -text: .text%__1cVLoaderConstraintTable2t6Mi_v_; -text: .text%__1cQregL_to_stkLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHRetDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cTAbstract_VM_VersionKvm_release6F_pkc_; -text: .text%__1cTAbstract_VM_VersionXinternal_vm_info_string6F_pkc_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; -text: .text%__1cPVM_Version_init6F_v_; -text: .text%__1cKVM_VersionKinitialize6F_v_; -text: .text%__1cHRetDataJfixup_ret6MinQmethodDataHandle__pC_; -text: .text%__1cLmethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cLmethodKlassOset_alloc_size6MI_v_: methodKlass.o; -text: .text%__1cQvtableStubs_init6F_v_; -text: .text%__1cKi0RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKg1RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodKlass.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: methodLiveness.o; -text: .text%__1cMMutableSpaceOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cKmutex_init6F_v_; -text: .text%__1cQaccessFlags_init6F_v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC222_v_; -text: .text%__1cTAbstract_VM_VersionJvm_vendor6F_pkc_; -text: .text%__1cOmarksweep_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: matcher.o; -text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_; -text: .text%__1cNMemoryManagerbDget_psScavenge_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cNMemoryManagerbEget_psMarkSweep_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cHVM_ExitEdoit6M_v_; -text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_; -text: .text%__1cNMemoryServiceZadd_code_heap_memory_pool6FpnICodeHeap__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o; -text: .text%__1cPmethodDataKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cPmethodDataKlassOset_alloc_size6MI_v_: methodDataKlass.o; -text: .text%__1cPmethodDataKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodDataKlass.o; -text: .text%__1cTAbstract_VM_VersionHvm_name6F_pkc_; -text: .text%__1cLstoreF0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%JNI_CreateJavaVM; -text: .text%__1cQJNI_FastGetFieldbFgenerate_fast_get_boolean_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_byte_field6F_pC_; -text: .text%__1cTtypeArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_char_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_short_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbBgenerate_fast_get_int_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_long_field6F_pC_; -text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlassKlass.o; -text: .text%__1cIUniversePcheck_alignment6FIIpkc_v_; -text: .text%__1cIUniverseHgenesis6FpnGThread__v_; -text: .text%__1cVquicken_jni_functions6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cYjava_lang_reflect_MethodNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cQdivD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLJavaClassesbAcompute_hard_coded_offsets6F_v_; -text: .text%__1cQjavaClasses_init6F_v_; -text: .text%jni_ToReflectedMethod: jni.o; -text: .text%__1cQsubD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cYjni_GetBooleanField_addr6F_pC_; -text: .text%__1cVjni_GetByteField_addr6F_pC_; -text: .text%__1cQaddF_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cVjni_GetCharField_addr6F_pC_; -text: .text%__1cWjni_GetShortField_addr6F_pC_; -text: .text%__1cUjni_GetIntField_addr6F_pC_; -text: .text%__1cOtypeArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cWjni_GetFloatField_addr6F_pC_; -text: .text%__1cRsarL_reg_imm6NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cXjni_GetDoubleField_addr6F_pC_; -text: .text%__1cQshlI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIUniverseNfixup_mirrors6FpnGThread__v_; -text: .text%JVM_InitializeSocketLibrary; -text: .text%JVM_RegisterUnsafeMethods; -text: .text%__1cOcmovLI_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovLI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovDF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_Socket; -text: .text%__1cbEinitialize_converter_functions6F_v_; -text: .text%JVM_SupportsCX8; -text: .text%__1cOcmovIF_immNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cUJvmtiEventControllerIvm_start6F_v_; -text: .text%__1cUJvmtiEventControllerHvm_init6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_death6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEventController.o; -text: .text%__1cKstfSSFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLJvmtiExportRenter_start_phase6F_v_; -text: .text%__1cLJvmtiExportQenter_live_phase6F_v_; -text: .text%__1cSmulL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_float_field6F_pC_; -text: .text%__1cSmulI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_double_field6F_pC_; -text: .text%__1cNuniverse_init6F_i_; -text: .text%__1cOuniverse2_init6F_v_; -text: .text%__1cQjni_handles_init6F_v_; -text: .text%__1cSobjArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlassKlass.o; -text: .text%Unsafe_SetNativeLong; -text: .text%JVM_InitProperties; -text: .text%JVM_Halt; -text: .text%Unsafe_FreeMemory; -text: .text%Unsafe_PageSize; -text: .text%JVM_MaxMemory; -text: .text%__1cSobjArrayKlassKlassbEallocate_system_objArray_klass6MpnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%JVM_GetClassDeclaredMethods; -text: .text%__1cPPerfDataManagerHsampled6F_pnMPerfDataList__; -text: .text%__1cQSystemDictionaryKclasses_do6FpFpnMklassOopDesc__v_v_; -text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_; -text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_; -text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; -text: .text%__1cPClassFileParserbFjava_lang_ref_Reference_fix_pre6MpnPtypeArrayHandle_nSconstantPoolHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_; -text: .text%__1cLClassLoaderQload_zip_library6F_v_; -text: .text%__1cLClassLoaderZcreate_package_info_table6F_v_; -text: .text%__1cLClassLoaderKinitialize6F_v_; -text: .text%__1cLClassLoaderVcompute_Object_vtable6F_i_; -text: .text%__1cMPeriodicTask2T5B6M_v_; -text: .text%__1cQclassLoader_init6F_v_; -text: .text%__1cMPeriodicTaskJdisenroll6M_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: classLoader.o; -text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: regmask.o; -text: .text%__1cUciObjArrayKlassKlassEmake6F_p0_; -text: .text%__1cVRegistersForDebuggingRrestore_registers6FpnOMacroAssembler_pnMRegisterImpl__v_: assembler_sparc.o; -text: .text%__1cVRegistersForDebuggingOsave_registers6FpnOMacroAssembler__v_: assembler_sparc.o; -text: .text%__1cJBytecodesKinitialize6F_v_; -text: .text%__1cQSystemDictionarybAcompute_java_system_loader6FpnGThread__v_; -text: .text%__1cObytecodes_init6F_v_; -text: .text%__1cLOptoRuntimeIgenerate6FpnFciEnv__v_; -text: .text%__1cJBytecodesNpd_initialize6F_v_; -text: .text%__1cHCompileRpd_compiler2_init6F_v_; -text: .text%__1cKC2CompilerKinitialize6M_v_; -text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; -text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_I_; -text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; -text: .text%__1cMciKlassKlassEmake6F_p0_; -text: .text%__1cIciMethodMvtable_index6M_i_; -text: .text%__1cPciObjArrayKlass2t6MpnIciSymbol_pnHciKlass_i_v_; -text: .text%__1cJLoadFNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cNTemplateTableGsipush6F_v_; -text: .text%__1cQUncommonTrapBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNTemplateTableGldc2_w6F_v_; -text: .text%__1cNExceptionBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNTemplateTableFiload6F_v_; -text: .text%__1cNTemplateTableLfast_iload26F_v_; -text: .text%__1cNTemplateTableKfast_iload6F_v_; -text: .text%__1cNTemplateTableFlload6F_v_; -text: .text%__1cNTemplateTableFfload6F_v_; -text: .text%__1cNTemplateTableFdload6F_v_; -text: .text%__1cNTemplateTableFaload6F_v_; -text: .text%__1cNTemplateTableKwide_iload6F_v_; -text: .text%__1cNTemplateTableKwide_lload6F_v_; -text: .text%__1cNTemplateTableKwide_fload6F_v_; -text: .text%__1cNTemplateTableKwide_dload6F_v_; -text: .text%__1cNTemplateTableKwide_aload6F_v_; -text: .text%__1cNTemplateTableGiaload6F_v_; -text: .text%__1cNTemplateTableGlaload6F_v_; -text: .text%__1cNTemplateTableGfaload6F_v_; -text: .text%__1cNTemplateTableGdaload6F_v_; -text: .text%__1cNTemplateTableGbipush6F_v_; -text: .text%__1cLMoveF2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLMoveL2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC222_v_; -text: .text%__1cHOrLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cHOrLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableF_goto6F_v_; -text: .text%__1cNTemplateTableGgoto_w6F_v_; -text: .text%__1cNTemplateTableFjsr_w6F_v_; -text: .text%__1cNTemplateTableDjsr6F_v_; -text: .text%__1cXreferenceProcessor_init6F_v_; -text: .text%__1cICodeBlobMset_oop_maps6MpnJOopMapSet__v_; -text: .text%__1cStemplateTable_init6F_v_; -text: .text%__1cNTemplateTableNpd_initialize6F_v_; -text: .text%__1cNTemplateTableDnop6F_v_; -text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_; -text: .text%__1cNTemplateTableLaconst_null6F_v_; -text: .text%__1cKPSYoungGenbCreset_survivors_after_shrink6M_v_; -text: .text%__1cKPSYoungGenQlimit_gen_shrink6MI_I_; -text: .text%__1cKPSYoungGenRavailable_to_live6M_I_; -text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; -text: .text%__1cLOptoRuntimeUmultianewarray2_Type6F_pknITypeFunc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_sparc_pipeline.o; -text: .text%__1cUAdjoiningGenerations2t6MnNReservedSpace_IIIIIII_v_; -text: .text%__1cWAdjoiningVirtualSpaces2t6MnNReservedSpace_III_v_; -text: .text%__1cOchunkpool_init6F_v_; -text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_; -text: .text%__1cJArgumentsWinit_system_properties6F_v_; -text: .text%__1cMSysClassPathPexpand_endorsed6M_v_; -text: .text%__1cMSysClassPathQadd_jars_to_path6Fpcpkc_1_; -text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsUset_ergonomics_flags6F_v_; -text: .text%__1cJArgumentsSparse_vm_init_args6FpknOJavaVMInitArgs__i_; -text: .text%__1cLStatSamplerGengage6F_v_; -text: .text%__1cNStubGeneratorbNgenerate_flush_callers_register_windows6M_pC_: stubGenerator_sparc.o; -text: .text%__1cSstubRoutines_init16F_v_; -text: .text%__1cSstubRoutines_init26F_v_; -text: .text%__1cNStubGeneratorbIgenerate_handler_for_unsafe_access6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorbAgenerate_forward_exception6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorSgenerate_call_stub6MrpC_1_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorYgenerate_catch_exception6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorSgenerate_test_stop6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorbEgenerate_partial_subtype_check6M_pC_: stubGenerator_sparc.o; -text: .text%__1cISubFNodeDsub6kMpknEType_3_3_; -text: .text%__1cRStubCodeGeneratorLstub_prolog6MpnMStubCodeDesc__v_; -text: .text%__1cLStatSamplerbMcreate_system_property_instrumentation6FpnGThread__v_; -text: .text%__1cLStatSamplerHdestroy6F_v_; -text: .text%__1cLStatSamplerJdisengage6F_v_; -text: .text%__1cNRegisterSaverYrestore_result_registers6FpnOMacroAssembler__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o; -text: .text%__1cORuntimeServiceYrecord_application_start6F_v_; -text: .text%__1cOMacroAssemblerNset_vm_result6MpnMRegisterImpl__v_; -text: .text%__1cORuntimeServiceEinit6F_v_; -text: .text%__1cOMacroAssemblerVverify_oop_subroutine6M_v_; -text: .text%__1cOMacroAssemblerPstop_subroutine6M_v_; -text: .text%__1cOMacroAssemblerElcmp6MpnMRegisterImpl_2222_v_; -text: .text%__1cOMacroAssemblerElneg6MpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerElshl6MpnMRegisterImpl_22222_v_; -text: .text%__1cOMacroAssemblerElshr6MpnMRegisterImpl_22222_v_; -text: .text%__1cOMacroAssemblerFlushr6MpnMRegisterImpl_22222_v_; -text: .text%__1cLOptoRuntimeUmultianewarray5_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray4_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray3_Type6F_pknITypeFunc__; -text: .text%__1cLsymbolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: symbolKlass.o; -text: .text%__1cJArgumentsFparse6FpknOJavaVMInitArgs__i_; -text: .text%__1cJArgumentsWPropertyList_get_value6FpnOSystemProperty_pkc_4_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: arguments.o; -text: .text%__1cParrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: arrayKlassKlass.o; -text: .text%__1cLsymbolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cParrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: arrayKlassKlass.o; -text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpnMRegisterImpl_pCi_v_; -text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; -text: .text%__1cLsymbolKlassOset_alloc_size6MI_v_: symbolKlass.o; -text: .text%__1cNTemplateTableGaaload6F_v_; -text: .text%__1cQconstMethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cQconstMethodKlassOset_alloc_size6MI_v_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constMethodKlass.o; -text: .text%__1cGThreadMset_priority6Fp0nOThreadPriority__v_; -text: .text%__1cRconstantPoolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cRconstantPoolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constantPoolKlass.o; -text: .text%__1cQPlaceholderTable2t6Mi_v_; -text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o; -text: .text%__1cVcreate_initial_thread6FnGHandle_pnKJavaThread_pnGThread__pnHoopDesc__: thread.o; -text: .text%__1cbAcall_initializeSystemClass6FpnGThread__v_: thread.o; -text: .text%__1cWreset_vm_info_property6FpnGThread__v_: thread.o; -text: .text%__1cbAPSGCAdaptivePolicyCounters2t6MpkciipnUPSAdaptiveSizePolicy__v_; -text: .text%__1cNTemplateTableRfast_invokevfinal6Fi_v_; -text: .text%__1cVcompiledICHolderKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: compiledICHolderKlass.o; -text: .text%__1cNTemplateTableNinvokespecial6Fi_v_; -text: .text%__1cNTemplateTableMinvokestatic6Fi_v_; -text: .text%__1cNTemplateTablebDinvokeinterface_object_method6FpnMRegisterImpl_222_v_; -text: .text%__1cNTemplateTablePinvokeinterface6Fi_v_; -text: .text%__1cNTemplateTableE_new6F_v_; -text: .text%__1cNTemplateTableInewarray6F_v_; -text: .text%__1cNTemplateTableJanewarray6F_v_; -text: .text%__1cNTemplateTableLarraylength6F_v_; -text: .text%__1cNTemplateTableJcheckcast6F_v_; -text: .text%__1cNTemplateTableKinstanceof6F_v_; -text: .text%__1cNTemplateTableL_breakpoint6F_v_; -text: .text%__1cNTemplateTableGathrow6F_v_; -text: .text%__1cNTemplateTableMmonitorenter6F_v_; -text: .text%__1cNTemplateTableLmonitorexit6F_v_; -text: .text%__1cNTemplateTableEwide6F_v_; -text: .text%__1cNTemplateTableOmultianewarray6F_v_; -text: .text%__1cTcompilerOracle_init6F_v_; -text: .text%__1cWconstantPoolCacheKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnPPerfLongCounter__; -text: .text%__1cZCompiledArgumentOopFinderRhandle_oop_offset6M_v_: frame.o; -text: .text%__1cQGCPolicyCounters2t6Mpkcii_v_; -text: .text%__1cHGCStats2t6M_v_; -text: .text%__1cNGCTaskManager2t6MI_v_; -text: .text%__1cNGCTaskManagerKinitialize6M_v_; -text: .text%__1cNGCTaskManagerKthreads_do6MpnNThreadClosure__v_; -text: .text%__1cPPerfDataManagerHdestroy6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__I_; -text: .text%__1cWResolveOopMapConflictsUdo_potential_rewrite6MpnGThread__nMmethodHandle__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; -text: .text%__1cOThreadCriticalKinitialize6F_v_; -text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; -text: .text%__1cICodeHeap2t6M_v_; -text: .text%__1cDhpiKinitialize6F_i_; -text: .text%__1cMPerfDataList2T6M_v_; -text: .text%__1cNWatcherThreadDrun6M_v_; -text: .text%__1cNWatcherThreadEstop6F_v_; -text: .text%__1cWconstantPoolCacheKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: cpCacheKlass.o; -text: .text%__1cFStateO_sub_Op_CMoveD6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_MoveF2I6MpknENode__v_; -text: .text%__1cKDictionary2t6Mi_v_; -text: .text%__1cKDictionaryKclasses_do6MpFpnMklassOopDesc__v_v_; -text: .text%__1cNeventlog_init6F_v_; -text: .text%__1cScheck_ThreadShadow6F_v_; -text: .text%__1cOtailjmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; -text: .text%__1cFframeVinterpreter_frame_mdp6kM_pC_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: phase.o; -text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; -text: .text%__1cKPerfMemoryUcreate_memory_region6FI_v_; -text: .text%__1cbBcleanup_sharedmem_resources6Fpkc_v_: perfMemory_solaris.o; -text: .text%__1cPperfMemory_exit6F_v_; -text: .text%__1cPperfMemory_init6F_v_; -text: .text%__1cNTemplateTableNinvokevirtual6Fi_v_; -text: .text%__1cNTemplateTableHfastore6F_v_; -text: .text%__1cNTemplateTableHdastore6F_v_; -text: .text%__1cNTemplateTableHaastore6F_v_; -text: .text%__1cNTemplateTableHbastore6F_v_; -text: .text%__1cNTemplateTableHsastore6F_v_; -text: .text%__1cOcodeCache_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: codeCache.o; -text: .text%__1cNTemplateTableDpop6F_v_; -text: .text%__1cNTemplateTableEpop26F_v_; -text: .text%__1cNTemplateTableDdup6F_v_; -text: .text%__1cNTemplateTableGdup_x16F_v_; -text: .text%__1cNTemplateTableGdup_x26F_v_; -text: .text%__1cNTemplateTableEdup26F_v_; -text: .text%__1cNTemplateTableHdup2_x16F_v_; -text: .text%__1cNTemplateTableHdup2_x26F_v_; -text: .text%__1cNTemplateTableEswap6F_v_; -text: .text%__1cNCollectedHeap2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o; -text: .text%__1cNTemplateTableEirem6F_v_; -text: .text%__1cNTemplateTableElmul6F_v_; -text: .text%__1cNTemplateTableHlastore6F_v_; -text: .text%__1cNTemplateTableGbaload6F_v_; -text: .text%__1cNTemplateTableGcaload6F_v_; -text: .text%__1cNTemplateTableMfast_icaload6F_v_; -text: .text%__1cNTemplateTableGsaload6F_v_; -text: .text%__1cKPSYoungGenPinitialize_work6M_v_; -text: .text%__1cKPSYoungGenKinitialize6MnNReservedSpace_I_v_; -text: .text%__1cKPSYoungGenYinitialize_virtual_space6MnNReservedSpace_I_v_; -text: .text%__1cKPSYoungGen2t6MIII_v_; -text: .text%__1cNTemplateTableHaload_06F_v_; -text: .text%__1cNTemplateTableGistore6F_v_; -text: .text%__1cNTemplateTableGlstore6F_v_; -text: .text%__1cNTemplateTableGfstore6F_v_; -text: .text%__1cNTemplateTableGdstore6F_v_; -text: .text%__1cNTemplateTableGastore6F_v_; -text: .text%__1cNTemplateTableLwide_istore6F_v_; -text: .text%__1cNTemplateTableLwide_lstore6F_v_; -text: .text%__1cNTemplateTableLwide_fstore6F_v_; -text: .text%__1cNTemplateTableLwide_dstore6F_v_; -text: .text%__1cNTemplateTableLwide_astore6F_v_; -text: .text%__1cNTemplateTableHiastore6F_v_; -text: .text%__1cNTemplateTableEldiv6F_v_; -text: .text%__1cNTemplateTableLtableswitch6F_v_; -text: .text%__1cNTemplateTableMlookupswitch6F_v_; -text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; -text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; -text: .text%__1cJPSPermGen2t6MnNReservedSpace_IIIIpkci_v_; -text: .text%__1cNCompileBrokerQset_should_block6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; -text: .text%__1cNTemplateTableIgetfield6Fi_v_; -text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cIPSOldGenKinitialize6MnNReservedSpace_Ipkci_v_; -text: .text%__1cIPSOldGen2t6MIIIpkci_v_; -text: .text%__1cIPSOldGen2t6MnNReservedSpace_IIIIpkci_v_; -text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cNTemplateTableIputfield6Fi_v_; -text: .text%__1cNTemplateTableJputstatic6Fi_v_; -text: .text%__1cVcompiledICHolderKlassOset_alloc_size6MI_v_: compiledICHolderKlass.o; -text: .text%__1cLPSMarkSweepKinitialize6F_v_; -text: .text%__1cNTemplateTableIwide_ret6F_v_; -text: .text%__1cNTemplateTableElrem6F_v_; -text: .text%__1cNTemplateTableElshl6F_v_; -text: .text%__1cNTemplateTableElshr6F_v_; -text: .text%__1cNTemplateTableFlushr6F_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyQinitialize_flags6M_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyUinitialize_size_info6M_v_; -text: .text%__1cNTemplateTableEineg6F_v_; -text: .text%__1cNTemplateTableElneg6F_v_; -text: .text%__1cNTemplateTableEfneg6F_v_; -text: .text%__1cNTemplateTableEdneg6F_v_; -text: .text%__1cNTemplateTableEiinc6F_v_; -text: .text%__1cNTemplateTableJwide_iinc6F_v_; -text: .text%__1cKPSScavengeKinitialize6F_v_; -text: .text%__1cNTemplateTableElcmp6F_v_; -text: .text%__1cWcompilationPolicy_init6F_v_; -text: .text%__1cRCompilationPolicyUcompleted_vm_startup6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o; -text: .text%__1cSPSPromotionManagerKinitialize6F_v_; -text: .text%__1cNTemplateTableDret6F_v_; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/reorder_TIERED_sparcv9 --- a/make/solaris/makefiles/reorder_TIERED_sparcv9 Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4207 +0,0 @@ -data = R0x2000; -text = LOAD ?RXO; - - -text: .text%__1cQIndexSetIteratorQadvance_and_next6M_I_; -text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOtypeArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cIPhaseIFGIadd_edge6MII_i_; -text: .text%__1cQIndexSetIterator2t6MpnIIndexSet__v_; -text: .text%__1cENodeEjvms6kM_pnIJVMState__; -text: .text%__1cIIndexSetWalloc_block_containing6MI_pn0AIBitBlock__; -text: .text%__1cETypeDcmp6Fkpk03_i_; -text: .text%__1cENodeHlatency6MI_I_; -text: .text%__1cHRegMaskJis_bound16kM_i_; -text: .text%__1cDff16FI_i_; -text: .text%__1cHRegMaskESize6kM_I_; -text: .text%__1cENodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJVectorSet2R6MI_rnDSet__; -text: .text%__1cHRegMaskJis_bound26kM_i_; -text: .text%__1cIMachNodeGOpcode6kM_i_; -text: .text%__1cJiRegIOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cIIndexSetKinitialize6MI_v_; -text: .text%__1cITypeNodeLbottom_type6kM_pknEType__; -text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_; -text: .text%__1cKTypeOopPtrFklass6kM_pnHciKlass__: type.o; -text: .text%__1cETypeFuhash6Fkpk0_i_; -text: .text%__1cQIndexSetIteratorEnext6M_I_: chaitin.o; -text: .text%__1cENodeIout_grow6MI_v_; -text: .text%__1cOloadConI13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cENodeHadd_req6Mp0_v_; -text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOloadConI13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cICallNodeKmatch_edge6kMI_I_; -text: .text%__1cINodeHashQhash_find_insert6MpnENode__2_; -text: .text%__1cHPhiNodeGOpcode6kM_i_; -text: .text%__1cKbranchNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cIProjNodeGOpcode6kM_i_; -text: .text%__1cETypeIhashcons6M_pk0_; -text: .text%__1cMPhaseChaitinTinterfere_with_live6MIpnIIndexSet__v_; -text: .text%__1cWNode_Backward_IteratorEnext6M_pnENode__; -text: .text%__1cNIdealLoopTreeJis_member6kMpk0_i_; -text: .text%__1cMMachCallNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cHCompileNnode_bundling6MpknENode__pnGBundle__; -text: .text%__1cGIfNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopYsplit_if_with_blocks_pre6MpnENode__2_; -text: .text%__1cOPhaseIdealLoopZsplit_if_with_blocks_post6MpnENode__v_; -text: .text%__1cIUniverseMnon_oop_word6F_pv_; -text: .text%__1cDLRGOcompute_degree6kMr0_i_; -text: .text%__1cIConINodeGOpcode6kM_i_; -text: .text%__1cETypeEmeet6kMpk0_2_; -text: .text%__1cENode2t6MI_v_; -text: .text%__1cRMachSpillCopyNodeJideal_reg6kM_I_: ad_sparc.o; -text: .text%__1cIPipelineXfunctional_unit_latency6kMIpk0_I_; -text: .text%__1cWPSScavengeRootsClosureGdo_oop6MppnHoopDesc__v_: psTasks.o; -text: .text%__1cLsymbolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cJCProjNodeNis_block_proj6kM_pknENode__: cfgnode.o; -text: .text%__1cKIfTrueNodeGOpcode6kM_i_; -text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_; -text: .text%__1cIMachNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cJloadPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIPhaseIFGQeffective_degree6kMI_i_; -text: .text%__1cWConstantPoolCacheEntryPfollow_contents6M_v_; -text: .text%__1cWConstantPoolCacheEntryPadjust_pointers6M_v_; -text: .text%__1cIAddPNodeGOpcode6kM_i_; -text: .text%__1cIPhaseIFGJre_insert6MI_v_; -text: .text%__1cIPhaseIFGLremove_node6MI_pnIIndexSet__; -text: .text%__1cKNode_ArrayGinsert6MIpnENode__v_; -text: .text%__1cHTypeIntEhash6kM_i_; -text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cLsymbolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cMPhaseIterGVNNtransform_old6MpnENode__2_; -text: .text%__1cDfh16FI_i_; -text: .text%__1cNMachIdealNodeErule6kM_I_: ad_sparc.o; -text: .text%__1cIIndexSetKfree_block6MI_v_; -text: .text%__1cWShouldNotReachHereNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cLIfFalseNodeGOpcode6kM_i_; -text: .text%__1cSCallStaticJavaNodeGOpcode6kM_i_; -text: .text%__1cENodeEhash6kM_I_; -text: .text%__1cOPhaseIdealLoopEsort6MpnNIdealLoopTree_2_2_; -text: .text%__1cMMachProjNodeLbottom_type6kM_pknEType__; -text: .text%JVM_ArrayCopy; -text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; -text: .text%__1cHConNodeGOpcode6kM_i_; -text: .text%__1cMPhaseIterGVNWadd_users_to_worklist06MpnENode__v_; -text: .text%__1cMMachProjNodeGOpcode6kM_i_; -text: .text%__1cJiRegPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cXPipeline_Use_Cycle_Mask2L6Mi_r0_: ad_sparc_pipeline.o; -text: .text%__1cIBoolNodeGOpcode6kM_i_; -text: .text%__1cYCallStaticJavaDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cENodeEgrow6MI_v_; -text: .text%__1cIciObjectEhash6M_i_; -text: .text%__1cKRegionNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopUbuild_loop_tree_impl6MpnENode_i_i_; -text: .text%__1cJMarkSweepSMarkAndPushClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cRMachSpillCopyNodeLbottom_type6kM_pknEType__: ad_sparc.o; -text: .text%__1cOPhaseIdealLoopOget_early_ctrl6MpnENode__2_; -text: .text%__1cIIndexSetKinitialize6MIpnFArena__v_; -text: .text%__1cLmethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cIPhaseGVNJtransform6MpnENode__2_; -text: .text%__1cOoop_RelocationLunpack_data6M_v_; -text: .text%__1cRmethodDataOopDescHdata_at6Mi_pnLProfileData__; -text: .text%__1cPJavaFrameAnchorNmake_walkable6MpnKJavaThread__v_; -text: .text%__1cENodeNis_block_proj6kM_pk0_; -text: .text%__1cNRelocIteratorFreloc6M_pnKRelocation__; -text: .text%__1cIProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQconstMethodKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cPClassFileStreamGget_u16MpnGThread__C_; -text: .text%__1cLTypeInstPtrEhash6kM_i_; -text: .text%__1cYCallStaticJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOPhaseIdealLoopThas_local_phi_input6MpnENode__2_; -text: .text%__1cJloadINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRMachSpillCopyNodeLout_RegMask6kM_rknHRegMask__: ad_sparc.o; -text: .text%__1cKbranchNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMMachProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMMachProjNodeLout_RegMask6kM_rknHRegMask__: classes.o; -text: .text%__1cRMachSpillCopyNodeKin_RegMask6kMI_rknHRegMask__: ad_sparc.o; -text: .text%__1cbAfinal_graph_reshaping_impl6FpnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cIPhaseCCPOtransform_once6MpnENode__2_; -text: .text%__1cGciTypeEmake6FnJBasicType__p0_; -text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cENodeFclone6kM_p0_; -text: .text%__1cITypeNodeEhash6kM_I_; -text: .text%__1cMPipeline_UseMfull_latency6kMIrk0_I_; -text: .text%__1cRMachSpillCopyNodePoper_input_base6kM_I_: ad_sparc.o; -text: .text%__1cENodeKmatch_edge6kMI_I_; -text: .text%__1cQconstMethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLmethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cOPhaseIdealLoopZremix_address_expressions6MpnENode__2_; -text: .text%__1cSInterpreterRuntimeInewarray6FpnKJavaThread_nJBasicType_i_v_; -text: .text%__1cICallNodeLbottom_type6kM_pknEType__; -text: .text%__1cOPhaseIdealLoopNget_late_ctrl6MpnENode_2_2_; -text: .text%JVM_CurrentTimeMillis; -text: .text%__1cENodeIIdentity6MpnOPhaseTransform__p0_; -text: .text%__1cIPipelinePoperand_latency6kMIpk0_I_; -text: .text%__1cKTypeAryPtrEhash6kM_i_; -text: .text%__1cETypeFxmeet6kMpk0_2_; -text: .text%__1cILRG_ListGextend6MII_v_; -text: .text%__1cJVectorSet2F6kMI_i_; -text: .text%__1cENodeQIdeal_DU_postCCP6MpnIPhaseCCP__p0_; -text: .text%__1cIProjNodeEhash6kM_I_; -text: .text%__1cIAddINodeGOpcode6kM_i_; -text: .text%__1cIIndexSet2t6Mp0_v_; -text: .text%__1cRmethodDataOopDescJnext_data6MpnLProfileData__2_; -text: .text%__1cITypeNodeJideal_reg6kM_I_; -text: .text%__1cYCallStaticJavaDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cMloadConPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHPhiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeHsize_of6kM_I_; -text: .text%__1cICmpPNodeGOpcode6kM_i_; -text: .text%__1cKNode_ArrayGremove6MI_v_; -text: .text%__1cHPhiNodeEhash6kM_I_; -text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cKmethodOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cJStartNodeLbottom_type6kM_pknEType__; -text: .text%__1cHTypeIntFxmeet6kMpknEType__3_; -text: .text%__1cIProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cPciObjectFactoryDget6MpnHoopDesc__pnIciObject__; -text: .text%__1cILocationIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cICmpINodeGOpcode6kM_i_; -text: .text%Unsafe_CompareAndSwapLong; -text: .text%__1cNCatchProjNodeGOpcode6kM_i_; -text: .text%__1cQUnique_Node_ListGremove6MpnENode__v_; -text: .text%__1cENode2t6Mp0_v_; -text: .text%__1cNLocationValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cFframeVinterpreter_frame_bcp6kM_pC_; -text: .text%__1cTCreateExceptionNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPClassFileStreamHskip_u16MipnGThread__v_; -text: .text%__1cHRegMaskMSmearToPairs6M_v_; -text: .text%__1cMPhaseIterGVNVadd_users_to_worklist6MpnENode__v_; -text: .text%__1cMloadConPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__; -text: .text%__1cMPipeline_UseJadd_usage6Mrk0_v_; -text: .text%__1cIAddPNodeKmatch_edge6kMI_I_; -text: .text%__1cJiRegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cGIfNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cGcmpkey6Fpkv1_i_; -text: .text%__1cMMergeMemNodeGOpcode6kM_i_; -text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__; -text: .text%__1cIParmNodeGOpcode6kM_i_; -text: .text%__1cPClassFileParserRverify_legal_utf86MpkCipnGThread__v_; -text: .text%__1cHTypeIntEmake6Fiii_pk0_; -text: .text%__1cENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNsymbolOopDescLas_C_string6kM_pc_; -text: .text%__1cKSchedulingWAddNodeToAvailableList6MpnENode__v_; -text: .text%__1cKSchedulingSChooseNodeToBundle6M_pnENode__; -text: .text%__1cKSchedulingPAddNodeToBundle6MpnENode_pknFBlock__v_; -text: .text%__1cICallNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cJLoadPNodeGOpcode6kM_i_; -text: .text%__1cIMachNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNflagsRegPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cHPhiNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMMachTypeNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cJCatchNodeGOpcode6kM_i_; -text: .text%__1cIJVMStateLdebug_start6kM_I_; -text: .text%__1cENodeHdel_req6MI_v_; -text: .text%__1cRSignatureIterator2t6MnMsymbolHandle__v_; -text: .text%__1cOAbstractICachePinvalidate_word6FpC_v_; -text: .text%__1cFBlockIis_Empty6kM_i_; -text: .text%__1cOThreadCritical2T6M_v_; -text: .text%__1cOThreadCritical2t6M_v_; -text: .text%method_compare: methodOop.o; -text: .text%__1cICodeHeapKfind_start6kMpv_1_; -text: .text%__1cETypeEhash6kM_i_; -text: .text%__1cRNativeInstructionLset_long_at6Mii_v_; -text: .text%__1cIAddPNodeLbottom_type6kM_pknEType__; -text: .text%__1cJCProjNodeEhash6kM_I_: classes.o; -text: .text%__1cIHaltNodeGOpcode6kM_i_; -text: .text%__1cFStateRMachNodeGenerator6MipnHCompile__pnIMachNode__; -text: .text%__1cHMatcherKReduceInst6MpnFState_irpnENode__pnIMachNode__; -text: .text%__1cICmpUNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopbIdom_lca_for_get_late_ctrl_internal6MpnENode_22_2_; -text: .text%__1cXPipeline_Use_Cycle_MaskCOr6Mrk0_v_; -text: .text%__1cILoadNodeEhash6kM_I_; -text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_; -text: .text%__1cKHandleMark2T6M_v_; -text: .text%__1cZPhaseConservativeCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cMPhaseIterGVNZremove_globally_dead_node6MpnENode__v_; -text: .text%__1cWShouldNotReachHereNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHPhiNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cILoadNodeLbottom_type6kM_pknEType__; -text: .text%JVM_ReleaseUTF; -text: .text%__1cJloadPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJTypeTupleEhash6kM_i_; -text: .text%__1cMflagsRegOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cObranchConPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKoopFactoryMnew_objArray6FpnMklassOopDesc_ipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassRallocate_objArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cMOopMapStreamJfind_next6M_v_; -text: .text%__1cFDictI2i6M_v_; -text: .text%__1cKNode_ArrayEgrow6MI_v_; -text: .text%__1cHTypeIntEmake6Fi_pk0_; -text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_; -text: .text%__1cJloadPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMMergeMemNodeLbottom_type6kM_pknEType__: memnode.o; -text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; -text: .text%__1cOPSPromotionLABKinitialize6MnJMemRegion__v_; -text: .text%__1cJMultiNodeIproj_out6kMI_pnIProjNode__; -text: .text%__1cPindOffset13OperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cUcompI_iReg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cODataRelocationJset_value6MpC_v_: relocInfo.o; -text: .text%__1cKCastPPNodeGOpcode6kM_i_; -text: .text%__1cOoop_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cOoop_RelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cPSignatureStreamEnext6M_v_; -text: .text%__1cLLShiftINodeGOpcode6kM_i_; -text: .text%__1cMPhaseChaitinSuse_prior_register6MpnENode_I2pnFBlock_rnJNode_List_6_i_; -text: .text%__1cGIfNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cGBitMapJset_union6M0_v_; -text: .text%__1cIConPNodeGOpcode6kM_i_; -text: .text%__1cJLoadINodeGOpcode6kM_i_; -text: .text%JVM_GetMethodIxExceptionTableLength; -text: .text%__1cOJNIHandleBlockPallocate_handle6MpnHoopDesc__pnI_jobject__; -text: .text%__1cPClassFileParserUassemble_annotations6MpCi1ipnGThread__nPtypeArrayHandle__; -text: .text%__1cNSharedRuntimeDd2i6Fd_i_; -text: .text%__1cVcompP_iRegP_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKRegionNodeEhash6kM_I_: classes.o; -text: .text%__1cNbranchConNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_; -text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; -text: .text%__1cIAddPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_; -text: .text%__1cMMachCallNodeLbottom_type6kM_pknEType__; -text: .text%__1cFParsePdo_one_bytecode6M_v_; -text: .text%__1cFParseNdo_exceptions6M_v_; -text: .text%__1cHPhiNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cHMatcherKmatch_tree6MpknENode__pnIMachNode__; -text: .text%__1cMPhaseIterGVNKis_IterGVN6M_p0_: phaseX.o; -text: .text%__1cCosVcurrent_stack_pointer6F_pC_; -text: .text%__1cEDict2F6kMpkv_pv_; -text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cENodeIdestruct6M_v_; -text: .text%__1cMCreateExNodeGOpcode6kM_i_; -text: .text%__1cIBoolNodeEhash6kM_I_; -text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cLTypeInstPtrFxmeet6kMpknEType__3_; -text: .text%__1cKNode_ArrayFclear6M_v_; -text: .text%__1cObranchConPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIProjNodeHsize_of6kM_I_; -text: .text%__1cTconstantPoolOopDescWsignature_ref_index_at6Mi_i_; -text: .text%__1cMloadConINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIHaltNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cJloadBNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cHhashptr6Fpkv_i_; -text: .text%__1cMMachHaltNodeEjvms6kM_pnIJVMState__; -text: .text%__1cHhashkey6Fpkv_i_; -text: .text%__1cMPhaseChaitinHnew_lrg6MpknENode_I_v_; -text: .text%__1cIJVMStateJdebug_end6kM_I_; -text: .text%__1cIPhaseIFGMtest_edge_sq6kMII_i_; -text: .text%__1cJloadPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cHSubNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_; -text: .text%__1cSaddP_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMachNodeHtwo_adr6kM_I_: ad_sparc.o; -text: .text%__1cNSafePointNodeHsize_of6kM_I_; -text: .text%__1cHCmpNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPcheckCastPPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNLoadRangeNodeGOpcode6kM_i_; -text: .text%__1cNbranchConNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cENode2t6Mp011_v_; -text: .text%__1cJStoreNodeKmatch_edge6kMI_I_; -text: .text%__1cOPSPromotionLABFflush6M_v_; -text: .text%__1cQResultTypeFinderDset6MinJBasicType__v_: bytecode.o; -text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__: generateOopMap.o; -text: .text%__1cOcompU_iRegNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__; -text: .text%__1cICodeHeapJnext_free6kMpnJHeapBlock__pv_; -text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__; -text: .text%__1cICodeHeapKnext_block6kMpnJHeapBlock__2_; -text: .text%__1cSCountedLoopEndNodeGOpcode6kM_i_; -text: .text%__1cPciInstanceKlassGloader6M_pnHoopDesc__; -text: .text%__1cPcheckCastPPNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNCellTypeStateFmerge6kM0i_0_; -text: .text%__1cMPhaseIterGVNMsubsume_node6MpnENode_2_v_; -text: .text%__1cILoadNodeKmatch_edge6kMI_I_; -text: .text%__1cJloadINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNExceptionMark2T6M_v_; -text: .text%__1cNExceptionMark2t6MrpnGThread__v_; -text: .text%__1cITypeLongEhash6kM_i_; -text: .text%__1cJHashtableJnew_entry6MIpnHoopDesc__pnOHashtableEntry__; -text: .text%__1cJiRegLOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cKJNIHandlesKmake_local6FpnHJNIEnv__pnHoopDesc__pnI_jobject__; -text: .text%__1cPciInstanceKlassRprotection_domain6M_pnHoopDesc__; -text: .text%__1cOloadConI13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOloadConI13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cObranchConPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKStoreINodeGOpcode6kM_i_; -text: .text%__1cJcmpOpOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cRSignatureIterator2t6MpnNsymbolOopDesc__v_; -text: .text%__1cJiRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKRegionNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKstorePNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cHPhiNodeHsize_of6kM_I_: cfgnode.o; -text: .text%__1cJrelocInfoNfinish_prefix6Mph_p0_; -text: .text%__1cQaddP_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSaddI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cIBoolNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLCounterDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cHRegMaskMClearToPairs6M_v_; -text: .text%__1cRshlI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode__i_; -text: .text%__1cNPhaseCoalesceRcombine_these_two6MpnENode_2_v_; -text: .text%__1cKcmpOpPOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cMloadConINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMPhaseChaitinLinsert_proj6MpnFBlock_IpnENode_I_v_; -text: .text%__1cILoadNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJStoreNodeLbottom_type6kM_pknEType__; -text: .text%__1cIBoolNodeLbottom_type6kM_pknEType__: subnode.o; -text: .text%__1cNSafePointNodeSset_next_exception6Mp0_v_; -text: .text%__1cQaddP_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIHaltNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPCheckCastPPNodeGOpcode6kM_i_; -text: .text%__1cKStorePNodeGOpcode6kM_i_; -text: .text%__1cNflagsRegUOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cPcheckCastPPNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAddPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRInvocationCounterEinit6M_v_; -text: .text%__1cKNode_Array2t6MpnFArena__v_: block.o; -text: .text%__1cTconstantPoolOopDescNklass_name_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cXPhaseAggressiveCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cFBlockScall_catch_cleanup6MrnLBlock_Array__v_; -text: .text%__1cObranchConUNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cTconstantPoolOopDescRname_ref_index_at6Mi_i_; -text: .text%__1cIAddINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cHRetNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cKRegionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstorePNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMObjectLocker2T6M_v_; -text: .text%__1cOcompI_iRegNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cICallNodeIIdentity6MpnOPhaseTransform__pnENode__: callnode.o; -text: .text%__1cMURShiftINodeGOpcode6kM_i_; -text: .text%__1cRmethodDataOopDescPinitialize_data6MpnOBytecodeStream_i_i_; -text: .text%__1cNRelocIteratorKset_limits6MpC1_v_; -text: .text%__1cIRootNodeGOpcode6kM_i_; -text: .text%__1cOloadConI13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cILoadNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cTCreateExceptionNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFStateM_sub_Op_ConI6MpknENode__v_; -text: .text%__1cPcheckCastPPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cISubINodeGOpcode6kM_i_; -text: .text%__1cNbranchConNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJTypeTupleEmake6FIppknEType__pk0_; -text: .text%__1cJTypeTupleGfields6FI_ppknEType__; -text: .text%__1cENodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLSymbolTableJbasic_add6MipCiIpnGThread__pnNsymbolOopDesc__; -text: .text%__1cLsymbolKlassPallocate_symbol6MpCipnGThread__pnNsymbolOopDesc__; -text: .text%__1cSinstanceKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cRAbstractAssemblerEbind6MrnFLabel__v_; -text: .text%__1cKbranchNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cHPhiNodeIadr_type6kM_pknHTypePtr__: cfgnode.o; -text: .text%__1cHAddNodeEhash6kM_I_; -text: .text%__1cENodeRdisconnect_inputs6Mp0_i_; -text: .text%__1cPsplit_flow_path6FpnIPhaseGVN_pnHPhiNode__pnENode__: cfgnode.o; -text: .text%__1cSaddI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJFieldTypeKbasic_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cHConNodeEhash6kM_I_; -text: .text%__1cLLShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cOMachReturnNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cNidealize_test6FpnIPhaseGVN_pnGIfNode__3_: ifnode.o; -text: .text%__1cITypeNodeHsize_of6kM_I_; -text: .text%__1cNSafePointNodeLbottom_type6kM_pknEType__: callnode.o; -text: .text%__1cTconstantPoolOopDescSklass_at_if_loaded6FnSconstantPoolHandle_i_pnMklassOopDesc__; -text: .text%__1cJloadINodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_GetClassModifiers; -text: .text%__1cJCodeCacheJfind_blob6Fpv_pnICodeBlob__; -text: .text%__1cNSafePointNodeOnext_exception6kM_p0_; -text: .text%JVM_GetClassAccessFlags; -text: .text%__1cLklassItable2t6MnTinstanceKlassHandle__v_; -text: .text%__1cIsplit_if6FpnGIfNode_pnMPhaseIterGVN__pnENode__: ifnode.o; -text: .text%__1cHTypeAryEhash6kM_i_; -text: .text%__1cPfieldDescriptorKinitialize6MpnMklassOopDesc_i_v_; -text: .text%__1cJMultiNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cJCProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPPerfLongVariantGsample6M_v_; -text: .text%__1cJStoreNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMPhaseChaitinMyank_if_dead6MpnENode_pnFBlock_pnJNode_List_6_i_; -text: .text%__1cJCatchNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIMachOperNconstant_disp6kM_i_; -text: .text%__1cIMachOperFscale6kM_i_; -text: .text%__1cENode2t6Mp0111_v_; -text: .text%__1cFPhase2t6Mn0ALPhaseNumber__v_; -text: .text%__1cNCompileBrokerLmaybe_block6F_v_; -text: .text%__1cFBlockOcode_alignment6M_I_; -text: .text%__1cNinstanceKlassGitable6kM_pnLklassItable__; -text: .text%__1cLciSignatureLreturn_type6kM_pnGciType__; -text: .text%__1cFStateM_sub_Op_RegP6MpknENode__v_; -text: .text%JVM_GetCPMethodSignatureUTF; -text: .text%__1cFChunkJnext_chop6M_v_; -text: .text%__1cMMergeMemNodeEhash6kM_I_; -text: .text%__1cKSchedulingbFComputeRegisterAntidependencies6MpnFBlock__v_; -text: .text%__1cKSchedulingPComputeUseCount6MpknFBlock__v_; -text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceKlass.o; -text: .text%__1cIMachNodePcompute_padding6kMi_i_: ad_sparc.o; -text: .text%__1cIMachNodeSalignment_required6kM_i_: ad_sparc.o; -text: .text%__1cMPhaseChaitinSget_spillcopy_wide6MpnENode_2I_2_; -text: .text%__1cYDebugInformationRecorderTcreate_scope_values6MpnNGrowableArray4CpnKScopeValue____pnKDebugToken__; -text: .text%__1cWstatic_stub_RelocationLunpack_data6M_v_; -text: .text%__1cQaddI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cObranchConUNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFBlockJfind_node6kMpknENode__I_; -text: .text%__1cUArgumentSizeComputerDset6MinJBasicType__v_: frame.o; -text: .text%__1cHCmpNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_; -text: .text%__1cHTypePtrEhash6kM_i_; -text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; -text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; -text: .text%__1cFBlockLfind_remove6MpknENode__v_; -text: .text%__1cIIndexSetJlrg_union6MIIkIpknIPhaseIFG_rknHRegMask__I_; -text: .text%__1cKMemBarNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cUcompI_iReg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverbAcheck_method_accessability6FnLKlassHandle_11nMmethodHandle_pnGThread__v_; -text: .text%__1cNObjectMonitorEexit6MpnGThread__v_; -text: .text%__1cIimmPOperEtype6kM_pknEType__: ad_sparc_clone.o; -text: .text%__1cMloadConPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cLMachNopNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadINodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadRangeNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cVCompressedWriteStream2t6Mi_v_; -text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; -text: .text%__1cENodeKreplace_by6Mp0_v_; -text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cMMergeMemNodePiteration_setup6Mpk0_v_; -text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cRMachSpillCopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKRegionNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJStoreNodeEhash6kM_I_; -text: .text%__1cSaddP_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQaddI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitJclone_map6M_pnNSafePointNode__; -text: .text%__1cKIfTrueNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRMemBarReleaseNodeGOpcode6kM_i_; -text: .text%__1cKbranchNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; -text: .text%__1cRPSOldPromotionLABFflush6M_v_; -text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__; -text: .text%__1cPcompP_iRegPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLBoxLockNodeGOpcode6kM_i_; -text: .text%__1cIciObjectJset_ident6MI_v_; -text: .text%__1cKJNIHandlesKmake_local6FpnHoopDesc__pnI_jobject__; -text: .text%__1cKTypeRawPtrEhash6kM_i_; -text: .text%__1cIBoolNodeKmatch_edge6kMI_I_: subnode.o; -text: .text%__1cMMergeMemNodePset_base_memory6MpnENode__v_; -text: .text%__1cLIfFalseNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cGBitMapOset_difference6M0_v_; -text: .text%__1cNSafePointNodeEjvms6kM_pnIJVMState__: callnode.o; -text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cMMergeMemNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_GetMethodIxLocalsCount; -text: .text%__1cNloadRangeNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_CurrentThread; -text: .text%__1cRcmpFastUnlockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIAndINodeGOpcode6kM_i_; -text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cENodeHins_req6MIp0_v_; -text: .text%__1cMPhaseChaitinFUnion6MpknENode_3_v_; -text: .text%__1cMloadConLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHAddNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKRelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cKstoreINodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOFastUnlockNodeGOpcode6kM_i_; -text: .text%__1cITypeNodeDcmp6kMrknENode__I_; -text: .text%__1cIHaltNodeLbottom_type6kM_pknEType__; -text: .text%__1cKstorePNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKcmpOpUOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLstoreI0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIciObject2t6MnGHandle__v_; -text: .text%__1cNSafePointNodeKmatch_edge6kMI_I_; -text: .text%__1cIMachOperOindex_position6kM_i_; -text: .text%__1cXmembar_release_lockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJVectorSet2L6MI_rnDSet__; -text: .text%__1cOcompU_iRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMMergeMemNodeJmemory_at6kMI_pnENode__; -text: .text%__1cSaddP_reg_imm13NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPindOffset13OperNconstant_disp6kM_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperFscale6kM_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperNbase_position6kM_i_: ad_sparc.o; -text: .text%__1cWShouldNotReachHereNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPciObjectFactoryRcreate_new_object6MpnHoopDesc__pnIciObject__; -text: .text%__1cUcompI_iReg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVcompP_iRegP_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddP_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddP_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_; -text: .text%__1cIJVMStateIof_depth6kMi_p0_; -text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cMciMethodDataLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cRMemBarAcquireNodeGOpcode6kM_i_; -text: .text%__1cKo0RegPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cSaddI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cObranchConUNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJVectorSet2t6MpnFArena__v_; -text: .text%__1cKTypeAryPtrFxmeet6kMpknEType__3_; -text: .text%__1cVcompP_iRegP_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cICallNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cJTraceTime2T6M_v_; -text: .text%__1cITypeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPcheckCastPPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKMemBarNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSconstMethodOopDescZset_inlined_tables_length6Miii_v_; -text: .text%__1cNmethodOopDescbAcompute_size_of_parameters6MpnGThread__v_; -text: .text%__1cSconstMethodOopDescLobject_size6Fiiii_i_; -text: .text%__1cLmethodKlassIallocate6MnRconstMethodHandle_nLAccessFlags_pnGThread__pnNmethodOopDesc__; -text: .text%__1cMMergeMemNodeNset_memory_at6MIpnENode__v_; -text: .text%__1cLstoreI0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNSignatureInfoHdo_void6M_v_: bytecode.o; -text: .text%__1cQaddI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENode2t6Mp01_v_; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cKstoreINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRshrI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFStateM_sub_Op_AddP6MpknENode__v_; -text: .text%__1cTCreateExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cITypeFuncEhash6kM_i_; -text: .text%__1cLBoxLockNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMTypeKlassPtrEhash6kM_i_; -text: .text%__1cMCallLeafNodeGOpcode6kM_i_; -text: .text%__1cSCallLeafDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHPhiNodeEmake6FpnENode_2pknEType_pknHTypePtr__p0_; -text: .text%__1cOcompU_iRegNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJiRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNflagsRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cHOrINodeGOpcode6kM_i_; -text: .text%__1cXmembar_acquire_lockNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%JVM_GetCPMethodClassNameUTF; -text: .text%__1cMloadConDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMflagsRegOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLProfileDataPfollow_contents6M_v_: ciMethodData.o; -text: .text%__1cLProfileDataPadjust_pointers6M_v_: ciMethodData.o; -text: .text%__1cFStateM_sub_Op_RegI6MpknENode__v_; -text: .text%__1cKklassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cFKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cJMarkSweepXrevisit_weak_klass_link6FpnFKlass__v_; -text: .text%__1cKklassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cWconstantPoolCacheKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cHCompileYout_preserve_stack_slots6F_I_; -text: .text%__1cIGraphKitLclean_stack6Mi_v_; -text: .text%__1cKStoreBNodeGOpcode6kM_i_; -text: .text%__1cLklassVtableToop_adjust_pointers6M_v_; -text: .text%__1cLklassVtableToop_follow_contents6M_v_; -text: .text%__1cSconstMethodOopDescbBcompressed_linenumber_table6kM_pC_; -text: .text%__1cJlabelOperFlabel6kM_pnFLabel__: ad_sparc.o; -text: .text%__1cLciSignatureHtype_at6kMi_pnGciType__; -text: .text%__1cIMachNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cIMachOperMdisp_as_type6kM_pknHTypePtr__: ad_sparc.o; -text: .text%__1cRshlI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_IsNaN; -text: .text%__1cNloadRangeNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKbranchNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJStartNodeGOpcode6kM_i_; -text: .text%__1cQregF_to_stkINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeDcmp6kMrk0_I_; -text: .text%__1cHTypeIntFxdual6kM_pknEType__; -text: .text%__1cMmerge_region6FpnKRegionNode_pnIPhaseGVN__pnENode__: cfgnode.o; -text: .text%__1cJAssemblerOpatched_branch6Fiii_i_; -text: .text%__1cJAssemblerSbranch_destination6Fii_i_; -text: .text%__1cRshlI_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cENodeIadd_prec6Mp0_v_; -text: .text%__1cLBoxLockNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPSignatureStreamJas_symbol6MpnGThread__pnNsymbolOopDesc__; -text: .text%__1cSaddP_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWMachCallStaticJavaNodePret_addr_offset6M_i_; -text: .text%__1cITypeFuncEmake6FpknJTypeTuple_3_pk0_; -text: .text%__1cMloadConDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSCallLeafDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQsubI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIRootNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJloadLNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverZcheck_field_accessability6FnLKlassHandle_11rnPfieldDescriptor_pnGThread__v_; -text: .text%__1cJLoadBNodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapHinterp16MpnOBytecodeStream__v_; -text: .text%__1cSvframeStreamCommonEnext6M_v_; -text: .text%__1cIAddINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cIRootNodeNis_block_proj6kM_pknENode__: classes.o; -text: .text%__1cMMergeMemNode2t6MpnENode__v_; -text: .text%__1cOcompI_iRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRMachSafePointNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cJloadINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPindOffset13OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cPindOffset13OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cICmpPNodeDsub6kMpknEType_3_3_; -text: .text%__1cHMemNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cIGraphKitQkill_dead_locals6M_v_; -text: .text%__1cCosMvm_page_size6F_i_; -text: .text%__1cRlock_ptr_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cVcompP_iRegP_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUcompI_iReg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSignatureInfoJdo_object6Mii_v_: bytecode.o; -text: .text%__1cRconstantPoolKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNinstanceKlassUadjust_static_fields6M_v_; -text: .text%__1cRconstantPoolKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cLklassItableToop_adjust_pointers6M_v_; -text: .text%__1cNinstanceKlassUfollow_static_fields6M_v_; -text: .text%__1cLklassItableToop_follow_contents6M_v_; -text: .text%__1cSinstanceKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cNinstanceKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cSinstanceKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cNSafePointNodeGOpcode6kM_i_; -text: .text%__1cJLoadPNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMPhaseChaitinPset_was_spilled6MpnENode__v_; -text: .text%__1cYDebugInformationRecorderVcreate_monitor_values6MpnNGrowableArray4CpnMMonitorValue____pnKDebugToken__; -text: .text%__1cMloadConPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIGraphKit2t6MpnIJVMState__v_; -text: .text%__1cPconvI2L_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQPreserveJVMState2T6M_v_; -text: .text%__1cRshrI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cTCreateExceptionNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cXmembar_release_lockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMloadConLNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvI2LNodeGOpcode6kM_i_; -text: .text%__1cITypeLongFxmeet6kMpknEType__3_; -text: .text%__1cNinstanceKlassKinitialize6MpnGThread__v_; -text: .text%__1cFParseMmerge_common6Mpn0AFBlock_i_v_; -text: .text%__1cPciInstanceKlassYunique_concrete_subklass6M_p0_; -text: .text%__1cLBoxLockNodeHsize_of6kM_I_; -text: .text%__1cOPhaseIdealLoopIset_idom6MpnENode_2I_v_; -text: .text%JVM_GetCPFieldClassNameUTF; -text: .text%__1cSaddI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNLoadKlassNodeGOpcode6kM_i_; -text: .text%__1cRcmpFastUnlockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__; -text: .text%__1cFciEnvSget_field_by_index6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cOcompI_iRegNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshlI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; -text: .text%__1cICmpINodeDsub6kMpknEType_3_3_; -text: .text%__1cLRShiftINodeGOpcode6kM_i_; -text: .text%__1cOtypeArrayKlassSallocate_permanent6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cSCallLeafDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPcheckCastPPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOPhaseIdealLoopQconditional_move6MpnENode__2_; -text: .text%__1cJStoreNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cITypeFuncEmake6FpnIciMethod__pk0_; -text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_; -text: .text%__1cJloadSNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKStoreCNodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_; -text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__; -text: .text%__1cHRetNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPcmpFastLockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverMresolve_pool6FrnLKlassHandle_rnMsymbolHandle_42nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoolHandle_inJBytecodesECode_pnGThread__v_; -text: .text%__1cIBoolNodeJideal_reg6kM_I_: subnode.o; -text: .text%__1cHCmpNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRloadConP_pollNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLstoreI0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMloadConPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; -text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cPcompP_iRegPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNloadRangeNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCatchProjNodeLbottom_type6kM_pknEType__: cfgnode.o; -text: .text%__1cNCatchProjNodeHsize_of6kM_I_: cfgnode.o; -text: .text%__1cFStateK_sub_Op_If6MpknENode__v_; -text: .text%__1cTciConstantPoolCacheDget6Mi_pv_; -text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cQsubI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cXmembar_acquire_lockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPCountedLoopNodeGOpcode6kM_i_; -text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; -text: .text%__1cIAndLNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitOset_all_memory6MpnENode__v_; -text: .text%__1cQSystemDictionarybEresolve_instance_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_; -text: .text%__1cFParseFBlockKinit_graph6Mp0_v_; -text: .text%__1cMTypeKlassPtrEmake6FnHTypePtrDPTR_pnHciKlass_i_pk0_; -text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__; -text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cIGraphKitTadd_exception_state6MpnNSafePointNode__v_; -text: .text%__1cIregDOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cKstoreINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; -text: .text%__1cNloadRangeNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParseMdo_one_block6M_v_; -text: .text%__1cOPhaseIdealLoopRregister_new_node6MpnENode_2_v_; -text: .text%__1cLstoreB0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAddINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIJVMStateLdebug_depth6kM_I_; -text: .text%__1cENodeNadd_req_batch6Mp0I_v_; -text: .text%__1cKciTypeFlowLStateVectorOpush_translate6MpnGciType__v_; -text: .text%__1cJloadFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPVirtualCallDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cIMachNodeOpipeline_class6F_pknIPipeline__; -text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cIPhaseGVNUtransform_no_reclaim6MpnENode__2_; -text: .text%__1cIAddLNodeGOpcode6kM_i_; -text: .text%__1cLLShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOMethodLivenessKBasicBlockJpropagate6Mp0_v_; -text: .text%__1cKciTypeFlowGJsrSet2t6MpnFArena_i_v_; -text: .text%__1cHMatcherKmatch_sfpt6MpnNSafePointNode__pnIMachNode__; -text: .text%__1cMFastLockNodeGOpcode6kM_i_; -text: .text%__1cLConvL2INodeGOpcode6kM_i_; -text: .text%__1cIXorINodeGOpcode6kM_i_; -text: .text%__1cOcompU_iRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPorI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKTypeAryPtrFklass6kM_pnHciKlass__; -text: .text%__1cIGraphKitbDtransfer_exceptions_into_jvms6M_pnIJVMState__; -text: .text%__1cLTypeInstPtrFxdual6kM_pknEType__; -text: .text%__1cNLoadRangeNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFBlockKsched_call6MrnHMatcher_rnLBlock_Array_IrnJNode_List_pipnMMachCallNode_rnJVectorSet__I_; -text: .text%__1cSsafePoint_pollNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cILoadNodeHsize_of6kM_I_; -text: .text%__1cRInterpretedRFrameKtop_method6kM_nMmethodHandle__: rframe.o; -text: .text%__1cIGraphKitJsync_jvms6kM_pnIJVMState__; -text: .text%__1cICmpUNodeDsub6kMpknEType_3_3_; -text: .text%__1cEUTF8Hstrrchr6FpWiW_1_; -text: .text%__1cPcompP_iRegPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPsp_ptr_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_; -text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cLBoxLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNloadKlassNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_GetCPMethodNameUTF; -text: .text%__1cMtlsLoadPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreB0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHBitDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cURethrowExceptionNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cQsubI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQaddP_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFKlassIsubklass6kM_p0_; -text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__; -text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_: frame.o; -text: .text%__1cTconstantPoolOopDescOstring_at_impl6FnSconstantPoolHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_; -text: .text%__1cIMulLNodeGOpcode6kM_i_; -text: .text%__1cKReturnNodeKmatch_edge6kMI_I_; -text: .text%__1cGOopMap2t6Mii_v_; -text: .text%__1cNloadConP0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJLoadSNodeGOpcode6kM_i_; -text: .text%__1cLPCTableNodeLbottom_type6kM_pknEType__; -text: .text%__1cKBranchDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cMCreateExNodeKmatch_edge6kMI_I_: classes.o; -text: .text%__1cRloadConP_pollNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_; -text: .text%__1cRcmpFastUnlockNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJLoadLNodeGOpcode6kM_i_; -text: .text%__1cMciMethodDataLhas_trap_at6MpnLProfileData_i_i_; -text: .text%__1cPThreadLocalNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKReturnNodeGOpcode6kM_i_; -text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__; -text: .text%__1cNflagsRegUOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMloadConINodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cNCatchProjNodeEhash6kM_I_; -text: .text%__1cEUTF8Ounicode_length6Fpkci_i_; -text: .text%__1cHCompileTProcess_OopMap_Node6MpnIMachNode_i_v_; -text: .text%__1cNCallGenerator2t6MpnIciMethod__v_; -text: .text%__1cKCompiledIC2t6MpnKRelocation__v_; -text: .text%__1cKCompiledICOic_destination6kM_pC_; -text: .text%__1cHTypeAryFxmeet6kMpknEType__3_; -text: .text%__1cICallNodeJideal_reg6kM_I_: callnode.o; -text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_; -text: .text%__1cPmethodDataKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cKciTypeFlowQadd_to_work_list6Mpn0AFBlock__v_; -text: .text%__1cKciTypeFlowKflow_block6Mpn0AFBlock_pn0ALStateVector_pn0AGJsrSet__v_; -text: .text%__1cEUTF8Enext6FpkcpH_pc_; -text: .text%__1cJVectorSetFClear6M_v_; -text: .text%__1cHCompileSflatten_alias_type6kMpknHTypePtr__3_; -text: .text%__1cCosEfree6Fpv_v_; -text: .text%__1cRshrI_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPcmpFastLockNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cYciExceptionHandlerStreamFcount6M_i_; -text: .text%__1cKciTypeFlowFBlockScompute_exceptions6M_v_; -text: .text%__1cIPhaseIFGFUnion6MII_v_; -text: .text%__1cYCallStaticJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cILoopNodeGOpcode6kM_i_; -text: .text%__1cICmpLNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopGspinup6MpnENode_2222pnLsmall_cache__2_; -text: .text%__1cQaddI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMindIndexOperJnum_edges6kM_I_: ad_sparc.o; -text: .text%__1cIConLNodeGOpcode6kM_i_; -text: .text%JVM_GetCPFieldSignatureUTF; -text: .text%__1cENodeLnonnull_req6kM_p0_; -text: .text%__1cYCallStaticJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMelapsedTimerFstart6M_v_; -text: .text%__1cMelapsedTimerEstop6M_v_; -text: .text%__1cMURShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSaddP_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOPhaseIdealLoopOfind_use_block6MpnENode_22222_2_; -text: .text%__1cOPhaseIdealLoopKhandle_use6MpnENode_2pnLsmall_cache_22222_v_; -text: .text%jni_DeleteLocalRef: jni.o; -text: .text%__1cIGraphKit2t6M_v_; -text: .text%__1cMoutputStreamDput6Mc_v_; -text: .text%__1cIGraphKitNset_map_clone6MpnNSafePointNode__v_; -text: .text%__1cRInterpretedRFrameEinit6M_v_; -text: .text%__1cHMulNodeEhash6kM_I_; -text: .text%__1cENodeJset_req_X6MIp0pnMPhaseIterGVN__v_; -text: .text%__1cJLoadINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cINodeHashLhash_insert6MpnENode__v_; -text: .text%__1cKstoreCNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeLbottom_type6kM_pknEType__; -text: .text%__1cKJNIHandlesKmake_local6FpnGThread_pnHoopDesc__pnI_jobject__; -text: .text%__1cKstoreCNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIAddPNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nGHandle__; -text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cKMemBarNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cGvframe2t6MpknFframe_pknLRegisterMap_pnKJavaThread__v_; -text: .text%__1cLRegisterMap2t6Mpk0_v_; -text: .text%__1cXmembar_acquire_lockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcompI_iRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIciSymbolEmake6Fpkc_p0_; -text: .text%__1cPorI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cGPcDesc2t6Miii_v_; -text: .text%__1cHCompileKalias_type6MpnHciField__pn0AJAliasType__; -text: .text%__1cGvframeKnew_vframe6FpknFframe_pknLRegisterMap_pnKJavaThread__p0_; -text: .text%__1cPconvI2L_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMtlsLoadPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cYcompareAndSwapL_boolNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIAddINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIciMethodRget_flow_analysis6M_pnKciTypeFlow__; -text: .text%__1cWCallLeafNoFPDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmembar_acquireNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKbranchNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cKbranchNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOloadConI13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSaddL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%jni_GetObjectField: jni.o; -text: .text%__1cSMemBarCPUOrderNodeGOpcode6kM_i_; -text: .text%__1cJFieldTypeOget_array_info6FpnNsymbolOopDesc_pip2pnGThread__nJBasicType__; -text: .text%__1cQandL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cWstatic_stub_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cQaddL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadKlassNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPmethodDataKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cPmethodDataKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cJloadBNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cYcompareAndSwapL_boolNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRMachNullCheckNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cOPhaseIdealLoopIsink_use6MpnENode_2_v_; -text: .text%__1cIGraphKitOreplace_in_map6MpnENode_2_v_; -text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cHCompileKTracePhase2T6M_v_; -text: .text%__1cMPhaseChaitinLclone_projs6MpnFBlock_IpnENode_4rI_i_; -text: .text%__1cIJVMState2t6MpnIciMethod_p0_v_; -text: .text%__1cIHaltNode2t6MpnENode_2_v_; -text: .text%__1cLOptoRuntimeSuncommon_trap_Type6F_pknITypeFunc__; -text: .text%__1cJloadLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSsafePoint_pollNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cINodeHashJhash_find6MpknENode__p1_; -text: .text%__1cQmulL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOMethodLivenessKBasicBlock2t6Mp0ii_v_; -text: .text%__1cOMethodLivenessKBasicBlockQcompute_gen_kill6MpnIciMethod__v_; -text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; -text: .text%__1cJTypeTupleKmake_range6FpnLciSignature__pk0_; -text: .text%__1cJTypeTupleLmake_domain6FpnPciInstanceKlass_pnLciSignature__pk0_; -text: .text%__1cSmembar_acquireNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMWarmCallInfoKalways_hot6F_p0_; -text: .text%__1cTCreateExceptionNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreB0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMtlsLoadPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLBoxLockNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; -text: .text%__1cKimmI13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cJloadBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIGraphKitZadd_exception_states_from6MpnIJVMState__v_; -text: .text%__1cMPhaseChaitinNFind_compress6MpknENode__I_; -text: .text%__1cQSystemDictionaryEfind6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cHPhiNodeEmake6FpnENode_2_p0_; -text: .text%__1cNCatchProjNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cWCallLeafNoFPDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIciMethodTcall_profile_at_bci6Mi_nNciCallProfile__; -text: .text%__1cIProjNodeDcmp6kMrknENode__I_; -text: .text%__1cLklassVtableIindex_of6kMpnNmethodOopDesc_i_i_; -text: .text%__1cFParseMprofile_call6MpnENode__v_; -text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__; -text: .text%__1cIGraphKitWround_double_arguments6MpnIciMethod__v_; -text: .text%__1cIGraphKitTround_double_result6MpnIciMethod__v_; -text: .text%__1cFParseHdo_call6M_v_; -text: .text%__1cNloadConP0NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cHMulNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMPhaseIterGVNJtransform6MpnENode__2_; -text: .text%__1cSsafePoint_pollNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadSNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKarrayKlassLobject_size6kMi_i_; -text: .text%__1cKMemBarNodeEhash6kM_I_; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceKlass.o; -text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; -text: .text%__1cMURShiftLNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitUmake_exception_state6MpnENode__pnNSafePointNode__; -text: .text%__1cLProfileDataOtranslate_from6Mp0_v_: ciMethodData.o; -text: .text%__1cRsarI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLBuildCutout2t6MpnIGraphKit_pnENode_ff_v_; -text: .text%__1cTCompareAndSwapLNodeGOpcode6kM_i_; -text: .text%__1cQxorI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMMergeMemNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNflagsRegLOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cQsubI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKarrayKlassGvtable6kM_pnLklassVtable__; -text: .text%__1cRshrI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQCallLeafNoFPNodeGOpcode6kM_i_; -text: .text%__1cMURShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFStateM_sub_Op_ConP6MpknENode__v_; -text: .text%__1cIGraphKitMsaved_ex_oop6FpnNSafePointNode__pnENode__; -text: .text%__1cISubINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPciInstanceKlassFsuper6M_p0_; -text: .text%__1cIBoolNodeHsize_of6kM_I_; -text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_: objArrayKlassKlass.o; -text: .text%__1cPcompP_iRegPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadPNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; -text: .text%__1cNSignatureInfoGdo_int6M_v_: bytecode.o; -text: .text%__1cOstackSlotLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKInlineTreeMok_to_inline6MpnIciMethod_pnIJVMState_rnNciCallProfile_pnMWarmCallInfo__8_; -text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__; -text: .text%__1cQsubL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cWCallLeafNoFPDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFTypeDEhash6kM_i_; -text: .text%__1cJStartNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%jni_ExceptionOccurred: jni.o; -text: .text%__1cKciTypeFlowLStateVectorStype_meet_internal6FpnGciType_3p0_3_; -text: .text%__1cMloadConINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGIfNodeHsize_of6kM_I_: classes.o; -text: .text%__1cPconvL2I_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%__1cHCompileFstart6kM_pnJStartNode__; -text: .text%__1cPStatSamplerTaskEtask6M_v_: statSampler.o; -text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cIParmNodeJideal_reg6kM_I_; -text: .text%__1cQandL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cIregFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cRbranchLoopEndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cGRFrame2t6MnFframe_pnKJavaThread_kp0_v_; -text: .text%jni_GetArrayLength: jni.o; -text: .text%__1cPciInstanceKlassUget_canonical_holder6Mi_p0_; -text: .text%__1cJloadLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOClearArrayNodeGOpcode6kM_i_; -text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; -text: .text%__1cVCompressedWriteStreamEgrow6M_v_; -text: .text%JVM_Write; -text: .text%__1cLciSignature2t6MpnHciKlass_pnIciSymbol__v_; -text: .text%__1cIciMethod2t6MnMmethodHandle__v_; -text: .text%__1cIHaltNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cWShouldNotReachHereNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOpaque1NodeGOpcode6kM_i_; -text: .text%__1cSbranchCon_longNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKstoreCNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHAddNodePadd_of_identity6kMpknEType_3_3_; -text: .text%__1cUcompU_iReg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_RawMonitorEnter; -text: .text%JVM_RawMonitorExit; -text: .text%__1cOMachReturnNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cWShouldNotReachHereNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcmpFastLockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cETypeRget_typeflow_type6FpnGciType__pk0_; -text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; -text: .text%__1cRcmpFastUnlockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: classFileParser.o; -text: .text%__1cURethrowExceptionNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; -text: .text%__1cNSignatureInfoHdo_bool6M_v_: bytecode.o; -text: .text%__1cSandI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIAddINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cLTypeInstPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cMloadConLNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cFParseFmerge6Mi_v_; -text: .text%__1cNSafePointNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJTypeTupleFxdual6kM_pknEType__; -text: .text%__1cNLoadKlassNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLRethrowNodeGOpcode6kM_i_; -text: .text%__1cJloadSNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPcmpFastLockNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cFArena2T6M_v_; -text: .text%__1cKMemBarNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cLPCTableNodeEhash6kM_I_; -text: .text%__1cHConNodeLout_RegMask6kM_rknHRegMask__: classes.o; -text: .text%__1cXPhaseAggressiveCoalesceYinsert_copy_with_overlap6MpnFBlock_pnENode_II_v_; -text: .text%__1cOloadConI13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMtlsLoadPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMPhaseChaitinNFind_compress6MI_I_; -text: .text%__1cMindIndexOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFStateN_sub_Op_LoadP6MpknENode__v_; -text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; -text: .text%__1cNGCTaskManagerIget_task6MI_pnGGCTask__; -text: .text%__1cLGCTaskQdDueueGremove6M_pnGGCTask__; -text: .text%__1cLGCTaskQdDueueHenqueue6MpnGGCTask__v_; -text: .text%__1cNGCTaskManagerPnote_completion6MI_v_; -text: .text%__1cQandI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIGraphKitHjava_bc6kM_nJBytecodesECode__; -text: .text%__1cIGraphKitNbuiltin_throw6MnODeoptimizationLDeoptReason_pnENode__v_; -text: .text%__1cOGenerateOopMapHget_var6Mi_nNCellTypeState__; -text: .text%__1cRinterpretedVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%jni_GetSuperclass: jni.o; -text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; -text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; -text: .text%__1cIMulINodeGOpcode6kM_i_; -text: .text%__1cRcompL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNloadKlassNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGGCTask2t6M_v_; -text: .text%__1cJloadSNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIJumpDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cObranchConPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cITypeFuncFxdual6kM_pknEType__; -text: .text%__1cFStateM_sub_Op_CmpI6MpknENode__v_; -text: .text%__1cJcmpOpOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cGciType2t6MnLKlassHandle__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle__v_; -text: .text%__1cMindirectOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cSPSPromotionManagerbBgc_thread_promotion_manager6Fi_p0_; -text: .text%__1cQxorI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadLNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIregFOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cKcmpOpPOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cNloadKlassNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHPhiNodeMslice_memory6kMpknHTypePtr__p0_; -text: .text%__1cPCheckCastPPNodeJideal_reg6kM_I_: connode.o; -text: .text%__1cObranchConPNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cObranchConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICHeapObj2k6Fpv_v_; -text: .text%__1cSaddL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRmethodDataOopDescJbci_to_dp6Mi_pC_; -text: .text%__1cMloadConFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cFArena2t6M_v_; -text: .text%__1cRInterpreterOopMapLiterate_oop6MpnNOffsetClosure__v_; -text: .text%__1cRInterpreterOopMap2T6M_v_; -text: .text%__1cLOopMapCacheGlookup6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cNinstanceKlassImask_for6MnMmethodHandle_ipnRInterpreterOopMap__v_; -text: .text%__1cNmethodOopDescImask_for6MipnRInterpreterOopMap__v_; -text: .text%__1cRInterpreterOopMap2t6M_v_; -text: .text%__1cISubINodeDsub6kMpknEType_3_3_; -text: .text%__1cFParseOreturn_current6MpnENode__v_; -text: .text%__1cRsarI_reg_imm5NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMMonitorValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cMloadConLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJStoreNodeSIdeal_masked_input6MpnIPhaseGVN_I_pnENode__; -text: .text%jni_GetPrimitiveArrayCritical: jni.o; -text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; -text: .text%__1cPconvI2L_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; -text: .text%__1cSmembar_releaseNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; -text: .text%__1cLOpaque1NodeEhash6kM_I_; -text: .text%__1cJStoreNodeZIdeal_sign_extended_input6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cSbranchCon_longNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapGppload6MpnNCellTypeState_i_v_; -text: .text%__1cSmembar_releaseNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNbranchConNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; -text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__; -text: .text%__1cZCallDynamicJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJMultiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKStoreLNodeGOpcode6kM_i_; -text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; -text: .text%__1cNloadKlassNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; -text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_; -text: .text%__1cRsarI_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRbranchLoopEndNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreP0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLRethrowNodeKmatch_edge6kMI_I_; -text: .text%__1cFTypeFEhash6kM_i_; -text: .text%__1cFStateM_sub_Op_AddI6MpknENode__v_; -text: .text%__1cOParseGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cFParseQcreate_entry_map6M_pnNSafePointNode__; -text: .text%__1cFParseLbuild_exits6M_v_; -text: .text%__1cFParseIdo_exits6M_v_; -text: .text%__1cFParse2t6MpnIJVMState_pnIciMethod_f_v_; -text: .text%__1cIBoolNodeDcmp6kMrknENode__I_; -text: .text%__1cFParsePdo_method_entry6M_v_; -text: .text%__1cNCallGeneratorKfor_inline6FpnIciMethod_f_p0_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_; -text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; -text: .text%__1cRciVirtualCallDataOtranslate_from6MpnLProfileData__v_; -text: .text%jni_IsSameObject: jni.o; -text: .text%__1cMloadConINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNbranchConNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cNbranchConNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQandL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIciObjectFklass6M_pnHciKlass__; -text: .text%__1cPThreadLocalNodeGOpcode6kM_i_; -text: .text%__1cZPhaseConservativeCoalesceKupdate_ifg6MIIpnIIndexSet_2_v_; -text: .text%__1cZPhaseConservativeCoalesceMunion_helper6MpnENode_2II222pnFBlock_I_v_; -text: .text%__1cOMethodLivenessKBasicBlockJstore_one6Mi_v_; -text: .text%__1cIIndexSetEswap6Mp0_v_; -text: .text%__1cHTypeAryEmake6FpknEType_pknHTypeInt__pk0_; -text: .text%__1cPClassFileParserbCverify_legal_class_modifiers6MipnGThread__v_; -text: .text%__1cKTypeAryPtrFxdual6kM_pknEType__; -text: .text%__1cLAccessFlagsPatomic_set_bits6Mi_v_; -text: .text%__1cQComputeCallStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cNinstanceKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cKstoreBNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKCastPPNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cKstorePNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOPhaseIdealLoopOsplit_thru_phi6MpnENode_2i_2_; -text: .text%__1cENodeGOpcode6kM_i_; -text: .text%__1cQandI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIciMethodbBinterpreter_call_site_count6Mi_i_; -text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%__1cTconstantPoolOopDescbDresolve_string_constants_impl6FnSconstantPoolHandle_pnGThread__v_; -text: .text%__1cHSubNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cTCallDynamicJavaNodeGOpcode6kM_i_; -text: .text%__1cKstoreBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cILoadNodeDcmp6kMrknENode__I_; -text: .text%__1cIciObject2t6M_v_; -text: .text%__1cSconstMethodOopDescZchecked_exceptions_length6kM_i_; -text: .text%__1cRcompL_reg_conNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHCompileXin_preserve_stack_slots6M_I_; -text: .text%__1cPciObjectFactoryUget_empty_methodData6M_pnMciMethodData__; -text: .text%__1cMciMethodData2t6M_v_; -text: .text%__1cHOrINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFframeLreal_sender6kMpnLRegisterMap__0_; -text: .text%__1cGRFrameGcaller6M_p0_; -text: .text%__1cPCheckCastPPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cXmembar_release_lockNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cJloadINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_: jni.o; -text: .text%__1cMloadConFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMCreateExNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQaddL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMCreateExNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cISubINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cFKlassQset_next_sibling6MpnMklassOopDesc__v_; -text: .text%__1cQdivD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNCatchProjNodeDcmp6kMrknENode__I_; -text: .text%__1cKTypeOopPtrEhash6kM_i_; -text: .text%__1cIMinINodeGOpcode6kM_i_; -text: .text%__1cMURShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKTypeRawPtrFxmeet6kMpknEType__3_; -text: .text%JVM_GetMethodIxModifiers; -text: .text%__1cIMulLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPconvI2L_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLLShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cTCreateExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_IsInterface; -text: .text%__1cPorI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIDivINodeGOpcode6kM_i_; -text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_; -text: .text%__1cLOpaque1NodeLbottom_type6kM_pknEType__: connode.o; -text: .text%__1cNloadRangeNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLRShiftLNodeGOpcode6kM_i_; -text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__; -text: .text%__1cSCountedLoopEndNodeKstride_con6kM_i_; -text: .text%__1cUPipeline_Use_Element2t6M_v_: output.o; -text: .text%__1cRshrL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHCompileSregister_intrinsic6MpnNCallGenerator__v_; -text: .text%__1cNSCMemProjNodeGOpcode6kM_i_; -text: .text%__1cNimmP_pollOperEtype6kM_pknEType__: ad_sparc_clone.o; -text: .text%__1cRloadConP_pollNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cQinstanceRefKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOGenerateOopMapUreachable_basicblock6Fp0ipi_v_; -text: .text%__1cPciInstanceKlassLfind_method6MpnIciSymbol_2_pnIciMethod__; -text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_; -text: .text%__1cFciEnvRfind_system_klass6MpnIciSymbol__pnHciKlass__; -text: .text%__1cLRegisterMapIpd_clear6M_v_; -text: .text%__1cHUNICODEHas_utf86FpHi_pc_; -text: .text%__1cLstoreP0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cIGraphKitYcombine_exception_states6MpnNSafePointNode_2_v_; -text: .text%__1cQmulL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; -text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; -text: .text%__1cKstoreLNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cRbranchLoopEndNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQConstantIntValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cSconvI2D_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; -text: .text%__1cUcompI_iReg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerNverify_thread6M_v_; -text: .text%__1cSbranchCon_longNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; -text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; -text: .text%__1cIAddLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFStateO_sub_Op_StoreI6MpknENode__v_; -text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cHciField2t6MpnPfieldDescriptor__v_; -text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_; -text: .text%__1cMloadConLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cYcompareAndSwapL_boolNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFKlassMnext_sibling6kM_p0_; -text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; -text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cSobjArrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%__1cJimmU5OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLBlock_ArrayEgrow6MI_v_; -text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_; -text: .text%__1cKcmpOpPOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cObranchConPNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; -text: .text%__1cLBoxLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcmpFastLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHRetNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvL2I_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cbDcatch_cleanup_find_cloned_def6FpnFBlock_pnENode_1rnLBlock_Array_i_3_: lcm.o; -text: .text%__1cQxorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOClearArrayNodeKmatch_edge6kMI_I_; -text: .text%__1cPconvL2I_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadSNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_: universe.o; -text: .text%__1cFStateP_sub_Op_LShiftI6MpknENode__v_; -text: .text%__1cQandL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPSignatureStreamRas_symbol_or_null6M_pnNsymbolOopDesc__; -text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cIGraphKitbBset_arguments_for_java_call6MpnMCallJavaNode__v_; -text: .text%__1cIGraphKitJpush_node6MnJBasicType_pnENode__v_: callGenerator.o; -text: .text%__1cNSignatureInfoIdo_array6Mii_v_: bytecode.o; -text: .text%__1cJcmpOpOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cMloadConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_SetObjectArrayElement: jni.o; -text: .text%__1cSandI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPThreadLocalNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNSafePointNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cObranchConUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRshlL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQandI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSandI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; -text: .text%__1cLConvL2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOAbstractICacheQinvalidate_range6FpCi_v_; -text: .text%__1cKstorePNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMaxINodeGOpcode6kM_i_; -text: .text%__1cTDirectCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cMWarmCallInfoLalways_cold6F_p0_; -text: .text%__1cIimmDOperJconstantD6kM_d_: ad_sparc_clone.o; -text: .text%__1cIPhaseIFGEinit6MI_v_; -text: .text%__1cJPhaseLiveHcompute6MI_v_; -text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cSaddI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFTypeDEmake6Fd_pk0_; -text: .text%__1cPThreadRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cPThreadRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cRshlI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQaddL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMloadConDNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cFStateN_sub_Op_LoadI6MpknENode__v_; -text: .text%__1cIMachOperEtype6kM_pknEType__; -text: .text%JVM_GetCPClassNameUTF; -text: .text%__1cKBufferBlobGcreate6Fpkci_p0_; -text: .text%__1cKcmpOpUOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cObranchConUNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cObranchConUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_GetStringLength: jni.o; -text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cLConvI2LNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJloadPNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cMoutputStream2t6Mi_v_; -text: .text%__1cMstringStreamJas_string6M_pc_; -text: .text%__1cMstringStream2T6M_v_; -text: .text%__1cIGraphKitMreset_memory6M_pnENode__; -text: .text%__1cZCallDynamicJavaDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKstorePNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cENodeMsetup_is_top6M_v_; -text: .text%__1cIGotoNodeGOpcode6kM_i_; -text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; -text: .text%__1cNbranchConNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapLbb_mark_fct6Fp0ipi_v_; -text: .text%__1cKcmpOpPOperFequal6kM_i_: ad_sparc_clone.o; -text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_; -text: .text%__1cKReturnNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_; -text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_; -text: .text%__1cJloadINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmembar_releaseNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cSaddL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLRShiftINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cEDict2t6MpFpkv2_ipF2_i_v_; -text: .text%__1cEDict2T6M_v_; -text: .text%__1cKBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cLOopRecorder2t6MpnFArena__v_; -text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__; -text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cIModINodeGOpcode6kM_i_; -text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_nMmethodHandle__v_; -text: .text%__1cKJavaThreadQlast_java_vframe6MpnLRegisterMap__pnKjavaVFrame__; -text: .text%__1cTStackWalkCompPolicyVfindTopInlinableFrame6MpnNGrowableArray4CpnGRFrame____2_; -text: .text%__1cTStackWalkCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; -text: .text%__1cISubLNodeGOpcode6kM_i_; -text: .text%__1cKciTypeFlow2t6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cKciTypeFlowPget_start_state6M_pkn0ALStateVector__; -text: .text%__1cKciTypeFlowHdo_flow6M_v_; -text: .text%__1cKciTypeFlowKflow_types6M_v_; -text: .text%__1cKciTypeFlowKmap_blocks6M_v_; -text: .text%__1cMloadConPNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPoolHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cIciMethodJload_code6M_v_; -text: .text%__1cMciMethodDataJload_data6M_v_; -text: .text%__1cIGraphKitTuse_exception_state6MpnNSafePointNode__pnENode__; -text: .text%__1cOcompU_iRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIGraphKitGmemory6MI_pnENode__; -text: .text%__1cIHaltNodeEhash6kM_I_: classes.o; -text: .text%__1cFKlassQup_cast_abstract6M_p0_; -text: .text%__1cKReturnNodeEhash6kM_I_: classes.o; -text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cPjava_lang_ClassNcreate_mirror6FnLKlassHandle_pnGThread__pnHoopDesc__; -text: .text%__1cIAndINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cMciMethodData2t6MnQmethodDataHandle__v_; -text: .text%__1cIAndINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cLOpaque2NodeGOpcode6kM_i_; -text: .text%__1cOClearArrayNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; -text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cOPhaseIdealLoopPis_counted_loop6MpnENode_pnNIdealLoopTree__2_; -text: .text%__1cQComputeCallStackHdo_void6M_v_: generateOopMap.o; -text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_; -text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__; -text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; -text: .text%jni_GetStringUTFLength: jni.o; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; -text: .text%jni_GetStringUTFRegion: jni.o; -text: .text%__1cFKlassRbase_create_klass6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__1_; -text: .text%__1cHUNICODELutf8_length6FpHi_i_; -text: .text%__1cQPlaceholderTableMremove_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cKstoreBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQSystemDictionaryTload_instance_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cRsarI_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUcompU_iReg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHAddNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cUcompU_iReg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKPerfStringKset_string6Mpkc_v_; -text: .text%__1cQjava_lang_StringRas_unicode_string6FpnHoopDesc_ri_pH_; -text: .text%JVM_InternString; -text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_; -text: .text%__1cCosGrandom6F_l_; -text: .text%__1cVcompP_iRegP_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cRcompL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRMachNullCheckNodeLout_RegMask6kM_rknHRegMask__: machnode.o; -text: .text%__1cSTailCalljmpIndNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cIGraphKitPpush_pair_local6Mi_v_: parse2.o; -text: .text%__1cICodeHeapKdeallocate6Mpv_v_; -text: .text%__1cJCodeCacheEfree6FpnICodeBlob__v_; -text: .text%__1cKTypeRawPtrEmake6FpC_pk0_; -text: .text%jni_SetIntField: jni.o; -text: .text%__1cNIdealLoopTreeMcounted_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cKBufferBlobEfree6Fp0_v_; -text: .text%__1cPconvL2I_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; -text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; -text: .text%__1cVshrL_reg_imm6_L2INodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cZCallDynamicJavaDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cWImplicitExceptionTableGappend6MII_v_; -text: .text%__1cRMachNullCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_: ciMethodData.o; -text: .text%__1cQxorI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNIdealLoopTreeVadjust_loop_exit_prob6MpnOPhaseIdealLoop__v_; -text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cSandI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIPhaseIFGISquareUp6M_v_; -text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_; -text: .text%__1cKCodeBuffer2T6M_v_; -text: .text%__1cQPSGenerationPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cLOpaque1NodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cMURShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRcompL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cXAdaptiveWeightedAverageGsample6Mf_v_; -text: .text%__1cFKlassWappend_to_sibling_list6M_v_; -text: .text%__1cQSystemDictionarySjava_system_loader6F_pnHoopDesc__; -text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; -text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; -text: .text%__1cMTypeKlassPtrFxdual6kM_pknEType__; -text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; -text: .text%__1cNinstanceKlassQinit_implementor6M_v_; -text: .text%__1cPClassFileStream2t6MpCipc_v_; -text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; -text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; -text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; -text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; -text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__; -text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_; -text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassQeager_initialize6MpnGThread__v_; -text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserbAparse_classfile_attributes6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cKcmpOpPOperJnot_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cMPhaseIterGVNIoptimize6M_v_; -text: .text%__1cOPhaseTransform2t6MnFPhaseLPhaseNumber__v_; -text: .text%__1cISubINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o; -text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o; -text: .text%__1cHMemNodeHsize_of6kM_I_; -text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; -text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; -text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; -text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cQmodI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLRShiftINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKCMoveINodeGOpcode6kM_i_; -text: .text%__1cLLShiftLNodeGOpcode6kM_i_; -text: .text%__1cYcompareAndSwapL_boolNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMtlsLoadPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateQ_sub_Op_URShiftI6MpknENode__v_; -text: .text%__1cKcmpOpUOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cObranchConUNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cQaddP_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapJinterp_bb6MpnKBasicBlock__v_; -text: .text%__1cOGenerateOopMapQnext_bb_start_pc6MpnKBasicBlock__i_; -text: .text%__1cLklassVtableYadd_new_mirandas_to_list6FpnNGrowableArray4CpnNmethodOopDesc___pnPobjArrayOopDesc_6pnMklassOopDesc__v_; -text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_; -text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; -text: .text%JVM_GetMethodIxSignatureUTF; -text: .text%JVM_GetMethodIxMaxStack; -text: .text%JVM_GetMethodIxArgsSize; -text: .text%JVM_GetMethodIxByteCodeLength; -text: .text%JVM_GetMethodIxExceptionIndexes; -text: .text%JVM_GetMethodIxByteCode; -text: .text%JVM_GetMethodIxExceptionsCount; -text: .text%__1cLstoreP0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHCmpNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cMPhaseChaitinSbuild_ifg_physical6MpnMResourceArea__I_; -text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cQmulD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKoopFactoryWnew_permanent_intArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cPClassFileParserVparse_exception_table6MIInSconstantPoolHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cNPhaseCoalescePcoalesce_driver6M_v_; -text: .text%__1cLBuildCutout2T6M_v_; -text: .text%__1cNloadConL0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJloadFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNloadConP0NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cJimmP0OperEtype6kM_pknEType__: ad_sparc_clone.o; -text: .text%__1cLstoreI0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPCheckCastPPNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; -text: .text%__1cHNTarjanICOMPRESS6M_v_; -text: .text%__1cNRelocIteratorTlocs_and_index_size6Fii_i_; -text: .text%__1cQsubL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcompI_iRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; -text: .text%__1cQandI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIXorINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cRmethodDataOopDescLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cMnegF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLstoreI0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; -text: .text%__1cSaddL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQshrL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cILoopNodeHsize_of6kM_I_: classes.o; -text: .text%__1cHMatcherLfind_shared6MpnENode__v_; -text: .text%__1cJStartNodeHsize_of6kM_I_; -text: .text%__1cHMatcherFxform6MpnENode_i_2_; -text: .text%__1cEDict2t6MpFpkv2_ipF2_ipnFArena_i_v_; -text: .text%__1cRInterpretedRFrameKtop_vframe6kM_pnKjavaVFrame__: rframe.o; -text: .text%__1cQmodI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRinterpretedVFrameDbci6kM_i_; -text: .text%__1cIAndINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIAndINodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cNinstanceKlassbBcall_class_initializer_impl6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNloadRangeNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRcompL_reg_conNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cMnegF_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_; -text: .text%__1cOMethodLivenessQcompute_liveness6M_v_; -text: .text%__1cOMethodLiveness2t6MpnFArena_pnIciMethod__v_; -text: .text%__1cOMethodLivenessNinit_gen_kill6M_v_; -text: .text%__1cOMethodLivenessSpropagate_liveness6M_v_; -text: .text%__1cOMethodLivenessRinit_basic_blocks6M_v_; -text: .text%__1cIGraphKitHopt_iff6MpnENode_2_2_; -text: .text%__1cLRShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJTimeStampGupdate6M_v_; -text: .text%__1cRmethodDataOopDescKmileage_of6FpnNmethodOopDesc__i_; -text: .text%__1cMloadConDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParseQarray_addressing6MnJBasicType_ippknEType__pnENode__; -text: .text%__1cNloadConP0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPCountedLoopNodeHsize_of6kM_I_: classes.o; -text: .text%__1cIProjNodeJideal_reg6kM_I_; -text: .text%__1cQaddI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQcmovI_reg_ltNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRsubI_zero_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJcmpOpOperFequal6kM_i_: ad_sparc_clone.o; -text: .text%__1cHCompilebAvarargs_C_out_slots_killed6kM_I_; -text: .text%__1cOPhaseIdealLoopQset_subtree_ctrl6MpnENode__v_; -text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cNflagsRegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cYciExceptionHandlerStreamPcount_remaining6M_i_; -text: .text%__1cFParseXcatch_inline_exceptions6MpnNSafePointNode__v_; -text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cKcmpOpUOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%JVM_GetFieldIxModifiers; -text: .text%__1cRScavengeRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cRScavengeRootsTaskEname6M_pc_: psTasks.o; -text: .text%JVM_IsConstructorIx; -text: .text%__1cPJavaCallWrapperHoops_do6MpnKOopClosure__v_; -text: .text%__1cFframeNoops_entry_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cSaddP_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__; -text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; -text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; -text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__; -text: .text%__1cKg1RegIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_; -text: .text%__1cUjni_invoke_nonstatic6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; -text: .text%__1cIAndINodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cIAndINodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cTMachCallRuntimeNodePret_addr_offset6M_i_; -text: .text%__1cLConvL2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKo0RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIregDOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; -text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cLRethrowNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSPSKeepAliveClosureGdo_oop6MppnHoopDesc__v_: psScavenge.o; -text: .text%__1cFParseFBlockRsuccessor_for_bci6Mi_p1_; -text: .text%__1cVPreserveExceptionMark2T6M_v_; -text: .text%__1cVPreserveExceptionMark2t6MrpnGThread__v_; -text: .text%__1cHRetNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIRootNodeFValue6kMpnOPhaseTransform__pknEType__: classes.o; -text: .text%__1cMoutputStreamFprint6MpkcE_v_; -text: .text%__1cOGenerateOopMapKcopy_state6MpnNCellTypeState_2_v_; -text: .text%__1cHCompileQsync_stack_slots6kM_i_; -text: .text%__1cHMulNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJLoadFNodeGOpcode6kM_i_; -text: .text%__1cNSignatureInfoHdo_long6M_v_: bytecode.o; -text: .text%__1cHPhiNodeDcmp6kMrknENode__I_; -text: .text%__1cHOrINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cSTailCalljmpIndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_; -text: .text%__1cKstoreINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRloadConP_pollNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPClassFileStreamGget_u86MpnGThread__X_; -text: .text%__1cLMachNopNodeMideal_Opcode6kM_i_: ad_sparc.o; -text: .text%__1cLMachNopNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopNreorg_offsets6MpnNIdealLoopTree__v_; -text: .text%__1cRshrL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; -text: .text%__1cPcompP_iRegPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSxorI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOPhaseIdealLoopRsplit_thru_region6MpnENode_2_2_; -text: .text%__1cIAndLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cbAPSEvacuateFollowersClosureHdo_void6M_v_: psScavenge.o; -text: .text%jni_ExceptionCheck: jni.o; -text: .text%__1cIAndLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; -text: .text%__1cOPhaseIdealLoopMdominated_by6MpnENode_2_v_; -text: .text%__1cQshlI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseNthrow_to_exit6MpnNSafePointNode__v_; -text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cJVectorSetGslamin6Mrk0_v_; -text: .text%JVM_Clone; -text: .text%__1cRAbstractAssemblerFflush6M_v_; -text: .text%__1cITypeLongFxdual6kM_pknEType__; -text: .text%__1cIJumpDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cKCompiledIC2t6MpnKNativeCall__v_; -text: .text%__1cOstackSlotLOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cURethrowExceptionNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshrL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOpaque2NodeEhash6kM_I_; -text: .text%__1cJloadFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cUcompU_iReg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUEdenMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cYSurvivorMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cLOptoRuntimeJstub_name6FpC_pkc_; -text: .text%__1cHOrINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cICmpLNodeDsub6kMpknEType_3_3_; -text: .text%__1cHPhiNodeKmake_blank6FpnENode_2_p0_; -text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_: jni.o; -text: .text%__1cIMulINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cOMachEpilogNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateM_sub_Op_SubI6MpknENode__v_; -text: .text%__1cFframeRretrieve_receiver6MpnLRegisterMap__pnHoopDesc__; -text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__; -text: .text%__1cNloadKlassNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cMTailCallNodeKmatch_edge6kMI_I_; -text: .text%jni_NewObject: jni.o; -text: .text%__1cIPhaseIFGYCompute_Effective_Degree6M_v_; -text: .text%__1cHMemNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cXmembar_release_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cJNode_ListEyank6MpnENode__v_; -text: .text%__1cMPhaseChaitinISimplify6M_v_; -text: .text%__1cNIdealLoopTreeIset_nest6MI_i_; -text: .text%__1cIMulLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cMStartOSRNodeGOpcode6kM_i_; -text: .text%__1cSCallLeafDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cLcmpD_ccNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJcmpOpOperEless6kM_i_: ad_sparc_clone.o; -text: .text%__1cKciTypeFlowPflow_exceptions6MpnNGrowableArray4Cpn0AFBlock___pnNGrowableArray4CpnPciInstanceKlass___pn0ALStateVector__v_; -text: .text%__1cKType_ArrayEgrow6MI_v_; -text: .text%__1cNloadConP0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cXmembar_release_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPconvF2D_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshrL_reg_imm6NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMURShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cVshrL_reg_imm6_L2INodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSMemBarVolatileNodeGOpcode6kM_i_; -text: .text%__1cLstoreB0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRshrI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cNSafePointNodeLpop_monitor6M_v_; -text: .text%__1cMPhaseChaitinVfind_base_for_derived6MppnENode_2rI_2_; -text: .text%__1cLOptoRuntimebAcomplete_monitor_exit_Type6F_pknITypeFunc__; -text: .text%__1cOstackSlotIOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cIGraphKitNshared_unlock6MpnENode_2_v_; -text: .text%__1cFStateT_sub_Op_CheckCastPP6MpknENode__v_; -text: .text%__1cQsubI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFKlassDLCA6Mp0_1_; -text: .text%__1cKTypeRawPtrEmake6FnHTypePtrDPTR__pk0_; -text: .text%__1cHciKlassVleast_common_ancestor6Mp0_1_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_tree6M_v_; -text: .text%__1cRcompL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRshlL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRloadConP_pollNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQshlL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMindirectOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindirectOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindirectOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cNSafePointNodeMpush_monitor6MpknMFastLockNode__v_; -text: .text%__1cSCallLeafDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cJLoadBNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJloadBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__: cfgnode.o; -text: .text%__1cRcompL_reg_conNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPcheckCastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; -text: .text%__1cJCMoveNodeLis_cmove_id6FpnOPhaseTransform_pnENode_44pnIBoolNode__4_; -text: .text%__1cKTypeAryPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; -text: .text%__1cOPhaseIdealLoopKDominators6M_v_; -text: .text%jni_NewGlobalRef: jni.o; -text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; -text: .text%__1cIAndINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cYcompareAndSwapL_boolNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMPhaseChaitinFSplit6MI_I_; -text: .text%__1cMPhaseChaitinHcompact6M_v_; -text: .text%__1cZPhaseConservativeCoalesce2t6MrnMPhaseChaitin__v_; -text: .text%__1cMPhaseChaitinZcompress_uf_map_for_nodes6M_v_; -text: .text%__1cZPhaseConservativeCoalesceGverify6M_v_; -text: .text%__1cRcmpFastUnlockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQshlI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cXmembar_release_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMachEpilogNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_; -text: .text%__1cJloadFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIRootNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cJLoadLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle__v_; -text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_; -text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_; -text: .text%JVM_FillInStackTrace; -text: .text%__1cKJavaThreadGactive6F_p0_; -text: .text%__1cKstoreFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_; -text: .text%__1cRsubI_zero_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cHTypePtrFxmeet6kMpknEType__3_; -text: .text%__1cNflagsRegFOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cIMinINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cFParseWensure_phis_everywhere6M_v_; -text: .text%__1cLRethrowNodeEhash6kM_I_: classes.o; -text: .text%__1cIDivLNodeGOpcode6kM_i_; -text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; -text: .text%__1cNmethodOopDescVclear_native_function6M_v_; -text: .text%__1cOloadConL13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQsubL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%jio_snprintf; -text: .text%__1cMloadConINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; -text: .text%__1cSmulI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%jni_NewLocalRef: jni.o; -text: .text%__1cIMulDNodeGOpcode6kM_i_; -text: .text%__1cLStrCompNodeGOpcode6kM_i_; -text: .text%__1cQcmovI_reg_gtNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPClassFileParserbNparse_classfile_inner_classes_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__H_; -text: .text%__1cKStoreFNodeGOpcode6kM_i_; -text: .text%__1cLConvD2INodeGOpcode6kM_i_; -text: .text%__1cIAddLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cMURShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKReturnNodeJideal_reg6kM_I_: classes.o; -text: .text%jni_DeleteGlobalRef: jni.o; -text: .text%__1cVPatchingRelocIteratorIpostpass6M_v_; -text: .text%__1cVPatchingRelocIteratorHprepass6M_v_; -text: .text%__1cRAbstractAssemblerOcode_fill_byte6F_i_; -text: .text%__1cIAndLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIAndLNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cJOopMapSet2t6M_v_; -text: .text%__1cNSCMemProjNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%JVM_GetCPMethodModifiers; -text: .text%jni_GetObjectArrayElement: jni.o; -text: .text%__1cFParseKarray_load6MnJBasicType__v_; -text: .text%jni_SetLongField: jni.o; -text: .text%__1cHGCCauseJto_string6Fn0AFCause__pkc_; -text: .text%__1cJOopMapSetHcopy_to6MpC_v_; -text: .text%__1cQjava_lang_ThreadRset_thread_status6FpnHoopDesc_n0AMThreadStatus__v_; -text: .text%__1cJOopMapSetJheap_size6kM_i_; -text: .text%__1cNSafePointNodeKgrow_stack6MpnIJVMState_I_v_; -text: .text%__1cIJVMState2t6Mi_v_; -text: .text%__1cIAndLNodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIAndLNodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cJLoadSNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMMachProjNodeHsize_of6kM_I_: classes.o; -text: .text%__1cOPhaseIdealLoopUsplit_if_with_blocks6MrnJVectorSet_rnKNode_Stack__v_; -text: .text%__1cNinstanceKlassPadd_implementor6MpnMklassOopDesc__v_; -text: .text%__1cLOopRecorderIoop_size6M_i_; -text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; -text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_; -text: .text%__1cOPhaseIdealLoopOset_early_ctrl6MpnENode__v_; -text: .text%__1cHnmethodKtotal_size6kM_i_; -text: .text%__1cbFunnecessary_membar_volatileNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMloadConLNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParseNadd_safepoint6M_v_; -text: .text%__1cOPhaseTransform2t6Mp0nFPhaseLPhaseNumber__v_; -text: .text%__1cLPhaseValues2t6Mp0_v_; -text: .text%__1cQcmovI_reg_ltNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cXPhaseAggressiveCoalesceGverify6M_v_: coalesce.o; -text: .text%__1cHCompilebBregister_library_intrinsics6M_v_; -text: .text%__1cXPhaseAggressiveCoalesceNinsert_copies6MrnHMatcher__v_; -text: .text%__1cNPhaseRegAlloc2t6MIrnIPhaseCFG_rnHMatcher_pF_v_v_; -text: .text%__1cIPhaseCFGJbuild_cfg6M_I_; -text: .text%__1cHCompileEInit6Mi_v_; -text: .text%__1cVExceptionHandlerTable2t6Mi_v_; -text: .text%__1cMPhaseChaitin2t6MIrnIPhaseCFG_rnHMatcher__v_; -text: .text%__1cMPhaseChaitinRRegister_Allocate6M_v_; -text: .text%__1cHCompileTset_cached_top_node6MpnENode__v_; -text: .text%__1cHMatcherZnumber_of_saved_registers6F_i_; -text: .text%__1cNPhaseRegAllocTpd_preallocate_hook6M_v_; -text: .text%__1cLBlock_Array2t6MpnFArena__v_: block.o; -text: .text%__1cMPhaseChaitinMreset_uf_map6MI_v_; -text: .text%__1cMPhaseChaitinRbuild_ifg_virtual6M_v_; -text: .text%__1cIPhaseCFGQGlobalCodeMotion6MrnHMatcher_IrnJNode_List__v_; -text: .text%__1cHMatcherTFixup_Save_On_Entry6M_v_; -text: .text%__1cHMatcherPinit_spill_mask6MpnENode__v_; -text: .text%__1cHCompileICode_Gen6M_v_; -text: .text%__1cUDebugInfoWriteStream2t6MpnYDebugInformationRecorder_i_v_; -text: .text%__1cHMatcherVinit_first_stack_mask6M_v_; -text: .text%__1cFArenaNmove_contents6Mp0_1_; -text: .text%__1cFArenaRdestruct_contents6M_v_; -text: .text%__1cIPhaseIFG2t6MpnFArena__v_; -text: .text%__1cFDictIFreset6MpknEDict__v_; -text: .text%__1cHMatcherFmatch6M_v_; -text: .text%__1cHMatcher2t6MrnJNode_List__v_; -text: .text%__1cIPhaseCFGVschedule_pinned_nodes6MrnJVectorSet__v_; -text: .text%__1cETypeKInitialize6FpnHCompile__v_; -text: .text%__1cIPhaseCFGYEstimate_Block_Frequency6M_v_; -text: .text%__1cYDebugInformationRecorder2t6MpnLOopRecorder__v_; -text: .text%__1cOCompileWrapper2t6MpnHCompile__v_; -text: .text%__1cIPhaseCFGKDominators6M_v_; -text: .text%__1cIPhaseCFG2t6MpnFArena_pnIRootNode_rnHMatcher__v_; -text: .text%__1cJPhaseLive2t6MrknIPhaseCFG_rnILRG_List_pnFArena__v_; -text: .text%__1cHCompileYinit_scratch_buffer_blob6M_v_; -text: .text%__1cOMachPrologNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHCompileTFillExceptionTables6MIpI1pnFLabel__v_; -text: .text%__1cMPhaseChaitinbApost_allocate_copy_removal6M_v_; -text: .text%__1cHCompileGOutput6M_v_; -text: .text%__1cWImplicitExceptionTableIset_size6MI_v_; -text: .text%__1cHCompileMBuildOopMaps6M_v_; -text: .text%__1cLdo_liveness6FpnNPhaseRegAlloc_pnIPhaseCFG_pnKBlock_List_ipnFArena_pnEDict__v_: buildOopMap.o; -text: .text%__1cMPhaseChaitinMfixup_spills6M_v_; -text: .text%__1cNPhaseRegAllocPalloc_node_regs6Mi_v_; -text: .text%__1cHCompileLFill_buffer6M_v_; -text: .text%__1cVCallRuntimeDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNSignatureInfoJdo_double6M_v_: bytecode.o; -text: .text%__1cENodeHrm_prec6MI_v_; -text: .text%__1cHRetNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRPrivilegedElementKinitialize6MpnMvframeStream_pnHoopDesc_p0pnGThread__v_; -text: .text%JVM_DoPrivileged; -text: .text%__1cRsubI_zero_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHRetNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIConDNodeGOpcode6kM_i_; -text: .text%__1cObranchConFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescbDbuild_interpreter_method_data6FnMmethodHandle_pnGThread__v_; -text: .text%__1cRcompL_reg_conNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_; -text: .text%__1cPconvL2I_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFciEnvKcompile_id6M_I_; -text: .text%__1cPmethodDataKlassIallocate6MnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cKoopFactoryOnew_methodData6FnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cIAndLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cVshrL_reg_imm6_L2INodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvL2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSmulI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cCosXthread_local_storage_at6Fi_pv_; -text: .text%__1cMindIndexOperNconstant_disp6kM_i_: ad_sparc.o; -text: .text%__1cMindIndexOperOindex_position6kM_i_: ad_sparc.o; -text: .text%__1cMindIndexOperFscale6kM_i_: ad_sparc.o; -text: .text%__1cOMacroAssemblerWbang_stack_with_offset6Mi_v_: assembler_sparc.o; -text: .text%__1cRAbstractAssemblerbDgenerate_stack_overflow_check6Mi_v_; -text: .text%__1cMindIndexOperNbase_position6kM_i_: ad_sparc.o; -text: .text%__1cNloadKlassNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFStateR_sub_Op_LoadKlass6MpknENode__v_; -text: .text%__1cGTarjanICOMPRESS6M_v_; -text: .text%__1cKstoreCNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cICmpDNodeGOpcode6kM_i_; -text: .text%__1cNloadConL0NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulLNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cOPhaseIdealLoopOplace_near_use6kMpnENode__2_; -text: .text%__1cVCallRuntimeDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreB0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSInterpreterRuntimeOprofile_method6FpnKJavaThread_pC_i_; -text: .text%__1cMURShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJloadPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure__v_; -text: .text%__1cLRShiftINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIMachNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLOpaque2NodeLbottom_type6kM_pknEType__: connode.o; -text: .text%__1cSconvI2D_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUPSGenerationCountersKupdate_all6M_v_: psGenerationCounters.o; -text: .text%__1cQComputeCallStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cQregP_to_stkPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; -text: .text%__1cQmodI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulINodeImul_ring6kMpknEType_3_3_; -text: .text%__1cURethrowExceptionNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIAddLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQcmovI_reg_ltNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLstoreB0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSaddI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIModINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cJcmpOpOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%__1cJimmI0OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cFStateM_sub_Op_ConL6MpknENode__v_; -text: .text%__1cOloadConL13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetClassNameUTF; -text: .text%__1cKloadUBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIXorINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cFStateM_sub_Op_AndI6MpknENode__v_; -text: .text%__1cVshrL_reg_imm6_L2INodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKcmpOpFOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cTmembar_volatileNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateL_sub_Op_OrI6MpknENode__v_; -text: .text%__1cJCmpL3NodeGOpcode6kM_i_; -text: .text%JVM_FindLoadedClass; -text: .text%__1cIMulLNodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIMulLNodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cVAdaptivePaddedAverageGsample6Mf_v_; -text: .text%__1cIConFNodeGOpcode6kM_i_; -text: .text%__1cSmembar_acquireNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cQmulD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIModLNodeGOpcode6kM_i_; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_; -text: .text%__1cQLibraryIntrinsicIgenerate6MpnIJVMState__2_; -text: .text%__1cLRShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKTypeRawPtrFxdual6kM_pknEType__; -text: .text%__1cNloadConL0NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cFTypeFEmake6Ff_pk0_; -text: .text%__1cIimmFOperJconstantF6kM_f_: ad_sparc_clone.o; -text: .text%__1cEUTF8Ounicode_length6Fpkc_i_; -text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_; -text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_; -text: .text%__1cSmembar_acquireNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cPorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIPhaseCFGOinsert_goto_at6MII_v_; -text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; -text: .text%__1cPCallRuntimeNodeGOpcode6kM_i_; -text: .text%__1cJcmpOpOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cMindIndexOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindIndexOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cMindIndexOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%JVM_FindClassFromClass; -text: .text%__1cObranchConFNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cQshrI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; -text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_; -text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; -text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_; -text: .text%JVM_NewInstanceFromConstructor; -text: .text%__1cFParseFBlockMadd_new_path6M_i_; -text: .text%__1cIimmPOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cQsubL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJloadBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLConvF2DNodeGOpcode6kM_i_; -text: .text%__1cLConvI2DNodeGOpcode6kM_i_; -text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; -text: .text%__1cMloadConFNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cKcmpOpPOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cLRShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSTailCalljmpIndNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cGIfNodeMdominated_by6MpnENode_pnMPhaseIterGVN__v_; -text: .text%__1cOcompiledVFrame2t6MpknFframe_pknLRegisterMap_pnKJavaThread_pnJScopeDesc__v_; -text: .text%__1cQshlI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; -text: .text%__1cbFunnecessary_membar_volatileNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cULinearLeastSquareFitGupdate6Mdd_v_; -text: .text%__1cOoop_RelocationIoop_addr6M_ppnHoopDesc__; -text: .text%__1cKstoreCNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreCNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJcmpOpOperKless_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cXmembar_acquire_lockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPfieldDescriptorUstring_initial_value6kMpnGThread__pnHoopDesc__; -text: .text%__1cMloadConLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIMaxINodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMloadConDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMindirectOperNconstant_disp6kM_i_: ad_sparc.o; -text: .text%__1cMindirectOperNbase_position6kM_i_: ad_sparc.o; -text: .text%__1cIAddLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cMindirectOperFscale6kM_i_: ad_sparc.o; -text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cSsubL_reg_reg_2NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%jni_NewString: jni.o; -text: .text%__1cLConvL2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__; -text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cOcompiledVFrameEcode6kM_pnHnmethod__; -text: .text%__1cIGraphKitMnext_monitor6M_i_; -text: .text%__1cLBoxLockNode2t6Mi_v_; -text: .text%__1cPconvF2D_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLOptoRuntimebBcomplete_monitor_enter_Type6F_pknITypeFunc__; -text: .text%__1cIGraphKitLshared_lock6MpnENode__pnMFastLockNode__; -text: .text%__1cNloadConP0NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRorI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKcmpOpUOperEless6kM_i_: ad_sparc_clone.o; -text: .text%__1cQaddF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; -text: .text%lwp_mutex_init: os_solaris.o; -text: .text%__1cRsubI_zero_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; -text: .text%__1cQnotemp_iRegIOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; -text: .text%__1cODataRelocationGoffset6M_i_: relocInfo.o; -text: .text%__1cYinternal_word_RelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cCosPhint_no_preempt6F_v_; -text: .text%__1cOcmovII_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIMulLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIMulINodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; -text: .text%__1cRsarL_reg_imm6NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFciEnvWget_method_from_handle6MpnI_jobject__pnIciMethod__; -text: .text%__1cSstring_compareNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cFciEnv2T6M_v_; -text: .text%__1cIGraphKitNgen_checkcast6MpnENode_2p2_2_; -text: .text%__1cMMergeMemNodeIadr_type6kM_pknHTypePtr__: memnode.o; -text: .text%__1cJcmpOpOperJnot_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cGvframeDtop6kM_p0_; -text: .text%__1cOCompiledRFrameEinit6M_v_; -text: .text%__1cXmembar_acquire_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadSNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cVCallRuntimeDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPcmpFastLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQciTypeArrayKlassEmake6FnJBasicType__p0_; -text: .text%__1cIXorINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIGraphKitRgen_subtype_check6MpnENode_2_2_; -text: .text%__1cOMacroAssemblerLsave_thread6MkpnMRegisterImpl__v_; -text: .text%__1cOcmovII_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMloadConINodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshlL_reg_imm6NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParseGdo_new6M_v_; -text: .text%__1cIimmIOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cQmodI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvI2LNodeJideal_reg6kM_I_: classes.o; -text: .text%jni_GetObjectClass: jni.o; -text: .text%__1cSxorI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOMacroAssemblerFalign6Mi_v_; -text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_; -text: .text%__1cIPSOldGenPupdate_counters6M_v_; -text: .text%__1cQshrI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cTloadL_unalignedNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJloadLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOMacroAssemblerVreset_last_Java_frame6M_v_; -text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_2_v_; -text: .text%__1cSstring_compareNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOstackSlotIOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQregF_to_stkINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cINodeHash2t6MpnFArena_I_v_; -text: .text%__1cPconvI2L_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseTransform2t6MpnFArena_nFPhaseLPhaseNumber__v_; -text: .text%__1cLPhaseValues2t6MpnFArena_I_v_; -text: .text%__1cJStubQdDueueGcommit6Mi_v_; -text: .text%__1cJStubQdDueueHrequest6Mi_pnEStub__; -text: .text%__1cOcmovII_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOMacroAssemblerKsave_frame6Mi_v_; -text: .text%__1cSmulI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreC0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOPhaseIdealLoopVclone_up_backedge_goo6MpnENode_22_2_; -text: .text%__1cITemplateKinitialize6MinITosState_1pFi_vi_v_; -text: .text%__1cITemplateIgenerate6MpnZInterpreterMacroAssembler__v_; -text: .text%JVM_FindClassFromClassLoader; -text: .text%JVM_FindClassFromBootLoader; -text: .text%signalHandler; -text: .text%__1cTtypeArrayKlassKlassIoop_size6kMpnHoopDesc__i_: typeArrayKlassKlass.o; -text: .text%JVM_handle_solaris_signal; -text: .text%__1cQjava_lang_ThreadRget_thread_status6FpnHoopDesc__n0AMThreadStatus__; -text: .text%__1cNSignatureInfoIdo_float6M_v_: bytecode.o; -text: .text%__1cFStateM_sub_Op_AndL6MpknENode__v_; -text: .text%__1cKConv2BNodeGOpcode6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerZcheck_and_handle_popframe6MpnMRegisterImpl__v_; -text: .text%JVM_IHashCode; -text: .text%__1cSconvI2D_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJStartNodeJideal_reg6kM_I_: callnode.o; -text: .text%__1cOMacroAssemblerbBcheck_and_forward_exception6MpnMRegisterImpl__v_; -text: .text%__1cQcmovI_reg_ltNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQandL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLPhaseValuesKis_IterGVN6M_pnMPhaseIterGVN__: phaseX.o; -text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKC2CompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_; -text: .text%JVM_GetClassLoader; -text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; -text: .text%__1cFStateP_sub_Op_ConvL2I6MpknENode__v_; -text: .text%__1cOPhaseIdealLoopLdo_split_if6MpnENode__v_; -text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_; -text: .text%__1cKScheduling2t6MpnFArena_rnHCompile__v_; -text: .text%__1cKSchedulingMDoScheduling6M_v_; -text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTimer_pnLCompileTask__v_; -text: .text%__1cFciEnvbOcheck_for_system_dictionary_modification6MpnIciMethod__v_; -text: .text%__1cSCardTableExtensionbAscavenge_contents_parallel6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager_I_v_; -text: .text%__1cRframe_gc_prologue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeMpd_gc_epilog6M_v_; -text: .text%__1cMelapsedTimerHseconds6kM_d_; -text: .text%__1cJStealTaskEname6M_pc_: psTasks.o; -text: .text%__1cRframe_gc_epilogue6FpnFframe_pknLRegisterMap__v_: thread.o; -text: .text%__1cFframeLgc_epilogue6M_v_; -text: .text%__1cFframeLgc_prologue6M_v_; -text: .text%__1cTOldToYoungRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cJStealTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cTOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cNGCTaskManagerMnote_release6MI_v_; -text: .text%__1cMciMethodDataStrap_recompiled_at6MpnLProfileData__i_; -text: .text%__1cJloadLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmembar_acquireNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmembar_acquireNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cVExceptionHandlerTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; -text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; -text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cIciMethodRbuild_method_data6M_v_; -text: .text%__1cHCompileIOptimize6M_v_; -text: .text%__1cHCompileLFinish_Warm6M_v_; -text: .text%__1cbAfinal_graph_reshaping_walk6FrnKNode_Stack_pnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cHCompileLInline_Warm6M_i_; -text: .text%__1cSPhaseRemoveUseless2t6MpnIPhaseGVN_pnQUnique_Node_List__v_; -text: .text%__1cJStartNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKInlineTreeWbuild_inline_tree_root6F_p0_; -text: .text%__1cHCompileRbuild_start_state6MpnJStartNode_pknITypeFunc__pnIJVMState__; -text: .text%__1cIPhaseCCPHanalyze6M_v_; -text: .text%__1cIPhaseCCPMdo_transform6M_v_; -text: .text%__1cIPhaseCCPJtransform6MpnENode__2_; -text: .text%__1cIPhaseCCP2t6MpnMPhaseIterGVN__v_; -text: .text%__1cHCompileVidentify_useful_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cHCompileUremove_useless_nodes6MrnQUnique_Node_List__v_; -text: .text%__1cQUnique_Node_ListUremove_useless_nodes6MrnJVectorSet__v_; -text: .text%__1cMPhaseIterGVN2t6MpnIPhaseGVN__v_; -text: .text%__1cMPhaseIterGVN2t6Mp0_v_; -text: .text%__1cQmulI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableKtransition6FnITosState_1_v_; -text: .text%__1cHCompileNreturn_values6MpnIJVMState__v_; -text: .text%__1cOcmovII_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOMachEpilogNodeQsafepoint_offset6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_epilog6MnITosState_i_v_; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_prolog6MnITosState_i_v_; -text: .text%__1cIModINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFStateP_sub_Op_RShiftI6MpknENode__v_; -text: .text%__1cRsarI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%lwp_cond_init: os_solaris.o; -text: .text%__1cTmembar_volatileNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNloadConL0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQComputeCallStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cXmembar_acquire_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cOloadConI13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJloadSNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIAddFNodeGOpcode6kM_i_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cFStateO_sub_Op_Binary6MpknENode__v_; -text: .text%__1cKBinaryNodeGOpcode6kM_i_; -text: .text%__1cNSignatureInfoIdo_short6M_v_: bytecode.o; -text: .text%__1cLBoxLockNodeDcmp6kMrknENode__I_; -text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_; -text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_; -text: .text%__1cFParsebLincrement_and_test_invocation_counter6Mi_v_; -text: .text%__1cSsafePoint_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMTailCallNodeGOpcode6kM_i_; -text: .text%__1cSInterpreterRuntimeTprepare_native_call6FpnKJavaThread_pnNmethodOopDesc__v_; -text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_; -text: .text%__1cSsafePoint_pollNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNobjArrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; -text: .text%__1cIMulFNodeGOpcode6kM_i_; -text: .text%__1cISubLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQmulD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNSCMemProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSThreadLocalStorageGthread6F_pnGThread__: assembler_sparc.o; -text: .text%jni_SetByteArrayRegion: jni.o; -text: .text%__1cQregI_to_stkINodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__; -text: .text%__1cSdivL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFStateM_sub_Op_XorI6MpknENode__v_; -text: .text%__1cHTypePtrEmake6FnETypeFTYPES_n0ADPTR_i_pk0_; -text: .text%__1cCosLelapsedTime6F_d_; -text: .text%__1cKScopeValueJread_from6FpnTDebugInfoReadStream__p0_; -text: .text%__1cKPerfMemoryMmark_updated6F_v_; -text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_; -text: .text%__1cLStrCompNodeKmatch_edge6kMI_I_; -text: .text%__1cQmulL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cILocation2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__; -text: .text%jni_ReleaseStringUTFChars; -text: .text%jni_GetStringUTFChars: jni.o; -text: .text%__1cSobjArrayKlassKlassXallocate_objArray_klass6MinLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cFParseLarray_store6MnJBasicType__v_; -text: .text%__1cSInterpreterRuntimeNquicken_io_cc6FpnKJavaThread__v_; -text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; -text: .text%JVM_IsInterrupted; -text: .text%__1cLLShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNSignatureInfoHdo_char6M_v_: bytecode.o; -text: .text%JVM_FindLibraryEntry; -text: .text%__1cWConstantPoolCacheEntrySset_interface_call6MnMmethodHandle_i_v_; -text: .text%__1cLklassItableUcompute_itable_index6FpnNmethodOopDesc__i_; -text: .text%__1cRshlL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQshlL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPconvF2D_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLRShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSstring_compareNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerEstop6Mpkc_v_; -text: .text%__1cObranchConFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKloadUBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddP_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLcmpD_ccNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cTloadL_unalignedNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLLShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cbIjava_lang_reflect_AccessibleObjectMset_override6FpnHoopDesc_C_v_; -text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_: jni.o; -text: .text%__1cRbranchLoopEndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKcmpOpUOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%__1cIDivINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cQmulF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQxorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWCallLeafNoFPDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLcmpD_ccNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadINodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; -text: .text%__1cIMinINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cKarrayKlassKjava_super6kM_pnMklassOopDesc__; -text: .text%__1cOClearArrayNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cRbranchLoopEndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRbranchLoopEndNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cLMachUEPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cCosTnative_java_library6F_pv_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; -text: .text%__1cSxorI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cMPhaseChaitinGSelect6M_I_; -text: .text%__1cFParseSjump_switch_ranges6MpnENode_pnLSwitchRange_4i_v_; -text: .text%__1cSbranchCon_longNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cSbranchCon_longNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSbranchCon_longNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; -text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; -text: .text%__1cLstoreP0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cFParseTprofile_switch_case6Mi_v_; -text: .text%__1cSandI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIimmLOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cFParseOmerge_new_path6Mi_v_; -text: .text%__1cQregP_to_stkPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; -text: .text%__1cSmembar_releaseNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_NewByteArray: jni.o; -text: .text%__1cQdivL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_; -text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cFParseLdo_newarray6MnJBasicType__v_; -text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; -text: .text%__1cSconvI2D_helperNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLstoreP0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMciArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cSmembar_releaseNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_; -text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__; -text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cSTailCalljmpIndNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQcmovI_reg_gtNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetMethodIxExceptionTableEntry; -text: .text%__1cIDivINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLstoreP0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQstkI_to_regFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLRethrowNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKloadUBNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cHCompileSrethrow_exceptions6MpnIJVMState__v_; -text: .text%__1cURethrowExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLRethrowNode2t6MpnENode_22222_v_; -text: .text%__1cTLoadL_unalignedNodeGOpcode6kM_i_; -text: .text%__1cSmulI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerZget_2_byte_integer_at_bcp6MipnMRegisterImpl_2n0ALsignedOrNot_n0AKsetCCOrNot__v_; -text: .text%__1cQcmovI_reg_gtNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cURethrowExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cISubLNodeDsub6kMpknEType_3_3_; -text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cJLoadINodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cQandI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cQmulI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParsePmerge_exception6Mi_v_; -text: .text%__1cLStrCompNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlass.o; -text: .text%__1cNloadConP0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_ReleaseStringCritical: jni.o; -text: .text%__1cJCMoveNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%jni_GetStringCritical: jni.o; -text: .text%__1cHciKlassSsuper_check_offset6M_I_; -text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__: ciObjArrayKlass.o; -text: .text%__1cWCallLeafNoFPDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_: icBuffer.o; -text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_: icBuffer.o; -text: .text%__1cMloadConFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMadjust_check6FpnENode_11iipnMPhaseIterGVN__v_: ifnode.o; -text: .text%__1cJScopeDescGsender6kM_p0_; -text: .text%__1cSxorI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcompiledVFrameGsender6kM_pnGvframe__; -text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_; -text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; -text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; -text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; -text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; -text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; -text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; -text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; -text: .text%__1cOPhaseIdealLoopOadd_constraint6MiipnENode_22p23_v_; -text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_; -text: .text%__1cKstoreBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSaddL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; -text: .text%__1cQComputeCallStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cLstoreI0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFframeIpatch_pc6MpnGThread_pC_v_; -text: .text%__1cRtestI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__; -text: .text%__1cFParseMdo_checkcast6M_v_; -text: .text%__1cOCompiledRFrameKtop_method6kM_nMmethodHandle__: rframe.o; -text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; -text: .text%__1cRtestI_reg_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcmovIL_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cHRegMask2t6M_v_: matcher.o; -text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; -text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_; -text: .text%__1cSmulL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPstoreI_FregNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cLcmpD_ccNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXMachCallDynamicJavaNodePret_addr_offset6M_i_; -text: .text%__1cNflagsRegFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; -text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; -text: .text%__1cIModLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMloadConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cbAPSGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; -text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; -text: .text%__1cQLRUMaxHeapPolicy2t6M_v_; -text: .text%__1cUParallelScavengeHeapQresize_all_tlabs6M_v_; -text: .text%__1cUParallelScavengeHeapPupdate_counters6M_v_; -text: .text%__1cUParallelScavengeHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cVLoaderConstraintTableHoops_do6MpnKOopClosure__v_; -text: .text%__1cTDerivedPointerTablePupdate_pointers6F_v_; -text: .text%__1cNCollectedHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cNCollectedHeapQresize_all_tlabs6M_v_; -text: .text%__1cMTypeKlassPtrFxmeet6kMpknEType__3_; -text: .text%__1cKPSYoungGenPupdate_counters6M_v_; -text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; -text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; -text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; -text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; -text: .text%__1cbAPSGCAdaptivePolicyCountersPupdate_counters6M_v_; -text: .text%__1cTDerivedPointerTableFclear6F_v_; -text: .text%__1cKDictionaryHoops_do6MpnKOopClosure__v_; -text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; -text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_; -text: .text%__1cMCounterDecayFdecay6F_v_; -text: .text%__1cCosbCmake_polling_page_unreadable6F_v_; -text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_; -text: .text%__1cLConvI2FNodeGOpcode6kM_i_; -text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; -text: .text%__1cQaddF_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUSafepointSynchronizeFbegin6F_v_; -text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cCosbAmake_polling_page_readable6F_v_; -text: .text%__1cUSafepointSynchronizeDend6F_v_; -text: .text%__1cOcmovII_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; -text: .text%__1cQshlL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUcompU_iReg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetCallerClass; -text: .text%__1cNSignatureInfoHdo_byte6M_v_: bytecode.o; -text: .text%__1cOcmovPP_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKstoreBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLstoreC0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cTloadL_unalignedNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cICmpFNodeGOpcode6kM_i_; -text: .text%__1cOstackSlotPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQregF_to_stkINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJLoadDNodeGOpcode6kM_i_; -text: .text%__1cQmulD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_IsAssignableFrom: jni.o; -text: .text%jni_GetFieldID: jni.o; -text: .text%__1cJLoadPNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cLstoreB0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cHTypeAryFxdual6kM_pknEType__; -text: .text%__1cMtlsLoadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; -text: .text%__1cCosMget_priority6FkpknGThread_rnOThreadPriority__nIOSReturn__; -text: .text%__1cGThreadMget_priority6Fkpk0_nOThreadPriority__; -text: .text%__1cMVM_OperationIevaluate6M_v_; -text: .text%__1cMVM_OperationSset_calling_thread6MpnGThread_nOThreadPriority__v_; -text: .text%__1cCosTget_native_priority6FkpknGThread_pi_nIOSReturn__; -text: .text%__1cMnegD_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQcmovI_reg_gtNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cGGCTask2t6Mn0AEKindEkind__v_; -text: .text%__1cNGCTaskManagerVrelease_all_resources6M_v_; -text: .text%__1cLGCTaskQdDueueHenqueue6Mp0_v_; -text: .text%__1cSCardTableExtensionRscavenge_contents6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager__v_; -text: .text%__1cUWaitForBarrierGCTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cNGCTaskManagerIadd_list6MpnLGCTaskQdDueue__v_; -text: .text%__1cHThreadsZcreate_thread_roots_tasks6FpnLGCTaskQdDueue__v_; -text: .text%__1cUWaitForBarrierGCTaskGcreate6F_p0_; -text: .text%__1cUWaitForBarrierGCTaskIdestruct6M_v_; -text: .text%__1cSObjectSynchronizerJfast_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; -text: .text%__1cSPSPromotionManagerNpost_scavenge6F_v_; -text: .text%__1cNBarrierGCTaskOdo_it_internal6MpnNGCTaskManager_I_v_; -text: .text%__1cNJvmtiGCMarker2T6M_v_; -text: .text%__1cUWaitForBarrierGCTaskHdestroy6Fp0_v_; -text: .text%__1cLGCTaskQdDueueGcreate6F_p0_; -text: .text%__1cSPSPromotionManagerMpre_scavenge6F_v_; -text: .text%__1cZSerialOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; -text: .text%__1cZSerialOldToYoungRootsTaskEname6M_pc_: psTasks.o; -text: .text%__1cKPSYoungGenLswap_spaces6M_v_; -text: .text%__1cSPSPromotionManagerbBvm_thread_promotion_manager6F_p0_; -text: .text%__1cUWaitForBarrierGCTaskIwait_for6M_v_; -text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; -text: .text%__1cNMonitorSupplyHreserve6F_pnHMonitor__; -text: .text%__1cNMonitorSupplyHrelease6FpnHMonitor__v_; -text: .text%__1cUWaitForBarrierGCTaskEname6M_pc_: gcTaskManager.o; -text: .text%__1cTmembar_volatileNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cVLoaderConstraintTableWfind_constrained_klass6MnMsymbolHandle_nGHandle__pnMklassOopDesc__; -text: .text%__1cTloadL_unalignedNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovII_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQComputeCallStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cMURShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_; -text: .text%__1cPClassFileParserbJparse_classfile_signature_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cKstoreBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_; -text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_; -text: .text%__1cFframeZinterpreter_frame_set_mdp6MpC_v_; -text: .text%__1cZInterpreterMacroAssemblerIpush_ptr6MpnMRegisterImpl__v_; -text: .text%__1cISubLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cIciMethodRinterpreter_entry6M_pC_; -text: .text%__1cQmulF_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPconvF2D_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRcompL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadBNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%jni_SetBooleanField: jni.o; -text: .text%__1cKimmL13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLcmpF_ccNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cLRuntimeStubbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; -text: .text%__1cRorI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsarL_reg_imm6NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQmulI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_object6M_v_; -text: .text%__1cZInterpreterMacroAssemblerGpush_i6MpnMRegisterImpl__v_; -text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cLLShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQComputeCallStackJdo_double6M_v_: generateOopMap.o; -text: .text%__1cJloadSNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRloadConP_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNObjectMonitorHRecycle6M_v_; -text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cJloadDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQstkI_to_regFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQregP_to_stkPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerFpop_i6MpnMRegisterImpl__v_; -text: .text%__1cIMaxINodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cYcompareAndSwapL_boolNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNSCMemProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; -text: .text%__1cSdivL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cbDVM_ParallelGCFailedAllocationEdoit6M_v_; -text: .text%__1cQaddL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPadd_derived_oop6FppnHoopDesc_2_v_: oopMap.o; -text: .text%__1cMregD_lowOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cHOrINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cOMethodLivenessKBasicBlockFsplit6Mi_p1_; -text: .text%__1cOcmovII_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cENodeEgetd6kM_d_; -text: .text%__1cOcmovIL_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTAbstractInterpreterSBasicType_as_index6FnJBasicType__i_; -text: .text%__1cZInterpreterMacroAssemblerGpush_f6MpnRFloatRegisterImpl__v_; -text: .text%__1cIciObject2t6MpnHciKlass__v_; -text: .text%__1cPjava_lang_ClassQprimitive_mirror6FnJBasicType__pnHoopDesc__; -text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_; -text: .text%__1cPstoreI_FregNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKCMovePNodeGOpcode6kM_i_; -text: .text%__1cLstoreC0NodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_MonitorWait; -text: .text%__1cIAddLNodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; -text: .text%__1cGciType2t6MpnHciKlass__v_; -text: .text%__1cQshlI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQdivD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFParseSjump_if_false_fork6MpnGIfNode_ii_v_; -text: .text%__1cNloadConL0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRshrL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUciInstanceKlassKlassEmake6F_p0_; -text: .text%__1cENode2t6Mp0111111_v_; -text: .text%__1cIDivLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cZInterpreterMacroAssemblerGpush_d6MpnRFloatRegisterImpl__v_; -text: .text%__1cFParseRarray_store_check6M_v_; -text: .text%__1cQsubF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIciSymbolHbyte_at6Mi_i_; -text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; -text: .text%__1cQaddD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; -text: .text%__1cQset_lwp_priority6Fiii_i_; -text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; -text: .text%jni_NewStringUTF: jni.o; -text: .text%__1cZInterpreterMacroAssemblerGpush_l6MpnMRegisterImpl__v_; -text: .text%__1cQsubI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cZInterpreterMacroAssemblerXget_constant_pool_cache6MpnMRegisterImpl__v_; -text: .text%__1cSbranchCon_longNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cKcmpOpUOperKless_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cPciInstanceKlassNloader_handle6M_pnI_jobject__; -text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; -text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; -text: .text%__1cSsubL_reg_reg_2NodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_DefineClassWithSource; -text: .text%__1cLstoreF0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_SetClassSigners; -text: .text%__1cKCompiledICMset_to_clean6M_v_; -text: .text%__1cSandL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRbranchLoopEndNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cLRShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_: markSweep.o; -text: .text%__1cFParseWcheck_interpreter_type6MpnENode_pknEType_rpnNSafePointNode__2_; -text: .text%__1cOcmovPP_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_; -text: .text%get_thread; -text: .text%__1cKstoreCNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; -text: .text%jni_CallIntMethod: jni.o; -text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; -text: .text%__1cKloadUBNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconvD2I_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMulDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSaddP_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIAddDNodeGOpcode6kM_i_; -text: .text%__1cOloadI_fregNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOloadI_fregNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cCosJyield_all6Fi_v_; -text: .text%__1cKstoreLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKstoreLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPstoreI_FregNodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_GetClassMethodsCount; -text: .text%__1cKstoreINodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%JVM_GetClassFieldsCount; -text: .text%__1cLconvI2BNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_GetClassCPEntriesCount; -text: .text%JVM_GetClassCPTypes; -text: .text%__1cQmulI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMacroAssemblerKverify_FPU6Mipkc_v_; -text: .text%__1cbCfind_class_from_class_loader6FpnHJNIEnv__nMsymbolHandle_CnGHandle_3CpnGThread__pnH_jclass__; -text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_; -text: .text%__1cIAddFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQregI_to_stkINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_; -text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; -text: .text%JVM_IsPrimitiveClass; -text: .text%__1cJimmU6OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cOPhaseIdealLoopUpeeled_dom_test_elim6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cIDivDNodeGOpcode6kM_i_; -text: .text%__1cQsubI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLStringTableJbasic_add6MinGHandle_pHiIpnGThread__pnHoopDesc__; -text: .text%__1cIModLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%jni_FindClass: jni.o; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cOMacroAssemblerOstore_argument6MpnMRegisterImpl_rnIArgument__v_: interpreterRT_sparc.o; -text: .text%__1cFParseHdo_irem6M_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorGcreate6FpnGThread__nGHandle__; -text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDesc__; -text: .text%__1cOcmovII_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSdivL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTloadL_unalignedNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__; -text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_; -text: .text%__1cFStateP_sub_Op_RShiftL6MpknENode__v_; -text: .text%__1cPICStubInterfaceEsize6kMpnEStub__i_: icBuffer.o; -text: .text%__1cPICStubInterfaceIfinalize6MpnEStub__v_: icBuffer.o; -text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cQregI_to_stkINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRorI_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; -text: .text%__1cMregD_lowOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cLConvD2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSconvI2F_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHMonitor2T6M_v_; -text: .text%__1cFTypeDFxmeet6kMpknEType__3_; -text: .text%__1cFMutex2T6M_v_; -text: .text%lwp_cond_destroy: os_solaris.o; -text: .text%lwp_mutex_destroy: os_solaris.o; -text: .text%__1cQdivI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cVcompiledICHolderKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cQregP_to_stkPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQstkI_to_regFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQregI_to_stkINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQRelocationHolderEplus6kMi_0_; -text: .text%__1cUPSMarkSweepDecoratorPadjust_pointers6M_v_; -text: .text%__1cUPSMarkSweepDecoratorKprecompact6M_v_; -text: .text%__1cQjava_lang_ThreadLthreadGroup6FpnHoopDesc__2_; -text: .text%__1cHCompileQgrow_alias_types6M_v_; -text: .text%__1cISubLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOcmovII_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; -text: .text%__1cKloadUBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTloadD_unalignedNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJLoadFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOloadConL13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRcompL_reg_conNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQaddF_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cICmpDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKsplit_once6FpnMPhaseIterGVN_pnENode_333_v_: cfgnode.o; -text: .text%__1cLLShiftLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJloadFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cJCMoveNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOPhaseIdealLoopOdo_range_check6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cSconvD2I_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitPdstore_rounding6MpnENode__2_; -text: .text%__1cJloadINodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSdivL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRloadConP_pollNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIModINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cZCallDynamicJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSconvD2I_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZCallDynamicJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUmulL_reg_imm13_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQdivL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cUdivL_reg_imm13_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cUmulL_reg_imm13_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cUVirtualCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cNObjectMonitor2t6M_v_; -text: .text%__1cIMulINodeKadd_opcode6kM_i_: classes.o; -text: .text%__1cIMulINodeKmul_opcode6kM_i_: classes.o; -text: .text%__1cQdivD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJCmpD3NodeGOpcode6kM_i_; -text: .text%__1cJloadDNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMinINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOBasicHashtableJnew_entry6MI_pnTBasicHashtableEntry__; -text: .text%__1cQmulF_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_MonitorNotify; -text: .text%__1cFBlockNset_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; -text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; -text: .text%__1cXNativeSignatureIteratorJdo_object6Mii_v_: interpreterRT_sparc.o; -text: .text%__1cKstoreFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSstring_compareNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRtestI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVshrL_reg_imm6_L2INodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYjava_lang_reflect_MethodIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cOloadConL13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cYjava_lang_reflect_MethodPset_return_type6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__; -text: .text%__1cINegDNodeGOpcode6kM_i_; -text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSsubL_reg_reg_2NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovII_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOstackSlotPOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%jni_GetMethodID: jni.o; -text: .text%__1cQshlL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIMulINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cRshlI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOloadConL13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; -text: .text%__1cOMacroAssemblerDjmp6MpnMRegisterImpl_ipkci_v_; -text: .text%__1cIDivLNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%JVM_GetClassDeclaredConstructors; -text: .text%__1cUdivL_reg_imm13_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKJavaThreadbScheck_safepoint_and_suspend_for_native_trans6Fp0_v_; -text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_; -text: .text%__1cUmulL_reg_imm13_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsubD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cUdivL_reg_imm13_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQregP_to_stkPNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconvI2F_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_; -text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_; -text: .text%__1cOcmovIF_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQcmovI_reg_ltNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadConL0NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cKo1RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cSsubL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQshrL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRsarL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIpass_int6M_v_: interpreterRT_sparc.o; -text: .text%__1cRorI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQshrL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQshrI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOimmI_32_63OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cOloadI_fregNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLConvI2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_; -text: .text%__1cQdivL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKCompiledICKcached_oop6kM_pnHoopDesc__; -text: .text%__1cISubFNodeGOpcode6kM_i_; -text: .text%JVM_IsThreadAlive; -text: .text%__1cXPartialSubtypeCheckNodeGOpcode6kM_i_; -text: .text%__1cLconvI2BNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovIF_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRsarL_reg_imm6NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRtestI_reg_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRtestI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsubI_zero_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSmulL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovPI_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKConv2BNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSstring_compareNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQregL_to_stkLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQjava_lang_SystemTout_offset_in_bytes6F_i_; -text: .text%__1cQjava_lang_SystemSin_offset_in_bytes6F_i_; -text: .text%__1cWPredictedCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cSconvI2F_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCallGeneratorRfor_uncommon_trap6FpnIciMethod_nODeoptimizationLDeoptReason_n0CLDeoptAction__p0_; -text: .text%__1cOcmovPP_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZUncommonTrapCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMulFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cGThread2t6M_v_; -text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_; -text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; -text: .text%__1cFTypeFFxmeet6kMpknEType__3_; -text: .text%__1cIOSThreadNpd_initialize6M_v_; -text: .text%__1cCosScurrent_stack_base6F_pC_; -text: .text%__1cIOSThread2t6MpFpv_i1_v_; -text: .text%__1cIMulDNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cCosRinitialize_thread6F_v_; -text: .text%__1cSdivL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cCosPpd_start_thread6FpnGThread__v_; -text: .text%__1cLConvI2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cNobjArrayKlassKinitialize6MpnGThread__v_; -text: .text%jni_NewObjectArray: jni.o; -text: .text%__1cSsubL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovIF_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_SetThreadPriority; -text: .text%__1cCosMstart_thread6FpnGThread__v_; -text: .text%__1cXjava_lang_reflect_FieldNset_modifiers6FpnHoopDesc_i_v_; -text: .text%JVM_GetStackAccessControlContext; -text: .text%__1cXjava_lang_reflect_FieldPset_annotations6FpnHoopDesc_2_v_; -text: .text%__1cFStateM_sub_Op_ModI6MpknENode__v_; -text: .text%JVM_Read; -text: .text%__1cOcmovPI_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKCompiledICOset_cached_oop6MpnHoopDesc__v_; -text: .text%__1cFStateM_sub_Op_SubL6MpknENode__v_; -text: .text%__1cKCompiledICMstub_address6kM_pC_; -text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; -text: .text%__1cQsubL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cISubDNodeGOpcode6kM_i_; -text: .text%__1cQmodI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cRsarI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: callGenerator.o; -text: .text%__1cKReflectionInew_type6FnMsymbolHandle_nLKlassHandle_pnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_type6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldGcreate6FpnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldJset_clazz6FpnHoopDesc_2_v_; -text: .text%__1cXjava_lang_reflect_FieldIset_name6FpnHoopDesc_2_v_; -text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; -text: .text%jni_GetStaticFieldID: jni.o; -text: .text%__1cNloadKlassNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLstoreF0NodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_; -text: .text%__1cNinstanceKlassKjni_id_for6Mi_pnFJNIid__; -text: .text%__1cFStateO_sub_Op_CMoveI6MpknENode__v_; -text: .text%__1cENodeEgetf6kM_f_; -text: .text%JVM_DesiredAssertionStatus; -text: .text%__1cKJavaThreadKinitialize6M_v_; -text: .text%__1cWThreadLocalAllocBufferKinitialize6M_v_; -text: .text%__1cLConvL2DNodeGOpcode6kM_i_; -text: .text%__1cQThreadStatistics2t6M_v_; -text: .text%__1cUThreadSafepointStateGcreate6FpnKJavaThread__v_; -text: .text%__1cQshrL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsubD_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cGThreadFstart6Fp0_v_; -text: .text%__1cOMacroAssemblerIround_to6MpnMRegisterImpl_i_v_: interp_masm_sparc.o; -text: .text%__1cPconvI2D_memNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%jni_GetFloatArrayRegion: jni.o; -text: .text%__1cJMarkSweepMfollow_stack6F_v_; -text: .text%__1cNimmP_pollOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cRtestI_reg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJMemRegionMintersection6kMk0_0_; -text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; -text: .text%JVM_IsArrayClass; -text: .text%jni_CallStaticVoidMethod: jni.o; -text: .text%__1cLConvF2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; -text: .text%__1cHnmethodbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cKstoreBNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFKlassNexternal_name6kM_pkc_; -text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; -text: .text%__1cKstoreLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOGenerateOopMapKinterp_all6M_v_; -text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_; -text: .text%__1cTloadD_unalignedNodeIpipeline6kM_pknIPipeline__; -text: .text%JVM_GetClassName; -text: .text%__1cOloadI_fregNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapbAmake_context_uninitialized6M_v_; -text: .text%__1cOGenerateOopMapKinit_state6M_v_; -text: .text%__1cOGenerateOopMapYsetup_method_entry_state6M_v_; -text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_; -text: .text%__1cOGenerateOopMapRinit_basic_blocks6M_v_; -text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cOcmovIF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cCosMset_priority6FpnGThread_nOThreadPriority__nIOSReturn__; -text: .text%__1cLConvD2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOcmovIL_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_: interpreterRT_sparc.o; -text: .text%__1cINodeHashEgrow6M_v_; -text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; -text: .text%__1cOcmovPP_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cIMaxINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cJloadSNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; -text: .text%__1cLConvF2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%JVM_Open; -text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; -text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; -text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; -text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_; -text: .text%__1cOGenerateOopMapNinitialize_bb6M_v_; -text: .text%__1cOGenerateOopMapbImark_bbheaders_and_count_gc_points6M_v_; -text: .text%__1cSmulL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSdivL_reg_reg_1NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerEpush6MnITosState__v_; -text: .text%JVM_StartThread; -text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; -text: .text%jni_GetStaticObjectField: jni.o; -text: .text%__1cJArrayDataKcell_count6M_i_: ciMethodData.o; -text: .text%__1cIGraphKitSprecision_rounding6MpnENode__2_; -text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; -text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__: generateOptoStub.o; -text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; -text: .text%__1cTLoadD_unalignedNodeGOpcode6kM_i_; -text: .text%__1cQshrI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_FreeMemory; -text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_; -text: .text%JVM_TotalMemory; -text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cMloadConDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQdivL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovIL_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvI2D_memNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cSandL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cHThreadsGremove6FpnKJavaThread__v_; -text: .text%__1cIOSThread2T6M_v_; -text: .text%__1cUThreadSafepointStateHdestroy6FpnKJavaThread__v_; -text: .text%__1cKJavaThreadYremove_stack_guard_pages6M_v_; -text: .text%__1cQandI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQjava_lang_ThreadNset_stillborn6FpnHoopDesc__v_; -text: .text%__1cRInterpreterOopMapNresource_copy6MpnQOopMapCacheEntry__v_; -text: .text%__1cLConvD2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIOSThreadKpd_destroy6M_v_; -text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cKJavaThread2T6M_v_; -text: .text%__1cGThread2T5B6M_v_; -text: .text%__1cCosLfree_thread6FpnIOSThread__v_; -text: .text%__1cFStateM_sub_Op_MulI6MpknENode__v_; -text: .text%__1cNThreadServiceWcurrent_thread_exiting6FpnKJavaThread__v_; -text: .text%__1cLensure_join6FpnKJavaThread__v_: thread.o; -text: .text%__1cQOopMapCacheEntryEfill6MnMmethodHandle_i_v_; -text: .text%__1cSTailCalljmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOGenerateOopMapEppop6MpnNCellTypeState__v_; -text: .text%__1cSTailCalljmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQsubF_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cbFunnecessary_membar_volatileNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cLcmpF_ccNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; -text: .text%jni_CallObjectMethod: jni.o; -text: .text%__1cQaddD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvD2F_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cRInlineCacheBufferUic_buffer_cached_oop6FpC_pnHoopDesc__; -text: .text%__1cQdivD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerbEset_method_data_pointer_offset6MpnMRegisterImpl__v_; -text: .text%__1cIMaxINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cQChunkPoolCleanerEtask6M_v_: allocation.o; -text: .text%__1cHTypeInt2t6Miii_v_; -text: .text%__1cTOopMapForCacheEntryLcompute_map6MpnGThread__v_; -text: .text%__1cOcmovIL_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cKConv2BNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSandL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadRangeNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshlI_reg_imm5NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorJpass_long6M_v_; -text: .text%__1cQregL_to_stkLNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOGenerateOopMapVresult_for_basicblock6Mi_v_; -text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_: interpreterRT_sparc.o; -text: .text%__1cQOopMapCacheEntryIset_mask6MpnNCellTypeState_2i_v_; -text: .text%__1cLOptoRuntimeYcurrent_time_millis_Type6F_pknITypeFunc__; -text: .text%__1cHTypePtrFxdual6kM_pknEType__; -text: .text%__1cOstackSlotIOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotIOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%JVM_MonitorNotifyAll; -text: .text%__1cJloadDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOstackSlotIOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cKCMoveLNodeGOpcode6kM_i_; -text: .text%__1cRshlL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cODeoptimizationVtrap_state_has_reason6Fii_i_; -text: .text%__1cTloadD_unalignedNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cJloadDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNiRegIsafeOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNloadConP0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSinstanceKlassKlassOklass_oop_size6kM_i_: instanceKlassKlass.o; -text: .text%__1cIAddDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cMnegD_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSandL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPmethodDataKlassOklass_oop_size6kM_i_: methodDataKlass.o; -text: .text%__1cKarrayKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cLmethodKlassOklass_oop_size6kM_i_: methodKlass.o; -text: .text%__1cKarrayKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cWconstantPoolCacheKlassOklass_oop_size6kM_i_: cpCacheKlass.o; -text: .text%__1cQconstMethodKlassOklass_oop_size6kM_i_: constMethodKlass.o; -text: .text%__1cXJNI_ArgumentPusherVaArgJget_float6M_v_: jni.o; -text: .text%__1cKklassKlassOklass_oop_size6kM_i_: arrayKlassKlass.o; -text: .text%__1cSobjArrayKlassKlassOklass_oop_size6kM_i_: objArrayKlassKlass.o; -text: .text%__1cLsymbolKlassOklass_oop_size6kM_i_: symbolKlass.o; -text: .text%__1cVcompiledICHolderKlassOklass_oop_size6kM_i_: compiledICHolderKlass.o; -text: .text%__1cSsubL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSmulL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSdivL_reg_reg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRconstantPoolKlassOklass_oop_size6kM_i_: constantPoolKlass.o; -text: .text%__1cTtypeArrayKlassKlassOklass_oop_size6kM_i_: typeArrayKlassKlass.o; -text: .text%__1cOloadI_fregNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRtestI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_; -text: .text%__1cJLoadSNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cLstoreF0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMinINodeIadd_ring6kMpknEType_3_3_; -text: .text%JVM_GetInheritedAccessControlContext; -text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; -text: .text%JVM_NativePath; -text: .text%__1cOMacroAssemblerNflush_windows6M_v_; -text: .text%__1cSsubD_regD_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVCallRuntimeDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_; -text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; -text: .text%__1cHCompileKinit_start6MpnJStartNode__v_; -text: .text%__1cKg3RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cVinline_cache_regPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKstorePNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQObjectStartArrayFreset6M_v_; -text: .text%__1cPconvI2D_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQaddD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvF2INodeGOpcode6kM_i_; -text: .text%__1cVCallRuntimeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; -text: .text%__1cIPSOldGenPadjust_pointers6M_v_; -text: .text%__1cOcmovPI_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIPSOldGenHcompact6M_v_; -text: .text%__1cMtlsLoadPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLcmpF_ccNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQcmovI_reg_gtNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLstoreP0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovIF_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovLL_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%jni_GetStaticMethodID: jni.o; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MipnMRegisterImpl__v_; -text: .text%__1cRtestI_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPconvF2D_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPhaseIdealLoopKdo_peeling6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cOcmovLL_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%jint_cmp: parse2.o; -text: .text%__1cXjava_lang_boxing_objectJget_value6FpnHoopDesc_pnGjvalue__nJBasicType__; -text: .text%__1cNloadConL0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; -text: .text%__1cVMoveL2D_stack_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIMulDNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cIGraphKitTdprecision_rounding6MpnENode__2_; -text: .text%__1cOcmovLL_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLConvD2FNodeGOpcode6kM_i_; -text: .text%__1cIMulFNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cWloadConI_x41f00000NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKcmpOpFOperFccode6kM_i_: ad_sparc_clone.o; -text: .text%__1cLstoreC0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQregL_to_stkLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZregDHi_regDLo_to_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovIF_immNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovDF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQaddL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cZregDHi_regDLo_to_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%JVM_Close; -text: .text%__1cSmulD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIMulDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKstoreFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSsubD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddP_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cXconvI2D_regDHi_regDNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstoreFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOMacroAssemblerNget_vm_result6MpnMRegisterImpl__v_; -text: .text%__1cQsubF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerbIcompute_extra_locals_size_in_bytes6MpnMRegisterImpl_22_v_; -text: .text%__1cLcmpF_ccNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPMultiBranchDataScompute_cell_count6FpnOBytecodeStream__i_; -text: .text%__1cPorI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSxorI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvI2D_memNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQdivI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLconvI2BNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cISubFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cWloadConI_x43300000NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cWloadConI_x41f00000NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmulI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOtailjmpIndNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; -text: .text%__1cRInlineCacheBufferSic_destination_for6FpnKCompiledIC__pC_; -text: .text%__1cbFunnecessary_membar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJSubFPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFParseNdo_instanceof6M_v_; -text: .text%__1cLconvI2BNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitOgen_instanceof6MpnENode_2_2_; -text: .text%__1cbFunnecessary_membar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRshrL_reg_imm6NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJloadBNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQdivI_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIDivLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvI2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSmulD_regD_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOstackSlotLOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cKConv2BNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQshlI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_; -text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_; -text: .text%__1cJloadDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOcmovPP_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQsubF_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_NewObjectV: jni.o; -text: .text%__1cOcmovLI_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cXPartialSubtypeCheckNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%jni_EnsureLocalCapacity; -text: .text%__1cLstoreI0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIAddFNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cLConvD2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKoopFactoryUnew_compiledICHolder6FnMmethodHandle_nLKlassHandle_pnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cSCompiledStaticCallMset_to_clean6M_v_; -text: .text%__1cIDivDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cVcompiledICHolderKlassIallocate6MpnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddD_regD_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPfieldDescriptorUdouble_initial_value6kM_d_; -text: .text%__1cQsubD_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovPP_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cNSafePointNodeQpeek_monitor_obj6kM_pnENode__; -text: .text%__1cJloadFNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cSaddI_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cFParsePdo_monitor_exit6M_v_; -text: .text%__1cObranchConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cObranchConFNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cSconvF2I_helperNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSmembar_releaseNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cObranchConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLcmpD_ccNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadLNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cISubDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_; -text: .text%__1cNSafePointNodeQpeek_monitor_box6kM_pnENode__; -text: .text%__1cFTypeFFxdual6kM_pknEType__; -text: .text%__1cICmpFNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cKVtableStubRpd_code_alignment6F_i_; -text: .text%__1cKarrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cKloadUBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTloadL_unalignedNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cINegDNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cLConvI2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cOcmovLL_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRorI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTloadL_unalignedNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKloadUBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cXconvI2D_regDHi_regDNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerbFtest_invocation_counter_for_mdp6MpnMRegisterImpl_22rnFLabel__v_; -text: .text%__1cXconvI2D_regDHi_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSvframeArrayElementHfill_in6MpnOcompiledVFrame__v_; -text: .text%__1cFTypeDFxdual6kM_pknEType__; -text: .text%__1cSaddD_regD_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerbAincrement_backedge_counter6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerbBtest_backedge_count_for_osr6MpnMRegisterImpl_22_v_; -text: .text%__1cSmulL_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cOcmovPI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKEntryPoint2t6M_v_; -text: .text%__1cTloadD_unalignedNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZregDHi_regDLo_to_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcompiledVFrameImonitors6kM_pnNGrowableArray4CpnLMonitorInfo____; -text: .text%__1cOcompiledVFrameLexpressions6kM_pnUStackValueCollection__; -text: .text%__1cHciKlassOsuper_of_depth6MI_p0_; -text: .text%__1cOcompiledVFrameGlocals6kM_pnUStackValueCollection__; -text: .text%__1cOcompiledVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cJimmP0OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cOcompiledVFrameHraw_bci6kM_i_; -text: .text%__1cQshrI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWloadConI_x43300000NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_; -text: .text%__1cMTailJumpNodeKmatch_edge6kMI_I_; -text: .text%__1cWloadConI_x41f00000NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cODeoptimizationbJupdate_method_data_from_interpreter6FnQmethodDataHandle_ii_v_; -text: .text%__1cIimmDOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cOstackSlotLOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotLOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cTloadD_unalignedNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cIModLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOtailjmpIndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSmulD_regD_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cINegFNodeGOpcode6kM_i_; -text: .text%__1cSsubD_regD_regDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJScopeDescImonitors6M_pnNGrowableArray4CpnMMonitorValue____; -text: .text%__1cJScopeDescLexpressions6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cJScopeDescGlocals6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%JVM_GetComponentType; -text: .text%__1cQdivI_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%Unsafe_DefineClass1; -text: .text%__1cOcmovII_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLvframeArrayPunpack_to_stack6MrnFframe_i_v_; -text: .text%__1cKReflectionUarray_component_type6FpnHoopDesc_pnGThread__2_; -text: .text%__1cLConvF2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSvframeArrayElementDbci6kM_i_; -text: .text%__1cVMoveF2I_stack_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%JVM_GetCPFieldModifiers; -text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; -text: .text%__1cNnmethodLocker2t6MpC_v_; -text: .text%__1cNSharedRuntimebJcontinuation_for_implicit_exception6FpnKJavaThread_pCn0AVImplicitExceptionKind__3_; -text: .text%__1cODeoptimizationNuncommon_trap6FpnKJavaThread_i_pn0ALUnrollBlock__; -text: .text%__1cODeoptimizationTuncommon_trap_inner6FpnKJavaThread_i_v_; -text: .text%__1cODeoptimizationNunpack_frames6FpnKJavaThread_i_nJBasicType__; -text: .text%__1cODeoptimizationYfetch_unroll_info_helper6FpnKJavaThread__pn0ALUnrollBlock__; -text: .text%__1cZInterpreterMacroAssemblerXindex_check_without_pop6MpnMRegisterImpl_2i22_v_; -text: .text%__1cRSignatureIteratorKparse_type6M_i_; -text: .text%__1cPconvD2F_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHciKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cODeoptimizationRlast_frame_adjust6Fii_i_; -text: .text%__1cQsubD_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%JVM_DefineClass; -text: .text%JVM_InvokeMethod; -text: .text%__1cOcmovPP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_NewDirectByteBuffer; -text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__: jni.o; -text: .text%jni_AllocObject: jni.o; -text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_; -text: .text%__1cTmembar_volatileNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMnegD_regNodeIpipeline6kM_pknIPipeline__; -text: .text%Unsafe_AllocateInstance; -text: .text%__1cQComputeCallStackHdo_byte6M_v_: generateOopMap.o; -text: .text%__1cQstkI_to_regINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; -text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; -text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; -text: .text%__1cJStubQdDueueKremove_all6M_v_; -text: .text%__1cPconvI2D_memNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPorL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerLindex_check6MpnMRegisterImpl_2i22_v_; -text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cSaddL_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovPI_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cKstfSSFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cMloadConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKReflectionNinvoke_method6FpnHoopDesc_nGHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; -text: .text%__1cTmembar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvI2L_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovII_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; -text: .text%__1cJCmpF3NodeGOpcode6kM_i_; -text: .text%__1cLMoveL2DNodeGOpcode6kM_i_; -text: .text%__1cFKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__; -text: .text%__1cOcmovII_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIAddFNodeJideal_reg6kM_I_: classes.o; -text: .text%JVM_NewArray; -text: .text%__1cHOrLNodeGOpcode6kM_i_; -text: .text%__1cLStrCompNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLOopMapCache2t6M_v_; -text: .text%__1cNTemplateTableHconvert6F_v_; -text: .text%__1cOcmovDF_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerFpop_l6MpnMRegisterImpl__v_; -text: .text%__1cOcmovLI_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSMachBreakpointNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeQcreate_exception6FpnKJavaThread_pc3_v_; -text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cKPSYoungGenKprecompact6M_v_; -text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%__1cMnegF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsLgc_prologue6F_v_; -text: .text%__1cHThreadsLgc_epilogue6F_v_; -text: .text%__1cPconvI2L_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; -text: .text%__1cUParallelScavengeHeapHcollect6MnHGCCauseFCause__v_; -text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; -text: .text%__1cVLoaderConstraintTableYpurge_loader_constraints6MpnRBoolObjectClosure__v_; -text: .text%__1cVLoaderConstraintTableYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cLconvP2BNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_; -text: .text%__1cIciMethodVget_osr_flow_analysis6Mi_pnKciTypeFlow__; -text: .text%__1cLMoveF2INodeGOpcode6kM_i_; -text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; -text: .text%__1cMStartOSRNodeKosr_domain6F_pknJTypeTuple__; -text: .text%__1cVVM_ParallelGCSystemGCEdoit6M_v_; -text: .text%__1cJArgumentsQPropertyList_add6FppnOSystemProperty_2_v_; -text: .text%__1cOMacroAssemblerPbreakpoint_trap6M_v_; -text: .text%__1cJBasicLockHmove_to6MpnHoopDesc_p0_v_; -text: .text%__1cJMarkSweepNrestore_marks6F_v_; -text: .text%__1cJMarkSweepMadjust_marks6F_v_; -text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_; -text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; -text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_; -text: .text%__1cMStubCodeMark2T6M_v_; -text: .text%__1cNCallGeneratorHfor_osr6FpnIciMethod_i_p0_; -text: .text%__1cLClassLoaderSget_system_package6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cJPSPermGenKprecompact6M_v_; -text: .text%JVM_GC; -text: .text%__1cIPSOldGenKprecompact6M_v_; -text: .text%__1cUPSMarkSweepDecoratorbIset_destination_decorator_perm_gen6F_v_; -text: .text%__1cUPSMarkSweepDecoratorbHset_destination_decorator_tenured6F_v_; -text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cQmulL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cUPSAdaptiveSizePolicyWmajor_collection_begin6M_v_; -text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; -text: .text%__1cKPSYoungGenHcompact6M_v_; -text: .text%JVM_GetSystemPackage; -text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; -text: .text%__1cKPSYoungGenPadjust_pointers6M_v_; -text: .text%__1cJCodeCacheLgc_prologue6F_v_; -text: .text%__1cJCodeCacheLgc_epilogue6F_v_; -text: .text%__1cIXorINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQregL_to_stkLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cKcmpOpFOperKless_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cOcmovPI_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSmulL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovIF_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKCMoveDNodeGOpcode6kM_i_; -text: .text%__1cJLoadDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cIMulFNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cNStubGeneratorLstub_prolog6MpnMStubCodeDesc__v_: stubGenerator_sparc.o; -text: .text%__1cQaddL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%jni_GetStringRegion: jni.o; -text: .text%JVM_RawMonitorCreate; -text: .text%__1cJloadLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIMulFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cOstackSlotPOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotPOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotPOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; -text: .text%JVM_Sleep; -text: .text%__1cLConvL2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cQstkI_to_regFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceRefKlass.o; -text: .text%__1cRorI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%Unsafe_CompareAndSwapInt; -text: .text%JVM_Lseek; -text: .text%__1cNloadRangeNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPconvD2F_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRComputeEntryStackJdo_object6Mii_v_: generateOopMap.o; -text: .text%__1cPconvF2D_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQmulF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMnegF_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cSconvF2I_helperNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cQmulD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovLI_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPMultiBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cQregP_to_stkPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerQtest_mdp_data_at6MipnMRegisterImpl_rnFLabel_2_v_; -text: .text%__1cQstkI_to_regINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovLI_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cGciType2t6MnJBasicType__v_; -text: .text%__1cJLoadBNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cQaddF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cETypeEmake6Fn0AFTYPES__pk0_; -text: .text%__1cSconvF2I_helperNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRsarL_reg_imm6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSstring_compareNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_GetEnv; -text: .text%__1cJloadDNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQstkI_to_regINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_: interpreterRT_sparc.o; -text: .text%Unsafe_GetNativeByte; -text: .text%JVM_NanoTime; -text: .text%__1cOMacroAssemblerOrestore_thread6MkpnMRegisterImpl__v_; -text: .text%__1cQandL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIimmFOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cKcmpOpFOperGnegate6M_v_: ad_sparc_clone.o; -text: .text%__1cICodeBlobFflush6M_v_; -text: .text%__1cFParseMdo_anewarray6M_v_; -text: .text%__1cSdivL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_CallVoidMethod: jni.o; -text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; -text: .text%__1cObranchConFNodeGnegate6M_v_: ad_sparc_misc.o; -text: .text%__1cFParseOdo_tableswitch6M_v_; -text: .text%__1cOcmovIF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLConvI2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSaddL_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLstoreC0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%Unsafe_GetNativeFloat; -text: .text%__1cOstackSlotFOperEtype6kM_pknEType__: ad_sparc.o; -text: .text%__1cHnmethodFflush6M_v_; -text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; -text: .text%__1cKo2RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cQregI_to_stkINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cWloadConI_x43300000NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFParseQdo_monitor_enter6M_v_; -text: .text%__1cPorL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cLstoreC0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_FindPrimitiveClass; -text: .text%__1cVMoveL2D_stack_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; -text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cRshrI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cSsubL_reg_reg_2NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUmulL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIDivDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cOstackSlotFOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cUdivL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRSignatureIteratorHiterate6M_v_; -text: .text%__1cOcmovLL_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cJname2type6Fpkc_nJBasicType__; -text: .text%__1cSmulL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOloadConL13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKcmpOpFOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%__1cIDivDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOMacroAssemblerKget_thread6M_v_; -text: .text%__1cOcmovDF_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovIF_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cSconvI2F_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_; -text: .text%__1cOtypeArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlass.o; -text: .text%__1cPconvD2F_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cIciMethodMnative_entry6M_pC_; -text: .text%__1cVMoveF2I_stack_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPPerfDataManagerWcreate_string_variable6FnJCounterNS_pkci3pnGThread__pnSPerfStringVariable__; -text: .text%__1cPorL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cPconvD2F_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIciSymbolHas_utf86M_pkc_; -text: .text%__1cQandI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cMnegD_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cFStateO_sub_Op_CMoveP6MpknENode__v_; -text: .text%__1cQmulD_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerZtotal_frame_size_in_bytes6Mi_i_; -text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; -text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; -text: .text%Unsafe_StaticFieldOffset; -text: .text%__1cQmulI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQaddI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cOcmovLI_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%JVM_GetClassContext; -text: .text%Unsafe_StaticFieldBaseFromField; -text: .text%Unsafe_EnsureClassInitialized; -text: .text%__1cOcmovIF_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pCi_v_; -text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_; -text: .text%Unsafe_GetObjectVolatile; -text: .text%__1cbEJvmtiDynamicCodeEventCollector2t6M_v_; -text: .text%__1cKstoreFNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cVMoveL2D_stack_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cJLoadLNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cNSharedRuntimeVhandle_ic_miss_helper6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cOloadConL13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_; -text: .text%__1cLstoreF0NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPconvI2D_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cETypeFxdual6kM_pk0_; -text: .text%__1cJOopMapSetQsingular_oop_map6M_pnGOopMap__; -text: .text%__1cKimmU13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cZInterpreterMacroAssemblerTnotify_method_entry6M_v_; -text: .text%__1cZInterpreterMacroAssemblerbCincrement_invocation_counter6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerQaccess_local_int6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerWempty_expression_stack6M_v_; -text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_; -text: .text%__1cOcmovIL_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPPerfDataManagerKname_space6Fpkci_pc_; -text: .text%__1cOtailjmpIndNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cNMemoryManagerIadd_pool6MpnKMemoryPool__v_; -text: .text%__1cCosEstat6FpkcpnEstat__i_; -text: .text%__1cQregF_to_stkINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRComputeEntryStackIdo_short6M_v_: generateOopMap.o; -text: .text%__1cRComputeEntryStackGdo_int6M_v_: generateOopMap.o; -text: .text%__1cMMonitorChunk2t6Mi_v_; -text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cOPhaseIdealLoopJclone_iff6MpnHPhiNode_pnNIdealLoopTree__pnIBoolNode__; -text: .text%__1cQComputeCallStackIdo_float6M_v_: generateOopMap.o; -text: .text%__1cMMonitorValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cPciObjArrayKlassJmake_impl6FpnHciKlass__p0_; -text: .text%__1cPorL_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOptoRuntimeMrethrow_Type6F_pknITypeFunc__; -text: .text%jni_SetStaticObjectField: jni.o; -text: .text%jni_RegisterNatives: jni.o; -text: .text%__1cFframebLprevious_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; -text: .text%__1cQshlL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetClassDeclaredFields; -text: .text%__1cCosMuser_handler6F_pv_; -text: .text%JVM_IsSameClassPackage; -text: .text%__1cKMemoryPoolLadd_manager6MpnNMemoryManager__v_; -text: .text%__1cKJavaThreadRadd_monitor_chunk6MpnMMonitorChunk__v_; -text: .text%__1cKJavaThreadUremove_monitor_chunk6MpnMMonitorChunk__v_; -text: .text%__1cVMoveL2D_stack_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableGiconst6Fi_v_; -text: .text%__1cLConvF2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%JVM_LoadLibrary; -text: .text%JVM_IsSupportedJNIVersion; -text: .text%Unsafe_ObjectFieldOffset; -text: .text%__1cZInterpreterMacroAssemblerYtest_method_data_pointer6MrnFLabel__v_; -text: .text%__1cNTemplateTableHif_0cmp6Fn0AJCondition__v_; -text: .text%__1cZInterpreterMacroAssemblerSget_cpool_and_tags6MpnMRegisterImpl_2_v_; -text: .text%__1cIAddDNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; -text: .text%__1cNTemplateTableHif_icmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableH_return6FnITosState__v_; -text: .text%__1cHOrLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKimmP13OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLConvD2FNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSObjectSynchronizerJjni_enter6FnGHandle_pnGThread__v_; -text: .text%__1cHnmethodbJcontinuation_for_implicit_exception6MpC_1_; -text: .text%__1cNSharedRuntimeEdrem6Fdd_d_; -text: .text%__1cPstoreI_FregNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cTloadD_unalignedNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOloadI_fregNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLconvP2BNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cCosZvm_allocation_granularity6F_i_; -text: .text%__1cMTailJumpNodeGOpcode6kM_i_; -text: .text%__1cTloadD_unalignedNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHciKlass2t6MnLKlassHandle_pnIciSymbol__v_; -text: .text%__1cJMemRegion2t6M_v_: cardTableModRefBS.o; -text: .text%__1cSObjectSynchronizerIjni_exit6FpnHoopDesc_pnGThread__v_; -text: .text%__1cNRegisterSaverWrestore_live_registers6FpnOMacroAssembler__v_; -text: .text%__1cLTypeInstPtrOxmeet_unloaded6kMpk0_2_; -text: .text%__1cRtestI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_pnUPerfLongSampleHelper__v_; -text: .text%__1cWImplicitExceptionTable2t6MpknHnmethod__v_; -text: .text%__1cWImplicitExceptionTableCat6kMI_I_; -text: .text%__1cFParseVcatch_call_exceptions6MrnYciExceptionHandlerStream__v_; -text: .text%jni_GetJavaVM; -text: .text%__1cOcmovDF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%jni_MonitorEnter: jni.o; -text: .text%jni_MonitorExit: jni.o; -text: .text%__1cLConvL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cULinearLeastSquareFit2t6MI_v_; -text: .text%__1cQdivL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; -text: .text%__1cSCardTableExtensionVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cOloadI_fregNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cIAddDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cJloadFNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cKConv2BNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvI2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSconvD2I_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%jni_Throw: jni.o; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC_v_; -text: .text%__1cLMoveL2DNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cIDivINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cISubDNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cPstoreI_FregNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cINegFNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOLibraryCallKitXgenerate_current_thread6MrpnENode__2_; -text: .text%__1cOMacroAssemblerEfneg6MnRFloatRegisterImplFWidth_p13_v_; -text: .text%__1cXNativeSignatureIteratorJdo_double6M_v_: interpreterRT_sparc.o; -text: .text%__1cRtestI_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLcmpF_ccNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; -text: .text%jni_SetObjectField: jni.o; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__; -text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_; -text: .text%bootstrap_flush_windows; -text: .text%__1cSdivL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerbCverify_oop_or_return_address6MpnMRegisterImpl_2_v_; -text: .text%__1cFStateO_sub_Op_Conv2B6MpknENode__v_; -text: .text%__1cNRegisterSaverTsave_live_registers6FpnOMacroAssembler_ipi_pnGOopMap__; -text: .text%__1cSmulL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_int_field06FnJBasicType__pC_; -text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_; -text: .text%__1cSsubL_reg_reg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_double6M_v_; -text: .text%__1cQmulD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%Unsafe_AllocateMemory; -text: .text%__1cSandL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_GetLastErrorString; -text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_; -text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; -text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_; -text: .text%__1cPstoreI_FregNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableEdop26Fn0AJOperation__v_; -text: .text%__1cSandI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMnegD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNciMethodKlassEmake6F_p0_; -text: .text%__1cNTemplateTableGlstore6Fi_v_; -text: .text%__1cLConvF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; -text: .text%__1cRcompL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLConvD2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSconvD2I_helperNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsubI_zero_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cKstfSSFNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cOClassPathEntry2t6M_v_; -text: .text%__1cZInterpreterMacroAssemblerQaccess_local_ptr6MpnMRegisterImpl_2_v_; -text: .text%__1cNTemplateTableGistore6Fi_v_; -text: .text%__1cIRetTableUfind_jsrs_for_target6Mi_pnNRetTableEntry__; -text: .text%__1cPconvL2I_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cUcompI_iReg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRsarI_reg_imm5NodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableGastore6Fi_v_; -text: .text%__1cIRetTableHadd_jsr6Mii_v_; -text: .text%__1cMnegF_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cQregF_to_stkINodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cRComputeEntryStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cNTemplateTableGdstore6Fi_v_; -text: .text%__1cNTemplateTableGfstore6Fi_v_; -text: .text%jni_CallStaticObjectMethod: jni.o; -text: .text%__1cOcmovLL_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLconvI2BNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cODeoptimizationLUnrollBlockOsize_of_frames6kM_i_; -text: .text%__1cCosGsignal6Fipv_1_; -text: .text%__1cQaddD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cISubDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cISubFNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cISubFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableFlload6Fi_v_; -text: .text%__1cNTemplateTableFiload6Fi_v_; -text: .text%__1cMOopMapStream2t6MpnGOopMap_i_v_; -text: .text%__1cLconvP2BNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVMoveF2I_stack_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC22_v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC2_v_; -text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; -text: .text%__1cOGenerateOopMapTret_jump_targets_do6MpnOBytecodeStream_pFp0ipi_vi4_v_; -text: .text%Unsafe_SetMemory; -text: .text%__1cKstfSSFNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_x6MnJAssemblerJCondition_pCpnMRegisterImpl__v_; -text: .text%__1cVMoveF2I_stack_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcmovLI_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNloadConL0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovPI_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovDF_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; -text: .text%__1cQsubF_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFParseRjump_if_true_fork6MpnGIfNode_ii_v_; -text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_icc6MnJAssemblerJCondition_pCpnMRegisterImpl__v_; -text: .text%__1cNTemplateTableFfload6Fi_v_; -text: .text%__1cFParsePdo_lookupswitch6M_v_; -text: .text%__1cNTemplateTableFdload6Fi_v_; -text: .text%__1cKstfSSFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cINegDNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableFaload6Fi_v_; -text: .text%__1cRMachSpillCopyNodeHsize_of6kM_I_: ad_sparc.o; -text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; -text: .text%__1cOGenerateOopMapRdo_multianewarray6Mii_v_; -text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%jni_CallStaticObjectMethodV: jni.o; -text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_; -text: .text%__1cJMemRegionFminus6kMk0_0_; -text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; -text: .text%__1cSInterpreterRuntimebKthrow_ArrayIndexOutOfBoundsException6FpnKJavaThread_pci_v_; -text: .text%__1cNMemoryManager2t6M_v_; -text: .text%__1cFStatebB_sub_Op_PartialSubtypeCheck6MpknENode__v_; -text: .text%__1cFStateM_sub_Op_DivI6MpknENode__v_; -text: .text%__1cUPSGenerationCounters2t6MpkciipnOPSVirtualSpace__v_; -text: .text%__1cCosFyield6F_v_; -text: .text%__1cQsubD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXNativeSignatureIteratorIdo_float6M_v_: interpreterRT_sparc.o; -text: .text%__1cIDivDNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFParseRdo_multianewarray6M_v_; -text: .text%__1cLOptoRuntimeTmultianewarray_Type6Fi_pknITypeFunc__; -text: .text%__1cZInterpreterMacroAssemblerRget_constant_pool6MpnMRegisterImpl__v_; -text: .text%__1cXPartialSubtypeCheckNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cOcmovIF_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLMoveF2INodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cSconvI2D_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLstoreF0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerLlock_object6MpnMRegisterImpl_2_v_; -text: .text%__1cPstoreI_FregNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovLL_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_i2_v_; -text: .text%__1cNSafepointBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cMciArrayKlassRbase_element_type6M_pnGciType__; -text: .text%JVM_GetInterfaceVersion; -text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_2222rnFLabel__v_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableGfconst6Fi_v_; -text: .text%__1cGThreadbFinitialize_thread_local_storage6M_v_; -text: .text%__1cOcmovPI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGThreadbArecord_stack_base_and_size6M_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_; -text: .text%JVM_RegisterSignal; -text: .text%JVM_FindSignal; -text: .text%jio_vsnprintf; -text: .text%__1cQshrL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_222_v_; -text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; -text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o; -text: .text%__1cNIdealLoopTreeUmerge_many_backedges6MpnOPhaseIdealLoop__v_; -text: .text%__1cODeoptimizationLUnrollBlock2T6M_v_; -text: .text%jni_GetDoubleArrayRegion: jni.o; -text: .text%__1cMLinkResolverbBlookup_method_in_interfaces6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cLconvP2BNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cKfix_parent6FpnNIdealLoopTree_1_v_: loopnode.o; -text: .text%JVM_Available; -text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_; -text: .text%__1cQshlL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cZInterpreterMacroAssemblerQtop_most_monitor6M_nHAddress__; -text: .text%__1cLstoreF0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; -text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_; -text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; -text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cOstackSlotFOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotFOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cOstackSlotFOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cNTemplateTableGlconst6Fi_v_; -text: .text%__1cLstoreC0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMPeriodicTaskGenroll6M_v_; -text: .text%__1cNTemplateTableHcastore6F_v_; -text: .text%Unsafe_CompareAndSwapObject; -text: .text%__1cLNamedThread2t6M_v_; -text: .text%__1cLNamedThreadIset_name6MpkcE_v_; -text: .text%__1cJloadDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQdivD_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWloadConI_x43300000NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableKinitialize6F_v_; -text: .text%__1cKcmpOpFOperJnot_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cPconvD2F_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableKdouble_cmp6Fi_v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fi_v_; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC22_v_; -text: .text%__1cNTemplateTableGdconst6Fi_v_; -text: .text%__1cSconvF2I_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovIF_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovIF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJimmL0OperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cSaddD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSsubD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQregF_to_stkINodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNTemplateTableTinvokevfinal_helper6FpnMRegisterImpl_2_v_; -text: .text%__1cSmulD_regD_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNTemplateTableUgenerate_vtable_call6FpnMRegisterImpl_22_v_; -text: .text%__1cNTemplateTableKif_nullcmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableHif_acmp6Fn0AJCondition__v_; -text: .text%__1cNVM_DeoptimizeEdoit6M_v_; -text: .text%__1cMnegF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQsubL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMVirtualSpace2t6M_v_; -text: .text%__1cWloadConI_x41f00000NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQdivI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cZregDHi_regDLo_to_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXconvI2D_regDHi_regDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKloadUBNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNTemplateTableEidiv6F_v_; -text: .text%__1cQstkI_to_regINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLMoveL2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLConvD2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLConvF2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_float_field06FnJBasicType__pC_; -text: .text%__1cLMoveF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLOptoRuntimeIl2f_Type6F_pknITypeFunc__; -text: .text%__1cOMacroAssemblerUcalc_mem_param_words6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MnITosState_pnMRegisterImpl_3_v_; -text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; -text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; -text: .text%__1cZInterpreterMacroAssemblerSupdate_mdp_for_ret6MnITosState_pnMRegisterImpl__v_; -text: .text%__1cMLinkResolverbEvtable_index_of_miranda_method6FnLKlassHandle_nMsymbolHandle_2pnGThread__i_; -text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; -text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_26MpCpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_1_x6MnJAssemblerJCondition_rnFLabel__v_; -text: .text%__1cZInterpreterMacroAssemblerZget_4_byte_integer_at_bcp6MipnMRegisterImpl_2n0AKsetCCOrNot__v_; -text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; -text: .text%__1cFStateO_sub_Op_CMoveL6MpknENode__v_; -text: .text%__1cZInterpreterMacroAssemblerRaccess_local_long6MpnMRegisterImpl_2_v_; -text: .text%__1cIPSOldGenPinitialize_work6Mpkci_v_; -text: .text%__1cCosIjvm_path6Fpci_v_; -text: .text%__1cCosNsigexitnum_pd6F_i_; -text: .text%__1cCosScurrent_process_id6F_i_; -text: .text%__1cINegFNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_; -text: .text%__1cLConvL2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvF2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLConvD2FNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKJNIHandlesQmake_weak_global6FnGHandle__pnI_jobject__; -text: .text%__1cZInterpreterMacroAssemblerSaccess_local_float6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerTaccess_local_double6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerPstore_local_int6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerQstore_local_long6MpnMRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerRstore_local_float6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerSstore_local_double6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cCosWactive_processor_count6F_i_; -text: .text%__1cTAbstractInterpreterKinitialize6F_v_; -text: .text%jni_NewWeakGlobalRef: jni.o; -text: .text%__1cRComputeEntryStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cTMaskFillerForNativeLpass_object6M_v_: oopMapCache.o; -text: .text%__1cOGenerateOopMapTadd_to_ref_init_set6Mi_v_; -text: .text%__1cUGcThreadCountClosureJdo_thread6MpnGThread__v_; -text: .text%__1cNinstanceKlassSremove_osr_nmethod6MpnHnmethod__v_; -text: .text%__1cOPSVirtualSpace2t6M_v_; -text: .text%jni_IsInstanceOf: jni.o; -text: .text%__1cMGCTaskThreadDrun6M_v_; -text: .text%__1cJCodeCachebGmake_marked_nmethods_not_entrant6F_v_; -text: .text%__1cTMaskFillerForNativeJpass_long6M_v_: oopMapCache.o; -text: .text%jni_CallStaticVoidMethodV: jni.o; -text: .text%jni_CallStaticBooleanMethod: jni.o; -text: .text%__1cMGCTaskThread2t6MpnNGCTaskManager_II_v_; -text: .text%__1cOtailjmpIndNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMGCTaskThreadFstart6M_v_; -text: .text%__1cQObjectStartArrayKinitialize6MnJMemRegion__v_; -text: .text%__1cQObjectStartArraySset_covered_region6MnJMemRegion__v_; -text: .text%__1cZInterpreterMacroAssemblerbAdispatch_next_noverify_oop6MnITosState_i_v_; -text: .text%__1cRCollectorCounters2t6Mpkci_v_; -text: .text%__1cFParseDl2f6M_v_; -text: .text%__1cPGCMemoryManagerXinitialize_gc_stat_info6M_v_; -text: .text%__1cJArgumentsVset_parallel_gc_flags6F_v_; -text: .text%__1cPGCMemoryManager2t6M_v_; -text: .text%__1cRComputeEntryStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cSInterpreterRuntimeWcreate_klass_exception6FpnKJavaThread_pcpnHoopDesc__v_; -text: .text%__1cQcreate_os_thread6FpnGThread_I_pnIOSThread__: os_solaris.o; -text: .text%__1cYjava_lang_reflect_MethodPcompute_offsets6F_v_; -text: .text%__1cSInterpreterRuntimeSupdate_mdp_for_ret6FpnKJavaThread_i_v_; -text: .text%__1cPorL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQjava_lang_ThreadPcompute_offsets6F_v_; -text: .text%__1cXNativeSignatureIteratorHdo_byte6M_v_: interpreterRT_sparc.o; -text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; -text: .text%__1cCosbDallocate_thread_local_storage6F_i_; -text: .text%__1cUInterpreterGeneratorVrestore_native_result6M_v_; -text: .text%__1cVjava_lang_ThreadGroupPcompute_offsets6F_v_; -text: .text%__1cLconvP2BNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVshrL_reg_imm6_L2INodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cCosGstrdup6Fpkc_pc_; -text: .text%__1cCosLinit_random6Fl_v_; -text: .text%__1cUInterpreterGeneratorXgenerate_accessor_entry6M_pC_; -text: .text%__1cCosXterminate_signal_thread6F_v_; -text: .text%__1cCosLsignal_init6F_v_; -text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; -text: .text%__1cOtailjmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUInterpreterGeneratorUgenerate_empty_entry6M_pC_; -text: .text%__1cUInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cCosbDinit_system_properties_values6F_v_; -text: .text%__1cCosPphysical_memory6F_X_; -text: .text%__1cHvm_exit6Fi_v_; -text: .text%__1cLbefore_exit6FpnKJavaThread__v_; -text: .text%__1cbCAbstractInterpreterGeneratorbFgenerate_slow_signature_handler6M_pC_; -text: .text%__1cSThreadLocalStorageHpd_init6F_v_; -text: .text%__1cVMoveF2I_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVMoveL2D_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cWinvocationCounter_init6F_v_; -text: .text%__1cKTypeOopPtrFxdual6kM_pknEType__; -text: .text%__1cFParseMjump_if_join6MpnENode_2_2_; -text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cSinstanceKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlassKlass.o; -text: .text%__1cETypeRInitialize_shared6FpnHCompile__v_; -text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_; -text: .text%__1cVInterfaceSupport_init6F_v_; -text: .text%__1cPGenerationSizerQinitialize_flags6M_v_: parallelScavengeHeap.o; -text: .text%__1cZInterpreterMacroAssemblerPdispatch_normal6MnITosState__v_; -text: .text%__1cDhpiZinitialize_socket_library6F_i_; -text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_; -text: .text%__1cWInlineCacheBuffer_init6F_v_; -text: .text%__1cWThreadLocalAllocBufferWstartup_initialization6F_v_; -text: .text%__1cPGlobalTLABStats2t6M_v_; -text: .text%__1cLicache_init6F_v_; -text: .text%__1cSThreadLocalStorageEinit6F_v_; -text: .text%__1cNThreadServiceEinit6F_v_; -text: .text%__1cTICacheStubGeneratorVgenerate_icache_flush6MppFpCii_i_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: indexSet.o; -text: .text%__1cPvm_init_globals6F_v_; -text: .text%__1cMinit_globals6F_i_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_sparc_expand.o; -text: .text%__1cMexit_globals6F_v_; -text: .text%__1cSset_init_completed6F_v_; -text: .text%__1cNinstanceKlassZrelease_C_heap_structures6M_v_; -text: .text%__1cUParallelScavengeHeapItop_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; -text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: interp_masm_sparc.o; -text: .text%__1cQinterpreter_init6F_v_; -text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_; -text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; -text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; -text: .text%__1cCosLsignal_wait6F_i_; -text: .text%__1cCosNsignal_notify6Fi_v_; -text: .text%__1cCosOsignal_init_pd6F_v_; -text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; -text: .text%__1cCosSget_temp_directory6F_pkc_; -text: .text%__1cCosHSolarisOlibthread_init6F_v_; -text: .text%__1cUParallelScavengeHeapIend_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; -text: .text%__1cUParallelScavengeHeapEheap6F_p0_; -text: .text%__1cUParallelScavengeHeapNgc_threads_do6kMpnNThreadClosure__v_; -text: .text%__1cUParallelScavengeHeapYpermanent_object_iterate6MpnNObjectClosure__v_; -text: .text%__1cKcmpOpFOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cUParallelScavengeHeapPpost_initialize6M_v_; -text: .text%__1cUParallelScavengeHeapKinitialize6M_i_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; -text: .text%__1cZInterpreterMacroAssemblerbFset_method_data_pointer_for_bcp6M_v_; -text: .text%__SLIP.DELETER__C: ostream.o; -text: .text%__1cMostream_exit6F_v_; -text: .text%__1cQostream_init_log6F_v_; -text: .text%__1cMostream_init6F_v_; -text: .text%__1cCosXnon_memory_address_word6F_pc_; -text: .text%__1cCosGinit_26F_i_; -text: .text%__1cCosEinit6F_v_; -text: .text%__1cCosHSolarisUsynchronization_init6F_v_; -text: .text%__1cVjni_GetLongField_addr6F_pC_; -text: .text%__1cNIdealLoopTreeQsplit_outer_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cRLowMemoryDetectorKinitialize6F_v_; -text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_; -text: .text%__1cTloadL_unalignedNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: machnode.o; -text: .text%__1cPmanagement_init6F_v_; -text: .text%__1cOvmStructs_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; -text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_; -text: .text%__1cKManagementKinitialize6FpnGThread__v_; -text: .text%__1cIVMThreadGcreate6F_v_; -text: .text%__1cIVMThreadDrun6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; -text: .text%__1cLJvmtiExportNpost_vm_start6F_v_; -text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_; -text: .text%__1cLJvmtiExportNpost_vm_death6F_v_; -text: .text%__1cLJvmtiExportbMtransition_pending_onload_raw_monitors6F_v_; -text: .text%__1cUJvmtiPendingMonitorsXtransition_raw_monitors6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiImpl.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o; -text: .text%__1cKklassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cKklassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: klassKlass.o; -text: .text%__1cVLoaderConstraintTable2t6Mi_v_; -text: .text%__1cQregL_to_stkLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHRetDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cTAbstract_VM_VersionKvm_release6F_pkc_; -text: .text%__1cTAbstract_VM_VersionXinternal_vm_info_string6F_pkc_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; -text: .text%__1cPVM_Version_init6F_v_; -text: .text%__1cKVM_VersionKinitialize6F_v_; -text: .text%__1cHRetDataJfixup_ret6MinQmethodDataHandle__pC_; -text: .text%__1cLmethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cLmethodKlassOset_alloc_size6MI_v_: methodKlass.o; -text: .text%__1cQvtableStubs_init6F_v_; -text: .text%__1cKi0RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKg1RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodKlass.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: methodLiveness.o; -text: .text%__1cMMutableSpaceOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cKmutex_init6F_v_; -text: .text%__1cQaccessFlags_init6F_v_; -text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC222_v_; -text: .text%__1cTAbstract_VM_VersionJvm_vendor6F_pkc_; -text: .text%__1cOmarksweep_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: matcher.o; -text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_; -text: .text%__1cNMemoryManagerbDget_psScavenge_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cNMemoryManagerbEget_psMarkSweep_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cHVM_ExitEdoit6M_v_; -text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_; -text: .text%__1cNMemoryServiceZadd_code_heap_memory_pool6FpnICodeHeap__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o; -text: .text%__1cPmethodDataKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cPmethodDataKlassOset_alloc_size6MI_v_: methodDataKlass.o; -text: .text%__1cPmethodDataKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodDataKlass.o; -text: .text%__1cTAbstract_VM_VersionHvm_name6F_pkc_; -text: .text%__1cLstoreF0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%JNI_CreateJavaVM; -text: .text%__1cQJNI_FastGetFieldbFgenerate_fast_get_boolean_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_byte_field6F_pC_; -text: .text%__1cTtypeArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_char_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_short_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbBgenerate_fast_get_int_field6F_pC_; -text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_long_field6F_pC_; -text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlassKlass.o; -text: .text%__1cIUniverseHgenesis6FpnGThread__v_; -text: .text%__1cVquicken_jni_functions6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cYjava_lang_reflect_MethodNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cbDjava_lang_reflect_ConstructorPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldPcompute_offsets6F_v_; -text: .text%__1cXjava_lang_reflect_FieldNset_signature6FpnHoopDesc_2_v_; -text: .text%__1cQdivD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLJavaClassesbAcompute_hard_coded_offsets6F_v_; -text: .text%__1cQjavaClasses_init6F_v_; -text: .text%jni_ToReflectedMethod: jni.o; -text: .text%__1cQsubD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cYjni_GetBooleanField_addr6F_pC_; -text: .text%__1cVjni_GetByteField_addr6F_pC_; -text: .text%__1cQaddF_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cVjni_GetCharField_addr6F_pC_; -text: .text%__1cWjni_GetShortField_addr6F_pC_; -text: .text%__1cUjni_GetIntField_addr6F_pC_; -text: .text%__1cOtypeArrayKlassKinitialize6MpnGThread__v_; -text: .text%__1cWjni_GetFloatField_addr6F_pC_; -text: .text%__1cRsarL_reg_imm6NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cXjni_GetDoubleField_addr6F_pC_; -text: .text%__1cQshlI_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cIUniverseNfixup_mirrors6FpnGThread__v_; -text: .text%JVM_InitializeSocketLibrary; -text: .text%JVM_RegisterUnsafeMethods; -text: .text%__1cOcmovLI_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cOcmovLI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOcmovDF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%JVM_Socket; -text: .text%__1cbEinitialize_converter_functions6F_v_; -text: .text%JVM_SupportsCX8; -text: .text%__1cOcmovIF_immNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cUJvmtiEventControllerIvm_start6F_v_; -text: .text%__1cUJvmtiEventControllerHvm_init6F_v_; -text: .text%__1cUJvmtiEventControllerIvm_death6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEventController.o; -text: .text%__1cKstfSSFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLJvmtiExportRenter_start_phase6F_v_; -text: .text%__1cLJvmtiExportQenter_live_phase6F_v_; -text: .text%__1cSmulL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_float_field6F_pC_; -text: .text%__1cSmulI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_double_field6F_pC_; -text: .text%__1cNuniverse_init6F_i_; -text: .text%__1cOuniverse2_init6F_v_; -text: .text%__1cQjni_handles_init6F_v_; -text: .text%__1cSobjArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlassKlass.o; -text: .text%Unsafe_SetNativeLong; -text: .text%JVM_InitProperties; -text: .text%JVM_Halt; -text: .text%Unsafe_FreeMemory; -text: .text%Unsafe_PageSize; -text: .text%JVM_MaxMemory; -text: .text%__1cSobjArrayKlassKlassbEallocate_system_objArray_klass6MpnGThread__pnMklassOopDesc__; -text: .text%__1cSobjArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%JVM_GetClassDeclaredMethods; -text: .text%__1cPPerfDataManagerHsampled6F_pnMPerfDataList__; -text: .text%__1cQSystemDictionaryKclasses_do6FpFpnMklassOopDesc__v_v_; -text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_; -text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_; -text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; -text: .text%__1cPClassFileParserbFjava_lang_ref_Reference_fix_pre6MpnPtypeArrayHandle_nSconstantPoolHandle_pnUFieldAllocationCount_pnGThread__v_; -text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_; -text: .text%__1cLClassLoaderQload_zip_library6F_v_; -text: .text%__1cLClassLoaderZcreate_package_info_table6F_v_; -text: .text%__1cLClassLoaderKinitialize6F_v_; -text: .text%__1cLClassLoaderVcompute_Object_vtable6F_i_; -text: .text%__1cMPeriodicTask2T5B6M_v_; -text: .text%__1cQclassLoader_init6F_v_; -text: .text%__1cMPeriodicTaskJdisenroll6M_v_; -text: .text%__1cOBasicHashtable2t6Mii_v_: classLoader.o; -text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: regmask.o; -text: .text%__1cUciObjArrayKlassKlassEmake6F_p0_; -text: .text%__1cVRegistersForDebuggingRrestore_registers6FpnOMacroAssembler_pnMRegisterImpl__v_: assembler_sparc.o; -text: .text%__1cVRegistersForDebuggingOsave_registers6FpnOMacroAssembler__v_: assembler_sparc.o; -text: .text%__1cJBytecodesKinitialize6F_v_; -text: .text%__1cQSystemDictionarybAcompute_java_system_loader6FpnGThread__v_; -text: .text%__1cObytecodes_init6F_v_; -text: .text%__1cLOptoRuntimeIgenerate6FpnFciEnv__v_; -text: .text%__1cJBytecodesNpd_initialize6F_v_; -text: .text%__1cHCompileRpd_compiler2_init6F_v_; -text: .text%__1cKC2CompilerKinitialize6M_v_; -text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; -text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; -text: .text%__1cMciKlassKlassEmake6F_p0_; -text: .text%__1cIciMethodMvtable_index6M_i_; -text: .text%__1cPciObjArrayKlass2t6MpnIciSymbol_pnHciKlass_i_v_; -text: .text%__1cJLoadFNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cNTemplateTableGsipush6F_v_; -text: .text%__1cQUncommonTrapBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNTemplateTableGldc2_w6F_v_; -text: .text%__1cNExceptionBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; -text: .text%__1cNTemplateTableFiload6F_v_; -text: .text%__1cNTemplateTableLfast_iload26F_v_; -text: .text%__1cNTemplateTableKfast_iload6F_v_; -text: .text%__1cNTemplateTableFlload6F_v_; -text: .text%__1cNTemplateTableFfload6F_v_; -text: .text%__1cNTemplateTableFdload6F_v_; -text: .text%__1cNTemplateTableFaload6F_v_; -text: .text%__1cNTemplateTableKwide_iload6F_v_; -text: .text%__1cNTemplateTableKwide_lload6F_v_; -text: .text%__1cNTemplateTableKwide_fload6F_v_; -text: .text%__1cNTemplateTableKwide_dload6F_v_; -text: .text%__1cNTemplateTableKwide_aload6F_v_; -text: .text%__1cNTemplateTableGiaload6F_v_; -text: .text%__1cNTemplateTableGlaload6F_v_; -text: .text%__1cNTemplateTableGfaload6F_v_; -text: .text%__1cNTemplateTableGdaload6F_v_; -text: .text%__1cNTemplateTableGbipush6F_v_; -text: .text%__1cLMoveF2INodeJideal_reg6kM_I_: classes.o; -text: .text%__1cLMoveL2DNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC222_v_; -text: .text%__1cHOrLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cHOrLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNTemplateTableF_goto6F_v_; -text: .text%__1cNTemplateTableGgoto_w6F_v_; -text: .text%__1cNTemplateTableFjsr_w6F_v_; -text: .text%__1cNTemplateTableDjsr6F_v_; -text: .text%__1cXreferenceProcessor_init6F_v_; -text: .text%__1cICodeBlobMset_oop_maps6MpnJOopMapSet__v_; -text: .text%__1cStemplateTable_init6F_v_; -text: .text%__1cNTemplateTableNpd_initialize6F_v_; -text: .text%__1cNTemplateTableDnop6F_v_; -text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_; -text: .text%__1cNTemplateTableLaconst_null6F_v_; -text: .text%__1cKPSYoungGenbCreset_survivors_after_shrink6M_v_; -text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; -text: .text%__1cLOptoRuntimeUmultianewarray2_Type6F_pknITypeFunc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_sparc_pipeline.o; -text: .text%__1cOchunkpool_init6F_v_; -text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_; -text: .text%__1cJArgumentsWinit_system_properties6F_v_; -text: .text%__1cMSysClassPathPexpand_endorsed6M_v_; -text: .text%__1cMSysClassPathQadd_jars_to_path6Fpcpkc_1_; -text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_; -text: .text%__1cJArgumentsUset_ergonomics_flags6F_v_; -text: .text%__1cJArgumentsSparse_vm_init_args6FpknOJavaVMInitArgs__i_; -text: .text%__1cLStatSamplerGengage6F_v_; -text: .text%__1cNStubGeneratorbNgenerate_flush_callers_register_windows6M_pC_: stubGenerator_sparc.o; -text: .text%__1cSstubRoutines_init16F_v_; -text: .text%__1cSstubRoutines_init26F_v_; -text: .text%__1cNStubGeneratorbIgenerate_handler_for_unsafe_access6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorbAgenerate_forward_exception6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorSgenerate_call_stub6MrpC_1_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorYgenerate_catch_exception6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorSgenerate_test_stop6M_pC_: stubGenerator_sparc.o; -text: .text%__1cNStubGeneratorbEgenerate_partial_subtype_check6M_pC_: stubGenerator_sparc.o; -text: .text%__1cISubFNodeDsub6kMpknEType_3_3_; -text: .text%__1cRStubCodeGeneratorLstub_prolog6MpnMStubCodeDesc__v_; -text: .text%__1cLStatSamplerbMcreate_system_property_instrumentation6FpnGThread__v_; -text: .text%__1cLStatSamplerHdestroy6F_v_; -text: .text%__1cLStatSamplerJdisengage6F_v_; -text: .text%__1cNRegisterSaverYrestore_result_registers6FpnOMacroAssembler__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o; -text: .text%__1cORuntimeServiceYrecord_application_start6F_v_; -text: .text%__1cOMacroAssemblerNset_vm_result6MpnMRegisterImpl__v_; -text: .text%__1cORuntimeServiceEinit6F_v_; -text: .text%__1cOMacroAssemblerVverify_oop_subroutine6M_v_; -text: .text%__1cOMacroAssemblerPstop_subroutine6M_v_; -text: .text%__1cOMacroAssemblerElcmp6MpnMRegisterImpl_2222_v_; -text: .text%__1cOMacroAssemblerElneg6MpnMRegisterImpl_2_v_; -text: .text%__1cOMacroAssemblerElshl6MpnMRegisterImpl_22222_v_; -text: .text%__1cOMacroAssemblerElshr6MpnMRegisterImpl_22222_v_; -text: .text%__1cOMacroAssemblerFlushr6MpnMRegisterImpl_22222_v_; -text: .text%__1cLOptoRuntimeUmultianewarray5_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray4_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray3_Type6F_pknITypeFunc__; -text: .text%__1cLsymbolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: symbolKlass.o; -text: .text%__1cJArgumentsFparse6FpknOJavaVMInitArgs__i_; -text: .text%__1cJArgumentsWPropertyList_get_value6FpnOSystemProperty_pkc_4_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: arguments.o; -text: .text%__1cParrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cKklassKlassOset_alloc_size6MI_v_: arrayKlassKlass.o; -text: .text%__1cLsymbolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cParrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: arrayKlassKlass.o; -text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpnMRegisterImpl_pCi_v_; -text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; -text: .text%__1cLsymbolKlassOset_alloc_size6MI_v_: symbolKlass.o; -text: .text%__1cNTemplateTableGaaload6F_v_; -text: .text%__1cQconstMethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cQconstMethodKlassOset_alloc_size6MI_v_: constMethodKlass.o; -text: .text%__1cQconstMethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constMethodKlass.o; -text: .text%__1cGThreadMset_priority6Fp0nOThreadPriority__v_; -text: .text%__1cRconstantPoolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cRconstantPoolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: constantPoolKlass.o; -text: .text%__1cQPlaceholderTable2t6Mi_v_; -text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o; -text: .text%__1cVcreate_initial_thread6FnGHandle_pnKJavaThread_pnGThread__pnHoopDesc__: thread.o; -text: .text%__1cbAcall_initializeSystemClass6FpnGThread__v_: thread.o; -text: .text%__1cWreset_vm_info_property6FpnGThread__v_: thread.o; -text: .text%__1cbAPSGCAdaptivePolicyCounters2t6MpkciipnUPSAdaptiveSizePolicy__v_; -text: .text%__1cNTemplateTableRfast_invokevfinal6Fi_v_; -text: .text%__1cVcompiledICHolderKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: compiledICHolderKlass.o; -text: .text%__1cNTemplateTableNinvokespecial6Fi_v_; -text: .text%__1cNTemplateTableMinvokestatic6Fi_v_; -text: .text%__1cNTemplateTablebDinvokeinterface_object_method6FpnMRegisterImpl_222_v_; -text: .text%__1cNTemplateTablePinvokeinterface6Fi_v_; -text: .text%__1cNTemplateTableE_new6F_v_; -text: .text%__1cNTemplateTableInewarray6F_v_; -text: .text%__1cNTemplateTableJanewarray6F_v_; -text: .text%__1cNTemplateTableLarraylength6F_v_; -text: .text%__1cNTemplateTableJcheckcast6F_v_; -text: .text%__1cNTemplateTableKinstanceof6F_v_; -text: .text%__1cNTemplateTableL_breakpoint6F_v_; -text: .text%__1cNTemplateTableGathrow6F_v_; -text: .text%__1cNTemplateTableMmonitorenter6F_v_; -text: .text%__1cNTemplateTableLmonitorexit6F_v_; -text: .text%__1cNTemplateTableEwide6F_v_; -text: .text%__1cNTemplateTableOmultianewarray6F_v_; -text: .text%__1cTcompilerOracle_init6F_v_; -text: .text%__1cWconstantPoolCacheKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnPPerfLongCounter__; -text: .text%__1cZCompiledArgumentOopFinderRhandle_oop_offset6M_v_: frame.o; -text: .text%__1cQGCPolicyCounters2t6Mpkcii_v_; -text: .text%__1cHGCStats2t6M_v_; -text: .text%__1cNGCTaskManager2t6MI_v_; -text: .text%__1cNGCTaskManagerKinitialize6M_v_; -text: .text%__1cNGCTaskManagerKthreads_do6MpnNThreadClosure__v_; -text: .text%__1cPPerfDataManagerHdestroy6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cWResolveOopMapConflictsUdo_potential_rewrite6MpnGThread__nMmethodHandle__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; -text: .text%__1cOThreadCriticalKinitialize6F_v_; -text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; -text: .text%__1cICodeHeap2t6M_v_; -text: .text%__1cDhpiKinitialize6F_i_; -text: .text%__1cMPerfDataList2T6M_v_; -text: .text%__1cNWatcherThreadDrun6M_v_; -text: .text%__1cNWatcherThreadEstop6F_v_; -text: .text%__1cWconstantPoolCacheKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: cpCacheKlass.o; -text: .text%__1cFStateO_sub_Op_CMoveD6MpknENode__v_; -text: .text%__1cFStateP_sub_Op_MoveF2I6MpknENode__v_; -text: .text%__1cKDictionary2t6Mi_v_; -text: .text%__1cKDictionaryKclasses_do6MpFpnMklassOopDesc__v_v_; -text: .text%__1cNeventlog_init6F_v_; -text: .text%__1cScheck_ThreadShadow6F_v_; -text: .text%__1cOtailjmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; -text: .text%__1cFframeVinterpreter_frame_mdp6kM_pC_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: phase.o; -text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; -text: .text%__1cbBcleanup_sharedmem_resources6Fpkc_v_: perfMemory_solaris.o; -text: .text%__1cPperfMemory_exit6F_v_; -text: .text%__1cPperfMemory_init6F_v_; -text: .text%__1cNTemplateTableNinvokevirtual6Fi_v_; -text: .text%__1cNTemplateTableHfastore6F_v_; -text: .text%__1cNTemplateTableHdastore6F_v_; -text: .text%__1cNTemplateTableHaastore6F_v_; -text: .text%__1cNTemplateTableHbastore6F_v_; -text: .text%__1cNTemplateTableHsastore6F_v_; -text: .text%__1cOcodeCache_init6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: codeCache.o; -text: .text%__1cNTemplateTableDpop6F_v_; -text: .text%__1cNTemplateTableEpop26F_v_; -text: .text%__1cNTemplateTableDdup6F_v_; -text: .text%__1cNTemplateTableGdup_x16F_v_; -text: .text%__1cNTemplateTableGdup_x26F_v_; -text: .text%__1cNTemplateTableEdup26F_v_; -text: .text%__1cNTemplateTableHdup2_x16F_v_; -text: .text%__1cNTemplateTableHdup2_x26F_v_; -text: .text%__1cNTemplateTableEswap6F_v_; -text: .text%__1cNCollectedHeap2t6M_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o; -text: .text%__1cNTemplateTableEirem6F_v_; -text: .text%__1cNTemplateTableElmul6F_v_; -text: .text%__1cNTemplateTableHlastore6F_v_; -text: .text%__1cNTemplateTableGbaload6F_v_; -text: .text%__1cNTemplateTableGcaload6F_v_; -text: .text%__1cNTemplateTableMfast_icaload6F_v_; -text: .text%__1cNTemplateTableGsaload6F_v_; -text: .text%__1cKPSYoungGenPinitialize_work6M_v_; -text: .text%__1cNTemplateTableHaload_06F_v_; -text: .text%__1cNTemplateTableGistore6F_v_; -text: .text%__1cNTemplateTableGlstore6F_v_; -text: .text%__1cNTemplateTableGfstore6F_v_; -text: .text%__1cNTemplateTableGdstore6F_v_; -text: .text%__1cNTemplateTableGastore6F_v_; -text: .text%__1cNTemplateTableLwide_istore6F_v_; -text: .text%__1cNTemplateTableLwide_lstore6F_v_; -text: .text%__1cNTemplateTableLwide_fstore6F_v_; -text: .text%__1cNTemplateTableLwide_dstore6F_v_; -text: .text%__1cNTemplateTableLwide_astore6F_v_; -text: .text%__1cNTemplateTableHiastore6F_v_; -text: .text%__1cNTemplateTableEldiv6F_v_; -text: .text%__1cNTemplateTableLtableswitch6F_v_; -text: .text%__1cNTemplateTableMlookupswitch6F_v_; -text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; -text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; -text: .text%__1cNCompileBrokerQset_should_block6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; -text: .text%__1cNTemplateTableIgetfield6Fi_v_; -text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cNTemplateTableIputfield6Fi_v_; -text: .text%__1cNTemplateTableJputstatic6Fi_v_; -text: .text%__1cVcompiledICHolderKlassOset_alloc_size6MI_v_: compiledICHolderKlass.o; -text: .text%__1cLPSMarkSweepKinitialize6F_v_; -text: .text%__1cNTemplateTableIwide_ret6F_v_; -text: .text%__1cNTemplateTableElrem6F_v_; -text: .text%__1cNTemplateTableElshl6F_v_; -text: .text%__1cNTemplateTableElshr6F_v_; -text: .text%__1cNTemplateTableFlushr6F_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyQinitialize_flags6M_v_; -text: .text%__1cbCTwoGenerationCollectorPolicyUinitialize_size_info6M_v_; -text: .text%__1cNTemplateTableEineg6F_v_; -text: .text%__1cNTemplateTableElneg6F_v_; -text: .text%__1cNTemplateTableEfneg6F_v_; -text: .text%__1cNTemplateTableEdneg6F_v_; -text: .text%__1cNTemplateTableEiinc6F_v_; -text: .text%__1cNTemplateTableJwide_iinc6F_v_; -text: .text%__1cKPSScavengeKinitialize6F_v_; -text: .text%__1cNTemplateTableElcmp6F_v_; -text: .text%__1cWcompilationPolicy_init6F_v_; -text: .text%__1cRCompilationPolicyUcompleted_vm_startup6F_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o; -text: .text%__1cSPSPromotionManagerKinitialize6F_v_; -text: .text%__1cNTemplateTableDret6F_v_; diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/sparc.make --- a/make/solaris/makefiles/sparc.make Fri Aug 31 16:39:35 2012 -0700 +++ b/make/solaris/makefiles/sparc.make Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ # -# Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -68,7 +68,7 @@ #PICFLAG/nativeInst_sparc.o = $(PICFLAG/BETTER) #PICFLAG/methodLiveness.o = $(PICFLAG/BETTER) #PICFLAG/synchronizer.o = $(PICFLAG/BETTER) -#PICFLAG/methodOop.o = $(PICFLAG/BETTER) +#PICFLAG/method.o = $(PICFLAG/BETTER) #PICFLAG/space.o = $(PICFLAG/BETTER) #PICFLAG/interpreterRT_sparc.o = $(PICFLAG/BETTER) #PICFLAG/generation.o = $(PICFLAG/BETTER) diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/sparcWorks.make --- a/make/solaris/makefiles/sparcWorks.make Fri Aug 31 16:39:35 2012 -0700 +++ b/make/solaris/makefiles/sparcWorks.make Sat Sep 01 13:25:18 2012 -0400 @@ -39,8 +39,6 @@ STRIP = /usr/ccs/bin/strip endif -REORDER_FLAG = -xF - # Check for the versions of C++ and C compilers ($CXX and $CC) used. # Get the last thing on the line that looks like x.x+ (x is a digit). diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/makefiles/vm.make --- a/make/solaris/makefiles/vm.make Fri Aug 31 16:39:35 2012 -0700 +++ b/make/solaris/makefiles/vm.make Sat Sep 01 13:25:18 2012 -0400 @@ -251,7 +251,7 @@ } \ }' > $@ -mapfile_reorder : mapfile $(MAPFILE_DTRACE_OPT) $(REORDERFILE) +mapfile_extended : mapfile $(MAPFILE_DTRACE_OPT) rm -f $@ cat $^ > $@ @@ -264,7 +264,7 @@ LIBS_VM = $(LIBS) else LIBJVM.o = $(JVM_OBJ_FILES) - LIBJVM_MAPFILE$(LDNOMAP) = mapfile_reorder + LIBJVM_MAPFILE$(LDNOMAP) = mapfile_extended LFLAGS_VM$(LDNOMAP) += $(MAPFLAG:FILENAME=$(LIBJVM_MAPFILE)) LFLAGS_VM += $(SONAMEFLAG:SONAME=$(LIBJVM)) ifndef USE_GCC diff -r 36d1d483d5d6 -r da91efe96a93 make/solaris/reorder.sh --- a/make/solaris/reorder.sh Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,355 +0,0 @@ -#!/bin/sh -x -# -# Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -# - -# Generate the reorder data for hotspot. -# -# Usage: -# -# sh reorder.sh -# -# is a *built* SDK workspace which contains the -# reordering tools for the SDK. This script relies on lib_mcount.so -# from this workspace. -# -# is a working SDK which you can use to run the profiled -# JVMs in to collect data. You must be able to write to this SDK. -# -# is a directory containing JBB test jar files and properties -# which will be used to run the JBB test to provide reordering data -# for the server VM. -# -# Profiled builds of the VM are needed (before running this script), -# build with PROFILE_PRODUCT=1: -# -# gnumake profiled1 profiled PROFILE_PRODUCT=1 -# -#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -test_setup() { - - # $1 = "client" or "server" - # $2 = name of reorder file to be generated. - - echo "" - echo "TEST_SETUP $1 $2" - echo "" - libreldir=${ALT_OUTPUTDIR:-../../../make/solaris-$arch5}/reorder - libabsdir=${ALT_OUTPUTDIR:-$sdk_ws/make/solaris-$arch5}/reorder - ( cd $sdk_ws/make/tools/reorder ; gnumake $libreldir/$arch5/libmcount.so ) - if [ "${arch3}" = "i386" ] ; then - # On Solaris/x86 we need to remove the symbol _mcount from the command - ( cd $sdk_ws/make/tools/reorder ; \ - gnumake $libreldir/$arch5/remove_mcount ) - echo Remove _mcount from java command. - $libabsdir/$arch5/remove_mcount $jre/bin/java - fi - ( cd $sdk_ws/make/tools/reorder ; gnumake tool_classes ) - ( cd $sdk_ws/make/tools/reorder ; gnumake test_classes ) - - tests="Null Exit Hello Sleep IntToString \ - LoadToolkit LoadFrame LoadJFrame JHello" - swingset=$sdk/demo/jfc/SwingSet2/SwingSet2.jar - java=$jre/bin/java - if [ "X$LP64" != "X" ] ; then - testjava="$jre/bin/${arch3}/java" - else - testjava="$jre/bin/java" - fi - mcount=$libabsdir/$arch5/libmcount.so - - if [ ! -x $mcount ] ; then - echo $mcount is missing! - exit 1 - fi - - if [ "X$1" = "client" ] ; then - if [ "X$NO_SHARING" = "X" ] ; then - echo "Dumping shared file." - LD_PRELOAD=$mcount \ - JDK_ALTERNATE_VM=jvm_profiled \ - $testjava -Xshare:dump -Xint -XX:PermSize=16m -version 2> /dev/null - shared_client="-Xshare:on" - echo "Shared file dump completed." - else - shared_client="-Xshare:off" - echo "NO_SHARING defined, not using sharing." - fi - else - echo "Server: no sharing" - shared_server="-Xshare:off" - fi - - testpath=$libabsdir/classes - - reorder_file=$2 - - rm -f ${reorder_file} - rm -f ${reorder_file}_tmp2 - rm -f ${reorder_file}_tmp1 - - echo "data = R0x2000;" > ${reorder_file} - echo "text = LOAD ?RXO;" >> ${reorder_file} - echo "" >> ${reorder_file} - echo "" >> ${reorder_file} -} - -#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -test_client() { - - # Run each of a set of tests, extract the methods called, - # append the new functions to the reorder list. - # $1 = "client" or "server" - # $2 = name of reorder file to be generated. - - echo "TEST_CLIENT $1 $2." - test_setup $1 $2 - echo "TEST_CLIENT $1 $2." - - for f in $tests ; do - echo Running test $f. - rm -f ${reorder_file}_tmp1 - echo "# Test $f" >> ${reorder_file} - - echo "Using LD_PRELOAD=$mcount" - echo $testjava ${shared_client} -classpath $testpath $f - - LD_PRELOAD=$mcount \ - JDK_ALTERNATE_VM=jvm_profiled \ - $testjava ${shared_client} -classpath $testpath $f 2> ${reorder_file}_tmp1 - - echo "Done." - sed -n -e '/^text:/p' ${reorder_file}_tmp1 > ${reorder_file}_tmp2 - sed -e '/^text:/d' ${reorder_file}_tmp1 - LD_LIBRARY_PATH=$lib/server \ - $java -classpath $testpath Combine ${reorder_file} \ - ${reorder_file}_tmp2 \ - > ${reorder_file}_tmp3 - mv ${reorder_file}_tmp3 ${reorder_file} - rm -f ${reorder_file}_tmp2 - rm -f ${reorder_file}_tmp1 - done - - # Run SwingSet, extract the methods called, - # append the new functions to the reorder list. - - echo "# SwingSet" >> ${reorder_file} - - echo "" - echo "" - echo "When SwingSet has finished drawing, " \ - "you may terminate it (with your mouse)." - echo "Otherwise, it should be automatically terminated in 3 minutes." - echo "" - echo "" - - echo "Using LD_PRELOAD=$mcount, JDK_ALTERNATE=jvm_profiled." - echo $testjava ${shared_client} -classpath $testpath MaxTime $swingset 60 - LD_PRELOAD=$mcount \ - JDK_ALTERNATE_VM=jvm_profiled \ - $testjava ${shared_client} -classpath $testpath MaxTime \ - $swingset 60 2> ${reorder_file}_tmp1 - - sed -n -e '/^text:/p' ${reorder_file}_tmp1 > ${reorder_file}_tmp2 - - LD_LIBRARY_PATH=$lib/server \ - $java -server -classpath $testpath Combine ${reorder_file} ${reorder_file}_tmp2 \ - > ${reorder_file}_tmp3 - echo mv ${reorder_file}_tmp3 ${reorder_file} - mv ${reorder_file}_tmp3 ${reorder_file} - echo rm -f ${reorder_file}_tmp2 - rm -f ${reorder_file}_tmp2 - echo rm -f ${reorder_file}_tmp1 - rm -f ${reorder_file}_tmp1 -} - -#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -test_server() { - - # Run the JBB script, collecting data on the way. - # $1 = "client" or "server" - # $2 = name of reorder file to be generated. - - echo "TEST_SERVER $1 $2." - test_setup $1 $2 - echo "TEST_SERVER $1 $2." - - echo Running JBB. - - rm -f ${reorder_file}_tmp1 - rm -f ${reorder_file}_tmp2 - heap=200m - - CLASSPATH=jbb.jar:jbb_no_precompile.jar:check.jar:reporter.jar - - ( cd $jbb_dir; LD_PRELOAD=$mcount MCOUNT_ORDER_BY_COUNT=1 \ - JDK_ALTERNATE_VM=jvm_profiled \ - $testjava ${shared_server} -classpath $CLASSPATH -Xms${heap} -Xmx${heap} \ - spec.jbb.JBBmain -propfile SPECjbb.props ) 2> ${reorder_file}_tmp1 - - sed -n -e '/^text:/p' ${reorder_file}_tmp1 > ${reorder_file}_tmp2 - sed -e '/^text:/d' ${reorder_file}_tmp1 - cat ${reorder_file}_tmp2 >> ${reorder_file} - rm -f ${reorder_file}_tmp2 - rm -f ${reorder_file}_tmp1 -} - -#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Rename the old VMs, copy the new in, run the test, and put the -# old one back. - -copy_and_test() { - - # $1 = "client" or "server" - # $2 = name of reorder file to be generated. - # $3 = profiled jvm to copy in - - echo "COPY_AND_TEST ($1, $2, $3)." - # $2 = name of reorder file to be generated. - # $3 = profiled jvm to copy in - - rm -rf $lib/jvm_profiled - mkdir $lib/jvm_profiled - cp $3 $lib/jvm_profiled - test_$1 $1 $2 - rm -rf $lib/jvm_profiled -} - -#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -# Check arguments: - -if [ $# != 3 ] ; then - echo "" - echo "Usage:" - echo " sh reorder.sh " - echo "" - exit 1 -fi - -sdk_ws=$1 -if [ ! -r $sdk_ws/make/tools/reorder/Makefile ] ; then - echo "" - echo "test workspace "$sdk_ws" does not contain the reordering tools." - echo "" - exit 1 -fi - -sdk=$2 -jre=$sdk/jre - -# Set up architecture names as needed by various components. -# Why couldn't we just use x86 for everything? - -# Arch name as used in JRE runtime (eg. i386): -# .../jre/lib/${arch3}/server -arch3=`uname -p` - -# Arch name as used in Hotspot build: (eg. i486) -# /export/hotspot/make/solaris/solaris_${arch4}_compiler1 -arch4=$arch3 - -# Arch name as used in SDK build (eg. i586): -# /export/tiger/make/solaris-${arch3} -arch5=$arch3 - -# Tweak for 64-bit sparc builds. At least they all agree. -if [ $arch3 = sparc -a "X$LP64" != "X" ] ; then - arch3=sparcv9 - arch4=sparcv9 - arch5=sparcv9 -fi - -# Tweak for 64-bit i386 == amd64 builds. At least they all agree. -if [ $arch3 = i386 -a "X$LP64" != "X" ] ; then - arch3=amd64 - arch4=amd64 - arch5=amd64 -fi - -# Tweak for x86 builds. All different. -if [ $arch3 = i386 ] ; then - arch4=i486 - arch5=i586 -fi - -lib=$jre/lib/$arch3 -if [ ! -r $jre/lib/rt.jar ] ; then - echo "" - echo "test SDK "$sdk" is not a suitable SDK." - echo "" - exit 1 -fi - -jbb_dir=$3 -if [ ! -r $jbb_dir/jbb.jar ] ; then - echo "" - echo "jbb.jar not present in $jbb_dir" - echo "" - exit 1 -fi - - -# Were profiled VMs built? - -if [ "X$LP64" != "X" ] ; then - if [ ! -r solaris_${arch4}_compiler2/profiled/libjvm.so ] ; then - echo "" - echo "Profiled builds of compiler2 are needed first." - echo ' -- build with "make profiled PROFILE_PRODUCT=1" -- ' - echo "" - exit 1 - fi -else - if [ ! -r solaris_${arch4}_compiler1/profiled/libjvm.so \ - -o ! -r solaris_${arch4}_compiler2/profiled/libjvm.so ] ; then - echo "" - echo "Profiled builds of compiler1 and compiler2 are needed first." - echo ' -- build with "make profiled{,1} PROFILE_PRODUCT=1" -- ' - exit 1 - fi -fi - - -# Compiler1 - not supported in 64-bit (b69 java launcher rejects it). - -if [ "X$LP64" = "X" ] ; then - #gnumake profiled1 - echo Using profiled client VM. - echo - copy_and_test client \ - reorder_COMPILER1_$arch4 \ - solaris_${arch4}_compiler1/profiled/libjvm.so -fi - -#gnumake profiled -echo Using profiled server VM. -echo -copy_and_test server \ - reorder_COMPILER2_$arch4 \ - solaris_${arch4}_compiler2/profiled/libjvm.so diff -r 36d1d483d5d6 -r da91efe96a93 make/windows/create_obj_files.sh --- a/make/windows/create_obj_files.sh Fri Aug 31 16:39:35 2012 -0700 +++ b/make/windows/create_obj_files.sh Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ # -# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -121,7 +121,7 @@ ZERO_SPECIFIC_FILES="zero" # These files need to be excluded when building the kernel target. -KERNEL_EXCLUDED_FILES="attachListener.cpp attachListener_windows.cpp dump.cpp dump_${Platform_arch_model}.cpp forte.cpp fprofiler.cpp heapDumper.cpp heapInspection.cpp jniCheck.cpp jvmtiCodeBlobEvents.cpp jvmtiExtensions.cpp jvmtiImpl.cpp jvmtiRawMonitor.cpp jvmtiTagMap.cpp jvmtiTrace.cpp restore.cpp serialize.cpp vmStructs.cpp g1MemoryPool.cpp psMemoryPool.cpp gcAdaptivePolicyCounters.cpp concurrentGCThread.cpp mutableNUMASpace.cpp allocationStats.cpp gSpaceCounters.cpp immutableSpace.cpp mutableSpace.cpp spaceCounters.cpp yieldingWorkgroup.cpp" +KERNEL_EXCLUDED_FILES="attachListener.cpp attachListener_windows.cpp metaspaceShared_${Platform_arch_model}.cpp forte.cpp fprofiler.cpp heapDumper.cpp heapInspection.cpp jniCheck.cpp jvmtiCodeBlobEvents.cpp jvmtiExtensions.cpp jvmtiImpl.cpp jvmtiRawMonitor.cpp jvmtiTagMap.cpp jvmtiTrace.cpp vmStructs.cpp g1MemoryPool.cpp psMemoryPool.cpp gcAdaptivePolicyCounters.cpp concurrentGCThread.cpp metaspaceShared.cpp mutableNUMASpace.cpp allocationStats.cpp gSpaceCounters.cpp immutableSpace.cpp mutableSpace.cpp spaceCounters.cpp yieldingWorkgroup.cpp" # Always exclude these. Src_Files_EXCLUDE="jsig.c jvmtiEnvRecommended.cpp jvmtiEnvStub.cpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/assembler_sparc.cpp --- a/src/cpu/sparc/vm/assembler_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/assembler_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,11 +52,11 @@ // Convert the raw encoding form into the form expected by the // constructor for Address. -Address Address::make_raw(int base, int index, int scale, int disp, bool disp_is_oop) { +Address Address::make_raw(int base, int index, int scale, int disp, relocInfo::relocType disp_reloc) { assert(scale == 0, "not supported"); RelocationHolder rspec; - if (disp_is_oop) { - rspec = Relocation::spec_simple(relocInfo::oop_type); + if (disp_reloc != relocInfo::none) { + rspec = Relocation::spec_simple(disp_reloc); } Register rindex = as_Register(index); @@ -1250,12 +1250,11 @@ } -void MacroAssembler::get_vm_result_2(Register oop_result) { +void MacroAssembler::get_vm_result_2(Register metadata_result) { verify_thread(); Address vm_result_addr_2(G2_thread, JavaThread::vm_result_2_offset()); - ld_ptr(vm_result_addr_2, oop_result); + ld_ptr(vm_result_addr_2, metadata_result); st_ptr(G0, vm_result_addr_2); - verify_oop(oop_result); } @@ -1284,6 +1283,17 @@ } +void MacroAssembler::ic_call(address entry, bool emit_delay) { + RelocationHolder rspec = virtual_call_Relocation::spec(pc()); + patchable_set((intptr_t)Universe::non_oop_word(), G5_inline_cache_reg); + relocate(rspec); + call(entry, relocInfo::none); + if (emit_delay) { + delayed()->nop(); + } +} + + void MacroAssembler::card_table_write(jbyte* byte_map_base, Register tmp, Register obj) { #ifdef _LP64 @@ -1612,15 +1622,24 @@ } -AddressLiteral MacroAssembler::allocate_oop_address(jobject obj) { - assert(oop_recorder() != NULL, "this assembler needs an OopRecorder"); - int oop_index = oop_recorder()->allocate_index(obj); - return AddressLiteral(obj, oop_Relocation::spec(oop_index)); +AddressLiteral MacroAssembler::allocate_metadata_address(Metadata* obj) { + assert(oop_recorder() != NULL, "this assembler needs a Recorder"); + int index = oop_recorder()->allocate_metadata_index(obj); + RelocationHolder rspec = metadata_Relocation::spec(index); + return AddressLiteral((address)obj, rspec); +} + +AddressLiteral MacroAssembler::constant_metadata_address(Metadata* obj) { + assert(oop_recorder() != NULL, "this assembler needs a Recorder"); + int index = oop_recorder()->find_index(obj); + RelocationHolder rspec = metadata_Relocation::spec(index); + return AddressLiteral((address)obj, rspec); } AddressLiteral MacroAssembler::constant_oop_address(jobject obj) { assert(oop_recorder() != NULL, "this assembler needs an OopRecorder"); + assert(Universe::heap()->is_in_reserved(JNIHandles::resolve(obj)), "not an oop"); int oop_index = oop_recorder()->find_index(obj); return AddressLiteral(obj, oop_Relocation::spec(oop_index)); } @@ -1906,22 +1925,14 @@ br_null_short(O0_obj, pn, succeed); } - // Check the klassOop of this object for being in the right area of memory. + // Check the Klass* of this object for being in the right area of memory. // Cannot do the load in the delay above slot in case O0 is null load_klass(O0_obj, O0_obj); - // assert((klass & klass_mask) == klass_bits); - if( Universe::verify_klass_mask() != Universe::verify_oop_mask() ) - set(Universe::verify_klass_mask(), O2_mask); - if( Universe::verify_klass_bits() != Universe::verify_oop_bits() ) - set(Universe::verify_klass_bits(), O3_bits); - and3(O0_obj, O2_mask, O4_temp); - cmp_and_brx_short(O4_temp, O3_bits, notEqual, pn, fail); - // Check the klass's klass - load_klass(O0_obj, O0_obj); - and3(O0_obj, O2_mask, O4_temp); - cmp(O4_temp, O3_bits); - brx(notEqual, false, pn, fail); - delayed()->wrccr( O5_save_flags ); // Restore CCR's + // assert((klass != NULL) + br_null_short(O0_obj, pn, fail); + // TODO: Future assert that klass is lower 4g memory for UseCompressedKlassPointers + + wrccr( O5_save_flags ); // Restore CCR's // mark upper end of faulting range _verify_oop_implicit_branch[1] = pc(); @@ -2065,26 +2076,28 @@ void MacroAssembler::debug(char* msg, RegistersForDebugging* regs) { if ( ShowMessageBoxOnError ) { - JavaThreadState saved_state = JavaThread::current()->thread_state(); - JavaThread::current()->set_thread_state(_thread_in_vm); + JavaThread* thread = JavaThread::current(); + JavaThreadState saved_state = thread->thread_state(); + thread->set_thread_state(_thread_in_vm); { // In order to get locks work, we need to fake a in_VM state ttyLocker ttyl; ::tty->print_cr("EXECUTION STOPPED: %s\n", msg); if (CountBytecodes || TraceBytecodes || StopInterpreterAt) { - ::tty->print_cr("Interpreter::bytecode_counter = %d", BytecodeCounter::counter_value()); + BytecodeCounter::print(); } if (os::message_box(msg, "Execution stopped, print registers?")) regs->print(::tty); } + BREAKPOINT; ThreadStateTransition::transition(JavaThread::current(), _thread_in_vm, saved_state); } - else + else { ::tty->print_cr("=============== DEBUG MESSAGE: %s ================\n", msg); + } assert(false, err_msg("DEBUG MESSAGE: %s", msg)); } - #ifndef PRODUCT void MacroAssembler::test() { ResourceMark rm; @@ -2931,11 +2944,11 @@ "caller must use same register for non-constant itable index as for method"); // Compute start of first itableOffsetEntry (which is at the end of the vtable) - int vtable_base = instanceKlass::vtable_start_offset() * wordSize; + int vtable_base = InstanceKlass::vtable_start_offset() * wordSize; int scan_step = itableOffsetEntry::size() * wordSize; int vte_size = vtableEntry::size() * wordSize; - lduw(recv_klass, instanceKlass::vtable_length_offset() * wordSize, scan_temp); + lduw(recv_klass, InstanceKlass::vtable_length_offset() * wordSize, scan_temp); // %%% We should store the aligned, prescaled offset in the klassoop. // Then the next several instructions would fold away. @@ -2950,7 +2963,7 @@ add(scan_temp, itb_offset, scan_temp); if (round_to_unit != 0) { // Round up to align_object_offset boundary - // see code for instanceKlass::start_of_itable! + // see code for InstanceKlass::start_of_itable! // Was: round_to(scan_temp, BytesPerLong); // Hoisted: add(scan_temp, BytesPerLong-1, scan_temp); and3(scan_temp, -round_to_unit, scan_temp); @@ -3011,7 +3024,7 @@ Register method_result) { assert_different_registers(recv_klass, method_result, vtable_index.register_or_noreg()); Register sethi_temp = method_result; - const int base = (instanceKlass::vtable_start_offset() * wordSize + + const int base = (InstanceKlass::vtable_start_offset() * wordSize + // method pointer offset within the vtable entry: vtableEntry::method_offset_in_bytes()); RegisterOrConstant vtable_offset = vtable_index; @@ -3212,46 +3225,28 @@ // We will consult the secondary-super array. ld_ptr(sub_klass, ss_offset, scan_temp); - // Compress superclass if necessary. Register search_key = super_klass; - bool decode_super_klass = false; - if (UseCompressedOops) { - if (coop_reg != noreg) { - encode_heap_oop_not_null(super_klass, coop_reg); - search_key = coop_reg; - } else { - encode_heap_oop_not_null(super_klass); - decode_super_klass = true; // scarce temps! - } - // The superclass is never null; it would be a basic system error if a null - // pointer were to sneak in here. Note that we have already loaded the - // Klass::super_check_offset from the super_klass in the fast path, - // so if there is a null in that register, we are already in the afterlife. - } // Load the array length. (Positive movl does right thing on LP64.) - lduw(scan_temp, arrayOopDesc::length_offset_in_bytes(), count_temp); + lduw(scan_temp, Array::length_offset_in_bytes(), count_temp); // Check for empty secondary super list tst(count_temp); + // In the array of super classes elements are pointer sized. + int element_size = wordSize; + // Top of search loop bind(L_loop); br(Assembler::equal, false, Assembler::pn, *L_failure); - delayed()->add(scan_temp, heapOopSize, scan_temp); - assert(heapOopSize != 0, "heapOopSize should be initialized"); + delayed()->add(scan_temp, element_size, scan_temp); // Skip the array header in all array accesses. - int elem_offset = arrayOopDesc::base_offset_in_bytes(T_OBJECT); - elem_offset -= heapOopSize; // the scan pointer was pre-incremented also + int elem_offset = Array::base_offset_in_bytes(); + elem_offset -= element_size; // the scan pointer was pre-incremented also // Load next super to check - if (UseCompressedOops) { - // Don't use load_heap_oop; we don't want to decode the element. - lduw( scan_temp, elem_offset, scratch_reg ); - } else { ld_ptr( scan_temp, elem_offset, scratch_reg ); - } // Look for Rsuper_klass on Rsub_klass's secondary super-class-overflow list cmp(scratch_reg, search_key); @@ -3260,9 +3255,6 @@ brx(Assembler::notEqual, false, Assembler::pn, L_loop); delayed()->deccc(count_temp); // decrement trip counter in delay slot - // Falling out the bottom means we found a hit; we ARE a subtype - if (decode_super_klass) decode_heap_oop(super_klass); - // Success. Cache the super we found and proceed in triumph. st_ptr(super_klass, sub_klass, sc_offset); @@ -4658,7 +4650,7 @@ // The number of bytes in this code is used by // MachCallDynamicJavaNode::ret_addr_offset() // if this changes, change that. - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { lduw(src_oop, oopDesc::klass_offset_in_bytes(), klass); decode_heap_oop_not_null(klass); } else { @@ -4667,7 +4659,7 @@ } void MacroAssembler::store_klass(Register klass, Register dst_oop) { - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { assert(dst_oop != klass, "not enough registers"); encode_heap_oop_not_null(klass); st(klass, dst_oop, oopDesc::klass_offset_in_bytes()); @@ -4677,7 +4669,7 @@ } void MacroAssembler::store_klass_gap(Register s, Register d) { - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { assert(s != d, "not enough registers"); st(s, d, oopDesc::klass_gap_offset_in_bytes()); } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/assembler_sparc.hpp --- a/src/cpu/sparc/vm/assembler_sparc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/assembler_sparc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -152,7 +152,7 @@ // is added and removed as needed in the frame code. // Interface to signature handler REGISTER_DECLARATION(Register, Llocals , L7); // pointer to locals for signature handler -REGISTER_DECLARATION(Register, Lmethod , L6); // methodOop when calling signature handler +REGISTER_DECLARATION(Register, Lmethod , L6); // Method* when calling signature handler #else REGISTER_DECLARATION(Register, Lesp , L0); // expression stack pointer @@ -351,7 +351,7 @@ // Convert the raw encoding form into the form expected by the // constructor for Address. - static Address make_raw(int base, int index, int scale, int disp, bool disp_is_oop); + static Address make_raw(int base, int index, int scale, int disp, relocInfo::relocType disp_reloc); friend class Assembler; }; @@ -438,11 +438,11 @@ _rspec(rspec_from_rtype(rtype, (address) addr)) {} #endif - AddressLiteral(oop addr, relocInfo::relocType rtype = relocInfo::none) + AddressLiteral(Metadata* addr, relocInfo::relocType rtype = relocInfo::none) : _address((address) addr), _rspec(rspec_from_rtype(rtype, (address) addr)) {} - AddressLiteral(oop* addr, relocInfo::relocType rtype = relocInfo::none) + AddressLiteral(Metadata** addr, relocInfo::relocType rtype = relocInfo::none) : _address((address) addr), _rspec(rspec_from_rtype(rtype, (address) addr)) {} @@ -478,7 +478,7 @@ public: ExternalAddress(address target) : AddressLiteral(target, reloc_for_target( target)) {} - ExternalAddress(oop* target) : AddressLiteral(target, reloc_for_target((address) target)) {} + ExternalAddress(Metadata** target) : AddressLiteral(target, reloc_for_target((address) target)) {} }; inline Address RegisterImpl::address_in_saved_window() const { @@ -2311,11 +2311,14 @@ void call_VM_leaf(Register thread_cache, address entry_point, Register arg_1, Register arg_2, Register arg_3); void get_vm_result (Register oop_result); - void get_vm_result_2(Register oop_result); + void get_vm_result_2(Register metadata_result); // vm result is currently getting hijacked to for oop preservation void set_vm_result(Register oop_result); + // Emit the CompiledIC call idiom + void ic_call(address entry, bool emit_delay = true); + // if call_VM_base was called with check_exceptions=false, then call // check_and_forward_exception to handle exceptions when it is safe void check_and_forward_exception(Register scratch_reg); @@ -2392,6 +2395,13 @@ inline void set_oop_constant (jobject obj, Register d); // uses constant_oop_address inline void set_oop (const AddressLiteral& obj_addr, Register d); // same as load_address + // metadata in code that we have to keep track of + AddressLiteral allocate_metadata_address(Metadata* obj); // allocate_index + AddressLiteral constant_metadata_address(Metadata* obj); // find_index + inline void set_metadata (Metadata* obj, Register d); // uses allocate_metadata_address + inline void set_metadata_constant (Metadata* obj, Register d); // uses constant_metadata_address + inline void set_metadata (const AddressLiteral& obj_addr, Register d); // same as load_address + void set_narrow_oop( jobject obj, Register d ); // nop padding diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/assembler_sparc.inline.hpp --- a/src/cpu/sparc/vm/assembler_sparc.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/assembler_sparc.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -760,6 +760,19 @@ } +inline void MacroAssembler::set_metadata(Metadata* obj, Register d) { + set_metadata(allocate_metadata_address(obj), d); +} + +inline void MacroAssembler::set_metadata_constant(Metadata* obj, Register d) { + set_metadata(constant_metadata_address(obj), d); +} + +inline void MacroAssembler::set_metadata(const AddressLiteral& obj_addr, Register d) { + assert(obj_addr.rspec().type() == relocInfo::metadata_type, "must be a metadata reloc"); + set(obj_addr, d); +} + inline void MacroAssembler::set_oop(jobject obj, Register d) { set_oop(allocate_oop_address(obj), d); } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/bytecodeInterpreter_sparc.cpp --- a/src/cpu/sparc/vm/bytecodeInterpreter_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/bytecodeInterpreter_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,8 +29,8 @@ #include "interpreter/bytecodeInterpreter.inline.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/interpreterRuntime.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp --- a/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -268,7 +268,22 @@ #ifdef ASSERT address start = __ pc(); #endif - AddressLiteral addrlit(NULL, oop_Relocation::spec(_oop_index)); + AddressLiteral addrlit(NULL, metadata_Relocation::spec(_index)); + __ patchable_set(addrlit, _obj); + +#ifdef ASSERT + for (int i = 0; i < _bytes_to_copy; i++) { + address ptr = (address)(_pc_start + i); + int a_byte = (*ptr) & 0xFF; + assert(a_byte == *start++, "should be the same code"); + } +#endif + } else if (_id == load_mirror_id) { + // produce a copy of the load mirror instruction for use by the being initialized case +#ifdef ASSERT + address start = __ pc(); +#endif + AddressLiteral addrlit(NULL, oop_Relocation::spec(_index)); __ patchable_set(addrlit, _obj); #ifdef ASSERT @@ -289,7 +304,7 @@ address end_of_patch = __ pc(); int bytes_to_skip = 0; - if (_id == load_klass_id) { + if (_id == load_mirror_id) { int offset = __ offset(); if (CommentedAssembly) { __ block_comment(" being_initialized check"); @@ -300,9 +315,9 @@ // check that this code is being executed by the initializing // thread. assert(_obj != noreg, "must be a valid register"); - assert(_oop_index >= 0, "must have oop index"); - __ load_heap_oop(_obj, java_lang_Class::klass_offset_in_bytes(), G3); - __ ld_ptr(G3, in_bytes(instanceKlass::init_thread_offset()), G3); + assert(_index >= 0, "must have oop index"); + __ ld_ptr(_obj, java_lang_Class::klass_offset_in_bytes(), G3); + __ ld_ptr(G3, in_bytes(InstanceKlass::init_thread_offset()), G3); __ cmp_and_brx_short(G2_thread, G3, Assembler::notEqual, Assembler::pn, call_patch); // load_klass patches may execute the patched code before it's @@ -335,9 +350,11 @@ address entry = __ pc(); NativeGeneralJump::insert_unconditional((address)_pc_start, entry); address target = NULL; + relocInfo::relocType reloc_type = relocInfo::none; switch (_id) { case access_field_id: target = Runtime1::entry_for(Runtime1::access_field_patching_id); break; - case load_klass_id: target = Runtime1::entry_for(Runtime1::load_klass_patching_id); break; + case load_klass_id: target = Runtime1::entry_for(Runtime1::load_klass_patching_id); reloc_type = relocInfo::metadata_type; break; + case load_mirror_id: target = Runtime1::entry_for(Runtime1::load_mirror_patching_id); reloc_type = relocInfo::oop_type; break; default: ShouldNotReachHere(); } __ bind(call_patch); @@ -351,15 +368,15 @@ ce->add_call_info_here(_info); __ br(Assembler::always, false, Assembler::pt, _patch_site_entry); __ delayed()->nop(); - if (_id == load_klass_id) { + if (_id == load_klass_id || _id == load_mirror_id) { CodeSection* cs = __ code_section(); address pc = (address)_pc_start; RelocIterator iter(cs, pc, pc + 1); - relocInfo::change_reloc_info_for_address(&iter, (address) pc, relocInfo::oop_type, relocInfo::none); + relocInfo::change_reloc_info_for_address(&iter, (address) pc, reloc_type, relocInfo::none); pc = (address)(_pc_start + NativeMovConstReg::add_offset); RelocIterator iter2(cs, pc, pc+1); - relocInfo::change_reloc_info_for_address(&iter2, (address) pc, relocInfo::oop_type, relocInfo::none); + relocInfo::change_reloc_info_for_address(&iter2, (address) pc, reloc_type, relocInfo::none); } } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp --- a/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -447,7 +447,7 @@ if (compilation()->env()->dtrace_method_probes()) { __ mov(G2_thread, O0); - jobject2reg(method()->constant_encoding(), O1); + metadata2reg(method()->constant_encoding(), O1); __ call(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), relocInfo::runtime_call_type); __ delayed()->nop(); } @@ -502,6 +502,7 @@ __ set(NULL_WORD, reg); } else { int oop_index = __ oop_recorder()->find_index(o); + assert(Universe::heap()->is_in_reserved(JNIHandles::resolve(o)), "should be real oop"); RelocationHolder rspec = oop_Relocation::spec(oop_index); __ set(NULL_WORD, reg, rspec); // Will be set when the nmethod is created } @@ -509,9 +510,9 @@ void LIR_Assembler::jobject2reg_with_patching(Register reg, CodeEmitInfo *info) { - // Allocate a new index in oop table to hold the oop once it's been patched - int oop_index = __ oop_recorder()->allocate_index((jobject)NULL); - PatchingStub* patch = new PatchingStub(_masm, PatchingStub::load_klass_id, oop_index); + // Allocate a new index in table to hold the object once it's been patched + int oop_index = __ oop_recorder()->allocate_oop_index(NULL); + PatchingStub* patch = new PatchingStub(_masm, PatchingStub::load_mirror_id, oop_index); AddressLiteral addrlit(NULL, oop_Relocation::spec(oop_index)); assert(addrlit.rspec().type() == relocInfo::oop_type, "must be an oop reloc"); @@ -524,6 +525,24 @@ } +void LIR_Assembler::metadata2reg(Metadata* o, Register reg) { + __ set_metadata_constant(o, reg); +} + +void LIR_Assembler::klass2reg_with_patching(Register reg, CodeEmitInfo *info) { + // Allocate a new index in table to hold the klass once it's been patched + int index = __ oop_recorder()->allocate_metadata_index(NULL); + PatchingStub* patch = new PatchingStub(_masm, PatchingStub::load_klass_id, index); + AddressLiteral addrlit(NULL, metadata_Relocation::spec(index)); + assert(addrlit.rspec().type() == relocInfo::metadata_type, "must be an metadata reloc"); + // It may not seem necessary to use a sethi/add pair to load a NULL into dest, but the + // NULL will be dynamically patched later and the patched value may be large. We must + // therefore generate the sethi/add as a placeholders + __ patchable_set(addrlit, reg); + + patching_epilog(patch, lir_patch_normal, reg, info); +} + void LIR_Assembler::emit_op3(LIR_Op3* op) { Register Rdividend = op->in_opr1()->as_register(); Register Rdivisor = noreg; @@ -768,10 +787,7 @@ void LIR_Assembler::ic_call(LIR_OpJavaCall* op) { - RelocationHolder rspec = virtual_call_Relocation::spec(pc()); - __ set_oop((jobject)Universe::non_oop_word(), G5_inline_cache_reg); - __ relocate(rspec); - __ call(op->addr(), relocInfo::none); + __ ic_call(op->addr(), false); // The peephole pass fills the delay slot, add_call_info is done in // LIR_Assembler::emit_delay. } @@ -788,7 +804,7 @@ // ld_ptr, set_hi, set __ ld_ptr(G3_scratch, G5_method, G5_method); } - __ ld_ptr(G5_method, methodOopDesc::from_compiled_offset(), G3_scratch); + __ ld_ptr(G5_method, Method::from_compiled_offset(), G3_scratch); __ callr(G3_scratch, G0); // the peephole pass fills the delay slot } @@ -1227,6 +1243,16 @@ } break; + case T_METADATA: + { + if (patch_code == lir_patch_none) { + metadata2reg(c->as_metadata(), to_reg->as_register()); + } else { + klass2reg_with_patching(to_reg->as_register(), info); + } + } + break; + case T_FLOAT: { address const_addr = __ float_constant(c->as_jfloat()); @@ -1594,7 +1620,7 @@ int start = __ offset(); __ relocate(static_stub_Relocation::spec(call_pc)); - __ set_oop(NULL, G5); + __ set_metadata(NULL, G5); // must be set to -1 at code generation time AddressLiteral addrlit(-1); __ jump_to(addrlit, G3); @@ -2051,7 +2077,6 @@ __ delayed()->nop(); } - void LIR_Assembler::emit_arraycopy(LIR_OpArrayCopy* op) { Register src = op->src()->as_register(); Register dst = op->dst()->as_register(); @@ -2169,7 +2194,7 @@ // We don't know the array types are compatible if (basic_type != T_OBJECT) { // Simple test for basic type arrays - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { // We don't need decode because we just need to compare __ lduw(src, oopDesc::klass_offset_in_bytes(), tmp); __ lduw(dst, oopDesc::klass_offset_in_bytes(), tmp2); @@ -2302,8 +2327,8 @@ // subtype which we can't check or src is the same array as dst // but not necessarily exactly of type default_type. Label known_ok, halt; - jobject2reg(op->expected_type()->constant_encoding(), tmp); - if (UseCompressedOops) { + metadata2reg(op->expected_type()->constant_encoding(), tmp); + if (UseCompressedKlassPointers) { // tmp holds the default type. It currently comes uncompressed after the // load of a constant, so encode it. __ encode_heap_oop(tmp); @@ -2468,10 +2493,10 @@ op->klass()->as_register() == G5, "must be"); if (op->init_check()) { __ ldub(op->klass()->as_register(), - in_bytes(instanceKlass::init_state_offset()), + in_bytes(InstanceKlass::init_state_offset()), op->tmp1()->as_register()); add_debug_info_for_null_check_here(op->stub()->info()); - __ cmp(op->tmp1()->as_register(), instanceKlass::fully_initialized); + __ cmp(op->tmp1()->as_register(), InstanceKlass::fully_initialized); __ br(Assembler::notEqual, false, Assembler::pn, *op->stub()->entry()); __ delayed()->nop(); } @@ -2598,7 +2623,7 @@ __ br_notnull_short(obj, Assembler::pn, not_null); Register mdo = k_RInfo; Register data_val = Rtmp1; - jobject2reg(md->constant_encoding(), mdo); + metadata2reg(md->constant_encoding(), mdo); if (mdo_offset_bias > 0) { __ set(mdo_offset_bias, data_val); __ add(mdo, data_val, mdo); @@ -2622,9 +2647,9 @@ // patching may screw with our temporaries on sparc, // so let's do it before loading the class if (k->is_loaded()) { - jobject2reg(k->constant_encoding(), k_RInfo); + metadata2reg(k->constant_encoding(), k_RInfo); } else { - jobject2reg_with_patching(k_RInfo, op->info_for_patch()); + klass2reg_with_patching(k_RInfo, op->info_for_patch()); } assert(obj != k_RInfo, "must be different"); @@ -2667,7 +2692,7 @@ Register mdo = klass_RInfo, recv = k_RInfo, tmp1 = Rtmp1; assert_different_registers(obj, mdo, recv, tmp1); __ bind(profile_cast_success); - jobject2reg(md->constant_encoding(), mdo); + metadata2reg(md->constant_encoding(), mdo); if (mdo_offset_bias > 0) { __ set(mdo_offset_bias, tmp1); __ add(mdo, tmp1, mdo); @@ -2679,7 +2704,7 @@ __ delayed()->nop(); // Cast failure case __ bind(profile_cast_failure); - jobject2reg(md->constant_encoding(), mdo); + metadata2reg(md->constant_encoding(), mdo); if (mdo_offset_bias > 0) { __ set(mdo_offset_bias, tmp1); __ add(mdo, tmp1, mdo); @@ -2724,7 +2749,7 @@ __ br_notnull_short(value, Assembler::pn, not_null); Register mdo = k_RInfo; Register data_val = Rtmp1; - jobject2reg(md->constant_encoding(), mdo); + metadata2reg(md->constant_encoding(), mdo); if (mdo_offset_bias > 0) { __ set(mdo_offset_bias, data_val); __ add(mdo, data_val, mdo); @@ -2760,7 +2785,7 @@ Register mdo = klass_RInfo, recv = k_RInfo, tmp1 = Rtmp1; assert_different_registers(value, mdo, recv, tmp1); __ bind(profile_cast_success); - jobject2reg(md->constant_encoding(), mdo); + metadata2reg(md->constant_encoding(), mdo); if (mdo_offset_bias > 0) { __ set(mdo_offset_bias, tmp1); __ add(mdo, tmp1, mdo); @@ -2770,7 +2795,7 @@ __ ba_short(done); // Cast failure case __ bind(profile_cast_failure); - jobject2reg(md->constant_encoding(), mdo); + metadata2reg(md->constant_encoding(), mdo); if (mdo_offset_bias > 0) { __ set(mdo_offset_bias, tmp1); __ add(mdo, tmp1, mdo); @@ -2972,7 +2997,7 @@ assert(op->tmp1()->is_single_cpu(), "tmp1 must be allocated"); Register tmp1 = op->tmp1()->as_register(); #endif - jobject2reg(md->constant_encoding(), mdo); + metadata2reg(md->constant_encoding(), mdo); int mdo_offset_bias = 0; if (!Assembler::is_simm13(md->byte_offset_of_slot(data, CounterData::count_offset()) + data->size_in_bytes())) { @@ -2998,7 +3023,7 @@ ciKlass* known_klass = op->known_holder(); if (C1OptimizeVirtualCallProfiling && known_klass != NULL) { // We know the type that will be seen at this call site; we can - // statically update the methodDataOop rather than needing to do + // statically update the MethodData* rather than needing to do // dynamic tests on the receiver type // NOTE: we should probably put a lock around this search to @@ -3028,7 +3053,7 @@ if (receiver == NULL) { Address recv_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_offset(i)) - mdo_offset_bias); - jobject2reg(known_klass->constant_encoding(), tmp1); + metadata2reg(known_klass->constant_encoding(), tmp1); __ st_ptr(tmp1, recv_addr); Address data_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i)) - mdo_offset_bias); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp --- a/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -939,11 +939,11 @@ LIR_Opr len = length.result(); CodeStub* slow_path = new NewObjectArrayStub(klass_reg, len, reg, info); - ciObject* obj = (ciObject*) ciObjArrayKlass::make(x->klass()); + ciMetadata* obj = ciObjArrayKlass::make(x->klass()); if (obj == ciEnv::unloaded_ciobjarrayklass()) { BAILOUT("encountered unloaded_ciobjarrayklass due to out of memory error"); } - jobject2reg_with_patching(klass_reg, obj, patching_info); + klass2reg_with_patching(klass_reg, obj, patching_info); __ allocate_array(reg, len, tmp1, tmp2, tmp3, tmp4, T_OBJECT, klass_reg, slow_path); LIR_Opr result = rlock_result(x); @@ -986,7 +986,7 @@ // This instruction can be deoptimized in the slow path : use // O0 as result register. const LIR_Opr reg = result_register_for(x->type()); - jobject2reg_with_patching(reg, x->klass(), patching_info); + klass2reg_with_patching(reg, x->klass(), patching_info); LIR_Opr rank = FrameMap::O1_opr; __ move(LIR_OprFact::intConst(x->rank()), rank); LIR_Opr varargs = FrameMap::as_pointer_opr(O2); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp --- a/src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/c1_MacroAssembler_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -186,7 +186,7 @@ set((intx)markOopDesc::prototype(), t1); } st_ptr(t1, obj, oopDesc::mark_offset_in_bytes()); - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { // Save klass mov(klass, t1); encode_heap_oop_not_null(t1); @@ -194,8 +194,10 @@ } else { st_ptr(klass, obj, oopDesc::klass_offset_in_bytes()); } - if (len->is_valid()) st(len, obj, arrayOopDesc::length_offset_in_bytes()); - else if (UseCompressedOops) { + if (len->is_valid()) { + st(len, obj, arrayOopDesc::length_offset_in_bytes()); + } else if (UseCompressedKlassPointers) { + // otherwise length is in the class gap store_klass_gap(G0, obj); } } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/c1_Runtime1_sparc.cpp --- a/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ #include "c1/c1_Runtime1.hpp" #include "interpreter/interpreter.hpp" #include "nativeInst_sparc.hpp" -#include "oops/compiledICHolderOop.hpp" +#include "oops/compiledICHolder.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "register_sparc.hpp" @@ -39,7 +39,7 @@ // Implementation of StubAssembler -int StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry_point, int number_of_arguments) { +int StubAssembler::call_RT(Register oop_result1, Register metadata_result, address entry_point, int number_of_arguments) { // for sparc changing the number of arguments doesn't change // anything about the frame size so we'll always lie and claim that // we are only passing 1 argument. @@ -100,8 +100,9 @@ st_ptr(G0, vm_result_addr); } - if (oop_result2->is_valid()) { - get_vm_result_2(oop_result2); + // get second result if there is one and reset the value in the thread + if (metadata_result->is_valid()) { + get_vm_result_2 (metadata_result); } else { // be a little paranoid and clear the result Address vm_result_addr_2(G2_thread, JavaThread::vm_result_2_offset()); @@ -112,27 +113,27 @@ } -int StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1) { +int StubAssembler::call_RT(Register oop_result1, Register metadata_result, address entry, Register arg1) { // O0 is reserved for the thread mov(arg1, O1); - return call_RT(oop_result1, oop_result2, entry, 1); + return call_RT(oop_result1, metadata_result, entry, 1); } -int StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1, Register arg2) { +int StubAssembler::call_RT(Register oop_result1, Register metadata_result, address entry, Register arg1, Register arg2) { // O0 is reserved for the thread mov(arg1, O1); mov(arg2, O2); assert(arg2 != O1, "smashed argument"); - return call_RT(oop_result1, oop_result2, entry, 2); + return call_RT(oop_result1, metadata_result, entry, 2); } -int StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1, Register arg2, Register arg3) { +int StubAssembler::call_RT(Register oop_result1, Register metadata_result, address entry, Register arg1, Register arg2, Register arg3) { // O0 is reserved for the thread mov(arg1, O1); mov(arg2, O2); assert(arg2 != O1, "smashed argument"); mov(arg3, O3); assert(arg3 != O1 && arg3 != O2, "smashed argument"); - return call_RT(oop_result1, oop_result2, entry, 3); + return call_RT(oop_result1, metadata_result, entry, 3); } @@ -398,8 +399,8 @@ if (id == fast_new_instance_init_check_id) { // make sure the klass is initialized - __ ldub(G5_klass, in_bytes(instanceKlass::init_state_offset()), G3_t1); - __ cmp_and_br_short(G3_t1, instanceKlass::fully_initialized, Assembler::notEqual, Assembler::pn, slow_path); + __ ldub(G5_klass, in_bytes(InstanceKlass::init_state_offset()), G3_t1); + __ cmp_and_br_short(G3_t1, InstanceKlass::fully_initialized, Assembler::notEqual, Assembler::pn, slow_path); } #ifdef ASSERT // assert object can be fast path allocated @@ -796,6 +797,12 @@ } break; + case load_mirror_patching_id: + { __ set_info("load_mirror_patching", dont_gc_arguments); + oop_maps = generate_patching(sasm, CAST_FROM_FN_PTR(address, move_mirror_patching)); + } + break; + case dtrace_object_alloc_id: { // O0: object __ set_info("dtrace_object_alloc", dont_gc_arguments); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/c1_globals_sparc.hpp --- a/src/cpu/sparc/vm/c1_globals_sparc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/c1_globals_sparc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,8 +50,7 @@ define_pd_global(intx, ReservedCodeCacheSize, 32*M ); define_pd_global(intx, CodeCacheExpansionSize, 32*K ); define_pd_global(uintx,CodeCacheMinBlockLength, 1); -define_pd_global(uintx,PermSize, 12*M ); -define_pd_global(uintx,MaxPermSize, 64*M ); +define_pd_global(uintx,MetaspaceSize, 12*M ); define_pd_global(bool, NeverActAsServerClassMachine, true ); define_pd_global(intx, NewSizeThreadIncrease, 16*K ); define_pd_global(uint64_t,MaxRAM, 1ULL*G); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/c2_globals_sparc.hpp --- a/src/cpu/sparc/vm/c2_globals_sparc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/c2_globals_sparc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -89,8 +89,7 @@ define_pd_global(uintx,CodeCacheMinBlockLength, 4); // Heap related flags -define_pd_global(uintx,PermSize, ScaleForWordSize(16*M)); -define_pd_global(uintx,MaxPermSize, ScaleForWordSize(64*M)); +define_pd_global(uintx,MetaspaceSize, ScaleForWordSize(16*M)); // Ergonomics related flags define_pd_global(bool, NeverActAsServerClassMachine, false); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/cppInterpreter_sparc.cpp --- a/src/cpu/sparc/vm/cppInterpreter_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/cppInterpreter_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -30,8 +30,8 @@ #include "interpreter/interpreterGenerator.hpp" #include "interpreter/interpreterRuntime.hpp" #include "oops/arrayOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" @@ -405,9 +405,9 @@ void InterpreterGenerator::generate_counter_incr(Label* overflow, Label* profile_method, Label* profile_method_continue) { // Update standard invocation counters __ increment_invocation_counter(O0, G3_scratch); - if (ProfileInterpreter) { // %%% Merge this into methodDataOop + if (ProfileInterpreter) { // %%% Merge this into MethodData* __ ld_ptr(STATE(_method), G3_scratch); - Address interpreter_invocation_counter(G3_scratch, 0, in_bytes(methodOopDesc::interpreter_invocation_counter_offset())); + Address interpreter_invocation_counter(G3_scratch, 0, in_bytes(Method::interpreter_invocation_counter_offset())); __ ld(interpreter_invocation_counter, G3_scratch); __ inc(G3_scratch); __ st(G3_scratch, interpreter_invocation_counter); @@ -429,8 +429,6 @@ address entry = __ pc(); Label slow_path; - __ verify_oop(G5_method); - // do nothing for empty methods (do not even increment invocation counter) if ( UseFastEmptyMethods) { // If we need a safepoint check, generate full interpreter entry. @@ -481,8 +479,8 @@ // read first instruction word and extract bytecode @ 1 and index @ 2 // get first 4 bytes of the bytecodes (big endian!) - __ ld_ptr(Address(G5_method, 0, in_bytes(methodOopDesc::const_offset())), G1_scratch); - __ ld(Address(G1_scratch, 0, in_bytes(constMethodOopDesc::codes_offset())), G1_scratch); + __ ld_ptr(Address(G5_method, 0, in_bytes(Method::const_offset())), G1_scratch); + __ ld(Address(G1_scratch, 0, in_bytes(ConstMethod::codes_offset())), G1_scratch); // move index @ 2 far left then to the right most two bytes. __ sll(G1_scratch, 2*BitsPerByte, G1_scratch); @@ -490,16 +488,16 @@ ConstantPoolCacheEntry::size()) * BytesPerWord), G1_scratch); // get constant pool cache - __ ld_ptr(G5_method, in_bytes(methodOopDesc::const_offset()), G3_scratch); - __ ld_ptr(G3_scratch, in_bytes(constMethodOopDesc::constants_offset()), G3_scratch); - __ ld_ptr(G3_scratch, constantPoolOopDesc::cache_offset_in_bytes(), G3_scratch); + __ ld_ptr(G5_method, in_bytes(Method::const_offset()), G3_scratch); + __ ld_ptr(G3_scratch, in_bytes(ConstMethod::constants_offset()), G3_scratch); + __ ld_ptr(G3_scratch, ConstantPool::cache_offset_in_bytes(), G3_scratch); // get specific constant pool cache entry __ add(G3_scratch, G1_scratch, G3_scratch); // Check the constant Pool cache entry to see if it has been resolved. // If not, need the slow path. - ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset(); + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); __ ld_ptr(G3_scratch, in_bytes(cp_base_offset + ConstantPoolCacheEntry::indices_offset()), G1_scratch); __ srl(G1_scratch, 2*BitsPerByte, G1_scratch); __ and3(G1_scratch, 0xFF, G1_scratch); @@ -584,20 +582,18 @@ // the following temporary registers are used during frame creation const Register Gtmp1 = G3_scratch ; const Register Gtmp2 = G1_scratch; - const Address size_of_parameters(G5_method, 0, in_bytes(methodOopDesc::size_of_parameters_offset())); + const Address size_of_parameters(G5_method, 0, in_bytes(Method::size_of_parameters_offset())); bool inc_counter = UseCompiler || CountCompiledCalls; // make sure registers are different! assert_different_registers(G2_thread, G5_method, Gargs, Gtmp1, Gtmp2); - const Address access_flags (G5_method, 0, in_bytes(methodOopDesc::access_flags_offset())); + const Address access_flags (G5_method, 0, in_bytes(Method::access_flags_offset())); Label Lentry; __ bind(Lentry); - __ verify_oop(G5_method); - const Register Glocals_size = G3; assert_different_registers(Glocals_size, G4_scratch, Gframe_size); @@ -711,7 +707,7 @@ { Label L; __ ld_ptr(STATE(_method), G5_method); - __ ld_ptr(Address(G5_method, 0, in_bytes(methodOopDesc::signature_handler_offset())), G3_scratch); + __ ld_ptr(Address(G5_method, 0, in_bytes(Method::signature_handler_offset())), G3_scratch); __ tst(G3_scratch); __ brx(Assembler::notZero, false, Assembler::pt, L); __ delayed()->nop(); @@ -721,7 +717,7 @@ Address exception_addr(G2_thread, 0, in_bytes(Thread::pending_exception_offset())); __ ld_ptr(exception_addr, G3_scratch); __ br_notnull_short(G3_scratch, Assembler::pn, pending_exception_present); - __ ld_ptr(Address(G5_method, 0, in_bytes(methodOopDesc::signature_handler_offset())), G3_scratch); + __ ld_ptr(Address(G5_method, 0, in_bytes(Method::signature_handler_offset())), G3_scratch); __ bind(L); } @@ -765,13 +761,13 @@ __ br( Assembler::zero, false, Assembler::pt, not_static); __ delayed()-> // get native function entry point(O0 is a good temp until the very end) - ld_ptr(Address(G5_method, 0, in_bytes(methodOopDesc::native_function_offset())), O0); + ld_ptr(Address(G5_method, 0, in_bytes(Method::native_function_offset())), O0); // for static methods insert the mirror argument const int mirror_offset = in_bytes(Klass::java_mirror_offset()); - __ ld_ptr(Address(G5_method, 0, in_bytes(methodOopDesc:: const_offset())), O1); - __ ld_ptr(Address(O1, 0, in_bytes(constMethodOopDesc::constants_offset())), O1); - __ ld_ptr(Address(O1, 0, constantPoolOopDesc::pool_holder_offset_in_bytes()), O1); + __ ld_ptr(Address(G5_method, 0, in_bytes(Method:: const_offset())), O1); + __ ld_ptr(Address(O1, 0, in_bytes(ConstMethod::constants_offset())), O1); + __ ld_ptr(Address(O1, 0, ConstantPool::pool_holder_offset_in_bytes()), O1); __ ld_ptr(O1, mirror_offset, O1); // where the mirror handle body is allocated: #ifdef ASSERT @@ -1049,11 +1045,11 @@ assert_different_registers(state, prev_state); assert_different_registers(prev_state, G3_scratch); const Register Gtmp = G3_scratch; - const Address constMethod (G5_method, 0, in_bytes(methodOopDesc::const_offset())); - const Address access_flags (G5_method, 0, in_bytes(methodOopDesc::access_flags_offset())); - const Address size_of_parameters(G5_method, 0, in_bytes(methodOopDesc::size_of_parameters_offset())); - const Address max_stack (G5_method, 0, in_bytes(methodOopDesc::max_stack_offset())); - const Address size_of_locals (G5_method, 0, in_bytes(methodOopDesc::size_of_locals_offset())); + const Address constMethod (G5_method, 0, in_bytes(Method::const_offset())); + const Address access_flags (G5_method, 0, in_bytes(Method::access_flags_offset())); + const Address size_of_parameters(G5_method, 0, in_bytes(Method::size_of_parameters_offset())); + const Address max_stack (G5_method, 0, in_bytes(Method::max_stack_offset())); + const Address size_of_locals (G5_method, 0, in_bytes(Method::size_of_locals_offset())); // slop factor is two extra slots on the expression stack so that // we always have room to store a result when returning from a call without parameters @@ -1062,7 +1058,7 @@ const int slop_factor = 2*wordSize; const int fixed_size = ((sizeof(BytecodeInterpreter) + slop_factor) >> LogBytesPerWord) + // what is the slop factor? - //6815692//methodOopDesc::extra_stack_words() + // extra push slots for MH adapters + //6815692//Method::extra_stack_words() + // extra push slots for MH adapters frame::memory_parameter_word_sp_offset + // register save area + param window (native ? frame::interpreter_frame_extra_outgoing_argument_words : 0); // JNI, class @@ -1146,8 +1142,8 @@ if (native) { __ st_ptr(G0, XXX_STATE(_bcp)); } else { - __ ld_ptr(G5_method, in_bytes(methodOopDesc::const_offset()), O2); // get constMethodOop - __ add(O2, in_bytes(constMethodOopDesc::codes_offset()), O2); // get bcp + __ ld_ptr(G5_method, in_bytes(Method::const_offset()), O2); // get ConstMethod* + __ add(O2, in_bytes(ConstMethod::codes_offset()), O2); // get bcp __ st_ptr(O2, XXX_STATE(_bcp)); } @@ -1158,8 +1154,8 @@ __ st(O1, XXX_STATE(_msg)); __ ld_ptr(constMethod, O3); - __ ld_ptr(O3, in_bytes(constMethodOopDesc::constants_offset()), O3); - __ ld_ptr(O3, constantPoolOopDesc::cache_offset_in_bytes(), O2); + __ ld_ptr(O3, in_bytes(ConstMethod::constants_offset()), O3); + __ ld_ptr(O3, ConstantPool::cache_offset_in_bytes(), O2); __ st_ptr(O2, XXX_STATE(_constants)); __ st_ptr(G0, XXX_STATE(_result._to_call._callee)); @@ -1182,9 +1178,9 @@ __ br( Assembler::zero, true, Assembler::pt, got_obj); __ delayed()->ld_ptr(O1, 0, O1); // get receiver for not-static case __ ld_ptr(constMethod, O1); - __ ld_ptr( O1, in_bytes(constMethodOopDesc::constants_offset()), O1); - __ ld_ptr( O1, constantPoolOopDesc::pool_holder_offset_in_bytes(), O1); - // lock the mirror, not the klassOop + __ ld_ptr( O1, in_bytes(ConstMethod::constants_offset()), O1); + __ ld_ptr( O1, ConstantPool::pool_holder_offset_in_bytes(), O1); + // lock the mirror, not the Klass* __ ld_ptr( O1, mirror_offset, O1); __ bind(got_obj); @@ -1213,7 +1209,7 @@ __ lduh(max_stack, O3); // Full size expression stack guarantee(!EnableInvokeDynamic, "no support yet for java.lang.invoke.MethodHandle"); //6815692 //6815692//if (EnableInvokeDynamic) - //6815692// __ inc(O3, methodOopDesc::extra_stack_entries()); + //6815692// __ inc(O3, Method::extra_stack_entries()); __ sll(O3, LogBytesPerWord, O3); __ sub(O2, O3, O3); // __ sub(O3, wordSize, O3); // so prepush doesn't look out of bounds @@ -1267,7 +1263,7 @@ #ifdef ASSERT __ ld_ptr(STATE(_method), L2_scratch); - __ ld(L2_scratch, in_bytes(methodOopDesc::access_flags_offset()), O0); + __ ld(L2_scratch, in_bytes(Method::access_flags_offset()), O0); { Label ok; __ btst(JVM_ACC_SYNCHRONIZED, O0); @@ -1436,7 +1432,7 @@ // // Arguments: // -// ebx: methodOop +// ebx: Method* // ecx: receiver - unused (retrieved from stack as needed) // esi: previous frame manager state (NULL from the call_stub/c1/c2) // @@ -1485,8 +1481,8 @@ // assert_different_registers(state, prev_state); const Register Gtmp = G3_scratch; const Register tmp = O2; - const Address size_of_parameters(G5_method, 0, in_bytes(methodOopDesc::size_of_parameters_offset())); - const Address size_of_locals (G5_method, 0, in_bytes(methodOopDesc::size_of_locals_offset())); + const Address size_of_parameters(G5_method, 0, in_bytes(Method::size_of_parameters_offset())); + const Address size_of_locals (G5_method, 0, in_bytes(Method::size_of_locals_offset())); __ lduh(size_of_parameters, tmp); __ sll(tmp, LogBytesPerWord, Gtmp); // parameter size in bytes @@ -1520,7 +1516,7 @@ address InterpreterGenerator::generate_normal_entry(bool synchronized) { - // G5_method: methodOop + // G5_method: Method* // G2_thread: thread (unused) // Gargs: bottom of args (sender_sp) // O5: sender's sp @@ -1540,11 +1536,11 @@ const Register Gtmp1 = G3_scratch; // const Register Lmirror = L1; // native mirror (native calls only) - const Address constMethod (G5_method, 0, in_bytes(methodOopDesc::const_offset())); - const Address access_flags (G5_method, 0, in_bytes(methodOopDesc::access_flags_offset())); - const Address size_of_parameters(G5_method, 0, in_bytes(methodOopDesc::size_of_parameters_offset())); - const Address max_stack (G5_method, 0, in_bytes(methodOopDesc::max_stack_offset())); - const Address size_of_locals (G5_method, 0, in_bytes(methodOopDesc::size_of_locals_offset())); + const Address constMethod (G5_method, 0, in_bytes(Method::const_offset())); + const Address access_flags (G5_method, 0, in_bytes(Method::access_flags_offset())); + const Address size_of_parameters(G5_method, 0, in_bytes(Method::size_of_parameters_offset())); + const Address max_stack (G5_method, 0, in_bytes(Method::max_stack_offset())); + const Address size_of_locals (G5_method, 0, in_bytes(Method::size_of_locals_offset())); address entry_point = __ pc(); __ mov(G0, prevState); // no current activation @@ -1701,7 +1697,7 @@ __ verify_thread(); __ st_ptr(O0, exception_addr); - // get the methodOop + // get the Method* __ ld_ptr(STATE(_method), G5_method); // if this current frame vanilla or native? @@ -1752,10 +1748,10 @@ __ ld_ptr(STATE(_result._to_call._callee), L4_scratch); // called method __ ld_ptr(STATE(_stack), L1_scratch); // get top of java expr stack - __ lduh(L4_scratch, in_bytes(methodOopDesc::size_of_parameters_offset()), L2_scratch); // get parameter size + __ lduh(L4_scratch, in_bytes(Method::size_of_parameters_offset()), L2_scratch); // get parameter size __ sll(L2_scratch, LogBytesPerWord, L2_scratch ); // parameter size in bytes __ add(L1_scratch, L2_scratch, L1_scratch); // stack destination for result - __ ld(L4_scratch, in_bytes(methodOopDesc::result_index_offset()), L3_scratch); // called method result type index + __ ld(L4_scratch, in_bytes(Method::result_index_offset()), L3_scratch); // called method result type index // tosca is really just native abi __ set((intptr_t)CppInterpreter::_tosca_to_stack, L4_scratch); @@ -1799,7 +1795,7 @@ __ ld_ptr(STATE(_prev_link), L1_scratch); __ ld_ptr(STATE(_method), L2_scratch); // get method just executed - __ ld(L2_scratch, in_bytes(methodOopDesc::result_index_offset()), L2_scratch); + __ ld(L2_scratch, in_bytes(Method::result_index_offset()), L2_scratch); __ tst(L1_scratch); __ brx(Assembler::zero, false, Assembler::pt, return_to_initial_caller); __ delayed()->sll(L2_scratch, LogBytesPerWord, L2_scratch); @@ -2068,17 +2064,17 @@ const int fixed_size = sizeof(BytecodeInterpreter)/wordSize + // interpreter state object frame::memory_parameter_word_sp_offset; // register save area + param window - const int extra_stack = 0; //6815692//methodOopDesc::extra_stack_entries(); + const int extra_stack = 0; //6815692//Method::extra_stack_entries(); return (round_to(max_stack + extra_stack + slop_factor + fixed_size + monitor_size + - (callee_extra_locals * Interpreter::stackElementWords()), WordsPerLong)); + (callee_extra_locals * Interpreter::stackElementWords), WordsPerLong)); } -int AbstractInterpreter::size_top_interpreter_activation(methodOop method) { +int AbstractInterpreter::size_top_interpreter_activation(Method* method) { // See call_stub code int call_stub_size = round_to(7 + frame::memory_parameter_word_sp_offset, @@ -2095,7 +2091,7 @@ void BytecodeInterpreter::layout_interpreterState(interpreterState to_fill, frame* caller, frame* current, - methodOop method, + Method* method, intptr_t* locals, intptr_t* stack, intptr_t* stack_base, @@ -2157,7 +2153,7 @@ // Need +1 here because stack_base points to the word just above the first expr stack entry // and stack_limit is supposed to point to the word just below the last expr stack entry. // See generate_compute_interpreter_state. - int extra_stack = 0; //6815692//methodOopDesc::extra_stack_entries(); + int extra_stack = 0; //6815692//Method::extra_stack_entries(); to_fill->_stack_limit = stack_base - (method->max_stack() + 1 + extra_stack); to_fill->_monitor_base = (BasicObjectLock*) monitor_base; @@ -2175,7 +2171,7 @@ } -int AbstractInterpreter::layout_activation(methodOop method, +int AbstractInterpreter::layout_activation(Method* method, int tempcount, // Number of slots on java expression stack in use int popframe_extra_args, int moncount, // Number of active monitors @@ -2255,7 +2251,7 @@ // statement is needed. // intptr_t* fp = interpreter_frame->fp(); - int local_words = method->max_locals() * Interpreter::stackElementWords(); + int local_words = method->max_locals() * Interpreter::stackElementWords; if (caller->is_compiled_frame()) { locals = fp + frame::register_save_words + local_words - 1; diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/debug_sparc.cpp --- a/src/cpu/sparc/vm/debug_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/debug_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -61,7 +61,7 @@ CodeBlob *b = CodeCache::find_blob((address) pc); if (b != NULL) { if (b->is_nmethod()) { - methodOop m = ((nmethod*)b)->method(); + Method* m = ((nmethod*)b)->method(); int nlocals = m->max_locals(); int nparams = m->size_of_parameters(); tty->print_cr("compiled java method (locals = %d, params = %d)", nlocals, nparams); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/dump_sparc.cpp --- a/src/cpu/sparc/vm/dump_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,125 +0,0 @@ -/* - * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "assembler_sparc.inline.hpp" -#include "memory/compactingPermGenGen.hpp" -#include "memory/generation.inline.hpp" -#include "memory/space.inline.hpp" - - - -// Generate the self-patching vtable method: -// -// This method will be called (as any other Klass virtual method) with -// the Klass itself as the first argument. Example: -// -// oop obj; -// int size = obj->klass()->klass_part()->oop_size(this); -// -// for which the virtual method call is Klass::oop_size(); -// -// The dummy method is called with the Klass object as the first -// operand, and an object as the second argument. -// - -//===================================================================== - -// All of the dummy methods in the vtable are essentially identical, -// differing only by an ordinal constant, and they bear no releationship -// to the original method which the caller intended. Also, there needs -// to be 'vtbl_list_size' instances of the vtable in order to -// differentiate between the 'vtable_list_size' original Klass objects. - -#define __ masm-> - -void CompactingPermGenGen::generate_vtable_methods(void** vtbl_list, - void** vtable, - char** md_top, - char* md_end, - char** mc_top, - char* mc_end) { - - intptr_t vtable_bytes = (num_virtuals * vtbl_list_size) * sizeof(void*); - *(intptr_t *)(*md_top) = vtable_bytes; - *md_top += sizeof(intptr_t); - void** dummy_vtable = (void**)*md_top; - *vtable = dummy_vtable; - *md_top += vtable_bytes; - - guarantee(*md_top <= md_end, "Insufficient space for vtables."); - - // Get ready to generate dummy methods. - - CodeBuffer cb((unsigned char*)*mc_top, mc_end - *mc_top); - MacroAssembler* masm = new MacroAssembler(&cb); - - Label common_code; - for (int i = 0; i < vtbl_list_size; ++i) { - for (int j = 0; j < num_virtuals; ++j) { - dummy_vtable[num_virtuals * i + j] = (void*)masm->pc(); - __ save(SP, -256, SP); - int offset = (i << 8) + j; - Register src = G0; - if (!Assembler::is_simm13(offset)) { - __ sethi(offset, L0); - src = L0; - offset = offset & ((1 << 10) - 1); - } - __ brx(Assembler::always, false, Assembler::pt, common_code); - - // Load L0 with a value indicating vtable/offset pair. - // -- bits[ 7..0] (8 bits) which virtual method in table? - // -- bits[13..8] (6 bits) which virtual method table? - __ delayed()->or3(src, offset, L0); - } - } - - __ bind(common_code); - - // Expecting to be called with the "this" pointer in O0/I0 (where - // "this" is a Klass object). In addition, L0 was set (above) to - // identify the method and table. - - // Look up the correct vtable pointer. - - __ set((intptr_t)vtbl_list, L2); // L2 = address of new vtable list. - __ srl(L0, 8, L3); // Isolate L3 = vtable identifier. - __ sll(L3, LogBytesPerWord, L3); - __ ld_ptr(L2, L3, L3); // L3 = new (correct) vtable pointer. - __ st_ptr(L3, Address(I0, 0)); // Save correct vtable ptr in entry. - - // Restore registers and jump to the correct method; - - __ and3(L0, 255, L4); // Isolate L3 = method offset;. - __ sll(L4, LogBytesPerWord, L4); - __ ld_ptr(L3, L4, L4); // Get address of correct virtual method - __ jmpl(L4, 0, G0); // Jump to correct method. - __ delayed()->restore(); // Restore registers. - - __ flush(); - *mc_top = (char*)__ pc(); - - guarantee(*mc_top <= mc_end, "Insufficient space for method wrappers."); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/frame_sparc.cpp --- a/src/cpu/sparc/vm/frame_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/frame_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -26,7 +26,7 @@ #include "interpreter/interpreter.hpp" #include "memory/resourceArea.hpp" #include "oops/markOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" #include "runtime/frame.inline.hpp" @@ -612,7 +612,7 @@ void frame::pd_gc_epilog() { if (is_interpreted_frame()) { // set constant pool cache entry for interpreter - methodOop m = interpreter_frame_method(); + Method* m = interpreter_frame_method(); *interpreter_frame_cpoolcache_addr() = m->constants()->cache(); } @@ -645,7 +645,7 @@ // first the method - methodOop m = *interpreter_frame_method_addr(); + Method* m = *interpreter_frame_method_addr(); // validate the method we'd find in this potential sender if (!Universe::heap()->is_valid_method(m)) return false; @@ -663,13 +663,9 @@ return false; } - // validate constantPoolCacheOop - - constantPoolCacheOop cp = *interpreter_frame_cache_addr(); - - if (cp == NULL || - !Space::is_aligned(cp) || - !Universe::heap()->is_permanent((void*)cp)) return false; + // validate ConstantPoolCache* + ConstantPoolCache* cp = *interpreter_frame_cache_addr(); + if (cp == NULL || !cp->is_metadata()) return false; // validate locals @@ -729,7 +725,7 @@ BasicType frame::interpreter_frame_result(oop* oop_result, jvalue* value_result) { assert(is_interpreted_frame(), "interpreted frame expected"); - methodOop method = interpreter_frame_method(); + Method* method = interpreter_frame_method(); BasicType type = method->result_type(); if (method->is_native()) { diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/frame_sparc.hpp --- a/src/cpu/sparc/vm/frame_sparc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/frame_sparc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -264,7 +264,7 @@ }; private: - constantPoolCacheOop* interpreter_frame_cpoolcache_addr() const; + ConstantPoolCache** interpreter_frame_cpoolcache_addr() const; #ifndef CC_INTERP diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/frame_sparc.inline.hpp --- a/src/cpu/sparc/vm/frame_sparc.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/frame_sparc.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -138,7 +138,7 @@ return round_to(BasicObjectLock::size(), WordsPerLong); } -inline methodOop* frame::interpreter_frame_method_addr() const { +inline Method** frame::interpreter_frame_method_addr() const { interpreterState istate = get_interpreterState(); return &istate->_method; } @@ -147,12 +147,12 @@ // Constant pool cache // where LcpoolCache is saved: -inline constantPoolCacheOop* frame::interpreter_frame_cpoolcache_addr() const { +inline ConstantPoolCache** frame::interpreter_frame_cpoolcache_addr() const { interpreterState istate = get_interpreterState(); return &istate->_constants; // should really use accessor } -inline constantPoolCacheOop* frame::interpreter_frame_cache_addr() const { +inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const { interpreterState istate = get_interpreterState(); return &istate->_constants; } @@ -213,20 +213,20 @@ return round_to(BasicObjectLock::size(), WordsPerLong); } -inline methodOop* frame::interpreter_frame_method_addr() const { - return (methodOop*)sp_addr_at( Lmethod->sp_offset_in_saved_window()); +inline Method** frame::interpreter_frame_method_addr() const { + return (Method**)sp_addr_at( Lmethod->sp_offset_in_saved_window()); } // Constant pool cache // where LcpoolCache is saved: -inline constantPoolCacheOop* frame::interpreter_frame_cpoolcache_addr() const { - return (constantPoolCacheOop*)sp_addr_at(LcpoolCache->sp_offset_in_saved_window()); +inline ConstantPoolCache** frame::interpreter_frame_cpoolcache_addr() const { + return (ConstantPoolCache**)sp_addr_at(LcpoolCache->sp_offset_in_saved_window()); } -inline constantPoolCacheOop* frame::interpreter_frame_cache_addr() const { - return (constantPoolCacheOop*)sp_addr_at( LcpoolCache->sp_offset_in_saved_window()); +inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const { + return (ConstantPoolCache**)sp_addr_at( LcpoolCache->sp_offset_in_saved_window()); } #endif // CC_INTERP diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/icBuffer_sparc.cpp --- a/src/cpu/sparc/vm/icBuffer_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/icBuffer_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,18 +45,17 @@ #endif } -void InlineCacheBuffer::assemble_ic_buffer_code(address code_begin, oop cached_oop, address entry_point) { +void InlineCacheBuffer::assemble_ic_buffer_code(address code_begin, void* cached_value, address entry_point) { ResourceMark rm; CodeBuffer code(code_begin, ic_stub_code_size()); MacroAssembler* masm = new MacroAssembler(&code); - // note: even though the code contains an embedded oop, we do not need reloc info + // note: even though the code contains an embedded metadata, we do not need reloc info // because - // (1) the oop is old (i.e., doesn't matter for scavenges) + // (1) the metadata is old (i.e., doesn't matter for scavenges) // (2) these ICStubs are removed *before* a GC happens, so the roots disappear - assert(cached_oop == NULL || cached_oop->is_perm(), "must be old oop"); - AddressLiteral cached_oop_addrlit(cached_oop, relocInfo::none); + AddressLiteral cached_value_addrlit((address)cached_value, relocInfo::none); // Force the set to generate the fixed sequence so next_instruction_address works - masm->patchable_set(cached_oop_addrlit, G5_inline_cache_reg); + masm->patchable_set(cached_value_addrlit, G5_inline_cache_reg); assert(G3_scratch != G5_method, "Do not clobber the method oop in the transition stub"); assert(G3_scratch != G5_inline_cache_reg, "Do not clobber the inline cache register in the transition stub"); AddressLiteral entry(entry_point); @@ -73,8 +72,9 @@ } -oop InlineCacheBuffer::ic_buffer_cached_oop(address code_begin) { +void* InlineCacheBuffer::ic_buffer_cached_value(address code_begin) { NativeMovConstReg* move = nativeMovConstReg_at(code_begin); // creation also verifies the object NativeJump* jump = nativeJump_at(move->next_instruction_address()); - return (oop)move->data(); + void* o = (void*)move->data(); + return o; } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/interp_masm_sparc.cpp --- a/src/cpu/sparc/vm/interp_masm_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/interp_masm_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -28,8 +28,8 @@ #include "interpreter/interpreterRuntime.hpp" #include "oops/arrayOop.hpp" #include "oops/markOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "prims/jvmtiThreadState.hpp" @@ -514,17 +514,16 @@ // Reset SP by subtracting more space from Lesp. Label done; - verify_oop(Lmethod); assert(G4_scratch != Gframe_size, "Only you can prevent register aliasing!"); // A native does not need to do this, since its callee does not change SP. - ld(Lmethod, methodOopDesc::access_flags_offset(), Gframe_size); // Load access flags. + ld(Lmethod, Method::access_flags_offset(), Gframe_size); // Load access flags. btst(JVM_ACC_NATIVE, Gframe_size); br(Assembler::notZero, false, Assembler::pt, done); delayed()->nop(); // Compute max expression stack+register save area - lduh(Lmethod, in_bytes(methodOopDesc::max_stack_offset()), Gframe_size); // Load max stack. + lduh(Lmethod, in_bytes(Method::max_stack_offset()), Gframe_size); // Load max stack. add( Gframe_size, frame::memory_parameter_word_sp_offset, Gframe_size ); // @@ -610,7 +609,7 @@ // Assume we want to go compiled if available - ld_ptr(G5_method, in_bytes(methodOopDesc::from_interpreted_offset()), target); + ld_ptr(G5_method, in_bytes(Method::from_interpreted_offset()), target); if (JvmtiExport::can_post_interpreter_events()) { // JVMTI events, such as single-stepping, are implemented partly by avoiding running @@ -622,11 +621,11 @@ const Address interp_only(G2_thread, JavaThread::interp_only_mode_offset()); ld(interp_only, scratch); cmp_zero_and_br(Assembler::notZero, scratch, skip_compiled_code, true, Assembler::pn); - delayed()->ld_ptr(G5_method, in_bytes(methodOopDesc::interpreter_entry_offset()), target); + delayed()->ld_ptr(G5_method, in_bytes(Method::interpreter_entry_offset()), target); bind(skip_compiled_code); } - // the i2c_adapters need methodOop in G5_method (right? %%%) + // the i2c_adapters need Method* in G5_method (right? %%%) // do the call #ifdef ASSERT { @@ -725,20 +724,18 @@ if (should_set_CC == set_CC) tst(Rdst); } - -void InterpreterMacroAssembler::get_cache_index_at_bcp(Register cache, Register tmp, +void InterpreterMacroAssembler::get_cache_index_at_bcp(Register temp, Register index, int bcp_offset, size_t index_size) { assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); if (index_size == sizeof(u2)) { - get_2_byte_integer_at_bcp(bcp_offset, cache, tmp, Unsigned); + get_2_byte_integer_at_bcp(bcp_offset, temp, index, Unsigned); } else if (index_size == sizeof(u4)) { assert(EnableInvokeDynamic, "giant index used only for JSR 292"); - get_4_byte_integer_at_bcp(bcp_offset, cache, tmp); - assert(constantPoolCacheOopDesc::decode_secondary_index(~123) == 123, "else change next line"); - xor3(tmp, -1, tmp); // convert to plain index + get_4_byte_integer_at_bcp(bcp_offset, temp, index); + assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line"); + xor3(index, -1, index); // convert to plain index } else if (index_size == sizeof(u1)) { - assert(EnableInvokeDynamic, "tiny index used only for JSR 292"); - ldub(Lbcp, bcp_offset, tmp); + ldub(Lbcp, bcp_offset, index); } else { ShouldNotReachHere(); } @@ -765,7 +762,7 @@ int bcp_offset, size_t index_size) { get_cache_and_index_at_bcp(cache, temp, bcp_offset, index_size); - ld_ptr(cache, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::indices_offset(), bytecode); + ld_ptr(cache, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::indices_offset(), bytecode); const int shift_count = (1 + byte_no) * BitsPerByte; assert((byte_no == TemplateTable::f1_byte && shift_count == ConstantPoolCacheEntry::bytecode_1_shift) || (byte_no == TemplateTable::f2_byte && shift_count == ConstantPoolCacheEntry::bytecode_2_shift), @@ -790,12 +787,32 @@ // and from word index to byte offset sll(tmp, exact_log2(in_words(ConstantPoolCacheEntry::size()) * BytesPerWord), tmp); // skip past the header - add(tmp, in_bytes(constantPoolCacheOopDesc::base_offset()), tmp); + add(tmp, in_bytes(ConstantPoolCache::base_offset()), tmp); // construct pointer to cache entry add(LcpoolCache, tmp, cache); } +// Load object from cpool->resolved_references(index) +void InterpreterMacroAssembler::load_resolved_reference_at_index( + Register result, Register index) { + assert_different_registers(result, index); + assert_not_delayed(); + // convert from field index to resolved_references() index and from + // word index to byte offset. Since this is a java object, it can be compressed + Register tmp = index; // reuse + sll(index, LogBytesPerHeapOop, tmp); + get_constant_pool(result); + // load pointer for resolved_references[] objArray + ld_ptr(result, ConstantPool::resolved_references_offset_in_bytes(), result); + // JNIHandles::resolve(result) + ld_ptr(result, 0, result); + // Add in the index + add(result, tmp, result); + load_heap_oop(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT), result); +} + + // Generate a subtype check: branch to ok_is_subtype if sub_klass is // a subtype of super_klass. Blows registers Rsuper_klass, Rsub_klass, tmp1, tmp2. void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass, @@ -939,25 +956,25 @@ void InterpreterMacroAssembler::get_const(Register Rdst) { - ld_ptr(Lmethod, in_bytes(methodOopDesc::const_offset()), Rdst); + ld_ptr(Lmethod, in_bytes(Method::const_offset()), Rdst); } void InterpreterMacroAssembler::get_constant_pool(Register Rdst) { get_const(Rdst); - ld_ptr(Rdst, in_bytes(constMethodOopDesc::constants_offset()), Rdst); + ld_ptr(Rdst, in_bytes(ConstMethod::constants_offset()), Rdst); } void InterpreterMacroAssembler::get_constant_pool_cache(Register Rdst) { get_constant_pool(Rdst); - ld_ptr(Rdst, constantPoolOopDesc::cache_offset_in_bytes(), Rdst); + ld_ptr(Rdst, ConstantPool::cache_offset_in_bytes(), Rdst); } void InterpreterMacroAssembler::get_cpool_and_tags(Register Rcpool, Register Rtags) { get_constant_pool(Rcpool); - ld_ptr(Rcpool, constantPoolOopDesc::tags_offset_in_bytes(), Rtags); + ld_ptr(Rcpool, ConstantPool::tags_offset_in_bytes(), Rtags); } @@ -985,7 +1002,7 @@ stbool(G0, do_not_unlock_if_synchronized); // reset the flag // check if synchronized method - const Address access_flags(Lmethod, methodOopDesc::access_flags_offset()); + const Address access_flags(Lmethod, Method::access_flags_offset()); interp_verify_oop(Otos_i, state, __FILE__, __LINE__); push(state); // save tos ld(access_flags, G3_scratch); // Load access flags. @@ -1121,7 +1138,6 @@ notify_method_exit(false, state, NotifyJVMTI); interp_verify_oop(Otos_i, state, __FILE__, __LINE__); - verify_oop(Lmethod); verify_thread(); // return tos @@ -1295,16 +1311,16 @@ #ifndef CC_INTERP -// Get the method data pointer from the methodOop and set the +// Get the method data pointer from the Method* and set the // specified register to its value. void InterpreterMacroAssembler::set_method_data_pointer() { assert(ProfileInterpreter, "must be profiling interpreter"); Label get_continue; - ld_ptr(Lmethod, in_bytes(methodOopDesc::method_data_offset()), ImethodDataPtr); + ld_ptr(Lmethod, in_bytes(Method::method_data_offset()), ImethodDataPtr); test_method_data_pointer(get_continue); - add(ImethodDataPtr, in_bytes(methodDataOopDesc::data_offset()), ImethodDataPtr); + add(ImethodDataPtr, in_bytes(MethodData::data_offset()), ImethodDataPtr); bind(get_continue); } @@ -1315,10 +1331,10 @@ Label zero_continue; // Test MDO to avoid the call if it is NULL. - ld_ptr(Lmethod, in_bytes(methodOopDesc::method_data_offset()), ImethodDataPtr); + ld_ptr(Lmethod, in_bytes(Method::method_data_offset()), ImethodDataPtr); test_method_data_pointer(zero_continue); call_VM_leaf(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::bcp_to_di), Lmethod, Lbcp); - add(ImethodDataPtr, in_bytes(methodDataOopDesc::data_offset()), ImethodDataPtr); + add(ImethodDataPtr, in_bytes(MethodData::data_offset()), ImethodDataPtr); add(ImethodDataPtr, O0, ImethodDataPtr); bind(zero_continue); } @@ -1339,8 +1355,8 @@ // If the mdp is valid, it will point to a DataLayout header which is // consistent with the bcp. The converse is highly probable also. lduh(ImethodDataPtr, in_bytes(DataLayout::bci_offset()), G3_scratch); - ld_ptr(Lmethod, methodOopDesc::const_offset(), O5); - add(G3_scratch, in_bytes(constMethodOopDesc::codes_offset()), G3_scratch); + ld_ptr(Lmethod, Method::const_offset(), O5); + add(G3_scratch, in_bytes(ConstMethod::codes_offset()), G3_scratch); add(G3_scratch, O5, G3_scratch); cmp(Lbcp, G3_scratch); brx(Assembler::equal, false, Assembler::pt, verify_continue); @@ -2072,14 +2088,14 @@ void InterpreterMacroAssembler::increment_invocation_counter( Register Rtmp, Register Rtmp2 ) { assert(UseCompiler, "incrementing must be useful"); #ifdef CC_INTERP - Address inv_counter(G5_method, methodOopDesc::invocation_counter_offset() + + Address inv_counter(G5_method, Method::invocation_counter_offset() + InvocationCounter::counter_offset()); - Address be_counter (G5_method, methodOopDesc::backedge_counter_offset() + + Address be_counter (G5_method, Method::backedge_counter_offset() + InvocationCounter::counter_offset()); #else - Address inv_counter(Lmethod, methodOopDesc::invocation_counter_offset() + + Address inv_counter(Lmethod, Method::invocation_counter_offset() + InvocationCounter::counter_offset()); - Address be_counter (Lmethod, methodOopDesc::backedge_counter_offset() + + Address be_counter (Lmethod, Method::backedge_counter_offset() + InvocationCounter::counter_offset()); #endif /* CC_INTERP */ int delta = InvocationCounter::count_increment; @@ -2108,14 +2124,14 @@ void InterpreterMacroAssembler::increment_backedge_counter( Register Rtmp, Register Rtmp2 ) { assert(UseCompiler, "incrementing must be useful"); #ifdef CC_INTERP - Address be_counter (G5_method, methodOopDesc::backedge_counter_offset() + + Address be_counter (G5_method, Method::backedge_counter_offset() + InvocationCounter::counter_offset()); - Address inv_counter(G5_method, methodOopDesc::invocation_counter_offset() + + Address inv_counter(G5_method, Method::invocation_counter_offset() + InvocationCounter::counter_offset()); #else - Address be_counter (Lmethod, methodOopDesc::backedge_counter_offset() + + Address be_counter (Lmethod, Method::backedge_counter_offset() + InvocationCounter::counter_offset()); - Address inv_counter(Lmethod, methodOopDesc::invocation_counter_offset() + + Address inv_counter(Lmethod, Method::invocation_counter_offset() + InvocationCounter::counter_offset()); #endif /* CC_INTERP */ int delta = InvocationCounter::count_increment; @@ -2152,7 +2168,7 @@ cmp_and_br_short(backedge_count, Rtmp, Assembler::lessUnsigned, Assembler::pt, did_not_overflow); // When ProfileInterpreter is on, the backedge_count comes from the - // methodDataOop, which value does not get reset on the call to + // MethodData*, which value does not get reset on the call to // frequency_counter_overflow(). To avoid excessive calls to the overflow // routine while the method is being compiled, add a second test to make sure // the overflow function is called only once every overflow_frequency. @@ -2212,10 +2228,10 @@ // local helper function for the verify_oop_or_return_address macro -static bool verify_return_address(methodOopDesc* m, int bci) { +static bool verify_return_address(Method* m, int bci) { #ifndef PRODUCT address pc = (address)(m->constMethod()) - + in_bytes(constMethodOopDesc::codes_offset()) + bci; + + in_bytes(ConstMethod::codes_offset()) + bci; // assume it is a valid return address if it is inside m and is preceded by a jsr if (!m->contains(pc)) return false; address jsr_pc; diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/interp_masm_sparc.hpp --- a/src/cpu/sparc/vm/interp_masm_sparc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/interp_masm_sparc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -188,11 +188,15 @@ Register Rdst, setCCOrNot should_set_CC = dont_set_CC ); + // Note: "get_cache_and_index" really means "get the index, use it to get the cache entry, and throw away the index". void get_cache_and_index_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2)); void get_cache_and_index_and_bytecode_at_bcp(Register cache, Register temp, Register bytecode, int byte_no, int bcp_offset, size_t index_size = sizeof(u2)); void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2)); - void get_cache_index_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2)); + // Note: This one does not fetch the cache. The first argument is a temp which may be killed. + void get_cache_index_at_bcp(Register temp, Register index, int bcp_offset, size_t index_size = sizeof(u2)); + // load cpool->resolved_references(index); + void load_resolved_reference_at_index(Register result, Register index); // common code diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/interpreterRT_sparc.cpp --- a/src/cpu/sparc/vm/interpreterRT_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/interpreterRT_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ #include "interpreter/interpreterRuntime.hpp" #include "memory/allocation.inline.hpp" #include "memory/universe.inline.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/icache.hpp" @@ -228,7 +228,7 @@ IRT_ENTRY(address, InterpreterRuntime::slow_signature_handler( JavaThread* thread, - methodOopDesc* method, + Method* method, intptr_t* from, intptr_t* to )) methodHandle m(thread, method); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/interpreter_sparc.cpp --- a/src/cpu/sparc/vm/interpreter_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/interpreter_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,8 +30,8 @@ #include "interpreter/interpreterRuntime.hpp" #include "interpreter/templateTable.hpp" #include "oops/arrayOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" @@ -273,7 +273,7 @@ // // The entry code below assumes that the following registers are set // when coming in: -// G5_method: holds the methodOop of the method to call +// G5_method: holds the Method* of the method to call // Lesp: points to the TOS of the callers expression stack // after having pushed all the parameters // diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/metaspaceShared_sparc.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cpu/sparc/vm/metaspaceShared_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "assembler_sparc.inline.hpp" +#include "memory/metaspaceShared.hpp" + +// Generate the self-patching vtable method: +// +// This method will be called (as any other Klass virtual method) with +// the Klass itself as the first argument. Example: +// +// oop obj; +// int size = obj->klass()->oop_size(this); +// +// for which the virtual method call is Klass::oop_size(); +// +// The dummy method is called with the Klass object as the first +// operand, and an object as the second argument. +// + +//===================================================================== + +// All of the dummy methods in the vtable are essentially identical, +// differing only by an ordinal constant, and they bear no relationship +// to the original method which the caller intended. Also, there needs +// to be 'vtbl_list_size' instances of the vtable in order to +// differentiate between the 'vtable_list_size' original Klass objects. + +#define __ masm-> + +void MetaspaceShared::generate_vtable_methods(void** vtbl_list, + void** vtable, + char** md_top, + char* md_end, + char** mc_top, + char* mc_end) { + + intptr_t vtable_bytes = (num_virtuals * vtbl_list_size) * sizeof(void*); + *(intptr_t *)(*md_top) = vtable_bytes; + *md_top += sizeof(intptr_t); + void** dummy_vtable = (void**)*md_top; + *vtable = dummy_vtable; + *md_top += vtable_bytes; + + guarantee(*md_top <= md_end, "Insufficient space for vtables."); + + // Get ready to generate dummy methods. + + CodeBuffer cb((unsigned char*)*mc_top, mc_end - *mc_top); + MacroAssembler* masm = new MacroAssembler(&cb); + + Label common_code; + for (int i = 0; i < vtbl_list_size; ++i) { + for (int j = 0; j < num_virtuals; ++j) { + dummy_vtable[num_virtuals * i + j] = (void*)masm->pc(); + __ save(SP, -256, SP); + int offset = (i << 8) + j; + Register src = G0; + if (!Assembler::is_simm13(offset)) { + __ sethi(offset, L0); + src = L0; + offset = offset & ((1 << 10) - 1); + } + __ brx(Assembler::always, false, Assembler::pt, common_code); + + // Load L0 with a value indicating vtable/offset pair. + // -- bits[ 7..0] (8 bits) which virtual method in table? + // -- bits[13..8] (6 bits) which virtual method table? + __ delayed()->or3(src, offset, L0); + } + } + + __ bind(common_code); + + // Expecting to be called with the "this" pointer in O0/I0 (where + // "this" is a Klass object). In addition, L0 was set (above) to + // identify the method and table. + + // Look up the correct vtable pointer. + + __ set((intptr_t)vtbl_list, L2); // L2 = address of new vtable list. + __ srl(L0, 8, L3); // Isolate L3 = vtable identifier. + __ sll(L3, LogBytesPerWord, L3); + __ ld_ptr(L2, L3, L3); // L3 = new (correct) vtable pointer. + __ st_ptr(L3, Address(I0, 0)); // Save correct vtable ptr in entry. + + // Restore registers and jump to the correct method; + + __ and3(L0, 255, L4); // Isolate L3 = method offset;. + __ sll(L4, LogBytesPerWord, L4); + __ ld_ptr(L3, L4, L4); // Get address of correct virtual method + __ jmpl(L4, 0, G0); // Jump to correct method. + __ delayed()->restore(); // Restore registers. + + __ flush(); + *mc_top = (char*)__ pc(); + + guarantee(*mc_top <= mc_end, "Insufficient space for method wrappers."); +} diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/methodHandles_sparc.cpp --- a/src/cpu/sparc/vm/methodHandles_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/methodHandles_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -46,9 +46,9 @@ void MethodHandles::load_klass_from_Class(MacroAssembler* _masm, Register klass_reg, Register temp_reg, Register temp2_reg) { if (VerifyMethodHandles) - verify_klass(_masm, klass_reg, SystemDictionaryHandles::Class_klass(), temp_reg, temp2_reg, + verify_klass(_masm, klass_reg, SystemDictionary::WK_KLASS_ENUM_NAME(java_lang_Class), temp_reg, temp2_reg, "MH argument is a Class"); - __ load_heap_oop(Address(klass_reg, java_lang_Class::klass_offset_in_bytes()), klass_reg); + __ ld_ptr(Address(klass_reg, java_lang_Class::klass_offset_in_bytes()), klass_reg); } #ifdef ASSERT @@ -63,13 +63,11 @@ #ifdef ASSERT void MethodHandles::verify_klass(MacroAssembler* _masm, - Register obj_reg, KlassHandle klass, + Register obj_reg, SystemDictionary::WKID klass_id, Register temp_reg, Register temp2_reg, const char* error_message) { - oop* klass_addr = klass.raw_value(); - assert(klass_addr >= SystemDictionaryHandles::Object_klass().raw_value() && - klass_addr <= SystemDictionaryHandles::Long_klass().raw_value(), - "must be one of the SystemDictionaryHandles"); + Klass** klass_addr = SystemDictionary::well_known_klass_addr(klass_id); + KlassHandle klass = SystemDictionary::well_known_klass(klass_id); bool did_save = false; if (temp_reg == noreg || temp2_reg == noreg) { temp_reg = L1; @@ -83,12 +81,12 @@ __ verify_oop(obj_reg); __ br_null_short(obj_reg, Assembler::pn, L_bad); __ load_klass(obj_reg, temp_reg); - __ set(ExternalAddress(klass_addr), temp2_reg); + __ set(ExternalAddress((Metadata**)klass_addr), temp2_reg); __ ld_ptr(Address(temp2_reg, 0), temp2_reg); __ cmp_and_brx_short(temp_reg, temp2_reg, Assembler::equal, Assembler::pt, L_ok); intptr_t super_check_offset = klass->super_check_offset(); __ ld_ptr(Address(temp_reg, super_check_offset), temp_reg); - __ set(ExternalAddress(klass_addr), temp2_reg); + __ set(ExternalAddress((Metadata**)klass_addr), temp2_reg); __ ld_ptr(Address(temp2_reg, 0), temp2_reg); __ cmp_and_brx_short(temp_reg, temp2_reg, Assembler::equal, Assembler::pt, L_ok); __ BIND(L_bad); @@ -123,7 +121,6 @@ void MethodHandles::jump_from_method_handle(MacroAssembler* _masm, Register method, Register target, Register temp, bool for_compiler_entry) { assert(method == G5_method, "interpreter calling convention"); - __ verify_oop(method); if (!for_compiler_entry && JvmtiExport::can_post_interpreter_events()) { Label run_compiled_code; @@ -134,7 +131,7 @@ const Address interp_only(G2_thread, JavaThread::interp_only_mode_offset()); __ ld(interp_only, temp); __ cmp_and_br_short(temp, 0, Assembler::zero, Assembler::pt, run_compiled_code); - __ ld_ptr(G5_method, in_bytes(methodOopDesc::interpreter_entry_offset()), target); + __ ld_ptr(G5_method, in_bytes(Method::interpreter_entry_offset()), target); __ jmp(target, 0); __ delayed()->nop(); __ BIND(run_compiled_code); @@ -142,8 +139,8 @@ // it doesn't matter, since this is interpreter code. } - const ByteSize entry_offset = for_compiler_entry ? methodOopDesc::from_compiled_offset() : - methodOopDesc::from_interpreted_offset(); + const ByteSize entry_offset = for_compiler_entry ? Method::from_compiled_offset() : + Method::from_interpreted_offset(); __ ld_ptr(G5_method, in_bytes(entry_offset), target); __ jmp(target, 0); __ delayed()->nop(); @@ -167,16 +164,15 @@ __ verify_oop(method_temp); __ load_heap_oop(Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes())), method_temp); __ verify_oop(method_temp); - // the following assumes that a methodOop is normally compressed in the vmtarget field: - __ load_heap_oop(Address(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes())), method_temp); - __ verify_oop(method_temp); + // the following assumes that a Method* is normally compressed in the vmtarget field: + __ ld_ptr(Address(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes())), method_temp); if (VerifyMethodHandles && !for_compiler_entry) { // make sure recv is already on stack - __ load_sized_value(Address(method_temp, methodOopDesc::size_of_parameters_offset()), + __ load_sized_value(Address(method_temp, Method::size_of_parameters_offset()), temp2, sizeof(u2), /*is_signed*/ false); - // assert(sizeof(u2) == sizeof(methodOopDesc::_size_of_parameters), ""); + // assert(sizeof(u2) == sizeof(Method::_size_of_parameters), ""); Label L; __ ld_ptr(__ argument_address(temp2, temp2, -1), temp2); __ cmp_and_br_short(temp2, recv, Assembler::equal, Assembler::pt, L); @@ -204,7 +200,7 @@ } // I5_savedSP/O5_savedSP: sender SP (must preserve; see prepare_to_jump_from_interpreted) - // G5_method: methodOop + // G5_method: Method* // G4 (Gargs): incoming argument list (must preserve) // O0: used as temp to hold mh or receiver // O1, O4: garbage temps, blown away @@ -220,14 +216,14 @@ if (VerifyMethodHandles) { Label L; BLOCK_COMMENT("verify_intrinsic_id {"); - __ ldub(Address(G5_method, methodOopDesc::intrinsic_id_offset_in_bytes()), O1_scratch); + __ ldub(Address(G5_method, Method::intrinsic_id_offset_in_bytes()), O1_scratch); __ cmp_and_br_short(O1_scratch, (int) iid, Assembler::equal, Assembler::pt, L); if (iid == vmIntrinsics::_linkToVirtual || iid == vmIntrinsics::_linkToSpecial) { // could do this for all kinds, but would explode assembly code size - trace_method_handle(_masm, "bad methodOop::intrinsic_id"); + trace_method_handle(_masm, "bad Method*::intrinsic_id"); } - __ STOP("bad methodOop::intrinsic_id"); + __ STOP("bad Method*::intrinsic_id"); __ bind(L); BLOCK_COMMENT("} verify_intrinsic_id"); } @@ -237,10 +233,10 @@ int ref_kind = signature_polymorphic_intrinsic_ref_kind(iid); assert(ref_kind != 0 || iid == vmIntrinsics::_invokeBasic, "must be _invokeBasic or a linkTo intrinsic"); if (ref_kind == 0 || MethodHandles::ref_kind_has_receiver(ref_kind)) { - __ load_sized_value(Address(G5_method, methodOopDesc::size_of_parameters_offset()), + __ load_sized_value(Address(G5_method, Method::size_of_parameters_offset()), O4_param_size, sizeof(u2), /*is_signed*/ false); - // assert(sizeof(u2) == sizeof(methodOopDesc::_size_of_parameters), ""); + // assert(sizeof(u2) == sizeof(Method::_size_of_parameters), ""); O4_first_arg_addr = __ argument_address(O4_param_size, O4_param_size, -1); } else { DEBUG_ONLY(O4_param_size = noreg); @@ -331,7 +327,7 @@ // The method is a member invoker used by direct method handles. if (VerifyMethodHandles) { // make sure the trailing argument really is a MemberName (caller responsibility) - verify_klass(_masm, member_reg, SystemDictionaryHandles::MemberName_klass(), + verify_klass(_masm, member_reg, SystemDictionary::WK_KLASS_ENUM_NAME(MemberName_klass), temp1, temp2, "MemberName required for invokeVirtual etc."); } @@ -390,7 +386,7 @@ if (VerifyMethodHandles) { verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3); } - __ load_heap_oop(member_vmtarget, G5_method); + __ ld_ptr(member_vmtarget, G5_method); method_is_live = true; break; @@ -398,7 +394,7 @@ if (VerifyMethodHandles) { verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3); } - __ load_heap_oop(member_vmtarget, G5_method); + __ ld_ptr(member_vmtarget, G5_method); method_is_live = true; break; @@ -425,7 +421,7 @@ // Note: The verifier invariants allow us to ignore MemberName.clazz and vmtarget // at this point. And VerifyMethodHandles has already checked clazz, if needed. - // get target methodOop & entry point + // get target Method* & entry point __ lookup_virtual_method(temp1_recv_klass, temp2_index, G5_method); method_is_live = true; break; diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/methodHandles_sparc.hpp --- a/src/cpu/sparc/vm/methodHandles_sparc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/methodHandles_sparc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -35,13 +35,13 @@ static void load_klass_from_Class(MacroAssembler* _masm, Register klass_reg, Register temp_reg, Register temp2_reg); static void verify_klass(MacroAssembler* _masm, - Register obj_reg, KlassHandle klass, + Register obj_reg, SystemDictionary::WKID klass_id, Register temp_reg, Register temp2_reg, const char* error_message = "wrong klass") NOT_DEBUG_RETURN; static void verify_method_handle(MacroAssembler* _masm, Register mh_reg, Register temp_reg, Register temp2_reg) { - verify_klass(_masm, mh_reg, SystemDictionaryHandles::MethodHandle_klass(), + verify_klass(_masm, mh_reg, SystemDictionary::WK_KLASS_ENUM_NAME(java_lang_invoke_MethodHandle), temp_reg, temp2_reg, "reference is a MH"); } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/nativeInst_sparc.cpp --- a/src/cpu/sparc/vm/nativeInst_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/nativeInst_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -300,7 +300,7 @@ void NativeMovConstReg::verify() { NativeInstruction::verify(); - // make sure code pattern is actually a "set_oop" synthetic instruction + // make sure code pattern is actually a "set_metadata" synthetic instruction // see MacroAssembler::set_oop() int i0 = long_at(sethi_offset); int i1 = long_at(add_offset); @@ -312,11 +312,11 @@ is_op3(i1, Assembler::add_op3, Assembler::arith_op) && inv_immed(i1) && (unsigned)get_simm13(i1) < (1 << 10) && rd == inv_rs1(i1) && rd == inv_rd(i1))) { - fatal("not a set_oop"); + fatal("not a set_metadata"); } #else if (!is_op2(i0, Assembler::sethi_op2) && rd != G0 ) { - fatal("not a set_oop"); + fatal("not a set_metadata"); } #endif } @@ -352,6 +352,7 @@ if (nm != NULL) { RelocIterator iter(nm, instruction_address(), next_instruction_address()); oop* oop_addr = NULL; + Metadata** metadata_addr = NULL; while (iter.next()) { if (iter.type() == relocInfo::oop_type) { oop_Relocation *r = iter.oop_reloc(); @@ -362,6 +363,15 @@ assert(oop_addr == r->oop_addr(), "must be only one set-oop here"); } } + if (iter.type() == relocInfo::metadata_type) { + metadata_Relocation *r = iter.metadata_reloc(); + if (metadata_addr == NULL) { + metadata_addr = r->metadata_addr(); + *metadata_addr = (Metadata*)x; + } else { + assert(metadata_addr == r->metadata_addr(), "must be only one set-metadata here"); + } + } } } } @@ -429,7 +439,7 @@ is_op3(i2, Assembler::add_op3, Assembler::arith_op) && inv_immed(i2) && (unsigned)get_simm13(i2) < (1 << 10) && rd0 == inv_rs1(i2) && rd0 == inv_rd(i2))) { - fatal("not a set_oop"); + fatal("not a set_metadata"); } } @@ -462,6 +472,7 @@ if (nm != NULL) { RelocIterator iter(nm, instruction_address(), next_instruction_address()); oop* oop_addr = NULL; + Metadata** metadata_addr = NULL; while (iter.next()) { if (iter.type() == relocInfo::oop_type) { oop_Relocation *r = iter.oop_reloc(); @@ -472,6 +483,15 @@ assert(oop_addr == r->oop_addr(), "must be only one set-oop here"); } } + if (iter.type() == relocInfo::metadata_type) { + metadata_Relocation *r = iter.metadata_reloc(); + if (metadata_addr == NULL) { + metadata_addr = r->metadata_addr(); + *metadata_addr = (Metadata*)x; + } else { + assert(metadata_addr == r->metadata_addr(), "must be only one set-metadata here"); + } + } } } } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/nativeInst_sparc.hpp --- a/src/cpu/sparc/vm/nativeInst_sparc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/nativeInst_sparc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -246,7 +246,7 @@ assert(is_op2(*(unsigned int *)pc, Assembler::sethi_op2), "must be sethi"); intptr_t hi = (intptr_t)gethi( (unsigned int *)pc ); intptr_t lo = (intptr_t)get_simm13(arith_insn); - assert((unsigned)lo < (1 << 10), "offset field of set_oop must be 10 bits"); + assert((unsigned)lo < (1 << 10), "offset field of set_metadata must be 10 bits"); return hi | lo; } @@ -261,7 +261,7 @@ assert(is_op2(sethi_insn, Assembler::sethi_op2), "must be sethi"); int hi = Assembler::inv_hi22(sethi_insn); int lo = get_simm13(arith_insn); - assert((unsigned)lo < (1 << 10), "offset field of set_oop must be 10 bits"); + assert((unsigned)lo < (1 << 10), "offset field of set_metadata must be 10 bits"); return hi | lo; } @@ -508,9 +508,9 @@ #endif // _LP64 -// An interface for accessing/manipulating native set_oop imm, reg instructions. +// An interface for accessing/manipulating native set_metadata imm, reg instructions. // (used to manipulate inlined data references, etc.) -// set_oop imm, reg +// set_metadata imm, reg // == sethi %hi22(imm), reg ; add reg, %lo10(imm), reg class NativeMovConstReg; inline NativeMovConstReg* nativeMovConstReg_at(address address); @@ -564,9 +564,9 @@ }; -// An interface for accessing/manipulating native set_oop imm, reg instructions. +// An interface for accessing/manipulating native set_metadata imm, reg instructions. // (used to manipulate inlined data references, etc.) -// set_oop imm, reg +// set_metadata imm, reg // == sethi %hi22(imm), reg; nop; add reg, %lo10(imm), reg // // Note that it is identical to NativeMovConstReg with the exception of a nop between the diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/relocInfo_sparc.cpp --- a/src/cpu/sparc/vm/relocInfo_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/relocInfo_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -229,3 +229,6 @@ void poll_return_Relocation::fix_relocation_after_move(const CodeBuffer* src, CodeBuffer* dest) { } + +void metadata_Relocation::pd_fix_value(address x) { +} diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/sharedRuntime_sparc.cpp --- a/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -29,7 +29,7 @@ #include "code/icBuffer.hpp" #include "code/vtableStubs.hpp" #include "interpreter/interpreter.hpp" -#include "oops/compiledICHolderOop.hpp" +#include "oops/compiledICHolder.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/vframeArray.hpp" @@ -599,10 +599,10 @@ // Patch the callers callsite with entry to compiled code if it exists. void AdapterGenerator::patch_callers_callsite() { Label L; - __ ld_ptr(G5_method, in_bytes(methodOopDesc::code_offset()), G3_scratch); + __ ld_ptr(G5_method, in_bytes(Method::code_offset()), G3_scratch); __ br_null(G3_scratch, false, Assembler::pt, L); // Schedule the branch target address early. - __ delayed()->ld_ptr(G5_method, in_bytes(methodOopDesc::interpreter_entry_offset()), G3_scratch); + __ delayed()->ld_ptr(G5_method, in_bytes(Method::interpreter_entry_offset()), G3_scratch); // Call into the VM to patch the caller, then jump to compiled callee __ save_frame(4); // Args in compiled layout; do not blow them @@ -611,7 +611,7 @@ // G2: global allocated to TLS // G3: used in inline cache check (scratch) // G4: 2nd Long arg (32bit build); - // G5: used in inline cache check (methodOop) + // G5: used in inline cache check (Method*) // The longs must go to the stack by hand since in the 32 bit build they can be trashed by window ops. @@ -645,7 +645,7 @@ __ ldx(FP, -8 + STACK_BIAS, G1); __ ldx(FP, -16 + STACK_BIAS, G4); __ mov(L5, G5_method); - __ ld_ptr(G5_method, in_bytes(methodOopDesc::interpreter_entry_offset()), G3_scratch); + __ ld_ptr(G5_method, in_bytes(Method::interpreter_entry_offset()), G3_scratch); #endif /* _LP64 */ __ restore(); // Restore args @@ -853,7 +853,7 @@ #ifdef _LP64 // Need to reload G3_scratch, used for temporary displacements. - __ ld_ptr(G5_method, in_bytes(methodOopDesc::interpreter_entry_offset()), G3_scratch); + __ ld_ptr(G5_method, in_bytes(Method::interpreter_entry_offset()), G3_scratch); // Pass O5_savedSP as an argument to the interpreter. // The interpreter will restore SP to this value before returning. @@ -1046,7 +1046,7 @@ // Will jump to the compiled code just as if compiled code was doing it. // Pre-load the register-jump target early, to schedule it better. - __ ld_ptr(G5_method, in_bytes(methodOopDesc::from_compiled_offset()), G3); + __ ld_ptr(G5_method, in_bytes(Method::from_compiled_offset()), G3); // Now generate the shuffle code. Pick up all register args and move the // rest through G1_scratch. @@ -1163,7 +1163,7 @@ #ifndef _LP64 if (g3_crushed) { // Rats load was wasted, at least it is in cache... - __ ld_ptr(G5_method, methodOopDesc::from_compiled_offset(), G3); + __ ld_ptr(G5_method, Method::from_compiled_offset(), G3); } #endif /* _LP64 */ @@ -1212,7 +1212,7 @@ // ------------------------------------------------------------------------- - // Generate a C2I adapter. On entry we know G5 holds the methodOop. The + // Generate a C2I adapter. On entry we know G5 holds the Method*. The // args start out packed in the compiled layout. They need to be unpacked // into the interpreter layout. This will almost always require some stack // space. We grow the current (compiled) stack, then repack the args. We @@ -1232,25 +1232,21 @@ AddressLiteral ic_miss(SharedRuntime::get_ic_miss_stub()); __ verify_oop(O0); - __ verify_oop(G5_method); __ load_klass(O0, G3_scratch); - __ verify_oop(G3_scratch); #if !defined(_LP64) && defined(COMPILER2) __ save(SP, -frame::register_save_words*wordSize, SP); - __ ld_ptr(G5_method, compiledICHolderOopDesc::holder_klass_offset(), R_temp); - __ verify_oop(R_temp); + __ ld_ptr(G5_method, CompiledICHolder::holder_klass_offset(), R_temp); __ cmp(G3_scratch, R_temp); __ restore(); #else - __ ld_ptr(G5_method, compiledICHolderOopDesc::holder_klass_offset(), R_temp); - __ verify_oop(R_temp); + __ ld_ptr(G5_method, CompiledICHolder::holder_klass_offset(), R_temp); __ cmp(G3_scratch, R_temp); #endif Label ok, ok2; __ brx(Assembler::equal, false, Assembler::pt, ok); - __ delayed()->ld_ptr(G5_method, compiledICHolderOopDesc::holder_method_offset(), G5_method); + __ delayed()->ld_ptr(G5_method, CompiledICHolder::holder_method_offset(), G5_method); __ jump_to(ic_miss, G3_scratch); __ delayed()->nop(); @@ -1258,10 +1254,10 @@ // Method might have been compiled since the call site was patched to // interpreted if that is the case treat it as a miss so we can get // the call site corrected. - __ ld_ptr(G5_method, in_bytes(methodOopDesc::code_offset()), G3_scratch); + __ ld_ptr(G5_method, in_bytes(Method::code_offset()), G3_scratch); __ bind(ok2); __ br_null(G3_scratch, false, Assembler::pt, skip_fixup); - __ delayed()->ld_ptr(G5_method, in_bytes(methodOopDesc::interpreter_entry_offset()), G3_scratch); + __ delayed()->ld_ptr(G5_method, in_bytes(Method::interpreter_entry_offset()), G3_scratch); __ jump_to(ic_miss, G3_scratch); __ delayed()->nop(); @@ -2571,7 +2567,7 @@ // create inner frame __ save_frame(0); __ mov(G2_thread, L7_thread_cache); - __ set_oop_constant(JNIHandles::make_local(method()), O1); + __ set_metadata_constant(method(), O1); __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry), G2_thread, O1); @@ -2583,7 +2579,7 @@ // create inner frame __ save_frame(0); __ mov(G2_thread, L7_thread_cache); - __ set_oop_constant(JNIHandles::make_local(method()), O1); + __ set_metadata_constant(method(), O1); __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, SharedRuntime::rc_trace_method_entry), G2_thread, O1); @@ -2869,7 +2865,7 @@ SkipIfEqual skip_if( masm, G3_scratch, &DTraceMethodProbes, Assembler::zero); save_native_result(masm, ret_type, stack_slots); - __ set_oop_constant(JNIHandles::make_local(method()), O1); + __ set_metadata_constant(method(), O1); __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), G2_thread, O1); @@ -4081,9 +4077,9 @@ __ ld_ptr(G2_thread, in_bytes(Thread::pending_exception_offset()), O1); __ br_notnull_short(O1, Assembler::pn, pending); - // get the returned methodOop - - __ get_vm_result(G5_method); + // get the returned Method* + + __ get_vm_result_2(G5_method); __ stx(G5_method, SP, RegisterSaver::G5_offset()+STACK_BIAS); // O0 is where we want to jump, overwrite G3 which is saved and scratch diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/sparc.ad --- a/src/cpu/sparc/vm/sparc.ad Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/sparc.ad Sat Sep 01 13:25:18 2012 -0400 @@ -549,15 +549,15 @@ int vtable_index = this->_vtable_index; if (vtable_index < 0) { // must be invalid_vtable_index, not nonvirtual_vtable_index - assert(vtable_index == methodOopDesc::invalid_vtable_index, "correct sentinel value"); + assert(vtable_index == Method::invalid_vtable_index, "correct sentinel value"); return (NativeMovConstReg::instruction_size + NativeCall::instruction_size); // sethi; setlo; call; delay slot } else { assert(!UseInlineCaches, "expect vtable calls only if not using ICs"); - int entry_offset = instanceKlass::vtable_start_offset() + vtable_index*vtableEntry::size(); + int entry_offset = InstanceKlass::vtable_start_offset() + vtable_index*vtableEntry::size(); int v_off = entry_offset*wordSize + vtableEntry::method_offset_in_bytes(); int klass_load_size; - if (UseCompressedOops) { + if (UseCompressedOops && UseCompressedKlassPointers) { assert(Universe::heap() != NULL, "java heap should be initialized"); if (Universe::narrow_oop_base() == NULL) klass_load_size = 2*BytesPerInstWord; // see MacroAssembler::load_klass() @@ -1676,7 +1676,7 @@ // static stub relocation stores the instruction address of the call __ relocate(static_stub_Relocation::spec(mark)); - __ set_oop(NULL, reg_to_register_object(Matcher::inline_cache_reg_encode())); + __ set_metadata(NULL, reg_to_register_object(Matcher::inline_cache_reg_encode())); __ set_inst_mark(); AddressLiteral addrlit(-1); @@ -1852,18 +1852,6 @@ address last_rethrow = NULL; // debugging aid for Rethrow encoding #endif -// Map Types to machine register types -const int Matcher::base2reg[Type::lastype] = { - Node::NotAMachineReg,0,0, Op_RegI, Op_RegL, 0, Op_RegN, - Node::NotAMachineReg, Node::NotAMachineReg, /* tuple, array */ - 0, Op_RegD, 0, 0, /* Vectors */ - Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, /* the pointers */ - 0, 0/*abio*/, - Op_RegP /* Return address */, 0, /* the memories */ - Op_RegF, Op_RegF, Op_RegF, Op_RegD, Op_RegD, Op_RegD, - 0 /*bottom*/ -}; - // Vector width in bytes const int Matcher::vector_width_in_bytes(BasicType bt) { assert(MaxVectorSize == 8, ""); @@ -2590,20 +2578,11 @@ // MachCallDynamicJavaNode::ret_addr_offset uses this same test if (vtable_index < 0) { // must be invalid_vtable_index, not nonvirtual_vtable_index - assert(vtable_index == methodOopDesc::invalid_vtable_index, "correct sentinel value"); + assert(vtable_index == Method::invalid_vtable_index, "correct sentinel value"); Register G5_ic_reg = reg_to_register_object(Matcher::inline_cache_reg_encode()); assert(G5_ic_reg == G5_inline_cache_reg, "G5_inline_cache_reg used in assemble_ic_buffer_code()"); assert(G5_ic_reg == G5_megamorphic_method, "G5_megamorphic_method used in megamorphic call stub"); - // !!!!! - // Generate "set 0x01, R_G5", placeholder instruction to load oop-info - // emit_call_dynamic_prologue( cbuf ); - __ set_oop((jobject)Universe::non_oop_word(), G5_ic_reg); - - address virtual_call_oop_addr = __ inst_mark(); - // CALL to fixup routine. Fixup routine uses ScopeDesc info to determine - // who we intended to call. - __ relocate(virtual_call_Relocation::spec(virtual_call_oop_addr)); - emit_call_reloc(cbuf, $meth$$method, relocInfo::none); + __ ic_call((address)$meth$$method); } else { assert(!UseInlineCaches, "expect vtable calls only if not using ICs"); // Just go thru the vtable @@ -2612,7 +2591,7 @@ int off = __ offset(); __ load_klass(O0, G3_scratch); int klass_load_size; - if (UseCompressedOops) { + if (UseCompressedOops && UseCompressedKlassPointers) { assert(Universe::heap() != NULL, "java heap should be initialized"); if (Universe::narrow_oop_base() == NULL) klass_load_size = 2*BytesPerInstWord; @@ -2621,7 +2600,7 @@ } else { klass_load_size = 1*BytesPerInstWord; } - int entry_offset = instanceKlass::vtable_start_offset() + vtable_index*vtableEntry::size(); + int entry_offset = InstanceKlass::vtable_start_offset() + vtable_index*vtableEntry::size(); int v_off = entry_offset*wordSize + vtableEntry::method_offset_in_bytes(); if (Assembler::is_simm13(v_off)) { __ ld_ptr(G3, v_off, G5_method); @@ -2637,7 +2616,7 @@ // NOTE: for vtable dispatches, the vtable entry will never be null. // However it may very well end up in handle_wrong_method if the // method is abstract for the particular class. - __ ld_ptr(G5_method, in_bytes(methodOopDesc::from_compiled_offset()), G3_scratch); + __ ld_ptr(G5_method, in_bytes(Method::from_compiled_offset()), G3_scratch); // jump to target (either compiled code or c2iadapter) __ jmpl(G3_scratch, G0, O7); __ delayed()->nop(); @@ -2653,7 +2632,7 @@ assert(temp_reg != G5_ic_reg, "conflicting registers"); // Load nmethod - __ ld_ptr(G5_ic_reg, in_bytes(methodOopDesc::from_compiled_offset()), temp_reg); + __ ld_ptr(G5_ic_reg, in_bytes(Method::from_compiled_offset()), temp_reg); // CALL to compiled java, indirect the contents of G3 __ set_inst_mark(); @@ -3219,7 +3198,7 @@ // These two registers define part of the calling convention // between compiled code and the interpreter. - inline_cache_reg(R_G5); // Inline Cache Register or methodOop for I2C + inline_cache_reg(R_G5); // Inline Cache Register or Method* for I2C interpreter_method_oop_reg(R_G5); // Method Oop Register when calling interpreter // Optional: name the operand used by cisc-spilling to access [stack_pointer + offset] @@ -6070,12 +6049,15 @@ ins_cost(DEFAULT_COST * 3/2); format %{ "SET $con,$dst\t!ptr" %} ins_encode %{ - // [RGV] This next line should be generated from ADLC - if (_opnds[1]->constant_is_oop()) { + relocInfo::relocType constant_reloc = _opnds[1]->constant_reloc(); intptr_t val = $con$$constant; + if (constant_reloc == relocInfo::oop_type) { __ set_oop_constant((jobject) val, $dst$$Register); + } else if (constant_reloc == relocInfo::metadata_type) { + __ set_metadata_constant((Metadata*)val, $dst$$Register); } else { // non-oop pointers, e.g. card mark base, heap top - __ set($con$$constant, $dst$$Register); + assert(constant_reloc == relocInfo::none, "unexpected reloc type"); + __ set(val, $dst$$Register); } %} ins_pipe(loadConP); @@ -6086,12 +6068,15 @@ ins_cost(DEFAULT_COST * 3/2); format %{ "SET $con,$dst\t! ptr" %} ins_encode %{ - // [RGV] This next line should be generated from ADLC - if (_opnds[1]->constant_is_oop()) { + relocInfo::relocType constant_reloc = _opnds[1]->constant_reloc(); intptr_t val = $con$$constant; + if (constant_reloc == relocInfo::oop_type) { __ set_oop_constant((jobject) val, $dst$$Register); + } else if (constant_reloc == relocInfo::metadata_type) { + __ set_metadata_constant((Metadata*)val, $dst$$Register); } else { // non-oop pointers, e.g. card mark base, heap top - __ set($con$$constant, $dst$$Register); + assert(constant_reloc == relocInfo::none, "unexpected reloc type"); + __ set(val, $dst$$Register); } %} ins_pipe(loadConP); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/stubGenerator_sparc.cpp --- a/src/cpu/sparc/vm/stubGenerator_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/stubGenerator_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ #include "interpreter/interpreter.hpp" #include "nativeInst_sparc.hpp" #include "oops/instanceOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" @@ -3016,7 +3016,7 @@ BLOCK_COMMENT("arraycopy argument klass checks"); // get src->klass() - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { __ delayed()->nop(); // ??? not good __ load_klass(src, G3_src_klass); } else { @@ -3051,7 +3051,7 @@ // Load 32-bits signed value. Use br() instruction with it to check icc. __ lduw(G3_src_klass, lh_offset, G5_lh); - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { __ load_klass(dst, G4_dst_klass); } // Handle objArrays completely differently... @@ -3059,7 +3059,7 @@ __ set(objArray_lh, O5_temp); __ cmp(G5_lh, O5_temp); __ br(Assembler::equal, false, Assembler::pt, L_objArray); - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { __ delayed()->nop(); } else { __ delayed()->ld_ptr(dst, oopDesc::klass_offset_in_bytes(), G4_dst_klass); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/templateInterpreter_sparc.cpp --- a/src/cpu/sparc/vm/templateInterpreter_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/templateInterpreter_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -30,8 +30,8 @@ #include "interpreter/interpreterRuntime.hpp" #include "interpreter/templateTable.hpp" #include "oops/arrayOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" @@ -194,7 +194,7 @@ } __ get_cache_and_index_at_bcp(cache, G1_scratch, 1); __ bind(L_got_cache); - __ ld_ptr(cache, constantPoolCacheOopDesc::base_offset() + + __ ld_ptr(cache, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset(), size); __ and3(size, 0xFF, size); // argument size in words __ sll(size, Interpreter::logStackElementSize, size); // each argument size in bytes @@ -291,18 +291,18 @@ // ??: invocation counter // void InterpreterGenerator::generate_counter_incr(Label* overflow, Label* profile_method, Label* profile_method_continue) { - // Note: In tiered we increment either counters in methodOop or in MDO depending if we're profiling or not. + // Note: In tiered we increment either counters in Method* or in MDO depending if we're profiling or not. if (TieredCompilation) { const int increment = InvocationCounter::count_increment; const int mask = ((1 << Tier0InvokeNotifyFreqLog) - 1) << InvocationCounter::count_shift; Label no_mdo, done; if (ProfileInterpreter) { // If no method data exists, go to profile_continue. - __ ld_ptr(Lmethod, methodOopDesc::method_data_offset(), G4_scratch); + __ ld_ptr(Lmethod, Method::method_data_offset(), G4_scratch); __ br_null_short(G4_scratch, Assembler::pn, no_mdo); // Increment counter Address mdo_invocation_counter(G4_scratch, - in_bytes(methodDataOopDesc::invocation_counter_offset()) + + in_bytes(MethodData::invocation_counter_offset()) + in_bytes(InvocationCounter::counter_offset())); __ increment_mask_and_jump(mdo_invocation_counter, increment, mask, G3_scratch, Lscratch, @@ -310,10 +310,10 @@ __ ba_short(done); } - // Increment counter in methodOop + // Increment counter in Method* __ bind(no_mdo); Address invocation_counter(Lmethod, - in_bytes(methodOopDesc::invocation_counter_offset()) + + in_bytes(Method::invocation_counter_offset()) + in_bytes(InvocationCounter::counter_offset())); __ increment_mask_and_jump(invocation_counter, increment, mask, G3_scratch, Lscratch, @@ -322,8 +322,8 @@ } else { // Update standard invocation counters __ increment_invocation_counter(O0, G3_scratch); - if (ProfileInterpreter) { // %%% Merge this into methodDataOop - Address interpreter_invocation_counter(Lmethod,in_bytes(methodOopDesc::interpreter_invocation_counter_offset())); + if (ProfileInterpreter) { // %%% Merge this into MethodData* + Address interpreter_invocation_counter(Lmethod,in_bytes(Method::interpreter_invocation_counter_offset())); __ ld(interpreter_invocation_counter, G3_scratch); __ inc(G3_scratch); __ st(G3_scratch, interpreter_invocation_counter); @@ -349,10 +349,10 @@ } // Allocate monitor and lock method (asm interpreter) -// ebx - methodOop +// ebx - Method* // void InterpreterGenerator::lock_method(void) { - __ ld(Lmethod, in_bytes(methodOopDesc::access_flags_offset()), O0); // Load access flags. + __ ld(Lmethod, in_bytes(Method::access_flags_offset()), O0); // Load access flags. #ifdef ASSERT { Label ok; @@ -371,11 +371,11 @@ __ br( Assembler::zero, true, Assembler::pt, done); __ delayed()->ld_ptr(Llocals, Interpreter::local_offset_in_bytes(0), O0); // get receiver for not-static case - __ ld_ptr( Lmethod, in_bytes(methodOopDesc::const_offset()), O0); - __ ld_ptr( O0, in_bytes(constMethodOopDesc::constants_offset()), O0); - __ ld_ptr( O0, constantPoolOopDesc::pool_holder_offset_in_bytes(), O0); + __ ld_ptr( Lmethod, in_bytes(Method::const_offset()), O0); + __ ld_ptr( O0, in_bytes(ConstMethod::constants_offset()), O0); + __ ld_ptr( O0, ConstantPool::pool_holder_offset_in_bytes(), O0); - // lock the mirror, not the klassOop + // lock the mirror, not the Klass* __ ld_ptr( O0, mirror_offset, O0); #ifdef ASSERT @@ -494,14 +494,14 @@ // (gri - 2/25/2000) - const Address size_of_parameters(G5_method, methodOopDesc::size_of_parameters_offset()); - const Address size_of_locals (G5_method, methodOopDesc::size_of_locals_offset()); - const Address max_stack (G5_method, methodOopDesc::max_stack_offset()); + const Address size_of_parameters(G5_method, Method::size_of_parameters_offset()); + const Address size_of_locals (G5_method, Method::size_of_locals_offset()); + const Address max_stack (G5_method, Method::max_stack_offset()); int rounded_vm_local_words = round_to( frame::interpreter_frame_vm_local_words, WordsPerLong ); const int extra_space = rounded_vm_local_words + // frame local scratch space - //6815692//methodOopDesc::extra_stack_words() + // extra push slots for MH adapters + //6815692//Method::extra_stack_words() + // extra push slots for MH adapters frame::memory_parameter_word_sp_offset + // register save area (native_call ? frame::interpreter_frame_extra_outgoing_argument_words : 0); @@ -573,8 +573,8 @@ if (native_call) { __ mov(G0, Lbcp); } else { - __ ld_ptr(G5_method, methodOopDesc::const_offset(), Lbcp); - __ add(Lbcp, in_bytes(constMethodOopDesc::codes_offset()), Lbcp); + __ ld_ptr(G5_method, Method::const_offset(), Lbcp); + __ add(Lbcp, in_bytes(ConstMethod::codes_offset()), Lbcp); } __ mov( G5_method, Lmethod); // set Lmethod __ get_constant_pool_cache( LcpoolCache ); // set LcpoolCache @@ -607,8 +607,6 @@ address entry = __ pc(); Label slow_path; - __ verify_oop(G5_method); - // do nothing for empty methods (do not even increment invocation counter) if ( UseFastEmptyMethods) { // If we need a safepoint check, generate full interpreter entry. @@ -662,8 +660,8 @@ // read first instruction word and extract bytecode @ 1 and index @ 2 // get first 4 bytes of the bytecodes (big endian!) - __ ld_ptr(G5_method, methodOopDesc::const_offset(), G1_scratch); - __ ld(G1_scratch, constMethodOopDesc::codes_offset(), G1_scratch); + __ ld_ptr(G5_method, Method::const_offset(), G1_scratch); + __ ld(G1_scratch, ConstMethod::codes_offset(), G1_scratch); // move index @ 2 far left then to the right most two bytes. __ sll(G1_scratch, 2*BitsPerByte, G1_scratch); @@ -671,16 +669,16 @@ ConstantPoolCacheEntry::size()) * BytesPerWord), G1_scratch); // get constant pool cache - __ ld_ptr(G5_method, methodOopDesc::const_offset(), G3_scratch); - __ ld_ptr(G3_scratch, constMethodOopDesc::constants_offset(), G3_scratch); - __ ld_ptr(G3_scratch, constantPoolOopDesc::cache_offset_in_bytes(), G3_scratch); + __ ld_ptr(G5_method, Method::const_offset(), G3_scratch); + __ ld_ptr(G3_scratch, ConstMethod::constants_offset(), G3_scratch); + __ ld_ptr(G3_scratch, ConstantPool::cache_offset_in_bytes(), G3_scratch); // get specific constant pool cache entry __ add(G3_scratch, G1_scratch, G3_scratch); // Check the constant Pool cache entry to see if it has been resolved. // If not, need the slow path. - ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset(); + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); __ ld_ptr(G3_scratch, cp_base_offset + ConstantPoolCacheEntry::indices_offset(), G1_scratch); __ srl(G1_scratch, 2*BitsPerByte, G1_scratch); __ and3(G1_scratch, 0xFF, G1_scratch); @@ -827,9 +825,7 @@ // make sure registers are different! assert_different_registers(G2_thread, G5_method, Gargs, Gtmp1, Gtmp2); - const Address Laccess_flags(Lmethod, methodOopDesc::access_flags_offset()); - - __ verify_oop(G5_method); + const Address Laccess_flags(Lmethod, Method::access_flags_offset()); const Register Glocals_size = G3; assert_different_registers(Glocals_size, G4_scratch, Gframe_size); @@ -837,7 +833,7 @@ // make sure method is native & not abstract // rethink these assertions - they can be simplified and shared (gri 2/25/2000) #ifdef ASSERT - __ ld(G5_method, methodOopDesc::access_flags_offset(), Gtmp1); + __ ld(G5_method, Method::access_flags_offset(), Gtmp1); { Label L; __ btst(JVM_ACC_NATIVE, Gtmp1); @@ -934,7 +930,7 @@ // get signature handler { Label L; - Address signature_handler(Lmethod, methodOopDesc::signature_handler_offset()); + Address signature_handler(Lmethod, Method::signature_handler_offset()); __ ld_ptr(signature_handler, G3_scratch); __ br_notnull_short(G3_scratch, Assembler::pt, L); __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::prepare_native_call), Lmethod); @@ -991,13 +987,13 @@ __ btst(JVM_ACC_STATIC, O0); __ br( Assembler::zero, false, Assembler::pt, not_static); // get native function entry point(O0 is a good temp until the very end) - __ delayed()->ld_ptr(Lmethod, in_bytes(methodOopDesc::native_function_offset()), O0); + __ delayed()->ld_ptr(Lmethod, in_bytes(Method::native_function_offset()), O0); // for static methods insert the mirror argument const int mirror_offset = in_bytes(Klass::java_mirror_offset()); - __ ld_ptr(Lmethod, methodOopDesc:: const_offset(), O1); - __ ld_ptr(O1, constMethodOopDesc::constants_offset(), O1); - __ ld_ptr(O1, constantPoolOopDesc::pool_holder_offset_in_bytes(), O1); + __ ld_ptr(Lmethod, Method:: const_offset(), O1); + __ ld_ptr(O1, ConstMethod::constants_offset(), O1); + __ ld_ptr(O1, ConstantPool::pool_holder_offset_in_bytes(), O1); __ ld_ptr(O1, mirror_offset, O1); #ifdef ASSERT if (!PrintSignatureHandlers) // do not dirty the output with this @@ -1259,13 +1255,11 @@ // make sure registers are different! assert_different_registers(G2_thread, G5_method, Gargs, Gtmp1, Gtmp2); - const Address size_of_parameters(G5_method, methodOopDesc::size_of_parameters_offset()); - const Address size_of_locals (G5_method, methodOopDesc::size_of_locals_offset()); + const Address size_of_parameters(G5_method, Method::size_of_parameters_offset()); + const Address size_of_locals (G5_method, Method::size_of_locals_offset()); // Seems like G5_method is live at the point this is used. So we could make this look consistent // and use in the asserts. - const Address access_flags (Lmethod, methodOopDesc::access_flags_offset()); - - __ verify_oop(G5_method); + const Address access_flags (Lmethod, Method::access_flags_offset()); const Register Glocals_size = G3; assert_different_registers(Glocals_size, G4_scratch, Gframe_size); @@ -1273,7 +1267,7 @@ // make sure method is not native & not abstract // rethink these assertions - they can be simplified and shared (gri 2/25/2000) #ifdef ASSERT - __ ld(G5_method, methodOopDesc::access_flags_offset(), Gtmp1); + __ ld(G5_method, Method::access_flags_offset(), Gtmp1); { Label L; __ btst(JVM_ACC_NATIVE, Gtmp1); @@ -1429,7 +1423,7 @@ // // The entry code below assumes that the following registers are set // when coming in: -// G5_method: holds the methodOop of the method to call +// G5_method: holds the Method* of the method to call // Lesp: points to the TOS of the callers expression stack // after having pushed all the parameters // @@ -1547,7 +1541,7 @@ round_to(callee_extra_locals * Interpreter::stackElementWords, WordsPerLong); const int max_stack_words = max_stack * Interpreter::stackElementWords; return (round_to((max_stack_words - //6815692//+ methodOopDesc::extra_stack_words() + //6815692//+ Method::extra_stack_words() + rounded_vm_local_words + frame::memory_parameter_word_sp_offset), WordsPerLong) // already rounded @@ -1555,7 +1549,7 @@ } // How much stack a method top interpreter activation needs in words. -int AbstractInterpreter::size_top_interpreter_activation(methodOop method) { +int AbstractInterpreter::size_top_interpreter_activation(Method* method) { // See call_stub code int call_stub_size = round_to(7 + frame::memory_parameter_word_sp_offset, @@ -1569,7 +1563,7 @@ monitor_size) + call_stub_size; } -int AbstractInterpreter::layout_activation(methodOop method, +int AbstractInterpreter::layout_activation(Method* method, int tempcount, int popframe_extra_args, int moncount, @@ -1830,7 +1824,7 @@ const Register Gtmp2 = G1_scratch; // Compute size of arguments for saving when returning to deoptimized caller - __ lduh(Lmethod, in_bytes(methodOopDesc::size_of_parameters_offset()), Gtmp1); + __ lduh(Lmethod, in_bytes(Method::size_of_parameters_offset()), Gtmp1); __ sll(Gtmp1, Interpreter::logStackElementSize, Gtmp1); __ sub(Llocals, Gtmp1, Gtmp2); __ add(Gtmp2, wordSize, Gtmp2); @@ -1877,7 +1871,6 @@ // They remove the activation without checking for bad monitor state. // %%% We should make sure this is the right semantics before implementing. - // %%% changed set_vm_result_2 to set_vm_result and get_vm_result_2 to get_vm_result. Is there a bug here? __ set_vm_result(Oexception); __ unlock_if_synchronized_method(vtos, /* throw_monitor_exception */ false); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/templateTable_sparc.cpp --- a/src/cpu/sparc/vm/templateTable_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/templateTable_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ #include "interpreter/interpreterRuntime.hpp" #include "interpreter/templateTable.hpp" #include "memory/universe.inline.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" @@ -152,7 +152,7 @@ void TemplateTable::patch_bytecode(Bytecodes::Code bc, Register bc_reg, Register temp_reg, bool load_bc_into_bc_reg/*=true*/, int byte_no) { - // With sharing on, may need to test methodOop flag. + // With sharing on, may need to test Method* flag. if (!RewriteBytecodes) return; Label L_patch_done; @@ -304,14 +304,12 @@ } __ get_cpool_and_tags(O0, O2); - const int base_offset = constantPoolOopDesc::header_size() * wordSize; - const int tags_offset = typeArrayOopDesc::header_size(T_BYTE) * wordSize; + const int base_offset = ConstantPool::header_size() * wordSize; + const int tags_offset = Array::base_offset_in_bytes(); // get type from tags __ add(O2, tags_offset, O2); __ ldub(O2, O1, O2); - // unresolved string? If so, must resolve - __ cmp_and_brx_short(O2, JVM_CONSTANT_UnresolvedString, Assembler::equal, Assembler::pt, call_ldc); // unresolved class? If so, must resolve __ cmp_and_brx_short(O2, JVM_CONSTANT_UnresolvedClass, Assembler::equal, Assembler::pt, call_ldc); @@ -346,9 +344,7 @@ __ brx(Assembler::notEqual, true, Assembler::pt, notString); __ delayed()->ldf(FloatRegisterImpl::S, O0, O1, Ftos_f); __ bind(isString); - __ ld_ptr(O0, O1, Otos_i); - __ verify_oop(Otos_i); - __ push(atos); + __ stop("string should be rewritten to fast_aldc"); __ ba_short(exit); __ bind(notString); @@ -364,53 +360,36 @@ void TemplateTable::fast_aldc(bool wide) { transition(vtos, atos); - if (!EnableInvokeDynamic) { - // We should not encounter this bytecode if !EnableInvokeDynamic. - // The verifier will stop it. However, if we get past the verifier, - // this will stop the thread in a reasonable way, without crashing the JVM. - __ call_VM(noreg, CAST_FROM_FN_PTR(address, - InterpreterRuntime::throw_IncompatibleClassChangeError)); - // the call_VM checks for exception, so we should never return here. - __ should_not_reach_here(); - return; - } - - Register Rcache = G3_scratch; - Register Rscratch = G4_scratch; - - resolve_cache_and_index(f12_oop, Otos_i, Rcache, Rscratch, wide ? sizeof(u2) : sizeof(u1)); - + int index_size = wide ? sizeof(u2) : sizeof(u1); + Label resolved; + + // We are resolved if the resolved reference cache entry contains a + // non-null object (CallSite, etc.) + assert_different_registers(Otos_i, G3_scratch); + __ get_cache_index_at_bcp(Otos_i, G3_scratch, 1, index_size); // load index => G3_scratch + __ load_resolved_reference_at_index(Otos_i, G3_scratch); + __ tst(Otos_i); + __ br(Assembler::notEqual, false, Assembler::pt, resolved); + __ delayed()->set((int)bytecode(), O1); + + address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); + + // first time invocation - must resolve first + __ call_VM(Otos_i, entry, O1); + __ bind(resolved); __ verify_oop(Otos_i); - - Label L_done; - const Register Rcon_klass = G3_scratch; // same as Rcache - const Register Rarray_klass = G4_scratch; // same as Rscratch - __ load_klass(Otos_i, Rcon_klass); - AddressLiteral array_klass_addr((address)Universe::systemObjArrayKlassObj_addr()); - __ load_contents(array_klass_addr, Rarray_klass); - __ cmp_and_brx_short(Rarray_klass, Rcon_klass, Assembler::notEqual, Assembler::pt, L_done); - __ ld(Address(Otos_i, arrayOopDesc::length_offset_in_bytes()), Rcon_klass); - __ tst(Rcon_klass); - __ brx(Assembler::zero, true, Assembler::pt, L_done); - __ delayed()->clr(Otos_i); // executed only if branch is taken - - // Load the exception from the system-array which wraps it: - __ load_heap_oop(Otos_i, arrayOopDesc::base_offset_in_bytes(T_OBJECT), Otos_i); - __ throw_if_not_x(Assembler::never, Interpreter::throw_exception_entry(), G3_scratch); - - __ bind(L_done); } + void TemplateTable::ldc2_w() { transition(vtos, vtos); - Label retry, resolved, Long, exit; - - __ bind(retry); + Label Long, exit; + __ get_2_byte_integer_at_bcp(1, G3_scratch, O1, InterpreterMacroAssembler::Unsigned); __ get_cpool_and_tags(O0, O2); - const int base_offset = constantPoolOopDesc::header_size() * wordSize; - const int tags_offset = typeArrayOopDesc::header_size(T_BYTE) * wordSize; + const int base_offset = ConstantPool::header_size() * wordSize; + const int tags_offset = Array::base_offset_in_bytes(); // get type from tags __ add(O2, tags_offset, O2); __ ldub(O2, O1, O2); @@ -421,7 +400,7 @@ __ cmp_and_brx_short(O2, JVM_CONSTANT_Double, Assembler::notEqual, Assembler::pt, Long); // A double can be placed at word-aligned locations in the constant pool. // Check out Conversions.java for an example. - // Also constantPoolOopDesc::header_size() is 20, which makes it very difficult + // Also ConstantPool::header_size() is 20, which makes it very difficult // to double-align double on the constant pool. SG, 11/7/97 #ifdef _LP64 __ ldf(FloatRegisterImpl::D, G3_scratch, base_offset, Ftos_d); @@ -1595,7 +1574,6 @@ void TemplateTable::branch(bool is_jsr, bool is_wide) { // Note: on SPARC, we use InterpreterMacroAssembler::if_cmp also. - __ verify_oop(Lmethod); __ verify_thread(); const Register O2_bumped_count = O2; @@ -1611,9 +1589,9 @@ // non-JSR normal-branch stuff occurring below. if( is_jsr ) { // compute return address as bci in Otos_i - __ ld_ptr(Lmethod, methodOopDesc::const_offset(), G3_scratch); + __ ld_ptr(Lmethod, Method::const_offset(), G3_scratch); __ sub(Lbcp, G3_scratch, G3_scratch); - __ sub(G3_scratch, in_bytes(constMethodOopDesc::codes_offset()) - (is_wide ? 5 : 3), Otos_i); + __ sub(G3_scratch, in_bytes(ConstMethod::codes_offset()) - (is_wide ? 5 : 3), Otos_i); // Bump Lbcp to target of JSR __ add(Lbcp, O1_disp, Lbcp); @@ -1645,20 +1623,20 @@ int mask = ((1 << Tier0BackedgeNotifyFreqLog) - 1) << InvocationCounter::count_shift; if (ProfileInterpreter) { // If no method data exists, go to profile_continue. - __ ld_ptr(Lmethod, methodOopDesc::method_data_offset(), G4_scratch); + __ ld_ptr(Lmethod, Method::method_data_offset(), G4_scratch); __ br_null_short(G4_scratch, Assembler::pn, Lno_mdo); // Increment backedge counter in the MDO - Address mdo_backedge_counter(G4_scratch, in_bytes(methodDataOopDesc::backedge_counter_offset()) + + Address mdo_backedge_counter(G4_scratch, in_bytes(MethodData::backedge_counter_offset()) + in_bytes(InvocationCounter::counter_offset())); __ increment_mask_and_jump(mdo_backedge_counter, increment, mask, G3_scratch, Lscratch, Assembler::notZero, &Lforward); __ ba_short(Loverflow); } - // If there's no MDO, increment counter in methodOop + // If there's no MDO, increment counter in Method* __ bind(Lno_mdo); - Address backedge_counter(Lmethod, in_bytes(methodOopDesc::backedge_counter_offset()) + + Address backedge_counter(Lmethod, in_bytes(Method::backedge_counter_offset()) + in_bytes(InvocationCounter::counter_offset())); __ increment_mask_and_jump(backedge_counter, increment, mask, G3_scratch, Lscratch, Assembler::notZero, &Lforward); @@ -1791,9 +1769,9 @@ __ profile_ret(vtos, Otos_i, G4_scratch); - __ ld_ptr(Lmethod, methodOopDesc::const_offset(), G3_scratch); + __ ld_ptr(Lmethod, Method::const_offset(), G3_scratch); __ add(G3_scratch, Otos_i, G3_scratch); - __ add(G3_scratch, in_bytes(constMethodOopDesc::codes_offset()), Lbcp); + __ add(G3_scratch, in_bytes(ConstMethod::codes_offset()), Lbcp); __ dispatch_next(vtos); } @@ -1806,9 +1784,9 @@ __ profile_ret(vtos, Otos_i, G4_scratch); - __ ld_ptr(Lmethod, methodOopDesc::const_offset(), G3_scratch); + __ ld_ptr(Lmethod, Method::const_offset(), G3_scratch); __ add(G3_scratch, Otos_i, G3_scratch); - __ add(G3_scratch, in_bytes(constMethodOopDesc::codes_offset()), Lbcp); + __ add(G3_scratch, in_bytes(ConstMethod::codes_offset()), Lbcp); __ dispatch_next(vtos); } @@ -2086,34 +2064,17 @@ // ---------------------------------------------------------------------------- void TemplateTable::resolve_cache_and_index(int byte_no, - Register result, Register Rcache, Register index, size_t index_size) { // Depends on cpCacheOop layout! Label resolved; - if (byte_no == f12_oop) { - // We are resolved if the f1 field contains a non-null object (CallSite, MethodType, etc.) - // This kind of CP cache entry does not need to match bytecode_1 or bytecode_2, because - // there is a 1-1 relation between bytecode type and CP entry type. - // The caller will also load a methodOop from f2. - assert(result != noreg, ""); - assert_different_registers(result, Rcache); - __ get_cache_and_index_at_bcp(Rcache, index, 1, index_size); - __ ld_ptr(Rcache, constantPoolCacheOopDesc::base_offset() + - ConstantPoolCacheEntry::f1_offset(), result); - __ tst(result); - __ br(Assembler::notEqual, false, Assembler::pt, resolved); - __ delayed()->set((int)bytecode(), O1); - } else { assert(byte_no == f1_byte || byte_no == f2_byte, "byte_no out of range"); - assert(result == noreg, ""); //else change code for setting result __ get_cache_and_index_and_bytecode_at_bcp(Rcache, index, Lbyte_code, byte_no, 1, index_size); __ cmp(Lbyte_code, (int) bytecode()); // have we resolved this bytecode? __ br(Assembler::equal, false, Assembler::pt, resolved); __ delayed()->set((int)bytecode(), O1); - } address entry; switch (bytecode()) { @@ -2127,8 +2088,6 @@ case Bytecodes::_invokeinterface: entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invoke); break; case Bytecodes::_invokehandle : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invokehandle); break; case Bytecodes::_invokedynamic : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invokedynamic); break; - case Bytecodes::_fast_aldc : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); break; - case Bytecodes::_fast_aldc_w : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); break; default: fatal(err_msg("unexpected bytecode: %s", Bytecodes::name(bytecode()))); break; @@ -2137,9 +2096,6 @@ __ call_VM(noreg, entry, O1); // Update registers with resolved info __ get_cache_and_index_at_bcp(Rcache, index, 1, index_size); - if (result != noreg) - __ ld_ptr(Rcache, constantPoolCacheOopDesc::base_offset() + - ConstantPoolCacheEntry::f1_offset(), result); __ bind(resolved); } @@ -2158,37 +2114,29 @@ // determine constant pool cache field offsets assert(is_invokevirtual == (byte_no == f2_byte), "is_invokevirtual flag redundant"); const int method_offset = in_bytes( - constantPoolCacheOopDesc::base_offset() + + ConstantPoolCache::base_offset() + ((byte_no == f2_byte) ? ConstantPoolCacheEntry::f2_offset() : ConstantPoolCacheEntry::f1_offset() ) ); - const int flags_offset = in_bytes(constantPoolCacheOopDesc::base_offset() + + const int flags_offset = in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()); // access constant pool cache fields - const int index_offset = in_bytes(constantPoolCacheOopDesc::base_offset() + + const int index_offset = in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f2_offset()); if (is_invokevfinal) { __ get_cache_and_index_at_bcp(cache, index, 1); __ ld_ptr(Address(cache, method_offset), method); - } else if (byte_no == f12_oop) { - // Resolved f1_oop (CallSite, MethodType, etc.) goes into 'itable_index'. - // Resolved f2_oop (methodOop invoker) will go into 'method' (at index_offset). - // See ConstantPoolCacheEntry::set_dynamic_call and set_method_handle. + } else { size_t index_size = (is_invokedynamic ? sizeof(u4) : sizeof(u2)); - resolve_cache_and_index(byte_no, itable_index, cache, index, index_size); - __ ld_ptr(Address(cache, index_offset), method); - itable_index = noreg; // hack to disable load below - } else { - resolve_cache_and_index(byte_no, noreg, cache, index, sizeof(u2)); + resolve_cache_and_index(byte_no, cache, index, index_size); __ ld_ptr(Address(cache, method_offset), method); } if (itable_index != noreg) { - // pick up itable index from f2 also: - assert(byte_no == f1_byte, "already picked up f1"); + // pick up itable or appendix index from f2 also: __ ld_ptr(Address(cache, index_offset), itable_index); } __ ld_ptr(Address(cache, flags_offset), flags); @@ -2203,12 +2151,14 @@ bool is_static) { assert_different_registers(Rcache, Rflags, Roffset); - ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset(); + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); __ ld_ptr(Rcache, cp_base_offset + ConstantPoolCacheEntry::flags_offset(), Rflags); __ ld_ptr(Rcache, cp_base_offset + ConstantPoolCacheEntry::f2_offset(), Roffset); if (is_static) { __ ld_ptr(Rcache, cp_base_offset + ConstantPoolCacheEntry::f1_offset(), Robj); + const int mirror_offset = in_bytes(Klass::java_mirror_offset()); + __ ld_ptr( Robj, mirror_offset, Robj); } } @@ -2218,7 +2168,7 @@ Register index, bool is_static, bool has_tos) { - ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset(); + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); if (JvmtiExport::can_post_field_access()) { // Check to see if a field access watch has been set before we take @@ -2264,9 +2214,9 @@ Register Rclass = Rcache; Register Roffset= G4_scratch; Register Rflags = G1_scratch; - ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset(); - - resolve_cache_and_index(byte_no, noreg, Rcache, index, sizeof(u2)); + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); + + resolve_cache_and_index(byte_no, Rcache, index, sizeof(u2)); jvmti_post_field_access(Rcache, index, is_static, false); load_field_cp_cache_entry(Rclass, Rcache, index, Roffset, Rflags, is_static); @@ -2439,7 +2389,7 @@ Register index = G4_scratch; Register Roffset = G4_scratch; Register Rflags = Rcache; - ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset(); + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); __ get_cache_and_index_at_bcp(Rcache, index, 1); jvmti_post_field_access(Rcache, index, /*is_static*/false, /*has_tos*/true); @@ -2550,7 +2500,7 @@ // The registers Rcache and index expected to be set before call. // The function may destroy various registers, just not the Rcache and index registers. void TemplateTable::jvmti_post_field_mod(Register Rcache, Register index, bool is_static) { - ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset(); + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); if (JvmtiExport::can_post_field_modification()) { // Check to see if a field modification watch has been set before we take @@ -2624,9 +2574,9 @@ Register Rclass = Rcache; Register Roffset= G4_scratch; Register Rflags = G1_scratch; - ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset(); - - resolve_cache_and_index(byte_no, noreg, Rcache, index, sizeof(u2)); + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); + + resolve_cache_and_index(byte_no, Rcache, index, sizeof(u2)); jvmti_post_field_mod(Rcache, index, is_static); load_field_cp_cache_entry(Rclass, Rcache, index, Roffset, Rflags, is_static); @@ -2831,7 +2781,7 @@ Register Rclass = Rcache; Register Roffset= G4_scratch; Register Rflags = G1_scratch; - ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset(); + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); jvmti_post_fast_field_mod(); @@ -2903,7 +2853,7 @@ // access constant pool cache (is resolved) __ get_cache_and_index_at_bcp(Rcache, G4_scratch, 2); - __ ld_ptr(Rcache, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::f2_offset(), Roffset); + __ ld_ptr(Rcache, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f2_offset(), Roffset); __ add(Lbcp, 1, Lbcp); // needed to report exception at the correct bcp __ verify_oop(Rreceiver); @@ -2923,7 +2873,7 @@ if (__ membar_has_effect(membar_bits)) { // Get is_volatile value in Rflags and check if membar is needed - __ ld_ptr(Rcache, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::flags_offset(), Rflags); + __ ld_ptr(Rcache, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset(), Rflags); // Test volatile Label notVolatile; @@ -2947,7 +2897,6 @@ ShouldNotReachHere(); } - void TemplateTable::prepare_invoke(int byte_no, Register method, // linked method (or i-klass) Register ra, // return address @@ -2980,7 +2929,6 @@ // maybe push appendix to arguments if (is_invokedynamic || is_invokehandle) { Label L_no_push; - __ verify_oop(index); __ set((1 << ConstantPoolCacheEntry::has_appendix_shift), temp); __ btst(flags, temp); __ br(Assembler::zero, false, Assembler::pt, L_no_push); @@ -2988,7 +2936,9 @@ // Push the appendix as a trailing parameter. // This must be done before we get the receiver, // since the parameter_size includes it. - __ push_ptr(index); // push appendix (MethodType, CallSite, etc.) + __ load_resolved_reference_at_index(temp, index); + __ verify_oop(temp); + __ push_ptr(temp); // push appendix (MethodType, CallSite, etc.) __ bind(L_no_push); } @@ -3021,7 +2971,7 @@ Register Rcall = Rindex; assert_different_registers(Rcall, G5_method, Gargs, Rret); - // get target methodOop & entry point + // get target Method* & entry point __ lookup_virtual_method(Rrecv, Rindex, G5_method); __ call_from_interpreter(Rcall, Gargs, Rret); } @@ -3088,10 +3038,8 @@ void TemplateTable::invokevfinal_helper(Register Rscratch, Register Rret) { Register Rtemp = G4_scratch; - __ verify_oop(G5_method); - // Load receiver from stack slot - __ lduh(G5_method, in_bytes(methodOopDesc::size_of_parameters_offset()), G4_scratch); + __ lduh(G5_method, in_bytes(Method::size_of_parameters_offset()), G4_scratch); __ load_receiver(G4_scratch, O0); // receiver NULL check @@ -3126,7 +3074,6 @@ __ null_check(O0_recv); // do the call - __ verify_oop(G5_method); __ profile_call(O4); __ call_from_interpreter(Rscratch, Gargs, Rret); } @@ -3139,16 +3086,14 @@ const Register Rret = Lscratch; const Register Rscratch = G3_scratch; - prepare_invoke(byte_no, G5_method, Rret); // get f1 methodOop + prepare_invoke(byte_no, G5_method, Rret); // get f1 Method* // do the call - __ verify_oop(G5_method); __ profile_call(O4); __ call_from_interpreter(Rscratch, Gargs, Rret); } - -void TemplateTable::invokeinterface_object_method(Register RklassOop, +void TemplateTable::invokeinterface_object_method(Register RKlass, Register Rcall, Register Rret, Register Rflags) { @@ -3167,14 +3112,14 @@ __ profile_final_call(O4); - // do the call - the index (f2) contains the methodOop + // do the call - the index (f2) contains the Method* assert_different_registers(G5_method, Gargs, Rcall); __ mov(Rindex, G5_method); __ call_from_interpreter(Rcall, Gargs, Rret); __ bind(notFinal); - __ profile_virtual_call(RklassOop, O4); - generate_vtable_call(RklassOop, Rindex, Rret); + __ profile_virtual_call(RKlass, O4); + generate_vtable_call(RKlass, Rindex, Rret); } @@ -3187,7 +3132,7 @@ const Register Rindex = Lscratch; const Register O0_recv = O0; const Register O1_flags = O1; - const Register O2_klassOop = O2; + const Register O2_Klass = O2; const Register Rscratch = G4_scratch; assert_different_registers(Rscratch, G5_method); @@ -3195,8 +3140,7 @@ // get receiver klass __ null_check(O0_recv, oopDesc::klass_offset_in_bytes()); - __ load_klass(O0_recv, O2_klassOop); - __ verify_oop(O2_klassOop); + __ load_klass(O0_recv, O2_Klass); // Special case of invokeinterface called for virtual method of // java.lang.Object. See cpCacheOop.cpp for details. @@ -3208,22 +3152,22 @@ __ br(Assembler::zero, false, Assembler::pt, notMethod); __ delayed()->nop(); - invokeinterface_object_method(O2_klassOop, Rinterface, Rret, O1_flags); + invokeinterface_object_method(O2_Klass, Rinterface, Rret, O1_flags); __ bind(notMethod); - __ profile_virtual_call(O2_klassOop, O4); + __ profile_virtual_call(O2_Klass, O4); // // find entry point to call // // compute start of first itableOffsetEntry (which is at end of vtable) - const int base = instanceKlass::vtable_start_offset() * wordSize; + const int base = InstanceKlass::vtable_start_offset() * wordSize; Label search; Register Rtemp = O1_flags; - __ ld(O2_klassOop, instanceKlass::vtable_length_offset() * wordSize, Rtemp); + __ ld(O2_Klass, InstanceKlass::vtable_length_offset() * wordSize, Rtemp); if (align_object_offset(1) > 1) { __ round_to(Rtemp, align_object_offset(1)); } @@ -3234,7 +3178,7 @@ __ set(base, Rscratch); __ add(Rscratch, Rtemp, Rtemp); } - __ add(O2_klassOop, Rtemp, Rscratch); + __ add(O2_Klass, Rtemp, Rscratch); __ bind(search); @@ -3251,11 +3195,8 @@ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_IncompatibleClassChangeError)); __ should_not_reach_here(); __ bind(ok); - __ verify_oop(Rtemp); } - __ verify_oop(Rinterface); - __ cmp(Rinterface, Rtemp); __ brx(Assembler::notEqual, true, Assembler::pn, search); __ delayed()->add(Rscratch, itableOffsetEntry::size() * wordSize, Rscratch); @@ -3266,7 +3207,7 @@ assert(itableMethodEntry::method_offset_in_bytes() == 0, "adjust instruction below"); __ sll(Rindex, exact_log2(itableMethodEntry::size() * wordSize), Rindex); // Rindex *= 8; __ add(Rscratch, Rindex, Rscratch); - __ ld_ptr(O2_klassOop, Rscratch, G5_method); + __ ld_ptr(O2_Klass, Rscratch, G5_method); // Check for abstract method error. { @@ -3280,14 +3221,12 @@ Register Rcall = Rinterface; assert_different_registers(Rcall, G5_method, Gargs, Rret); - __ verify_oop(G5_method); __ call_from_interpreter(Rcall, Gargs, Rret); } - void TemplateTable::invokehandle(int byte_no) { transition(vtos, vtos); - assert(byte_no == f12_oop, "use this argument"); + assert(byte_no == f1_byte, "use this argument"); if (!EnableInvokeDynamic) { // rewriter does not generate this bytecode @@ -3303,13 +3242,13 @@ prepare_invoke(byte_no, G5_method, Rret, G4_mtype, O0_recv); __ null_check(O0_recv); - // G4: MethodType object (from f1) + // G4: MethodType object (from cpool->resolved_references[]) // G5: MH.linkToCallSite method (from f2) // Note: G4_mtype is already pushed (if necessary) by prepare_invoke // do the call - __ verify_oop(G5_method); + __ verify_oop(G4_mtype); __ profile_final_call(O4); // FIXME: profile the LambdaForm also __ call_from_interpreter(Rscratch, Gargs, Rret); } @@ -3317,7 +3256,7 @@ void TemplateTable::invokedynamic(int byte_no) { transition(vtos, vtos); - assert(byte_no == f12_oop, "use this argument"); + assert(byte_no == f1_byte, "use this argument"); if (!EnableInvokeDynamic) { // We should not encounter this bytecode if !EnableInvokeDynamic. @@ -3336,8 +3275,8 @@ prepare_invoke(byte_no, G5_method, Rret, G4_callsite); - // G4: CallSite object (from f1) - // G5: MH.linkToCallSite method (from f2) + // G4: CallSite object (from cpool->resolved_references[]) + // G5: MH.linkToCallSite method (from f1) // Note: G4_callsite is already pushed by prepare_invoke @@ -3346,7 +3285,7 @@ __ profile_call(O4); // do the call - __ verify_oop(G5_method); + __ verify_oop(G4_callsite); __ call_from_interpreter(Rscratch, Gargs, Rret); } @@ -3370,25 +3309,25 @@ __ get_2_byte_integer_at_bcp(1, Rscratch, Roffset, InterpreterMacroAssembler::Unsigned); __ get_cpool_and_tags(Rscratch, G3_scratch); // make sure the class we're about to instantiate has been resolved - // This is done before loading instanceKlass to be consistent with the order - // how Constant Pool is updated (see constantPoolOopDesc::klass_at_put) - __ add(G3_scratch, typeArrayOopDesc::header_size(T_BYTE) * wordSize, G3_scratch); + // This is done before loading InstanceKlass to be consistent with the order + // how Constant Pool is updated (see ConstantPool::klass_at_put) + __ add(G3_scratch, Array::base_offset_in_bytes(), G3_scratch); __ ldub(G3_scratch, Roffset, G3_scratch); __ cmp(G3_scratch, JVM_CONSTANT_Class); __ br(Assembler::notEqual, false, Assembler::pn, slow_case); __ delayed()->sll(Roffset, LogBytesPerWord, Roffset); - // get instanceKlass + // get InstanceKlass //__ sll(Roffset, LogBytesPerWord, Roffset); // executed in delay slot - __ add(Roffset, sizeof(constantPoolOopDesc), Roffset); + __ add(Roffset, sizeof(ConstantPool), Roffset); __ ld_ptr(Rscratch, Roffset, RinstanceKlass); // make sure klass is fully initialized: - __ ldub(RinstanceKlass, in_bytes(instanceKlass::init_state_offset()), G3_scratch); - __ cmp(G3_scratch, instanceKlass::fully_initialized); + __ ldub(RinstanceKlass, in_bytes(InstanceKlass::init_state_offset()), G3_scratch); + __ cmp(G3_scratch, InstanceKlass::fully_initialized); __ br(Assembler::notEqual, false, Assembler::pn, slow_case); __ delayed()->ld(RinstanceKlass, in_bytes(Klass::layout_helper_offset()), Roffset); - // get instance_size in instanceKlass (already aligned) + // get instance_size in InstanceKlass (already aligned) //__ ld(RinstanceKlass, in_bytes(Klass::layout_helper_offset()), Roffset); // make sure klass does not have has_finalizer, or is abstract, or interface or java/lang/Class @@ -3584,21 +3523,22 @@ // See if the checkcast has been quickened __ get_cpool_and_tags(Lscratch, G3_scratch); - __ add(G3_scratch, typeArrayOopDesc::header_size(T_BYTE) * wordSize, G3_scratch); + __ add(G3_scratch, Array::base_offset_in_bytes(), G3_scratch); __ ldub(G3_scratch, Roffset, G3_scratch); __ cmp(G3_scratch, JVM_CONSTANT_Class); __ br(Assembler::equal, true, Assembler::pt, quicked); __ delayed()->sll(Roffset, LogBytesPerWord, Roffset); __ push_ptr(); // save receiver for result, and for GC - call_VM(RspecifiedKlass, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc) ); + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc) ); + __ get_vm_result_2(RspecifiedKlass); __ pop_ptr(Otos_i, G3_scratch); // restore receiver __ ba_short(resolved); // Extract target class from constant pool __ bind(quicked); - __ add(Roffset, sizeof(constantPoolOopDesc), Roffset); + __ add(Roffset, sizeof(ConstantPool), Roffset); __ ld_ptr(Lscratch, Roffset, RspecifiedKlass); __ bind(resolved); __ load_klass(Otos_i, RobjKlass); // get value klass @@ -3639,21 +3579,22 @@ // See if the checkcast has been quickened __ get_cpool_and_tags(Lscratch, G3_scratch); - __ add(G3_scratch, typeArrayOopDesc::header_size(T_BYTE) * wordSize, G3_scratch); + __ add(G3_scratch, Array::base_offset_in_bytes(), G3_scratch); __ ldub(G3_scratch, Roffset, G3_scratch); __ cmp(G3_scratch, JVM_CONSTANT_Class); __ br(Assembler::equal, true, Assembler::pt, quicked); __ delayed()->sll(Roffset, LogBytesPerWord, Roffset); __ push_ptr(); // save receiver for result, and for GC - call_VM(RspecifiedKlass, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc) ); + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc) ); + __ get_vm_result_2(RspecifiedKlass); __ pop_ptr(Otos_i, G3_scratch); // restore receiver __ ba_short(resolved); // Extract target class from constant pool __ bind(quicked); - __ add(Roffset, sizeof(constantPoolOopDesc), Roffset); + __ add(Roffset, sizeof(ConstantPool), Roffset); __ get_constant_pool(Lscratch); __ ld_ptr(Lscratch, Roffset, RspecifiedKlass); __ bind(resolved); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/templateTable_sparc.hpp --- a/src/cpu/sparc/vm/templateTable_sparc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/templateTable_sparc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ ); // helper function static void invokevfinal_helper(Register Rcache, Register Rret); - static void invokeinterface_object_method(Register RklassOop, Register Rcall, + static void invokeinterface_object_method(Register RKlass, Register Rcall, Register Rret, Register Rflags); static void generate_vtable_call(Register Rrecv, Register Rindex, Register Rret); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/sparc/vm/vtableStubs_sparc.cpp --- a/src/cpu/sparc/vm/vtableStubs_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/sparc/vm/vtableStubs_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,12 +69,12 @@ address npe_addr = __ pc(); __ load_klass(O0, G3_scratch); - // set methodOop (in case of interpreted method), and destination address + // set Method* (in case of interpreted method), and destination address #ifndef PRODUCT if (DebugVtables) { Label L; // check offset vs vtable length - __ ld(G3_scratch, instanceKlass::vtable_length_offset()*wordSize, G5); + __ ld(G3_scratch, InstanceKlass::vtable_length_offset()*wordSize, G5); __ cmp_and_br_short(G5, vtable_index*vtableEntry::size(), Assembler::greaterUnsigned, Assembler::pt, L); __ set(vtable_index, O2); __ call_VM(noreg, CAST_FROM_FN_PTR(address, bad_compiled_vtable_index), O0, O2); @@ -96,11 +96,11 @@ address ame_addr = __ pc(); // if the vtable entry is null, the method is abstract // NOTE: for vtable dispatches, the vtable entry will never be null. - __ ld_ptr(G5_method, in_bytes(methodOopDesc::from_compiled_offset()), G3_scratch); + __ ld_ptr(G5_method, in_bytes(Method::from_compiled_offset()), G3_scratch); // jump to target (either compiled code or c2iadapter) __ JMP(G3_scratch, 0); - // load methodOop (in case we call c2iadapter) + // load Method* (in case we call c2iadapter) __ delayed()->nop(); masm->flush(); @@ -130,7 +130,7 @@ CodeBuffer cb(s->entry_point(), sparc_code_length); MacroAssembler* masm = new MacroAssembler(&cb); - Register G3_klassOop = G3_scratch; + Register G3_Klass = G3_scratch; Register G5_interface = G5; // Passed in as an argument Label search; @@ -141,8 +141,7 @@ // get receiver klass (also an implicit null-check) address npe_addr = __ pc(); - __ load_klass(O0, G3_klassOop); - __ verify_oop(G3_klassOop); + __ load_klass(O0, G3_Klass); // Push a new window to get some temp registers. This chops the head of all // my 64-bit %o registers in the LION build, but this is OK because no longs @@ -160,7 +159,7 @@ Register L5_method = L5; __ lookup_interface_method(// inputs: rec. class, interface, itable index - G3_klassOop, G5_interface, itable_index, + G3_Klass, G5_interface, itable_index, // outputs: method, scan temp. reg L5_method, L2, L3, throw_icce); @@ -169,9 +168,8 @@ if (DebugVtables) { Label L01; __ br_notnull_short(L5_method, Assembler::pt, L01); - __ stop("methodOop is null"); + __ stop("Method* is null"); __ bind(L01); - __ verify_oop(L5_method); } #endif @@ -182,9 +180,9 @@ // Restore registers *before* the AME point. address ame_addr = __ pc(); // if the vtable entry is null, the method is abstract - __ ld_ptr(G5_method, in_bytes(methodOopDesc::from_compiled_offset()), G3_scratch); + __ ld_ptr(G5_method, in_bytes(Method::from_compiled_offset()), G3_scratch); - // G5_method: methodOop + // G5_method: Method* // O0: Receiver // G3_scratch: entry point __ JMP(G3_scratch, 0); @@ -221,13 +219,13 @@ // ld;ld;ld,jmp,nop const int basic = 5*BytesPerInstWord + // shift;add for load_klass (only shift with zero heap based) - (UseCompressedOops ? + (UseCompressedKlassPointers ? ((Universe::narrow_oop_base() == NULL) ? BytesPerInstWord : 2*BytesPerInstWord) : 0); return basic + slop; } else { const int basic = (28 LP64_ONLY(+ 6)) * BytesPerInstWord + // shift;add for load_klass (only shift with zero heap based) - (UseCompressedOops ? + (UseCompressedKlassPointers ? ((Universe::narrow_oop_base() == NULL) ? BytesPerInstWord : 2*BytesPerInstWord) : 0); return (basic + slop); } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/assembler_x86.cpp --- a/src/cpu/x86/vm/assembler_x86.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/assembler_x86.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -57,6 +57,7 @@ _target = target; switch (rtype) { case relocInfo::oop_type: + case relocInfo::metadata_type: // Oops are a special case. Normally they would be their own section // but in cases like icBuffer they are literals in the code stream that // we don't have a section for. We use none so that we get a literal address @@ -154,10 +155,10 @@ // Convert the raw encoding form into the form expected by the constructor for // Address. An index of 4 (rsp) corresponds to having no index, so convert // that to noreg for the Address constructor. -Address Address::make_raw(int base, int index, int scale, int disp, bool disp_is_oop) { +Address Address::make_raw(int base, int index, int scale, int disp, relocInfo::relocType disp_reloc) { RelocationHolder rspec; - if (disp_is_oop) { - rspec = Relocation::spec_simple(relocInfo::oop_type); + if (disp_reloc != relocInfo::none) { + rspec = Relocation::spec_simple(disp_reloc); } bool valid_index = index != rsp->encoding(); if (valid_index) { @@ -270,17 +271,6 @@ } } -void Assembler::emit_arith(int op1, int op2, Register dst, jobject obj) { - LP64_ONLY(ShouldNotReachHere()); - assert(isByte(op1) && isByte(op2), "wrong opcode"); - assert((op1 & 0x01) == 1, "should be 32bit operation"); - assert((op1 & 0x02) == 0, "sign-extension bit should not be set"); - InstructionMark im(this); - emit_byte(op1); - emit_byte(op2 | encode(dst)); - emit_data((intptr_t)obj, relocInfo::oop_type, 0); -} - void Assembler::emit_arith(int op1, int op2, Register dst, Register src) { assert(isByte(op1) && isByte(op2), "wrong opcode"); @@ -5572,6 +5562,14 @@ increment(rsp, number_of_arguments * wordSize); } +void MacroAssembler::cmpklass(Address src1, Metadata* obj) { + cmp_literal32(src1, (int32_t)obj, metadata_Relocation::spec_for_immediate()); +} + +void MacroAssembler::cmpklass(Register src1, Metadata* obj) { + cmp_literal32(src1, (int32_t)obj, metadata_Relocation::spec_for_immediate()); +} + void MacroAssembler::cmpoop(Address src1, jobject obj) { cmp_literal32(src1, (int32_t)obj, oop_Relocation::spec_for_immediate()); } @@ -5753,6 +5751,14 @@ mov_literal32(dst, (int32_t)obj, oop_Relocation::spec_for_immediate()); } +void MacroAssembler::mov_metadata(Register dst, Metadata* obj) { + mov_literal32(dst, (int32_t)obj, metadata_Relocation::spec_for_immediate()); +} + +void MacroAssembler::mov_metadata(Address dst, Metadata* obj) { + mov_literal32(dst, (int32_t)obj, metadata_Relocation::spec_for_immediate()); +} + void MacroAssembler::movptr(Register dst, AddressLiteral src) { if (src.is_lval()) { mov_literal32(dst, (intptr_t)src.target(), src.rspec()); @@ -5804,6 +5810,9 @@ push_literal32((int32_t)obj, oop_Relocation::spec_for_immediate()); } +void MacroAssembler::pushklass(Metadata* obj) { + push_literal32((int32_t)obj, metadata_Relocation::spec_for_immediate()); +} void MacroAssembler::pushptr(AddressLiteral src) { if (src.is_lval()) { @@ -5856,13 +5865,13 @@ if (os::message_box(msg, "Execution stopped, print registers?")) { print_state32(rdi, rsi, rbp, rsp, rbx, rdx, rcx, rax, eip); BREAKPOINT; - assert(false, "start up GDB"); } } else { ttyLocker ttyl; ::tty->print_cr("=============== DEBUG MESSAGE: %s ================\n", msg); + } + // Don't assert holding the ttyLock assert(false, err_msg("DEBUG MESSAGE: %s", msg)); - } ThreadStateTransition::transition(thread, _thread_in_vm, saved_state); } @@ -6280,6 +6289,15 @@ movq(dst, rscratch1); } +void MacroAssembler::mov_metadata(Register dst, Metadata* obj) { + mov_literal64(dst, (intptr_t)obj, metadata_Relocation::spec_for_immediate()); +} + +void MacroAssembler::mov_metadata(Address dst, Metadata* obj) { + mov_literal64(rscratch1, (intptr_t)obj, metadata_Relocation::spec_for_immediate()); + movq(dst, rscratch1); +} + void MacroAssembler::movptr(Register dst, AddressLiteral src) { if (src.is_lval()) { mov_literal64(dst, (intptr_t)src.target(), src.rspec()); @@ -6321,6 +6339,11 @@ push(rscratch1); } +void MacroAssembler::pushklass(Metadata* obj) { + mov_metadata(rscratch1, obj); + push(rscratch1); +} + void MacroAssembler::pushptr(AddressLiteral src) { lea(rscratch1, src); if (src.is_lval()) { @@ -6655,6 +6678,12 @@ } } +void MacroAssembler::ic_call(address entry) { + RelocationHolder rh = virtual_call_Relocation::spec(pc()); + movptr(rax, (intptr_t)Universe::non_oop_word()); + call(AddressLiteral(entry, rh)); +} + // Implementation of call_VM versions void MacroAssembler::call_VM(Register oop_result, @@ -6923,9 +6952,7 @@ // get oop result if there is one and reset the value in the thread if (oop_result->is_valid()) { - movptr(oop_result, Address(java_thread, JavaThread::vm_result_offset())); - movptr(Address(java_thread, JavaThread::vm_result_offset()), NULL_WORD); - verify_oop(oop_result, "broken oop in call_VM_base"); + get_vm_result(oop_result, java_thread); } } @@ -7016,6 +7043,17 @@ MacroAssembler::call_VM_leaf_base(entry_point, 4); } +void MacroAssembler::get_vm_result(Register oop_result, Register java_thread) { + movptr(oop_result, Address(java_thread, JavaThread::vm_result_offset())); + movptr(Address(java_thread, JavaThread::vm_result_offset()), NULL_WORD); + verify_oop(oop_result, "broken oop in call_VM_base"); +} + +void MacroAssembler::get_vm_result_2(Register metadata_result, Register java_thread) { + movptr(metadata_result, Address(java_thread, JavaThread::vm_result_2_offset())); + movptr(Address(java_thread, JavaThread::vm_result_2_offset()), NULL_WORD); +} + void MacroAssembler::check_and_handle_earlyret(Register java_thread) { } @@ -9097,20 +9135,20 @@ "caller must use same register for non-constant itable index as for method"); // Compute start of first itableOffsetEntry (which is at the end of the vtable) - int vtable_base = instanceKlass::vtable_start_offset() * wordSize; + int vtable_base = InstanceKlass::vtable_start_offset() * wordSize; int itentry_off = itableMethodEntry::method_offset_in_bytes(); int scan_step = itableOffsetEntry::size() * wordSize; int vte_size = vtableEntry::size() * wordSize; Address::ScaleFactor times_vte_scale = Address::times_ptr; assert(vte_size == wordSize, "else adjust times_vte_scale"); - movl(scan_temp, Address(recv_klass, instanceKlass::vtable_length_offset() * wordSize)); + movl(scan_temp, Address(recv_klass, InstanceKlass::vtable_length_offset() * wordSize)); // %%% Could store the aligned, prescaled offset in the klassoop. lea(scan_temp, Address(recv_klass, scan_temp, times_vte_scale, vtable_base)); if (HeapWordsPerLong > 1) { // Round up to align_object_offset boundary - // see code for instanceKlass::start_of_itable! + // see code for InstanceKlass::start_of_itable! round_to(scan_temp, BytesPerLong); } @@ -9160,7 +9198,7 @@ void MacroAssembler::lookup_virtual_method(Register recv_klass, RegisterOrConstant vtable_index, Register method_result) { - const int base = instanceKlass::vtable_start_offset() * wordSize; + const int base = InstanceKlass::vtable_start_offset() * wordSize; assert(vtableEntry::size() * wordSize == wordSize, "else adjust the scaling in the code below"); Address vtable_entry_addr(recv_klass, vtable_index, Address::times_ptr, @@ -9335,33 +9373,19 @@ // We will consult the secondary-super array. movptr(rdi, secondary_supers_addr); // Load the array length. (Positive movl does right thing on LP64.) - movl(rcx, Address(rdi, arrayOopDesc::length_offset_in_bytes())); + movl(rcx, Address(rdi, Array::length_offset_in_bytes())); // Skip to start of data. - addptr(rdi, arrayOopDesc::base_offset_in_bytes(T_OBJECT)); + addptr(rdi, Array::base_offset_in_bytes()); // Scan RCX words at [RDI] for an occurrence of RAX. // Set NZ/Z based on last compare. // Z flag value will not be set by 'repne' if RCX == 0 since 'repne' does // not change flags (only scas instruction which is repeated sets flags). // Set Z = 0 (not equal) before 'repne' to indicate that class was not found. -#ifdef _LP64 - // This part is tricky, as values in supers array could be 32 or 64 bit wide - // and we store values in objArrays always encoded, thus we need to encode - // the value of rax before repne. Note that rax is dead after the repne. - if (UseCompressedOops) { - encode_heap_oop_not_null(rax); // Changes flags. - // The superclass is never null; it would be a basic system error if a null - // pointer were to sneak in here. Note that we have already loaded the - // Klass::super_check_offset from the super_klass in the fast path, - // so if there is a null in that register, we are already in the afterlife. - testl(rax,rax); // Set Z = 0 - repne_scanl(); - } else -#endif // _LP64 - { + testptr(rax,rax); // Set Z = 0 repne_scan(); - } + // Unspill the temp. registers: if (pushed_rdi) pop(rdi); if (pushed_rcx) pop(rcx); @@ -9907,7 +9931,7 @@ void MacroAssembler::load_klass(Register dst, Register src) { #ifdef _LP64 - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { movl(dst, Address(src, oopDesc::klass_offset_in_bytes())); decode_heap_oop_not_null(dst); } else @@ -9917,7 +9941,7 @@ void MacroAssembler::load_prototype_header(Register dst, Register src) { #ifdef _LP64 - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { assert (Universe::heap() != NULL, "java heap should be initialized"); movl(dst, Address(src, oopDesc::klass_offset_in_bytes())); if (Universe::narrow_oop_shift() != 0) { @@ -9942,7 +9966,7 @@ void MacroAssembler::store_klass(Register dst, Register src) { #ifdef _LP64 - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { encode_heap_oop_not_null(src); movl(Address(dst, oopDesc::klass_offset_in_bytes()), src); } else @@ -9952,6 +9976,7 @@ void MacroAssembler::load_heap_oop(Register dst, Address src) { #ifdef _LP64 + // FIXME: Must change all places where we try to load the klass. if (UseCompressedOops) { movl(dst, src); decode_heap_oop(dst); @@ -10016,7 +10041,7 @@ #ifdef _LP64 void MacroAssembler::store_klass_gap(Register dst, Register src) { - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { // Store to klass gap in destination movl(Address(dst, oopDesc::klass_gap_offset_in_bytes()), src); } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/assembler_x86.hpp --- a/src/cpu/x86/vm/assembler_x86.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/assembler_x86.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -299,7 +299,7 @@ // Convert the raw encoding form into the form expected by the constructor for // Address. An index of 4 (rsp) corresponds to having no index, so convert // that to noreg for the Address constructor. - static Address make_raw(int base, int index, int scale, int disp, bool disp_is_oop); + static Address make_raw(int base, int index, int scale, int disp, relocInfo::relocType disp_reloc); static Address make_array(ArrayAddress); @@ -390,14 +390,6 @@ }; -class OopAddress: public AddressLiteral { - - public: - - OopAddress(address target) : AddressLiteral(target, relocInfo::oop_type){} - -}; - class ExternalAddress: public AddressLiteral { private: static relocInfo::relocType reloc_for_target(address target) { @@ -668,8 +660,6 @@ void emit_arith(int op1, int op2, Register dst, int32_t imm32); // Force generation of a 4 byte immediate value even if it fits into 8bit void emit_arith_imm32(int op1, int op2, Register dst, int32_t imm32); - // only 32bit?? - void emit_arith(int op1, int op2, Register dst, jobject obj); void emit_arith(int op1, int op2, Register dst, Register src); void emit_simd_arith(int opcode, XMMRegister dst, Address src, VexSimdPrefix pre); @@ -1972,6 +1962,9 @@ Register arg_1, Register arg_2, Register arg_3, bool check_exceptions = true); + void get_vm_result (Register oop_result, Register thread); + void get_vm_result_2(Register metadata_result, Register thread); + // These always tightly bind to MacroAssembler::call_VM_base // bypassing the virtual implementation void super_call_VM(Register oop_result, Register last_java_sp, address entry_point, int number_of_arguments = 0, bool check_exceptions = true); @@ -2387,6 +2380,8 @@ void cmp32(Register src1, Address src2); #ifndef _LP64 + void cmpklass(Address dst, Metadata* obj); + void cmpklass(Register dst, Metadata* obj); void cmpoop(Address dst, jobject obj); void cmpoop(Register dst, jobject obj); #endif // _LP64 @@ -2486,6 +2481,9 @@ // for jumps/calls. void call(AddressLiteral entry); + // Emit the CompiledIC call idiom + void ic_call(address entry); + // Jumps // NOTE: these jumps tranfer to the effective address of dst NOT @@ -2723,6 +2721,9 @@ void movoop(Register dst, jobject obj); void movoop(Address dst, jobject obj); + void mov_metadata(Register dst, Metadata* obj); + void mov_metadata(Address dst, Metadata* obj); + void movptr(ArrayAddress dst, Register src); // can this do an lea? void movptr(Register dst, ArrayAddress src); @@ -2775,6 +2776,7 @@ void popptr(Address src) { LP64_ONLY(popq(src)) NOT_LP64(popl(src)); } void pushoop(jobject obj); + void pushklass(Metadata* obj); // sign extend as need a l to ptr sized element void movl2ptr(Register dst, Address src) { LP64_ONLY(movslq(dst, src)) NOT_LP64(movl(dst, src)); } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/bytecodeInterpreter_x86.cpp --- a/src/cpu/x86/vm/bytecodeInterpreter_x86.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/bytecodeInterpreter_x86.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,8 +28,8 @@ #include "interpreter/bytecodeInterpreter.inline.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/interpreterRuntime.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/c1_CodeStubs_x86.cpp --- a/src/cpu/x86/vm/c1_CodeStubs_x86.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/c1_CodeStubs_x86.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -284,7 +284,24 @@ } if (_id == load_klass_id) { // produce a copy of the load klass instruction for use by the being initialized case +#ifdef ASSERT address start = __ pc(); +#endif + Metadata* o = NULL; + __ mov_metadata(_obj, o); +#ifdef ASSERT + for (int i = 0; i < _bytes_to_copy; i++) { + address ptr = (address)(_pc_start + i); + int a_byte = (*ptr) & 0xFF; + assert(a_byte == *start++, "should be the same code"); + } +#endif + } else if (_id == load_mirror_id) { + // produce a copy of the load mirror instruction for use by the being + // initialized case +#ifdef ASSERT + address start = __ pc(); +#endif jobject o = NULL; __ movoop(_obj, o); #ifdef ASSERT @@ -306,7 +323,7 @@ address end_of_patch = __ pc(); int bytes_to_skip = 0; - if (_id == load_klass_id) { + if (_id == load_mirror_id) { int offset = __ offset(); if (CommentedAssembly) { __ block_comment(" being_initialized check"); @@ -318,9 +335,9 @@ __ push(tmp2); // Load without verification to keep code size small. We need it because // begin_initialized_entry_offset has to fit in a byte. Also, we know it's not null. - __ load_heap_oop_not_null(tmp2, Address(_obj, java_lang_Class::klass_offset_in_bytes())); + __ movptr(tmp2, Address(_obj, java_lang_Class::klass_offset_in_bytes())); __ get_thread(tmp); - __ cmpptr(tmp, Address(tmp2, instanceKlass::init_thread_offset())); + __ cmpptr(tmp, Address(tmp2, InstanceKlass::init_thread_offset())); __ pop(tmp2); __ pop(tmp); __ jcc(Assembler::notEqual, call_patch); @@ -357,9 +374,11 @@ address entry = __ pc(); NativeGeneralJump::insert_unconditional((address)_pc_start, entry); address target = NULL; + relocInfo::relocType reloc_type = relocInfo::none; switch (_id) { case access_field_id: target = Runtime1::entry_for(Runtime1::access_field_patching_id); break; - case load_klass_id: target = Runtime1::entry_for(Runtime1::load_klass_patching_id); break; + case load_klass_id: target = Runtime1::entry_for(Runtime1::load_klass_patching_id); reloc_type = relocInfo::metadata_type; break; + case load_mirror_id: target = Runtime1::entry_for(Runtime1::load_mirror_patching_id); reloc_type = relocInfo::oop_type; break; default: ShouldNotReachHere(); } __ bind(call_patch); @@ -377,10 +396,10 @@ for (int j = __ offset() ; j < jmp_off + 5 ; j++ ) { __ nop(); } - if (_id == load_klass_id) { + if (_id == load_klass_id || _id == load_mirror_id) { CodeSection* cs = __ code_section(); RelocIterator iter(cs, (address)_pc_start, (address)(_pc_start + 1)); - relocInfo::change_reloc_info_for_address(&iter, (address) _pc_start, relocInfo::oop_type, relocInfo::none); + relocInfo::change_reloc_info_for_address(&iter, (address) _pc_start, reloc_type, relocInfo::none); } } @@ -420,7 +439,7 @@ //---------------slow case: call to native----------------- __ bind(_entry); // Figure out where the args should go - // This should really convert the IntrinsicID to the methodOop and signature + // This should really convert the IntrinsicID to the Method* and signature // but I don't know how to do that. // VMRegPair args[5]; diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/c1_LIRAssembler_x86.cpp --- a/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -361,11 +361,17 @@ void LIR_Assembler::jobject2reg_with_patching(Register reg, CodeEmitInfo* info) { jobject o = NULL; - PatchingStub* patch = new PatchingStub(_masm, PatchingStub::load_klass_id); + PatchingStub* patch = new PatchingStub(_masm, PatchingStub::load_mirror_id); __ movoop(reg, o); patching_epilog(patch, lir_patch_normal, reg, info); } +void LIR_Assembler::klass2reg_with_patching(Register reg, CodeEmitInfo* info) { + Metadata* o = NULL; + PatchingStub* patch = new PatchingStub(_masm, PatchingStub::load_klass_id); + __ mov_metadata(reg, o); + patching_epilog(patch, lir_patch_normal, reg, info); +} // This specifies the rsp decrement needed to build the frame int LIR_Assembler::initial_frame_size_in_bytes() { @@ -448,7 +454,7 @@ if (compilation()->env()->dtrace_method_probes()) { __ get_thread(rax); __ movptr(Address(rsp, 0), rax); - __ movoop(Address(rsp, sizeof(void*)), method()->constant_encoding()); + __ mov_metadata(Address(rsp, sizeof(void*)), method()->constant_encoding()); __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit))); } @@ -669,6 +675,15 @@ break; } + case T_METADATA: { + if (patch_code != lir_patch_none) { + klass2reg_with_patching(dest->as_register(), info); + } else { + __ mov_metadata(dest->as_register(), c->as_metadata()); + } + break; + } + case T_FLOAT: { if (dest->is_single_xmm()) { if (c->is_zero_float()) { @@ -1570,8 +1585,8 @@ void LIR_Assembler::emit_alloc_obj(LIR_OpAllocObj* op) { if (op->init_check()) { __ cmpb(Address(op->klass()->as_register(), - instanceKlass::init_state_offset()), - instanceKlass::fully_initialized); + InstanceKlass::init_state_offset()), + InstanceKlass::fully_initialized); add_debug_info_for_null_check_here(op->stub()->info()); __ jcc(Assembler::notEqual, *op->stub()->entry()); } @@ -1687,10 +1702,10 @@ assert_different_registers(obj, k_RInfo, klass_RInfo); if (!k->is_loaded()) { - jobject2reg_with_patching(k_RInfo, op->info_for_patch()); + klass2reg_with_patching(k_RInfo, op->info_for_patch()); } else { #ifdef _LP64 - __ movoop(k_RInfo, k->constant_encoding()); + __ mov_metadata(k_RInfo, k->constant_encoding()); #endif // _LP64 } assert(obj != k_RInfo, "must be different"); @@ -1701,7 +1716,7 @@ __ jccb(Assembler::notEqual, not_null); // Object is null; update MDO and exit Register mdo = klass_RInfo; - __ movoop(mdo, md->constant_encoding()); + __ mov_metadata(mdo, md->constant_encoding()); Address data_addr(mdo, md->byte_offset_of_slot(data, DataLayout::header_offset())); int header_bits = DataLayout::flag_mask_to_header_mask(BitData::null_seen_byte_constant()); __ orl(data_addr, header_bits); @@ -1716,7 +1731,7 @@ // get object class // not a safepoint as obj null check happens earlier #ifdef _LP64 - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { __ load_klass(Rtmp1, obj); __ cmpptr(k_RInfo, Rtmp1); } else { @@ -1724,7 +1739,7 @@ } #else if (k->is_loaded()) { - __ cmpoop(Address(obj, oopDesc::klass_offset_in_bytes()), k->constant_encoding()); + __ cmpklass(Address(obj, oopDesc::klass_offset_in_bytes()), k->constant_encoding()); } else { __ cmpptr(k_RInfo, Address(obj, oopDesc::klass_offset_in_bytes())); } @@ -1740,7 +1755,7 @@ #ifdef _LP64 __ cmpptr(k_RInfo, Address(klass_RInfo, k->super_check_offset())); #else - __ cmpoop(Address(klass_RInfo, k->super_check_offset()), k->constant_encoding()); + __ cmpklass(Address(klass_RInfo, k->super_check_offset()), k->constant_encoding()); #endif // _LP64 if ((juint)in_bytes(Klass::secondary_super_cache_offset()) != k->super_check_offset()) { __ jcc(Assembler::notEqual, *failure_target); @@ -1752,7 +1767,7 @@ #ifdef _LP64 __ cmpptr(klass_RInfo, k_RInfo); #else - __ cmpoop(klass_RInfo, k->constant_encoding()); + __ cmpklass(klass_RInfo, k->constant_encoding()); #endif // _LP64 __ jcc(Assembler::equal, *success_target); @@ -1760,7 +1775,7 @@ #ifdef _LP64 __ push(k_RInfo); #else - __ pushoop(k->constant_encoding()); + __ pushklass(k->constant_encoding()); #endif // _LP64 __ call(RuntimeAddress(Runtime1::entry_for(Runtime1::slow_subtype_check_id))); __ pop(klass_RInfo); @@ -1788,14 +1803,14 @@ if (op->should_profile()) { Register mdo = klass_RInfo, recv = k_RInfo; __ bind(profile_cast_success); - __ movoop(mdo, md->constant_encoding()); + __ mov_metadata(mdo, md->constant_encoding()); __ load_klass(recv, obj); Label update_done; type_profile_helper(mdo, md, data, recv, success); __ jmp(*success); __ bind(profile_cast_failure); - __ movoop(mdo, md->constant_encoding()); + __ mov_metadata(mdo, md->constant_encoding()); Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset())); __ subptr(counter_addr, DataLayout::counter_increment); __ jmp(*failure); @@ -1839,7 +1854,7 @@ __ jccb(Assembler::notEqual, not_null); // Object is null; update MDO and exit Register mdo = klass_RInfo; - __ movoop(mdo, md->constant_encoding()); + __ mov_metadata(mdo, md->constant_encoding()); Address data_addr(mdo, md->byte_offset_of_slot(data, DataLayout::header_offset())); int header_bits = DataLayout::flag_mask_to_header_mask(BitData::null_seen_byte_constant()); __ orl(data_addr, header_bits); @@ -1871,14 +1886,14 @@ if (op->should_profile()) { Register mdo = klass_RInfo, recv = k_RInfo; __ bind(profile_cast_success); - __ movoop(mdo, md->constant_encoding()); + __ mov_metadata(mdo, md->constant_encoding()); __ load_klass(recv, value); Label update_done; type_profile_helper(mdo, md, data, recv, &done); __ jmpb(done); __ bind(profile_cast_failure); - __ movoop(mdo, md->constant_encoding()); + __ mov_metadata(mdo, md->constant_encoding()); Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset())); __ subptr(counter_addr, DataLayout::counter_increment); __ jmp(*stub->entry()); @@ -2864,13 +2879,11 @@ void LIR_Assembler::ic_call(LIR_OpJavaCall* op) { - RelocationHolder rh = virtual_call_Relocation::spec(pc()); - __ movoop(IC_Klass, (jobject)Universe::non_oop_word()); + __ ic_call(op->addr()); + add_call_info(code_offset(), op->info()); assert(!os::is_MP() || - (__ offset() + NativeCall::displacement_offset) % BytesPerWord == 0, + (__ offset() - NativeCall::instruction_size + NativeCall::displacement_offset) % BytesPerWord == 0, "must be aligned"); - __ call(AddressLiteral(op->addr(), rh)); - add_call_info(code_offset(), op->info()); } @@ -2897,7 +2910,7 @@ } } __ relocate(static_stub_Relocation::spec(call_pc)); - __ movoop(rbx, (jobject)NULL); + __ mov_metadata(rbx, (Metadata*)NULL); // must be set to -1 at code generation time assert(!os::is_MP() || ((__ offset() + 1) % BytesPerWord) == 0, "must be aligned on MP"); // On 64bit this will die since it will take a movq & jmp, must be only a jmp @@ -3258,7 +3271,7 @@ // We don't know the array types are compatible if (basic_type != T_OBJECT) { // Simple test for basic type arrays - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { __ movl(tmp, src_klass_addr); __ cmpl(tmp, dst_klass_addr); } else { @@ -3418,23 +3431,23 @@ // subtype which we can't check or src is the same array as dst // but not necessarily exactly of type default_type. Label known_ok, halt; - __ movoop(tmp, default_type->constant_encoding()); + __ mov_metadata(tmp, default_type->constant_encoding()); #ifdef _LP64 - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { __ encode_heap_oop(tmp); } #endif if (basic_type != T_OBJECT) { - if (UseCompressedOops) __ cmpl(tmp, dst_klass_addr); + if (UseCompressedKlassPointers) __ cmpl(tmp, dst_klass_addr); else __ cmpptr(tmp, dst_klass_addr); __ jcc(Assembler::notEqual, halt); - if (UseCompressedOops) __ cmpl(tmp, src_klass_addr); + if (UseCompressedKlassPointers) __ cmpl(tmp, src_klass_addr); else __ cmpptr(tmp, src_klass_addr); __ jcc(Assembler::equal, known_ok); } else { - if (UseCompressedOops) __ cmpl(tmp, dst_klass_addr); + if (UseCompressedKlassPointers) __ cmpl(tmp, dst_klass_addr); else __ cmpptr(tmp, dst_klass_addr); __ jcc(Assembler::equal, known_ok); __ cmpptr(src, dst); @@ -3517,7 +3530,7 @@ assert(data->is_CounterData(), "need CounterData for calls"); assert(op->mdo()->is_single_cpu(), "mdo must be allocated"); Register mdo = op->mdo()->as_register(); - __ movoop(mdo, md->constant_encoding()); + __ mov_metadata(mdo, md->constant_encoding()); Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset())); Bytecodes::Code bc = method->java_code_at_bci(bci); const bool callee_is_static = callee->is_loaded() && callee->is_static(); @@ -3533,7 +3546,7 @@ ciKlass* known_klass = op->known_holder(); if (C1OptimizeVirtualCallProfiling && known_klass != NULL) { // We know the type that will be seen at this call site; we can - // statically update the methodDataOop rather than needing to do + // statically update the MethodData* rather than needing to do // dynamic tests on the receiver type // NOTE: we should probably put a lock around this search to @@ -3558,7 +3571,7 @@ ciKlass* receiver = vc_data->receiver(i); if (receiver == NULL) { Address recv_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_offset(i))); - __ movoop(recv_addr, known_klass->constant_encoding()); + __ mov_metadata(recv_addr, known_klass->constant_encoding()); Address data_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i))); __ addptr(data_addr, DataLayout::counter_increment); return; diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/c1_LIRGenerator_x86.cpp --- a/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1061,11 +1061,11 @@ LIR_Opr len = length.result(); CodeStub* slow_path = new NewObjectArrayStub(klass_reg, len, reg, info); - ciObject* obj = (ciObject*) ciObjArrayKlass::make(x->klass()); + ciKlass* obj = (ciKlass*) ciObjArrayKlass::make(x->klass()); if (obj == ciEnv::unloaded_ciobjarrayklass()) { BAILOUT("encountered unloaded_ciobjarrayklass due to out of memory error"); } - jobject2reg_with_patching(klass_reg, obj, patching_info); + klass2reg_with_patching(klass_reg, obj, patching_info); __ allocate_array(reg, len, tmp1, tmp2, tmp3, tmp4, T_OBJECT, klass_reg, slow_path); LIR_Opr result = rlock_result(x); @@ -1104,7 +1104,7 @@ } LIR_Opr reg = result_register_for(x->type()); - jobject2reg_with_patching(reg, x->klass(), patching_info); + klass2reg_with_patching(reg, x->klass(), patching_info); LIR_Opr rank = FrameMap::rbx_opr; __ move(LIR_OprFact::intConst(x->rank()), rank); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/c1_MacroAssembler_x86.cpp --- a/src/cpu/x86/vm/c1_MacroAssembler_x86.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/c1_MacroAssembler_x86.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -157,7 +157,7 @@ movptr(Address(obj, oopDesc::mark_offset_in_bytes ()), (int32_t)(intptr_t)markOopDesc::prototype()); } #ifdef _LP64 - if (UseCompressedOops) { // Take care not to kill klass + if (UseCompressedKlassPointers) { // Take care not to kill klass movptr(t1, klass); encode_heap_oop_not_null(t1); movl(Address(obj, oopDesc::klass_offset_in_bytes()), t1); @@ -171,7 +171,7 @@ movl(Address(obj, arrayOopDesc::length_offset_in_bytes()), len); } #ifdef _LP64 - else if (UseCompressedOops) { + else if (UseCompressedKlassPointers) { xorptr(t1, t1); store_klass_gap(obj, t1); } @@ -334,7 +334,7 @@ assert(!MacroAssembler::needs_explicit_null_check(oopDesc::klass_offset_in_bytes()), "must add explicit null check"); int start_offset = offset(); - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { load_klass(rscratch1, receiver); cmpptr(rscratch1, iCache); } else { @@ -345,7 +345,7 @@ jump_cc(Assembler::notEqual, RuntimeAddress(SharedRuntime::get_ic_miss_stub())); const int ic_cmp_size = LP64_ONLY(10) NOT_LP64(9); - assert(UseCompressedOops || offset() - start_offset == ic_cmp_size, "check alignment in emit_method_entry"); + assert(UseCompressedKlassPointers || offset() - start_offset == ic_cmp_size, "check alignment in emit_method_entry"); } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/c1_Runtime1_x86.cpp --- a/src/cpu/x86/vm/c1_Runtime1_x86.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/c1_Runtime1_x86.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,7 @@ #include "c1/c1_Runtime1.hpp" #include "interpreter/interpreter.hpp" #include "nativeInst_x86.hpp" -#include "oops/compiledICHolderOop.hpp" +#include "oops/compiledICHolder.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "register_x86.hpp" @@ -41,11 +41,11 @@ // Implementation of StubAssembler -int StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry, int args_size) { +int StubAssembler::call_RT(Register oop_result1, Register metadata_result, address entry, int args_size) { // setup registers const Register thread = NOT_LP64(rdi) LP64_ONLY(r15_thread); // is callee-saved register (Visual C++ calling conventions) - assert(!(oop_result1->is_valid() || oop_result2->is_valid()) || oop_result1 != oop_result2, "registers must be different"); - assert(oop_result1 != thread && oop_result2 != thread, "registers must be different"); + assert(!(oop_result1->is_valid() || metadata_result->is_valid()) || oop_result1 != metadata_result, "registers must be different"); + assert(oop_result1 != thread && metadata_result != thread, "registers must be different"); assert(args_size >= 0, "illegal args_size"); bool align_stack = false; #ifdef _LP64 @@ -109,7 +109,7 @@ if (oop_result1->is_valid()) { movptr(Address(thread, JavaThread::vm_result_offset()), NULL_WORD); } - if (oop_result2->is_valid()) { + if (metadata_result->is_valid()) { movptr(Address(thread, JavaThread::vm_result_2_offset()), NULL_WORD); } if (frame_size() == no_frame_size) { @@ -124,30 +124,26 @@ } // get oop results if there are any and reset the values in the thread if (oop_result1->is_valid()) { - movptr(oop_result1, Address(thread, JavaThread::vm_result_offset())); - movptr(Address(thread, JavaThread::vm_result_offset()), NULL_WORD); - verify_oop(oop_result1); + get_vm_result(oop_result1, thread); } - if (oop_result2->is_valid()) { - movptr(oop_result2, Address(thread, JavaThread::vm_result_2_offset())); - movptr(Address(thread, JavaThread::vm_result_2_offset()), NULL_WORD); - verify_oop(oop_result2); + if (metadata_result->is_valid()) { + get_vm_result_2(metadata_result, thread); } return call_offset; } -int StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1) { +int StubAssembler::call_RT(Register oop_result1, Register metadata_result, address entry, Register arg1) { #ifdef _LP64 mov(c_rarg1, arg1); #else push(arg1); #endif // _LP64 - return call_RT(oop_result1, oop_result2, entry, 1); + return call_RT(oop_result1, metadata_result, entry, 1); } -int StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1, Register arg2) { +int StubAssembler::call_RT(Register oop_result1, Register metadata_result, address entry, Register arg1, Register arg2) { #ifdef _LP64 if (c_rarg1 == arg2) { if (c_rarg2 == arg1) { @@ -164,11 +160,11 @@ push(arg2); push(arg1); #endif // _LP64 - return call_RT(oop_result1, oop_result2, entry, 2); + return call_RT(oop_result1, metadata_result, entry, 2); } -int StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1, Register arg2, Register arg3) { +int StubAssembler::call_RT(Register oop_result1, Register metadata_result, address entry, Register arg1, Register arg2, Register arg3) { #ifdef _LP64 // if there is any conflict use the stack if (arg1 == c_rarg2 || arg1 == c_rarg3 || @@ -190,7 +186,7 @@ push(arg2); push(arg1); #endif // _LP64 - return call_RT(oop_result1, oop_result2, entry, 3); + return call_RT(oop_result1, metadata_result, entry, 3); } @@ -1027,7 +1023,7 @@ if (id == fast_new_instance_init_check_id) { // make sure the klass is initialized - __ cmpb(Address(klass, instanceKlass::init_state_offset()), instanceKlass::fully_initialized); + __ cmpb(Address(klass, InstanceKlass::init_state_offset()), InstanceKlass::fully_initialized); __ jcc(Assembler::notEqual, slow_path); } @@ -1106,7 +1102,7 @@ OopMap* map = save_live_registers(sasm, 3); // Retrieve bci __ movl(bci, Address(rbp, 2*BytesPerWord)); - // And a pointer to the methodOop + // And a pointer to the Method* __ movptr(method, Address(rbp, 3*BytesPerWord)); int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, counter_overflow), bci, method); oop_maps = new OopMapSet(); @@ -1291,8 +1287,7 @@ __ bind(register_finalizer); __ enter(); OopMap* oop_map = save_live_registers(sasm, 2 /*num_rt_args */); - int call_offset = __ call_RT(noreg, noreg, - CAST_FROM_FN_PTR(address, SharedRuntime::register_finalizer), rax); + int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, SharedRuntime::register_finalizer), rax); oop_maps = new OopMapSet(); oop_maps->add_gc_map(call_offset, oop_map); @@ -1496,6 +1491,13 @@ } break; + case load_mirror_patching_id: + { StubFrame f(sasm, "load_mirror_patching", dont_gc_arguments); + // we should set up register map + oop_maps = generate_patching(sasm, CAST_FROM_FN_PTR(address, move_mirror_patching)); + } + break; + case dtrace_object_alloc_id: { // rax,: object StubFrame f(sasm, "dtrace_object_alloc", dont_gc_arguments); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/c1_globals_x86.hpp --- a/src/cpu/x86/vm/c1_globals_x86.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/c1_globals_x86.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,8 +51,7 @@ define_pd_global(bool, ProfileInterpreter, false); define_pd_global(intx, CodeCacheExpansionSize, 32*K ); define_pd_global(uintx,CodeCacheMinBlockLength, 1); -define_pd_global(uintx,PermSize, 12*M ); -define_pd_global(uintx,MaxPermSize, 64*M ); +define_pd_global(uintx,MetaspaceSize, 12*M ); define_pd_global(bool, NeverActAsServerClassMachine, true ); define_pd_global(uint64_t,MaxRAM, 1ULL*G); define_pd_global(bool, CICompileOSR, true ); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/c2_globals_x86.hpp --- a/src/cpu/x86/vm/c2_globals_x86.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/c2_globals_x86.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -88,8 +88,7 @@ define_pd_global(uintx,CodeCacheMinBlockLength, 4); // Heap related flags -define_pd_global(uintx,PermSize, ScaleForWordSize(16*M)); -define_pd_global(uintx,MaxPermSize, ScaleForWordSize(64*M)); +define_pd_global(uintx,MetaspaceSize, ScaleForWordSize(16*M)); // Ergonomics related flags define_pd_global(bool, NeverActAsServerClassMachine, false); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/cppInterpreter_x86.cpp --- a/src/cpu/x86/vm/cppInterpreter_x86.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/cppInterpreter_x86.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -30,8 +30,8 @@ #include "interpreter/interpreterGenerator.hpp" #include "interpreter/interpreterRuntime.hpp" #include "oops/arrayOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" @@ -421,7 +421,7 @@ // state == address of new interpreterState // rsp == bottom of method's expression stack. - const Address const_offset (rbx, methodOopDesc::const_offset()); + const Address const_offset (rbx, Method::const_offset()); // On entry sp is the sender's sp. This includes the space for the arguments @@ -471,8 +471,8 @@ __ get_thread(rax); // get vm's javathread* __ movptr(STATE(_thread), rax); // state->_bcp = codes() #endif // _LP64 - __ movptr(rdx, Address(rbx, methodOopDesc::const_offset())); // get constantMethodOop - __ lea(rdx, Address(rdx, constMethodOopDesc::codes_offset())); // get code base + __ movptr(rdx, Address(rbx, Method::const_offset())); // get constantMethodOop + __ lea(rdx, Address(rdx, ConstMethod::codes_offset())); // get code base if (native) { __ movptr(STATE(_bcp), (int32_t)NULL_WORD); // state->_bcp = NULL } else { @@ -481,9 +481,9 @@ __ xorptr(rdx, rdx); __ movptr(STATE(_oop_temp), rdx); // state->_oop_temp = NULL (only really needed for native) __ movptr(STATE(_mdx), rdx); // state->_mdx = NULL - __ movptr(rdx, Address(rbx, methodOopDesc::const_offset())); - __ movptr(rdx, Address(rdx, constMethodOopDesc::constants_offset())); - __ movptr(rdx, Address(rdx, constantPoolOopDesc::cache_offset_in_bytes())); + __ movptr(rdx, Address(rbx, Method::const_offset())); + __ movptr(rdx, Address(rdx, ConstMethod::constants_offset())); + __ movptr(rdx, Address(rdx, ConstantPool::cache_offset_in_bytes())); __ movptr(STATE(_constants), rdx); // state->_constants = constants() __ movptr(STATE(_method), rbx); // state->_method = method() @@ -500,7 +500,7 @@ // immediately. // synchronize method - const Address access_flags (rbx, methodOopDesc::access_flags_offset()); + const Address access_flags (rbx, Method::access_flags_offset()); const int entry_size = frame::interpreter_frame_monitor_size() * wordSize; Label not_synced; @@ -517,9 +517,9 @@ __ testl(rax, JVM_ACC_STATIC); __ movptr(rax, Address(locals, 0)); // get receiver (assume this is frequent case) __ jcc(Assembler::zero, done); - __ movptr(rax, Address(rbx, methodOopDesc::const_offset())); - __ movptr(rax, Address(rax, constMethodOopDesc::constants_offset())); - __ movptr(rax, Address(rax, constantPoolOopDesc::pool_holder_offset_in_bytes())); + __ movptr(rax, Address(rbx, Method::const_offset())); + __ movptr(rax, Address(rax, ConstMethod::constants_offset())); + __ movptr(rax, Address(rax, ConstantPool::pool_holder_offset_in_bytes())); __ movptr(rax, Address(rax, mirror_offset)); __ bind(done); // add space for monitor & lock @@ -538,8 +538,8 @@ // compute full expression stack limit - const Address size_of_stack (rbx, methodOopDesc::max_stack_offset()); - const int extra_stack = 0; //6815692//methodOopDesc::extra_stack_words(); + const Address size_of_stack (rbx, Method::max_stack_offset()); + const int extra_stack = 0; //6815692//Method::extra_stack_words(); __ load_unsigned_short(rdx, size_of_stack); // get size of expression stack in words __ negptr(rdx); // so we can subtract in next step // Allocate expression stack @@ -570,11 +570,11 @@ // void InterpreterGenerator::generate_counter_incr(Label* overflow, Label* profile_method, Label* profile_method_continue) { - const Address invocation_counter(rbx, methodOopDesc::invocation_counter_offset() + InvocationCounter::counter_offset()); - const Address backedge_counter (rbx, methodOopDesc::backedge_counter_offset() + InvocationCounter::counter_offset()); - - if (ProfileInterpreter) { // %%% Merge this into methodDataOop - __ incrementl(Address(rbx,methodOopDesc::interpreter_invocation_counter_offset())); + const Address invocation_counter(rbx, Method::invocation_counter_offset() + InvocationCounter::counter_offset()); + const Address backedge_counter (rbx, Method::backedge_counter_offset() + InvocationCounter::counter_offset()); + + if (ProfileInterpreter) { // %%% Merge this into MethodData* + __ incrementl(Address(rbx,Method::interpreter_invocation_counter_offset())); } // Update standard invocation counters __ movl(rax, backedge_counter); // load backedge counter @@ -611,7 +611,7 @@ // C++ interpreter only // rsi/r13 - previous interpreter state pointer - const Address size_of_parameters(rbx, methodOopDesc::size_of_parameters_offset()); + const Address size_of_parameters(rbx, Method::size_of_parameters_offset()); // InterpreterRuntime::frequency_counter_overflow takes one argument // indicating if the counter overflow occurs at a backwards branch (non-NULL bcp). @@ -638,14 +638,14 @@ // // Asm interpreter // rdx: number of additional locals this frame needs (what we must check) - // rbx,: methodOop + // rbx,: Method* // C++ Interpreter // rsi/r13: previous interpreter frame state object // rdi: &locals[0] // rcx: # of locals // rdx: number of additional locals this frame needs (what we must check) - // rbx: methodOop + // rbx: Method* // destroyed on exit // rax, @@ -682,11 +682,11 @@ const Address stack_size(thread, Thread::stack_size_offset()); // locals + overhead, in bytes - const Address size_of_stack (rbx, methodOopDesc::max_stack_offset()); + const Address size_of_stack (rbx, Method::max_stack_offset()); // Always give one monitor to allow us to start interp if sync method. // Any additional monitors need a check when moving the expression stack const int one_monitor = frame::interpreter_frame_monitor_size() * wordSize; - const int extra_stack = 0; //6815692//methodOopDesc::extra_stack_entries(); + const int extra_stack = 0; //6815692//Method::extra_stack_entries(); __ load_unsigned_short(rax, size_of_stack); // get size of expression stack in words __ lea(rax, Address(noreg, rax, Interpreter::stackElementScale(), extra_stack + one_monitor)); __ lea(rax, Address(rax, rdx, Interpreter::stackElementScale(), overhead_size)); @@ -738,7 +738,7 @@ } // Find preallocated monitor and lock method (C++ interpreter) -// rbx - methodOop +// rbx - Method* // void InterpreterGenerator::lock_method(void) { // assumes state == rsi/r13 == pointer to current interpreterState @@ -746,7 +746,7 @@ // // synchronize method const int entry_size = frame::interpreter_frame_monitor_size() * wordSize; - const Address access_flags (rbx, methodOopDesc::access_flags_offset()); + const Address access_flags (rbx, Method::access_flags_offset()); const Register monitor = NOT_LP64(rdx) LP64_ONLY(c_rarg1); @@ -771,9 +771,9 @@ __ testl(rax, JVM_ACC_STATIC); __ movptr(rax, Address(rdi, 0)); // get receiver (assume this is frequent case) __ jcc(Assembler::zero, done); - __ movptr(rax, Address(rbx, methodOopDesc::const_offset())); - __ movptr(rax, Address(rax, constMethodOopDesc::constants_offset())); - __ movptr(rax, Address(rax, constantPoolOopDesc::pool_holder_offset_in_bytes())); + __ movptr(rax, Address(rbx, Method::const_offset())); + __ movptr(rax, Address(rax, ConstMethod::constants_offset())); + __ movptr(rax, Address(rax, ConstantPool::pool_holder_offset_in_bytes())); __ movptr(rax, Address(rax, mirror_offset)); __ bind(done); } @@ -793,7 +793,7 @@ address InterpreterGenerator::generate_accessor_entry(void) { - // rbx: methodOop + // rbx: Method* // rsi/r13: senderSP must preserved for slow path, set SP to it on fast path @@ -825,14 +825,14 @@ __ jcc(Assembler::zero, slow_path); // read first instruction word and extract bytecode @ 1 and index @ 2 - __ movptr(rdx, Address(rbx, methodOopDesc::const_offset())); - __ movptr(rdi, Address(rdx, constMethodOopDesc::constants_offset())); - __ movl(rdx, Address(rdx, constMethodOopDesc::codes_offset())); + __ movptr(rdx, Address(rbx, Method::const_offset())); + __ movptr(rdi, Address(rdx, ConstMethod::constants_offset())); + __ movl(rdx, Address(rdx, ConstMethod::codes_offset())); // Shift codes right to get the index on the right. // The bytecode fetched looks like <0xb4><0x2a> __ shrl(rdx, 2*BitsPerByte); __ shll(rdx, exact_log2(in_words(ConstantPoolCacheEntry::size()))); - __ movptr(rdi, Address(rdi, constantPoolOopDesc::cache_offset_in_bytes())); + __ movptr(rdi, Address(rdi, ConstantPool::cache_offset_in_bytes())); // rax,: local 0 // rbx,: method @@ -849,7 +849,7 @@ __ movl(rcx, Address(rdi, rdx, - Address::times_ptr, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::indices_offset())); + Address::times_ptr, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::indices_offset())); __ shrl(rcx, 2*BitsPerByte); __ andl(rcx, 0xFF); __ cmpl(rcx, Bytecodes::_getfield); @@ -859,11 +859,11 @@ __ movptr(rcx, Address(rdi, rdx, - Address::times_ptr, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::f2_offset())); + Address::times_ptr, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f2_offset())); __ movl(rdx, Address(rdi, rdx, - Address::times_ptr, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::flags_offset())); + Address::times_ptr, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset())); Label notByte, notShort, notChar; const Address field_address (rax, rcx, Address::times_1); @@ -970,17 +970,17 @@ // determine code generation flags bool inc_counter = UseCompiler || CountCompiledCalls; - // rbx: methodOop + // rbx: Method* // rcx: receiver (unused) // rsi/r13: previous interpreter state (if called from C++ interpreter) must preserve // in any case. If called via c1/c2/call_stub rsi/r13 is junk (to use) but harmless // to save/restore. address entry_point = __ pc(); - const Address size_of_parameters(rbx, methodOopDesc::size_of_parameters_offset()); - const Address size_of_locals (rbx, methodOopDesc::size_of_locals_offset()); - const Address invocation_counter(rbx, methodOopDesc::invocation_counter_offset() + InvocationCounter::counter_offset()); - const Address access_flags (rbx, methodOopDesc::access_flags_offset()); + const Address size_of_parameters(rbx, Method::size_of_parameters_offset()); + const Address size_of_locals (rbx, Method::size_of_locals_offset()); + const Address invocation_counter(rbx, Method::invocation_counter_offset() + InvocationCounter::counter_offset()); + const Address access_flags (rbx, Method::access_flags_offset()); // rsi/r13 == state/locals rdi == prevstate const Register locals = rdi; @@ -988,7 +988,7 @@ // get parameter size (always needed) __ load_unsigned_short(rcx, size_of_parameters); - // rbx: methodOop + // rbx: Method* // rcx: size of parameters __ pop(rax); // get return address // for natives the size of locals is zero @@ -1111,7 +1111,7 @@ // allocate space for parameters __ movptr(method, STATE(_method)); __ verify_oop(method); - __ load_unsigned_short(t, Address(method, methodOopDesc::size_of_parameters_offset())); + __ load_unsigned_short(t, Address(method, Method::size_of_parameters_offset())); __ shll(t, 2); #ifdef _LP64 __ subptr(rsp, t); @@ -1127,7 +1127,7 @@ Label pending_exception_present; { Label L; - __ movptr(t, Address(method, methodOopDesc::signature_handler_offset())); + __ movptr(t, Address(method, Method::signature_handler_offset())); __ testptr(t, t); __ jcc(Assembler::notZero, L); __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::prepare_native_call), method, false); @@ -1135,7 +1135,7 @@ __ cmpptr(Address(thread, Thread::pending_exception_offset()), (int32_t)NULL_WORD); __ jcc(Assembler::notEqual, pending_exception_present); __ verify_oop(method); - __ movptr(t, Address(method, methodOopDesc::signature_handler_offset())); + __ movptr(t, Address(method, Method::signature_handler_offset())); __ bind(L); } #ifdef ASSERT @@ -1171,26 +1171,26 @@ // get native function entry point { Label L; - __ movptr(rax, Address(method, methodOopDesc::native_function_offset())); + __ movptr(rax, Address(method, Method::native_function_offset())); __ testptr(rax, rax); __ jcc(Assembler::notZero, L); __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::prepare_native_call), method); __ movptr(method, STATE(_method)); __ verify_oop(method); - __ movptr(rax, Address(method, methodOopDesc::native_function_offset())); + __ movptr(rax, Address(method, Method::native_function_offset())); __ bind(L); } // pass mirror handle if static call { Label L; const int mirror_offset = in_bytes(Klass::java_mirror_offset()); - __ movl(t, Address(method, methodOopDesc::access_flags_offset())); + __ movl(t, Address(method, Method::access_flags_offset())); __ testl(t, JVM_ACC_STATIC); __ jcc(Assembler::zero, L); // get mirror - __ movptr(t, Address(method, methodOopDesc:: const_offset())); - __ movptr(t, Address(t, constMethodOopDesc::constants_offset())); - __ movptr(t, Address(t, constantPoolOopDesc::pool_holder_offset_in_bytes())); + __ movptr(t, Address(method, Method:: const_offset())); + __ movptr(t, Address(t, ConstMethod::constants_offset())); + __ movptr(t, Address(t, ConstantPool::pool_holder_offset_in_bytes())); __ movptr(t, Address(t, mirror_offset)); // copy mirror into activation object __ movptr(STATE(_oop_temp), t); @@ -1438,7 +1438,7 @@ // do unlocking if necessary { Label L; - __ movl(t, Address(method, methodOopDesc::access_flags_offset())); + __ movl(t, Address(method, Method::access_flags_offset())); __ testl(t, JVM_ACC_SYNCHRONIZED); __ jcc(Assembler::zero, L); // the code below should be shared with interpreter macro assembler implementation @@ -1634,7 +1634,7 @@ // // Arguments: // -// rbx: methodOop +// rbx: Method* // rcx: receiver - unused (retrieved from stack as needed) // rsi/r13: previous frame manager state (NULL from the call_stub/c1/c2) // @@ -1657,7 +1657,7 @@ address InterpreterGenerator::generate_normal_entry(bool synchronized) { - // rbx: methodOop + // rbx: Method* // rsi/r13: sender sp // Because we redispatch "recursive" interpreter entries thru this same entry point @@ -1700,9 +1700,9 @@ // save sender sp __ push(rcx); - const Address size_of_parameters(rbx, methodOopDesc::size_of_parameters_offset()); - const Address size_of_locals (rbx, methodOopDesc::size_of_locals_offset()); - const Address access_flags (rbx, methodOopDesc::access_flags_offset()); + const Address size_of_parameters(rbx, Method::size_of_parameters_offset()); + const Address size_of_locals (rbx, Method::size_of_locals_offset()); + const Address access_flags (rbx, Method::access_flags_offset()); // const Address monitor_block_top (rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize); // const Address monitor_block_bot (rbp, frame::interpreter_frame_initial_sp_offset * wordSize); @@ -1711,7 +1711,7 @@ // get parameter size (always needed) __ load_unsigned_short(rcx, size_of_parameters); - // rbx: methodOop + // rbx: Method* // rcx: size of parameters __ load_unsigned_short(rdx, size_of_locals); // get size of locals in words @@ -1927,7 +1927,7 @@ if (UseSSE < 2) { __ lea(state, Address(rbp, -(int)sizeof(BytecodeInterpreter))); __ movptr(rbx, STATE(_result._to_call._callee)); // get method just executed - __ movl(rcx, Address(rbx, methodOopDesc::result_index_offset())); + __ movl(rcx, Address(rbx, Method::result_index_offset())); __ cmpl(rcx, AbstractInterpreter::BasicType_as_index(T_FLOAT)); // Result stub address array index __ jcc(Assembler::equal, do_float); __ cmpl(rcx, AbstractInterpreter::BasicType_as_index(T_DOUBLE)); // Result stub address array index @@ -1989,10 +1989,10 @@ __ movptr(rbx, STATE(_result._to_call._callee)); // callee left args on top of expression stack, remove them - __ load_unsigned_short(rcx, Address(rbx, methodOopDesc::size_of_parameters_offset())); + __ load_unsigned_short(rcx, Address(rbx, Method::size_of_parameters_offset())); __ lea(rsp, Address(rsp, rcx, Address::times_ptr)); - __ movl(rcx, Address(rbx, methodOopDesc::result_index_offset())); + __ movl(rcx, Address(rbx, Method::result_index_offset())); ExternalAddress tosca_to_stack((address)CppInterpreter::_tosca_to_stack); // Address index(noreg, rax, Address::times_ptr); __ movptr(rcx, ArrayAddress(tosca_to_stack, Address(noreg, rcx, Address::times_ptr))); @@ -2019,7 +2019,7 @@ __ movptr(rbx, STATE(_method)); // get method just executed __ cmpptr(STATE(_prev_link), (int32_t)NULL_WORD); // returning from "recursive" interpreter call? - __ movl(rax, Address(rbx, methodOopDesc::result_index_offset())); // get result type index + __ movl(rax, Address(rbx, Method::result_index_offset())); // get result type index __ jcc(Assembler::equal, return_to_initial_caller); // back to native code (call_stub/c1/c2) // Copy result to callers java stack @@ -2253,7 +2253,7 @@ // Deoptimization helpers for C++ interpreter // How much stack a method activation needs in words. -int AbstractInterpreter::size_top_interpreter_activation(methodOop method) { +int AbstractInterpreter::size_top_interpreter_activation(Method* method) { const int stub_code = 4; // see generate_call_stub // Save space for one monitor to get into the interpreted method in case @@ -2267,9 +2267,9 @@ const int overhead_size = sizeof(BytecodeInterpreter)/wordSize + ( frame::sender_sp_offset - frame::link_offset) + 2; - const int extra_stack = 0; //6815692//methodOopDesc::extra_stack_entries(); + const int extra_stack = 0; //6815692//Method::extra_stack_entries(); const int method_stack = (method->max_locals() + method->max_stack() + extra_stack) * - Interpreter::stackElementWords(); + Interpreter::stackElementWords; return overhead_size + method_stack + stub_code; } @@ -2285,7 +2285,7 @@ void BytecodeInterpreter::layout_interpreterState(interpreterState to_fill, frame* caller, frame* current, - methodOop method, + Method* method, intptr_t* locals, intptr_t* stack, intptr_t* stack_base, @@ -2333,7 +2333,7 @@ // Need +1 here because stack_base points to the word just above the first expr stack entry // and stack_limit is supposed to point to the word just below the last expr stack entry. // See generate_compute_interpreter_state. - int extra_stack = 0; //6815692//methodOopDesc::extra_stack_entries(); + int extra_stack = 0; //6815692//Method::extra_stack_entries(); to_fill->_stack_limit = stack_base - (method->max_stack() + extra_stack + 1); to_fill->_monitor_base = (BasicObjectLock*) monitor_base; @@ -2342,7 +2342,7 @@ "Stack top out of range"); } -int AbstractInterpreter::layout_activation(methodOop method, +int AbstractInterpreter::layout_activation(Method* method, int tempcount, // int popframe_extra_args, int moncount, @@ -2381,7 +2381,7 @@ monitor_size); // Now with full size expression stack - int extra_stack = 0; //6815692//methodOopDesc::extra_stack_entries(); + int extra_stack = 0; //6815692//Method::extra_stack_entries(); int full_frame_size = short_frame_size + (method->max_stack() + extra_stack) * BytesPerWord; // and now with only live portion of the expression stack diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/dump_x86_32.cpp --- a/src/cpu/x86/vm/dump_x86_32.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,127 +0,0 @@ -/* - * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "assembler_x86.inline.hpp" -#include "memory/compactingPermGenGen.hpp" -#include "memory/generation.inline.hpp" -#include "memory/space.inline.hpp" - - - -// Generate the self-patching vtable method: -// -// This method will be called (as any other Klass virtual method) with -// the Klass itself as the first argument. Example: -// -// oop obj; -// int size = obj->klass()->klass_part()->oop_size(this); -// -// for which the virtual method call is Klass::oop_size(); -// -// The dummy method is called with the Klass object as the first -// operand, and an object as the second argument. -// - -//===================================================================== - -// All of the dummy methods in the vtable are essentially identical, -// differing only by an ordinal constant, and they bear no releationship -// to the original method which the caller intended. Also, there needs -// to be 'vtbl_list_size' instances of the vtable in order to -// differentiate between the 'vtable_list_size' original Klass objects. - -#define __ masm-> - -void CompactingPermGenGen::generate_vtable_methods(void** vtbl_list, - void** vtable, - char** md_top, - char* md_end, - char** mc_top, - char* mc_end) { - - intptr_t vtable_bytes = (num_virtuals * vtbl_list_size) * sizeof(void*); - *(intptr_t *)(*md_top) = vtable_bytes; - *md_top += sizeof(intptr_t); - void** dummy_vtable = (void**)*md_top; - *vtable = dummy_vtable; - *md_top += vtable_bytes; - - // Get ready to generate dummy methods. - - CodeBuffer cb((unsigned char*)*mc_top, mc_end - *mc_top); - MacroAssembler* masm = new MacroAssembler(&cb); - - Label common_code; - for (int i = 0; i < vtbl_list_size; ++i) { - for (int j = 0; j < num_virtuals; ++j) { - dummy_vtable[num_virtuals * i + j] = (void*)masm->pc(); - - // Load rax, with a value indicating vtable/offset pair. - // -- bits[ 7..0] (8 bits) which virtual method in table? - // -- bits[12..8] (5 bits) which virtual method table? - // -- must fit in 13-bit instruction immediate field. - __ movl(rax, (i << 8) + j); - __ jmp(common_code); - } - } - - __ bind(common_code); - -#ifdef WIN32 - // Expecting to be called with "thiscall" conventions -- the arguments - // are on the stack, except that the "this" pointer is in rcx. -#else - // Expecting to be called with Unix conventions -- the arguments - // are on the stack, including the "this" pointer. -#endif - - // In addition, rax was set (above) to the offset of the method in the - // table. - -#ifdef WIN32 - __ push(rcx); // save "this" -#endif - __ mov(rcx, rax); - __ shrptr(rcx, 8); // isolate vtable identifier. - __ shlptr(rcx, LogBytesPerWord); - Address index(noreg, rcx, Address::times_1); - ExternalAddress vtbl((address)vtbl_list); - __ movptr(rdx, ArrayAddress(vtbl, index)); // get correct vtable address. -#ifdef WIN32 - __ pop(rcx); // restore "this" -#else - __ movptr(rcx, Address(rsp, BytesPerWord)); // fetch "this" -#endif - __ movptr(Address(rcx, 0), rdx); // update vtable pointer. - - __ andptr(rax, 0x00ff); // isolate vtable method index - __ shlptr(rax, LogBytesPerWord); - __ addptr(rax, rdx); // address of real method pointer. - __ jmp(Address(rax, 0)); // get real method pointer. - - __ flush(); - - *mc_top = (char*)__ pc(); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/dump_x86_64.cpp --- a/src/cpu/x86/vm/dump_x86_64.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "assembler_x86.inline.hpp" -#include "memory/compactingPermGenGen.hpp" -#include "memory/generation.inline.hpp" -#include "memory/space.inline.hpp" - - - -// Generate the self-patching vtable method: -// -// This method will be called (as any other Klass virtual method) with -// the Klass itself as the first argument. Example: -// -// oop obj; -// int size = obj->klass()->klass_part()->oop_size(this); -// -// for which the virtual method call is Klass::oop_size(); -// -// The dummy method is called with the Klass object as the first -// operand, and an object as the second argument. -// - -//===================================================================== - -// All of the dummy methods in the vtable are essentially identical, -// differing only by an ordinal constant, and they bear no releationship -// to the original method which the caller intended. Also, there needs -// to be 'vtbl_list_size' instances of the vtable in order to -// differentiate between the 'vtable_list_size' original Klass objects. - -#define __ masm-> - -void CompactingPermGenGen::generate_vtable_methods(void** vtbl_list, - void** vtable, - char** md_top, - char* md_end, - char** mc_top, - char* mc_end) { - - intptr_t vtable_bytes = (num_virtuals * vtbl_list_size) * sizeof(void*); - *(intptr_t *)(*md_top) = vtable_bytes; - *md_top += sizeof(intptr_t); - void** dummy_vtable = (void**)*md_top; - *vtable = dummy_vtable; - *md_top += vtable_bytes; - - // Get ready to generate dummy methods. - - CodeBuffer cb((unsigned char*)*mc_top, mc_end - *mc_top); - MacroAssembler* masm = new MacroAssembler(&cb); - - Label common_code; - for (int i = 0; i < vtbl_list_size; ++i) { - for (int j = 0; j < num_virtuals; ++j) { - dummy_vtable[num_virtuals * i + j] = (void*)masm->pc(); - - // Load eax with a value indicating vtable/offset pair. - // -- bits[ 7..0] (8 bits) which virtual method in table? - // -- bits[12..8] (5 bits) which virtual method table? - // -- must fit in 13-bit instruction immediate field. - __ movl(rax, (i << 8) + j); - __ jmp(common_code); - } - } - - __ bind(common_code); - - // Expecting to be called with "thiscall" convections -- the arguments - // are on the stack and the "this" pointer is in c_rarg0. In addition, rax - // was set (above) to the offset of the method in the table. - - __ push(c_rarg1); // save & free register - __ push(c_rarg0); // save "this" - __ mov(c_rarg0, rax); - __ shrptr(c_rarg0, 8); // isolate vtable identifier. - __ shlptr(c_rarg0, LogBytesPerWord); - __ lea(c_rarg1, ExternalAddress((address)vtbl_list)); // ptr to correct vtable list. - __ addptr(c_rarg1, c_rarg0); // ptr to list entry. - __ movptr(c_rarg1, Address(c_rarg1, 0)); // get correct vtable address. - __ pop(c_rarg0); // restore "this" - __ movptr(Address(c_rarg0, 0), c_rarg1); // update vtable pointer. - - __ andptr(rax, 0x00ff); // isolate vtable method index - __ shlptr(rax, LogBytesPerWord); - __ addptr(rax, c_rarg1); // address of real method pointer. - __ pop(c_rarg1); // restore register. - __ movptr(rax, Address(rax, 0)); // get real method pointer. - __ jmp(rax); // jump to the real method. - - __ flush(); - - *mc_top = (char*)__ pc(); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/frame_x86.cpp --- a/src/cpu/x86/vm/frame_x86.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/frame_x86.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -26,7 +26,7 @@ #include "interpreter/interpreter.hpp" #include "memory/resourceArea.hpp" #include "oops/markOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" #include "runtime/frame.inline.hpp" @@ -494,7 +494,7 @@ bool frame::interpreter_frame_equals_unpacked_fp(intptr_t* fp) { assert(is_interpreted_frame(), "must be interpreter frame"); - methodOop method = interpreter_frame_method(); + Method* method = interpreter_frame_method(); // When unpacking an optimized frame the frame pointer is // adjusted with: int diff = (method->max_locals() - method->size_of_parameters()) * @@ -531,7 +531,7 @@ // first the method - methodOop m = *interpreter_frame_method_addr(); + Method* m = *interpreter_frame_method_addr(); // validate the method we'd find in this potential sender if (!Universe::heap()->is_valid_method(m)) return false; @@ -549,13 +549,9 @@ return false; } - // validate constantPoolCacheOop - - constantPoolCacheOop cp = *interpreter_frame_cache_addr(); - - if (cp == NULL || - !Space::is_aligned(cp) || - !Universe::heap()->is_permanent((void*)cp)) return false; + // validate ConstantPoolCache* + ConstantPoolCache* cp = *interpreter_frame_cache_addr(); + if (cp == NULL || !cp->is_metadata()) return false; // validate locals @@ -576,7 +572,7 @@ interpreterState istate = get_interpreterState(); #endif // CC_INTERP assert(is_interpreted_frame(), "interpreted frame expected"); - methodOop method = interpreter_frame_method(); + Method* method = interpreter_frame_method(); BasicType type = method->result_type(); intptr_t* tos_addr; diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/frame_x86.hpp --- a/src/cpu/x86/vm/frame_x86.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/frame_x86.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -44,7 +44,7 @@ // [pointer to locals ] = locals() locals_offset // [constant pool cache ] = cache() cache_offset // [methodData ] = mdp() mdx_offset -// [methodOop ] = method() method_offset +// [Method* ] = method() method_offset // [last sp ] = last_sp() last_sp_offset // [old stack pointer ] (sender_sp) sender_sp_offset // [old frame pointer ] <- fp = link() diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/frame_x86.inline.hpp --- a/src/cpu/x86/vm/frame_x86.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/frame_x86.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -174,14 +174,14 @@ // Constant pool cache -inline constantPoolCacheOop* frame::interpreter_frame_cache_addr() const { +inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const { assert(is_interpreted_frame(), "must be interpreted"); return &(get_interpreterState()->_constants); } // Method -inline methodOop* frame::interpreter_frame_method_addr() const { +inline Method** frame::interpreter_frame_method_addr() const { assert(is_interpreted_frame(), "must be interpreted"); return &(get_interpreterState()->_method); } @@ -221,14 +221,14 @@ // Constant pool cache -inline constantPoolCacheOop* frame::interpreter_frame_cache_addr() const { - return (constantPoolCacheOop*)addr_at(interpreter_frame_cache_offset); +inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const { + return (ConstantPoolCache**)addr_at(interpreter_frame_cache_offset); } // Method -inline methodOop* frame::interpreter_frame_method_addr() const { - return (methodOop*)addr_at(interpreter_frame_method_offset); +inline Method** frame::interpreter_frame_method_addr() const { + return (Method**)addr_at(interpreter_frame_method_offset); } // top of expression stack diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/icBuffer_x86.cpp --- a/src/cpu/x86/vm/icBuffer_x86.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/icBuffer_x86.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,16 +44,16 @@ -void InlineCacheBuffer::assemble_ic_buffer_code(address code_begin, oop cached_oop, address entry_point) { +void InlineCacheBuffer::assemble_ic_buffer_code(address code_begin, void* cached_value, address entry_point) { ResourceMark rm; CodeBuffer code(code_begin, ic_stub_code_size()); MacroAssembler* masm = new MacroAssembler(&code); - // note: even though the code contains an embedded oop, we do not need reloc info + // note: even though the code contains an embedded value, we do not need reloc info // because - // (1) the oop is old (i.e., doesn't matter for scavenges) + // (1) the value is old (i.e., doesn't matter for scavenges) // (2) these ICStubs are removed *before* a GC happens, so the roots disappear - assert(cached_oop == NULL || cached_oop->is_perm(), "must be perm oop"); - masm->lea(rax, OopAddress((address) cached_oop)); + // assert(cached_value == NULL || cached_oop->is_perm(), "must be perm oop"); + masm->lea(rax, AddressLiteral((address) cached_value, relocInfo::metadata_type)); masm->jump(ExternalAddress(entry_point)); } @@ -65,10 +65,11 @@ } -oop InlineCacheBuffer::ic_buffer_cached_oop(address code_begin) { +void* InlineCacheBuffer::ic_buffer_cached_value(address code_begin) { // creation also verifies the object NativeMovConstReg* move = nativeMovConstReg_at(code_begin); // Verifies the jump NativeJump* jump = nativeJump_at(move->next_instruction_address()); - return (oop)move->data(); + void* o = (void*)move->data(); + return o; } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/interp_masm_x86_32.cpp --- a/src/cpu/x86/vm/interp_masm_x86_32.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/interp_masm_x86_32.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,8 +28,8 @@ #include "interpreter/interpreterRuntime.hpp" #include "oops/arrayOop.hpp" #include "oops/markOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "prims/jvmtiThreadState.hpp" @@ -223,10 +223,9 @@ // Check if the secondary index definition is still ~x, otherwise // we have to change the following assembler code to calculate the // plain index. - assert(constantPoolCacheOopDesc::decode_secondary_index(~123) == 123, "else change next line"); + assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line"); notl(reg); // convert to plain index } else if (index_size == sizeof(u1)) { - assert(EnableInvokeDynamic, "tiny index used only for JSR 292"); load_unsigned_byte(reg, Address(rsi, bcp_offset)); } else { ShouldNotReachHere(); @@ -240,6 +239,7 @@ get_cache_index_at_bcp(index, bcp_offset, index_size); movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize)); assert(sizeof(ConstantPoolCacheEntry) == 4*wordSize, "adjust code below"); + assert(exact_log2(in_words(ConstantPoolCacheEntry::size())) == 2, "else change next line"); shlptr(index, 2); // convert from field index to ConstantPoolCacheEntry index } @@ -251,7 +251,7 @@ int bcp_offset, size_t index_size) { get_cache_and_index_at_bcp(cache, index, bcp_offset, index_size); - movptr(bytecode, Address(cache, index, Address::times_ptr, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::indices_offset())); + movptr(bytecode, Address(cache, index, Address::times_ptr, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::indices_offset())); const int shift_count = (1 + byte_no) * BitsPerByte; assert((byte_no == TemplateTable::f1_byte && shift_count == ConstantPoolCacheEntry::bytecode_1_shift) || (byte_no == TemplateTable::f2_byte && shift_count == ConstantPoolCacheEntry::bytecode_2_shift), @@ -269,13 +269,32 @@ assert(sizeof(ConstantPoolCacheEntry) == 4*wordSize, "adjust code below"); // convert from field index to ConstantPoolCacheEntry index // and from word offset to byte offset + assert(exact_log2(in_bytes(ConstantPoolCacheEntry::size_in_bytes())) == 2 + LogBytesPerWord, "else change next line"); shll(tmp, 2 + LogBytesPerWord); movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize)); // skip past the header - addptr(cache, in_bytes(constantPoolCacheOopDesc::base_offset())); + addptr(cache, in_bytes(ConstantPoolCache::base_offset())); addptr(cache, tmp); // construct pointer to cache entry } +// Load object from cpool->resolved_references(index) +void InterpreterMacroAssembler::load_resolved_reference_at_index( + Register result, Register index) { + assert_different_registers(result, index); + // convert from field index to resolved_references() index and from + // word index to byte offset. Since this is a java object, it can be compressed + Register tmp = index; // reuse + shll(tmp, LogBytesPerHeapOop); + + get_constant_pool(result); + // load pointer for resolved_references[] objArray + movptr(result, Address(result, ConstantPool::resolved_references_offset_in_bytes())); + // JNIHandles::resolve(obj); + movptr(result, Address(result, 0)); + // Add in the index + addptr(result, tmp); + load_heap_oop(result, Address(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT))); +} // Generate a subtype check: branch to ok_is_subtype if sub_klass is // a subtype of super_klass. EAX holds the super_klass. Blows ECX. @@ -427,11 +446,11 @@ // Is a cmpl faster? cmpb(Address(temp, JavaThread::interp_only_mode_offset()), 0); jccb(Assembler::zero, run_compiled_code); - jmp(Address(method, methodOopDesc::interpreter_entry_offset())); + jmp(Address(method, Method::interpreter_entry_offset())); bind(run_compiled_code); } - jmp(Address(method, methodOopDesc::from_interpreted_offset())); + jmp(Address(method, Method::from_interpreted_offset())); } @@ -526,7 +545,7 @@ movbool(do_not_unlock_if_synchronized, false); // reset the flag movptr(rbx, Address(rbp, frame::interpreter_frame_method_offset * wordSize)); // get method access flags - movl(rcx, Address(rbx, methodOopDesc::access_flags_offset())); + movl(rcx, Address(rbx, Method::access_flags_offset())); testl(rcx, JVM_ACC_SYNCHRONIZED); jcc(Assembler::zero, unlocked); @@ -820,7 +839,7 @@ get_method(rbx); // Test MDO to avoid the call if it is NULL. - movptr(rax, Address(rbx, in_bytes(methodOopDesc::method_data_offset()))); + movptr(rax, Address(rbx, in_bytes(Method::method_data_offset()))); testptr(rax, rax); jcc(Assembler::zero, set_mdp); // rbx,: method @@ -828,8 +847,8 @@ call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::bcp_to_di), rbx, rsi); // rax,: mdi // mdo is guaranteed to be non-zero here, we checked for it before the call. - movptr(rbx, Address(rbx, in_bytes(methodOopDesc::method_data_offset()))); - addptr(rbx, in_bytes(methodDataOopDesc::data_offset())); + movptr(rbx, Address(rbx, in_bytes(Method::method_data_offset()))); + addptr(rbx, in_bytes(MethodData::data_offset())); addptr(rax, rbx); bind(set_mdp); movptr(Address(rbp, frame::interpreter_frame_mdx_offset * wordSize), rax); @@ -851,8 +870,8 @@ // If the mdp is valid, it will point to a DataLayout header which is // consistent with the bcp. The converse is highly probable also. load_unsigned_short(rdx, Address(rcx, in_bytes(DataLayout::bci_offset()))); - addptr(rdx, Address(rbx, methodOopDesc::const_offset())); - lea(rdx, Address(rdx, constMethodOopDesc::codes_offset())); + addptr(rdx, Address(rbx, Method::const_offset())); + lea(rdx, Address(rdx, ConstMethod::codes_offset())); cmpptr(rdx, rsi); jcc(Assembler::equal, verify_continue); // rbx,: method diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/interp_masm_x86_32.hpp --- a/src/cpu/x86/vm/interp_masm_x86_32.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/interp_masm_x86_32.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -77,10 +77,10 @@ // Helpers for runtime call arguments/results void get_method(Register reg) { movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize)); } - void get_const(Register reg) { get_method(reg); movptr(reg, Address(reg, methodOopDesc::const_offset())); } - void get_constant_pool(Register reg) { get_const(reg); movptr(reg, Address(reg, constMethodOopDesc::constants_offset())); } - void get_constant_pool_cache(Register reg) { get_constant_pool(reg); movptr(reg, Address(reg, constantPoolOopDesc::cache_offset_in_bytes())); } - void get_cpool_and_tags(Register cpool, Register tags) { get_constant_pool(cpool); movptr(tags, Address(cpool, constantPoolOopDesc::tags_offset_in_bytes())); + void get_const(Register reg) { get_method(reg); movptr(reg, Address(reg, Method::const_offset())); } + void get_constant_pool(Register reg) { get_const(reg); movptr(reg, Address(reg, ConstMethod::constants_offset())); } + void get_constant_pool_cache(Register reg) { get_constant_pool(reg); movptr(reg, Address(reg, ConstantPool::cache_offset_in_bytes())); } + void get_cpool_and_tags(Register cpool, Register tags) { get_constant_pool(cpool); movptr(tags, Address(cpool, ConstantPool::tags_offset_in_bytes())); } void get_unsigned_2_byte_index_at_bcp(Register reg, int bcp_offset); void get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset, size_t index_size = sizeof(u2)); @@ -88,6 +88,9 @@ void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2)); void get_cache_index_at_bcp(Register index, int bcp_offset, size_t index_size = sizeof(u2)); + // load cpool->resolved_references(index); + void load_resolved_reference_at_index(Register result, Register index); + // Expression stack void f2ieee(); // truncate ftos to 32bits void d2ieee(); // truncate dtos to 64bits diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/interp_masm_x86_64.cpp --- a/src/cpu/x86/vm/interp_masm_x86_64.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/interp_masm_x86_64.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,8 +28,8 @@ #include "interpreter/interpreterRuntime.hpp" #include "oops/arrayOop.hpp" #include "oops/markOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "prims/jvmtiThreadState.hpp" @@ -221,10 +221,9 @@ // Check if the secondary index definition is still ~x, otherwise // we have to change the following assembler code to calculate the // plain index. - assert(constantPoolCacheOopDesc::decode_secondary_index(~123) == 123, "else change next line"); + assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line"); notl(index); // convert to plain index } else if (index_size == sizeof(u1)) { - assert(EnableInvokeDynamic, "tiny index used only for JSR 292"); load_unsigned_byte(index, Address(r13, bcp_offset)); } else { ShouldNotReachHere(); @@ -241,6 +240,7 @@ movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize)); assert(sizeof(ConstantPoolCacheEntry) == 4 * wordSize, "adjust code below"); // convert from field index to ConstantPoolCacheEntry index + assert(exact_log2(in_words(ConstantPoolCacheEntry::size())) == 2, "else change next line"); shll(index, 2); } @@ -254,7 +254,7 @@ get_cache_and_index_at_bcp(cache, index, bcp_offset, index_size); // We use a 32-bit load here since the layout of 64-bit words on // little-endian machines allow us that. - movl(bytecode, Address(cache, index, Address::times_ptr, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::indices_offset())); + movl(bytecode, Address(cache, index, Address::times_ptr, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::indices_offset())); const int shift_count = (1 + byte_no) * BitsPerByte; assert((byte_no == TemplateTable::f1_byte && shift_count == ConstantPoolCacheEntry::bytecode_1_shift) || (byte_no == TemplateTable::f2_byte && shift_count == ConstantPoolCacheEntry::bytecode_2_shift), @@ -274,13 +274,32 @@ assert(sizeof(ConstantPoolCacheEntry) == 4 * wordSize, "adjust code below"); // convert from field index to ConstantPoolCacheEntry index // and from word offset to byte offset + assert(exact_log2(in_bytes(ConstantPoolCacheEntry::size_in_bytes())) == 2 + LogBytesPerWord, "else change next line"); shll(tmp, 2 + LogBytesPerWord); movptr(cache, Address(rbp, frame::interpreter_frame_cache_offset * wordSize)); // skip past the header - addptr(cache, in_bytes(constantPoolCacheOopDesc::base_offset())); + addptr(cache, in_bytes(ConstantPoolCache::base_offset())); addptr(cache, tmp); // construct pointer to cache entry } +// Load object from cpool->resolved_references(index) +void InterpreterMacroAssembler::load_resolved_reference_at_index( + Register result, Register index) { + assert_different_registers(result, index); + // convert from field index to resolved_references() index and from + // word index to byte offset. Since this is a java object, it can be compressed + Register tmp = index; // reuse + shll(tmp, LogBytesPerHeapOop); + + get_constant_pool(result); + // load pointer for resolved_references[] objArray + movptr(result, Address(result, ConstantPool::resolved_references_offset_in_bytes())); + // JNIHandles::resolve(obj); + movptr(result, Address(result, 0)); + // Add in the index + addptr(result, tmp); + load_heap_oop(result, Address(result, arrayOopDesc::base_offset_in_bytes(T_OBJECT))); +} // Generate a subtype check: branch to ok_is_subtype if sub_klass is a // subtype of super_klass. @@ -426,11 +445,11 @@ // Is a cmpl faster? cmpb(Address(r15_thread, JavaThread::interp_only_mode_offset()), 0); jccb(Assembler::zero, run_compiled_code); - jmp(Address(method, methodOopDesc::interpreter_entry_offset())); + jmp(Address(method, Method::interpreter_entry_offset())); bind(run_compiled_code); } - jmp(Address(method, methodOopDesc::from_interpreted_offset())); + jmp(Address(method, Method::from_interpreted_offset())); } @@ -526,7 +545,7 @@ // get method access flags movptr(rbx, Address(rbp, frame::interpreter_frame_method_offset * wordSize)); - movl(rcx, Address(rbx, methodOopDesc::access_flags_offset())); + movl(rcx, Address(rbx, Method::access_flags_offset())); testl(rcx, JVM_ACC_SYNCHRONIZED); jcc(Assembler::zero, unlocked); @@ -834,7 +853,7 @@ get_method(rbx); // Test MDO to avoid the call if it is NULL. - movptr(rax, Address(rbx, in_bytes(methodOopDesc::method_data_offset()))); + movptr(rax, Address(rbx, in_bytes(Method::method_data_offset()))); testptr(rax, rax); jcc(Assembler::zero, set_mdp); // rbx: method @@ -842,8 +861,8 @@ call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::bcp_to_di), rbx, r13); // rax: mdi // mdo is guaranteed to be non-zero here, we checked for it before the call. - movptr(rbx, Address(rbx, in_bytes(methodOopDesc::method_data_offset()))); - addptr(rbx, in_bytes(methodDataOopDesc::data_offset())); + movptr(rbx, Address(rbx, in_bytes(Method::method_data_offset()))); + addptr(rbx, in_bytes(MethodData::data_offset())); addptr(rax, rbx); bind(set_mdp); movptr(Address(rbp, frame::interpreter_frame_mdx_offset * wordSize), rax); @@ -866,8 +885,8 @@ // consistent with the bcp. The converse is highly probable also. load_unsigned_short(c_rarg2, Address(c_rarg3, in_bytes(DataLayout::bci_offset()))); - addptr(c_rarg2, Address(rbx, methodOopDesc::const_offset())); - lea(c_rarg2, Address(c_rarg2, constMethodOopDesc::codes_offset())); + addptr(c_rarg2, Address(rbx, Method::const_offset())); + lea(c_rarg2, Address(c_rarg2, ConstMethod::codes_offset())); cmpptr(c_rarg2, r13); jcc(Assembler::equal, verify_continue); // rbx: method diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/interp_masm_x86_64.hpp --- a/src/cpu/x86/vm/interp_masm_x86_64.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/interp_masm_x86_64.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -86,22 +86,22 @@ void get_const(Register reg) { get_method(reg); - movptr(reg, Address(reg, methodOopDesc::const_offset())); + movptr(reg, Address(reg, Method::const_offset())); } void get_constant_pool(Register reg) { get_const(reg); - movptr(reg, Address(reg, constMethodOopDesc::constants_offset())); + movptr(reg, Address(reg, ConstMethod::constants_offset())); } void get_constant_pool_cache(Register reg) { get_constant_pool(reg); - movptr(reg, Address(reg, constantPoolOopDesc::cache_offset_in_bytes())); + movptr(reg, Address(reg, ConstantPool::cache_offset_in_bytes())); } void get_cpool_and_tags(Register cpool, Register tags) { get_constant_pool(cpool); - movptr(tags, Address(cpool, constantPoolOopDesc::tags_offset_in_bytes())); + movptr(tags, Address(cpool, ConstantPool::tags_offset_in_bytes())); } void get_unsigned_2_byte_index_at_bcp(Register reg, int bcp_offset); @@ -110,6 +110,9 @@ void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2)); void get_cache_index_at_bcp(Register index, int bcp_offset, size_t index_size = sizeof(u2)); + // load cpool->resolved_references(index); + void load_resolved_reference_at_index(Register result, Register index); + void pop_ptr(Register r = rax); void pop_i(Register r = rax); void pop_l(Register r = rax); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/interpreterRT_x86_32.cpp --- a/src/cpu/x86/vm/interpreterRT_x86_32.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/interpreterRT_x86_32.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ #include "interpreter/interpreterRuntime.hpp" #include "memory/allocation.inline.hpp" #include "memory/universe.inline.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/icache.hpp" @@ -131,8 +131,8 @@ } }; -IRT_ENTRY(address, InterpreterRuntime::slow_signature_handler(JavaThread* thread, methodOopDesc* method, intptr_t* from, intptr_t* to)) - methodHandle m(thread, (methodOop)method); +IRT_ENTRY(address, InterpreterRuntime::slow_signature_handler(JavaThread* thread, Method* method, intptr_t* from, intptr_t* to)) + methodHandle m(thread, (Method*)method); assert(m->is_native(), "sanity check"); // handle arguments SlowSignatureHandler(m, (address)from, to + 1).iterate(UCONST64(-1)); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/interpreterRT_x86_64.cpp --- a/src/cpu/x86/vm/interpreterRT_x86_64.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/interpreterRT_x86_64.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ #include "interpreter/interpreterRuntime.hpp" #include "memory/allocation.inline.hpp" #include "memory/universe.inline.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/icache.hpp" @@ -480,10 +480,10 @@ IRT_ENTRY(address, InterpreterRuntime::slow_signature_handler(JavaThread* thread, - methodOopDesc* method, + Method* method, intptr_t* from, intptr_t* to)) - methodHandle m(thread, (methodOop)method); + methodHandle m(thread, (Method*)method); assert(m->is_native(), "sanity check"); // handle arguments diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/interpreter_x86_32.cpp --- a/src/cpu/x86/vm/interpreter_x86_32.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/interpreter_x86_32.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,8 +30,8 @@ #include "interpreter/interpreterRuntime.hpp" #include "interpreter/templateTable.hpp" #include "oops/arrayOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" @@ -76,7 +76,7 @@ address InterpreterGenerator::generate_empty_entry(void) { - // rbx,: methodOop + // rbx,: Method* // rcx: receiver (unused) // rsi: previous interpreter state (C++ interpreter) must preserve // rsi: sender sp must set sp to this value on return @@ -107,7 +107,7 @@ address InterpreterGenerator::generate_math_entry(AbstractInterpreter::MethodKind kind) { - // rbx,: methodOop + // rbx,: Method* // rcx: scratrch // rsi: sender sp @@ -219,7 +219,7 @@ // Attempt to execute abstract method. Throw exception address InterpreterGenerator::generate_abstract_entry(void) { - // rbx,: methodOop + // rbx,: Method* // rcx: receiver (unused) // rsi: previous interpreter state (C++ interpreter) must preserve diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/interpreter_x86_64.cpp --- a/src/cpu/x86/vm/interpreter_x86_64.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/interpreter_x86_64.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,8 +30,8 @@ #include "interpreter/interpreterRuntime.hpp" #include "interpreter/templateTable.hpp" #include "oops/arrayOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" @@ -92,7 +92,7 @@ // Do Int register here switch ( i ) { case 0: - __ movl(rscratch1, Address(rbx, methodOopDesc::access_flags_offset())); + __ movl(rscratch1, Address(rbx, Method::access_flags_offset())); __ testl(rscratch1, JVM_ACC_STATIC); __ cmovptr(Assembler::zero, c_rarg1, Address(rsp, 0)); break; @@ -177,7 +177,7 @@ } // Now handle integrals. Only do c_rarg1 if not static. - __ movl(c_rarg3, Address(rbx, methodOopDesc::access_flags_offset())); + __ movl(c_rarg3, Address(rbx, Method::access_flags_offset())); __ testl(c_rarg3, JVM_ACC_STATIC); __ cmovptr(Assembler::zero, c_rarg1, Address(rsp, 0)); @@ -202,7 +202,7 @@ address InterpreterGenerator::generate_math_entry(AbstractInterpreter::MethodKind kind) { - // rbx,: methodOop + // rbx,: Method* // rcx: scratrch // r13: sender sp @@ -303,7 +303,7 @@ // Abstract method entry // Attempt to execute abstract method. Throw exception address InterpreterGenerator::generate_abstract_entry(void) { - // rbx: methodOop + // rbx: Method* // r13: sender SP address entry_point = __ pc(); @@ -328,7 +328,7 @@ // Empty method, generate a very fast return. address InterpreterGenerator::generate_empty_entry(void) { - // rbx: methodOop + // rbx: Method* // r13: sender sp must set sp to this value on return if (!UseFastEmptyMethods) { diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/metaspaceShared_x86_32.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cpu/x86/vm/metaspaceShared_x86_32.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "assembler_x86.inline.hpp" +#include "memory/metaspaceShared.hpp" + +// Generate the self-patching vtable method: +// +// This method will be called (as any other Klass virtual method) with +// the Klass itself as the first argument. Example: +// +// oop obj; +// int size = obj->klass()->oop_size(this); +// +// for which the virtual method call is Klass::oop_size(); +// +// The dummy method is called with the Klass object as the first +// operand, and an object as the second argument. +// + +//===================================================================== + +// All of the dummy methods in the vtable are essentially identical, +// differing only by an ordinal constant, and they bear no relationship +// to the original method which the caller intended. Also, there needs +// to be 'vtbl_list_size' instances of the vtable in order to +// differentiate between the 'vtable_list_size' original Klass objects. + +#define __ masm-> + +void MetaspaceShared::generate_vtable_methods(void** vtbl_list, + void** vtable, + char** md_top, + char* md_end, + char** mc_top, + char* mc_end) { + + intptr_t vtable_bytes = (num_virtuals * vtbl_list_size) * sizeof(void*); + *(intptr_t *)(*md_top) = vtable_bytes; + *md_top += sizeof(intptr_t); + void** dummy_vtable = (void**)*md_top; + *vtable = dummy_vtable; + *md_top += vtable_bytes; + + // Get ready to generate dummy methods. + + CodeBuffer cb((unsigned char*)*mc_top, mc_end - *mc_top); + MacroAssembler* masm = new MacroAssembler(&cb); + + Label common_code; + for (int i = 0; i < vtbl_list_size; ++i) { + for (int j = 0; j < num_virtuals; ++j) { + dummy_vtable[num_virtuals * i + j] = (void*)masm->pc(); + + // Load rax, with a value indicating vtable/offset pair. + // -- bits[ 7..0] (8 bits) which virtual method in table? + // -- bits[12..8] (5 bits) which virtual method table? + // -- must fit in 13-bit instruction immediate field. + __ movl(rax, (i << 8) + j); + __ jmp(common_code); + } + } + + __ bind(common_code); + +#ifdef WIN32 + // Expecting to be called with "thiscall" conventions -- the arguments + // are on the stack, except that the "this" pointer is in rcx. +#else + // Expecting to be called with Unix conventions -- the arguments + // are on the stack, including the "this" pointer. +#endif + + // In addition, rax was set (above) to the offset of the method in the + // table. + +#ifdef WIN32 + __ push(rcx); // save "this" +#endif + __ mov(rcx, rax); + __ shrptr(rcx, 8); // isolate vtable identifier. + __ shlptr(rcx, LogBytesPerWord); + Address index(noreg, rcx, Address::times_1); + ExternalAddress vtbl((address)vtbl_list); + __ movptr(rdx, ArrayAddress(vtbl, index)); // get correct vtable address. +#ifdef WIN32 + __ pop(rcx); // restore "this" +#else + __ movptr(rcx, Address(rsp, BytesPerWord)); // fetch "this" +#endif + __ movptr(Address(rcx, 0), rdx); // update vtable pointer. + + __ andptr(rax, 0x00ff); // isolate vtable method index + __ shlptr(rax, LogBytesPerWord); + __ addptr(rax, rdx); // address of real method pointer. + __ jmp(Address(rax, 0)); // get real method pointer. + + __ flush(); + + *mc_top = (char*)__ pc(); +} diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/metaspaceShared_x86_64.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cpu/x86/vm/metaspaceShared_x86_64.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "assembler_x86.inline.hpp" +#include "memory/metaspaceShared.hpp" + +// Generate the self-patching vtable method: +// +// This method will be called (as any other Klass virtual method) with +// the Klass itself as the first argument. Example: +// +// oop obj; +// int size = obj->klass()->oop_size(this); +// +// for which the virtual method call is Klass::oop_size(); +// +// The dummy method is called with the Klass object as the first +// operand, and an object as the second argument. +// + +//===================================================================== + +// All of the dummy methods in the vtable are essentially identical, +// differing only by an ordinal constant, and they bear no relationship +// to the original method which the caller intended. Also, there needs +// to be 'vtbl_list_size' instances of the vtable in order to +// differentiate between the 'vtable_list_size' original Klass objects. + +#define __ masm-> + +void MetaspaceShared::generate_vtable_methods(void** vtbl_list, + void** vtable, + char** md_top, + char* md_end, + char** mc_top, + char* mc_end) { + + intptr_t vtable_bytes = (num_virtuals * vtbl_list_size) * sizeof(void*); + *(intptr_t *)(*md_top) = vtable_bytes; + *md_top += sizeof(intptr_t); + void** dummy_vtable = (void**)*md_top; + *vtable = dummy_vtable; + *md_top += vtable_bytes; + + // Get ready to generate dummy methods. + + CodeBuffer cb((unsigned char*)*mc_top, mc_end - *mc_top); + MacroAssembler* masm = new MacroAssembler(&cb); + + Label common_code; + for (int i = 0; i < vtbl_list_size; ++i) { + for (int j = 0; j < num_virtuals; ++j) { + dummy_vtable[num_virtuals * i + j] = (void*)masm->pc(); + + // Load eax with a value indicating vtable/offset pair. + // -- bits[ 7..0] (8 bits) which virtual method in table? + // -- bits[12..8] (5 bits) which virtual method table? + // -- must fit in 13-bit instruction immediate field. + __ movl(rax, (i << 8) + j); + __ jmp(common_code); + } + } + + __ bind(common_code); + + // Expecting to be called with "thiscall" convections -- the arguments + // are on the stack and the "this" pointer is in c_rarg0. In addition, rax + // was set (above) to the offset of the method in the table. + + __ push(c_rarg1); // save & free register + __ push(c_rarg0); // save "this" + __ mov(c_rarg0, rax); + __ shrptr(c_rarg0, 8); // isolate vtable identifier. + __ shlptr(c_rarg0, LogBytesPerWord); + __ lea(c_rarg1, ExternalAddress((address)vtbl_list)); // ptr to correct vtable list. + __ addptr(c_rarg1, c_rarg0); // ptr to list entry. + __ movptr(c_rarg1, Address(c_rarg1, 0)); // get correct vtable address. + __ pop(c_rarg0); // restore "this" + __ movptr(Address(c_rarg0, 0), c_rarg1); // update vtable pointer. + + __ andptr(rax, 0x00ff); // isolate vtable method index + __ shlptr(rax, LogBytesPerWord); + __ addptr(rax, c_rarg1); // address of real method pointer. + __ pop(c_rarg1); // restore register. + __ movptr(rax, Address(rax, 0)); // get real method pointer. + __ jmp(rax); // jump to the real method. + + __ flush(); + + *mc_top = (char*)__ pc(); +} diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/methodHandles_x86.cpp --- a/src/cpu/x86/vm/methodHandles_x86.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/methodHandles_x86.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -47,9 +47,9 @@ void MethodHandles::load_klass_from_Class(MacroAssembler* _masm, Register klass_reg) { if (VerifyMethodHandles) - verify_klass(_masm, klass_reg, SystemDictionaryHandles::Class_klass(), + verify_klass(_masm, klass_reg, SystemDictionary::WK_KLASS_ENUM_NAME(java_lang_Class), "MH argument is a Class"); - __ load_heap_oop(klass_reg, Address(klass_reg, java_lang_Class::klass_offset_in_bytes())); + __ movptr(klass_reg, Address(klass_reg, java_lang_Class::klass_offset_in_bytes())); } #ifdef ASSERT @@ -64,12 +64,10 @@ #ifdef ASSERT void MethodHandles::verify_klass(MacroAssembler* _masm, - Register obj, KlassHandle klass, + Register obj, SystemDictionary::WKID klass_id, const char* error_message) { - oop* klass_addr = klass.raw_value(); - assert(klass_addr >= SystemDictionaryHandles::Object_klass().raw_value() && - klass_addr <= SystemDictionaryHandles::Long_klass().raw_value(), - "must be one of the SystemDictionaryHandles"); + Klass** klass_addr = SystemDictionary::well_known_klass_addr(klass_id); + KlassHandle klass = SystemDictionary::well_known_klass(klass_id); Register temp = rdi; Register temp2 = noreg; LP64_ONLY(temp2 = rscratch1); // used by MacroAssembler::cmpptr @@ -137,12 +135,12 @@ // Is a cmpl faster? __ cmpb(Address(rthread, JavaThread::interp_only_mode_offset()), 0); __ jccb(Assembler::zero, run_compiled_code); - __ jmp(Address(method, methodOopDesc::interpreter_entry_offset())); + __ jmp(Address(method, Method::interpreter_entry_offset())); __ BIND(run_compiled_code); } - const ByteSize entry_offset = for_compiler_entry ? methodOopDesc::from_compiled_offset() : - methodOopDesc::from_interpreted_offset(); + const ByteSize entry_offset = for_compiler_entry ? Method::from_compiled_offset() : + Method::from_interpreted_offset(); __ jmp(Address(method, entry_offset)); } @@ -165,16 +163,15 @@ __ verify_oop(method_temp); __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes()))); __ verify_oop(method_temp); - // the following assumes that a methodOop is normally compressed in the vmtarget field: - __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes()))); - __ verify_oop(method_temp); + // the following assumes that a Method* is normally compressed in the vmtarget field: + __ movptr(method_temp, Address(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes()))); if (VerifyMethodHandles && !for_compiler_entry) { // make sure recv is already on stack __ load_sized_value(temp2, - Address(method_temp, methodOopDesc::size_of_parameters_offset()), + Address(method_temp, Method::size_of_parameters_offset()), sizeof(u2), /*is_signed*/ false); - // assert(sizeof(u2) == sizeof(methodOopDesc::_size_of_parameters), ""); + // assert(sizeof(u2) == sizeof(Method::_size_of_parameters), ""); Label L; __ cmpptr(recv, __ argument_address(temp2, -1)); __ jcc(Assembler::equal, L); @@ -203,7 +200,7 @@ } // rsi/r13: sender SP (must preserve; see prepare_to_jump_from_interpreted) - // rbx: methodOop + // rbx: Method* // rdx: argument locator (parameter slot count, added to rsp) // rcx: used as temp to hold mh or receiver // rax, rdi: garbage temps, blown away @@ -221,14 +218,14 @@ if (VerifyMethodHandles) { Label L; BLOCK_COMMENT("verify_intrinsic_id {"); - __ cmpb(Address(rbx_method, methodOopDesc::intrinsic_id_offset_in_bytes()), (int) iid); + __ cmpb(Address(rbx_method, Method::intrinsic_id_offset_in_bytes()), (int) iid); __ jcc(Assembler::equal, L); if (iid == vmIntrinsics::_linkToVirtual || iid == vmIntrinsics::_linkToSpecial) { // could do this for all kinds, but would explode assembly code size - trace_method_handle(_masm, "bad methodOop::intrinsic_id"); + trace_method_handle(_masm, "bad Method*::intrinsic_id"); } - __ STOP("bad methodOop::intrinsic_id"); + __ STOP("bad Method*::intrinsic_id"); __ bind(L); BLOCK_COMMENT("} verify_intrinsic_id"); } @@ -239,9 +236,9 @@ assert(ref_kind != 0 || iid == vmIntrinsics::_invokeBasic, "must be _invokeBasic or a linkTo intrinsic"); if (ref_kind == 0 || MethodHandles::ref_kind_has_receiver(ref_kind)) { __ load_sized_value(rdx_argp, - Address(rbx_method, methodOopDesc::size_of_parameters_offset()), + Address(rbx_method, Method::size_of_parameters_offset()), sizeof(u2), /*is_signed*/ false); - // assert(sizeof(u2) == sizeof(methodOopDesc::_size_of_parameters), ""); + // assert(sizeof(u2) == sizeof(Method::_size_of_parameters), ""); rdx_first_arg_addr = __ argument_address(rdx_argp, -1); } else { DEBUG_ONLY(rdx_argp = noreg); @@ -343,7 +340,7 @@ // The method is a member invoker used by direct method handles. if (VerifyMethodHandles) { // make sure the trailing argument really is a MemberName (caller responsibility) - verify_klass(_masm, member_reg, SystemDictionaryHandles::MemberName_klass(), + verify_klass(_masm, member_reg, SystemDictionary::WK_KLASS_ENUM_NAME(java_lang_invoke_MemberName), "MemberName required for invokeVirtual etc."); } @@ -401,7 +398,7 @@ if (VerifyMethodHandles) { verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3); } - __ load_heap_oop(rbx_method, member_vmtarget); + __ movptr(rbx_method, member_vmtarget); method_is_live = true; break; @@ -409,7 +406,7 @@ if (VerifyMethodHandles) { verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3); } - __ load_heap_oop(rbx_method, member_vmtarget); + __ movptr(rbx_method, member_vmtarget); method_is_live = true; break; @@ -437,7 +434,7 @@ // Note: The verifier invariants allow us to ignore MemberName.clazz and vmtarget // at this point. And VerifyMethodHandles has already checked clazz, if needed. - // get target methodOop & entry point + // get target Method* & entry point __ lookup_virtual_method(temp1_recv_klass, temp2_index, rbx_method); method_is_live = true; break; @@ -653,4 +650,3 @@ BLOCK_COMMENT("} trace_method_handle"); } #endif //PRODUCT - diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/methodHandles_x86.hpp --- a/src/cpu/x86/vm/methodHandles_x86.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/methodHandles_x86.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -35,11 +35,11 @@ static void load_klass_from_Class(MacroAssembler* _masm, Register klass_reg); static void verify_klass(MacroAssembler* _masm, - Register obj, KlassHandle klass, + Register obj, SystemDictionary::WKID klass_id, const char* error_message = "wrong klass") NOT_DEBUG_RETURN; static void verify_method_handle(MacroAssembler* _masm, Register mh_reg) { - verify_klass(_masm, mh_reg, SystemDictionaryHandles::MethodHandle_klass(), + verify_klass(_masm, mh_reg, SystemDictionary::WK_KLASS_ENUM_NAME(java_lang_invoke_MethodHandle), "reference is a MH"); } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/relocInfo_x86.cpp --- a/src/cpu/x86/vm/relocInfo_x86.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/relocInfo_x86.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,12 +47,21 @@ } } else if (which == Assembler::narrow_oop_operand) { address disp = Assembler::locate_operand(addr(), which); + // both compressed oops and compressed classes look the same + if (Universe::heap()->is_in_reserved((oop)x)) { if (verify_only) { assert(*(uint32_t*) disp == oopDesc::encode_heap_oop((oop)x), "instructions must match"); } else { *(int32_t*) disp = oopDesc::encode_heap_oop((oop)x); } } else { + if (verify_only) { + assert(*(uint32_t*) disp == oopDesc::encode_klass((Klass*)x), "instructions must match"); + } else { + *(int32_t*) disp = oopDesc::encode_klass((Klass*)x); + } + } + } else { // Note: Use runtime_call_type relocations for call32_operand. address ip = addr(); address disp = Assembler::locate_operand(ip, which); @@ -239,3 +248,6 @@ } #endif // _LP64 } + +void metadata_Relocation::pd_fix_value(address x) { +} diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/sharedRuntime_x86_32.cpp --- a/src/cpu/x86/vm/sharedRuntime_x86_32.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/sharedRuntime_x86_32.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -29,7 +29,7 @@ #include "code/icBuffer.hpp" #include "code/vtableStubs.hpp" #include "interpreter/interpreter.hpp" -#include "oops/compiledICHolderOop.hpp" +#include "oops/compiledICHolder.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/vframeArray.hpp" @@ -453,8 +453,7 @@ // Patch the callers callsite with entry to compiled code if it exists. static void patch_callers_callsite(MacroAssembler *masm) { Label L; - __ verify_oop(rbx); - __ cmpptr(Address(rbx, in_bytes(methodOopDesc::code_offset())), (int32_t)NULL_WORD); + __ cmpptr(Address(rbx, in_bytes(Method::code_offset())), (int32_t)NULL_WORD); __ jcc(Assembler::equal, L); // Schedule the branch target address early. // Call into the VM to patch the caller, then jump to compiled callee @@ -486,7 +485,6 @@ __ push(rax); // VM needs target method __ push(rbx); - __ verify_oop(rbx); __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::fixup_callers_callsite))); __ addptr(rsp, 2*wordSize); @@ -631,7 +629,7 @@ } // Schedule the branch target address early. - __ movptr(rcx, Address(rbx, in_bytes(methodOopDesc::interpreter_entry_offset()))); + __ movptr(rcx, Address(rbx, in_bytes(Method::interpreter_entry_offset()))); // And repush original return address __ push(rax); __ jmp(rcx); @@ -746,7 +744,7 @@ // Will jump to the compiled code just as if compiled code was doing it. // Pre-load the register-jump target early, to schedule it better. - __ movptr(rdi, Address(rbx, in_bytes(methodOopDesc::from_compiled_offset()))); + __ movptr(rdi, Address(rbx, in_bytes(Method::from_compiled_offset()))); // Now generate the shuffle code. Pick up all register args and move the // rest through the floating point stack top. @@ -859,8 +857,8 @@ __ get_thread(rax); __ movptr(Address(rax, JavaThread::callee_target_offset()), rbx); - // move methodOop to rax, in case we end up in an c2i adapter. - // the c2i adapters expect methodOop in rax, (c2) because c2's + // move Method* to rax, in case we end up in an c2i adapter. + // the c2i adapters expect Method* in rax, (c2) because c2's // resolve stubs return the result (the method) in rax,. // I'd love to fix this. __ mov(rax, rbx); @@ -880,7 +878,7 @@ gen_i2c_adapter(masm, total_args_passed, comp_args_on_stack, sig_bt, regs); // ------------------------------------------------------------------------- - // Generate a C2I adapter. On entry we know rbx, holds the methodOop during calls + // Generate a C2I adapter. On entry we know rbx, holds the Method* during calls // to the interpreter. The args start out packed in the compiled layout. They // need to be unpacked into the interpreter layout. This will almost always // require some stack space. We grow the current (compiled) stack, then repack @@ -898,18 +896,14 @@ { Label missed; - - __ verify_oop(holder); __ movptr(temp, Address(receiver, oopDesc::klass_offset_in_bytes())); - __ verify_oop(temp); - - __ cmpptr(temp, Address(holder, compiledICHolderOopDesc::holder_klass_offset())); - __ movptr(rbx, Address(holder, compiledICHolderOopDesc::holder_method_offset())); + __ cmpptr(temp, Address(holder, CompiledICHolder::holder_klass_offset())); + __ movptr(rbx, Address(holder, CompiledICHolder::holder_method_offset())); __ jcc(Assembler::notEqual, missed); // Method might have been compiled since the call site was patched to // interpreted if that is the case treat it as a miss so we can get // the call site corrected. - __ cmpptr(Address(rbx, in_bytes(methodOopDesc::code_offset())), (int32_t)NULL_WORD); + __ cmpptr(Address(rbx, in_bytes(Method::code_offset())), (int32_t)NULL_WORD); __ jcc(Assembler::equal, skip_fixup); __ bind(missed); @@ -1918,7 +1912,7 @@ { SkipIfEqual skip_if(masm, &DTraceMethodProbes, 0); - __ movoop(rax, JNIHandles::make_local(method())); + __ mov_metadata(rax, method()); __ call_VM_leaf( CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry), thread, rax); @@ -1926,7 +1920,7 @@ // RedefineClasses() tracing support for obsolete method entry if (RC_TRACE_IN_RANGE(0x00001000, 0x00002000)) { - __ movoop(rax, JNIHandles::make_local(method())); + __ mov_metadata(rax, method()); __ call_VM_leaf( CAST_FROM_FN_PTR(address, SharedRuntime::rc_trace_method_entry), thread, rax); @@ -2184,7 +2178,7 @@ SkipIfEqual skip_if(masm, &DTraceMethodProbes, 0); // Tell dtrace about this method exit save_native_result(masm, ret_type, stack_slots); - __ movoop(rax, JNIHandles::make_local(method())); + __ mov_metadata(rax, method()); __ call_VM_leaf( CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), thread, rax); @@ -3427,8 +3421,8 @@ __ cmpptr(Address(thread, Thread::pending_exception_offset()), (int32_t)NULL_WORD); __ jcc(Assembler::notEqual, pending); - // get the returned methodOop - __ movptr(rbx, Address(thread, JavaThread::vm_result_offset())); + // get the returned Method* + __ get_vm_result_2(rbx, thread); __ movptr(Address(rsp, RegisterSaver::rbx_offset() * wordSize), rbx); __ movptr(Address(rsp, RegisterSaver::rax_offset() * wordSize), rax); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/sharedRuntime_x86_64.cpp --- a/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -29,7 +29,7 @@ #include "code/icBuffer.hpp" #include "code/vtableStubs.hpp" #include "interpreter/interpreter.hpp" -#include "oops/compiledICHolderOop.hpp" +#include "oops/compiledICHolder.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/vframeArray.hpp" @@ -413,8 +413,7 @@ // Patch the callers callsite with entry to compiled code if it exists. static void patch_callers_callsite(MacroAssembler *masm) { Label L; - __ verify_oop(rbx); - __ cmpptr(Address(rbx, in_bytes(methodOopDesc::code_offset())), (int32_t)NULL_WORD); + __ cmpptr(Address(rbx, in_bytes(Method::code_offset())), (int32_t)NULL_WORD); __ jcc(Assembler::equal, L); // Save the current stack pointer @@ -428,8 +427,6 @@ __ andptr(rsp, -(StackAlignmentInBytes)); __ push_CPU_state(); - - __ verify_oop(rbx); // VM needs caller's callsite // VM needs target method // This needs to be a long call since we will relocate this adapter to @@ -586,7 +583,7 @@ } // Schedule the branch target address early. - __ movptr(rcx, Address(rbx, in_bytes(methodOopDesc::interpreter_entry_offset()))); + __ movptr(rcx, Address(rbx, in_bytes(Method::interpreter_entry_offset()))); __ jmp(rcx); } @@ -698,7 +695,7 @@ // Will jump to the compiled code just as if compiled code was doing it. // Pre-load the register-jump target early, to schedule it better. - __ movptr(r11, Address(rbx, in_bytes(methodOopDesc::from_compiled_offset()))); + __ movptr(r11, Address(rbx, in_bytes(Method::from_compiled_offset()))); // Now generate the shuffle code. Pick up all register args and move the // rest through the floating point stack top. @@ -793,8 +790,8 @@ __ movptr(Address(r15_thread, JavaThread::callee_target_offset()), rbx); - // put methodOop where a c2i would expect should we end up there - // only needed becaus eof c2 resolve stubs return methodOop as a result in + // put Method* where a c2i would expect should we end up there + // only needed becaus eof c2 resolve stubs return Method* as a result in // rax __ mov(rax, rbx); __ jmp(r11); @@ -812,7 +809,7 @@ gen_i2c_adapter(masm, total_args_passed, comp_args_on_stack, sig_bt, regs); // ------------------------------------------------------------------------- - // Generate a C2I adapter. On entry we know rbx holds the methodOop during calls + // Generate a C2I adapter. On entry we know rbx holds the Method* during calls // to the interpreter. The args start out packed in the compiled layout. They // need to be unpacked into the interpreter layout. This will almost always // require some stack space. We grow the current (compiled) stack, then repack @@ -829,12 +826,9 @@ Register temp = rbx; { - __ verify_oop(holder); __ load_klass(temp, receiver); - __ verify_oop(temp); - - __ cmpptr(temp, Address(holder, compiledICHolderOopDesc::holder_klass_offset())); - __ movptr(rbx, Address(holder, compiledICHolderOopDesc::holder_method_offset())); + __ cmpptr(temp, Address(holder, CompiledICHolder::holder_klass_offset())); + __ movptr(rbx, Address(holder, CompiledICHolder::holder_method_offset())); __ jcc(Assembler::equal, ok); __ jump(RuntimeAddress(SharedRuntime::get_ic_miss_stub())); @@ -842,7 +836,7 @@ // Method might have been compiled since the call site was patched to // interpreted if that is the case treat it as a miss so we can get // the call site corrected. - __ cmpptr(Address(rbx, in_bytes(methodOopDesc::code_offset())), (int32_t)NULL_WORD); + __ cmpptr(Address(rbx, in_bytes(Method::code_offset())), (int32_t)NULL_WORD); __ jcc(Assembler::equal, skip_fixup); __ jump(RuntimeAddress(SharedRuntime::get_ic_miss_stub())); } @@ -2184,7 +2178,7 @@ SkipIfEqual skip(masm, &DTraceMethodProbes, false); // protect the args we've loaded save_args(masm, total_c_args, c_arg, out_regs); - __ movoop(c_rarg1, JNIHandles::make_local(method())); + __ mov_metadata(c_rarg1, method()); __ call_VM_leaf( CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry), r15_thread, c_rarg1); @@ -2195,7 +2189,7 @@ if (RC_TRACE_IN_RANGE(0x00001000, 0x00002000)) { // protect the args we've loaded save_args(masm, total_c_args, c_arg, out_regs); - __ movoop(c_rarg1, JNIHandles::make_local(method())); + __ mov_metadata(c_rarg1, method()); __ call_VM_leaf( CAST_FROM_FN_PTR(address, SharedRuntime::rc_trace_method_entry), r15_thread, c_rarg1); @@ -2448,7 +2442,7 @@ { SkipIfEqual skip(masm, &DTraceMethodProbes, false); save_native_result(masm, ret_type, stack_slots); - __ movoop(c_rarg1, JNIHandles::make_local(method())); + __ mov_metadata(c_rarg1, method()); __ call_VM_leaf( CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), r15_thread, c_rarg1); @@ -3879,8 +3873,8 @@ __ cmpptr(Address(r15_thread, Thread::pending_exception_offset()), (int32_t)NULL_WORD); __ jcc(Assembler::notEqual, pending); - // get the returned methodOop - __ movptr(rbx, Address(r15_thread, JavaThread::vm_result_offset())); + // get the returned Method* + __ get_vm_result_2(rbx, r15_thread); __ movptr(Address(rsp, RegisterSaver::rbx_offset_in_bytes()), rbx); __ movptr(Address(rsp, RegisterSaver::rax_offset_in_bytes()), rax); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/stubGenerator_x86_32.cpp --- a/src/cpu/x86/vm/stubGenerator_x86_32.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/stubGenerator_x86_32.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ #include "interpreter/interpreter.hpp" #include "nativeInst_x86.hpp" #include "oops/instanceOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" @@ -234,7 +234,7 @@ // call Java function __ BIND(parameters_done); - __ movptr(rbx, method); // get methodOop + __ movptr(rbx, method); // get Method* __ movptr(rax, entry_point); // get entry_point __ mov(rsi, rsp); // set sender sp BLOCK_COMMENT("call Java function"); @@ -682,29 +682,11 @@ __ cmpptr(rdx, oop_bits); __ jcc(Assembler::notZero, error); - // make sure klass is 'reasonable' + // make sure klass is 'reasonable', which is not zero. __ movptr(rax, Address(rax, oopDesc::klass_offset_in_bytes())); // get klass __ testptr(rax, rax); __ jcc(Assembler::zero, error); // if klass is NULL it is broken - - // Check if the klass is in the right area of memory - const int klass_mask = Universe::verify_klass_mask(); - const int klass_bits = Universe::verify_klass_bits(); - __ mov(rdx, rax); - __ andptr(rdx, klass_mask); - __ cmpptr(rdx, klass_bits); - __ jcc(Assembler::notZero, error); - - // make sure klass' klass is 'reasonable' - __ movptr(rax, Address(rax, oopDesc::klass_offset_in_bytes())); // get klass' klass - __ testptr(rax, rax); - __ jcc(Assembler::zero, error); // if klass' klass is NULL it is broken - - __ mov(rdx, rax); - __ andptr(rdx, klass_mask); - __ cmpptr(rdx, klass_bits); - __ jcc(Assembler::notZero, error); // if klass not in right area - // of memory it is broken too. + // TODO: Future assert that klass is lower 4g memory for UseCompressedKlassPointers // return if everything seems ok __ bind(exit); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/stubGenerator_x86_64.cpp --- a/src/cpu/x86/vm/stubGenerator_x86_64.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/stubGenerator_x86_64.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ #include "interpreter/interpreter.hpp" #include "nativeInst_x86.hpp" #include "oops/instanceOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" @@ -109,7 +109,7 @@ // c_rarg0: call wrapper address address // c_rarg1: result address // c_rarg2: result type BasicType - // c_rarg3: method methodOop + // c_rarg3: method Method* // c_rarg4: (interpreter) entry point address // c_rarg5: parameters intptr_t* // 16(rbp): parameter size (in words) int @@ -139,7 +139,7 @@ // c_rarg0: call wrapper address address // c_rarg1: result address // c_rarg2: result type BasicType - // c_rarg3: method methodOop + // c_rarg3: method Method* // 48(rbp): (interpreter) entry point address // 56(rbp): parameters intptr_t* // 64(rbp): parameter size (in words) int @@ -332,7 +332,7 @@ // call Java function __ BIND(parameters_done); - __ movptr(rbx, method); // get methodOop + __ movptr(rbx, method); // get Method* __ movptr(c_rarg1, entry_point); // get entry_point __ mov(r13, rsp); // set sender sp BLOCK_COMMENT("call Java function"); @@ -1027,28 +1027,11 @@ // set r12 to heapbase for load_klass() __ reinit_heapbase(); - // make sure klass is 'reasonable' + // make sure klass is 'reasonable', which is not zero. __ load_klass(rax, rax); // get klass __ testptr(rax, rax); __ jcc(Assembler::zero, error); // if klass is NULL it is broken - // Check if the klass is in the right area of memory - __ mov(c_rarg2, rax); - __ movptr(c_rarg3, (intptr_t) Universe::verify_klass_mask()); - __ andptr(c_rarg2, c_rarg3); - __ movptr(c_rarg3, (intptr_t) Universe::verify_klass_bits()); - __ cmpptr(c_rarg2, c_rarg3); - __ jcc(Assembler::notZero, error); - - // make sure klass' klass is 'reasonable' - __ load_klass(rax, rax); - __ testptr(rax, rax); - __ jcc(Assembler::zero, error); // if klass' klass is NULL it is broken - // Check if the klass' klass is in the right area of memory - __ movptr(c_rarg3, (intptr_t) Universe::verify_klass_mask()); - __ andptr(rax, c_rarg3); - __ movptr(c_rarg3, (intptr_t) Universe::verify_klass_bits()); - __ cmpptr(rax, c_rarg3); - __ jcc(Assembler::notZero, error); + // TODO: Future assert that klass is lower 4g memory for UseCompressedKlassPointers // return if everything seems ok __ bind(exit); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/templateInterpreter_x86_32.cpp --- a/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -30,8 +30,8 @@ #include "interpreter/interpreterRuntime.hpp" #include "interpreter/templateTable.hpp" #include "oops/arrayOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" @@ -201,7 +201,7 @@ __ get_cache_and_index_at_bcp(rbx, rcx, 1, sizeof(u2)); __ bind(L_got_cache); __ movl(rbx, Address(rbx, rcx, - Address::times_ptr, constantPoolCacheOopDesc::base_offset() + + Address::times_ptr, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset())); __ andptr(rbx, 0xFF); __ lea(rsp, Address(rsp, rbx, Interpreter::stackElementScale())); @@ -343,34 +343,34 @@ // rcx: invocation counter // void InterpreterGenerator::generate_counter_incr(Label* overflow, Label* profile_method, Label* profile_method_continue) { - const Address invocation_counter(rbx, in_bytes(methodOopDesc::invocation_counter_offset()) + + const Address invocation_counter(rbx, in_bytes(Method::invocation_counter_offset()) + in_bytes(InvocationCounter::counter_offset())); - // Note: In tiered we increment either counters in methodOop or in MDO depending if we're profiling or not. + // Note: In tiered we increment either counters in Method* or in MDO depending if we're profiling or not. if (TieredCompilation) { int increment = InvocationCounter::count_increment; int mask = ((1 << Tier0InvokeNotifyFreqLog) - 1) << InvocationCounter::count_shift; Label no_mdo, done; if (ProfileInterpreter) { // Are we profiling? - __ movptr(rax, Address(rbx, methodOopDesc::method_data_offset())); + __ movptr(rax, Address(rbx, Method::method_data_offset())); __ testptr(rax, rax); __ jccb(Assembler::zero, no_mdo); // Increment counter in the MDO - const Address mdo_invocation_counter(rax, in_bytes(methodDataOopDesc::invocation_counter_offset()) + + const Address mdo_invocation_counter(rax, in_bytes(MethodData::invocation_counter_offset()) + in_bytes(InvocationCounter::counter_offset())); __ increment_mask_and_jump(mdo_invocation_counter, increment, mask, rcx, false, Assembler::zero, overflow); __ jmpb(done); } __ bind(no_mdo); - // Increment counter in methodOop (we don't need to load it, it's in rcx). + // Increment counter in Method* (we don't need to load it, it's in rcx). __ increment_mask_and_jump(invocation_counter, increment, mask, rcx, true, Assembler::zero, overflow); __ bind(done); } else { - const Address backedge_counter (rbx, methodOopDesc::backedge_counter_offset() + + const Address backedge_counter (rbx, Method::backedge_counter_offset() + InvocationCounter::counter_offset()); - if (ProfileInterpreter) { // %%% Merge this into methodDataOop - __ incrementl(Address(rbx,methodOopDesc::interpreter_invocation_counter_offset())); + if (ProfileInterpreter) { // %%% Merge this into MethodData* + __ incrementl(Address(rbx,Method::interpreter_invocation_counter_offset())); } // Update standard invocation counters __ movl(rax, backedge_counter); // load backedge counter @@ -424,7 +424,7 @@ // C++ interpreter only // rsi - previous interpreter state pointer - const Address size_of_parameters(rbx, methodOopDesc::size_of_parameters_offset()); + const Address size_of_parameters(rbx, Method::size_of_parameters_offset()); // InterpreterRuntime::frequency_counter_overflow takes one argument // indicating if the counter overflow occurs at a backwards branch (non-NULL bcp). @@ -433,7 +433,7 @@ __ movptr(rax, (intptr_t)false); __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::frequency_counter_overflow), rax); - __ movptr(rbx, Address(rbp, method_offset)); // restore methodOop + __ movptr(rbx, Address(rbp, method_offset)); // restore Method* // Preserve invariant that rsi/rdi contain bcp/locals of sender frame // and jump to the interpreted entry. @@ -450,7 +450,7 @@ // // Asm interpreter // rdx: number of additional locals this frame needs (what we must check) - // rbx,: methodOop + // rbx,: Method* // destroyed on exit // rax, @@ -542,11 +542,11 @@ } // Allocate monitor and lock method (asm interpreter) -// rbx, - methodOop +// rbx, - Method* // void InterpreterGenerator::lock_method(void) { // synchronize method - const Address access_flags (rbx, methodOopDesc::access_flags_offset()); + const Address access_flags (rbx, Method::access_flags_offset()); const Address monitor_block_top (rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize); const int entry_size = frame::interpreter_frame_monitor_size() * wordSize; @@ -566,9 +566,9 @@ __ testl(rax, JVM_ACC_STATIC); __ movptr(rax, Address(rdi, Interpreter::local_offset_in_bytes(0))); // get receiver (assume this is frequent case) __ jcc(Assembler::zero, done); - __ movptr(rax, Address(rbx, methodOopDesc::const_offset())); - __ movptr(rax, Address(rax, constMethodOopDesc::constants_offset())); - __ movptr(rax, Address(rax, constantPoolOopDesc::pool_holder_offset_in_bytes())); + __ movptr(rax, Address(rbx, Method::const_offset())); + __ movptr(rax, Address(rax, ConstMethod::constants_offset())); + __ movptr(rax, Address(rax, ConstantPool::pool_holder_offset_in_bytes())); __ movptr(rax, Address(rax, mirror_offset)); __ bind(done); } @@ -592,24 +592,24 @@ __ push(rsi); // set sender sp __ push((int32_t)NULL_WORD); // leave last_sp as null - __ movptr(rsi, Address(rbx,methodOopDesc::const_offset())); // get constMethodOop - __ lea(rsi, Address(rsi,constMethodOopDesc::codes_offset())); // get codebase - __ push(rbx); // save methodOop + __ movptr(rsi, Address(rbx,Method::const_offset())); // get ConstMethod* + __ lea(rsi, Address(rsi,ConstMethod::codes_offset())); // get codebase + __ push(rbx); // save Method* if (ProfileInterpreter) { Label method_data_continue; - __ movptr(rdx, Address(rbx, in_bytes(methodOopDesc::method_data_offset()))); + __ movptr(rdx, Address(rbx, in_bytes(Method::method_data_offset()))); __ testptr(rdx, rdx); __ jcc(Assembler::zero, method_data_continue); - __ addptr(rdx, in_bytes(methodDataOopDesc::data_offset())); + __ addptr(rdx, in_bytes(MethodData::data_offset())); __ bind(method_data_continue); __ push(rdx); // set the mdp (method data pointer) } else { __ push(0); } - __ movptr(rdx, Address(rbx, methodOopDesc::const_offset())); - __ movptr(rdx, Address(rdx, constMethodOopDesc::constants_offset())); - __ movptr(rdx, Address(rdx, constantPoolOopDesc::cache_offset_in_bytes())); + __ movptr(rdx, Address(rbx, Method::const_offset())); + __ movptr(rdx, Address(rdx, ConstMethod::constants_offset())); + __ movptr(rdx, Address(rdx, ConstantPool::cache_offset_in_bytes())); __ push(rdx); // set constant pool cache __ push(rdi); // set locals pointer if (native_call) { @@ -633,7 +633,7 @@ address InterpreterGenerator::generate_accessor_entry(void) { - // rbx,: methodOop + // rbx,: Method* // rcx: receiver (preserve for slow entry into asm interpreter) // rsi: senderSP must preserved for slow path, set SP to it on fast path @@ -664,14 +664,14 @@ __ jcc(Assembler::zero, slow_path); // read first instruction word and extract bytecode @ 1 and index @ 2 - __ movptr(rdx, Address(rbx, methodOopDesc::const_offset())); - __ movptr(rdi, Address(rdx, constMethodOopDesc::constants_offset())); - __ movl(rdx, Address(rdx, constMethodOopDesc::codes_offset())); + __ movptr(rdx, Address(rbx, Method::const_offset())); + __ movptr(rdi, Address(rdx, ConstMethod::constants_offset())); + __ movl(rdx, Address(rdx, ConstMethod::codes_offset())); // Shift codes right to get the index on the right. // The bytecode fetched looks like <0xb4><0x2a> __ shrl(rdx, 2*BitsPerByte); __ shll(rdx, exact_log2(in_words(ConstantPoolCacheEntry::size()))); - __ movptr(rdi, Address(rdi, constantPoolOopDesc::cache_offset_in_bytes())); + __ movptr(rdi, Address(rdi, ConstantPool::cache_offset_in_bytes())); // rax,: local 0 // rbx,: method @@ -688,7 +688,7 @@ __ movl(rcx, Address(rdi, rdx, - Address::times_ptr, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::indices_offset())); + Address::times_ptr, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::indices_offset())); __ shrl(rcx, 2*BitsPerByte); __ andl(rcx, 0xFF); __ cmpl(rcx, Bytecodes::_getfield); @@ -698,11 +698,11 @@ __ movptr(rcx, Address(rdi, rdx, - Address::times_ptr, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::f2_offset())); + Address::times_ptr, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f2_offset())); __ movl(rdx, Address(rdi, rdx, - Address::times_ptr, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::flags_offset())); + Address::times_ptr, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset())); Label notByte, notShort, notChar; const Address field_address (rax, rcx, Address::times_1); @@ -789,7 +789,7 @@ // // This code is based on generate_accessor_enty. - // rbx,: methodOop + // rbx,: Method* // rcx: receiver (preserve for slow entry into asm interpreter) // rsi: senderSP must preserved for slow path, set SP to it on fast path @@ -863,15 +863,15 @@ // determine code generation flags bool inc_counter = UseCompiler || CountCompiledCalls; - // rbx,: methodOop + // rbx,: Method* // rsi: sender sp // rsi: previous interpreter state (C++ interpreter) must preserve address entry_point = __ pc(); - const Address size_of_parameters(rbx, methodOopDesc::size_of_parameters_offset()); - const Address invocation_counter(rbx, methodOopDesc::invocation_counter_offset() + InvocationCounter::counter_offset()); - const Address access_flags (rbx, methodOopDesc::access_flags_offset()); + const Address size_of_parameters(rbx, Method::size_of_parameters_offset()); + const Address invocation_counter(rbx, Method::invocation_counter_offset() + InvocationCounter::counter_offset()); + const Address access_flags (rbx, Method::access_flags_offset()); // get parameter size (always needed) __ load_unsigned_short(rcx, size_of_parameters); @@ -880,7 +880,7 @@ // and the arguments are already on the stack and we only add a handful of words // to the stack - // rbx,: methodOop + // rbx,: Method* // rcx: size of parameters // rsi: sender sp @@ -988,8 +988,7 @@ // allocate space for parameters __ get_method(method); - __ verify_oop(method); - __ load_unsigned_short(t, Address(method, methodOopDesc::size_of_parameters_offset())); + __ load_unsigned_short(t, Address(method, Method::size_of_parameters_offset())); __ shlptr(t, Interpreter::logStackElementSize); __ addptr(t, 2*wordSize); // allocate two more slots for JNIEnv and possible mirror __ subptr(rsp, t); @@ -997,12 +996,12 @@ // get signature handler { Label L; - __ movptr(t, Address(method, methodOopDesc::signature_handler_offset())); + __ movptr(t, Address(method, Method::signature_handler_offset())); __ testptr(t, t); __ jcc(Assembler::notZero, L); __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::prepare_native_call), method); __ get_method(method); - __ movptr(t, Address(method, methodOopDesc::signature_handler_offset())); + __ movptr(t, Address(method, Method::signature_handler_offset())); __ bind(L); } @@ -1024,13 +1023,13 @@ // pass mirror handle if static call { Label L; const int mirror_offset = in_bytes(Klass::java_mirror_offset()); - __ movl(t, Address(method, methodOopDesc::access_flags_offset())); + __ movl(t, Address(method, Method::access_flags_offset())); __ testl(t, JVM_ACC_STATIC); __ jcc(Assembler::zero, L); // get mirror - __ movptr(t, Address(method, methodOopDesc:: const_offset())); - __ movptr(t, Address(t, constMethodOopDesc::constants_offset())); - __ movptr(t, Address(t, constantPoolOopDesc::pool_holder_offset_in_bytes())); + __ movptr(t, Address(method, Method:: const_offset())); + __ movptr(t, Address(t, ConstMethod::constants_offset())); + __ movptr(t, Address(t, ConstantPool::pool_holder_offset_in_bytes())); __ movptr(t, Address(t, mirror_offset)); // copy mirror into activation frame __ movptr(Address(rbp, frame::interpreter_frame_oop_temp_offset * wordSize), t); @@ -1042,14 +1041,13 @@ // get native function entry point { Label L; - __ movptr(rax, Address(method, methodOopDesc::native_function_offset())); + __ movptr(rax, Address(method, Method::native_function_offset())); ExternalAddress unsatisfied(SharedRuntime::native_method_throw_unsatisfied_link_error_entry()); __ cmpptr(rax, unsatisfied.addr()); __ jcc(Assembler::notEqual, L); __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::prepare_native_call), method); __ get_method(method); - __ verify_oop(method); - __ movptr(rax, Address(method, methodOopDesc::native_function_offset())); + __ movptr(rax, Address(method, Method::native_function_offset())); __ bind(L); } @@ -1218,9 +1216,8 @@ // i.e., bci == 0 <=> rsi == code_base() // Can't call_VM until bcp is within reasonable. __ get_method(method); // method is junk from thread_in_native to now. - __ verify_oop(method); - __ movptr(rsi, Address(method,methodOopDesc::const_offset())); // get constMethodOop - __ lea(rsi, Address(rsi,constMethodOopDesc::codes_offset())); // get codebase + __ movptr(rsi, Address(method,Method::const_offset())); // get ConstMethod* + __ lea(rsi, Address(rsi,ConstMethod::codes_offset())); // get codebase // handle exceptions (exception handling will handle unlocking!) { Label L; @@ -1236,7 +1233,7 @@ // do unlocking if necessary { Label L; - __ movl(t, Address(method, methodOopDesc::access_flags_offset())); + __ movl(t, Address(method, Method::access_flags_offset())); __ testl(t, JVM_ACC_SYNCHRONIZED); __ jcc(Assembler::zero, L); // the code below should be shared with interpreter macro assembler implementation @@ -1296,20 +1293,20 @@ // determine code generation flags bool inc_counter = UseCompiler || CountCompiledCalls; - // rbx,: methodOop + // rbx,: Method* // rsi: sender sp address entry_point = __ pc(); - const Address size_of_parameters(rbx, methodOopDesc::size_of_parameters_offset()); - const Address size_of_locals (rbx, methodOopDesc::size_of_locals_offset()); - const Address invocation_counter(rbx, methodOopDesc::invocation_counter_offset() + InvocationCounter::counter_offset()); - const Address access_flags (rbx, methodOopDesc::access_flags_offset()); + const Address size_of_parameters(rbx, Method::size_of_parameters_offset()); + const Address size_of_locals (rbx, Method::size_of_locals_offset()); + const Address invocation_counter(rbx, Method::invocation_counter_offset() + InvocationCounter::counter_offset()); + const Address access_flags (rbx, Method::access_flags_offset()); // get parameter size (always needed) __ load_unsigned_short(rcx, size_of_parameters); - // rbx,: methodOop + // rbx,: Method* // rcx: size of parameters // rsi: sender_sp (could differ from sp+wordSize if we were called via c2i ) @@ -1464,7 +1461,7 @@ // // Arguments: // -// rbx,: methodOop +// rbx,: Method* // rcx: receiver // // @@ -1490,7 +1487,7 @@ // [ expr. stack bottom ] // [ saved rsi ] // [ current rdi ] -// [ methodOop ] +// [ Method* ] // [ saved rbp, ] <--- rbp, // [ return address ] // [ local variable m ] @@ -1556,7 +1553,7 @@ } // How much stack a method activation needs in words. -int AbstractInterpreter::size_top_interpreter_activation(methodOop method) { +int AbstractInterpreter::size_top_interpreter_activation(Method* method) { const int stub_code = 4; // see generate_call_stub // Save space for one monitor to get into the interpreted method in case @@ -1568,7 +1565,7 @@ // be sure to change this if you add/subtract anything to/from the overhead area const int overhead_size = -frame::interpreter_frame_initial_sp_offset; - const int extra_stack = methodOopDesc::extra_stack_entries(); + const int extra_stack = Method::extra_stack_entries(); const int method_stack = (method->max_locals() + method->max_stack() + extra_stack) * Interpreter::stackElementWords; return overhead_size + method_stack + stub_code; @@ -1576,7 +1573,7 @@ // asm based interpreter deoptimization helpers -int AbstractInterpreter::layout_activation(methodOop method, +int AbstractInterpreter::layout_activation(Method* method, int tempcount, int popframe_extra_args, int moncount, @@ -1737,8 +1734,7 @@ // Compute size of arguments for saving when returning to deoptimized caller __ get_method(rax); - __ verify_oop(rax); - __ load_unsigned_short(rax, Address(rax, in_bytes(methodOopDesc::size_of_parameters_offset()))); + __ load_unsigned_short(rax, Address(rax, in_bytes(Method::size_of_parameters_offset()))); __ shlptr(rax, Interpreter::logStackElementSize); __ restore_locals(); __ subptr(rdi, rax); @@ -1815,9 +1811,7 @@ __ remove_activation(vtos, rdx, false, true, false); // restore exception __ get_thread(thread); - __ movptr(rax, Address(thread, JavaThread::vm_result_offset())); - __ movptr(Address(thread, JavaThread::vm_result_offset()), NULL_WORD); - __ verify_oop(rax); + __ get_vm_result(rax, thread); // Inbetween activations - previous activation type unknown yet // compute continuation point - the continuation point expects diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/templateInterpreter_x86_64.cpp --- a/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -30,8 +30,8 @@ #include "interpreter/interpreterRuntime.hpp" #include "interpreter/templateTable.hpp" #include "oops/arrayOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" @@ -185,7 +185,7 @@ __ bind(L_got_cache); __ movl(rbx, Address(rbx, rcx, Address::times_ptr, - in_bytes(constantPoolCacheOopDesc::base_offset()) + + in_bytes(ConstantPoolCache::base_offset()) + 3 * wordSize)); __ andl(rbx, 0xFF); __ lea(rsp, Address(rsp, rbx, Address::times_8)); @@ -299,36 +299,36 @@ Label* overflow, Label* profile_method, Label* profile_method_continue) { - const Address invocation_counter(rbx, in_bytes(methodOopDesc::invocation_counter_offset()) + + const Address invocation_counter(rbx, in_bytes(Method::invocation_counter_offset()) + in_bytes(InvocationCounter::counter_offset())); - // Note: In tiered we increment either counters in methodOop or in MDO depending if we're profiling or not. + // Note: In tiered we increment either counters in Method* or in MDO depending if we're profiling or not. if (TieredCompilation) { int increment = InvocationCounter::count_increment; int mask = ((1 << Tier0InvokeNotifyFreqLog) - 1) << InvocationCounter::count_shift; Label no_mdo, done; if (ProfileInterpreter) { // Are we profiling? - __ movptr(rax, Address(rbx, methodOopDesc::method_data_offset())); + __ movptr(rax, Address(rbx, Method::method_data_offset())); __ testptr(rax, rax); __ jccb(Assembler::zero, no_mdo); // Increment counter in the MDO - const Address mdo_invocation_counter(rax, in_bytes(methodDataOopDesc::invocation_counter_offset()) + + const Address mdo_invocation_counter(rax, in_bytes(MethodData::invocation_counter_offset()) + in_bytes(InvocationCounter::counter_offset())); __ increment_mask_and_jump(mdo_invocation_counter, increment, mask, rcx, false, Assembler::zero, overflow); __ jmpb(done); } __ bind(no_mdo); - // Increment counter in methodOop (we don't need to load it, it's in ecx). + // Increment counter in Method* (we don't need to load it, it's in ecx). __ increment_mask_and_jump(invocation_counter, increment, mask, rcx, true, Assembler::zero, overflow); __ bind(done); } else { const Address backedge_counter(rbx, - methodOopDesc::backedge_counter_offset() + + Method::backedge_counter_offset() + InvocationCounter::counter_offset()); - if (ProfileInterpreter) { // %%% Merge this into methodDataOop + if (ProfileInterpreter) { // %%% Merge this into MethodData* __ incrementl(Address(rbx, - methodOopDesc::interpreter_invocation_counter_offset())); + Method::interpreter_invocation_counter_offset())); } // Update standard invocation counters __ movl(rax, backedge_counter); // load backedge counter @@ -370,7 +370,7 @@ // rdx is not restored. Doesn't appear to really be set. const Address size_of_parameters(rbx, - methodOopDesc::size_of_parameters_offset()); + Method::size_of_parameters_offset()); // InterpreterRuntime::frequency_counter_overflow takes two // arguments, the first (thread) is passed by call_VM, the second @@ -385,7 +385,7 @@ InterpreterRuntime::frequency_counter_overflow), c_rarg1); - __ movptr(rbx, Address(rbp, method_offset)); // restore methodOop + __ movptr(rbx, Address(rbp, method_offset)); // restore Method* // Preserve invariant that r13/r14 contain bcp/locals of sender frame // and jump to the interpreted entry. __ jmp(*do_continue, relocInfo::none); @@ -401,7 +401,7 @@ // // Args: // rdx: number of additional locals this frame needs (what we must check) -// rbx: methodOop +// rbx: Method* // // Kills: // rax @@ -487,7 +487,7 @@ // Allocate monitor and lock method (asm interpreter) // // Args: -// rbx: methodOop +// rbx: Method* // r14: locals // // Kills: @@ -496,7 +496,7 @@ // rscratch1, rscratch2 (scratch regs) void InterpreterGenerator::lock_method(void) { // synchronize method - const Address access_flags(rbx, methodOopDesc::access_flags_offset()); + const Address access_flags(rbx, Method::access_flags_offset()); const Address monitor_block_top( rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize); @@ -522,10 +522,10 @@ // get receiver (assume this is frequent case) __ movptr(rax, Address(r14, Interpreter::local_offset_in_bytes(0))); __ jcc(Assembler::zero, done); - __ movptr(rax, Address(rbx, methodOopDesc::const_offset())); - __ movptr(rax, Address(rax, constMethodOopDesc::constants_offset())); + __ movptr(rax, Address(rbx, Method::const_offset())); + __ movptr(rax, Address(rax, ConstMethod::constants_offset())); __ movptr(rax, Address(rax, - constantPoolOopDesc::pool_holder_offset_in_bytes())); + ConstantPool::pool_holder_offset_in_bytes())); __ movptr(rax, Address(rax, mirror_offset)); #ifdef ASSERT @@ -555,7 +555,7 @@ // // Args: // rax: return address -// rbx: methodOop +// rbx: Method* // r14: pointer to locals // r13: sender sp // rdx: cp cache @@ -565,24 +565,24 @@ __ enter(); // save old & set new rbp __ push(r13); // set sender sp __ push((int)NULL_WORD); // leave last_sp as null - __ movptr(r13, Address(rbx, methodOopDesc::const_offset())); // get constMethodOop - __ lea(r13, Address(r13, constMethodOopDesc::codes_offset())); // get codebase - __ push(rbx); // save methodOop + __ movptr(r13, Address(rbx, Method::const_offset())); // get ConstMethod* + __ lea(r13, Address(r13, ConstMethod::codes_offset())); // get codebase + __ push(rbx); // save Method* if (ProfileInterpreter) { Label method_data_continue; - __ movptr(rdx, Address(rbx, in_bytes(methodOopDesc::method_data_offset()))); + __ movptr(rdx, Address(rbx, in_bytes(Method::method_data_offset()))); __ testptr(rdx, rdx); __ jcc(Assembler::zero, method_data_continue); - __ addptr(rdx, in_bytes(methodDataOopDesc::data_offset())); + __ addptr(rdx, in_bytes(MethodData::data_offset())); __ bind(method_data_continue); __ push(rdx); // set the mdp (method data pointer) } else { __ push(0); } - __ movptr(rdx, Address(rbx, methodOopDesc::const_offset())); - __ movptr(rdx, Address(rdx, constMethodOopDesc::constants_offset())); - __ movptr(rdx, Address(rdx, constantPoolOopDesc::cache_offset_in_bytes())); + __ movptr(rdx, Address(rbx, Method::const_offset())); + __ movptr(rdx, Address(rdx, ConstMethod::constants_offset())); + __ movptr(rdx, Address(rdx, ConstantPool::cache_offset_in_bytes())); __ push(rdx); // set constant pool cache __ push(r14); // set locals pointer if (native_call) { @@ -604,7 +604,7 @@ // Call an accessor method (assuming it is resolved, otherwise drop // into vanilla (slow path) entry address InterpreterGenerator::generate_accessor_entry(void) { - // rbx: methodOop + // rbx: Method* // r13: senderSP must preserver for slow path, set SP to it on fast path @@ -632,14 +632,14 @@ __ jcc(Assembler::zero, slow_path); // read first instruction word and extract bytecode @ 1 and index @ 2 - __ movptr(rdx, Address(rbx, methodOopDesc::const_offset())); - __ movptr(rdi, Address(rdx, constMethodOopDesc::constants_offset())); - __ movl(rdx, Address(rdx, constMethodOopDesc::codes_offset())); + __ movptr(rdx, Address(rbx, Method::const_offset())); + __ movptr(rdi, Address(rdx, ConstMethod::constants_offset())); + __ movl(rdx, Address(rdx, ConstMethod::codes_offset())); // Shift codes right to get the index on the right. // The bytecode fetched looks like <0xb4><0x2a> __ shrl(rdx, 2 * BitsPerByte); __ shll(rdx, exact_log2(in_words(ConstantPoolCacheEntry::size()))); - __ movptr(rdi, Address(rdi, constantPoolOopDesc::cache_offset_in_bytes())); + __ movptr(rdi, Address(rdi, ConstantPool::cache_offset_in_bytes())); // rax: local 0 // rbx: method @@ -655,7 +655,7 @@ Address(rdi, rdx, Address::times_8, - constantPoolCacheOopDesc::base_offset() + + ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::indices_offset())); __ shrl(rcx, 2 * BitsPerByte); __ andl(rcx, 0xFF); @@ -667,14 +667,14 @@ Address(rdi, rdx, Address::times_8, - constantPoolCacheOopDesc::base_offset() + + ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f2_offset())); // edx: flags __ movl(rdx, Address(rdi, rdx, Address::times_8, - constantPoolCacheOopDesc::base_offset() + + ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset())); Label notObj, notInt, notByte, notShort; @@ -771,7 +771,7 @@ // // This code is based on generate_accessor_enty. // - // rbx: methodOop + // rbx: Method* // r13: senderSP must preserve for slow path, set SP to it on fast path @@ -839,17 +839,17 @@ // determine code generation flags bool inc_counter = UseCompiler || CountCompiledCalls; - // rbx: methodOop + // rbx: Method* // r13: sender sp address entry_point = __ pc(); - const Address size_of_parameters(rbx, methodOopDesc:: + const Address size_of_parameters(rbx, Method:: size_of_parameters_offset()); - const Address invocation_counter(rbx, methodOopDesc:: + const Address invocation_counter(rbx, Method:: invocation_counter_offset() + InvocationCounter::counter_offset()); - const Address access_flags (rbx, methodOopDesc::access_flags_offset()); + const Address access_flags (rbx, Method::access_flags_offset()); // get parameter size (always needed) __ load_unsigned_short(rcx, size_of_parameters); @@ -858,7 +858,7 @@ // expression stack and the arguments are already on the stack and // we only add a handful of words to the stack - // rbx: methodOop + // rbx: Method* // rcx: size of parameters // r13: sender sp __ pop(rax); // get return address @@ -967,10 +967,9 @@ // allocate space for parameters __ get_method(method); - __ verify_oop(method); __ load_unsigned_short(t, Address(method, - methodOopDesc::size_of_parameters_offset())); + Method::size_of_parameters_offset())); __ shll(t, Interpreter::logStackElementSize); __ subptr(rsp, t); @@ -980,7 +979,7 @@ // get signature handler { Label L; - __ movptr(t, Address(method, methodOopDesc::signature_handler_offset())); + __ movptr(t, Address(method, Method::signature_handler_offset())); __ testptr(t, t); __ jcc(Assembler::notZero, L); __ call_VM(noreg, @@ -988,7 +987,7 @@ InterpreterRuntime::prepare_native_call), method); __ get_method(method); - __ movptr(t, Address(method, methodOopDesc::signature_handler_offset())); + __ movptr(t, Address(method, Method::signature_handler_offset())); __ bind(L); } @@ -1018,13 +1017,13 @@ { Label L; const int mirror_offset = in_bytes(Klass::java_mirror_offset()); - __ movl(t, Address(method, methodOopDesc::access_flags_offset())); + __ movl(t, Address(method, Method::access_flags_offset())); __ testl(t, JVM_ACC_STATIC); __ jcc(Assembler::zero, L); // get mirror - __ movptr(t, Address(method, methodOopDesc::const_offset())); - __ movptr(t, Address(t, constMethodOopDesc::constants_offset())); - __ movptr(t, Address(t, constantPoolOopDesc::pool_holder_offset_in_bytes())); + __ movptr(t, Address(method, Method::const_offset())); + __ movptr(t, Address(t, ConstMethod::constants_offset())); + __ movptr(t, Address(t, ConstantPool::pool_holder_offset_in_bytes())); __ movptr(t, Address(t, mirror_offset)); // copy mirror into activation frame __ movptr(Address(rbp, frame::interpreter_frame_oop_temp_offset * wordSize), @@ -1038,7 +1037,7 @@ // get native function entry point { Label L; - __ movptr(rax, Address(method, methodOopDesc::native_function_offset())); + __ movptr(rax, Address(method, Method::native_function_offset())); ExternalAddress unsatisfied(SharedRuntime::native_method_throw_unsatisfied_link_error_entry()); __ movptr(rscratch2, unsatisfied.addr()); __ cmpptr(rax, rscratch2); @@ -1048,8 +1047,7 @@ InterpreterRuntime::prepare_native_call), method); __ get_method(method); - __ verify_oop(method); - __ movptr(rax, Address(method, methodOopDesc::native_function_offset())); + __ movptr(rax, Address(method, Method::native_function_offset())); __ bind(L); } @@ -1201,12 +1199,11 @@ // until here. Also can't call_VM until the bcp has been // restored. Need bcp for throwing exception below so get it now. __ get_method(method); - __ verify_oop(method); // restore r13 to have legal interpreter frame, i.e., bci == 0 <=> // r13 == code_base() - __ movptr(r13, Address(method, methodOopDesc::const_offset())); // get constMethodOop - __ lea(r13, Address(r13, constMethodOopDesc::codes_offset())); // get codebase + __ movptr(r13, Address(method, Method::const_offset())); // get ConstMethod* + __ lea(r13, Address(r13, ConstMethod::codes_offset())); // get codebase // handle exceptions (exception handling will handle unlocking!) { Label L; @@ -1226,7 +1223,7 @@ // do unlocking if necessary { Label L; - __ movl(t, Address(method, methodOopDesc::access_flags_offset())); + __ movl(t, Address(method, Method::access_flags_offset())); __ testl(t, JVM_ACC_SYNCHRONIZED); __ jcc(Assembler::zero, L); // the code below should be shared with interpreter macro @@ -1301,22 +1298,22 @@ // determine code generation flags bool inc_counter = UseCompiler || CountCompiledCalls; - // ebx: methodOop + // ebx: Method* // r13: sender sp address entry_point = __ pc(); const Address size_of_parameters(rbx, - methodOopDesc::size_of_parameters_offset()); - const Address size_of_locals(rbx, methodOopDesc::size_of_locals_offset()); + Method::size_of_parameters_offset()); + const Address size_of_locals(rbx, Method::size_of_locals_offset()); const Address invocation_counter(rbx, - methodOopDesc::invocation_counter_offset() + + Method::invocation_counter_offset() + InvocationCounter::counter_offset()); - const Address access_flags(rbx, methodOopDesc::access_flags_offset()); + const Address access_flags(rbx, Method::access_flags_offset()); // get parameter size (always needed) __ load_unsigned_short(rcx, size_of_parameters); - // rbx: methodOop + // rbx: Method* // rcx: size of parameters // r13: sender_sp (could differ from sp+wordSize if we were called via c2i ) @@ -1480,7 +1477,7 @@ // // Arguments: // -// rbx: methodOop +// rbx: Method* // // Stack layout immediately at entry // @@ -1505,7 +1502,7 @@ // [ expr. stack bottom ] // [ saved r13 ] // [ current r14 ] -// [ methodOop ] +// [ Method* ] // [ saved ebp ] <--- rbp // [ return address ] // [ local variable m ] @@ -1574,7 +1571,7 @@ } // How much stack a method activation needs in words. -int AbstractInterpreter::size_top_interpreter_activation(methodOop method) { +int AbstractInterpreter::size_top_interpreter_activation(Method* method) { const int entry_size = frame::interpreter_frame_monitor_size(); // total overhead size: entry_size + (saved rbp thru expr stack @@ -1584,13 +1581,13 @@ -(frame::interpreter_frame_initial_sp_offset) + entry_size; const int stub_code = frame::entry_frame_after_call_words; - const int extra_stack = methodOopDesc::extra_stack_entries(); + const int extra_stack = Method::extra_stack_entries(); const int method_stack = (method->max_locals() + method->max_stack() + extra_stack) * Interpreter::stackElementWords; return (overhead_size + method_stack + stub_code); } -int AbstractInterpreter::layout_activation(methodOop method, +int AbstractInterpreter::layout_activation(Method* method, int tempcount, int popframe_extra_args, int moncount, @@ -1755,7 +1752,7 @@ // Compute size of arguments for saving when returning to // deoptimized caller __ get_method(rax); - __ load_unsigned_short(rax, Address(rax, in_bytes(methodOopDesc:: + __ load_unsigned_short(rax, Address(rax, in_bytes(Method:: size_of_parameters_offset()))); __ shll(rax, Interpreter::logStackElementSize); __ restore_locals(); // XXX do we need this? @@ -1832,9 +1829,7 @@ // remove the activation (without doing throws on illegalMonitorExceptions) __ remove_activation(vtos, rdx, false, true, false); // restore exception - __ movptr(rax, Address(r15_thread, JavaThread::vm_result_offset())); - __ movptr(Address(r15_thread, JavaThread::vm_result_offset()), (int32_t)NULL_WORD); - __ verify_oop(rax); + __ get_vm_result(rax, r15_thread); // In between activations - previous activation type unknown yet // compute continuation point - the continuation point expects the diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/templateTable_x86_32.cpp --- a/src/cpu/x86/vm/templateTable_x86_32.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/templateTable_x86_32.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ #include "interpreter/interpreterRuntime.hpp" #include "interpreter/templateTable.hpp" #include "memory/universe.inline.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" @@ -357,17 +357,13 @@ __ load_unsigned_byte(rbx, at_bcp(1)); } __ get_cpool_and_tags(rcx, rax); - const int base_offset = constantPoolOopDesc::header_size() * wordSize; - const int tags_offset = typeArrayOopDesc::header_size(T_BYTE) * wordSize; + const int base_offset = ConstantPool::header_size() * wordSize; + const int tags_offset = Array::base_offset_in_bytes(); // get type __ xorptr(rdx, rdx); __ movb(rdx, Address(rax, rbx, Address::times_1, tags_offset)); - // unresolved string - get the resolved string - __ cmpl(rdx, JVM_CONSTANT_UnresolvedString); - __ jccb(Assembler::equal, call_ldc); - // unresolved class - get the resolved class __ cmpl(rdx, JVM_CONSTANT_UnresolvedClass); __ jccb(Assembler::equal, call_ldc); @@ -400,73 +396,46 @@ { Label L; __ cmpl(rdx, JVM_CONSTANT_Integer); __ jcc(Assembler::equal, L); - __ cmpl(rdx, JVM_CONSTANT_String); - __ jcc(Assembler::equal, L); - __ cmpl(rdx, JVM_CONSTANT_Object); - __ jcc(Assembler::equal, L); + // String and Object are rewritten to fast_aldc __ stop("unexpected tag type in ldc"); __ bind(L); } #endif - Label isOop; - // atos and itos - // Integer is only non-oop type we will see here - __ cmpl(rdx, JVM_CONSTANT_Integer); - __ jccb(Assembler::notEqual, isOop); + // itos JVM_CONSTANT_Integer only __ movl(rax, Address(rcx, rbx, Address::times_ptr, base_offset)); __ push(itos); - __ jmp(Done); - __ bind(isOop); - __ movptr(rax, Address(rcx, rbx, Address::times_ptr, base_offset)); - __ push(atos); - - if (VerifyOops) { - __ verify_oop(rax); - } __ bind(Done); } // Fast path for caching oop constants. -// %%% We should use this to handle Class and String constants also. -// %%% It will simplify the ldc/primitive path considerably. void TemplateTable::fast_aldc(bool wide) { transition(vtos, atos); - if (!EnableInvokeDynamic) { - // We should not encounter this bytecode if !EnableInvokeDynamic. - // The verifier will stop it. However, if we get past the verifier, - // this will stop the thread in a reasonable way, without crashing the JVM. - __ call_VM(noreg, CAST_FROM_FN_PTR(address, - InterpreterRuntime::throw_IncompatibleClassChangeError)); - // the call_VM checks for exception, so we should never return here. - __ should_not_reach_here(); - return; - } - - const Register cache = rcx; - const Register index = rdx; - - resolve_cache_and_index(f12_oop, rax, cache, index, wide ? sizeof(u2) : sizeof(u1)); + Register result = rax; + Register tmp = rdx; + int index_size = wide ? sizeof(u2) : sizeof(u1); + + Label resolved; + + // We are resolved if the resolved reference cache entry contains a + // non-null object (String, MethodType, etc.) + assert_different_registers(result, tmp); + __ get_cache_index_at_bcp(tmp, 1, index_size); + __ load_resolved_reference_at_index(result, tmp); + __ testl(result, result); + __ jcc(Assembler::notZero, resolved); + + address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); + + // first time invocation - must resolve first + __ movl(tmp, (int)bytecode()); + __ call_VM(result, entry, tmp); + + __ bind(resolved); + if (VerifyOops) { - __ verify_oop(rax); + __ verify_oop(result); } - - Label L_done, L_throw_exception; - const Register con_klass_temp = rcx; // same as cache - __ load_klass(con_klass_temp, rax); - __ cmpptr(con_klass_temp, ExternalAddress((address)Universe::systemObjArrayKlassObj_addr())); - __ jcc(Assembler::notEqual, L_done); - __ cmpl(Address(rax, arrayOopDesc::length_offset_in_bytes()), 0); - __ jcc(Assembler::notEqual, L_throw_exception); - __ xorptr(rax, rax); - __ jmp(L_done); - - // Load the exception from the system-array which wraps it: - __ bind(L_throw_exception); - __ load_heap_oop(rax, Address(rax, arrayOopDesc::base_offset_in_bytes(T_OBJECT))); - __ jump(ExternalAddress(Interpreter::throw_exception_entry())); - - __ bind(L_done); } void TemplateTable::ldc2_w() { @@ -475,8 +444,8 @@ __ get_unsigned_2_byte_index_at_bcp(rbx, 1); __ get_cpool_and_tags(rcx, rax); - const int base_offset = constantPoolOopDesc::header_size() * wordSize; - const int tags_offset = typeArrayOopDesc::header_size(T_BYTE) * wordSize; + const int base_offset = ConstantPool::header_size() * wordSize; + const int tags_offset = Array::base_offset_in_bytes(); // get type __ cmpb(Address(rax, rbx, Address::times_1, tags_offset), JVM_CONSTANT_Double); @@ -1328,7 +1297,7 @@ case mul: { Label L_strict; Label L_join; - const Address access_flags (rcx, methodOopDesc::access_flags_offset()); + const Address access_flags (rcx, Method::access_flags_offset()); __ get_method(rcx); __ movl(rcx, access_flags); __ testl(rcx, JVM_ACC_STRICT); @@ -1347,7 +1316,7 @@ case div: { Label L_strict; Label L_join; - const Address access_flags (rcx, methodOopDesc::access_flags_offset()); + const Address access_flags (rcx, Method::access_flags_offset()); __ get_method(rcx); __ movl(rcx, access_flags); __ testl(rcx, JVM_ACC_STRICT); @@ -1576,8 +1545,8 @@ __ get_method(rcx); // ECX holds method __ profile_taken_branch(rax,rbx); // EAX holds updated MDP, EBX holds bumped taken count - const ByteSize be_offset = methodOopDesc::backedge_counter_offset() + InvocationCounter::counter_offset(); - const ByteSize inv_offset = methodOopDesc::invocation_counter_offset() + InvocationCounter::counter_offset(); + const ByteSize be_offset = Method::backedge_counter_offset() + InvocationCounter::counter_offset(); + const ByteSize inv_offset = Method::invocation_counter_offset() + InvocationCounter::counter_offset(); const int method_offset = frame::interpreter_frame_method_offset * wordSize; // Load up EDX with the branch displacement @@ -1595,8 +1564,8 @@ __ load_unsigned_byte(rbx, Address(rsi, rdx, Address::times_1, 0)); // compute return address as bci in rax, - __ lea(rax, at_bcp((is_wide ? 5 : 3) - in_bytes(constMethodOopDesc::codes_offset()))); - __ subptr(rax, Address(rcx, methodOopDesc::const_offset())); + __ lea(rax, at_bcp((is_wide ? 5 : 3) - in_bytes(ConstMethod::codes_offset()))); + __ subptr(rax, Address(rcx, Method::const_offset())); // Adjust the bcp in RSI by the displacement in EDX __ addptr(rsi, rdx); // Push return address @@ -1632,18 +1601,18 @@ int mask = ((1 << Tier0BackedgeNotifyFreqLog) - 1) << InvocationCounter::count_shift; if (ProfileInterpreter) { // Are we profiling? - __ movptr(rbx, Address(rcx, in_bytes(methodOopDesc::method_data_offset()))); + __ movptr(rbx, Address(rcx, in_bytes(Method::method_data_offset()))); __ testptr(rbx, rbx); __ jccb(Assembler::zero, no_mdo); // Increment the MDO backedge counter - const Address mdo_backedge_counter(rbx, in_bytes(methodDataOopDesc::backedge_counter_offset()) + + const Address mdo_backedge_counter(rbx, in_bytes(MethodData::backedge_counter_offset()) + in_bytes(InvocationCounter::counter_offset())); __ increment_mask_and_jump(mdo_backedge_counter, increment, mask, rax, false, Assembler::zero, &backedge_counter_overflow); __ jmp(dispatch); } __ bind(no_mdo); - // Increment backedge counter in methodOop + // Increment backedge counter in Method* __ increment_mask_and_jump(Address(rcx, be_offset), increment, mask, rax, false, Assembler::zero, &backedge_counter_overflow); } else { @@ -1672,7 +1641,7 @@ __ jcc(Assembler::below, dispatch); // When ProfileInterpreter is on, the backedge_count comes from the - // methodDataOop, which value does not get reset on the call to + // MethodData*, which value does not get reset on the call to // frequency_counter_overflow(). To avoid excessive calls to the overflow // routine while the method is being compiled, add a second test to make // sure the overflow function is called only once every overflow_frequency. @@ -1822,9 +1791,9 @@ __ movptr(rbx, iaddress(rbx)); // get return bci, compute return bcp __ profile_ret(rbx, rcx); __ get_method(rax); - __ movptr(rsi, Address(rax, methodOopDesc::const_offset())); + __ movptr(rsi, Address(rax, Method::const_offset())); __ lea(rsi, Address(rsi, rbx, Address::times_1, - constMethodOopDesc::codes_offset())); + ConstMethod::codes_offset())); __ dispatch_next(vtos); } @@ -1835,8 +1804,8 @@ __ movptr(rbx, iaddress(rbx)); // get return bci, compute return bcp __ profile_ret(rbx, rcx); __ get_method(rax); - __ movptr(rsi, Address(rax, methodOopDesc::const_offset())); - __ lea(rsi, Address(rsi, rbx, Address::times_1, constMethodOopDesc::codes_offset())); + __ movptr(rsi, Address(rax, Method::const_offset())); + __ lea(rsi, Address(rsi, rbx, Address::times_1, ConstMethod::codes_offset())); __ dispatch_next(vtos); } @@ -2080,31 +2049,17 @@ } void TemplateTable::resolve_cache_and_index(int byte_no, - Register result, Register Rcache, Register index, size_t index_size) { const Register temp = rbx; - assert_different_registers(result, Rcache, index, temp); + assert_different_registers(Rcache, index, temp); Label resolved; - if (byte_no == f12_oop) { - // We are resolved if the f1 field contains a non-null object (CallSite, MethodType, etc.) - // This kind of CP cache entry does not need to match bytecode_1 or bytecode_2, because - // there is a 1-1 relation between bytecode type and CP entry type. - // The caller will also load a methodOop from f2. - assert(result != noreg, ""); //else do cmpptr(Address(...), (int32_t) NULL_WORD) - __ get_cache_and_index_at_bcp(Rcache, index, 1, index_size); - __ movptr(result, Address(Rcache, index, Address::times_ptr, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::f1_offset())); - __ testptr(result, result); - __ jcc(Assembler::notEqual, resolved); - } else { assert(byte_no == f1_byte || byte_no == f2_byte, "byte_no out of range"); - assert(result == noreg, ""); //else change code for setting result __ get_cache_and_index_and_bytecode_at_bcp(Rcache, index, temp, byte_no, 1, index_size); __ cmpl(temp, (int) bytecode()); // have we resolved this bytecode? __ jcc(Assembler::equal, resolved); - } // resolve first time through address entry; @@ -2119,8 +2074,6 @@ case Bytecodes::_invokeinterface: entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invoke); break; case Bytecodes::_invokehandle : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invokehandle); break; case Bytecodes::_invokedynamic : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invokedynamic); break; - case Bytecodes::_fast_aldc : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); break; - case Bytecodes::_fast_aldc_w : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); break; default: fatal(err_msg("unexpected bytecode: %s", Bytecodes::name(bytecode()))); break; @@ -2129,8 +2082,6 @@ __ call_VM(noreg, entry, temp); // Update registers with resolved info __ get_cache_and_index_at_bcp(Rcache, index, 1, index_size); - if (result != noreg) - __ movptr(result, Address(Rcache, index, Address::times_ptr, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::f1_offset())); __ bind(resolved); } @@ -2144,7 +2095,7 @@ bool is_static = false) { assert_different_registers(cache, index, flags, off); - ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset(); + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); // Field offset __ movptr(off, Address(cache, index, Address::times_ptr, in_bytes(cp_base_offset + ConstantPoolCacheEntry::f2_offset()))); @@ -2156,6 +2107,8 @@ if (is_static) { __ movptr(obj, Address(cache, index, Address::times_ptr, in_bytes(cp_base_offset + ConstantPoolCacheEntry::f1_offset()))); + const int mirror_offset = in_bytes(Klass::java_mirror_offset()); + __ movptr(obj, Address(obj, mirror_offset)); } } @@ -2176,31 +2129,21 @@ // determine constant pool cache field offsets assert(is_invokevirtual == (byte_no == f2_byte), "is_invokevirtual flag redundant"); const int method_offset = in_bytes( - constantPoolCacheOopDesc::base_offset() + + ConstantPoolCache::base_offset() + ((byte_no == f2_byte) ? ConstantPoolCacheEntry::f2_offset() : ConstantPoolCacheEntry::f1_offset())); - const int flags_offset = in_bytes(constantPoolCacheOopDesc::base_offset() + + const int flags_offset = in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()); // access constant pool cache fields - const int index_offset = in_bytes(constantPoolCacheOopDesc::base_offset() + + const int index_offset = in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f2_offset()); - if (byte_no == f12_oop) { - // Resolved f1_oop (CallSite, MethodType, etc.) goes into 'itable_index'. - // Resolved f2_oop (methodOop invoker) will go into 'method' (at index_offset). - // See ConstantPoolCacheEntry::set_dynamic_call and set_method_handle. size_t index_size = (is_invokedynamic ? sizeof(u4) : sizeof(u2)); - resolve_cache_and_index(byte_no, itable_index, cache, index, index_size); - __ movptr(method, Address(cache, index, Address::times_ptr, index_offset)); - itable_index = noreg; // hack to disable load below - } else { - resolve_cache_and_index(byte_no, noreg, cache, index, sizeof(u2)); + resolve_cache_and_index(byte_no, cache, index, index_size); __ movptr(method, Address(cache, index, Address::times_ptr, method_offset)); - } + if (itable_index != noreg) { - // pick up itable index from f2 also: - assert(byte_no == f1_byte, "already picked up f1"); __ movptr(itable_index, Address(cache, index, Address::times_ptr, index_offset)); } __ movl(flags, Address(cache, index, Address::times_ptr, flags_offset)); @@ -2223,7 +2166,7 @@ __ jcc(Assembler::zero, L1); // cache entry pointer - __ addptr(cache, in_bytes(constantPoolCacheOopDesc::base_offset())); + __ addptr(cache, in_bytes(ConstantPoolCache::base_offset())); __ shll(index, LogBytesPerWord); __ addptr(cache, index); if (is_static) { @@ -2257,7 +2200,7 @@ const Register off = rbx; const Register flags = rax; - resolve_cache_and_index(byte_no, noreg, cache, index, sizeof(u2)); + resolve_cache_and_index(byte_no, cache, index, sizeof(u2)); jvmti_post_field_access(cache, index, is_static, false); load_field_cp_cache_entry(obj, cache, index, off, flags, is_static); @@ -2395,7 +2338,7 @@ // The function may destroy various registers, just not the cache and index registers. void TemplateTable::jvmti_post_field_mod(Register cache, Register index, bool is_static) { - ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset(); + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); if (JvmtiExport::can_post_field_modification()) { // Check to see if a field modification watch has been set before we take @@ -2466,7 +2409,7 @@ const Register off = rbx; const Register flags = rax; - resolve_cache_and_index(byte_no, noreg, cache, index, sizeof(u2)); + resolve_cache_and_index(byte_no, cache, index, sizeof(u2)); jvmti_post_field_mod(cache, index, is_static); load_field_cp_cache_entry(obj, cache, index, off, flags, is_static); @@ -2708,7 +2651,7 @@ void TemplateTable::fast_storefield(TosState state) { transition(state, vtos); - ByteSize base = constantPoolCacheOopDesc::base_offset(); + ByteSize base = ConstantPoolCache::base_offset(); jvmti_post_fast_field_mod(); @@ -2827,7 +2770,7 @@ __ movptr(rbx, Address(rcx, rbx, Address::times_ptr, - in_bytes(constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::f2_offset()))); + in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f2_offset()))); // rax,: object @@ -2864,7 +2807,7 @@ __ movptr(rbx, Address(rcx, rdx, Address::times_ptr, - in_bytes(constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::f2_offset()))); + in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f2_offset()))); // make sure exception is reported in correct bcp range (getfield is next instruction) __ increment(rsi); __ null_check(rax); @@ -2926,12 +2869,15 @@ // maybe push appendix to arguments (just before return address) if (is_invokedynamic || is_invokehandle) { Label L_no_push; - __ verify_oop(index); __ testl(flags, (1 << ConstantPoolCacheEntry::has_appendix_shift)); __ jccb(Assembler::zero, L_no_push); // Push the appendix as a trailing parameter. // This must be done before we get the receiver, // since the parameter_size includes it. + __ push(rbx); + __ mov(rbx, index); + __ load_resolved_reference_at_index(index, rbx); + __ pop(rbx); __ push(index); // push appendix (MethodType, CallSite, etc.) __ bind(L_no_push); } @@ -2992,11 +2938,10 @@ const Register method = index; // method must be rbx assert(method == rbx, - "methodOop must be rbx for interpreter calling convention"); + "Method* must be rbx for interpreter calling convention"); // do the call - the index is actually the method to call - // that is, f2 is a vtable index if !is_vfinal, else f2 is a methodOop - __ verify_oop(method); + // that is, f2 is a vtable index if !is_vfinal, else f2 is a Method* // It's final, need a null check here! __ null_check(recv); @@ -3011,12 +2956,11 @@ // get receiver klass __ null_check(recv, oopDesc::klass_offset_in_bytes()); __ load_klass(rax, recv); - __ verify_oop(rax); // profile this call __ profile_virtual_call(rax, rdi, rdx); - // get target methodOop & entry point + // get target Method* & entry point __ lookup_virtual_method(rax, index, method); __ jump_from_interpreted(method, rdx); } @@ -3041,12 +2985,11 @@ void TemplateTable::invokespecial(int byte_no) { transition(vtos, vtos); assert(byte_no == f1_byte, "use this argument"); - prepare_invoke(byte_no, rbx, noreg, // get f1 methodOop + prepare_invoke(byte_no, rbx, noreg, // get f1 Method* rcx); // get receiver also for null check __ verify_oop(rcx); __ null_check(rcx); // do the call - __ verify_oop(rbx); __ profile_call(rax); __ jump_from_interpreted(rbx, rax); } @@ -3055,9 +2998,8 @@ void TemplateTable::invokestatic(int byte_no) { transition(vtos, vtos); assert(byte_no == f1_byte, "use this argument"); - prepare_invoke(byte_no, rbx); // get f1 methodOop + prepare_invoke(byte_no, rbx); // get f1 Method* // do the call - __ verify_oop(rbx); __ profile_call(rax); __ jump_from_interpreted(rbx, rax); } @@ -3073,7 +3015,7 @@ void TemplateTable::invokeinterface(int byte_no) { transition(vtos, vtos); assert(byte_no == f1_byte, "use this argument"); - prepare_invoke(byte_no, rax, rbx, // get f1 klassOop, f2 itable index + prepare_invoke(byte_no, rax, rbx, // get f1 Klass*, f2 itable index rcx, rdx); // recv, flags // rax: interface klass (from f1) @@ -3097,7 +3039,6 @@ __ restore_locals(); // restore rdi __ null_check(rcx, oopDesc::klass_offset_in_bytes()); __ load_klass(rdx, rcx); - __ verify_oop(rdx); // profile this call __ profile_virtual_call(rdx, rsi, rdi); @@ -3110,7 +3051,7 @@ rbx, rsi, no_such_interface); - // rbx: methodOop to call + // rbx: Method* to call // rcx: receiver // Check for abstract method error // Note: This should be done more efficiently via a throw_abstract_method_error @@ -3121,7 +3062,7 @@ // do the call // rcx: receiver - // rbx,: methodOop + // rbx,: Method* __ jump_from_interpreted(rbx, rdx); __ should_not_reach_here(); @@ -3151,7 +3092,7 @@ void TemplateTable::invokehandle(int byte_no) { transition(vtos, vtos); - assert(byte_no == f12_oop, "use this argument"); + assert(byte_no == f1_byte, "use this argument"); const Register rbx_method = rbx; // (from f2) const Register rax_mtype = rax; // (from f1) const Register rcx_recv = rcx; @@ -3164,7 +3105,7 @@ } prepare_invoke(byte_no, - rbx_method, rax_mtype, // get f2 methodOop, f1 MethodType + rbx_method, rax_mtype, // get f2 Method*, f1 MethodType rcx_recv); __ verify_oop(rbx_method); __ verify_oop(rcx_recv); @@ -3181,7 +3122,7 @@ void TemplateTable::invokedynamic(int byte_no) { transition(vtos, vtos); - assert(byte_no == f12_oop, "use this argument"); + assert(byte_no == f1_byte, "use this argument"); if (!EnableInvokeDynamic) { // We should not encounter this bytecode if !EnableInvokeDynamic. @@ -3199,7 +3140,7 @@ prepare_invoke(byte_no, rbx_method, rax_callsite); - // rax: CallSite object (from f1) + // rax: CallSite object (from cpool->resolved_references[]) // rbx: MH.linkToCallSite method (from f2) // Note: rax_callsite is already pushed by prepare_invoke @@ -3229,22 +3170,22 @@ __ get_cpool_and_tags(rcx, rax); // Make sure the class we're about to instantiate has been resolved. - // This is done before loading instanceKlass to be consistent with the order - // how Constant Pool is updated (see constantPoolOopDesc::klass_at_put) - const int tags_offset = typeArrayOopDesc::header_size(T_BYTE) * wordSize; + // This is done before loading InstanceKlass to be consistent with the order + // how Constant Pool is updated (see ConstantPool::klass_at_put) + const int tags_offset = Array::base_offset_in_bytes(); __ cmpb(Address(rax, rdx, Address::times_1, tags_offset), JVM_CONSTANT_Class); __ jcc(Assembler::notEqual, slow_case_no_pop); - // get instanceKlass - __ movptr(rcx, Address(rcx, rdx, Address::times_ptr, sizeof(constantPoolOopDesc))); + // get InstanceKlass + __ movptr(rcx, Address(rcx, rdx, Address::times_ptr, sizeof(ConstantPool))); __ push(rcx); // save the contexts of klass for initializing the header // make sure klass is initialized & doesn't have finalizer // make sure klass is fully initialized - __ cmpb(Address(rcx, instanceKlass::init_state_offset()), instanceKlass::fully_initialized); + __ cmpb(Address(rcx, InstanceKlass::init_state_offset()), InstanceKlass::fully_initialized); __ jcc(Assembler::notEqual, slow_case); - // get instance_size in instanceKlass (scaled to a count of bytes) + // get instance_size in InstanceKlass (scaled to a count of bytes) __ movl(rdx, Address(rcx, Klass::layout_helper_offset())); // test to see if it has a finalizer or is malformed in some way __ testl(rdx, Klass::_lh_instance_slow_path_bit); @@ -3414,18 +3355,23 @@ __ get_cpool_and_tags(rcx, rdx); // ECX=cpool, EDX=tags array __ get_unsigned_2_byte_index_at_bcp(rbx, 1); // EBX=index // See if bytecode has already been quicked - __ cmpb(Address(rdx, rbx, Address::times_1, typeArrayOopDesc::header_size(T_BYTE) * wordSize), JVM_CONSTANT_Class); + __ cmpb(Address(rdx, rbx, Address::times_1, Array::base_offset_in_bytes()), JVM_CONSTANT_Class); __ jcc(Assembler::equal, quicked); __ push(atos); - call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc) ); + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc) ); + // vm_result_2 has metadata result + // borrow rdi from locals + __ get_thread(rdi); + __ get_vm_result_2(rax, rdi); + __ restore_locals(); __ pop_ptr(rdx); __ jmpb(resolved); // Get superklass in EAX and subklass in EBX __ bind(quicked); __ mov(rdx, rax); // Save object in EDX; EAX needed for subtype check - __ movptr(rax, Address(rcx, rbx, Address::times_ptr, sizeof(constantPoolOopDesc))); + __ movptr(rax, Address(rcx, rbx, Address::times_ptr, sizeof(ConstantPool))); __ bind(resolved); __ load_klass(rbx, rdx); @@ -3465,11 +3411,16 @@ __ get_cpool_and_tags(rcx, rdx); // ECX=cpool, EDX=tags array __ get_unsigned_2_byte_index_at_bcp(rbx, 1); // EBX=index // See if bytecode has already been quicked - __ cmpb(Address(rdx, rbx, Address::times_1, typeArrayOopDesc::header_size(T_BYTE) * wordSize), JVM_CONSTANT_Class); + __ cmpb(Address(rdx, rbx, Address::times_1, Array::base_offset_in_bytes()), JVM_CONSTANT_Class); __ jcc(Assembler::equal, quicked); __ push(atos); - call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc) ); + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc) ); + // vm_result_2 has metadata result + // borrow rdi from locals + __ get_thread(rdi); + __ get_vm_result_2(rax, rdi); + __ restore_locals(); __ pop_ptr(rdx); __ load_klass(rdx, rdx); __ jmp(resolved); @@ -3477,7 +3428,7 @@ // Get superklass in EAX and subklass in EDX __ bind(quicked); __ load_klass(rdx, rax); - __ movptr(rax, Address(rcx, rbx, Address::times_ptr, sizeof(constantPoolOopDesc))); + __ movptr(rax, Address(rcx, rbx, Address::times_ptr, sizeof(ConstantPool))); __ bind(resolved); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/templateTable_x86_64.cpp --- a/src/cpu/x86/vm/templateTable_x86_64.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/templateTable_x86_64.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ #include "interpreter/interpreterRuntime.hpp" #include "interpreter/templateTable.hpp" #include "memory/universe.inline.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" @@ -367,16 +367,12 @@ } __ get_cpool_and_tags(rcx, rax); - const int base_offset = constantPoolOopDesc::header_size() * wordSize; - const int tags_offset = typeArrayOopDesc::header_size(T_BYTE) * wordSize; + const int base_offset = ConstantPool::header_size() * wordSize; + const int tags_offset = Array::base_offset_in_bytes(); // get type __ movzbl(rdx, Address(rax, rbx, Address::times_1, tags_offset)); - // unresolved string - get the resolved string - __ cmpl(rdx, JVM_CONSTANT_UnresolvedString); - __ jccb(Assembler::equal, call_ldc); - // unresolved class - get the resolved class __ cmpl(rdx, JVM_CONSTANT_UnresolvedClass); __ jccb(Assembler::equal, call_ldc); @@ -411,76 +407,46 @@ Label L; __ cmpl(rdx, JVM_CONSTANT_Integer); __ jcc(Assembler::equal, L); - __ cmpl(rdx, JVM_CONSTANT_String); - __ jcc(Assembler::equal, L); - __ cmpl(rdx, JVM_CONSTANT_Object); - __ jcc(Assembler::equal, L); + // String and Object are rewritten to fast_aldc __ stop("unexpected tag type in ldc"); __ bind(L); } #endif - // atos and itos - Label isOop; - __ cmpl(rdx, JVM_CONSTANT_Integer); - __ jcc(Assembler::notEqual, isOop); + // itos JVM_CONSTANT_Integer only __ movl(rax, Address(rcx, rbx, Address::times_8, base_offset)); __ push_i(rax); - __ jmp(Done); - - __ bind(isOop); - __ movptr(rax, Address(rcx, rbx, Address::times_8, base_offset)); - __ push_ptr(rax); - - if (VerifyOops) { - __ verify_oop(rax); - } - __ bind(Done); } // Fast path for caching oop constants. -// %%% We should use this to handle Class and String constants also. -// %%% It will simplify the ldc/primitive path considerably. void TemplateTable::fast_aldc(bool wide) { transition(vtos, atos); - if (!EnableInvokeDynamic) { - // We should not encounter this bytecode if !EnableInvokeDynamic. - // The verifier will stop it. However, if we get past the verifier, - // this will stop the thread in a reasonable way, without crashing the JVM. - __ call_VM(noreg, CAST_FROM_FN_PTR(address, - InterpreterRuntime::throw_IncompatibleClassChangeError)); - // the call_VM checks for exception, so we should never return here. - __ should_not_reach_here(); - return; - } - - const Register cache = rcx; - const Register index = rdx; - - resolve_cache_and_index(f12_oop, rax, cache, index, wide ? sizeof(u2) : sizeof(u1)); + Register result = rax; + Register tmp = rdx; + int index_size = wide ? sizeof(u2) : sizeof(u1); + + Label resolved; + + // We are resolved if the resolved reference cache entry contains a + // non-null object (String, MethodType, etc.) + assert_different_registers(result, tmp); + __ get_cache_index_at_bcp(tmp, 1, index_size); + __ load_resolved_reference_at_index(result, tmp); + __ testl(result, result); + __ jcc(Assembler::notZero, resolved); + + address entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); + + // first time invocation - must resolve first + __ movl(tmp, (int)bytecode()); + __ call_VM(result, entry, tmp); + + __ bind(resolved); + if (VerifyOops) { - __ verify_oop(rax); + __ verify_oop(result); } - - Label L_done, L_throw_exception; - const Register con_klass_temp = rcx; // same as cache - const Register array_klass_temp = rdx; // same as index - __ load_klass(con_klass_temp, rax); - __ lea(array_klass_temp, ExternalAddress((address)Universe::systemObjArrayKlassObj_addr())); - __ cmpptr(con_klass_temp, Address(array_klass_temp, 0)); - __ jcc(Assembler::notEqual, L_done); - __ cmpl(Address(rax, arrayOopDesc::length_offset_in_bytes()), 0); - __ jcc(Assembler::notEqual, L_throw_exception); - __ xorptr(rax, rax); - __ jmp(L_done); - - // Load the exception from the system-array which wraps it: - __ bind(L_throw_exception); - __ load_heap_oop(rax, Address(rax, arrayOopDesc::base_offset_in_bytes(T_OBJECT))); - __ jump(ExternalAddress(Interpreter::throw_exception_entry())); - - __ bind(L_done); } void TemplateTable::ldc2_w() { @@ -489,8 +455,8 @@ __ get_unsigned_2_byte_index_at_bcp(rbx, 1); __ get_cpool_and_tags(rcx, rax); - const int base_offset = constantPoolOopDesc::header_size() * wordSize; - const int tags_offset = typeArrayOopDesc::header_size(T_BYTE) * wordSize; + const int base_offset = ConstantPool::header_size() * wordSize; + const int tags_offset = Array::base_offset_in_bytes(); // get type __ cmpb(Address(rax, rbx, Address::times_1, tags_offset), @@ -1596,9 +1562,9 @@ __ profile_taken_branch(rax, rbx); // rax holds updated MDP, rbx // holds bumped taken count - const ByteSize be_offset = methodOopDesc::backedge_counter_offset() + + const ByteSize be_offset = Method::backedge_counter_offset() + InvocationCounter::counter_offset(); - const ByteSize inv_offset = methodOopDesc::invocation_counter_offset() + + const ByteSize inv_offset = Method::invocation_counter_offset() + InvocationCounter::counter_offset(); const int method_offset = frame::interpreter_frame_method_offset * wordSize; @@ -1620,8 +1586,8 @@ // compute return address as bci in rax __ lea(rax, at_bcp((is_wide ? 5 : 3) - - in_bytes(constMethodOopDesc::codes_offset()))); - __ subptr(rax, Address(rcx, methodOopDesc::const_offset())); + in_bytes(ConstMethod::codes_offset()))); + __ subptr(rax, Address(rcx, Method::const_offset())); // Adjust the bcp in r13 by the displacement in rdx __ addptr(r13, rdx); // jsr returns atos that is not an oop @@ -1656,18 +1622,18 @@ int mask = ((1 << Tier0BackedgeNotifyFreqLog) - 1) << InvocationCounter::count_shift; if (ProfileInterpreter) { // Are we profiling? - __ movptr(rbx, Address(rcx, in_bytes(methodOopDesc::method_data_offset()))); + __ movptr(rbx, Address(rcx, in_bytes(Method::method_data_offset()))); __ testptr(rbx, rbx); __ jccb(Assembler::zero, no_mdo); // Increment the MDO backedge counter - const Address mdo_backedge_counter(rbx, in_bytes(methodDataOopDesc::backedge_counter_offset()) + + const Address mdo_backedge_counter(rbx, in_bytes(MethodData::backedge_counter_offset()) + in_bytes(InvocationCounter::counter_offset())); __ increment_mask_and_jump(mdo_backedge_counter, increment, mask, rax, false, Assembler::zero, &backedge_counter_overflow); __ jmp(dispatch); } __ bind(no_mdo); - // Increment backedge counter in methodOop + // Increment backedge counter in Method* __ increment_mask_and_jump(Address(rcx, be_offset), increment, mask, rax, false, Assembler::zero, &backedge_counter_overflow); } else { @@ -1696,7 +1662,7 @@ __ jcc(Assembler::below, dispatch); // When ProfileInterpreter is on, the backedge_count comes - // from the methodDataOop, which value does not get reset on + // from the MethodData*, which value does not get reset on // the call to frequency_counter_overflow(). To avoid // excessive calls to the overflow routine while the method is // being compiled, add a second test to make sure the overflow @@ -1854,9 +1820,9 @@ __ movslq(rbx, iaddress(rbx)); // get return bci, compute return bcp __ profile_ret(rbx, rcx); __ get_method(rax); - __ movptr(r13, Address(rax, methodOopDesc::const_offset())); + __ movptr(r13, Address(rax, Method::const_offset())); __ lea(r13, Address(r13, rbx, Address::times_1, - constMethodOopDesc::codes_offset())); + ConstMethod::codes_offset())); __ dispatch_next(vtos); } @@ -1866,8 +1832,8 @@ __ movptr(rbx, aaddress(rbx)); // get return bci, compute return bcp __ profile_ret(rbx, rcx); __ get_method(rax); - __ movptr(r13, Address(rax, methodOopDesc::const_offset())); - __ lea(r13, Address(r13, rbx, Address::times_1, constMethodOopDesc::codes_offset())); + __ movptr(r13, Address(rax, Method::const_offset())); + __ lea(r13, Address(r13, rbx, Address::times_1, ConstMethod::codes_offset())); __ dispatch_next(vtos); } @@ -2117,31 +2083,17 @@ } void TemplateTable::resolve_cache_and_index(int byte_no, - Register result, Register Rcache, Register index, size_t index_size) { const Register temp = rbx; - assert_different_registers(result, Rcache, index, temp); + assert_different_registers(Rcache, index, temp); Label resolved; - if (byte_no == f12_oop) { - // We are resolved if the f1 field contains a non-null object (CallSite, MethodType, etc.) - // This kind of CP cache entry does not need to match bytecode_1 or bytecode_2, because - // there is a 1-1 relation between bytecode type and CP entry type. - // The caller will also load a methodOop from f2. - assert(result != noreg, ""); //else do cmpptr(Address(...), (int32_t) NULL_WORD) - __ get_cache_and_index_at_bcp(Rcache, index, 1, index_size); - __ movptr(result, Address(Rcache, index, Address::times_ptr, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::f1_offset())); - __ testptr(result, result); - __ jcc(Assembler::notEqual, resolved); - } else { assert(byte_no == f1_byte || byte_no == f2_byte, "byte_no out of range"); - assert(result == noreg, ""); //else change code for setting result __ get_cache_and_index_and_bytecode_at_bcp(Rcache, index, temp, byte_no, 1, index_size); __ cmpl(temp, (int) bytecode()); // have we resolved this bytecode? __ jcc(Assembler::equal, resolved); - } // resolve first time through address entry; @@ -2164,12 +2116,6 @@ case Bytecodes::_invokedynamic: entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invokedynamic); break; - case Bytecodes::_fast_aldc: - entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); - break; - case Bytecodes::_fast_aldc_w: - entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); - break; default: fatal(err_msg("unexpected bytecode: %s", Bytecodes::name(bytecode()))); break; @@ -2179,8 +2125,6 @@ // Update registers with resolved info __ get_cache_and_index_at_bcp(Rcache, index, 1, index_size); - if (result != noreg) - __ movptr(result, Address(Rcache, index, Address::times_ptr, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::f1_offset())); __ bind(resolved); } @@ -2193,7 +2137,7 @@ bool is_static = false) { assert_different_registers(cache, index, flags, off); - ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset(); + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); // Field offset __ movptr(off, Address(cache, index, Address::times_ptr, in_bytes(cp_base_offset + @@ -2208,6 +2152,8 @@ __ movptr(obj, Address(cache, index, Address::times_ptr, in_bytes(cp_base_offset + ConstantPoolCacheEntry::f1_offset()))); + const int mirror_offset = in_bytes(Klass::java_mirror_offset()); + __ movptr(obj, Address(obj, mirror_offset)); } } @@ -2228,38 +2174,27 @@ // determine constant pool cache field offsets assert(is_invokevirtual == (byte_no == f2_byte), "is_invokevirtual flag redundant"); const int method_offset = in_bytes( - constantPoolCacheOopDesc::base_offset() + + ConstantPoolCache::base_offset() + ((byte_no == f2_byte) ? ConstantPoolCacheEntry::f2_offset() : ConstantPoolCacheEntry::f1_offset())); - const int flags_offset = in_bytes(constantPoolCacheOopDesc::base_offset() + + const int flags_offset = in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()); // access constant pool cache fields - const int index_offset = in_bytes(constantPoolCacheOopDesc::base_offset() + + const int index_offset = in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f2_offset()); - if (byte_no == f12_oop) { - // Resolved f1_oop (CallSite, MethodType, etc.) goes into 'itable_index'. - // Resolved f2_oop (methodOop invoker) will go into 'method' (at index_offset). - // See ConstantPoolCacheEntry::set_dynamic_call and set_method_handle. size_t index_size = (is_invokedynamic ? sizeof(u4) : sizeof(u2)); - resolve_cache_and_index(byte_no, itable_index, cache, index, index_size); - __ movptr(method, Address(cache, index, Address::times_ptr, index_offset)); - itable_index = noreg; // hack to disable load below - } else { - resolve_cache_and_index(byte_no, noreg, cache, index, sizeof(u2)); + resolve_cache_and_index(byte_no, cache, index, index_size); __ movptr(method, Address(cache, index, Address::times_ptr, method_offset)); - } + if (itable_index != noreg) { - // pick up itable index from f2 also: - assert(byte_no == f1_byte, "already picked up f1"); + // pick up itable or appendix index from f2 also: __ movptr(itable_index, Address(cache, index, Address::times_ptr, index_offset)); } __ movl(flags, Address(cache, index, Address::times_ptr, flags_offset)); } - -// The registers cache and index expected to be set before call. // Correct values of the cache and index registers are preserved. void TemplateTable::jvmti_post_field_access(Register cache, Register index, bool is_static, bool has_tos) { @@ -2278,7 +2213,7 @@ __ get_cache_and_index_at_bcp(c_rarg2, c_rarg3, 1); // cache entry pointer - __ addptr(c_rarg2, in_bytes(constantPoolCacheOopDesc::base_offset())); + __ addptr(c_rarg2, in_bytes(ConstantPoolCache::base_offset())); __ shll(c_rarg3, LogBytesPerWord); __ addptr(c_rarg2, c_rarg3); if (is_static) { @@ -2314,7 +2249,7 @@ const Register flags = rax; const Register bc = c_rarg3; // uses same reg as obj, so don't mix them - resolve_cache_and_index(byte_no, noreg, cache, index, sizeof(u2)); + resolve_cache_and_index(byte_no, cache, index, sizeof(u2)); jvmti_post_field_access(cache, index, is_static, false); load_field_cp_cache_entry(obj, cache, index, off, flags, is_static); @@ -2453,7 +2388,7 @@ void TemplateTable::jvmti_post_field_mod(Register cache, Register index, bool is_static) { transition(vtos, vtos); - ByteSize cp_base_offset = constantPoolCacheOopDesc::base_offset(); + ByteSize cp_base_offset = ConstantPoolCache::base_offset(); if (JvmtiExport::can_post_field_modification()) { // Check to see if a field modification watch has been set before @@ -2517,7 +2452,7 @@ const Register flags = rax; const Register bc = c_rarg3; - resolve_cache_and_index(byte_no, noreg, cache, index, sizeof(u2)); + resolve_cache_and_index(byte_no, cache, index, sizeof(u2)); jvmti_post_field_mod(cache, index, is_static); load_field_cp_cache_entry(obj, cache, index, off, flags, is_static); @@ -2741,7 +2676,7 @@ void TemplateTable::fast_storefield(TosState state) { transition(state, vtos); - ByteSize base = constantPoolCacheOopDesc::base_offset(); + ByteSize base = ConstantPoolCache::base_offset(); jvmti_post_fast_field_mod(); @@ -2841,13 +2776,13 @@ // [jk] not needed currently // if (os::is_MP()) { // __ movl(rdx, Address(rcx, rbx, Address::times_8, - // in_bytes(constantPoolCacheOopDesc::base_offset() + + // in_bytes(ConstantPoolCache::base_offset() + // ConstantPoolCacheEntry::flags_offset()))); // __ shrl(rdx, ConstantPoolCacheEntry::is_volatile_shift); // __ andl(rdx, 0x1); // } __ movptr(rbx, Address(rcx, rbx, Address::times_8, - in_bytes(constantPoolCacheOopDesc::base_offset() + + in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f2_offset()))); // rax: object @@ -2904,7 +2839,7 @@ __ get_cache_and_index_at_bcp(rcx, rdx, 2); __ movptr(rbx, Address(rcx, rdx, Address::times_8, - in_bytes(constantPoolCacheOopDesc::base_offset() + + in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::f2_offset()))); // make sure exception is reported in correct bcp range (getfield is // next instruction) @@ -2929,7 +2864,7 @@ // if (os::is_MP()) { // Label notVolatile; // __ movl(rdx, Address(rcx, rdx, Address::times_8, - // in_bytes(constantPoolCacheOopDesc::base_offset() + + // in_bytes(ConstantPoolCache::base_offset() + // ConstantPoolCacheEntry::flags_offset()))); // __ shrl(rdx, ConstantPoolCacheEntry::is_volatile_shift); // __ testl(rdx, 0x1); @@ -2984,12 +2919,15 @@ // maybe push appendix to arguments (just before return address) if (is_invokedynamic || is_invokehandle) { Label L_no_push; - __ verify_oop(index); __ testl(flags, (1 << ConstantPoolCacheEntry::has_appendix_shift)); - __ jccb(Assembler::zero, L_no_push); + __ jcc(Assembler::zero, L_no_push); // Push the appendix as a trailing parameter. // This must be done before we get the receiver, // since the parameter_size includes it. + __ push(rbx); + __ mov(rbx, index); + __ load_resolved_reference_at_index(index, rbx); + __ pop(rbx); __ push(index); // push appendix (MethodType, CallSite, etc.) __ bind(L_no_push); } @@ -3052,11 +2990,10 @@ const Register method = index; // method must be rbx assert(method == rbx, - "methodOop must be rbx for interpreter calling convention"); + "Method* must be rbx for interpreter calling convention"); // do the call - the index is actually the method to call - // that is, f2 is a vtable index if !is_vfinal, else f2 is a methodOop - __ verify_oop(method); + // that is, f2 is a vtable index if !is_vfinal, else f2 is a Method* // It's final, need a null check here! __ null_check(recv); @@ -3071,12 +3008,11 @@ // get receiver klass __ null_check(recv, oopDesc::klass_offset_in_bytes()); __ load_klass(rax, recv); - __ verify_oop(rax); // profile this call __ profile_virtual_call(rax, r14, rdx); - // get target methodOop & entry point + // get target Method* & entry point __ lookup_virtual_method(rax, index, method); __ jump_from_interpreted(method, rdx); } @@ -3101,12 +3037,11 @@ void TemplateTable::invokespecial(int byte_no) { transition(vtos, vtos); assert(byte_no == f1_byte, "use this argument"); - prepare_invoke(byte_no, rbx, noreg, // get f1 methodOop + prepare_invoke(byte_no, rbx, noreg, // get f1 Method* rcx); // get receiver also for null check __ verify_oop(rcx); __ null_check(rcx); // do the call - __ verify_oop(rbx); __ profile_call(rax); __ jump_from_interpreted(rbx, rax); } @@ -3115,9 +3050,8 @@ void TemplateTable::invokestatic(int byte_no) { transition(vtos, vtos); assert(byte_no == f1_byte, "use this argument"); - prepare_invoke(byte_no, rbx); // get f1 methodOop + prepare_invoke(byte_no, rbx); // get f1 Method* // do the call - __ verify_oop(rbx); __ profile_call(rax); __ jump_from_interpreted(rbx, rax); } @@ -3131,7 +3065,7 @@ void TemplateTable::invokeinterface(int byte_no) { transition(vtos, vtos); assert(byte_no == f1_byte, "use this argument"); - prepare_invoke(byte_no, rax, rbx, // get f1 klassOop, f2 itable index + prepare_invoke(byte_no, rax, rbx, // get f1 Klass*, f2 itable index rcx, rdx); // recv, flags // rax: interface klass (from f1) @@ -3155,7 +3089,6 @@ __ restore_locals(); // restore r14 __ null_check(rcx, oopDesc::klass_offset_in_bytes()); __ load_klass(rdx, rcx); - __ verify_oop(rdx); // profile this call __ profile_virtual_call(rdx, r13, r14); @@ -3168,7 +3101,7 @@ rbx, r13, no_such_interface); - // rbx: methodOop to call + // rbx: Method* to call // rcx: receiver // Check for abstract method error // Note: This should be done more efficiently via a throw_abstract_method_error @@ -3179,7 +3112,7 @@ // do the call // rcx: receiver - // rbx,: methodOop + // rbx,: Method* __ jump_from_interpreted(rbx, rdx); __ should_not_reach_here(); @@ -3210,7 +3143,7 @@ void TemplateTable::invokehandle(int byte_no) { transition(vtos, vtos); - assert(byte_no == f12_oop, "use this argument"); + assert(byte_no == f1_byte, "use this argument"); const Register rbx_method = rbx; // f2 const Register rax_mtype = rax; // f1 const Register rcx_recv = rcx; @@ -3223,7 +3156,7 @@ } prepare_invoke(byte_no, - rbx_method, rax_mtype, // get f2 methodOop, f1 MethodType + rbx_method, rax_mtype, // get f2 Method*, f1 MethodType rcx_recv); __ verify_oop(rbx_method); __ verify_oop(rcx_recv); @@ -3240,7 +3173,7 @@ void TemplateTable::invokedynamic(int byte_no) { transition(vtos, vtos); - assert(byte_no == f12_oop, "use this argument"); + assert(byte_no == f1_byte, "use this argument"); if (!EnableInvokeDynamic) { // We should not encounter this bytecode if !EnableInvokeDynamic. @@ -3258,7 +3191,7 @@ prepare_invoke(byte_no, rbx_method, rax_callsite); - // rax: CallSite object (from f1) + // rax: CallSite object (from cpool->resolved_references[]) // rbx: MH.linkToCallSite method (from f2) // Note: rax_callsite is already pushed by prepare_invoke @@ -3287,25 +3220,25 @@ __ get_cpool_and_tags(rsi, rax); // Make sure the class we're about to instantiate has been resolved. - // This is done before loading instanceKlass to be consistent with the order - // how Constant Pool is updated (see constantPoolOopDesc::klass_at_put) - const int tags_offset = typeArrayOopDesc::header_size(T_BYTE) * wordSize; + // This is done before loading InstanceKlass to be consistent with the order + // how Constant Pool is updated (see ConstantPool::klass_at_put) + const int tags_offset = Array::base_offset_in_bytes(); __ cmpb(Address(rax, rdx, Address::times_1, tags_offset), JVM_CONSTANT_Class); __ jcc(Assembler::notEqual, slow_case); - // get instanceKlass + // get InstanceKlass __ movptr(rsi, Address(rsi, rdx, - Address::times_8, sizeof(constantPoolOopDesc))); + Address::times_8, sizeof(ConstantPool))); // make sure klass is initialized & doesn't have finalizer // make sure klass is fully initialized __ cmpb(Address(rsi, - instanceKlass::init_state_offset()), - instanceKlass::fully_initialized); + InstanceKlass::init_state_offset()), + InstanceKlass::fully_initialized); __ jcc(Assembler::notEqual, slow_case); - // get instance_size in instanceKlass (scaled to a count of bytes) + // get instance_size in InstanceKlass (scaled to a count of bytes) __ movl(rdx, Address(rsi, Klass::layout_helper_offset())); @@ -3470,11 +3403,13 @@ // See if bytecode has already been quicked __ cmpb(Address(rdx, rbx, Address::times_1, - typeArrayOopDesc::header_size(T_BYTE) * wordSize), + Array::base_offset_in_bytes()), JVM_CONSTANT_Class); __ jcc(Assembler::equal, quicked); __ push(atos); // save receiver for result, and for GC - call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc)); + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc)); + // vm_result_2 has metadata result + __ get_vm_result_2(rax, r15_thread); __ pop_ptr(rdx); // restore receiver __ jmpb(resolved); @@ -3482,7 +3417,7 @@ __ bind(quicked); __ mov(rdx, rax); // Save object in rdx; rax needed for subtype check __ movptr(rax, Address(rcx, rbx, - Address::times_8, sizeof(constantPoolOopDesc))); + Address::times_8, sizeof(ConstantPool))); __ bind(resolved); __ load_klass(rbx, rdx); @@ -3523,12 +3458,14 @@ // See if bytecode has already been quicked __ cmpb(Address(rdx, rbx, Address::times_1, - typeArrayOopDesc::header_size(T_BYTE) * wordSize), + Array::base_offset_in_bytes()), JVM_CONSTANT_Class); __ jcc(Assembler::equal, quicked); __ push(atos); // save receiver for result, and for GC - call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc)); + call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::quicken_io_cc)); + // vm_result_2 has metadata result + __ get_vm_result_2(rax, r15_thread); __ pop_ptr(rdx); // restore receiver __ verify_oop(rdx); __ load_klass(rdx, rdx); @@ -3538,7 +3475,7 @@ __ bind(quicked); __ load_klass(rdx, rax); __ movptr(rax, Address(rcx, rbx, - Address::times_8, sizeof(constantPoolOopDesc))); + Address::times_8, sizeof(ConstantPool))); __ bind(resolved); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/vtableStubs_x86_32.cpp --- a/src/cpu/x86/vm/vtableStubs_x86_32.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/vtableStubs_x86_32.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -81,7 +81,7 @@ if (DebugVtables) { Label L; // check offset vs vtable length - __ cmpl(Address(rax, instanceKlass::vtable_length_offset()*wordSize), vtable_index*vtableEntry::size()); + __ cmpl(Address(rax, InstanceKlass::vtable_length_offset()*wordSize), vtable_index*vtableEntry::size()); __ jcc(Assembler::greater, L); __ movl(rbx, vtable_index); __ call_VM(noreg, CAST_FROM_FN_PTR(address, bad_compiled_vtable_index), rcx, rbx); @@ -91,24 +91,24 @@ const Register method = rbx; - // load methodOop and target address + // load Method* and target address __ lookup_virtual_method(rax, vtable_index, method); if (DebugVtables) { Label L; __ cmpptr(method, (int32_t)NULL_WORD); __ jcc(Assembler::equal, L); - __ cmpptr(Address(method, methodOopDesc::from_compiled_offset()), (int32_t)NULL_WORD); + __ cmpptr(Address(method, Method::from_compiled_offset()), (int32_t)NULL_WORD); __ jcc(Assembler::notZero, L); __ stop("Vtable entry is NULL"); __ bind(L); } // rax,: receiver klass - // method (rbx): methodOop + // method (rbx): Method* // rcx: receiver address ame_addr = __ pc(); - __ jmp( Address(method, methodOopDesc::from_compiled_offset())); + __ jmp( Address(method, Method::from_compiled_offset())); masm->flush(); @@ -159,14 +159,14 @@ const Register method = rbx; Label throw_icce; - // Get methodOop and entrypoint for compiler + // Get Method* and entrypoint for compiler __ lookup_interface_method(// inputs: rec. class, interface, itable index rsi, rax, itable_index, // outputs: method, scan temp. reg method, rdi, throw_icce); - // method (rbx): methodOop + // method (rbx): Method* // rcx: receiver #ifdef ASSERT @@ -174,15 +174,15 @@ Label L1; __ cmpptr(method, (int32_t)NULL_WORD); __ jcc(Assembler::equal, L1); - __ cmpptr(Address(method, methodOopDesc::from_compiled_offset()), (int32_t)NULL_WORD); + __ cmpptr(Address(method, Method::from_compiled_offset()), (int32_t)NULL_WORD); __ jcc(Assembler::notZero, L1); - __ stop("methodOop is null"); + __ stop("Method* is null"); __ bind(L1); } #endif // ASSERT address ame_addr = __ pc(); - __ jmp(Address(method, methodOopDesc::from_compiled_offset())); + __ jmp(Address(method, Method::from_compiled_offset())); __ bind(throw_icce); __ jump(RuntimeAddress(StubRoutines::throw_IncompatibleClassChangeError_entry())); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/vtableStubs_x86_64.cpp --- a/src/cpu/x86/vm/vtableStubs_x86_64.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/vtableStubs_x86_64.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -73,7 +73,7 @@ if (DebugVtables) { Label L; // check offset vs vtable length - __ cmpl(Address(rax, instanceKlass::vtable_length_offset() * wordSize), + __ cmpl(Address(rax, InstanceKlass::vtable_length_offset() * wordSize), vtable_index * vtableEntry::size()); __ jcc(Assembler::greater, L); __ movl(rbx, vtable_index); @@ -83,7 +83,7 @@ } #endif // PRODUCT - // load methodOop and target address + // load Method* and target address const Register method = rbx; __ lookup_virtual_method(rax, vtable_index, method); @@ -92,16 +92,16 @@ Label L; __ cmpptr(method, (int32_t)NULL_WORD); __ jcc(Assembler::equal, L); - __ cmpptr(Address(method, methodOopDesc::from_compiled_offset()), (int32_t)NULL_WORD); + __ cmpptr(Address(method, Method::from_compiled_offset()), (int32_t)NULL_WORD); __ jcc(Assembler::notZero, L); __ stop("Vtable entry is NULL"); __ bind(L); } // rax: receiver klass - // rbx: methodOop + // rbx: Method* // rcx: receiver address ame_addr = __ pc(); - __ jmp( Address(rbx, methodOopDesc::from_compiled_offset())); + __ jmp( Address(rbx, Method::from_compiled_offset())); __ flush(); @@ -161,14 +161,14 @@ const Register method = rbx; Label throw_icce; - // Get methodOop and entrypoint for compiler + // Get Method* and entrypoint for compiler __ lookup_interface_method(// inputs: rec. class, interface, itable index r10, rax, itable_index, // outputs: method, scan temp. reg method, r11, throw_icce); - // method (rbx): methodOop + // method (rbx): Method* // j_rarg0: receiver #ifdef ASSERT @@ -176,17 +176,17 @@ Label L2; __ cmpptr(method, (int32_t)NULL_WORD); __ jcc(Assembler::equal, L2); - __ cmpptr(Address(method, methodOopDesc::from_compiled_offset()), (int32_t)NULL_WORD); + __ cmpptr(Address(method, Method::from_compiled_offset()), (int32_t)NULL_WORD); __ jcc(Assembler::notZero, L2); __ stop("compiler entrypoint is null"); __ bind(L2); } #endif // ASSERT - // rbx: methodOop + // rbx: Method* // j_rarg0: receiver address ame_addr = __ pc(); - __ jmp(Address(method, methodOopDesc::from_compiled_offset())); + __ jmp(Address(method, Method::from_compiled_offset())); __ bind(throw_icce); __ jump(RuntimeAddress(StubRoutines::throw_IncompatibleClassChangeError_entry())); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/x86.ad --- a/src/cpu/x86/vm/x86.ad Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/x86.ad Sat Sep 01 13:25:18 2012 -0400 @@ -488,17 +488,6 @@ static address double_signflip() { return (address)double_signflip_pool; } #endif -// Map Types to machine register types -const int Matcher::base2reg[Type::lastype] = { - Node::NotAMachineReg,0,0, Op_RegI, Op_RegL, 0, Op_RegN, - Node::NotAMachineReg, Node::NotAMachineReg, /* tuple, array */ - Op_VecS, Op_VecD, Op_VecX, Op_VecY, /* Vectors */ - Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, /* the pointers */ - 0, 0/*abio*/, - Op_RegP /* Return address */, 0, /* the memories */ - Op_RegF, Op_RegF, Op_RegF, Op_RegD, Op_RegD, Op_RegD, - 0 /*bottom*/ -}; const bool Matcher::match_rule_supported(int opcode) { if (!has_match_rule(opcode)) diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/x86_32.ad --- a/src/cpu/x86/vm/x86_32.ad Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/x86_32.ad Sat Sep 01 13:25:18 2012 -0400 @@ -367,7 +367,7 @@ } // rRegI ereg, memory mem) %{ // emit_reg_mem -void encode_RegMem( CodeBuffer &cbuf, int reg_encoding, int base, int index, int scale, int displace, bool displace_is_oop ) { +void encode_RegMem( CodeBuffer &cbuf, int reg_encoding, int base, int index, int scale, int displace, relocInfo::relocType disp_reloc ) { // There is no index & no scale, use form without SIB byte if ((index == 0x4) && (scale == 0) && (base != ESP_enc)) { @@ -377,7 +377,7 @@ } else { // If 8-bit displacement, mode 0x1 if ((displace >= -128) && (displace <= 127) - && !(displace_is_oop) ) { + && (disp_reloc == relocInfo::none) ) { emit_rm(cbuf, 0x1, reg_encoding, base); emit_d8(cbuf, displace); } @@ -385,16 +385,16 @@ if (base == -1) { // Special flag for absolute address emit_rm(cbuf, 0x0, reg_encoding, 0x5); // (manual lies; no SIB needed here) - if ( displace_is_oop ) { - emit_d32_reloc(cbuf, displace, relocInfo::oop_type, 1); + if ( disp_reloc != relocInfo::none ) { + emit_d32_reloc(cbuf, displace, disp_reloc, 1); } else { emit_d32 (cbuf, displace); } } else { // Normal base + offset emit_rm(cbuf, 0x2, reg_encoding, base); - if ( displace_is_oop ) { - emit_d32_reloc(cbuf, displace, relocInfo::oop_type, 1); + if ( disp_reloc != relocInfo::none ) { + emit_d32_reloc(cbuf, displace, disp_reloc, 1); } else { emit_d32 (cbuf, displace); } @@ -410,7 +410,7 @@ } else { // If 8-bit displacement, mode 0x1 if ((displace >= -128) && (displace <= 127) - && !(displace_is_oop) ) { + && (disp_reloc == relocInfo::none) ) { emit_rm(cbuf, 0x1, reg_encoding, 0x4); emit_rm(cbuf, scale, index, base); emit_d8(cbuf, displace); @@ -423,8 +423,8 @@ emit_rm(cbuf, 0x2, reg_encoding, 0x4); emit_rm(cbuf, scale, index, base); } - if ( displace_is_oop ) { - emit_d32_reloc(cbuf, displace, relocInfo::oop_type, 1); + if ( disp_reloc != relocInfo::none ) { + emit_d32_reloc(cbuf, displace, disp_reloc, 1); } else { emit_d32 (cbuf, displace); } @@ -689,7 +689,7 @@ int opcode, const char *op_str, int size, outputStream* st ) { if( cbuf ) { emit_opcode (*cbuf, opcode ); - encode_RegMem(*cbuf, Matcher::_regEncode[reg], ESP_enc, 0x4, 0, offset, false); + encode_RegMem(*cbuf, Matcher::_regEncode[reg], ESP_enc, 0x4, 0, offset, relocInfo::none); #ifndef PRODUCT } else if( !do_size ) { if( size != 0 ) st->print("\n\t"); @@ -1090,7 +1090,7 @@ } if( cbuf ) { emit_opcode (*cbuf, op ); - encode_RegMem(*cbuf, 0x0, ESP_enc, 0x4, 0, offset, false); + encode_RegMem(*cbuf, 0x0, ESP_enc, 0x4, 0, offset, relocInfo::none); emit_opcode (*cbuf, 0xDD ); // FSTP ST(i) emit_d8 (*cbuf, 0xD8+Matcher::_regEncode[dst_first] ); #ifndef PRODUCT @@ -1260,8 +1260,8 @@ if (base == NULL) return; // CodeBuffer::expand failed // static stub relocation stores the instruction address of the call __ relocate(static_stub_Relocation::spec(mark), RELOC_IMM32); - // static stub relocation also tags the methodOop in the code-stream. - __ movoop(rbx, (jobject)NULL); // method is zapped till fixup time + // static stub relocation also tags the Method* in the code-stream. + __ mov_metadata(rbx, (Metadata*)NULL); // method is zapped till fixup time // This is recognized as unresolved by relocs/nativeInst/ic code __ jump(RuntimeAddress(__ pc())); @@ -1891,26 +1891,15 @@ %} enc_class Java_Dynamic_Call (method meth) %{ // JAVA DYNAMIC CALL - // !!!!! - // Generate "Mov EAX,0x00", placeholder instruction to load oop-info - // emit_call_dynamic_prologue( cbuf ); - cbuf.set_insts_mark(); - emit_opcode(cbuf, 0xB8 + EAX_enc); // mov EAX,-1 - emit_d32_reloc(cbuf, (int)Universe::non_oop_word(), oop_Relocation::spec_for_immediate(), RELOC_IMM32); - address virtual_call_oop_addr = cbuf.insts_mark(); - // CALL to fixup routine. Fixup routine uses ScopeDesc info to determine - // who we intended to call. - cbuf.set_insts_mark(); - $$$emit8$primary; - emit_d32_reloc(cbuf, ($meth$$method - (int)(cbuf.insts_end()) - 4), - virtual_call_Relocation::spec(virtual_call_oop_addr), RELOC_IMM32 ); + MacroAssembler _masm(&cbuf); + __ ic_call((address)$meth$$method); %} enc_class Java_Compiled_Call (method meth) %{ // JAVA COMPILED CALL - int disp = in_bytes(methodOopDesc::from_compiled_offset()); + int disp = in_bytes(Method::from_compiled_offset()); assert( -128 <= disp && disp <= 127, "compiled_code_offset isn't small"); - // CALL *[EAX+in_bytes(methodOopDesc::from_compiled_code_entry_point_offset())] + // CALL *[EAX+in_bytes(Method::from_compiled_code_entry_point_offset())] cbuf.set_insts_mark(); $$$emit8$primary; emit_rm(cbuf, 0x01, $secondary, EAX_enc ); // R/M byte @@ -2127,8 +2116,8 @@ int index = $mem$$index; int scale = $mem$$scale; int displace = $mem$$disp; - bool disp_is_oop = $mem->disp_is_oop(); - encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_is_oop); + relocInfo::relocType disp_reloc = $mem->disp_reloc(); + encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_reloc); %} enc_class RegMem_Hi(eRegL ereg, memory mem) %{ // emit_reg_mem @@ -2137,8 +2126,8 @@ int index = $mem$$index; int scale = $mem$$scale; int displace = $mem$$disp + 4; // Offset is 4 further in memory - assert( !$mem->disp_is_oop(), "Cannot add 4 to oop" ); - encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, false/*disp_is_oop*/); + assert( $mem->disp_reloc() == relocInfo::none, "Cannot add 4 to oop" ); + encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, relocInfo::none); %} enc_class move_long_small_shift( eRegL dst, immI_1_31 cnt ) %{ @@ -2192,8 +2181,8 @@ int index = $mem$$index; int scale = $mem$$scale; int displace = $mem$$disp + $disp_for_half$$constant; - bool disp_is_oop = false; - encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_is_oop); + relocInfo::relocType disp_reloc = relocInfo::none; + encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_reloc); %} // !!!!! Special Custom Code used by MemMove, and stack access instructions !!!!! @@ -2207,8 +2196,8 @@ int index = $mem$$index; int scale = $mem$$scale; int displace = $mem$$disp; - assert( !$mem->disp_is_oop(), "No oops here because no relo info allowed" ); - encode_RegMem(cbuf, rm_byte_opcode, base, index, scale, displace, false); + assert( $mem->disp_reloc() == relocInfo::none, "No oops here because no reloc info allowed" ); + encode_RegMem(cbuf, rm_byte_opcode, base, index, scale, displace, relocInfo::none); %} enc_class RMopc_Mem (immI rm_opcode, memory mem) %{ @@ -2217,8 +2206,8 @@ int index = $mem$$index; int scale = $mem$$scale; int displace = $mem$$disp; - bool disp_is_oop = $mem->disp_is_oop(); // disp-as-oop when working with static globals - encode_RegMem(cbuf, rm_byte_opcode, base, index, scale, displace, disp_is_oop); + relocInfo::relocType disp_reloc = $mem->disp_reloc(); // disp-as-oop when working with static globals + encode_RegMem(cbuf, rm_byte_opcode, base, index, scale, displace, disp_reloc); %} enc_class RegLea (rRegI dst, rRegI src0, immI src1 ) %{ // emit_reg_lea @@ -2227,8 +2216,8 @@ int index = 0x04; // 0x04 indicates no index int scale = 0x00; // 0x00 indicates no scale int displace = $src1$$constant; // 0x00 indicates no displacement - bool disp_is_oop = false; - encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_is_oop); + relocInfo::relocType disp_reloc = relocInfo::none; + encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_reloc); %} enc_class min_enc (rRegI dst, rRegI src) %{ // MIN @@ -2263,7 +2252,7 @@ int index = $mem$$index; int scale = $mem$$scale; int displace = $mem$$disp; - bool disp_is_oop = $mem->disp_is_oop(); // disp-as-oop when working with static globals + relocInfo::relocType disp_reloc = $mem->disp_reloc(); // disp-as-oop when working with static globals if( $src$$reg != FPR1L_enc ) { reg_encoding = 0x3; // Store & pop emit_opcode( cbuf, 0xD9 ); // FLD (i.e., push it) @@ -2271,7 +2260,7 @@ } cbuf.set_insts_mark(); // Mark start of opcode for reloc info in mem operand emit_opcode(cbuf,$primary); - encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_is_oop); + encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_reloc); %} enc_class neg_reg(rRegI dst) %{ @@ -2321,8 +2310,8 @@ int index = $mem$$index; int scale = $mem$$scale; int displace = $mem$$disp; - bool disp_is_oop = $mem->disp_is_oop(); - encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_is_oop); + relocInfo::relocType disp_reloc = $mem->disp_reloc(); + encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, disp_reloc); // ADD $p,$tmp emit_opcode(cbuf,0x03); emit_rm(cbuf, 0x3, $p$$reg, tmpReg); @@ -3645,8 +3634,8 @@ int index = $mem$$index; int scale = $mem$$scale; int displace = $mem$$disp; - bool disp_is_oop = $mem->disp_is_oop(); // disp-as-oop when working with static globals - encode_RegMem(cbuf, rm_byte_opcode, base, index, scale, displace, disp_is_oop); + relocInfo::relocType disp_reloc = $mem->disp_reloc(); // disp-as-oop when working with static globals + encode_RegMem(cbuf, rm_byte_opcode, base, index, scale, displace, disp_reloc); store_to_stackslot( cbuf, 0x0DF, 0x07, $dst$$disp ); %} @@ -3663,8 +3652,8 @@ int index = $mem$$index; int scale = $mem$$scale; int displace = $mem$$disp; - bool disp_is_oop = $mem->disp_is_oop(); // disp-as-oop when working with static globals - encode_RegMem(cbuf, rm_byte_opcode, base, index, scale, displace, disp_is_oop); + relocInfo::relocType disp_reloc = $mem->disp_reloc(); // disp-as-oop when working with static globals + encode_RegMem(cbuf, rm_byte_opcode, base, index, scale, displace, disp_reloc); %} // Safepoint Poll. This polls the safepoint page, and causes an @@ -5817,8 +5806,8 @@ ins_encode %{ //__ popcntl($dst$$Register, $mem$$Address$$first); //__ popcntl($tmp$$Register, $mem$$Address$$second); - __ popcntl($dst$$Register, Address::make_raw($mem$$base, $mem$$index, $mem$$scale, $mem$$disp, false)); - __ popcntl($tmp$$Register, Address::make_raw($mem$$base, $mem$$index, $mem$$scale, $mem$$disp + 4, false)); + __ popcntl($dst$$Register, Address::make_raw($mem$$base, $mem$$index, $mem$$scale, $mem$$disp, relocInfo::none)); + __ popcntl($tmp$$Register, Address::make_raw($mem$$base, $mem$$index, $mem$$scale, $mem$$disp + 4, relocInfo::none)); __ addl($dst$$Register, $tmp$$Register); %} ins_pipe(ialu_reg); @@ -6185,8 +6174,8 @@ "MOV $dst.hi,$mem+4" %} ins_encode %{ - Address Amemlo = Address::make_raw($mem$$base, $mem$$index, $mem$$scale, $mem$$disp, false); - Address Amemhi = Address::make_raw($mem$$base, $mem$$index, $mem$$scale, $mem$$disp + 4, false); + Address Amemlo = Address::make_raw($mem$$base, $mem$$index, $mem$$scale, $mem$$disp, relocInfo::none); + Address Amemhi = Address::make_raw($mem$$base, $mem$$index, $mem$$scale, $mem$$disp + 4, relocInfo::none); __ movl($dst$$Register, Amemlo); __ movl(HIGH_FROM_LOW($dst$$Register), Amemhi); %} @@ -11795,7 +11784,7 @@ // Only works because non-oop pointers must be raw pointers // and raw pointers have no anti-dependencies. instruct compP_mem_eReg( eFlagsRegU cr, eRegP op1, memory op2 ) %{ - predicate( !n->in(2)->in(2)->bottom_type()->isa_oop_ptr() ); + predicate( n->in(2)->in(2)->bottom_type()->reloc() == relocInfo::none ); match(Set cr (CmpP op1 (LoadP op2))); format %{ "CMPu $op1,$op2" %} diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/x86/vm/x86_64.ad --- a/src/cpu/x86/vm/x86_64.ad Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/x86/vm/x86_64.ad Sat Sep 01 13:25:18 2012 -0400 @@ -516,6 +516,7 @@ #ifdef ASSERT if (rspec.reloc()->type() == relocInfo::oop_type && d32 != 0 && d32 != (intptr_t) Universe::non_oop_word()) { + assert(Universe::heap()->is_in_reserved((address)(intptr_t)d32), "should be real oop"); assert(oop((intptr_t)d32)->is_oop() && (ScavengeRootsInCode || !oop((intptr_t)d32)->is_scavengable()), "cannot embed scavengable oops in code"); } #endif @@ -542,6 +543,7 @@ #ifdef ASSERT if (rspec.reloc()->type() == relocInfo::oop_type && d64 != 0 && d64 != (int64_t) Universe::non_oop_word()) { + assert(Universe::heap()->is_in_reserved((address)d64), "should be real oop"); assert(oop(d64)->is_oop() && (ScavengeRootsInCode || !oop(d64)->is_scavengable()), "cannot embed scavengable oops in code"); } @@ -568,9 +570,9 @@ // rRegI ereg, memory mem) %{ // emit_reg_mem void encode_RegMem(CodeBuffer &cbuf, int reg, - int base, int index, int scale, int disp, bool disp_is_oop) + int base, int index, int scale, int disp, relocInfo::relocType disp_reloc) { - assert(!disp_is_oop, "cannot have disp"); + assert(disp_reloc == relocInfo::none, "cannot have disp"); int regenc = reg & 7; int baseenc = base & 7; int indexenc = index & 7; @@ -580,7 +582,7 @@ // If no displacement, mode is 0x0; unless base is [RBP] or [R13] if (disp == 0 && base != RBP_enc && base != R13_enc) { emit_rm(cbuf, 0x0, regenc, baseenc); // * - } else if (-0x80 <= disp && disp < 0x80 && !disp_is_oop) { + } else if (-0x80 <= disp && disp < 0x80 && disp_reloc == relocInfo::none) { // If 8-bit displacement, mode 0x1 emit_rm(cbuf, 0x1, regenc, baseenc); // * emit_d8(cbuf, disp); @@ -588,7 +590,7 @@ // If 32-bit displacement if (base == -1) { // Special flag for absolute address emit_rm(cbuf, 0x0, regenc, 0x5); // * - if (disp_is_oop) { + if (disp_reloc != relocInfo::none) { emit_d32_reloc(cbuf, disp, relocInfo::oop_type, RELOC_DISP32); } else { emit_d32(cbuf, disp); @@ -596,7 +598,7 @@ } else { // Normal base + offset emit_rm(cbuf, 0x2, regenc, baseenc); // * - if (disp_is_oop) { + if (disp_reloc != relocInfo::none) { emit_d32_reloc(cbuf, disp, relocInfo::oop_type, RELOC_DISP32); } else { emit_d32(cbuf, disp); @@ -611,7 +613,7 @@ emit_rm(cbuf, 0x0, regenc, 0x4); // * emit_rm(cbuf, scale, indexenc, baseenc); } else { - if (-0x80 <= disp && disp < 0x80 && !disp_is_oop) { + if (-0x80 <= disp && disp < 0x80 && disp_reloc == relocInfo::none) { // If 8-bit displacement, mode 0x1 emit_rm(cbuf, 0x1, regenc, 0x4); // * emit_rm(cbuf, scale, indexenc, baseenc); @@ -625,7 +627,7 @@ emit_rm(cbuf, 0x2, regenc, 0x4); emit_rm(cbuf, scale, indexenc, baseenc); // * } - if (disp_is_oop) { + if (disp_reloc != relocInfo::none) { emit_d32_reloc(cbuf, disp, relocInfo::oop_type, RELOC_DISP32); } else { emit_d32(cbuf, disp); @@ -1382,8 +1384,8 @@ if (base == NULL) return; // CodeBuffer::expand failed // static stub relocation stores the instruction address of the call __ relocate(static_stub_Relocation::spec(mark), RELOC_IMM64); - // static stub relocation also tags the methodOop in the code-stream. - __ movoop(rbx, (jobject) NULL); // method is zapped till fixup time + // static stub relocation also tags the Method* in the code-stream. + __ mov_metadata(rbx, (Metadata*) NULL); // method is zapped till fixup time // This is recognized as unresolved by relocs/nativeinst/ic code __ jump(RuntimeAddress(__ pc())); @@ -2044,35 +2046,15 @@ } %} - enc_class Java_Dynamic_Call(method meth) - %{ - // JAVA DYNAMIC CALL - // !!!!! - // Generate "movq rax, -1", placeholder instruction to load oop-info - // emit_call_dynamic_prologue( cbuf ); - cbuf.set_insts_mark(); - - // movq rax, -1 - emit_opcode(cbuf, Assembler::REX_W); - emit_opcode(cbuf, 0xB8 | RAX_enc); - emit_d64_reloc(cbuf, - (int64_t) Universe::non_oop_word(), - oop_Relocation::spec_for_immediate(), RELOC_IMM64); - address virtual_call_oop_addr = cbuf.insts_mark(); - // CALL to fixup routine. Fixup routine uses ScopeDesc info to determine - // who we intended to call. - cbuf.set_insts_mark(); - $$$emit8$primary; - emit_d32_reloc(cbuf, - (int) ($meth$$method - ((intptr_t) cbuf.insts_end()) - 4), - virtual_call_Relocation::spec(virtual_call_oop_addr), - RELOC_DISP32); + enc_class Java_Dynamic_Call(method meth) %{ + MacroAssembler _masm(&cbuf); + __ ic_call((address)$meth$$method); %} enc_class Java_Compiled_Call(method meth) %{ // JAVA COMPILED CALL - int disp = in_bytes(methodOopDesc:: from_compiled_offset()); + int disp = in_bytes(Method:: from_compiled_offset()); // XXX XXX offset is 128 is 1.5 NON-PRODUCT !!! // assert(-0x80 <= disp && disp < 0x80, "compiled_code_offset isn't small"); @@ -2190,8 +2172,8 @@ } emit_opcode(cbuf, 0xB8 | dstenc); // This next line should be generated from ADLC - if ($src->constant_is_oop()) { - emit_d64_reloc(cbuf, $src$$constant, relocInfo::oop_type, RELOC_IMM64); + if ($src->constant_reloc() != relocInfo::none) { + emit_d64_reloc(cbuf, $src$$constant, $src->constant_reloc(), RELOC_IMM64); } else { emit_d64(cbuf, $src$$constant); } @@ -2452,9 +2434,9 @@ int index = $mem$$index; int scale = $mem$$scale; int disp = $mem$$disp; - bool disp_is_oop = $mem->disp_is_oop(); - - encode_RegMem(cbuf, reg, base, index, scale, disp, disp_is_oop); + relocInfo::relocType disp_reloc = $mem->disp_reloc(); + + encode_RegMem(cbuf, reg, base, index, scale, disp, disp_reloc); %} enc_class RM_opc_mem(immI rm_opcode, memory mem) @@ -2467,11 +2449,11 @@ int scale = $mem$$scale; int displace = $mem$$disp; - bool disp_is_oop = $mem->disp_is_oop(); // disp-as-oop when + relocInfo::relocType disp_reloc = $mem->disp_reloc(); // disp-as-oop when // working with static // globals encode_RegMem(cbuf, rm_byte_opcode, base, index, scale, displace, - disp_is_oop); + disp_reloc); %} enc_class reg_lea(rRegI dst, rRegI src0, immI src1) @@ -2481,9 +2463,9 @@ int index = 0x04; // 0x04 indicates no index int scale = 0x00; // 0x00 indicates no scale int displace = $src1$$constant; // 0x00 indicates no displacement - bool disp_is_oop = false; + relocInfo::relocType disp_reloc = relocInfo::none; encode_RegMem(cbuf, reg_encoding, base, index, scale, displace, - disp_is_oop); + disp_reloc); %} enc_class neg_reg(rRegI dst) @@ -3169,7 +3151,7 @@ operand immP31() %{ - predicate(!n->as_Type()->type()->isa_oopptr() + predicate(n->as_Type()->type()->reloc() == relocInfo::none && (n->get_ptr() >> 31) == 0); match(ConP); @@ -6466,8 +6448,8 @@ %} instruct decodeHeapOop(rRegP dst, rRegN src, rFlagsReg cr) %{ - predicate(n->bottom_type()->is_oopptr()->ptr() != TypePtr::NotNull && - n->bottom_type()->is_oopptr()->ptr() != TypePtr::Constant); + predicate(n->bottom_type()->is_ptr()->ptr() != TypePtr::NotNull && + n->bottom_type()->is_ptr()->ptr() != TypePtr::Constant); match(Set dst (DecodeN src)); effect(KILL cr); format %{ "decode_heap_oop $dst,$src" %} @@ -6483,8 +6465,8 @@ %} instruct decodeHeapOop_not_null(rRegP dst, rRegN src, rFlagsReg cr) %{ - predicate(n->bottom_type()->is_oopptr()->ptr() == TypePtr::NotNull || - n->bottom_type()->is_oopptr()->ptr() == TypePtr::Constant); + predicate(n->bottom_type()->is_ptr()->ptr() == TypePtr::NotNull || + n->bottom_type()->is_ptr()->ptr() == TypePtr::Constant); match(Set dst (DecodeN src)); effect(KILL cr); format %{ "decode_heap_oop_not_null $dst,$src" %} @@ -10348,7 +10330,7 @@ // and raw pointers have no anti-dependencies. instruct compP_mem_rReg(rFlagsRegU cr, rRegP op1, memory op2) %{ - predicate(!n->in(2)->in(2)->bottom_type()->isa_oop_ptr()); + predicate(n->in(2)->in(2)->bottom_type()->reloc() == relocInfo::none); match(Set cr (CmpP op1 (LoadP op2))); format %{ "cmpq $op1, $op2\t# raw ptr" %} @@ -10757,8 +10739,8 @@ ins_cost(1100); // slightly larger than the next version format %{ "movq rdi, [$sub + in_bytes(Klass::secondary_supers_offset())]\n\t" - "movl rcx, [rdi + arrayOopDesc::length_offset_in_bytes()]\t# length to scan\n\t" - "addq rdi, arrayOopDex::base_offset_in_bytes(T_OBJECT)\t# Skip to start of data; set NZ in case count is zero\n\t" + "movl rcx, [rdi + Array::length_offset_in_bytes()]\t# length to scan\n\t" + "addq rdi, Array::base_offset_in_bytes()\t# Skip to start of data; set NZ in case count is zero\n\t" "repne scasq\t# Scan *rdi++ for a match with rax while rcx--\n\t" "jne,s miss\t\t# Missed: rdi not-zero\n\t" "movq [$sub + in_bytes(Klass::secondary_super_cache_offset())], $super\t# Hit: update cache\n\t" @@ -10780,8 +10762,8 @@ ins_cost(1000); format %{ "movq rdi, [$sub + in_bytes(Klass::secondary_supers_offset())]\n\t" - "movl rcx, [rdi + arrayOopDesc::length_offset_in_bytes()]\t# length to scan\n\t" - "addq rdi, arrayOopDex::base_offset_in_bytes(T_OBJECT)\t# Skip to start of data; set NZ in case count is zero\n\t" + "movl rcx, [rdi + Array::length_offset_in_bytes()]\t# length to scan\n\t" + "addq rdi, Array::base_offset_in_bytes()\t# Skip to start of data; set NZ in case count is zero\n\t" "repne scasq\t# Scan *rdi++ for a match with rax while cx-- != 0\n\t" "jne,s miss\t\t# Missed: flags nz\n\t" "movq [$sub + in_bytes(Klass::secondary_super_cache_offset())], $super\t# Hit: update cache\n\t" @@ -11060,7 +11042,6 @@ ins_cost(300); format %{ "movq rax, #Universe::non_oop_word()\n\t" "call,dynamic " %} - opcode(0xE8); /* E8 cd */ ins_encode(Java_Dynamic_Call(meth), call_epilog); ins_pipe(pipe_slow); ins_alignment(4); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/bytecodeInterpreter_zero.cpp --- a/src/cpu/zero/vm/bytecodeInterpreter_zero.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/bytecodeInterpreter_zero.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2008 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -30,8 +30,8 @@ #include "interpreter/bytecodeInterpreter.inline.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/interpreterRuntime.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/bytecodeInterpreter_zero.hpp --- a/src/cpu/zero/vm/bytecodeInterpreter_zero.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/bytecodeInterpreter_zero.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2011 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -41,7 +41,7 @@ inline void set_locals(intptr_t* new_locals) { _locals = new_locals; } - inline void set_method(methodOop new_method) { + inline void set_method(Method* new_method) { _method = new_method; } inline interpreterState self_link() { @@ -68,7 +68,7 @@ inline void set_thread(JavaThread* new_thread) { _thread = new_thread; } - inline void set_constants(constantPoolCacheOop new_constants) { + inline void set_constants(ConstantPoolCache* new_constants) { _constants = new_constants; } inline oop oop_temp() { diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/cppInterpreter_zero.cpp --- a/src/cpu/zero/vm/cppInterpreter_zero.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/cppInterpreter_zero.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -31,8 +31,8 @@ #include "interpreter/interpreterGenerator.hpp" #include "interpreter/interpreterRuntime.hpp" #include "oops/arrayOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" @@ -65,7 +65,7 @@ CALL_VM_NOCHECK_NOFIX(func) \ fixup_after_potential_safepoint() -int CppInterpreter::normal_entry(methodOop method, intptr_t UNUSED, TRAPS) { +int CppInterpreter::normal_entry(Method* method, intptr_t UNUSED, TRAPS) { JavaThread *thread = (JavaThread *) THREAD; // Allocate and initialize our frame. @@ -90,7 +90,7 @@ InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame(); interpreterState istate = frame->interpreter_state(); - methodOop method = istate->method(); + Method* method = istate->method(); intptr_t *result = NULL; int result_slots = 0; @@ -114,7 +114,7 @@ // Examine the message from the interpreter to decide what to do if (istate->msg() == BytecodeInterpreter::call_method) { - methodOop callee = istate->callee(); + Method* callee = istate->callee(); // Trim back the stack to put the parameters at the top stack->set_sp(istate->stack() + 1); @@ -215,7 +215,7 @@ stack->push(result[-i]); } -int CppInterpreter::native_entry(methodOop method, intptr_t UNUSED, TRAPS) { +int CppInterpreter::native_entry(Method* method, intptr_t UNUSED, TRAPS) { // Make sure method is native and not abstract assert(method->is_native() && !method->is_abstract(), "should be"); @@ -485,7 +485,7 @@ return 0; } -int CppInterpreter::accessor_entry(methodOop method, intptr_t UNUSED, TRAPS) { +int CppInterpreter::accessor_entry(Method* method, intptr_t UNUSED, TRAPS) { JavaThread *thread = (JavaThread *) THREAD; ZeroStack *stack = thread->zero_stack(); intptr_t *locals = stack->sp(); @@ -518,7 +518,7 @@ // Get the entry from the constant pool cache, and drop into // the slow path if it has not been resolved - constantPoolCacheOop cache = method->constants()->cache(); + ConstantPoolCache* cache = method->constants()->cache(); ConstantPoolCacheEntry* entry = cache->entry_at(index); if (!entry->is_resolved(Bytecodes::_getfield)) { return normal_entry(method, 0, THREAD); @@ -613,7 +613,7 @@ return 0; } -int CppInterpreter::empty_entry(methodOop method, intptr_t UNUSED, TRAPS) { +int CppInterpreter::empty_entry(Method* method, intptr_t UNUSED, TRAPS) { JavaThread *thread = (JavaThread *) THREAD; ZeroStack *stack = thread->zero_stack(); @@ -629,7 +629,7 @@ return 0; } -int CppInterpreter::method_handle_entry(methodOop method, +int CppInterpreter::method_handle_entry(Method* method, intptr_t UNUSED, TRAPS) { JavaThread *thread = (JavaThread *) THREAD; ZeroStack *stack = thread->zero_stack(); @@ -737,7 +737,7 @@ MethodHandles::EntryKind entry_kind = (MethodHandles::EntryKind) (((intptr_t) entry) & 0xffffffff); - methodOop method = NULL; + Method* method = NULL; switch (entry_kind) { case MethodHandles::_invokestatic_mh: direct_to_method = true; @@ -761,13 +761,13 @@ } if (entry_kind != MethodHandles::_invokespecial_mh) { intptr_t index = java_lang_invoke_DirectMethodHandle::vmindex(method_handle); - instanceKlass* rcvrKlass = - (instanceKlass *) receiver->klass()->klass_part(); + InstanceKlass* rcvrKlass = + (InstanceKlass *) receiver->klass(); if (entry_kind == MethodHandles::_invokevirtual_mh) { - method = (methodOop) rcvrKlass->start_of_vtable()[index]; + method = (Method*) rcvrKlass->start_of_vtable()[index]; } else { - oop iclass = java_lang_invoke_MethodHandle::vmtarget(method_handle); + oop iclass = java_lang_invoke_MethodHandle::next_target(method_handle); itableOffsetEntry* ki = (itableOffsetEntry *) rcvrKlass->start_of_itable(); int i, length = rcvrKlass->itable_length(); @@ -873,7 +873,7 @@ case MethodHandles::_adapter_retype_only: case MethodHandles::_adapter_retype_raw: src_rtype = result_type_of_handle( - java_lang_invoke_MethodHandle::vmtarget(method_handle)); + java_lang_invoke_MethodHandle::next_target(method_handle)); dst_rtype = result_type_of_handle(method_handle); break; @@ -883,12 +883,12 @@ java_lang_invoke_AdapterMethodHandle::vmargslot(method_handle); oop arg = VMSLOTS_OBJECT(arg_slot); if (arg != NULL) { - klassOop objKlassOop = arg->klass(); - klassOop klassOf = java_lang_Class::as_klassOop( + Klass* objKlassOop = arg->klass(); + Klass* klassOf = java_lang_Class::as_Klass( java_lang_invoke_AdapterMethodHandle::argument(method_handle)); if (objKlassOop != klassOf && - !objKlassOop->klass_part()->is_subtype_of(klassOf)) { + !objKlassOop->is_subtype_of(klassOf)) { ResourceMark rm(THREAD); const char* objName = Klass::cast(objKlassOop)->external_name(); const char* klassName = Klass::cast(klassOf)->external_name(); @@ -1089,14 +1089,14 @@ if (direct_to_method) { if (method == NULL) { method = - (methodOop) java_lang_invoke_MethodHandle::vmtarget(method_handle); + (Method*) java_lang_invoke_MethodHandle::vmtarget(method_handle); } address entry_point = method->from_interpreted_entry(); Interpreter::invoke_method(method, entry_point, THREAD); } else { process_method_handle( - java_lang_invoke_MethodHandle::vmtarget(method_handle), THREAD); + java_lang_invoke_MethodHandle::next_target(method_handle), THREAD); } // NB all oops now trashed @@ -1172,7 +1172,7 @@ BasicType CppInterpreter::result_type_of_handle(oop method_handle) { oop method_type = java_lang_invoke_MethodHandle::type(method_handle); oop return_type = java_lang_invoke_MethodType::rtype(method_type); - return java_lang_Class::as_BasicType(return_type, (klassOop *) NULL); + return java_lang_Class::as_BasicType(return_type, (Klass* *) NULL); } intptr_t* CppInterpreter::calculate_unwind_sp(ZeroStack* stack, @@ -1189,7 +1189,7 @@ THROW_MSG(name, message); IRT_END -InterpreterFrame *InterpreterFrame::build(const methodOop method, TRAPS) { +InterpreterFrame *InterpreterFrame::build(Method* const method, TRAPS) { JavaThread *thread = (JavaThread *) THREAD; ZeroStack *stack = thread->zero_stack(); @@ -1285,7 +1285,7 @@ return i; } -BasicType CppInterpreter::result_type_of(methodOop method) { +BasicType CppInterpreter::result_type_of(Method* method) { BasicType t; switch (method->result_index()) { case 0 : t = T_BOOLEAN; break; @@ -1440,7 +1440,7 @@ return (InterpreterFrame *) fp; } -int AbstractInterpreter::layout_activation(methodOop method, +int AbstractInterpreter::layout_activation(Method* method, int tempcount, int popframe_extra_args, int moncount, @@ -1496,7 +1496,7 @@ void BytecodeInterpreter::layout_interpreterState(interpreterState istate, frame* caller, frame* current, - methodOop method, + Method* method, intptr_t* locals, intptr_t* stack, intptr_t* stack_base, @@ -1539,7 +1539,7 @@ // Helper for (runtime) stack overflow checks -int AbstractInterpreter::size_top_interpreter_activation(methodOop method) { +int AbstractInterpreter::size_top_interpreter_activation(Method* method) { return 0; } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/cppInterpreter_zero.hpp --- a/src/cpu/zero/vm/cppInterpreter_zero.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/cppInterpreter_zero.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2010, 2011 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -32,11 +32,11 @@ public: // Method entries - static int normal_entry(methodOop method, intptr_t UNUSED, TRAPS); - static int native_entry(methodOop method, intptr_t UNUSED, TRAPS); - static int accessor_entry(methodOop method, intptr_t UNUSED, TRAPS); - static int empty_entry(methodOop method, intptr_t UNUSED, TRAPS); - static int method_handle_entry(methodOop method, intptr_t UNUSED, TRAPS); + static int normal_entry(Method* method, intptr_t UNUSED, TRAPS); + static int native_entry(Method* method, intptr_t UNUSED, TRAPS); + static int accessor_entry(Method* method, intptr_t UNUSED, TRAPS); + static int empty_entry(Method* method, intptr_t UNUSED, TRAPS); + static int method_handle_entry(Method* method, intptr_t UNUSED, TRAPS); public: // Main loop of normal_entry @@ -53,6 +53,6 @@ private: // Fast result type determination - static BasicType result_type_of(methodOop method); + static BasicType result_type_of(Method* method); #endif // CPU_ZERO_VM_CPPINTERPRETER_ZERO_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/dump_zero.cpp --- a/src/cpu/zero/vm/dump_zero.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright 2007 Red Hat, Inc. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "assembler_zero.inline.hpp" -#include "memory/compactingPermGenGen.hpp" -#include "memory/generation.inline.hpp" -#include "memory/space.inline.hpp" - -void CompactingPermGenGen::generate_vtable_methods(void** vtbl_list, - void** vtable, - char** md_top, - char* md_end, - char** mc_top, - char* mc_end) { - ShouldNotCallThis(); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/entry_zero.hpp --- a/src/cpu/zero/vm/entry_zero.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/entry_zero.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2009, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -44,21 +44,21 @@ } private: - typedef int (*NormalEntryFunc)(methodOop method, + typedef int (*NormalEntryFunc)(Method* method, intptr_t base_pc, TRAPS); - typedef int (*OSREntryFunc)(methodOop method, + typedef int (*OSREntryFunc)(Method* method, address osr_buf, intptr_t base_pc, TRAPS); public: - void invoke(methodOop method, TRAPS) const { + void invoke(Method* method, TRAPS) const { maybe_deoptimize( ((NormalEntryFunc) entry_point())(method, (intptr_t) this, THREAD), THREAD); } - void invoke_osr(methodOop method, address osr_buf, TRAPS) const { + void invoke_osr(Method* method, address osr_buf, TRAPS) const { maybe_deoptimize( ((OSREntryFunc) entry_point())(method, osr_buf, (intptr_t) this, THREAD), THREAD); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/frame_zero.cpp --- a/src/cpu/zero/vm/frame_zero.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/frame_zero.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -29,7 +29,7 @@ #include "interpreter/interpreterRuntime.hpp" #include "memory/resourceArea.hpp" #include "oops/markOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "runtime/frame.inline.hpp" #include "runtime/handles.inline.hpp" @@ -118,7 +118,7 @@ BasicType frame::interpreter_frame_result(oop* oop_result, jvalue* value_result) { assert(is_interpreted_frame(), "interpreted frame expected"); - methodOop method = interpreter_frame_method(); + Method* method = interpreter_frame_method(); BasicType type = method->result_type(); intptr_t* tos_addr = (intptr_t *) interpreter_frame_tos_address(); oop obj; diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/frame_zero.inline.hpp --- a/src/cpu/zero/vm/frame_zero.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/frame_zero.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -93,11 +93,11 @@ return (intptr_t*) &(get_interpreterState()->_bcp); } -inline constantPoolCacheOop* frame::interpreter_frame_cache_addr() const { +inline ConstantPoolCache** frame::interpreter_frame_cache_addr() const { return &(get_interpreterState()->_constants); } -inline methodOop* frame::interpreter_frame_method_addr() const { +inline Method** frame::interpreter_frame_method_addr() const { return &(get_interpreterState()->_method); } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/icBuffer_zero.cpp --- a/src/cpu/zero/vm/icBuffer_zero.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/icBuffer_zero.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2007 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -40,7 +40,7 @@ } void InlineCacheBuffer::assemble_ic_buffer_code(address code_begin, - oop cached_oop, + Metadata* cached_oop, address entry_point) { // NB ic_stub_code_size() must return the size of the code we generate ShouldNotCallThis(); @@ -51,7 +51,7 @@ ShouldNotCallThis(); } -oop InlineCacheBuffer::ic_buffer_cached_oop(address code_begin) { +Metadata* InlineCacheBuffer::ic_buffer_cached_oop(address code_begin) { // NB ic_stub_code_size() must return the size of the code we generate ShouldNotCallThis(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/interp_masm_zero.cpp --- a/src/cpu/zero/vm/interp_masm_zero.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/interp_masm_zero.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2009 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -29,8 +29,8 @@ #include "interpreter/interpreterRuntime.hpp" #include "oops/arrayOop.hpp" #include "oops/markOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "prims/jvmtiThreadState.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/interpreterFrame_zero.hpp --- a/src/cpu/zero/vm/interpreterFrame_zero.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/interpreterFrame_zero.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -27,7 +27,7 @@ #define CPU_ZERO_VM_INTERPRETERFRAME_ZERO_HPP #include "interpreter/bytecodeInterpreter.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "runtime/thread.hpp" #include "stack_zero.hpp" @@ -63,7 +63,7 @@ }; public: - static InterpreterFrame *build(const methodOop method, TRAPS); + static InterpreterFrame *build(Method* const method, TRAPS); static InterpreterFrame *build(int size, TRAPS); public: diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/interpreterRT_zero.cpp --- a/src/cpu/zero/vm/interpreterRT_zero.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/interpreterRT_zero.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -28,7 +28,7 @@ #include "interpreter/interpreterRuntime.hpp" #include "memory/allocation.inline.hpp" #include "memory/universe.inline.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/icache.hpp" @@ -142,7 +142,7 @@ IRT_ENTRY(address, InterpreterRuntime::slow_signature_handler(JavaThread* thread, - methodOop method, + Method* method, intptr_t* unused1, intptr_t* unused2)) ZeroStack *stack = thread->zero_stack(); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/interpreter_zero.cpp --- a/src/cpu/zero/vm/interpreter_zero.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/interpreter_zero.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -31,8 +31,8 @@ #include "interpreter/interpreterRuntime.hpp" #include "interpreter/templateTable.hpp" #include "oops/arrayOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/interpreter_zero.hpp --- a/src/cpu/zero/vm/interpreter_zero.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/interpreter_zero.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -27,10 +27,10 @@ #define CPU_ZERO_VM_INTERPRETER_ZERO_HPP public: - static void invoke_method(methodOop method, address entry_point, TRAPS) { + static void invoke_method(Method* method, address entry_point, TRAPS) { ((ZeroEntry *) entry_point)->invoke(method, THREAD); } - static void invoke_osr(methodOop method, + static void invoke_osr(Method* method, address entry_point, address osr_buf, TRAPS) { diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/metaspaceShared_zero.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cpu/zero/vm/metaspaceShared_zero.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright 2007 Red Hat, Inc. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "assembler_zero.inline.hpp" +#include "memory/metaspaceShared.hpp" + +void MetaspaceShared::generate_vtable_methods(void** vtbl_list, + void** vtable, + char** md_top, + char* md_end, + char** mc_top, + char* mc_end) { + ShouldNotCallThis(); +} diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/sharedRuntime_zero.cpp --- a/src/cpu/zero/vm/sharedRuntime_zero.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/sharedRuntime_zero.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -30,7 +30,7 @@ #include "code/icBuffer.hpp" #include "code/vtableStubs.hpp" #include "interpreter/interpreter.hpp" -#include "oops/compiledICHolderOop.hpp" +#include "oops/compiledICHolder.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/vframeArray.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/sharkFrame_zero.hpp --- a/src/cpu/zero/vm/sharkFrame_zero.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/sharkFrame_zero.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2009 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -26,7 +26,7 @@ #ifndef CPU_ZERO_VM_SHARKFRAME_ZERO_HPP #define CPU_ZERO_VM_SHARKFRAME_ZERO_HPP -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "stack_zero.hpp" // | ... | @@ -72,8 +72,8 @@ return (intptr_t *) value_of_word(unextended_sp_off); } - methodOop method() const { - return (methodOop) value_of_word(method_off); + Method* method() const { + return (Method*) value_of_word(method_off); } public: diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/shark_globals_zero.hpp --- a/src/cpu/zero/vm/shark_globals_zero.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/shark_globals_zero.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2009, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -58,8 +58,7 @@ define_pd_global(bool, ProfileInterpreter, false); define_pd_global(intx, CodeCacheExpansionSize, 32*K ); define_pd_global(uintx, CodeCacheMinBlockLength, 1 ); -define_pd_global(uintx, PermSize, 12*M ); -define_pd_global(uintx, MaxPermSize, 64*M ); +define_pd_global(uintx, MetaspaceSize, 12*M ); define_pd_global(bool, NeverActAsServerClassMachine, true ); define_pd_global(uint64_t, MaxRAM, 1ULL*G); define_pd_global(bool, CICompileOSR, true ); diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/stubGenerator_zero.cpp --- a/src/cpu/zero/vm/stubGenerator_zero.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/stubGenerator_zero.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -29,7 +29,7 @@ #include "interpreter/interpreter.hpp" #include "nativeInst_zero.hpp" #include "oops/instanceOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" @@ -61,7 +61,7 @@ JavaCallWrapper *call_wrapper, intptr_t* result, BasicType result_type, - methodOop method, + Method* method, address entry_point, intptr_t* parameters, int parameter_words, diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/templateInterpreter_zero.cpp --- a/src/cpu/zero/vm/templateInterpreter_zero.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/templateInterpreter_zero.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2009 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -31,8 +31,8 @@ #include "interpreter/interpreterRuntime.hpp" #include "interpreter/templateTable.hpp" #include "oops/arrayOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/cpu/zero/vm/templateTable_zero.cpp --- a/src/cpu/zero/vm/templateTable_zero.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/cpu/zero/vm/templateTable_zero.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2009 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -28,7 +28,7 @@ #include "interpreter/interpreterRuntime.hpp" #include "interpreter/templateTable.hpp" #include "memory/universe.inline.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" #include "prims/methodHandles.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/os/bsd/dtrace/generateJvmOffsets.cpp --- a/src/os/bsd/dtrace/generateJvmOffsets.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os/bsd/dtrace/generateJvmOffsets.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,9 +45,9 @@ #include "memory/heap.hpp" #include "memory/memRegion.hpp" #include "memory/universe.hpp" -#include "oops/constMethodOop.hpp" +#include "oops/constMethod.hpp" #include "oops/klass.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.hpp" #include "oops/symbol.hpp" #include "runtime/virtualspace.hpp" @@ -210,7 +210,7 @@ #endif GEN_OFFS(Klass, _name); - GEN_OFFS(constantPoolOopDesc, _pool_holder); + GEN_OFFS(ConstantPool, _pool_holder); printf("\n"); GEN_VALUE(OFFSET_HeapBlockHeader_used, (int) offset_of(HeapBlock::Header, _used)); @@ -218,21 +218,21 @@ printf("\n"); GEN_VALUE(AccessFlags_NATIVE, JVM_ACC_NATIVE); - GEN_VALUE(constMethodOopDesc_has_linenumber_table, constMethodOopDesc::_has_linenumber_table); + GEN_VALUE(ConstMethod_has_linenumber_table, ConstMethod::_has_linenumber_table); GEN_OFFS(AccessFlags, _flags); GEN_OFFS(Symbol, _length); GEN_OFFS(Symbol, _body); printf("\n"); - GEN_OFFS(methodOopDesc, _constMethod); - GEN_OFFS(methodOopDesc, _constants); - GEN_OFFS(methodOopDesc, _access_flags); + GEN_OFFS(Method, _constMethod); + GEN_OFFS(Method, _constants); + GEN_OFFS(Method, _access_flags); printf("\n"); - GEN_OFFS(constMethodOopDesc, _flags); - GEN_OFFS(constMethodOopDesc, _code_size); - GEN_OFFS(constMethodOopDesc, _name_index); - GEN_OFFS(constMethodOopDesc, _signature_index); + GEN_OFFS(ConstMethod, _flags); + GEN_OFFS(ConstMethod, _code_size); + GEN_OFFS(ConstMethod, _name_index); + GEN_OFFS(ConstMethod, _signature_index); printf("\n"); GEN_OFFS(CodeHeap, _memory); @@ -273,12 +273,12 @@ GEN_VALUE(SIZE_HeapBlockHeader, (int) sizeof(HeapBlock::Header)); GEN_SIZE(oopDesc); - GEN_SIZE(constantPoolOopDesc); + GEN_SIZE(ConstantPool); printf("\n"); GEN_SIZE(PcDesc); - GEN_SIZE(methodOopDesc); - GEN_SIZE(constMethodOopDesc); + GEN_SIZE(Method); + GEN_SIZE(ConstMethod); GEN_SIZE(nmethod); GEN_SIZE(CodeBlob); GEN_SIZE(BufferBlob); diff -r 36d1d483d5d6 -r da91efe96a93 src/os/bsd/dtrace/jhelper.d --- a/src/os/bsd/dtrace/jhelper.d Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os/bsd/dtrace/jhelper.d Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,7 +44,6 @@ extern pointer __JvmOffsets; extern pointer __1cJCodeCacheF_heap_; -extern pointer __1cIUniverseP_methodKlassObj_; extern pointer __1cIUniverseO_collectedHeap_; extern pointer __1cIUniverseL_narrow_oop_; #ifdef _LP64 @@ -52,6 +51,7 @@ #endif extern pointer __1cHnmethodG__vtbl_; +extern pointer __1cNMethodG__vtbl_; extern pointer __1cKBufferBlobG__vtbl_; #define copyin_ptr(ADDR) *(pointer*) copyin((pointer) (ADDR), sizeof(pointer)) @@ -81,7 +81,7 @@ init_done = 0; this->error = (char *) NULL; this->result = (char *) NULL; - this->methodOop = 0; + this->isMethod = 0; this->codecache = 0; this->klass = (pointer) NULL; this->vtbl = (pointer) NULL; @@ -109,7 +109,7 @@ copyin_offset(OFFSET_interpreter_frame_method); copyin_offset(OFFSET_Klass_name); - copyin_offset(OFFSET_constantPoolOopDesc_pool_holder); + copyin_offset(OFFSET_ConstantPool_pool_holder); copyin_offset(OFFSET_HeapBlockHeader_used); copyin_offset(OFFSET_oopDesc_metadata); @@ -117,10 +117,10 @@ copyin_offset(OFFSET_Symbol_length); copyin_offset(OFFSET_Symbol_body); - copyin_offset(OFFSET_methodOopDesc_constMethod); - copyin_offset(OFFSET_methodOopDesc_constants); - copyin_offset(OFFSET_constMethodOopDesc_name_index); - copyin_offset(OFFSET_constMethodOopDesc_signature_index); + copyin_offset(OFFSET_Method_constMethod); + copyin_offset(OFFSET_ConstMethod_constants); + copyin_offset(OFFSET_ConstMethod_name_index); + copyin_offset(OFFSET_ConstMethod_signature_index); copyin_offset(OFFSET_CodeHeap_memory); copyin_offset(OFFSET_CodeHeap_segmap); @@ -134,7 +134,7 @@ copyin_offset(OFFSET_nmethod_method); copyin_offset(SIZE_HeapBlockHeader); copyin_offset(SIZE_oopDesc); - copyin_offset(SIZE_constantPoolOopDesc); + copyin_offset(SIZE_ConstantPool); copyin_offset(OFFSET_NarrowOopStruct_base); copyin_offset(OFFSET_NarrowOopStruct_shift); @@ -145,18 +145,17 @@ this->pc = arg0; /* - * The methodOopPtr is in %l2 on SPARC. This can be found at + * The methodPtr is in %l2 on SPARC. This can be found at * offset 8 from the frame pointer on 32-bit processes. */ #if defined(__sparc) - this->methodOopPtr = copyin_ptr(arg1 + 2 * sizeof(pointer) + STACK_BIAS); + this->methodPtr = copyin_ptr(arg1 + 2 * sizeof(pointer) + STACK_BIAS); #elif defined(__i386) || defined(__amd64) - this->methodOopPtr = copyin_ptr(arg1 + OFFSET_interpreter_frame_method); + this->methodPtr = copyin_ptr(arg1 + OFFSET_interpreter_frame_method); #else #error "Don't know architecture" #endif - this->Universe_methodKlassOop = copyin_ptr(&``__1cIUniverseP_methodKlassObj_); this->CodeCache_heap_address = copyin_ptr(&``__1cJCodeCacheF_heap_); /* Reading volatile values */ @@ -186,6 +185,8 @@ this->CodeHeap_log2_segment_size = copyin_uint32( this->CodeCache_heap_address + OFFSET_CodeHeap_log2_segment_size); + this->Method_vtbl = (pointer) &``__1cNMethodG__vtbl_; + /* * Get Java heap bounds */ @@ -298,9 +299,9 @@ /!this->done && this->vtbl == this->nmethod_vtbl/ { MARK_LINE; - this->methodOopPtr = copyin_ptr(this->start + OFFSET_nmethod_method); + this->methodPtr = copyin_ptr(this->start + OFFSET_nmethod_method); this->suffix = '*'; - this->methodOop = 1; + this->isMethod = 1; } dtrace:helper:ustack: @@ -310,35 +311,18 @@ this->name = copyin_ptr(this->start + OFFSET_CodeBlob_name); } + dtrace:helper:ustack: -/!this->done && this->vtbl == this->BufferBlob_vtbl && -this->Use_Compressed_Oops == 0 && -this->methodOopPtr > this->heap_start && this->methodOopPtr < this->heap_end/ +/!this->done && this->vtbl == this->BufferBlob_vtbl && this->methodPtr != 0/ { MARK_LINE; - this->klass = copyin_ptr(this->methodOopPtr + OFFSET_oopDesc_metadata); - this->methodOop = this->klass == this->Universe_methodKlassOop; - this->done = !this->methodOop; + this->klass = copyin_ptr(this->methodPtr); + this->isMethod = this->klass == this->Method_vtbl; + this->done = !this->isMethod; } dtrace:helper:ustack: -/!this->done && this->vtbl == this->BufferBlob_vtbl && -this->Use_Compressed_Oops != 0 && -this->methodOopPtr > this->heap_start && this->methodOopPtr < this->heap_end/ -{ - MARK_LINE; - /* - * Read compressed pointer and decode heap oop, same as oop.inline.hpp - */ - this->cklass = copyin_uint32(this->methodOopPtr + OFFSET_oopDesc_metadata); - this->klass = (uint64_t)((uintptr_t)this->Universe_narrow_oop_base + - ((uintptr_t)this->cklass << this->Universe_narrow_oop_shift)); - this->methodOop = this->klass == this->Universe_methodKlassOop; - this->done = !this->methodOop; -} - -dtrace:helper:ustack: -/!this->done && !this->methodOop/ +/!this->done && !this->isMethod/ { MARK_LINE; this->name = copyin_ptr(this->start + OFFSET_CodeBlob_name); @@ -347,38 +331,38 @@ } dtrace:helper:ustack: -/!this->done && this->methodOop/ +/!this->done && this->isMethod/ { MARK_LINE; - this->constMethod = copyin_ptr(this->methodOopPtr + - OFFSET_methodOopDesc_constMethod); + this->constMethod = copyin_ptr(this->methodPtr + + OFFSET_Method_constMethod); this->nameIndex = copyin_uint16(this->constMethod + - OFFSET_constMethodOopDesc_name_index); + OFFSET_ConstMethod_name_index); this->signatureIndex = copyin_uint16(this->constMethod + - OFFSET_constMethodOopDesc_signature_index); + OFFSET_ConstMethod_signature_index); - this->constantPool = copyin_ptr(this->methodOopPtr + - OFFSET_methodOopDesc_constants); + this->constantPool = copyin_ptr(this->constMethod + + OFFSET_ConstMethod_constants); this->nameSymbol = copyin_ptr(this->constantPool + - this->nameIndex * sizeof (pointer) + SIZE_constantPoolOopDesc); + this->nameIndex * sizeof (pointer) + SIZE_ConstantPool); this->nameSymbolLength = copyin_uint16(this->nameSymbol + OFFSET_Symbol_length); this->signatureSymbol = copyin_ptr(this->constantPool + - this->signatureIndex * sizeof (pointer) + SIZE_constantPoolOopDesc); + this->signatureIndex * sizeof (pointer) + SIZE_ConstantPool); this->signatureSymbolLength = copyin_uint16(this->signatureSymbol + OFFSET_Symbol_length); this->klassPtr = copyin_ptr(this->constantPool + - OFFSET_constantPoolOopDesc_pool_holder); + OFFSET_ConstantPool_pool_holder); this->klassSymbol = copyin_ptr(this->klassPtr + - OFFSET_Klass_name + SIZE_oopDesc); + OFFSET_Klass_name); this->klassSymbolLength = copyin_uint16(this->klassSymbol + OFFSET_Symbol_length); diff -r 36d1d483d5d6 -r da91efe96a93 src/os/bsd/dtrace/libjvm_db.c --- a/src/os/bsd/dtrace/libjvm_db.c Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os/bsd/dtrace/libjvm_db.c Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -101,7 +101,7 @@ #define MAX_VFRAMES_CNT 256 typedef struct vframe { - uint64_t methodOop; + uint64_t method; int32_t sender_decode_offset; int32_t methodIdx; int32_t bci; @@ -129,8 +129,8 @@ int32_t deopt_beg; /* _deoptimize_offset */ int32_t scopes_data_beg; /* _scopes_data_offset */ int32_t scopes_data_end; - int32_t oops_beg; /* _oops_offset */ - int32_t oops_end; + int32_t metadata_beg; /* _metadata_offset */ + int32_t metadata_end; int32_t scopes_pcs_beg; /* _scopes_pcs_offset */ int32_t scopes_pcs_end; @@ -145,16 +145,15 @@ uint64_t CodeBlob_vtbl; uint64_t BufferBlob_vtbl; uint64_t RuntimeStub_vtbl; + uint64_t Method_vtbl; uint64_t Use_Compressed_Oops_address; - uint64_t Universe_methodKlassObj_address; uint64_t Universe_narrow_oop_base_address; uint64_t Universe_narrow_oop_shift_address; uint64_t CodeCache_heap_address; /* Volatiles */ uint8_t Use_Compressed_Oops; - uint64_t Universe_methodKlassObj; uint64_t Universe_narrow_oop_base; uint32_t Universe_narrow_oop_shift; uint64_t CodeCache_low; @@ -164,7 +163,7 @@ int32_t SIZE_CodeCache_log2_segment; - uint64_t methodOopPtr; + uint64_t methodPtr; uint64_t bcx; Nmethod_t *N; /*Inlined methods support */ @@ -280,9 +279,6 @@ err = read_pointer(J, vmp->address, &J->CodeCache_heap_address); } } else if (vmp->typeName[0] == 'U' && strcmp("Universe", vmp->typeName) == 0) { - if (strcmp("_methodKlassObj", vmp->fieldName) == 0) { - J->Universe_methodKlassObj_address = vmp->address; - } if (strcmp("_narrow_oop._base", vmp->fieldName) == 0) { J->Universe_narrow_oop_base_address = vmp->address; } @@ -330,9 +326,6 @@ J->Use_Compressed_Oops = 0; } - err = read_pointer(J, J->Universe_methodKlassObj_address, &J->Universe_methodKlassObj); - CHECK_FAIL(err); - err = read_pointer(J, J->Universe_narrow_oop_base_address, &J->Universe_narrow_oop_base); CHECK_FAIL(err); err = ps_pread(J->P, J->Universe_narrow_oop_shift_address, &J->Universe_narrow_oop_shift, sizeof(uint32_t)); @@ -455,6 +448,8 @@ CHECK_FAIL(err); err = find_symbol(J, "__1cLRuntimeStubG__vtbl_", &J->RuntimeStub_vtbl); CHECK_FAIL(err); + err = find_symbol(J, "__1cNMethodG__vtbl_", &J->Method_vtbl); + CHECK_FAIL(err); err = parse_vmstructs(J); CHECK_FAIL(err); @@ -474,29 +469,18 @@ } } -static int is_methodOop(jvm_agent_t* J, uint64_t methodOopPtr) { +static int is_method(jvm_agent_t* J, uint64_t methodPtr) { uint64_t klass; - int err; - // If UseCompressedOops, this was a compressed oop. - if (J->Use_Compressed_Oops != 0) { - uint32_t cklass; - err = read_compressed_pointer(J, methodOopPtr + OFFSET_oopDesc_metadata, - &cklass); - // decode heap oop, same as oop.inline.hpp - klass = (uint64_t)((uintptr_t)J->Universe_narrow_oop_base + - ((uintptr_t)cklass << J->Universe_narrow_oop_shift)); - } else { - err = read_pointer(J, methodOopPtr + OFFSET_oopDesc_metadata, &klass); - } + int err = read_pointer(J, methodPtr, &klass); if (err != PS_OK) goto fail; - return klass == J->Universe_methodKlassObj; + return klass == J->Method_vtbl; fail: return 0; } static int -name_for_methodOop(jvm_agent_t* J, uint64_t methodOopPtr, char * result, size_t size) +name_for_methodPtr(jvm_agent_t* J, uint64_t methodPtr, char * result, size_t size) { short nameIndex; short signatureIndex; @@ -514,15 +498,15 @@ char * signatureString = NULL; int err; - err = read_pointer(J, methodOopPtr + OFFSET_methodOopDesc_constants, &constantPool); + err = read_pointer(J, methodPtr + OFFSET_Method_constMethod, &constMethod); CHECK_FAIL(err); - err = read_pointer(J, methodOopPtr + OFFSET_methodOopDesc_constMethod, &constMethod); + err = read_pointer(J, constMethod + OFFSET_ConstMethod_constants, &constantPool); CHECK_FAIL(err); /* To get name string */ - err = ps_pread(J->P, constMethod + OFFSET_constMethodOopDesc_name_index, &nameIndex, 2); + err = ps_pread(J->P, constMethod + OFFSET_ConstMethod_name_index, &nameIndex, 2); CHECK_FAIL(err); - err = read_pointer(J, constantPool + nameIndex * POINTER_SIZE + SIZE_constantPoolOopDesc, &nameSymbol); + err = read_pointer(J, constantPool + nameIndex * POINTER_SIZE + SIZE_ConstantPool, &nameSymbol); CHECK_FAIL(err); // The symbol is a CPSlot and has lower bit set to indicate metadata nameSymbol &= (~1); // remove metadata lsb @@ -533,9 +517,9 @@ CHECK_FAIL(err); /* To get signature string */ - err = ps_pread(J->P, constMethod + OFFSET_constMethodOopDesc_signature_index, &signatureIndex, 2); + err = ps_pread(J->P, constMethod + OFFSET_ConstMethod_signature_index, &signatureIndex, 2); CHECK_FAIL(err); - err = read_pointer(J, constantPool + signatureIndex * POINTER_SIZE + SIZE_constantPoolOopDesc, &signatureSymbol); + err = read_pointer(J, constantPool + signatureIndex * POINTER_SIZE + SIZE_ConstantPool, &signatureSymbol); CHECK_FAIL(err); signatureSymbol &= (~1); // remove metadata lsb err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_length, &signatureSymbolLength, 2); @@ -545,9 +529,9 @@ CHECK_FAIL(err); /* To get klass string */ - err = read_pointer(J, constantPool + OFFSET_constantPoolOopDesc_pool_holder, &klassPtr); + err = read_pointer(J, constantPool + OFFSET_ConstantPool_pool_holder, &klassPtr); CHECK_FAIL(err); - err = read_pointer(J, klassPtr + OFFSET_Klass_name + SIZE_oopDesc, &klassSymbol); + err = read_pointer(J, klassPtr + OFFSET_Klass_name, &klassSymbol); CHECK_FAIL(err); err = ps_pread(J->P, klassSymbol + OFFSET_Symbol_length, &klassSymbolLength, 2); CHECK_FAIL(err); @@ -572,7 +556,7 @@ fail: if (debug) { - fprintf(stderr, "name_for_methodOop: FAIL \n\n"); + fprintf(stderr, "name_for_methodPtr: FAIL \n\n"); } if (nameString != NULL) free(nameString); if (klassString != NULL) free(klassString); @@ -599,10 +583,10 @@ err = ps_pread(J->P, nm + OFFSET_nmethod_orig_pc_offset, &N->orig_pc_offset, SZ32); CHECK_FAIL(err); - /* Oops */ - err = ps_pread(J->P, nm + OFFSET_nmethod_oops_offset, &N->oops_beg, SZ32); + /* Metadata */ + err = ps_pread(J->P, nm + OFFSET_nmethod_metadata_offset, &N->metadata_beg, SZ32); CHECK_FAIL(err); - err = ps_pread(J->P, nm + OFFSET_nmethod_scopes_data_offset, &N->oops_end, SZ32); + err = ps_pread(J->P, nm + OFFSET_nmethod_scopes_data_offset, &N->metadata_end, SZ32); CHECK_FAIL(err); /* scopes_pcs */ @@ -627,8 +611,8 @@ fprintf(stderr, "\t nmethod_info: orig_pc_offset: %#x \n", N->orig_pc_offset); - fprintf(stderr, "\t nmethod_info: oops_beg: %#x, oops_end: %#x\n", - N->oops_beg, N->oops_end); + fprintf(stderr, "\t nmethod_info: metadata_beg: %#x, metadata_end: %#x\n", + N->metadata_beg, N->metadata_end); fprintf(stderr, "\t nmethod_info: scopes_data_beg: %#x, scopes_data_end: %#x\n", N->scopes_data_beg, N->scopes_data_end); @@ -766,20 +750,20 @@ if (debug > 2) { char name[256]; - err = name_for_methodOop(J, vf->methodOop, name, 256); + err = name_for_methodPtr(J, vf->method, name, 256); CHECK_FAIL(err); fprintf(stderr, "\t line_number_from_bci: BEGIN, method name: %s, targ bci: %d\n", name, vf->bci); } - err = read_pointer(J, vf->methodOop + OFFSET_methodOopDesc_constMethod, &constMethod); + err = read_pointer(J, vf->method + OFFSET_Method_constMethod, &constMethod); CHECK_FAIL(err); vf->line = 0; - err = ps_pread(J->P, constMethod + OFFSET_constMethodOopDesc_flags, &access_flags, sizeof(int8_t)); + err = ps_pread(J->P, constMethod + OFFSET_ConstMethod_flags, &access_flags, sizeof(int8_t)); CHECK_FAIL(err); - if (!(access_flags & constMethodOopDesc_has_linenumber_table)) { + if (!(access_flags & ConstMethod_has_linenumber_table)) { if (debug > 2) fprintf(stderr, "\t line_number_from_bci: END: !HAS_LINE_NUMBER_TABLE \n\n"); return PS_OK; @@ -789,16 +773,16 @@ * Not necessarily sorted and not necessarily one-to-one. */ - err = ps_pread(J->P, constMethod + OFFSET_constMethodOopDesc_code_size, &code_size, SZ16); + err = ps_pread(J->P, constMethod + OFFSET_ConstMethod_code_size, &code_size, SZ16); CHECK_FAIL(err); /* inlined_table_start() */ code_end_delta = (uint64_t) (access_flags & AccessFlags_NATIVE) ? 2*POINTER_SIZE : 0; - buffer = constMethod + (uint64_t) SIZE_constMethodOopDesc + (uint64_t) code_size + code_end_delta; + buffer = constMethod + (uint64_t) SIZE_ConstMethod + (uint64_t) code_size + code_end_delta; if (debug > 2) { - fprintf(stderr, "\t\t line_number_from_bci: methodOop: %#llx, native: %d\n", - vf->methodOop, (access_flags & AccessFlags_NATIVE)); + fprintf(stderr, "\t\t line_number_from_bci: method: %#llx, native: %d\n", + vf->method, (access_flags & AccessFlags_NATIVE)); fprintf(stderr, "\t\t line_number_from_bci: buffer: %#llx, code_size: %d\n", buffer, (int) code_size); } @@ -962,21 +946,21 @@ err = scope_desc_at(N, decode_offset, vf); CHECK_FAIL(err); - if (vf->methodIdx > ((N->oops_end - N->oops_beg) / POINTER_SIZE)) { - fprintf(stderr, "\t scopeDesc_chain: (methodIdx > oops length) !\n"); + if (vf->methodIdx > ((N->metadata_end - N->metadata_beg) / POINTER_SIZE)) { + fprintf(stderr, "\t scopeDesc_chain: (methodIdx > metadata length) !\n"); return -1; } - err = read_pointer(N->J, N->nm + N->oops_beg + (vf->methodIdx-1)*POINTER_SIZE, - &vf->methodOop); + err = read_pointer(N->J, N->nm + N->metadata_beg + (vf->methodIdx-1)*POINTER_SIZE, + &vf->method); CHECK_FAIL(err); - if (vf->methodOop) { + if (vf->method) { N->vf_cnt++; err = line_number_from_bci(N->J, vf); CHECK_FAIL(err); if (debug > 2) { - fprintf(stderr, "\t scopeDesc_chain: methodOop: %#8llx, line: %ld\n", - vf->methodOop, vf->line); + fprintf(stderr, "\t scopeDesc_chain: method: %#8llx, line: %ld\n", + vf->method, vf->line); } } decode_offset = vf->sender_decode_offset; @@ -998,7 +982,7 @@ name_for_nmethod(jvm_agent_t* J, uint64_t nm, uint64_t pc, - uint64_t methodOop, + uint64_t method, char *result, size_t size, Jframe_t *jframe @@ -1062,10 +1046,10 @@ jframe->vf_cnt = N->vf_cnt; jframe->bci = vf->bci; jframe->line = vf->line; - err = name_for_methodOop(J, N->vframes[0].methodOop, result+1, size-1); + err = name_for_methodPtr(J, N->vframes[0].method, result+1, size-1); CHECK_FAIL(err); } else { - err = name_for_methodOop(J, methodOop, result+1, size-1); + err = name_for_methodPtr(J, method, result+1, size-1); CHECK_FAIL(err); } if (deoptimized) { @@ -1097,7 +1081,7 @@ static int name_for_imethod(jvm_agent_t* J, uint64_t bcx, - uint64_t methodOop, + uint64_t method, char *result, size_t size, Jframe_t *jframe @@ -1108,21 +1092,21 @@ Vframe_t *vf = &vframe; int32_t err; - err = read_pointer(J, methodOop + OFFSET_methodOopDesc_constMethod, &constMethod); + err = read_pointer(J, method + OFFSET_Method_constMethod, &constMethod); CHECK_FAIL(err); - bci = is_bci(bcx) ? bcx : bcx - (constMethod + (uint64_t) SIZE_constMethodOopDesc); + bci = is_bci(bcx) ? bcx : bcx - (constMethod + (uint64_t) SIZE_ConstMethod); if (debug) - fprintf(stderr, "\t name_for_imethod: BEGIN: methodOop: %#llx\n", methodOop); + fprintf(stderr, "\t name_for_imethod: BEGIN: method: %#llx\n", method); - err = name_for_methodOop(J, methodOop, result, size); + err = name_for_methodPtr(J, method, result, size); CHECK_FAIL(err); if (debug) fprintf(stderr, "\t name_for_imethod: method name: %s\n", result); if (bci > 0) { - vf->methodOop = methodOop; + vf->method = method; vf->bci = bci; err = line_number_from_bci(J, vf); CHECK_FAIL(err); @@ -1161,16 +1145,16 @@ CHECK_FAIL(err); if (vtbl == J->nmethod_vtbl) { - uint64_t methodOop; + uint64_t method; - err = read_pointer(J, start + OFFSET_nmethod_method, &methodOop); + err = read_pointer(J, start + OFFSET_nmethod_method, &method); CHECK_FAIL(err); if (debug) { - fprintf(stderr, "name_for_codecache: start: %#8llx, pc: %#8llx, methodOop: %#8llx \n", - start, pc, methodOop); + fprintf(stderr, "name_for_codecache: start: %#8llx, pc: %#8llx, method: %#8llx \n", + start, pc, method); } - err = name_for_nmethod(J, start, pc, methodOop, result, size, jframe); + err = name_for_nmethod(J, start, pc, method, result, size, jframe); CHECK_FAIL(err); } else if (vtbl == J->BufferBlob_vtbl) { const char * name; @@ -1184,8 +1168,8 @@ */ if (err == PS_OK && strncmp(name, "Interpreter", 11) == 0) { *is_interpreted = 1; - if (is_methodOop(J, J->methodOopPtr)) { - return name_for_imethod(J, J->bcx, J->methodOopPtr, result, size, jframe); + if (is_method(J, J->methodPtr)) { + return name_for_imethod(J, J->bcx, J->methodPtr, result, size, jframe); } } @@ -1315,7 +1299,7 @@ } vf = N->vframes + vframe_no; name[0] = COMP_METHOD_SIGN; - err = name_for_methodOop(J, vf->methodOop, name + 1, size); + err = name_for_methodPtr(J, vf->method, name + 1, size); CHECK_FAIL(err); jframe->bci = vf->bci; @@ -1340,7 +1324,7 @@ uintptr_t fp; uintptr_t pc; /* arguments given to read_pointer need to be worst case sized */ - uint64_t methodOopPtr = 0; + uint64_t methodPtr = 0; uint64_t sender_sp; uint64_t bcx = 0; int is_interpreted = 0; @@ -1374,7 +1358,7 @@ */ pc += 8; bcx = (uintptr_t) regs[R_L1]; - methodOopPtr = (uintptr_t) regs[R_L2]; + methodPtr = (uintptr_t) regs[R_L2]; sender_sp = regs[R_I5]; if (debug > 2) { fprintf(stderr, "\nregs[R_I1]=%lx, regs[R_I2]=%lx, regs[R_I5]=%lx, regs[R_L1]=%lx, regs[R_L2]=%lx\n", @@ -1395,8 +1379,8 @@ printf("Jlookup_by_regs: J->prev_fr.fp = %#lx\n", J->prev_fr.fp); } - if (read_pointer(J, fp + OFFSET_interpreter_frame_method, &methodOopPtr) != PS_OK) { - methodOopPtr = 0; + if (read_pointer(J, fp + OFFSET_interpreter_frame_method, &methodPtr) != PS_OK) { + methodPtr = 0; } if (read_pointer(J, fp + OFFSET_interpreter_frame_sender_sp, &sender_sp) != PS_OK) { sender_sp = 0; @@ -1406,20 +1390,20 @@ } #endif /* i386 */ - J->methodOopPtr = methodOopPtr; + J->methodPtr = methodPtr; J->bcx = bcx; /* On x86 with C2 JVM: native frame may have wrong regs[R_FP] * For example: JVM_SuspendThread frame poins to the top interpreted frame. - * If we call is_methodOop(J, methodOopPtr) before codecache_contains(J, pc) + * If we call is_method(J, methodPtr) before codecache_contains(J, pc) * then we go over and omit both: nmethod and I2CAdapter frames. * Note, that regs[R_PC] is always correct if frame defined correctly. * So it is better to call codecache_contains(J, pc) from the beginning. */ #ifndef X86_COMPILER2 - if (is_methodOop(J, J->methodOopPtr)) { - result = name_for_imethod(J, bcx, J->methodOopPtr, name, size, jframe); - /* If the methodOopPtr is a method then this is highly likely to be + if (is_method(J, J->methodPtr)) { + result = name_for_imethod(J, bcx, J->methodPtr, name, size, jframe); + /* If the methodPtr is a method then this is highly likely to be an interpreter frame */ if (result >= 0) { is_interpreted = 1; @@ -1431,9 +1415,9 @@ result = name_for_codecache(J, fp, pc, name, size, jframe, &is_interpreted); } #ifdef X86_COMPILER2 - else if (is_methodOop(J, J->methodOopPtr)) { - result = name_for_imethod(J, bcx, J->methodOopPtr, name, size, jframe); - /* If the methodOopPtr is a method then this is highly likely to be + else if (is_method(J, J->methodPtr)) { + result = name_for_imethod(J, bcx, J->methodPtr, name, size, jframe); + /* If the methodPtr is a method then this is highly likely to be an interpreter frame */ if (result >= 0) { is_interpreted = 1; diff -r 36d1d483d5d6 -r da91efe96a93 src/os/solaris/dtrace/generateJvmOffsets.cpp --- a/src/os/solaris/dtrace/generateJvmOffsets.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os/solaris/dtrace/generateJvmOffsets.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -45,9 +45,9 @@ #include "memory/heap.hpp" #include "memory/memRegion.hpp" #include "memory/universe.hpp" -#include "oops/constMethodOop.hpp" +#include "oops/constMethod.hpp" #include "oops/klass.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.hpp" #include "oops/symbol.hpp" #include "runtime/virtualspace.hpp" @@ -205,7 +205,7 @@ #endif GEN_OFFS(Klass, _name); - GEN_OFFS(constantPoolOopDesc, _pool_holder); + GEN_OFFS(ConstantPool, _pool_holder); printf("\n"); GEN_VALUE(OFFSET_HeapBlockHeader_used, offset_of(HeapBlock::Header, _used)); @@ -213,21 +213,21 @@ printf("\n"); GEN_VALUE(AccessFlags_NATIVE, JVM_ACC_NATIVE); - GEN_VALUE(constMethodOopDesc_has_linenumber_table, constMethodOopDesc::_has_linenumber_table); + GEN_VALUE(ConstMethod_has_linenumber_table, ConstMethod::_has_linenumber_table); GEN_OFFS(AccessFlags, _flags); GEN_OFFS(Symbol, _length); GEN_OFFS(Symbol, _body); printf("\n"); - GEN_OFFS(methodOopDesc, _constMethod); - GEN_OFFS(methodOopDesc, _access_flags); + GEN_OFFS(Method, _constMethod); + GEN_OFFS(Method, _access_flags); printf("\n"); - GEN_OFFS(constMethodOopDesc, _constants); - GEN_OFFS(constMethodOopDesc, _flags); - GEN_OFFS(constMethodOopDesc, _code_size); - GEN_OFFS(constMethodOopDesc, _name_index); - GEN_OFFS(constMethodOopDesc, _signature_index); + GEN_OFFS(ConstMethod, _constants); + GEN_OFFS(ConstMethod, _flags); + GEN_OFFS(ConstMethod, _code_size); + GEN_OFFS(ConstMethod, _name_index); + GEN_OFFS(ConstMethod, _signature_index); printf("\n"); GEN_OFFS(CodeHeap, _memory); @@ -250,7 +250,7 @@ printf("\n"); GEN_OFFS(nmethod, _method); - GEN_OFFS(nmethod, _oops_offset); + GEN_OFFS(nmethod, _metadata_offset); GEN_OFFS(nmethod, _scopes_data_offset); GEN_OFFS(nmethod, _scopes_pcs_offset); GEN_OFFS(nmethod, _handler_table_offset); @@ -268,12 +268,12 @@ GEN_VALUE(SIZE_HeapBlockHeader, sizeof(HeapBlock::Header)); GEN_SIZE(oopDesc); - GEN_SIZE(constantPoolOopDesc); + GEN_SIZE(ConstantPool); printf("\n"); GEN_SIZE(PcDesc); - GEN_SIZE(methodOopDesc); - GEN_SIZE(constMethodOopDesc); + GEN_SIZE(Method); + GEN_SIZE(ConstMethod); GEN_SIZE(nmethod); GEN_SIZE(CodeBlob); GEN_SIZE(BufferBlob); diff -r 36d1d483d5d6 -r da91efe96a93 src/os/solaris/dtrace/jhelper.d --- a/src/os/solaris/dtrace/jhelper.d Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os/solaris/dtrace/jhelper.d Sat Sep 01 13:25:18 2012 -0400 @@ -44,7 +44,6 @@ extern pointer __JvmOffsets; extern pointer __1cJCodeCacheF_heap_; -extern pointer __1cIUniverseP_methodKlassObj_; extern pointer __1cIUniverseO_collectedHeap_; extern pointer __1cIUniverseL_narrow_oop_; #ifdef _LP64 @@ -52,6 +51,7 @@ #endif extern pointer __1cHnmethodG__vtbl_; +extern pointer __1cGMethodG__vtbl_; extern pointer __1cKBufferBlobG__vtbl_; #define copyin_ptr(ADDR) *(pointer*) copyin((pointer) (ADDR), sizeof(pointer)) @@ -81,7 +81,7 @@ init_done = 0; this->error = (char *) NULL; this->result = (char *) NULL; - this->methodOop = 0; + this->isMethod = 0; this->codecache = 0; this->klass = (pointer) NULL; this->vtbl = (pointer) NULL; @@ -109,7 +109,7 @@ copyin_offset(OFFSET_interpreter_frame_method); copyin_offset(OFFSET_Klass_name); - copyin_offset(OFFSET_constantPoolOopDesc_pool_holder); + copyin_offset(OFFSET_ConstantPool_pool_holder); copyin_offset(OFFSET_HeapBlockHeader_used); copyin_offset(OFFSET_oopDesc_metadata); @@ -117,10 +117,10 @@ copyin_offset(OFFSET_Symbol_length); copyin_offset(OFFSET_Symbol_body); - copyin_offset(OFFSET_methodOopDesc_constMethod); - copyin_offset(OFFSET_constMethodOopDesc_constants); - copyin_offset(OFFSET_constMethodOopDesc_name_index); - copyin_offset(OFFSET_constMethodOopDesc_signature_index); + copyin_offset(OFFSET_Method_constMethod); + copyin_offset(OFFSET_ConstMethod_constants); + copyin_offset(OFFSET_ConstMethod_name_index); + copyin_offset(OFFSET_ConstMethod_signature_index); copyin_offset(OFFSET_CodeHeap_memory); copyin_offset(OFFSET_CodeHeap_segmap); @@ -134,7 +134,7 @@ copyin_offset(OFFSET_nmethod_method); copyin_offset(SIZE_HeapBlockHeader); copyin_offset(SIZE_oopDesc); - copyin_offset(SIZE_constantPoolOopDesc); + copyin_offset(SIZE_ConstantPool); copyin_offset(OFFSET_NarrowOopStruct_base); copyin_offset(OFFSET_NarrowOopStruct_shift); @@ -145,18 +145,17 @@ this->pc = arg0; /* - * The methodOopPtr is in %l2 on SPARC. This can be found at + * The methodPtr is in %l2 on SPARC. This can be found at * offset 8 from the frame pointer on 32-bit processes. */ #if defined(__sparc) - this->methodOopPtr = copyin_ptr(arg1 + 2 * sizeof(pointer) + STACK_BIAS); + this->methodPtr = copyin_ptr(arg1 + 2 * sizeof(pointer) + STACK_BIAS); #elif defined(__i386) || defined(__amd64) - this->methodOopPtr = copyin_ptr(arg1 + OFFSET_interpreter_frame_method); + this->methodPtr = copyin_ptr(arg1 + OFFSET_interpreter_frame_method); #else #error "Don't know architecture" #endif - this->Universe_methodKlassOop = copyin_ptr(&``__1cIUniverseP_methodKlassObj_); this->CodeCache_heap_address = copyin_ptr(&``__1cJCodeCacheF_heap_); /* Reading volatile values */ @@ -186,6 +185,8 @@ this->CodeHeap_log2_segment_size = copyin_uint32( this->CodeCache_heap_address + OFFSET_CodeHeap_log2_segment_size); + this->Method_vtbl = (pointer) &``__1cGMethodG__vtbl_; + /* * Get Java heap bounds */ @@ -298,9 +299,9 @@ /!this->done && this->vtbl == this->nmethod_vtbl/ { MARK_LINE; - this->methodOopPtr = copyin_ptr(this->start + OFFSET_nmethod_method); + this->methodPtr = copyin_ptr(this->start + OFFSET_nmethod_method); this->suffix = '*'; - this->methodOop = 1; + this->isMethod = 1; } dtrace:helper:ustack: @@ -310,35 +311,18 @@ this->name = copyin_ptr(this->start + OFFSET_CodeBlob_name); } + dtrace:helper:ustack: -/!this->done && this->vtbl == this->BufferBlob_vtbl && -this->Use_Compressed_Oops == 0 && -this->methodOopPtr > this->heap_start && this->methodOopPtr < this->heap_end/ +/!this->done && this->vtbl == this->BufferBlob_vtbl && this->methodPtr != 0/ { MARK_LINE; - this->klass = copyin_ptr(this->methodOopPtr + OFFSET_oopDesc_metadata); - this->methodOop = this->klass == this->Universe_methodKlassOop; - this->done = !this->methodOop; + this->klass = copyin_ptr(this->methodPtr); + this->isMethod = this->klass == this->Method_vtbl; + this->done = !this->isMethod; } dtrace:helper:ustack: -/!this->done && this->vtbl == this->BufferBlob_vtbl && -this->Use_Compressed_Oops != 0 && -this->methodOopPtr > this->heap_start && this->methodOopPtr < this->heap_end/ -{ - MARK_LINE; - /* - * Read compressed pointer and decode heap oop, same as oop.inline.hpp - */ - this->cklass = copyin_uint32(this->methodOopPtr + OFFSET_oopDesc_metadata); - this->klass = (uint64_t)((uintptr_t)this->Universe_narrow_oop_base + - ((uintptr_t)this->cklass << this->Universe_narrow_oop_shift)); - this->methodOop = this->klass == this->Universe_methodKlassOop; - this->done = !this->methodOop; -} - -dtrace:helper:ustack: -/!this->done && !this->methodOop/ +/!this->done && !this->isMethod/ { MARK_LINE; this->name = copyin_ptr(this->start + OFFSET_CodeBlob_name); @@ -347,38 +331,38 @@ } dtrace:helper:ustack: -/!this->done && this->methodOop/ +/!this->done && this->isMethod/ { MARK_LINE; - this->constMethod = copyin_ptr(this->methodOopPtr + - OFFSET_methodOopDesc_constMethod); + this->constMethod = copyin_ptr(this->methodPtr + + OFFSET_Method_constMethod); this->nameIndex = copyin_uint16(this->constMethod + - OFFSET_constMethodOopDesc_name_index); + OFFSET_ConstMethod_name_index); this->signatureIndex = copyin_uint16(this->constMethod + - OFFSET_constMethodOopDesc_signature_index); + OFFSET_ConstMethod_signature_index); this->constantPool = copyin_ptr(this->constMethod + - OFFSET_constMethodOopDesc_constants); + OFFSET_ConstMethod_constants); this->nameSymbol = copyin_ptr(this->constantPool + - this->nameIndex * sizeof (pointer) + SIZE_constantPoolOopDesc); + this->nameIndex * sizeof (pointer) + SIZE_ConstantPool); this->nameSymbolLength = copyin_uint16(this->nameSymbol + OFFSET_Symbol_length); this->signatureSymbol = copyin_ptr(this->constantPool + - this->signatureIndex * sizeof (pointer) + SIZE_constantPoolOopDesc); + this->signatureIndex * sizeof (pointer) + SIZE_ConstantPool); this->signatureSymbolLength = copyin_uint16(this->signatureSymbol + OFFSET_Symbol_length); this->klassPtr = copyin_ptr(this->constantPool + - OFFSET_constantPoolOopDesc_pool_holder); + OFFSET_ConstantPool_pool_holder); this->klassSymbol = copyin_ptr(this->klassPtr + - OFFSET_Klass_name + SIZE_oopDesc); + OFFSET_Klass_name); this->klassSymbolLength = copyin_uint16(this->klassSymbol + OFFSET_Symbol_length); diff -r 36d1d483d5d6 -r da91efe96a93 src/os/solaris/dtrace/libjvm_db.c --- a/src/os/solaris/dtrace/libjvm_db.c Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os/solaris/dtrace/libjvm_db.c Sat Sep 01 13:25:18 2012 -0400 @@ -101,7 +101,7 @@ #define MAX_VFRAMES_CNT 256 typedef struct vframe { - uint64_t methodOop; + uint64_t method; int32_t sender_decode_offset; int32_t methodIdx; int32_t bci; @@ -129,8 +129,8 @@ int32_t deopt_beg; /* _deoptimize_offset */ int32_t scopes_data_beg; /* _scopes_data_offset */ int32_t scopes_data_end; - int32_t oops_beg; /* _oops_offset */ - int32_t oops_end; + int32_t metadata_beg; /* _metadata_offset */ + int32_t metadata_end; int32_t scopes_pcs_beg; /* _scopes_pcs_offset */ int32_t scopes_pcs_end; @@ -145,16 +145,15 @@ uint64_t CodeBlob_vtbl; uint64_t BufferBlob_vtbl; uint64_t RuntimeStub_vtbl; + uint64_t Method_vtbl; uint64_t Use_Compressed_Oops_address; - uint64_t Universe_methodKlassObj_address; uint64_t Universe_narrow_oop_base_address; uint64_t Universe_narrow_oop_shift_address; uint64_t CodeCache_heap_address; /* Volatiles */ uint8_t Use_Compressed_Oops; - uint64_t Universe_methodKlassObj; uint64_t Universe_narrow_oop_base; uint32_t Universe_narrow_oop_shift; uint64_t CodeCache_low; @@ -164,7 +163,7 @@ int32_t SIZE_CodeCache_log2_segment; - uint64_t methodOopPtr; + uint64_t methodPtr; uint64_t bcx; Nmethod_t *N; /*Inlined methods support */ @@ -280,9 +279,6 @@ err = read_pointer(J, vmp->address, &J->CodeCache_heap_address); } } else if (vmp->typeName[0] == 'U' && strcmp("Universe", vmp->typeName) == 0) { - if (strcmp("_methodKlassObj", vmp->fieldName) == 0) { - J->Universe_methodKlassObj_address = vmp->address; - } if (strcmp("_narrow_oop._base", vmp->fieldName) == 0) { J->Universe_narrow_oop_base_address = vmp->address; } @@ -330,9 +326,6 @@ J->Use_Compressed_Oops = 0; } - err = read_pointer(J, J->Universe_methodKlassObj_address, &J->Universe_methodKlassObj); - CHECK_FAIL(err); - err = read_pointer(J, J->Universe_narrow_oop_base_address, &J->Universe_narrow_oop_base); CHECK_FAIL(err); err = ps_pread(J->P, J->Universe_narrow_oop_shift_address, &J->Universe_narrow_oop_shift, sizeof(uint32_t)); @@ -455,6 +448,8 @@ CHECK_FAIL(err); err = find_symbol(J, "__1cLRuntimeStubG__vtbl_", &J->RuntimeStub_vtbl); CHECK_FAIL(err); + err = find_symbol(J, "__1cGMethodG__vtbl_", &J->Method_vtbl); + CHECK_FAIL(err); err = parse_vmstructs(J); CHECK_FAIL(err); @@ -474,29 +469,18 @@ } } -static int is_methodOop(jvm_agent_t* J, uint64_t methodOopPtr) { +static int is_method(jvm_agent_t* J, uint64_t methodPtr) { uint64_t klass; - int err; - // If UseCompressedOops, this was a compressed oop. - if (J->Use_Compressed_Oops != 0) { - uint32_t cklass; - err = read_compressed_pointer(J, methodOopPtr + OFFSET_oopDesc_metadata, - &cklass); - // decode heap oop, same as oop.inline.hpp - klass = (uint64_t)((uintptr_t)J->Universe_narrow_oop_base + - ((uintptr_t)cklass << J->Universe_narrow_oop_shift)); - } else { - err = read_pointer(J, methodOopPtr + OFFSET_oopDesc_metadata, &klass); - } + int err = read_pointer(J, methodPtr, &klass); if (err != PS_OK) goto fail; - return klass == J->Universe_methodKlassObj; + return klass == J->Method_vtbl; fail: return 0; } static int -name_for_methodOop(jvm_agent_t* J, uint64_t methodOopPtr, char * result, size_t size) +name_for_methodPtr(jvm_agent_t* J, uint64_t methodPtr, char * result, size_t size) { short nameIndex; short signatureIndex; @@ -514,15 +498,15 @@ char * signatureString = NULL; int err; - err = read_pointer(J, methodOopPtr + OFFSET_methodOopDesc_constMethod, &constMethod); + err = read_pointer(J, methodPtr + OFFSET_Method_constMethod, &constMethod); CHECK_FAIL(err); - err = read_pointer(J, constMethod + OFFSET_constMethodOopDesc_constants, &constantPool); + err = read_pointer(J, constMethod + OFFSET_ConstMethod_constants, &constantPool); CHECK_FAIL(err); /* To get name string */ - err = ps_pread(J->P, constMethod + OFFSET_constMethodOopDesc_name_index, &nameIndex, 2); + err = ps_pread(J->P, constMethod + OFFSET_ConstMethod_name_index, &nameIndex, 2); CHECK_FAIL(err); - err = read_pointer(J, constantPool + nameIndex * POINTER_SIZE + SIZE_constantPoolOopDesc, &nameSymbol); + err = read_pointer(J, constantPool + nameIndex * POINTER_SIZE + SIZE_ConstantPool, &nameSymbol); CHECK_FAIL(err); // The symbol is a CPSlot and has lower bit set to indicate metadata nameSymbol &= (~1); // remove metadata lsb @@ -533,9 +517,9 @@ CHECK_FAIL(err); /* To get signature string */ - err = ps_pread(J->P, constMethod + OFFSET_constMethodOopDesc_signature_index, &signatureIndex, 2); + err = ps_pread(J->P, constMethod + OFFSET_ConstMethod_signature_index, &signatureIndex, 2); CHECK_FAIL(err); - err = read_pointer(J, constantPool + signatureIndex * POINTER_SIZE + SIZE_constantPoolOopDesc, &signatureSymbol); + err = read_pointer(J, constantPool + signatureIndex * POINTER_SIZE + SIZE_ConstantPool, &signatureSymbol); CHECK_FAIL(err); signatureSymbol &= (~1); // remove metadata lsb err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_length, &signatureSymbolLength, 2); @@ -545,9 +529,9 @@ CHECK_FAIL(err); /* To get klass string */ - err = read_pointer(J, constantPool + OFFSET_constantPoolOopDesc_pool_holder, &klassPtr); + err = read_pointer(J, constantPool + OFFSET_ConstantPool_pool_holder, &klassPtr); CHECK_FAIL(err); - err = read_pointer(J, klassPtr + OFFSET_Klass_name + SIZE_oopDesc, &klassSymbol); + err = read_pointer(J, klassPtr + OFFSET_Klass_name, &klassSymbol); CHECK_FAIL(err); err = ps_pread(J->P, klassSymbol + OFFSET_Symbol_length, &klassSymbolLength, 2); CHECK_FAIL(err); @@ -572,7 +556,7 @@ fail: if (debug) { - fprintf(stderr, "name_for_methodOop: FAIL \n\n"); + fprintf(stderr, "name_for_methodPtr: FAIL \n\n"); } if (nameString != NULL) free(nameString); if (klassString != NULL) free(klassString); @@ -599,10 +583,10 @@ err = ps_pread(J->P, nm + OFFSET_nmethod_orig_pc_offset, &N->orig_pc_offset, SZ32); CHECK_FAIL(err); - /* Oops */ - err = ps_pread(J->P, nm + OFFSET_nmethod_oops_offset, &N->oops_beg, SZ32); + /* Metadata */ + err = ps_pread(J->P, nm + OFFSET_nmethod_metadata_offset, &N->metadata_beg, SZ32); CHECK_FAIL(err); - err = ps_pread(J->P, nm + OFFSET_nmethod_scopes_data_offset, &N->oops_end, SZ32); + err = ps_pread(J->P, nm + OFFSET_nmethod_scopes_data_offset, &N->metadata_end, SZ32); CHECK_FAIL(err); /* scopes_pcs */ @@ -627,8 +611,8 @@ fprintf(stderr, "\t nmethod_info: orig_pc_offset: %#x \n", N->orig_pc_offset); - fprintf(stderr, "\t nmethod_info: oops_beg: %#x, oops_end: %#x\n", - N->oops_beg, N->oops_end); + fprintf(stderr, "\t nmethod_info: metadata_beg: %#x, metadata_end: %#x\n", + N->metadata_beg, N->metadata_end); fprintf(stderr, "\t nmethod_info: scopes_data_beg: %#x, scopes_data_end: %#x\n", N->scopes_data_beg, N->scopes_data_end); @@ -766,20 +750,20 @@ if (debug > 2) { char name[256]; - err = name_for_methodOop(J, vf->methodOop, name, 256); + err = name_for_methodPtr(J, vf->method, name, 256); CHECK_FAIL(err); fprintf(stderr, "\t line_number_from_bci: BEGIN, method name: %s, targ bci: %d\n", name, vf->bci); } - err = read_pointer(J, vf->methodOop + OFFSET_methodOopDesc_constMethod, &constMethod); + err = read_pointer(J, vf->method + OFFSET_Method_constMethod, &constMethod); CHECK_FAIL(err); vf->line = 0; - err = ps_pread(J->P, constMethod + OFFSET_constMethodOopDesc_flags, &access_flags, sizeof(int8_t)); + err = ps_pread(J->P, constMethod + OFFSET_ConstMethod_flags, &access_flags, sizeof(int8_t)); CHECK_FAIL(err); - if (!(access_flags & constMethodOopDesc_has_linenumber_table)) { + if (!(access_flags & ConstMethod_has_linenumber_table)) { if (debug > 2) fprintf(stderr, "\t line_number_from_bci: END: !HAS_LINE_NUMBER_TABLE \n\n"); return PS_OK; @@ -789,16 +773,16 @@ * Not necessarily sorted and not necessarily one-to-one. */ - err = ps_pread(J->P, constMethod + OFFSET_constMethodOopDesc_code_size, &code_size, SZ16); + err = ps_pread(J->P, constMethod + OFFSET_ConstMethod_code_size, &code_size, SZ16); CHECK_FAIL(err); /* inlined_table_start() */ code_end_delta = (uint64_t) (access_flags & AccessFlags_NATIVE) ? 2*POINTER_SIZE : 0; - buffer = constMethod + (uint64_t) SIZE_constMethodOopDesc + (uint64_t) code_size + code_end_delta; + buffer = constMethod + (uint64_t) SIZE_ConstMethod + (uint64_t) code_size + code_end_delta; if (debug > 2) { - fprintf(stderr, "\t\t line_number_from_bci: methodOop: %#llx, native: %d\n", - vf->methodOop, (access_flags & AccessFlags_NATIVE)); + fprintf(stderr, "\t\t line_number_from_bci: method: %#llx, native: %d\n", + vf->method, (access_flags & AccessFlags_NATIVE)); fprintf(stderr, "\t\t line_number_from_bci: buffer: %#llx, code_size: %d\n", buffer, (int) code_size); } @@ -962,21 +946,21 @@ err = scope_desc_at(N, decode_offset, vf); CHECK_FAIL(err); - if (vf->methodIdx > ((N->oops_end - N->oops_beg) / POINTER_SIZE)) { - fprintf(stderr, "\t scopeDesc_chain: (methodIdx > oops length) !\n"); + if (vf->methodIdx > ((N->metadata_end - N->metadata_beg) / POINTER_SIZE)) { + fprintf(stderr, "\t scopeDesc_chain: (methodIdx > metadata length) !\n"); return -1; } - err = read_pointer(N->J, N->nm + N->oops_beg + (vf->methodIdx-1)*POINTER_SIZE, - &vf->methodOop); + err = read_pointer(N->J, N->nm + N->metadata_beg + (vf->methodIdx-1)*POINTER_SIZE, + &vf->method); CHECK_FAIL(err); - if (vf->methodOop) { + if (vf->method) { N->vf_cnt++; err = line_number_from_bci(N->J, vf); CHECK_FAIL(err); if (debug > 2) { - fprintf(stderr, "\t scopeDesc_chain: methodOop: %#8llx, line: %ld\n", - vf->methodOop, vf->line); + fprintf(stderr, "\t scopeDesc_chain: method: %#8llx, line: %ld\n", + vf->method, vf->line); } } decode_offset = vf->sender_decode_offset; @@ -998,7 +982,7 @@ name_for_nmethod(jvm_agent_t* J, uint64_t nm, uint64_t pc, - uint64_t methodOop, + uint64_t method, char *result, size_t size, Jframe_t *jframe @@ -1062,10 +1046,10 @@ jframe->vf_cnt = N->vf_cnt; jframe->bci = vf->bci; jframe->line = vf->line; - err = name_for_methodOop(J, N->vframes[0].methodOop, result+1, size-1); + err = name_for_methodPtr(J, N->vframes[0].method, result+1, size-1); CHECK_FAIL(err); } else { - err = name_for_methodOop(J, methodOop, result+1, size-1); + err = name_for_methodPtr(J, method, result+1, size-1); CHECK_FAIL(err); } if (deoptimized) { @@ -1097,7 +1081,7 @@ static int name_for_imethod(jvm_agent_t* J, uint64_t bcx, - uint64_t methodOop, + uint64_t method, char *result, size_t size, Jframe_t *jframe @@ -1108,21 +1092,21 @@ Vframe_t *vf = &vframe; int32_t err; - err = read_pointer(J, methodOop + OFFSET_methodOopDesc_constMethod, &constMethod); + err = read_pointer(J, method + OFFSET_Method_constMethod, &constMethod); CHECK_FAIL(err); - bci = is_bci(bcx) ? bcx : bcx - (constMethod + (uint64_t) SIZE_constMethodOopDesc); + bci = is_bci(bcx) ? bcx : bcx - (constMethod + (uint64_t) SIZE_ConstMethod); if (debug) - fprintf(stderr, "\t name_for_imethod: BEGIN: methodOop: %#llx\n", methodOop); + fprintf(stderr, "\t name_for_imethod: BEGIN: method: %#llx\n", method); - err = name_for_methodOop(J, methodOop, result, size); + err = name_for_methodPtr(J, method, result, size); CHECK_FAIL(err); if (debug) fprintf(stderr, "\t name_for_imethod: method name: %s\n", result); if (bci > 0) { - vf->methodOop = methodOop; + vf->method = method; vf->bci = bci; err = line_number_from_bci(J, vf); CHECK_FAIL(err); @@ -1161,16 +1145,16 @@ CHECK_FAIL(err); if (vtbl == J->nmethod_vtbl) { - uint64_t methodOop; + uint64_t method; - err = read_pointer(J, start + OFFSET_nmethod_method, &methodOop); + err = read_pointer(J, start + OFFSET_nmethod_method, &method); CHECK_FAIL(err); if (debug) { - fprintf(stderr, "name_for_codecache: start: %#8llx, pc: %#8llx, methodOop: %#8llx \n", - start, pc, methodOop); + fprintf(stderr, "name_for_codecache: start: %#8llx, pc: %#8llx, method: %#8llx \n", + start, pc, method); } - err = name_for_nmethod(J, start, pc, methodOop, result, size, jframe); + err = name_for_nmethod(J, start, pc, method, result, size, jframe); CHECK_FAIL(err); } else if (vtbl == J->BufferBlob_vtbl) { const char * name; @@ -1184,8 +1168,8 @@ */ if (err == PS_OK && strncmp(name, "Interpreter", 11) == 0) { *is_interpreted = 1; - if (is_methodOop(J, J->methodOopPtr)) { - return name_for_imethod(J, J->bcx, J->methodOopPtr, result, size, jframe); + if (is_method(J, J->methodPtr)) { + return name_for_imethod(J, J->bcx, J->methodPtr, result, size, jframe); } } @@ -1315,7 +1299,7 @@ } vf = N->vframes + vframe_no; name[0] = COMP_METHOD_SIGN; - err = name_for_methodOop(J, vf->methodOop, name + 1, size); + err = name_for_methodPtr(J, vf->method, name + 1, size); CHECK_FAIL(err); jframe->bci = vf->bci; @@ -1340,7 +1324,7 @@ uintptr_t fp; uintptr_t pc; /* arguments given to read_pointer need to be worst case sized */ - uint64_t methodOopPtr = 0; + uint64_t methodPtr = 0; uint64_t sender_sp; uint64_t bcx = 0; int is_interpreted = 0; @@ -1374,7 +1358,7 @@ */ pc += 8; bcx = (uintptr_t) regs[R_L1]; - methodOopPtr = (uintptr_t) regs[R_L2]; + methodPtr = (uintptr_t) regs[R_L2]; sender_sp = regs[R_I5]; if (debug > 2) { fprintf(stderr, "\nregs[R_I1]=%lx, regs[R_I2]=%lx, regs[R_I5]=%lx, regs[R_L1]=%lx, regs[R_L2]=%lx\n", @@ -1395,8 +1379,8 @@ printf("Jlookup_by_regs: J->prev_fr.fp = %#lx\n", J->prev_fr.fp); } - if (read_pointer(J, fp + OFFSET_interpreter_frame_method, &methodOopPtr) != PS_OK) { - methodOopPtr = 0; + if (read_pointer(J, fp + OFFSET_interpreter_frame_method, &methodPtr) != PS_OK) { + methodPtr = 0; } if (read_pointer(J, fp + OFFSET_interpreter_frame_sender_sp, &sender_sp) != PS_OK) { sender_sp = 0; @@ -1406,20 +1390,20 @@ } #endif /* i386 */ - J->methodOopPtr = methodOopPtr; + J->methodPtr = methodPtr; J->bcx = bcx; /* On x86 with C2 JVM: native frame may have wrong regs[R_FP] * For example: JVM_SuspendThread frame poins to the top interpreted frame. - * If we call is_methodOop(J, methodOopPtr) before codecache_contains(J, pc) + * If we call is_method(J, methodPtr) before codecache_contains(J, pc) * then we go over and omit both: nmethod and I2CAdapter frames. * Note, that regs[R_PC] is always correct if frame defined correctly. * So it is better to call codecache_contains(J, pc) from the beginning. */ #ifndef X86_COMPILER2 - if (is_methodOop(J, J->methodOopPtr)) { - result = name_for_imethod(J, bcx, J->methodOopPtr, name, size, jframe); - /* If the methodOopPtr is a method then this is highly likely to be + if (is_method(J, J->methodPtr)) { + result = name_for_imethod(J, bcx, J->methodPtr, name, size, jframe); + /* If the methodPtr is a method then this is highly likely to be an interpreter frame */ if (result >= 0) { is_interpreted = 1; @@ -1431,9 +1415,9 @@ result = name_for_codecache(J, fp, pc, name, size, jframe, &is_interpreted); } #ifdef X86_COMPILER2 - else if (is_methodOop(J, J->methodOopPtr)) { - result = name_for_imethod(J, bcx, J->methodOopPtr, name, size, jframe); - /* If the methodOopPtr is a method then this is highly likely to be + else if (is_method(J, J->methodPtr)) { + result = name_for_imethod(J, bcx, J->methodPtr, name, size, jframe); + /* If the methodPtr is a method then this is highly likely to be an interpreter frame */ if (result >= 0) { is_interpreted = 1; diff -r 36d1d483d5d6 -r da91efe96a93 src/os/solaris/vm/dtraceJSDT_solaris.cpp --- a/src/os/solaris/vm/dtraceJSDT_solaris.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os/solaris/vm/dtraceJSDT_solaris.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -142,7 +142,7 @@ ++strcount; for(int prbc = 0; prbc < provider->probe_count; ++prbc) { JVM_DTraceProbe* p = &(provider->probes[prbc]); - Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); + Symbol* sig = Method::resolve_jmethod_id(p->method)->signature(); // function + name + one per argument strcount += 2 + ArgumentCount(sig).size(); } @@ -178,7 +178,7 @@ stroffs[curstr++] = string_index; string_index += strlen(name) + 1; - Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); + Symbol* sig = Method::resolve_jmethod_id(p->method)->signature(); SignatureStream ss(sig); for ( ; !ss.at_return_type(); ss.next()) { BasicType bt = ss.type(); @@ -227,7 +227,7 @@ uint32_t argscount = 0; for(int prbc = 0; prbc < provider->probe_count; ++prbc) { JVM_DTraceProbe* p = &(provider->probes[prbc]); - Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); + Symbol* sig = Method::resolve_jmethod_id(p->method)->signature(); argscount += ArgumentCount(sig).size(); } secoffs[argoffs_sec] = align_size_up(offset, alignment_for[ARG_OFFSETS]); @@ -298,7 +298,7 @@ strcpy(str, name); str += strlen(name) + 1; - Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); + Symbol* sig = Method::resolve_jmethod_id(p->method)->signature(); SignatureStream ss(sig); for ( ; !ss.at_return_type(); ss.next()) { BasicType bt = ss.type(); @@ -377,7 +377,7 @@ uint32_t argsoffs = 0; for(int prbc = 0; prbc < provider->probe_count; ++prbc) { JVM_DTraceProbe* probe = &(provider->probes[prbc]); - methodOop m = JNIHandles::resolve_jmethod_id(probe->method); + Method* m = Method::resolve_jmethod_id(probe->method); int arg_count = ArgumentCount(m->signature()).size(); assert(m->code() != NULL, "must have an nmethod"); @@ -415,7 +415,7 @@ uint32_t* pof = (uint32_t*)(dof + sec->dofs_offset + sizeof(uint32_t) * prbc); JVM_DTraceProbe* probe = &(provider->probes[prbc]); - methodOop m = JNIHandles::resolve_jmethod_id(probe->method); + Method* m = Method::resolve_jmethod_id(probe->method); *pof = m->code()->trap_offset(); } @@ -433,7 +433,7 @@ uint8_t* par = (uint8_t*)(dof + sec->dofs_offset); for (int prbc = 0; prbc < provider->probe_count; ++prbc) { JVM_DTraceProbe* p = &(provider->probes[prbc]); - Symbol* sig = JNIHandles::resolve_jmethod_id(p->method)->signature(); + Symbol* sig = Method::resolve_jmethod_id(p->method)->signature(); uint8_t count = (uint8_t)ArgumentCount(sig).size(); for (uint8_t i = 0; i < count; ++i) { *par++ = i; diff -r 36d1d483d5d6 -r da91efe96a93 src/os/solaris/vm/os_solaris.cpp --- a/src/os/solaris/vm/os_solaris.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os/solaris/vm/os_solaris.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -5587,7 +5587,7 @@ // for n in $(eval whereis callcount | awk '{print $2}'); do print $n; done #define CHECK_POINTER_OK(p) \ - (Universe::perm_gen() == NULL || !Universe::is_reserved_heap((oop)(p))) + (!Universe::is_fully_initialized() || !Universe::is_reserved_heap((oop)(p))) #define CHECK_MU \ if (!CHECK_POINTER_OK(mu)) fatal("Mutex must be in C heap only."); #define CHECK_CV \ diff -r 36d1d483d5d6 -r da91efe96a93 src/os_cpu/bsd_x86/vm/globals_bsd_x86.hpp --- a/src/os_cpu/bsd_x86/vm/globals_bsd_x86.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os_cpu/bsd_x86/vm/globals_bsd_x86.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,7 +46,7 @@ define_pd_global(uintx, JVMInvokeMethodSlack, 8192); -// Only used on 64 bit platforms +// Used on 64 bit platforms for UseCompressedOops base address or CDS define_pd_global(uintx, HeapBaseMinAddress, 2*G); // Only used on 64 bit Windows platforms define_pd_global(bool, UseVectoredExceptions, false); diff -r 36d1d483d5d6 -r da91efe96a93 src/os_cpu/bsd_zero/vm/globals_bsd_zero.hpp --- a/src/os_cpu/bsd_zero/vm/globals_bsd_zero.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os_cpu/bsd_zero/vm/globals_bsd_zero.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -42,7 +42,7 @@ define_pd_global(uintx, JVMInvokeMethodSlack, 8192); define_pd_global(bool, UseVectoredExceptions, false); -// Only used on 64 bit platforms +// Used on 64 bit platforms for UseCompressedOops base address or CDS define_pd_global(uintx, HeapBaseMinAddress, 2*G); #endif // OS_CPU_BSD_ZERO_VM_GLOBALS_BSD_ZERO_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/os_cpu/linux_sparc/vm/globals_linux_sparc.hpp --- a/src/os_cpu/linux_sparc/vm/globals_linux_sparc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os_cpu/linux_sparc/vm/globals_linux_sparc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,8 +33,8 @@ define_pd_global(uintx, JVMInvokeMethodSlack, 12288); define_pd_global(intx, CompilerThreadStackSize, 0); -// Only used on 64 bit platforms -define_pd_global(uintx, HeapBaseMinAddress, 4*G); +// Used on 64 bit platforms for UseCompressedOops base address or CDS +define_pd_global(uintx, HeapBaseMinAddress, CONST64(4)*G); // Only used on 64 bit Windows platforms define_pd_global(bool, UseVectoredExceptions, false); diff -r 36d1d483d5d6 -r da91efe96a93 src/os_cpu/linux_x86/vm/globals_linux_x86.hpp --- a/src/os_cpu/linux_x86/vm/globals_linux_x86.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os_cpu/linux_x86/vm/globals_linux_x86.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,7 +44,7 @@ define_pd_global(uintx,JVMInvokeMethodSlack, 8192); -// Only used on 64 bit platforms +// Used on 64 bit platforms for UseCompressedOops base address or CDS define_pd_global(uintx,HeapBaseMinAddress, 2*G); // Only used on 64 bit Windows platforms define_pd_global(bool, UseVectoredExceptions, false); diff -r 36d1d483d5d6 -r da91efe96a93 src/os_cpu/linux_zero/vm/globals_linux_zero.hpp --- a/src/os_cpu/linux_zero/vm/globals_linux_zero.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os_cpu/linux_zero/vm/globals_linux_zero.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -42,7 +42,7 @@ define_pd_global(uintx, JVMInvokeMethodSlack, 8192); define_pd_global(bool, UseVectoredExceptions, false); -// Only used on 64 bit platforms +// Used on 64 bit platforms for UseCompressedOops base address or CDS define_pd_global(uintx, HeapBaseMinAddress, 2*G); #endif // OS_CPU_LINUX_ZERO_VM_GLOBALS_LINUX_ZERO_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/os_cpu/solaris_sparc/vm/globals_solaris_sparc.hpp --- a/src/os_cpu/solaris_sparc/vm/globals_solaris_sparc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os_cpu/solaris_sparc/vm/globals_solaris_sparc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,8 +33,12 @@ define_pd_global(uintx, JVMInvokeMethodSlack, 12288); define_pd_global(intx, CompilerThreadStackSize, 0); -// Only used on 64 bit platforms -define_pd_global(uintx, HeapBaseMinAddress, 4*G); +// Used on 64 bit platforms for UseCompressedOops base address or CDS +#ifdef _LP64 +define_pd_global(uintx, HeapBaseMinAddress, CONST64(4)*G); +#else +define_pd_global(uintx, HeapBaseMinAddress, 2*G); +#endif // Only used on 64 bit Windows platforms define_pd_global(bool, UseVectoredExceptions, false); diff -r 36d1d483d5d6 -r da91efe96a93 src/os_cpu/solaris_x86/vm/globals_solaris_x86.hpp --- a/src/os_cpu/solaris_x86/vm/globals_solaris_x86.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os_cpu/solaris_x86/vm/globals_solaris_x86.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,7 +43,7 @@ define_pd_global(intx, CompilerThreadStackSize, 0); -// Only used on 64 bit platforms +// Used on 64 bit platforms for UseCompressedOops base address or CDS define_pd_global(uintx,HeapBaseMinAddress, 256*M); // Only used on 64 bit Windows platforms define_pd_global(bool, UseVectoredExceptions, false); diff -r 36d1d483d5d6 -r da91efe96a93 src/os_cpu/windows_x86/vm/globals_windows_x86.hpp --- a/src/os_cpu/windows_x86/vm/globals_windows_x86.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/os_cpu/windows_x86/vm/globals_windows_x86.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,7 +45,7 @@ define_pd_global(uintx, JVMInvokeMethodSlack, 8192); -// Only used on 64 bit platforms +// Used on 64 bit platforms for UseCompressedOops base address or CDS define_pd_global(uintx, HeapBaseMinAddress, 2*G); // Only used on 64 bit Windows platforms define_pd_global(bool, UseVectoredExceptions, false); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/tools/whitebox/sun/hotspot/WhiteBox.java --- a/src/share/tools/whitebox/sun/hotspot/WhiteBox.java Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/tools/whitebox/sun/hotspot/WhiteBox.java Sat Sep 01 13:25:18 2012 -0400 @@ -63,6 +63,13 @@ public native long getObjectAddress(Object o); public native int getHeapOopSize(); + // Runtime + // Make sure class name is in the correct format + public boolean isClassAlive(String name) { + return isClassAlive0(name.replace('.', '/')); + } + private native boolean isClassAlive0(String name); + // G1 public native boolean g1InConcurrentMark(); public native boolean g1IsHumongous(Object o); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/adlc/formssel.cpp --- a/src/share/vm/adlc/formssel.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/adlc/formssel.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -2383,8 +2383,8 @@ if ( op->is_base_constant(globals) == Form::idealP ) { // Find the constant's index: _c0, _c1, _c2, ... , _cN uint idx = op->constant_position( globals, rep_var); - fprintf(fp," virtual bool disp_is_oop() const {"); - fprintf(fp, " return _c%d->isa_oop_ptr();", idx); + fprintf(fp," virtual relocInfo::relocType disp_reloc() const {"); + fprintf(fp, " return _c%d->reloc();", idx); fprintf(fp, " }\n"); } } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/adlc/main.cpp --- a/src/share/vm/adlc/main.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/adlc/main.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -215,9 +215,9 @@ AD.addInclude(AD._CPP_file, "asm/assembler.hpp"); AD.addInclude(AD._CPP_file, "code/vmreg.hpp"); AD.addInclude(AD._CPP_file, "gc_interface/collectedHeap.inline.hpp"); - AD.addInclude(AD._CPP_file, "oops/compiledICHolderOop.hpp"); + AD.addInclude(AD._CPP_file, "oops/compiledICHolder.hpp"); AD.addInclude(AD._CPP_file, "oops/markOop.hpp"); - AD.addInclude(AD._CPP_file, "oops/methodOop.hpp"); + AD.addInclude(AD._CPP_file, "oops/method.hpp"); AD.addInclude(AD._CPP_file, "oops/oop.inline.hpp"); AD.addInclude(AD._CPP_file, "oops/oop.inline2.hpp"); AD.addInclude(AD._CPP_file, "opto/cfgnode.hpp"); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/adlc/output_c.cpp --- a/src/share/vm/adlc/output_c.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/adlc/output_c.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1884,7 +1884,6 @@ bool _doing_emit_hi; bool _doing_emit_lo; bool _may_reloc; - bool _must_reloc; reloc_format _reloc_form; const char * _reloc_type; bool _processing_noninput; @@ -1923,7 +1922,6 @@ _doing_emit_hi = false; _doing_emit_lo = false; _may_reloc = false; - _must_reloc = false; _reloc_form = RELOC_NONE; _reloc_type = AdlcVMDeps::none_reloc_type(); _strings_to_emit.clear(); @@ -2195,7 +2193,7 @@ _reg_status = LITERAL_ACCESSED; emit_rep_var( rep_var ); - fprintf(_fp,"->disp_is_oop())"); + fprintf(_fp,"->disp_reloc())"); // skip trailing $Address _strings_to_emit.iter(); @@ -2232,14 +2230,6 @@ } - void gen_emit_x_reloc(const char *d32_lo_hi ) { - fprintf(_fp,"emit_%s_reloc(cbuf, ", d32_lo_hi ); - emit_replacement(); fprintf(_fp,", "); - emit_reloc_type( _reloc_type ); fprintf(_fp,", "); - fprintf(_fp, "%d", _reloc_form);fprintf(_fp, ");"); - } - - void emit() { // // "emit_d32_reloc(" or "emit_hi_reloc" or "emit_lo_reloc" @@ -2254,10 +2244,6 @@ fprintf( _fp, "emit_%s(cbuf, ", d32_hi_lo ); emit_replacement(); fprintf(_fp, ")"); } - else if ( _must_reloc ) { - // Must emit relocation information - gen_emit_x_reloc( d32_hi_lo ); - } else { // Emit RUNTIME CHECK to see if value needs relocation info // If emitting a relocatable address, use 'emit_d32_reloc' @@ -2266,10 +2252,15 @@ && !(_doing_disp && _doing_constant), "Must be emitting either a displacement or a constant"); fprintf(_fp,"\n"); - fprintf(_fp,"if ( opnd_array(%d)->%s_is_oop() ) {\n", + fprintf(_fp,"if ( opnd_array(%d)->%s_reloc() != relocInfo::none ) {\n", _operand_idx, disp_constant); fprintf(_fp," "); - gen_emit_x_reloc( d32_hi_lo ); fprintf(_fp,"\n"); + fprintf(_fp,"emit_%s_reloc(cbuf, ", d32_hi_lo ); + emit_replacement(); fprintf(_fp,", "); + fprintf(_fp,"opnd_array(%d)->%s_reloc(), ", + _operand_idx, disp_constant); + fprintf(_fp, "%d", _reloc_form);fprintf(_fp, ");"); + fprintf(_fp,"\n"); fprintf(_fp,"} else {\n"); fprintf(_fp," emit_%s(cbuf, ", d32_hi_lo); emit_replacement(); fprintf(_fp, ");\n"); fprintf(_fp,"}"); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/adlc/output_h.cpp --- a/src/share/vm/adlc/output_h.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/adlc/output_h.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1363,8 +1363,8 @@ fprintf(fp, " return _c0->get_con();"); fprintf(fp, " }\n"); // Generate query to determine if this pointer is an oop - fprintf(fp," virtual bool constant_is_oop() const {"); - fprintf(fp, " return _c0->isa_oop_ptr();"); + fprintf(fp," virtual relocInfo::relocType constant_reloc() const {"); + fprintf(fp, " return _c0->reloc();"); fprintf(fp, " }\n"); } else if (!strcmp(oper->ideal_type(_globalNames), "ConN")) { @@ -1373,8 +1373,8 @@ fprintf(fp, " return _c0->get_ptrtype()->get_con();"); fprintf(fp, " }\n"); // Generate query to determine if this pointer is an oop - fprintf(fp," virtual bool constant_is_oop() const {"); - fprintf(fp, " return _c0->get_ptrtype()->isa_oop_ptr();"); + fprintf(fp," virtual relocInfo::relocType constant_reloc() const {"); + fprintf(fp, " return _c0->get_ptrtype()->reloc();"); fprintf(fp, " }\n"); } else if (!strcmp(oper->ideal_type(_globalNames), "ConL")) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/asm/codeBuffer.cpp --- a/src/share/vm/asm/codeBuffer.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/asm/codeBuffer.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,9 @@ #include "precompiled.hpp" #include "asm/codeBuffer.hpp" #include "compiler/disassembler.hpp" +#include "memory/gcLocker.hpp" +#include "oops/methodData.hpp" +#include "oops/oop.inline.hpp" #include "utilities/copy.hpp" #include "utilities/xmlstream.hpp" @@ -142,7 +145,7 @@ void CodeBuffer::initialize_oop_recorder(OopRecorder* r) { assert(_oop_recorder == &_default_oop_recorder && _default_oop_recorder.is_unused(), "do this once"); - DEBUG_ONLY(_default_oop_recorder.oop_size()); // force unused OR to be frozen + DEBUG_ONLY(_default_oop_recorder.freeze()); // force unused OR to be frozen _oop_recorder = r; } @@ -489,6 +492,87 @@ dest->verify_section_allocation(); } +void CodeBuffer::finalize_oop_references(methodHandle mh) { + No_Safepoint_Verifier nsv; + + GrowableArray oops; + + // Make sure that immediate metadata records something in the OopRecorder + for (int n = (int) SECT_FIRST; n < (int) SECT_LIMIT; n++) { + // pull code out of each section + CodeSection* cs = code_section(n); + if (cs->is_empty()) continue; // skip trivial section + RelocIterator iter(cs); + while (iter.next()) { + if (iter.type() == relocInfo::metadata_type) { + metadata_Relocation* md = iter.metadata_reloc(); + if (md->metadata_is_immediate()) { + Metadata* m = md->metadata_value(); + if (oop_recorder()->is_real(m)) { + oop o = NULL; + if (m->is_methodData()) { + m = ((MethodData*)m)->method(); + } + if (m->is_method()) { + m = ((Method*)m)->method_holder(); + } + if (m->is_klass()) { + o = ((Klass*)m)->class_loader(); + } else { + // XXX This will currently occur for MDO which don't + // have a backpointer. This has to be fixed later. + m->print(); + ShouldNotReachHere(); + } + if (o != NULL && oops.find(o) == -1) { + oops.append(o); + } + } + } + } + } + } + + if (!oop_recorder()->is_unused()) { + for (int i = 0; i < oop_recorder()->metadata_count(); i++) { + Metadata* m = oop_recorder()->metadata_at(i); + if (oop_recorder()->is_real(m)) { + oop o = NULL; + if (m->is_methodData()) { + m = ((MethodData*)m)->method(); + } + if (m->is_method()) { + m = ((Method*)m)->method_holder(); + } + if (m->is_klass()) { + o = ((Klass*)m)->class_loader(); + } else { + m->print(); + ShouldNotReachHere(); + } + if (o != NULL && oops.find(o) == -1) { + oops.append(o); + } + } + } + + } + + // Add the class loader of Method* for the nmethod itself + oop cl = mh->method_holder()->class_loader(); + if (cl != NULL) { + oops.append(cl); + } + + // Add any oops that we've found + Thread* thread = Thread::current(); + for (int i = 0; i < oops.length(); i++) { + oop_recorder()->find_index((jobject)thread->handle_area()->allocate_handle(oops.at(i))); + } +} + + + csize_t CodeBuffer::total_offset_of(CodeSection* cs) const { csize_t size_so_far = 0; for (int n = (int) SECT_FIRST; n < (int) SECT_LIMIT; n++) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/asm/codeBuffer.hpp --- a/src/share/vm/asm/codeBuffer.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/asm/codeBuffer.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -486,6 +486,9 @@ bool insts_contains(address pc) const { return _insts.contains(pc); } bool insts_contains2(address pc) const { return _insts.contains2(pc); } + // Record any extra oops required to keep embedded metadata alive + void finalize_oop_references(methodHandle method); + // Allocated size in all sections, when aligned and concatenated // (this is the eventual state of the content in its final // CodeBlob). @@ -504,6 +507,12 @@ return (recorder == NULL)? 0: recorder->oop_size(); } + // allocated size of any and all recorded metadata + csize_t total_metadata_size() const { + OopRecorder* recorder = oop_recorder(); + return (recorder == NULL)? 0: recorder->metadata_size(); + } + // Configuration functions, called immediately after the CB is constructed. // The section sizes are subtracted from the original insts section. // Note: Call them in reverse section order, because each steals from insts. @@ -532,9 +541,9 @@ copy_relocations_to(blob); copy_code_to(blob); } - void copy_oops_to(nmethod* nm) { + void copy_values_to(nmethod* nm) { if (!oop_recorder()->is_unused()) { - oop_recorder()->copy_to(nm); + oop_recorder()->copy_values_to(nm); } } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_CodeStubs.hpp --- a/src/share/vm/c1/c1_CodeStubs.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_CodeStubs.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -346,7 +346,8 @@ public: enum PatchID { access_field_id, - load_klass_id + load_klass_id, + load_mirror_id }; enum constants { patch_info_size = 3 @@ -360,7 +361,7 @@ Label _patch_site_continuation; Register _obj; CodeEmitInfo* _info; - int _oop_index; // index of the patchable oop in nmethod oop table if needed + int _index; // index of the patchable oop or Klass* in nmethod oop or metadata table if needed static int _patch_info_offset; void align_patch_site(MacroAssembler* masm); @@ -368,10 +369,10 @@ public: static int patch_info_offset() { return _patch_info_offset; } - PatchingStub(MacroAssembler* masm, PatchID id, int oop_index = -1): + PatchingStub(MacroAssembler* masm, PatchID id, int index = -1): _id(id) , _info(NULL) - , _oop_index(oop_index) { + , _index(index) { if (os::is_MP()) { // force alignment of patch sites on MP hardware so we // can guarantee atomic writes to the patch site. @@ -399,8 +400,8 @@ } NativeMovRegMem* n_move = nativeMovRegMem_at(pc_start()); n_move->set_offset(field_offset); - } else if (_id == load_klass_id) { - assert(_obj != noreg, "must have register object for load_klass"); + } else if (_id == load_klass_id || _id == load_mirror_id) { + assert(_obj != noreg, "must have register object for load_klass/load_mirror"); #ifdef ASSERT // verify that we're pointing at a NativeMovConstReg nativeMovConstReg_at(pc_start()); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_GraphBuilder.cpp --- a/src/share/vm/c1/c1_GraphBuilder.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_GraphBuilder.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -887,7 +887,7 @@ patch_state = copy_state_before(); t = new ObjectConstant(obj); } else { - assert(!obj->is_klass(), "must be java_mirror of klass"); + assert(obj->is_instance(), "must be java_mirror of klass"); t = new InstanceConstant(obj->as_instance()); } break; @@ -1434,7 +1434,7 @@ if (compilation()->env()->dtrace_method_probes()) { // Report exit from inline methods Values* args = new Values(1); - args->push(append(new Constant(new ObjectConstant(method())))); + args->push(append(new Constant(new MethodConstant(method())))); append(new RuntimeCall(voidType, "dtrace_method_exit", CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), args)); } @@ -1887,7 +1887,7 @@ code == Bytecodes::_invokeinterface; Values* args = state()->pop_arguments(target->arg_size_no_receiver()); Value recv = has_receiver ? apop() : NULL; - int vtable_index = methodOopDesc::invalid_vtable_index; + int vtable_index = Method::invalid_vtable_index; #ifdef SPARC // Currently only supported on Sparc. @@ -3544,7 +3544,7 @@ // Report exit from inline methods. We don't have a stream here // so pass an explicit bci of SynchronizationEntryBCI. Values* args = new Values(1); - args->push(append_with_bci(new Constant(new ObjectConstant(method())), bci)); + args->push(append_with_bci(new Constant(new MethodConstant(method())), bci)); append_with_bci(new RuntimeCall(voidType, "dtrace_method_exit", CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), args), bci); } @@ -3732,7 +3732,7 @@ if (compilation()->env()->dtrace_method_probes()) { Values* args = new Values(1); - args->push(append(new Constant(new ObjectConstant(method())))); + args->push(append(new Constant(new MethodConstant(method())))); append(new RuntimeCall(voidType, "dtrace_method_entry", CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_entry), args)); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_Instruction.cpp --- a/src/share/vm/c1/c1_Instruction.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_Instruction.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -396,6 +396,8 @@ switch (type()->tag()) { case intTag: return HASH2(name(), type()->as_IntConstant()->value()); + case addressTag: + return HASH2(name(), type()->as_AddressConstant()->value()); case longTag: { jlong temp = type()->as_LongConstant()->value(); @@ -411,6 +413,11 @@ case objectTag: assert(type()->as_ObjectType()->is_loaded(), "can't handle unloaded values"); return HASH2(name(), type()->as_ObjectType()->constant_value()); + case metaDataTag: + assert(type()->as_MetadataType()->is_loaded(), "can't handle unloaded values"); + return HASH2(name(), type()->as_MetadataType()->constant_value()); + default: + ShouldNotReachHere(); } } return 0; @@ -456,6 +463,14 @@ t1->is_loaded() && t2->is_loaded() && t1->constant_value() == t2->constant_value()); } + case metaDataTag: + { + MetadataType* t1 = type()->as_MetadataType(); + MetadataType* t2 = v->type()->as_MetadataType(); + return (t1 != NULL && t2 != NULL && + t1->is_loaded() && t2->is_loaded() && + t1->constant_value() == t2->constant_value()); + } } return false; } @@ -508,6 +523,18 @@ } break; } + case metaDataTag: { + ciMetadata* xvalue = lt->as_MetadataType()->constant_value(); + ciMetadata* yvalue = rt->as_MetadataType()->constant_value(); + assert(xvalue != NULL && yvalue != NULL, "not constants"); + if (xvalue->is_loaded() && yvalue->is_loaded()) { + switch (cond) { + case If::eql: return xvalue == yvalue ? cond_true : cond_false; + case If::neq: return xvalue != yvalue ? cond_true : cond_false; + } + } + break; + } } return not_comparable; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_Instruction.hpp --- a/src/share/vm/c1/c1_Instruction.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_Instruction.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -913,7 +913,7 @@ Value value() const { return _value; } bool needs_write_barrier() const { return check_flag(NeedsWriteBarrierFlag); } bool needs_store_check() const { return check_flag(NeedsStoreCheckFlag); } - // Helpers for methodDataOop profiling + // Helpers for MethodData* profiling void set_should_profile(bool value) { set_flag(ProfileMDOFlag, value); } void set_profiled_method(ciMethod* method) { _profiled_method = method; } void set_profiled_bci(int bci) { _profiled_bci = bci; } @@ -1349,7 +1349,7 @@ virtual bool can_trap() const { return true; } virtual void input_values_do(ValueVisitor* f) { StateSplit::input_values_do(f); f->visit(&_obj); } - // Helpers for methodDataOop profiling + // Helpers for MethodData* profiling void set_should_profile(bool value) { set_flag(ProfileMDOFlag, value); } void set_profiled_method(ciMethod* method) { _profiled_method = method; } void set_profiled_bci(int bci) { _profiled_bci = bci; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_InstructionPrinter.cpp --- a/src/share/vm/c1/c1_InstructionPrinter.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_InstructionPrinter.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -133,9 +133,6 @@ output()->print("null"); } else if (!value->is_loaded()) { output()->print("", value); - } else if (value->is_method()) { - ciMethod* m = (ciMethod*)value; - output()->print("", m->holder()->name()->as_utf8(), m->name()->as_utf8()); } else { output()->print("as_MethodConstant() != NULL) { + ciMethod* m = type->as_MethodConstant()->value(); + output()->print("", m->holder()->name()->as_utf8(), m->name()->as_utf8()); } else { output()->print("???"); } @@ -461,7 +461,10 @@ output()->print("type_cast("); print_value(x->obj()); output()->print(") "); - print_klass(x->declared_type()->klass()); + if (x->declared_type()->is_klass()) + print_klass(x->declared_type()->as_klass()); + else + output()->print(type2name(x->declared_type()->basic_type())); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_LIR.cpp --- a/src/share/vm/c1/c1_LIR.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_LIR.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -85,14 +85,17 @@ LIR_Opr LIR_OprFact::value_type(ValueType* type) { ValueTag tag = type->tag(); switch (tag) { - case objectTag : { + case metaDataTag : { ClassConstant* c = type->as_ClassConstant(); if (c != NULL && !c->value()->is_loaded()) { - return LIR_OprFact::oopConst(NULL); + return LIR_OprFact::metadataConst(NULL); } else { + return LIR_OprFact::metadataConst(c->value()->constant_encoding()); + } + } + case objectTag : { return LIR_OprFact::oopConst(type->as_ObjectType()->encoding()); } - } case addressTag: return LIR_OprFact::addressConst(type->as_AddressConstant()->value()); case intTag : return LIR_OprFact::intConst(type->as_IntConstant()->value()); case floatTag : return LIR_OprFact::floatConst(type->as_FloatConstant()->value()); @@ -148,12 +151,12 @@ #ifdef _LP64 assert(base()->is_cpu_register(), "wrong base operand"); assert(index()->is_illegal() || index()->is_double_cpu(), "wrong index operand"); - assert(base()->type() == T_OBJECT || base()->type() == T_LONG, + assert(base()->type() == T_OBJECT || base()->type() == T_LONG || base()->type() == T_METADATA, "wrong type for addresses"); #else assert(base()->is_single_cpu(), "wrong base operand"); assert(index()->is_illegal() || index()->is_single_cpu(), "wrong index operand"); - assert(base()->type() == T_OBJECT || base()->type() == T_INT, + assert(base()->type() == T_OBJECT || base()->type() == T_INT || base()->type() == T_METADATA, "wrong type for addresses"); #endif } @@ -176,6 +179,7 @@ case T_LONG: case T_OBJECT: case T_ADDRESS: + case T_METADATA: case T_VOID: return ::type2char(t); @@ -219,6 +223,7 @@ case T_INT: case T_ADDRESS: case T_OBJECT: + case T_METADATA: case T_ARRAY: assert((kind_field() == cpu_register || kind_field() == stack_value) && size_field() == single_size, "must match"); @@ -1164,6 +1169,9 @@ append(new LIR_Op1(lir_move, LIR_OprFact::oopConst(o), reg, T_OBJECT, lir_patch_normal, info)); } +void LIR_List::klass2reg_patch(Metadata* o, LIR_Opr reg, CodeEmitInfo* info) { + append(new LIR_Op1(lir_move, LIR_OprFact::metadataConst(o), reg, T_METADATA, lir_patch_normal, info)); +} void LIR_List::load(LIR_Address* addr, LIR_Opr src, CodeEmitInfo* info, LIR_PatchCode patch_code) { append(new LIR_Op1( @@ -1543,6 +1551,7 @@ case T_FLOAT: out->print("flt:%f", as_jfloat()); break; case T_DOUBLE: out->print("dbl:%f", as_jdouble()); break; case T_OBJECT: out->print("obj:0x%x", as_jobject()); break; + case T_METADATA: out->print("metadata:0x%x", as_metadata());break; default: out->print("%3d:0x%x",type(), as_jdouble()); break; } } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_LIR.hpp --- a/src/share/vm/c1/c1_LIR.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_LIR.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -26,7 +26,7 @@ #define SHARE_VM_C1_C1_LIR_HPP #include "c1/c1_ValueType.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" class BlockBegin; class BlockList; @@ -108,6 +108,14 @@ _value.set_type(T_INT); _value.set_jint((jint)p); #endif } + LIR_Const(Metadata* m) { + _value.set_type(T_METADATA); +#ifdef _LP64 + _value.set_jlong((jlong)m); +#else + _value.set_jint((jint)m); +#endif // _LP64 + } virtual BasicType type() const { return _value.get_type(); } virtual LIR_Const* as_constant() { return this; } @@ -122,8 +130,10 @@ #ifdef _LP64 address as_pointer() const { type_check(T_LONG ); return (address)_value.get_jlong(); } + Metadata* as_metadata() const { type_check(T_METADATA); return (Metadata*)_value.get_jlong(); } #else address as_pointer() const { type_check(T_INT ); return (address)_value.get_jint(); } + Metadata* as_metadata() const { type_check(T_METADATA); return (Metadata*)_value.get_jint(); } #endif @@ -808,6 +818,7 @@ static LIR_Opr intptrConst(intptr_t v) { return (LIR_Opr)(new LIR_Const((void*)v)); } static LIR_Opr illegal() { return (LIR_Opr)-1; } static LIR_Opr addressConst(jint i) { return (LIR_Opr)(new LIR_Const(i, true)); } + static LIR_Opr metadataConst(Metadata* m) { return (LIR_Opr)(new LIR_Const(m)); } static LIR_Opr value_type(ValueType* type); static LIR_Opr dummy_value_type(ValueType* type); @@ -1541,7 +1552,7 @@ CodeEmitInfo* info_for_exception() const { return _info_for_exception; } CodeStub* stub() const { return _stub; } - // methodDataOop profiling + // MethodData* profiling void set_profiled_method(ciMethod *method) { _profiled_method = method; } void set_profiled_bci(int bci) { _profiled_bci = bci; } void set_should_profile(bool b) { _should_profile = b; } @@ -1998,6 +2009,9 @@ void oop2reg (jobject o, LIR_Opr reg) { append(new LIR_Op1(lir_move, LIR_OprFact::oopConst(o), reg)); } void oop2reg_patch(jobject o, LIR_Opr reg, CodeEmitInfo* info); + void oop2reg (Metadata* o, LIR_Opr reg) { append(new LIR_Op1(lir_move, LIR_OprFact::metadataConst(o), reg)); } + void klass2reg_patch(Metadata* o, LIR_Opr reg, CodeEmitInfo* info); + void return_op(LIR_Opr result) { append(new LIR_Op1(lir_return, result)); } void safepoint(LIR_Opr tmp, CodeEmitInfo* info) { append(new LIR_Op1(lir_safepoint, tmp, info)); } @@ -2149,7 +2163,7 @@ LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check, CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub, ciMethod* profiled_method, int profiled_bci); - // methodDataOop profiling + // MethodData* profiling void profile_call(ciMethod* method, int bci, ciMethod* callee, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* cha_klass) { append(new LIR_OpProfileCall(lir_profile_call, method, bci, callee, mdo, recv, t1, cha_klass)); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_LIRAssembler.cpp --- a/src/share/vm/c1/c1_LIRAssembler.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_LIRAssembler.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -74,13 +74,19 @@ } } else if (patch->id() == PatchingStub::load_klass_id) { switch (code) { - case Bytecodes::_putstatic: - case Bytecodes::_getstatic: case Bytecodes::_new: case Bytecodes::_anewarray: case Bytecodes::_multianewarray: case Bytecodes::_instanceof: case Bytecodes::_checkcast: + break; + default: + ShouldNotReachHere(); + } + } else if (patch->id() == PatchingStub::load_mirror_id) { + switch (code) { + case Bytecodes::_putstatic: + case Bytecodes::_getstatic: case Bytecodes::_ldc: case Bytecodes::_ldc_w: break; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_LIRAssembler.hpp --- a/src/share/vm/c1/c1_LIRAssembler.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_LIRAssembler.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ #include "c1/c1_CodeStubs.hpp" #include "ci/ciMethodData.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "utilities/top.hpp" class Compilation; @@ -84,6 +84,9 @@ void jobject2reg(jobject o, Register reg); void jobject2reg_with_patching(Register reg, CodeEmitInfo* info); + void metadata2reg(Metadata* o, Register reg); + void klass2reg_with_patching(Register reg, CodeEmitInfo* info); + void emit_stubs(CodeStubList* stub_list); // addresses diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_LIRGenerator.cpp --- a/src/share/vm/c1/c1_LIRGenerator.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_LIRGenerator.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -30,8 +30,8 @@ #include "c1/c1_LIRGenerator.hpp" #include "c1/c1_ValueStack.hpp" #include "ci/ciArrayKlass.hpp" -#include "ci/ciCPCache.hpp" #include "ci/ciInstance.hpp" +#include "ci/ciObjArray.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/stubRoutines.hpp" #include "utilities/bitMap.inline.hpp" @@ -461,10 +461,10 @@ } -void LIRGenerator::jobject2reg_with_patching(LIR_Opr r, ciObject* obj, CodeEmitInfo* info) { +void LIRGenerator::klass2reg_with_patching(LIR_Opr r, ciMetadata* obj, CodeEmitInfo* info) { if (!obj->is_loaded() || PatchALot) { assert(info != NULL, "info must be set if class is not loaded"); - __ oop2reg_patch(NULL, r, info); + __ klass2reg_patch(NULL, r, info); } else { // no patching needed __ oop2reg(obj->constant_encoding(), r); @@ -657,7 +657,7 @@ void LIRGenerator::new_instance(LIR_Opr dst, ciInstanceKlass* klass, LIR_Opr scratch1, LIR_Opr scratch2, LIR_Opr scratch3, LIR_Opr scratch4, LIR_Opr klass_reg, CodeEmitInfo* info) { - jobject2reg_with_patching(klass_reg, klass, info); + klass2reg_with_patching(klass_reg, klass, info); // If klass is not loaded we do not know if the klass has finalizers: if (UseFastNewInstance && klass->is_loaded() && !Klass::layout_helper_needs_slow_path(klass->layout_helper())) { @@ -1189,7 +1189,7 @@ if (compilation()->env()->dtrace_method_probes()) { BasicTypeList signature; signature.append(LP64_ONLY(T_LONG) NOT_LP64(T_INT)); // thread - signature.append(T_OBJECT); // methodOop + signature.append(T_OBJECT); // Method* LIR_OprList* args = new LIR_OprList(); args->append(getThreadPointer()); LIR_Opr meth = new_register(T_OBJECT); @@ -1286,7 +1286,7 @@ if (x->needs_null_check()) { info = state_for(x); } - __ move(new LIR_Address(rcvr.result(), oopDesc::klass_offset_in_bytes(), T_OBJECT), result, info); + __ move(new LIR_Address(rcvr.result(), oopDesc::klass_offset_in_bytes(), UseCompressedKlassPointers ? T_OBJECT : T_ADDRESS), result, info); __ move_wide(new LIR_Address(result, in_bytes(Klass::java_mirror_offset()), T_OBJECT), result); } @@ -2293,7 +2293,7 @@ // We have determined that offset == referent_offset && src != null. // if (src->_klass->_reference_type == REF_NONE) -> continue __ move(new LIR_Address(src.result(), oopDesc::klass_offset_in_bytes(), T_OBJECT), src_klass); - LIR_Address* reference_type_addr = new LIR_Address(src_klass, in_bytes(instanceKlass::reference_type_offset()), T_BYTE); + LIR_Address* reference_type_addr = new LIR_Address(src_klass, in_bytes(InstanceKlass::reference_type_offset()), T_BYTE); LIR_Opr reference_type = new_register(T_INT); __ move(reference_type_addr, reference_type); __ cmp(lir_cond_equal, reference_type, LIR_OprFact::intConst(REF_NONE)); @@ -2608,7 +2608,7 @@ if (compilation()->env()->dtrace_method_probes()) { BasicTypeList signature; signature.append(LP64_ONLY(T_LONG) NOT_LP64(T_INT)); // thread - signature.append(T_OBJECT); // methodOop + signature.append(T_OBJECT); // Method* LIR_OprList* args = new LIR_OprList(); args->append(getThreadPointer()); LIR_Opr meth = new_register(T_OBJECT); @@ -2794,7 +2794,7 @@ SharedRuntime::get_resolve_virtual_call_stub(), arg_list, info); } else { - int entry_offset = instanceKlass::vtable_start_offset() + x->vtable_index() * vtableEntry::size(); + int entry_offset = InstanceKlass::vtable_start_offset() + x->vtable_index() * vtableEntry::size(); int vtable_offset = entry_offset * wordSize + vtableEntry::method_offset_in_bytes(); __ call_virtual(target, receiver, result_register, vtable_offset, arg_list, info); } @@ -2905,11 +2905,12 @@ void LIRGenerator::do_ClassIDIntrinsic(Intrinsic* x) { CodeEmitInfo* info = state_for(x); CodeEmitInfo* info2 = new CodeEmitInfo(info); // Clone for the second null check + BasicType klass_pointer_type = NOT_LP64(T_INT) LP64_ONLY(T_LONG); assert(info != NULL, "must have info"); LIRItem arg(x->argument_at(1), this); arg.load_item(); - LIR_Opr klass = new_register(T_OBJECT); - __ move(new LIR_Address(arg.result(), java_lang_Class::klass_offset_in_bytes(), T_OBJECT), klass, info); + LIR_Opr klass = new_pointer_register(); + __ move(new LIR_Address(arg.result(), java_lang_Class::klass_offset_in_bytes(), klass_pointer_type), klass, info); LIR_Opr id = new_register(T_LONG); ByteSize offset = TRACE_ID_OFFSET; LIR_Address* trace_id_addr = new LIR_Address(klass, in_bytes(offset), T_LONG); @@ -3034,13 +3035,13 @@ LIR_Opr counter_holder = new_register(T_OBJECT); LIR_Opr meth; if (level == CompLevel_limited_profile) { - offset = in_bytes(backedge ? methodOopDesc::backedge_counter_offset() : - methodOopDesc::invocation_counter_offset()); + offset = in_bytes(backedge ? Method::backedge_counter_offset() : + Method::invocation_counter_offset()); __ oop2reg(method->constant_encoding(), counter_holder); meth = counter_holder; } else if (level == CompLevel_full_profile) { - offset = in_bytes(backedge ? methodDataOopDesc::backedge_counter_offset() : - methodDataOopDesc::invocation_counter_offset()); + offset = in_bytes(backedge ? MethodData::backedge_counter_offset() : + MethodData::invocation_counter_offset()); ciMethodData* md = method->method_data_or_null(); assert(md != NULL, "Sanity"); __ oop2reg(md->constant_encoding(), counter_holder); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_LIRGenerator.hpp --- a/src/share/vm/c1/c1_LIRGenerator.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_LIRGenerator.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -306,7 +306,7 @@ void store_stack_parameter (LIR_Opr opr, ByteSize offset_from_sp_in_bytes); - void jobject2reg_with_patching(LIR_Opr r, ciObject* obj, CodeEmitInfo* info); + void klass2reg_with_patching(LIR_Opr r, ciMetadata* obj, CodeEmitInfo* info); // this loads the length and compares against the index void array_range_check (LIR_Opr array, LIR_Opr index, CodeEmitInfo* null_check_info, CodeEmitInfo* range_check_info); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_MacroAssembler.hpp --- a/src/share/vm/c1/c1_MacroAssembler.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_MacroAssembler.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -107,10 +107,10 @@ int stub_id() const { return _stub_id; } // runtime calls (return offset of call to be used by GC map) - int call_RT(Register oop_result1, Register oop_result2, address entry, int args_size = 0); - int call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1); - int call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1, Register arg2); - int call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1, Register arg2, Register arg3); + int call_RT(Register oop_result1, Register metadata_result, address entry, int args_size = 0); + int call_RT(Register oop_result1, Register metadata_result, address entry, Register arg1); + int call_RT(Register oop_result1, Register metadata_result, address entry, Register arg1, Register arg2); + int call_RT(Register oop_result1, Register metadata_result, address entry, Register arg1, Register arg2, Register arg3); }; #endif // SHARE_VM_C1_C1_MACROASSEMBLER_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_Runtime1.cpp --- a/src/share/vm/c1/c1_Runtime1.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_Runtime1.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -307,10 +307,10 @@ } -JRT_ENTRY(void, Runtime1::new_instance(JavaThread* thread, klassOopDesc* klass)) +JRT_ENTRY(void, Runtime1::new_instance(JavaThread* thread, Klass* klass)) NOT_PRODUCT(_new_instance_slowcase_cnt++;) - assert(oop(klass)->is_klass(), "not a class"); + assert(klass->is_klass(), "not a class"); instanceKlassHandle h(thread, klass); h->check_valid_for_instantiation(true, CHECK); // make sure klass is initialized @@ -321,12 +321,12 @@ JRT_END -JRT_ENTRY(void, Runtime1::new_type_array(JavaThread* thread, klassOopDesc* klass, jint length)) +JRT_ENTRY(void, Runtime1::new_type_array(JavaThread* thread, Klass* klass, jint length)) NOT_PRODUCT(_new_type_array_slowcase_cnt++;) // Note: no handle for klass needed since they are not used // anymore after new_typeArray() and no GC can happen before. // (This may have to change if this code changes!) - assert(oop(klass)->is_klass(), "not a class"); + assert(klass->is_klass(), "not a class"); BasicType elt_type = typeArrayKlass::cast(klass)->element_type(); oop obj = oopFactory::new_typeArray(elt_type, length, CHECK); thread->set_vm_result(obj); @@ -339,14 +339,14 @@ JRT_END -JRT_ENTRY(void, Runtime1::new_object_array(JavaThread* thread, klassOopDesc* array_klass, jint length)) +JRT_ENTRY(void, Runtime1::new_object_array(JavaThread* thread, Klass* array_klass, jint length)) NOT_PRODUCT(_new_object_array_slowcase_cnt++;) // Note: no handle for klass needed since they are not used // anymore after new_objArray() and no GC can happen before. // (This may have to change if this code changes!) - assert(oop(array_klass)->is_klass(), "not a class"); - klassOop elem_klass = objArrayKlass::cast(array_klass)->element_klass(); + assert(array_klass->is_klass(), "not a class"); + Klass* elem_klass = objArrayKlass::cast(array_klass)->element_klass(); objArrayOop obj = oopFactory::new_objArray(elem_klass, length, CHECK); thread->set_vm_result(obj); // This is pretty rare but this runtime patch is stressful to deoptimization @@ -357,10 +357,10 @@ JRT_END -JRT_ENTRY(void, Runtime1::new_multi_array(JavaThread* thread, klassOopDesc* klass, int rank, jint* dims)) +JRT_ENTRY(void, Runtime1::new_multi_array(JavaThread* thread, Klass* klass, int rank, jint* dims)) NOT_PRODUCT(_new_multi_array_slowcase_cnt++;) - assert(oop(klass)->is_klass(), "not a class"); + assert(klass->is_klass(), "not a class"); assert(rank >= 1, "rank must be nonzero"); oop obj = arrayKlass::cast(klass)->multi_allocate(rank, dims, CHECK); thread->set_vm_result(obj); @@ -383,7 +383,7 @@ // associated with the top activation record. The inlinee (that is possibly included in the enclosing // method) method oop is passed as an argument. In order to do that it is embedded in the code as // a constant. -static nmethod* counter_overflow_helper(JavaThread* THREAD, int branch_bci, methodOopDesc* m) { +static nmethod* counter_overflow_helper(JavaThread* THREAD, int branch_bci, Method* m) { nmethod* osr_nm = NULL; methodHandle method(THREAD, m); @@ -423,7 +423,7 @@ return osr_nm; } -JRT_BLOCK_ENTRY(address, Runtime1::counter_overflow(JavaThread* thread, int bci, methodOopDesc* method)) +JRT_BLOCK_ENTRY(address, Runtime1::counter_overflow(JavaThread* thread, int bci, Method* method)) nmethod* osr_nm; JRT_BLOCK osr_nm = counter_overflow_helper(thread, bci, method); @@ -702,7 +702,7 @@ JRT_END -static klassOop resolve_field_return_klass(methodHandle caller, int bci, TRAPS) { +static Klass* resolve_field_return_klass(methodHandle caller, int bci, TRAPS) { Bytecode_field field_access(caller, bci); // This can be static or non-static field access Bytecodes::Code code = field_access.code(); @@ -815,8 +815,12 @@ #endif // PRODUCT bool deoptimize_for_volatile = false; int patch_field_offset = -1; - KlassHandle init_klass(THREAD, klassOop(NULL)); // klass needed by access_field_patching code - Handle load_klass(THREAD, NULL); // oop needed by load_klass_patching code + KlassHandle init_klass(THREAD, NULL); // klass needed by load_klass_patching code + KlassHandle load_klass(THREAD, NULL); // klass needed by load_klass_patching code + Handle mirror(THREAD, NULL); // oop needed by load_mirror_patching code + bool load_klass_or_mirror_patch_id = + (stub_id == Runtime1::load_klass_patching_id || stub_id == Runtime1::load_mirror_patching_id); + if (stub_id == Runtime1::access_field_patching_id) { Bytecode_field field_access(caller_method, bci); @@ -839,15 +843,14 @@ #ifndef PRODUCT patch_field_type = result.field_type(); #endif - } else if (stub_id == Runtime1::load_klass_patching_id) { - oop k; + } else if (load_klass_or_mirror_patch_id) { + Klass* k = NULL; switch (code) { case Bytecodes::_putstatic: case Bytecodes::_getstatic: - { klassOop klass = resolve_field_return_klass(caller_method, bci, CHECK); - // Save a reference to the class that has to be checked for initialization + { Klass* klass = resolve_field_return_klass(caller_method, bci, CHECK); init_klass = KlassHandle(THREAD, klass); - k = klass->java_mirror(); + mirror = Handle(THREAD, klass->java_mirror()); } break; case Bytecodes::_new: @@ -872,7 +875,7 @@ break; case Bytecodes::_anewarray: { Bytecode_anewarray anew(caller_method(), caller_method->bcp_from(bci)); - klassOop ek = caller_method->constants()->klass_at(anew.index(), CHECK); + Klass* ek = caller_method->constants()->klass_at(anew.index(), CHECK); k = Klass::cast(ek)->array_klass(CHECK); } break; @@ -880,14 +883,14 @@ case Bytecodes::_ldc_w: { Bytecode_loadconstant cc(caller_method, bci); - k = cc.resolve_constant(CHECK); - assert(k != NULL && !k->is_klass(), "must be class mirror or other Java constant"); + oop m = cc.resolve_constant(CHECK); + mirror = Handle(THREAD, m); } break; default: Unimplemented(); } // convert to handle - load_klass = Handle(THREAD, k); + load_klass = KlassHandle(THREAD, k); } else { ShouldNotReachHere(); } @@ -913,7 +916,7 @@ // If we are patching in a non-perm oop, make sure the nmethod // is on the right list. - if (ScavengeRootsInCode && load_klass.not_null() && load_klass->is_scavengable()) { + if (ScavengeRootsInCode && mirror.not_null() && mirror()->is_scavengable()) { MutexLockerEx ml_code (CodeCache_lock, Mutex::_no_safepoint_check_flag); nmethod* nm = CodeCache::find_nmethod(caller_frame.pc()); guarantee(nm != NULL, "only nmethods can contain non-perm oops"); @@ -978,7 +981,7 @@ assert(n_move->offset() == 0 || (n_move->offset() == 4 && (patch_field_type == T_DOUBLE || patch_field_type == T_LONG)), "illegal offset for type"); assert(patch_field_offset >= 0, "illegal offset"); n_move->add_offset_in_bytes(patch_field_offset); - } else if (stub_id == Runtime1::load_klass_patching_id) { + } else if (load_klass_or_mirror_patch_id) { // If a getstatic or putstatic is referencing a klass which // isn't fully initialized, the patch body isn't copied into // place until initialization is complete. In this case the @@ -986,7 +989,7 @@ // initializing thread are forced to come into the VM and // block. do_patch = (code != Bytecodes::_getstatic && code != Bytecodes::_putstatic) || - instanceKlass::cast(init_klass())->is_initialized(); + InstanceKlass::cast(init_klass())->is_initialized(); NativeGeneralJump* jump = nativeGeneralJump_at(instr_pc); if (jump->jump_destination() == being_initialized_entry) { assert(do_patch == true, "initialization must be complete at this point"); @@ -997,60 +1000,80 @@ assert(n_copy->data() == 0 || n_copy->data() == (intptr_t)Universe::non_oop_word(), "illegal init value"); + if (stub_id == Runtime1::load_klass_patching_id) { assert(load_klass() != NULL, "klass not set"); n_copy->set_data((intx) (load_klass())); + } else { + assert(mirror() != NULL, "klass not set"); + n_copy->set_data((intx) (mirror())); + } if (TracePatching) { Disassembler::decode(copy_buff, copy_buff + *byte_count, tty); } #if defined(SPARC) || defined(PPC) - // Update the oop location in the nmethod with the proper - // oop. When the code was generated, a NULL was stuffed - // in the oop table and that table needs to be update to + // Update the location in the nmethod with the proper + // metadata. When the code was generated, a NULL was stuffed + // in the metadata table and that table needs to be update to // have the right value. On intel the value is kept - // directly in the instruction instead of in the oop + // directly in the instruction instead of in the metadata // table, so set_data above effectively updated the value. nmethod* nm = CodeCache::find_nmethod(instr_pc); assert(nm != NULL, "invalid nmethod_pc"); - RelocIterator oops(nm, copy_buff, copy_buff + 1); + RelocIterator mds(nm, copy_buff, copy_buff + 1); bool found = false; - while (oops.next() && !found) { - if (oops.type() == relocInfo::oop_type) { - oop_Relocation* r = oops.oop_reloc(); + while (mds.next() && !found) { + if (mds.type() == relocInfo::oop_type) { + assert(stub_id == Runtime1::load_mirror_patching_id, "wrong stub id"); + oop_Relocation* r = mds.oop_reloc(); oop* oop_adr = r->oop_addr(); - *oop_adr = load_klass(); + *oop_adr = mirror(); r->fix_oop_relocation(); found = true; + } else if (mds.type() == relocInfo::metadata_type) { + assert(stub_id == Runtime1::load_klass_patching_id, "wrong stub id"); + metadata_Relocation* r = mds.metadata_reloc(); + Metadata** metadata_adr = r->metadata_addr(); + *metadata_adr = load_klass(); + r->fix_metadata_relocation(); + found = true; } } - assert(found, "the oop must exist!"); + assert(found, "the metadata must exist!"); #endif } } else { ShouldNotReachHere(); } + if (do_patch) { // replace instructions // first replace the tail, then the call #ifdef ARM - if(stub_id == Runtime1::load_klass_patching_id && !VM_Version::supports_movw()) { + if(load_klass_or_mirror_patch_id && !VM_Version::supports_movw()) { nmethod* nm = CodeCache::find_nmethod(instr_pc); - oop* oop_addr = NULL; + address addr = NULL; assert(nm != NULL, "invalid nmethod_pc"); - RelocIterator oops(nm, copy_buff, copy_buff + 1); - while (oops.next()) { - if (oops.type() == relocInfo::oop_type) { - oop_Relocation* r = oops.oop_reloc(); - oop_addr = r->oop_addr(); + RelocIterator mds(nm, copy_buff, copy_buff + 1); + while (mds.next()) { + if (mds.type() == relocInfo::oop_type) { + assert(stub_id == Runtime1::load_mirror_patching_id, "wrong stub id"); + oop_Relocation* r = mds.oop_reloc(); + addr = (address)r->oop_addr(); + break; + } else if (mds.type() == relocInfo::metadata_type) { + assert(stub_id == Runtime1::load_klass_patching_id, "wrong stub id"); + metadata_Relocation* r = mds.metadata_reloc(); + addr = (address)r->metadata_addr(); break; } } - assert(oop_addr != NULL, "oop relocation must exist"); + assert(addr != NULL, "metadata relocation must exist"); copy_buff -= *byte_count; NativeMovConstReg* n_copy2 = nativeMovConstReg_at(copy_buff); - n_copy2->set_pc_relative_offset((address)oop_addr, instr_pc); + n_copy2->set_pc_relative_offset(addr, instr_pc); } #endif @@ -1063,8 +1086,12 @@ ICache::invalidate_range(instr_pc, *byte_count); NativeGeneralJump::replace_mt_safe(instr_pc, copy_buff); - if (stub_id == Runtime1::load_klass_patching_id) { - // update relocInfo to oop + if (load_klass_or_mirror_patch_id) { + relocInfo::relocType rtype = + (stub_id == Runtime1::load_klass_patching_id) ? + relocInfo::metadata_type : + relocInfo::oop_type; + // update relocInfo to metadata nmethod* nm = CodeCache::find_nmethod(instr_pc); assert(nm != NULL, "invalid nmethod_pc"); @@ -1073,18 +1100,19 @@ // future GCs. RelocIterator iter(nm, (address)instr_pc, (address)(instr_pc + 1)); relocInfo::change_reloc_info_for_address(&iter, (address) instr_pc, - relocInfo::none, relocInfo::oop_type); + relocInfo::none, rtype); #ifdef SPARC - // Sparc takes two relocations for an oop so update the second one. + // Sparc takes two relocations for an metadata so update the second one. address instr_pc2 = instr_pc + NativeMovConstReg::add_offset; RelocIterator iter2(nm, instr_pc2, instr_pc2 + 1); relocInfo::change_reloc_info_for_address(&iter2, (address) instr_pc2, - relocInfo::none, relocInfo::oop_type); + relocInfo::none, rtype); #endif #ifdef PPC { address instr_pc2 = instr_pc + NativeMovConstReg::lo_offset; RelocIterator iter2(nm, instr_pc2, instr_pc2 + 1); - relocInfo::change_reloc_info_for_address(&iter2, (address) instr_pc2, relocInfo::none, relocInfo::oop_type); + relocInfo::change_reloc_info_for_address(&iter2, (address) instr_pc2, + relocInfo::none, rtype); } #endif } @@ -1126,6 +1154,25 @@ return caller_is_deopted(); } +int Runtime1::move_mirror_patching(JavaThread* thread) { +// +// NOTE: we are still in Java +// + Thread* THREAD = thread; + debug_only(NoHandleMark nhm;) + { + // Enter VM mode + + ResetNoHandleMark rnhm; + patch_code(thread, load_mirror_patching_id); + } + // Back in JAVA, use no oops DON'T safepoint + + // Return true if calling code is deoptimized + + return caller_is_deopted(); +} + // // Entry point for compiled code. We want to patch a nmethod. // We don't do a normal VM transition here because we want to @@ -1187,8 +1234,8 @@ bs->write_ref_array((HeapWord*)dst_addr, length); return ac_ok; } else { - klassOop bound = objArrayKlass::cast(dst->klass())->element_klass(); - klassOop stype = objArrayKlass::cast(src->klass())->element_klass(); + Klass* bound = objArrayKlass::cast(dst->klass())->element_klass(); + Klass* stype = objArrayKlass::cast(src->klass())->element_klass(); if (stype == bound || Klass::cast(stype)->is_subtype_of(bound)) { // Elements are guaranteed to be subtypes, so no check necessary bs->write_ref_array_pre(dst_addr, length); @@ -1214,7 +1261,7 @@ if (length == 0) return ac_ok; if (src->is_typeArray()) { - const klassOop klass_oop = src->klass(); + Klass* const klass_oop = src->klass(); if (klass_oop != dst->klass()) return ac_failed; typeArrayKlass* klass = typeArrayKlass::cast(klass_oop); const int l2es = klass->log2_element_size(); @@ -1279,7 +1326,7 @@ // the return value as a boolean true. assert(mirror != NULL, "should null-check on mirror before calling"); - klassOop k = java_lang_Class::as_klassOop(mirror); + Klass* k = java_lang_Class::as_Klass(mirror); return (k != NULL && obj != NULL && obj->is_a(k)) ? 1 : 0; JRT_END diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_Runtime1.hpp --- a/src/share/vm/c1/c1_Runtime1.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_Runtime1.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -66,6 +66,7 @@ stub(deoptimize) \ stub(access_field_patching) \ stub(load_klass_patching) \ + stub(load_mirror_patching) \ stub(g1_pre_barrier_slow) \ stub(g1_post_barrier_slow) \ stub(fpu2long_stub) \ @@ -131,12 +132,12 @@ Register arg1 = noreg, Register arg2 = noreg, Register arg3 = noreg); // runtime entry points - static void new_instance (JavaThread* thread, klassOopDesc* klass); - static void new_type_array (JavaThread* thread, klassOopDesc* klass, jint length); - static void new_object_array(JavaThread* thread, klassOopDesc* klass, jint length); - static void new_multi_array (JavaThread* thread, klassOopDesc* klass, int rank, jint* dims); + static void new_instance (JavaThread* thread, Klass* klass); + static void new_type_array (JavaThread* thread, Klass* klass, jint length); + static void new_object_array(JavaThread* thread, Klass* klass, jint length); + static void new_multi_array (JavaThread* thread, Klass* klass, int rank, jint* dims); - static address counter_overflow(JavaThread* thread, int bci, methodOopDesc* method); + static address counter_overflow(JavaThread* thread, int bci, Method* method); static void unimplemented_entry (JavaThread* thread, StubID id); @@ -157,6 +158,7 @@ static int access_field_patching(JavaThread* thread); static int move_klass_patching(JavaThread* thread); + static int move_mirror_patching(JavaThread* thread); static void patch_code(JavaThread* thread, StubID stub_id); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_ValueType.cpp --- a/src/share/vm/c1/c1_ValueType.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_ValueType.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -85,22 +85,6 @@ } - -jobject ObjectType::encoding() const { - assert(is_constant(), "must be"); - return constant_value()->constant_encoding(); -} - -bool ObjectType::is_loaded() const { - assert(is_constant(), "must be"); - return constant_value()->is_loaded(); -} - -ciObject* ObjectConstant::constant_value() const { return _value; } -ciObject* ArrayConstant::constant_value() const { return _value; } -ciObject* InstanceConstant::constant_value() const { return _value; } -ciObject* ClassConstant::constant_value() const { return _value; } - ciType* ObjectConstant::exact_type() const { ciObject* c = constant_value(); return (c != NULL && !c->is_null_object()) ? c->klass() : NULL; @@ -114,10 +98,28 @@ return (c != NULL && !c->is_null_object()) ? c->klass() : NULL; } ciType* ClassConstant::exact_type() const { - ciObject* c = constant_value(); - return (c != NULL && !c->is_null_object()) ? c->klass() : NULL; + return Compilation::current()->env()->Class_klass(); +} + + +jobject ObjectType::encoding() const { + assert(is_constant(), "must be"); + return constant_value()->constant_encoding(); } +bool ObjectType::is_loaded() const { + assert(is_constant(), "must be"); + return constant_value()->is_loaded(); +} + +bool MetadataType::is_loaded() const { + assert(is_constant(), "must be"); + return constant_value()->is_loaded(); +} + +ciObject* ObjectConstant::constant_value() const { return _value; } +ciObject* ArrayConstant::constant_value() const { return _value; } +ciObject* InstanceConstant::constant_value() const { return _value; } ValueType* as_ValueType(BasicType type) { switch (type) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_ValueType.hpp --- a/src/share/vm/c1/c1_ValueType.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_ValueType.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ #include "c1/c1_Compilation.hpp" #include "ci/ciConstant.hpp" +#include "ci/ciMethodData.hpp" // type hierarchy class ValueType; @@ -46,8 +47,13 @@ class ArrayConstant; class InstanceType; class InstanceConstant; +class MetadataType; class ClassType; class ClassConstant; +class MethodType; +class MethodConstant; +class MethodDataType; +class MethodDataConstant; class AddressType; class AddressConstant; class IllegalType; @@ -82,6 +88,7 @@ doubleTag, objectTag, addressTag, + metaDataTag, number_of_legal_tags, // all other tags must follow afterwards voidTag = number_of_legal_tags, @@ -123,6 +130,8 @@ bool is_array() { return as_ArrayType() != NULL; } bool is_instance() { return as_InstanceType() != NULL; } bool is_class() { return as_ClassType() != NULL; } + bool is_method() { return as_MethodType() != NULL; } + bool is_method_data() { return as_MethodDataType() != NULL; } bool is_address() { return as_AddressType() != NULL; } bool is_illegal() { return tag() == illegalTag; } @@ -143,6 +152,9 @@ virtual ArrayType* as_ArrayType() { return NULL; } virtual InstanceType* as_InstanceType() { return NULL; } virtual ClassType* as_ClassType() { return NULL; } + virtual MetadataType* as_MetadataType() { return NULL; } + virtual MethodType* as_MethodType() { return NULL; } + virtual MethodDataType* as_MethodDataType() { return NULL; } virtual AddressType* as_AddressType() { return NULL; } virtual IllegalType* as_IllegalType() { return NULL; } @@ -153,6 +165,8 @@ virtual ObjectConstant* as_ObjectConstant() { return NULL; } virtual InstanceConstant* as_InstanceConstant(){ return NULL; } virtual ClassConstant* as_ClassConstant() { return NULL; } + virtual MethodConstant* as_MethodConstant() { return NULL; } + virtual MethodDataConstant* as_MethodDataConstant() { return NULL; } virtual ArrayConstant* as_ArrayConstant() { return NULL; } virtual AddressConstant* as_AddressConstant() { return NULL; } @@ -364,7 +378,20 @@ }; -class ClassType: public ObjectType { +class MetadataType: public ValueType { + public: + MetadataType(): ValueType(metaDataTag, 1) {} + virtual ValueType* base() const { return objectType; } + virtual const char tchar() const { return 'a'; } + virtual const char* name() const { return "object"; } + virtual MetadataType* as_MetadataType() { return this; } + bool is_loaded() const; + jobject encoding() const; + virtual ciMetadata* constant_value() const { ShouldNotReachHere(); return NULL; } +}; + + +class ClassType: public MetadataType { public: virtual ClassType* as_ClassType() { return this; } }; @@ -381,11 +408,55 @@ virtual bool is_constant() const { return true; } virtual ClassConstant* as_ClassConstant() { return this; } - virtual ciObject* constant_value() const; + virtual ciMetadata* constant_value() const { return _value; } virtual ciType* exact_type() const; }; +class MethodType: public MetadataType { + public: + virtual MethodType* as_MethodType() { return this; } +}; + + +class MethodConstant: public MethodType { + private: + ciMethod* _value; + + public: + MethodConstant(ciMethod* value) { _value = value; } + + ciMethod* value() const { return _value; } + + virtual bool is_constant() const { return true; } + + virtual MethodConstant* as_MethodConstant() { return this; } + virtual ciMetadata* constant_value() const { return _value; } +}; + + +class MethodDataType: public MetadataType { + public: + virtual MethodDataType* as_MethodDataType() { return this; } +}; + + +class MethodDataConstant: public MethodDataType { + private: + ciMethodData* _value; + + public: + MethodDataConstant(ciMethodData* value) { _value = value; } + + ciMethodData* value() const { return _value; } + + virtual bool is_constant() const { return true; } + + virtual MethodDataConstant* as_MethodDataConstant() { return this; } + virtual ciMetadata* constant_value() const { return _value; } +}; + + class AddressType: public ValueType { public: AddressType(): ValueType(addressTag, 1) {} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/c1/c1_globals.hpp --- a/src/share/vm/c1/c1_globals.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/c1/c1_globals.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -315,7 +315,7 @@ "Use CHA and exact type results at call sites when updating MDOs")\ \ product(bool, C1UpdateMethodData, trueInTiered, \ - "Update methodDataOops in Tier1-generated code") \ + "Update MethodData*s in Tier1-generated code") \ \ develop(bool, PrintCFGToFile, false, \ "print control flow graph to a separate file during compilation") \ diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/bcEscapeAnalyzer.cpp --- a/src/share/vm/ci/bcEscapeAnalyzer.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/bcEscapeAnalyzer.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1302,9 +1302,9 @@ // Clear all info since method's bytecode was not analysed and // set pessimistic escape information. clear_escape_info(); - methodData()->set_eflag(methodDataOopDesc::allocated_escapes); - methodData()->set_eflag(methodDataOopDesc::unknown_modified); - methodData()->set_eflag(methodDataOopDesc::estimated); + methodData()->set_eflag(MethodData::allocated_escapes); + methodData()->set_eflag(MethodData::unknown_modified); + methodData()->set_eflag(MethodData::estimated); return; } @@ -1332,18 +1332,18 @@ methodData()->set_arg_modified(i, _arg_modified[i]); } if (_return_local) { - methodData()->set_eflag(methodDataOopDesc::return_local); + methodData()->set_eflag(MethodData::return_local); } if (_return_allocated) { - methodData()->set_eflag(methodDataOopDesc::return_allocated); + methodData()->set_eflag(MethodData::return_allocated); } if (_allocated_escapes) { - methodData()->set_eflag(methodDataOopDesc::allocated_escapes); + methodData()->set_eflag(MethodData::allocated_escapes); } if (_unknown_modified) { - methodData()->set_eflag(methodDataOopDesc::unknown_modified); + methodData()->set_eflag(MethodData::unknown_modified); } - methodData()->set_eflag(methodDataOopDesc::estimated); + methodData()->set_eflag(MethodData::estimated); } } @@ -1360,10 +1360,10 @@ _arg_returned.set(i); _arg_modified[i] = methodData()->arg_modified(i); } - _return_local = methodData()->eflag_set(methodDataOopDesc::return_local); - _return_allocated = methodData()->eflag_set(methodDataOopDesc::return_allocated); - _allocated_escapes = methodData()->eflag_set(methodDataOopDesc::allocated_escapes); - _unknown_modified = methodData()->eflag_set(methodDataOopDesc::unknown_modified); + _return_local = methodData()->eflag_set(MethodData::return_local); + _return_allocated = methodData()->eflag_set(MethodData::return_allocated); + _allocated_escapes = methodData()->eflag_set(MethodData::allocated_escapes); + _unknown_modified = methodData()->eflag_set(MethodData::unknown_modified); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/bcEscapeAnalyzer.hpp --- a/src/share/vm/ci/bcEscapeAnalyzer.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/bcEscapeAnalyzer.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,7 @@ #define SHARE_VM_CI_BCESCAPEANALYZER_HPP #ifdef COMPILER2 +#include "ci/ciObject.hpp" #include "ci/ciMethod.hpp" #include "ci/ciMethodData.hpp" #include "code/dependencies.hpp" @@ -62,7 +63,7 @@ bool _allocated_escapes; bool _unknown_modified; - GrowableArray _dependencies; + GrowableArray _dependencies; ciMethodBlocks *_methodBlocks; @@ -114,7 +115,7 @@ ciMethodData* methodData() const { return _methodData; } BCEscapeAnalyzer* parent() const { return _parent; } int level() const { return _level; } - GrowableArray* dependencies() { return &_dependencies; } + GrowableArray* dependencies() { return &_dependencies; } bool has_dependencies() const { return !_dependencies.is_empty(); } // retrieval of interprocedural escape information diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciArrayKlass.cpp --- a/src/share/vm/ci/ciArrayKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciArrayKlass.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ // ciArrayKlass // -// This class represents a klassOop in the HotSpot virtual machine +// This class represents a Klass* in the HotSpot virtual machine // whose Klass part in an arrayKlass. // ------------------------------------------------------------------ @@ -46,8 +46,8 @@ // ciArrayKlass::ciArrayKlass // // Unloaded array klass. -ciArrayKlass::ciArrayKlass(ciSymbol* name, int dimension, ciKlass* klass) - : ciKlass(name, klass) { +ciArrayKlass::ciArrayKlass(ciSymbol* name, int dimension, BasicType bt) + : ciKlass(name, bt) { _dimension = dimension; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciArrayKlass.hpp --- a/src/share/vm/ci/ciArrayKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciArrayKlass.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,7 @@ // ciArrayKlass // -// This class, and its subclasses represent klassOops in the +// This class, and its subclasses represent Klass*s in the // HotSpot virtual machine whose Klass part is an arrayKlass. class ciArrayKlass : public ciKlass { CI_PACKAGE_ACCESS @@ -38,7 +38,7 @@ protected: ciArrayKlass(KlassHandle h_k); - ciArrayKlass(ciSymbol* name, int dimension, ciKlass* klass); + ciArrayKlass(ciSymbol* name, int dimension, BasicType bt); arrayKlass* get_arrayKlass() { return (arrayKlass*)get_Klass(); @@ -58,8 +58,8 @@ } // What kind of vmObject is this? - bool is_array_klass() { return true; } - bool is_java_klass() { return true; } + bool is_array_klass() const { return true; } + bool is_java_klass() const { return true; } static ciArrayKlass* make(ciType* element_type); }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciArrayKlassKlass.hpp --- a/src/share/vm/ci/ciArrayKlassKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_CI_CIARRAYKLASSKLASS_HPP -#define SHARE_VM_CI_CIARRAYKLASSKLASS_HPP - -#include "ci/ciKlassKlass.hpp" - -// ciArrayKlassKlass -// -// This class represents a klassOop in the HotSpot virtual machine -// whose Klass part in a arrayKlassKlass. -class ciArrayKlassKlass : public ciKlassKlass { -protected: - ciArrayKlassKlass(KlassHandle h_k, ciSymbol* name) - : ciKlassKlass(h_k, name) {} - - arrayKlassKlass* get_arrayKlassKlass() { - return (arrayKlassKlass*)get_Klass(); - } - - const char* type_string() { return "ciArrayKlassKlass"; } - -public: - // What kind of ciObject is this? - bool is_array_klass_klass() { return true; } -}; - -#endif // SHARE_VM_CI_CIARRAYKLASSKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciBaseObject.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/ci/ciBaseObject.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "ci/ciBaseObject.hpp" +#include "ci/ciUtilities.hpp" +#include "gc_interface/collectedHeap.inline.hpp" +#include "oops/oop.inline2.hpp" + +// ------------------------------------------------------------------ +// ciBaseObject::set_ident +// +// Set the unique identity number of a ciBaseObject. +void ciBaseObject::set_ident(uint id) { + assert((_ident >> FLAG_BITS) == 0, "must only initialize once"); + assert( id < ((uint)1 << (BitsPerInt-FLAG_BITS)), "id too big"); + _ident = _ident + (id << FLAG_BITS); +} + +// ------------------------------------------------------------------ +// ciBaseObject::ident +// +// Report the unique identity number of a ciBaseObject. +uint ciBaseObject::ident() { + uint id = _ident >> FLAG_BITS; + assert(id != 0, "must be initialized"); + return id; +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciBaseObject.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/ci/ciBaseObject.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_CI_CIBASEOBJECT_HPP +#define SHARE_VM_CI_CIBASEOBJECT_HPP + +#include "ci/ciClassList.hpp" +#include "memory/allocation.hpp" +#include "runtime/handles.hpp" +#include "runtime/jniHandles.hpp" + +// ciBaseObject +// +// This class represents an oop in the HotSpot virtual machine. +// Its subclasses are structured in a hierarchy which mirrors +// an aggregate of the VM's oop and klass hierarchies (see +// oopHierarchy.hpp). Each instance of ciBaseObject holds a handle +// to a corresponding oop on the VM side and provides routines +// for accessing the information in its oop. By using the ciBaseObject +// hierarchy for accessing oops in the VM, the compiler ensures +// that it is safe with respect to garbage collection; that is, +// GC and compilation can proceed independently without +// interference. +// +// Within the VM, the oop and klass hierarchies are separate. +// The compiler interface does not preserve this separation -- +// the distinction between `Klass*' and `Klass' are not +// reflected in the interface and instead the Klass hierarchy +// is directly modeled as the subclasses of ciKlass. +class ciBaseObject : public ResourceObj { + CI_PACKAGE_ACCESS + friend class ciEnv; + +protected: + uint _ident; + + enum { FLAG_BITS = 1 }; + enum { + SCAVENGABLE_FLAG = 1 + }; +protected: + ciBaseObject(): _ident(0) {} + + virtual const char* type_string() { return "ciBaseObject"; } + + void set_ident(uint id); + +public: + // A number unique to this object. + uint ident(); + + // What kind of ciBaseObject is this? + virtual bool is_symbol() const { return false; } + virtual bool is_object() const { return false; } + virtual bool is_metadata() const { return false; } + + ciSymbol* as_symbol() { + assert(is_symbol(), "must be"); + return (ciSymbol*)this; + } + ciObject* as_object() { + assert(is_object(), "must be"); + return (ciObject*)this; + } + ciMetadata* as_metadata() { + assert(is_metadata(), "must be"); + return (ciMetadata*)this; + } +}; +#endif // SHARE_VM_CI_CIBASEOBJECT_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciCPCache.cpp --- a/src/share/vm/ci/ciCPCache.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "ci/ciCPCache.hpp" -#include "ci/ciUtilities.hpp" -#include "oops/cpCacheOop.hpp" - -// ciCPCache - -// ------------------------------------------------------------------ -// ciCPCache::get_f1_offset -size_t ciCPCache::get_f1_offset(int index) { - // Calculate the offset from the constantPoolCacheOop to the f1 - // field. - ByteSize f1_offset = - constantPoolCacheOopDesc::entry_offset(index) + - ConstantPoolCacheEntry::f1_offset(); - - return in_bytes(f1_offset); -} - - -// ------------------------------------------------------------------ -// ciCPCache::is_f1_null_at -bool ciCPCache::is_f1_null_at(int index) { - VM_ENTRY_MARK; - return entry_at(index)->is_f1_null(); -} - - -// ------------------------------------------------------------------ -// ciCPCache::get_pool_index -int ciCPCache::get_pool_index(int index) { - VM_ENTRY_MARK; - ConstantPoolCacheEntry* e = entry_at(index); - if (e->is_secondary_entry()) - e = entry_at(e->main_entry_index()); - return e->constant_pool_index(); -} - - -// ------------------------------------------------------------------ -// ciCPCache::print -// -// Print debugging information about the cache. -void ciCPCache::print() { - Unimplemented(); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciCPCache.hpp --- a/src/share/vm/ci/ciCPCache.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_CI_CICPCACHE_HPP -#define SHARE_VM_CI_CICPCACHE_HPP - -#include "ci/ciClassList.hpp" -#include "ci/ciObject.hpp" -#include "oops/cpCacheOop.hpp" - -// ciCPCache -// -// This class represents a constant pool cache. -// -// Note: This class is called ciCPCache as ciConstantPoolCache is used -// for something different. -class ciCPCache : public ciObject { -private: - constantPoolCacheOop get_cpCacheOop() { // must be called inside a VM_ENTRY_MARK - return (constantPoolCacheOop) get_oop(); - } - - ConstantPoolCacheEntry* entry_at(int i) { - int raw_index = i; - if (constantPoolCacheOopDesc::is_secondary_index(i)) - raw_index = constantPoolCacheOopDesc::decode_secondary_index(i); - return get_cpCacheOop()->entry_at(raw_index); - } - -public: - ciCPCache(constantPoolCacheHandle cpcache) : ciObject(cpcache) {} - - // What kind of ciObject is this? - bool is_cpcache() const { return true; } - - // Get the offset in bytes from the oop to the f1 field of the - // requested entry. - size_t get_f1_offset(int index); - - bool is_f1_null_at(int index); - - int get_pool_index(int index); - - void print(); -}; - -#endif // SHARE_VM_CI_CICPCACHE_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciClassList.hpp --- a/src/share/vm/ci/ciClassList.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciClassList.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,6 @@ class ciEnv; class ciObjectFactory; class ciConstantPoolCache; -class ciCPCache; class ciField; class ciConstant; @@ -43,32 +42,28 @@ class ciTypeFlow; +class ciBaseObject; class ciObject; class ciNullObject; class ciInstance; class ciCallSite; class ciMemberName; class ciMethodHandle; +class ciArray; +class ciObjArray; +class ciTypeArray; +class ciSymbol; +class ciMetadata; class ciMethod; class ciMethodData; class ciReceiverTypeData; // part of ciMethodData -class ciSymbol; -class ciArray; -class ciObjArray; -class ciTypeArray; class ciType; class ciReturnAddress; class ciKlass; class ciInstanceKlass; -class ciMethodKlass; class ciArrayKlass; class ciObjArrayKlass; class ciTypeArrayKlass; -class ciKlassKlass; -class ciInstanceKlassKlass; -class ciArrayKlassKlass; -class ciObjArrayKlassKlass; -class ciTypeArrayKlassKlass; // Simulate Java Language style package-private access with // friend declarations. @@ -90,7 +85,6 @@ friend class ciConstantPoolCache; \ friend class ciField; \ friend class ciConstant; \ -friend class ciCPCache; \ friend class ciFlags; \ friend class ciExceptionHandler; \ friend class ciCallProfile; \ @@ -109,19 +103,14 @@ friend class ciSymbol; \ friend class ciArray; \ friend class ciObjArray; \ +friend class ciMetadata; \ friend class ciTypeArray; \ friend class ciType; \ friend class ciReturnAddress; \ friend class ciKlass; \ friend class ciInstanceKlass; \ -friend class ciMethodKlass; \ friend class ciArrayKlass; \ friend class ciObjArrayKlass; \ friend class ciTypeArrayKlass; \ -friend class ciKlassKlass; \ -friend class ciInstanceKlassKlass; \ -friend class ciArrayKlassKlass; \ -friend class ciObjArrayKlassKlass; \ -friend class ciTypeArrayKlassKlass; #endif // SHARE_VM_CI_CICLASSLIST_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciConstantPoolCache.hpp --- a/src/share/vm/ci/ciConstantPoolCache.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciConstantPoolCache.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,7 @@ // // The class caches indexed constant pool lookups. // -// Usage note: this klass has nothing to do with constantPoolCacheOop. +// Usage note: this klass has nothing to do with ConstantPoolCache*. class ciConstantPoolCache : public ResourceObj { private: GrowableArray* _keys; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciEnv.cpp --- a/src/share/vm/ci/ciEnv.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciEnv.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,11 +28,8 @@ #include "ci/ciField.hpp" #include "ci/ciInstance.hpp" #include "ci/ciInstanceKlass.hpp" -#include "ci/ciInstanceKlassKlass.hpp" #include "ci/ciMethod.hpp" #include "ci/ciNullObject.hpp" -#include "ci/ciObjArrayKlassKlass.hpp" -#include "ci/ciTypeArrayKlassKlass.hpp" #include "ci/ciUtilities.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" @@ -45,7 +42,7 @@ #include "memory/allocation.inline.hpp" #include "memory/oopFactory.hpp" #include "memory/universe.inline.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.inline2.hpp" @@ -67,11 +64,6 @@ // to the VM. ciObject* ciEnv::_null_object_instance; -ciMethodKlass* ciEnv::_method_klass_instance; -ciKlassKlass* ciEnv::_klass_klass_instance; -ciInstanceKlassKlass* ciEnv::_instance_klass_klass_instance; -ciTypeArrayKlassKlass* ciEnv::_type_array_klass_klass_instance; -ciObjArrayKlassKlass* ciEnv::_obj_array_klass_klass_instance; #define WK_KLASS_DEFN(name, ignore_s, ignore_o) ciInstanceKlass* ciEnv::_##name = NULL; WK_KLASSES_DO(WK_KLASS_DEFN) @@ -185,13 +177,8 @@ assert(Universe::is_fully_initialized(), "must be"); - oop o = Universe::null_ptr_exception_instance(); - assert(o != NULL, "should have been initialized"); - _NullPointerException_instance = get_object(o)->as_instance(); - o = Universe::arithmetic_exception_instance(); - assert(o != NULL, "should have been initialized"); - _ArithmeticException_instance = get_object(o)->as_instance(); - + _NullPointerException_instance = NULL; + _ArithmeticException_instance = NULL; _ArrayIndexOutOfBoundsException_instance = NULL; _ArrayStoreException_instance = NULL; _ClassCastException_instance = NULL; @@ -202,7 +189,9 @@ ciEnv::~ciEnv() { CompilerThread* current_thread = CompilerThread::current(); _factory->remove_symbols(); - current_thread->set_env(NULL); + // Need safepoint to clear the env on the thread. RedefineClasses might + // be reading it. + GUARDED_VM_ENTRY(current_thread->set_env(NULL);) } // ------------------------------------------------------------------ @@ -238,10 +227,10 @@ VM_ENTRY_MARK; if (handle == NULL) { // Cf. universe.cpp, creation of Universe::_null_ptr_exception_instance. - klassOop k = SystemDictionary::find(name, Handle(), Handle(), THREAD); + Klass* k = SystemDictionary::find(name, Handle(), Handle(), THREAD); jobject objh = NULL; if (!HAS_PENDING_EXCEPTION && k != NULL) { - oop obj = instanceKlass::cast(k)->allocate_permanent_instance(THREAD); + oop obj = InstanceKlass::cast(k)->allocate_instance(THREAD); if (!HAS_PENDING_EXCEPTION) objh = JNIHandles::make_global(obj); } @@ -255,8 +244,6 @@ return obj == NULL? NULL: get_object(obj)->as_instance(); } -// ------------------------------------------------------------------ -// ciEnv::ArrayIndexOutOfBoundsException_instance, etc. ciInstance* ciEnv::ArrayIndexOutOfBoundsException_instance() { if (_ArrayIndexOutOfBoundsException_instance == NULL) { _ArrayIndexOutOfBoundsException_instance @@ -300,30 +287,11 @@ // ------------------------------------------------------------------ // ciEnv::get_method_from_handle -ciMethod* ciEnv::get_method_from_handle(jobject method) { - VM_ENTRY_MARK; - return get_object(JNIHandles::resolve(method))->as_method(); -} - -// ------------------------------------------------------------------ -// ciEnv::make_array -ciArray* ciEnv::make_system_array(GrowableArray* objects) { +ciMethod* ciEnv::get_method_from_handle(Method* method) { VM_ENTRY_MARK; - int length = objects->length(); - objArrayOop a = oopFactory::new_system_objArray(length, THREAD); - if (HAS_PENDING_EXCEPTION) { - CLEAR_PENDING_EXCEPTION; - record_out_of_memory_failure(); - return NULL; - } - for (int i = 0; i < length; i++) { - a->obj_at_put(i, objects->at(i)->get_oop()); - } - assert(a->is_perm(), ""); - return get_object(a)->as_array(); + return get_metadata(method)->as_method(); } - // ------------------------------------------------------------------ // ciEnv::array_element_offset_in_bytes int ciEnv::array_element_offset_in_bytes(ciArray* a_h, ciObject* o_h) { @@ -343,25 +311,25 @@ // ciEnv::check_klass_accessiblity // // Note: the logic of this method should mirror the logic of -// constantPoolOopDesc::verify_constant_pool_resolve. +// ConstantPool::verify_constant_pool_resolve. bool ciEnv::check_klass_accessibility(ciKlass* accessing_klass, - klassOop resolved_klass) { + Klass* resolved_klass) { if (accessing_klass == NULL || !accessing_klass->is_loaded()) { return true; } - if (accessing_klass->is_obj_array()) { + if (accessing_klass->is_obj_array_klass()) { accessing_klass = accessing_klass->as_obj_array_klass()->base_element_klass(); } if (!accessing_klass->is_instance_klass()) { return true; } - if (resolved_klass->klass_part()->oop_is_objArray()) { + if (resolved_klass->oop_is_objArray()) { // Find the element klass, if this is an array. resolved_klass = objArrayKlass::cast(resolved_klass)->bottom_klass(); } - if (resolved_klass->klass_part()->oop_is_instance()) { - return Reflection::verify_class_access(accessing_klass->get_klassOop(), + if (resolved_klass->oop_is_instance()) { + return Reflection::verify_class_access(accessing_klass->get_Klass(), resolved_klass, true); } @@ -416,7 +384,7 @@ { ttyUnlocker ttyul; // release tty lock to avoid ordering problems MutexLocker ml(Compile_lock); - klassOop kls; + Klass* kls; if (!require_local) { kls = SystemDictionary::find_constrained_instance_or_array_klass(sym, loader, KILL_COMPILE_ON_FATAL_(fail_type)); @@ -457,7 +425,7 @@ // Look inside the constant pool for pre-resolved class entries. for (int i = cpool->length() - 1; i >= 1; i--) { if (cpool->tag_at(i).is_klass()) { - klassOop kls = cpool->resolved_klass_at(i); + Klass* kls = cpool->resolved_klass_at(i); if (Klass::cast(kls)->name() == sym) { found_klass = KlassHandle(THREAD, kls); break; @@ -468,7 +436,7 @@ if (found_klass() != NULL) { // Found it. Build a CI handle. - return get_object(found_klass())->as_klass(); + return get_klass(found_klass()); } if (require_local) return NULL; @@ -498,29 +466,34 @@ bool& is_accessible, ciInstanceKlass* accessor) { EXCEPTION_CONTEXT; - KlassHandle klass(THREAD, constantPoolOopDesc::klass_at_if_loaded(cpool, index)); + KlassHandle klass; // = NULL; Symbol* klass_name = NULL; + + if (cpool->tag_at(index).is_symbol()) { + klass_name = cpool->symbol_at(index); + } else { + // Check if it's resolved if it's not a symbol constant pool entry. + klass = KlassHandle(THREAD, ConstantPool::klass_at_if_loaded(cpool, index)); + if (klass.is_null()) { // The klass has not been inserted into the constant pool. // Try to look it up by name. { // We have to lock the cpool to keep the oop from being resolved // while we are accessing it. - ObjectLocker ol(cpool, THREAD); - + MonitorLockerEx ml(cpool->lock()); constantTag tag = cpool->tag_at(index); if (tag.is_klass()) { // The klass has been inserted into the constant pool // very recently. klass = KlassHandle(THREAD, cpool->resolved_klass_at(index)); - } else if (tag.is_symbol()) { - klass_name = cpool->symbol_at(index); } else { assert(cpool->tag_at(index).is_unresolved_klass(), "wrong tag"); klass_name = cpool->unresolved_klass_at(index); } } } + } if (klass.is_null()) { // Not found in constant pool. Use the name to do the lookup. @@ -537,14 +510,14 @@ is_accessible = false; } else { // Linked locally, and we must also check public/private, etc. - is_accessible = check_klass_accessibility(accessor, k->get_klassOop()); + is_accessible = check_klass_accessibility(accessor, k->get_Klass()); } return k; } // Check for prior unloaded klass. The SystemDictionary's answers // can vary over time but the compiler needs consistency. - ciSymbol* name = get_symbol(klass()->klass_part()->name()); + ciSymbol* name = get_symbol(klass()->name()); ciKlass* unloaded_klass = check_get_unloaded_klass(accessor, name); if (unloaded_klass != NULL) { is_accessible = false; @@ -553,7 +526,7 @@ // It is known to be accessible, since it was found in the constant pool. is_accessible = true; - return get_object(klass())->as_klass(); + return get_klass(klass()); } // ------------------------------------------------------------------ @@ -579,14 +552,12 @@ int index = pool_index; if (cache_index >= 0) { assert(index < 0, "only one kind of index at a time"); - ConstantPoolCacheEntry* cpc_entry = cpool->cache()->entry_at(cache_index); - index = cpc_entry->constant_pool_index(); - oop obj = cpc_entry->f1_as_instance(); + oop obj = cpool->resolved_references()->obj_at(cache_index); if (obj != NULL) { - assert(obj->is_instance() || obj->is_array(), "must be a Java reference"); ciObject* ciobj = get_object(obj); return ciConstant(T_OBJECT, ciobj); } + index = cpool->object_to_cp_index(cache_index); } constantTag tag = cpool->tag_at(index); if (tag.is_int()) { @@ -597,12 +568,13 @@ return ciConstant((jfloat)cpool->float_at(index)); } else if (tag.is_double()) { return ciConstant((jdouble)cpool->double_at(index)); - } else if (tag.is_string() || tag.is_unresolved_string()) { + } else if (tag.is_string()) { oop string = NULL; + assert(cache_index >= 0, "should have a cache index"); if (cpool->is_pseudo_string_at(index)) { - string = cpool->pseudo_string_at(index); + string = cpool->pseudo_string_at(index, cache_index); } else { - string = cpool->string_at(index, THREAD); + string = cpool->string_at(index, cache_index, THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; record_out_of_memory_failure(); @@ -625,7 +597,6 @@ return ciConstant(T_OBJECT, klass->java_mirror()); } else if (tag.is_object()) { oop obj = cpool->object_at(index); - assert(obj->is_instance() || obj->is_array(), "must be a Java reference"); ciObject* ciobj = get_object(obj); return ciConstant(T_OBJECT, ciobj); } else if (tag.is_method_type()) { @@ -697,8 +668,8 @@ // // Perform an appropriate method lookup based on accessor, holder, // name, signature, and bytecode. -methodOop ciEnv::lookup_method(instanceKlass* accessor, - instanceKlass* holder, +Method* ciEnv::lookup_method(InstanceKlass* accessor, + InstanceKlass* holder, Symbol* name, Symbol* sig, Bytecodes::Code bc) { @@ -739,8 +710,8 @@ int index, Bytecodes::Code bc, ciInstanceKlass* accessor) { if (bc == Bytecodes::_invokedynamic) { - ConstantPoolCacheEntry* secondary_entry = cpool->cache()->secondary_entry_at(index); - const bool is_resolved = !secondary_entry->is_f1_null(); + ConstantPoolCacheEntry* cpce = cpool->invokedynamic_cp_cache_entry_at(index); + bool is_resolved = !cpce->is_f1_null(); // FIXME: code generation could allow for null (unlinked) call site // The call site could be made patchable as follows: // Load the appendix argument from the constant pool. @@ -750,13 +721,14 @@ // As with other two-component call sites, both values must be independently verified. if (is_resolved) { - // Get the invoker methodOop and the extra argument from the constant pool. - methodOop adapter = secondary_entry->f2_as_vfinal_method(); - return get_object(adapter)->as_method(); + // Get the invoker Method* from the constant pool. + // (The appendix argument, if any, will be noted in the method's signature.) + Method* adapter = cpce->f1_as_method(); + return get_method(adapter); } // Fake a method that is equivalent to a declared method. - ciInstanceKlass* holder = get_object(SystemDictionary::MethodHandle_klass())->as_instance_klass(); + ciInstanceKlass* holder = get_instance_klass(SystemDictionary::MethodHandle_klass()); ciSymbol* name = ciSymbol::invokeBasic_name(); ciSymbol* signature = get_symbol(cpool->signature_ref_at(index)); return get_unloaded_method(holder, name, signature, accessor); @@ -772,7 +744,7 @@ if (cpool->has_preresolution() || (holder == ciEnv::MethodHandle_klass() && - MethodHandles::is_signature_polymorphic_name(holder->get_klassOop(), name_sym))) { + MethodHandles::is_signature_polymorphic_name(holder->get_Klass(), name_sym))) { // Short-circuit lookups for JSR 292-related call sites. // That is, do not rely only on name-based lookups, because they may fail // if the names are not resolvable in the boot class loader (7056328). @@ -782,9 +754,9 @@ case Bytecodes::_invokespecial: case Bytecodes::_invokestatic: { - methodOop m = constantPoolOopDesc::method_at_if_loaded(cpool, index); + Method* m = ConstantPool::method_at_if_loaded(cpool, index); if (m != NULL) { - return get_object(m)->as_method(); + return get_method(m); } } break; @@ -792,17 +764,17 @@ } if (holder_is_accessible) { // Our declared holder is loaded. - instanceKlass* lookup = declared_holder->get_instanceKlass(); - methodOop m = lookup_method(accessor->get_instanceKlass(), lookup, name_sym, sig_sym, bc); + InstanceKlass* lookup = declared_holder->get_instanceKlass(); + Method* m = lookup_method(accessor->get_instanceKlass(), lookup, name_sym, sig_sym, bc); if (m != NULL && (bc == Bytecodes::_invokestatic - ? instanceKlass::cast(m->method_holder())->is_not_initialized() - : !instanceKlass::cast(m->method_holder())->is_loaded())) { + ? InstanceKlass::cast(m->method_holder())->is_not_initialized() + : !InstanceKlass::cast(m->method_holder())->is_loaded())) { m = NULL; } if (m != NULL) { // We found the method. - return get_object(m)->as_method(); + return get_method(m); } } @@ -886,7 +858,7 @@ // modification counter hasn't changed (see below). for (Dependencies::DepStream deps(dependencies()); deps.next(); ) { if (deps.is_klass_type()) continue; // skip klass dependencies - klassOop witness = deps.check_dependency(); + Klass* witness = deps.check_dependency(); if (witness != NULL) { record_failure("invalid non-klass dependency"); return; @@ -907,7 +879,7 @@ int klass_violations = 0; for (Dependencies::DepStream deps(dependencies()); deps.next(); ) { if (!deps.is_klass_type()) continue; // skip non-klass dependencies - klassOop witness = deps.check_dependency(); + Klass* witness = deps.check_dependency(); if (witness != NULL) { klass_violations++; if (!counter_changed) { @@ -992,11 +964,11 @@ validate_compile_task_dependencies(target); } - methodHandle method(THREAD, target->get_methodOop()); + methodHandle method(THREAD, target->get_Method()); if (failing()) { // While not a true deoptimization, it is a preemptive decompile. - methodDataOop mdo = method()->method_data(); + MethodData* mdo = method()->method_data(); if (mdo != NULL) { mdo->inc_decompile_count(); } @@ -1082,7 +1054,7 @@ method_name, entry_bci); } - instanceKlass::cast(method->method_holder())->add_osr_nmethod(nm); + InstanceKlass::cast(method->method_holder())->add_osr_nmethod(nm); } } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciEnv.hpp --- a/src/share/vm/ci/ciEnv.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciEnv.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -78,11 +78,6 @@ // Distinguished instances of certain ciObjects.. static ciObject* _null_object_instance; - static ciMethodKlass* _method_klass_instance; - static ciKlassKlass* _klass_klass_instance; - static ciInstanceKlassKlass* _instance_klass_klass_instance; - static ciTypeArrayKlassKlass* _type_array_klass_klass_instance; - static ciObjArrayKlassKlass* _obj_array_klass_klass_instance; #define WK_KLASS_DECL(name, ignore_s, ignore_o) static ciInstanceKlass* _##name; WK_KLASSES_DO(WK_KLASS_DECL) @@ -155,9 +150,9 @@ // Helper methods bool check_klass_accessibility(ciKlass* accessing_klass, - klassOop resolved_klassOop); - methodOop lookup_method(instanceKlass* accessor, - instanceKlass* holder, + Klass* resolved_klass); + Method* lookup_method(InstanceKlass* accessor, + InstanceKlass* holder, Symbol* name, Symbol* sig, Bytecodes::Code bc); @@ -181,7 +176,44 @@ } } - ciMethod* get_method_from_handle(jobject method); + ciMetadata* get_metadata(Metadata* o) { + if (o == NULL) { + return NULL; + } else { + return _factory->get_metadata(o); + } + } + + ciInstance* get_instance(oop o) { + if (o == NULL) return NULL; + return get_object(o)->as_instance(); + } + ciObjArrayKlass* get_obj_array_klass(Klass* o) { + if (o == NULL) return NULL; + return get_metadata(o)->as_obj_array_klass(); + } + ciTypeArrayKlass* get_type_array_klass(Klass* o) { + if (o == NULL) return NULL; + return get_metadata(o)->as_type_array_klass(); + } + ciKlass* get_klass(Klass* o) { + if (o == NULL) return NULL; + return get_metadata(o)->as_klass(); + } + ciInstanceKlass* get_instance_klass(Klass* o) { + if (o == NULL) return NULL; + return get_metadata(o)->as_instance_klass(); + } + ciMethod* get_method(Method* o) { + if (o == NULL) return NULL; + return get_metadata(o)->as_method(); + } + ciMethodData* get_method_data(MethodData* o) { + if (o == NULL) return NULL; + return get_metadata(o)->as_method_data(); + } + + ciMethod* get_method_from_handle(Method* method); ciInstance* get_or_create_exception(jobject& handle, Symbol* name); @@ -372,10 +404,6 @@ // Note: To find a class from its name string, use ciSymbol::make, // but consider adding to vmSymbols.hpp instead. - // Use this to make a holder for non-perm compile time constants. - // The resulting array is guaranteed to satisfy "can_be_constant". - ciArray* make_system_array(GrowableArray* objects); - // converts the ciKlass* representing the holder of a method into a // ciInstanceKlass*. This is needed since the holder of a method in // the bytecodes could be an array type. Basically this converts @@ -416,6 +444,9 @@ void record_failure(const char* reason); void record_method_not_compilable(const char* reason, bool all_tiers = true); void record_out_of_memory_failure(); + + // RedefineClasses support + void metadata_do(void f(Metadata*)) { _factory->metadata_do(f); } }; #endif // SHARE_VM_CI_CIENV_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciField.cpp --- a/src/share/vm/ci/ciField.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciField.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -125,11 +125,11 @@ return; } - instanceKlass* loaded_decl_holder = declared_holder->get_instanceKlass(); + InstanceKlass* loaded_decl_holder = declared_holder->get_instanceKlass(); // Perform the field lookup. fieldDescriptor field_desc; - klassOop canonical_holder = + Klass* canonical_holder = loaded_decl_holder->find_field(name, signature, &field_desc); if (canonical_holder == NULL) { // Field lookup failed. Will be detected by will_link. @@ -186,7 +186,7 @@ // Get the flags, offset, and canonical holder of the field. _flags = ciFlags(fd->access_flags()); _offset = fd->offset(); - _holder = CURRENT_ENV->get_object(fd->field_holder())->as_instance_klass(); + _holder = CURRENT_ENV->get_instance_klass(fd->field_holder()); // Check to see if the field is constant. if (_holder->is_initialized() && this->is_final()) { @@ -213,7 +213,7 @@ // may change. The three examples are java.lang.System.in, // java.lang.System.out, and java.lang.System.err. - KlassHandle k = _holder->get_klassOop(); + KlassHandle k = _holder->get_Klass(); assert( SystemDictionary::System_klass() != NULL, "Check once per vm"); if( k() == SystemDictionary::System_klass() ) { // Check offsets for case 2: System.in, System.out, or System.err diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciInstance.cpp --- a/src/share/vm/ci/ciInstance.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciInstance.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,9 +49,9 @@ if (java_lang_Class::is_primitive(m)) { return ciType::make(java_lang_Class::primitive_type(m)); } else { - klassOop k = java_lang_Class::as_klassOop(m); + Klass* k = java_lang_Class::as_Klass(m); assert(k != NULL, ""); - return CURRENT_THREAD_ENV->get_object(k)->as_klass(); + return CURRENT_THREAD_ENV->get_klass(k); } } @@ -142,5 +142,5 @@ ciKlass* ciInstance::java_lang_Class_klass() { VM_ENTRY_MARK; - return CURRENT_ENV->get_object(java_lang_Class::as_klassOop(get_oop()))->as_klass(); + return CURRENT_ENV->get_metadata(java_lang_Class::as_Klass(get_oop()))->as_klass(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciInstanceKlass.cpp --- a/src/share/vm/ci/ciInstanceKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciInstanceKlass.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -36,8 +36,8 @@ // ciInstanceKlass // -// This class represents a klassOop in the HotSpot virtual machine -// whose Klass part in an instanceKlass. +// This class represents a Klass* in the HotSpot virtual machine +// whose Klass part in an InstanceKlass. // ------------------------------------------------------------------ // ciInstanceKlass::ciInstanceKlass @@ -48,7 +48,7 @@ { assert(get_Klass()->oop_is_instance(), "wrong type"); assert(get_instanceKlass()->is_loaded(), "must be at least loaded"); - instanceKlass* ik = get_instanceKlass(); + InstanceKlass* ik = get_instanceKlass(); AccessFlags access_flags = ik->access_flags(); _flags = ciFlags(access_flags); @@ -92,10 +92,10 @@ // Version for unloaded classes: ciInstanceKlass::ciInstanceKlass(ciSymbol* name, jobject loader, jobject protection_domain) - : ciKlass(name, ciInstanceKlassKlass::make()) + : ciKlass(name, T_OBJECT) { assert(name->byte_at(0) != '[', "not an instance klass"); - _init_state = (instanceKlass::ClassState)0; + _init_state = (InstanceKlass::ClassState)0; _nonstatic_field_size = -1; _has_nonstatic_fields = false; _nonstatic_fields = NULL; @@ -113,7 +113,7 @@ // ciInstanceKlass::compute_shared_is_initialized void ciInstanceKlass::compute_shared_init_state() { GUARDED_VM_ENTRY( - instanceKlass* ik = get_instanceKlass(); + InstanceKlass* ik = get_instanceKlass(); _init_state = ik->init_state(); ) } @@ -122,7 +122,7 @@ // ciInstanceKlass::compute_shared_has_subklass bool ciInstanceKlass::compute_shared_has_subklass() { GUARDED_VM_ENTRY( - instanceKlass* ik = get_instanceKlass(); + InstanceKlass* ik = get_instanceKlass(); _has_subklass = ik->subklass() != NULL; return _has_subklass; ) @@ -205,7 +205,7 @@ // ciInstanceKlass::is_java_lang_Object // // Is this klass java.lang.Object? -bool ciInstanceKlass::is_java_lang_Object() { +bool ciInstanceKlass::is_java_lang_Object() const { return equals(CURRENT_ENV->Object_klass()); } @@ -292,8 +292,8 @@ assert(is_loaded(), "must be loaded"); if (_super == NULL && !is_java_lang_Object()) { GUARDED_VM_ENTRY( - klassOop super_klass = get_instanceKlass()->super(); - _super = CURRENT_ENV->get_object(super_klass)->as_instance_klass(); + Klass* super_klass = get_instanceKlass()->super(); + _super = CURRENT_ENV->get_instance_klass(super_klass); ) } return _super; @@ -321,13 +321,13 @@ if (!is_abstract()) return NULL; // Only applies to abstract classes. if (!has_subklass()) return NULL; // Must have at least one subklass. VM_ENTRY_MARK; - instanceKlass* ik = get_instanceKlass(); + InstanceKlass* ik = get_instanceKlass(); Klass* up = ik->up_cast_abstract(); - assert(up->oop_is_instance(), "must be instanceKlass"); + assert(up->oop_is_instance(), "must be InstanceKlass"); if (ik == up) { return NULL; } - return CURRENT_THREAD_ENV->get_object(up->as_klassOop())->as_instance_klass(); + return CURRENT_THREAD_ENV->get_instance_klass(up); } // ------------------------------------------------------------------ @@ -354,7 +354,7 @@ return NULL; } VM_ENTRY_MARK; - instanceKlass* k = get_instanceKlass(); + InstanceKlass* k = get_instanceKlass(); fieldDescriptor fd; if (!k->find_field_from_offset(field_offset, is_static, &fd)) { return NULL; @@ -367,9 +367,9 @@ // ciInstanceKlass::get_field_by_name ciField* ciInstanceKlass::get_field_by_name(ciSymbol* name, ciSymbol* signature, bool is_static) { VM_ENTRY_MARK; - instanceKlass* k = get_instanceKlass(); + InstanceKlass* k = get_instanceKlass(); fieldDescriptor fd; - klassOop def = k->find_field(name->get_symbol(), signature->get_symbol(), is_static, &fd); + Klass* def = k->find_field(name->get_symbol(), signature->get_symbol(), is_static, &fd); if (def == NULL) { return NULL; } @@ -397,7 +397,7 @@ if (_non_static_fields == NULL) { VM_ENTRY_MARK; ciEnv* curEnv = ciEnv::current(); - instanceKlass* ik = get_instanceKlass(); + InstanceKlass* ik = get_instanceKlass(); int max_n_fields = ik->java_fields_count(); Arena* arena = curEnv->arena(); @@ -473,7 +473,7 @@ Arena* arena = CURRENT_ENV->arena(); int flen = 0; GrowableArray* fields = NULL; - instanceKlass* k = get_instanceKlass(); + InstanceKlass* k = get_instanceKlass(); for (JavaFieldStream fs(k); !fs.done(); fs.next()) { if (fs.access_flags().is_static()) continue; flen += 1; @@ -494,7 +494,7 @@ for (JavaFieldStream fs(k); !fs.done(); fs.next()) { if (fs.access_flags().is_static()) continue; fieldDescriptor fd; - fd.initialize(k->as_klassOop(), fs.index()); + fd.initialize(k, fs.index()); ciField* field = new (arena) ciField(&fd); fields->append(field); } @@ -508,14 +508,14 @@ // Find a method in this klass. ciMethod* ciInstanceKlass::find_method(ciSymbol* name, ciSymbol* signature) { VM_ENTRY_MARK; - instanceKlass* k = get_instanceKlass(); + InstanceKlass* k = get_instanceKlass(); Symbol* name_sym = name->get_symbol(); Symbol* sig_sym= signature->get_symbol(); - methodOop m = k->find_method(name_sym, sig_sym); + Method* m = k->find_method(name_sym, sig_sym); if (m == NULL) return NULL; - return CURRENT_THREAD_ENV->get_object(m)->as_method(); + return CURRENT_THREAD_ENV->get_method(m); } // ------------------------------------------------------------------ @@ -535,7 +535,7 @@ // Report an implementor of this interface. // Note that there are various races here, since my copy // of _nof_implementors might be out of date with respect -// to results returned by instanceKlass::implementor. +// to results returned by InstanceKlass::implementor. // This is OK, since any dependencies we decide to assert // will be checked later under the Compile_lock. ciInstanceKlass* ciInstanceKlass::implementor() { @@ -544,13 +544,13 @@ // Go into the VM to fetch the implementor. { VM_ENTRY_MARK; - klassOop k = get_instanceKlass()->implementor(); + Klass* k = get_instanceKlass()->implementor(); if (k != NULL) { - if (k == get_instanceKlass()->as_klassOop()) { + if (k == get_instanceKlass()) { // More than one implementors. Use 'this' in this case. impl = this; } else { - impl = CURRENT_THREAD_ENV->get_object(k)->as_instance_klass(); + impl = CURRENT_THREAD_ENV->get_instance_klass(k); } } } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciInstanceKlass.hpp --- a/src/share/vm/ci/ciInstanceKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciInstanceKlass.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -27,14 +27,13 @@ #include "ci/ciConstantPoolCache.hpp" #include "ci/ciFlags.hpp" -#include "ci/ciInstanceKlassKlass.hpp" #include "ci/ciKlass.hpp" #include "ci/ciSymbol.hpp" // ciInstanceKlass // -// This class represents a klassOop in the HotSpot virtual machine -// whose Klass part is an instanceKlass. It may or may not +// This class represents a Klass* in the HotSpot virtual machine +// whose Klass part is an InstanceKlass. It may or may not // be loaded. class ciInstanceKlass : public ciKlass { CI_PACKAGE_ACCESS @@ -48,7 +47,7 @@ jobject _loader; jobject _protection_domain; - instanceKlass::ClassState _init_state; // state of class + InstanceKlass::ClassState _init_state; // state of class bool _is_shared; bool _has_finalizer; bool _has_subklass; @@ -77,8 +76,8 @@ ciInstanceKlass(KlassHandle h_k); ciInstanceKlass(ciSymbol* name, jobject loader, jobject protection_domain); - instanceKlass* get_instanceKlass() const { - return (instanceKlass*)get_Klass(); + InstanceKlass* get_instanceKlass() const { + return (InstanceKlass*)get_Klass(); } oop loader(); @@ -103,7 +102,7 @@ GrowableArray* compute_nonstatic_fields_impl(GrowableArray* super_fields); // Update the init_state for shared klasses - void update_if_shared(instanceKlass::ClassState expected) { + void update_if_shared(InstanceKlass::ClassState expected) { if (_is_shared && _init_state != expected) { if (is_loaded()) compute_shared_init_state(); } @@ -112,18 +111,18 @@ public: // Has this klass been initialized? bool is_initialized() { - update_if_shared(instanceKlass::fully_initialized); - return _init_state == instanceKlass::fully_initialized; + update_if_shared(InstanceKlass::fully_initialized); + return _init_state == InstanceKlass::fully_initialized; } // Is this klass being initialized? bool is_being_initialized() { - update_if_shared(instanceKlass::being_initialized); - return _init_state == instanceKlass::being_initialized; + update_if_shared(InstanceKlass::being_initialized); + return _init_state == InstanceKlass::being_initialized; } // Has this klass been linked? bool is_linked() { - update_if_shared(instanceKlass::linked); - return _init_state >= instanceKlass::linked; + update_if_shared(InstanceKlass::linked); + return _init_state >= InstanceKlass::linked; } // General klass information. @@ -220,7 +219,7 @@ // Is the defining class loader of this class the default loader? bool uses_default_loader(); - bool is_java_lang_Object(); + bool is_java_lang_Object() const; // Is this klass in the given package? bool is_in_package(const char* packagename) { @@ -229,8 +228,8 @@ bool is_in_package(const char* packagename, int len); // What kind of ciObject is this? - bool is_instance_klass() { return true; } - bool is_java_klass() { return true; } + bool is_instance_klass() const { return true; } + bool is_java_klass() const { return true; } }; #endif // SHARE_VM_CI_CIINSTANCEKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciInstanceKlassKlass.cpp --- a/src/share/vm/ci/ciInstanceKlassKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "ci/ciInstanceKlassKlass.hpp" -#include "ci/ciUtilities.hpp" - -// ciInstanceKlassKlass -// -// This class represents a klassOop in the HotSpot virtual machine -// whose Klass part is an instanceKlassKlass. - -// ------------------------------------------------------------------ -// ciInstanceKlassKlass::instance -// -// Return the distinguished instance of this class -ciInstanceKlassKlass* ciInstanceKlassKlass::make() { - return CURRENT_ENV->_instance_klass_klass_instance; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciInstanceKlassKlass.hpp --- a/src/share/vm/ci/ciInstanceKlassKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_CI_CIINSTANCEKLASSKLASS_HPP -#define SHARE_VM_CI_CIINSTANCEKLASSKLASS_HPP - -#include "ci/ciKlassKlass.hpp" - -// ciInstanceKlassKlass -// -// This class represents a klassOop in the HotSpot virtual machine -// whose Klass part is a instanceKlassKlass. -class ciInstanceKlassKlass : public ciKlassKlass { - CI_PACKAGE_ACCESS - -private: - ciInstanceKlassKlass(KlassHandle h_k) - : ciKlassKlass(h_k, ciSymbol::make("unique_instanceKlassKlass")) { - assert(h_k()->klass_part()->oop_is_instanceKlass(), "wrong type"); - } - - instanceKlassKlass* get_instanceKlassKlass() { - return (instanceKlassKlass*)get_Klass(); - } - - const char* type_string() { return "ciInstanceKlassKlass"; } - -public: - // What kind of ciObject is this? - bool is_instance_klass_klass() { return true; } - - // Return the distinguished ciInstanceKlassKlass instance. - static ciInstanceKlassKlass* make(); -}; - -#endif // SHARE_VM_CI_CIINSTANCEKLASSKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciKlass.cpp --- a/src/share/vm/ci/ciKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciKlass.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,13 +30,13 @@ // ciKlass // -// This class represents a klassOop in the HotSpot virtual +// This class represents a Klass* in the HotSpot virtual // machine. // ------------------------------------------------------------------ // ciKlass::ciKlass ciKlass::ciKlass(KlassHandle h_k) : ciType(h_k) { - assert(get_oop()->is_klass(), "wrong type"); + assert(get_Klass()->is_klass(), "wrong type"); Klass* k = get_Klass(); _layout_helper = k->layout_helper(); Symbol* klass_name = k->name(); @@ -49,7 +49,7 @@ // // Nameless klass variant. ciKlass::ciKlass(KlassHandle h_k, ciSymbol* name) : ciType(h_k) { - assert(get_oop()->is_klass(), "wrong type"); + assert(get_Klass()->is_klass(), "wrong type"); _name = name; _layout_helper = Klass::_lh_neutral_value; } @@ -58,7 +58,7 @@ // ciKlass::ciKlass // // Unloaded klass variant. -ciKlass::ciKlass(ciSymbol* name, ciKlass* klass) : ciType(klass) { +ciKlass::ciKlass(ciSymbol* name, BasicType bt) : ciType(bt) { _name = name; _layout_helper = Klass::_lh_neutral_value; } @@ -67,7 +67,6 @@ // ciKlass::is_subtype_of bool ciKlass::is_subtype_of(ciKlass* that) { assert(is_loaded() && that->is_loaded(), "must be loaded"); - assert(is_java_klass() && that->is_java_klass(), "must be java klasses"); // Check to see if the klasses are identical. if (this == that) { return true; @@ -75,7 +74,7 @@ VM_ENTRY_MARK; Klass* this_klass = get_Klass(); - klassOop that_klass = that->get_klassOop(); + Klass* that_klass = that->get_Klass(); bool result = this_klass->is_subtype_of(that_klass); return result; @@ -85,12 +84,11 @@ // ciKlass::is_subclass_of bool ciKlass::is_subclass_of(ciKlass* that) { assert(is_loaded() && that->is_loaded(), "must be loaded"); - assert(is_java_klass() && that->is_java_klass(), "must be java klasses"); // Check to see if the klasses are identical. VM_ENTRY_MARK; Klass* this_klass = get_Klass(); - klassOop that_klass = that->get_klassOop(); + Klass* that_klass = that->get_Klass(); bool result = this_klass->is_subclass_of(that_klass); return result; @@ -100,7 +98,6 @@ // ciKlass::super_depth juint ciKlass::super_depth() { assert(is_loaded(), "must be loaded"); - assert(is_java_klass(), "must be java klasses"); VM_ENTRY_MARK; Klass* this_klass = get_Klass(); @@ -111,7 +108,6 @@ // ciKlass::super_check_offset juint ciKlass::super_check_offset() { assert(is_loaded(), "must be loaded"); - assert(is_java_klass(), "must be java klasses"); VM_ENTRY_MARK; Klass* this_klass = get_Klass(); @@ -122,19 +118,17 @@ // ciKlass::super_of_depth ciKlass* ciKlass::super_of_depth(juint i) { assert(is_loaded(), "must be loaded"); - assert(is_java_klass(), "must be java klasses"); VM_ENTRY_MARK; Klass* this_klass = get_Klass(); - klassOop super = this_klass->primary_super_of_depth(i); - return (super != NULL) ? CURRENT_THREAD_ENV->get_object(super)->as_klass() : NULL; + Klass* super = this_klass->primary_super_of_depth(i); + return (super != NULL) ? CURRENT_THREAD_ENV->get_klass(super) : NULL; } // ------------------------------------------------------------------ // ciKlass::can_be_primary_super bool ciKlass::can_be_primary_super() { assert(is_loaded(), "must be loaded"); - assert(is_java_klass(), "must be java klasses"); VM_ENTRY_MARK; Klass* this_klass = get_Klass(); @@ -156,7 +150,6 @@ ciKlass* ciKlass::least_common_ancestor(ciKlass* that) { assert(is_loaded() && that->is_loaded(), "must be loaded"); - assert(is_java_klass() && that->is_java_klass(), "must be java klasses"); // Check to see if the klasses are identical. if (this == that) { return this; @@ -178,7 +171,7 @@ // Create the ciInstanceKlass for the lca. ciKlass* result = - CURRENT_THREAD_ENV->get_object(lca->as_klassOop())->as_klass(); + CURRENT_THREAD_ENV->get_klass(lca); return result; } @@ -204,7 +197,7 @@ if (!is_loaded()) return ciEnv::current()->get_unloaded_klass_mirror(this); oop java_mirror = get_Klass()->java_mirror(); - return CURRENT_ENV->get_object(java_mirror)->as_instance(); + return CURRENT_ENV->get_instance(java_mirror); ) } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciKlass.hpp --- a/src/share/vm/ci/ciKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciKlass.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,15 +26,14 @@ #define SHARE_VM_CI_CIKLASS_HPP #include "ci/ciType.hpp" -#include "oops/klassOop.hpp" // ciKlass // -// This class and its subclasses represent klassOops in the -// HotSpot virtual machine. In the vm, each klassOop contains an +// This class and its subclasses represent Klass*s in the +// HotSpot virtual machine. In the vm, each Klass* contains an // embedded Klass object. ciKlass is subclassed to explicitly -// represent the kind of Klass embedded in the klassOop. For -// example, a klassOop with an embedded objArrayKlass object is +// represent the kind of Klass embedded in the Klass*. For +// example, a Klass* with an embedded objArrayKlass object is // represented in the ciObject hierarchy by the class // ciObjArrayKlass. class ciKlass : public ciType { @@ -50,16 +49,14 @@ protected: ciKlass(KlassHandle k_h, ciSymbol* name); - ciKlass(ciSymbol* name, ciKlass* klass); + ciKlass(ciSymbol* name, BasicType bt); - klassOop get_klassOop() const { - klassOop k = (klassOop)get_oop(); + Klass* get_Klass() const { + Klass* k = (Klass*)_metadata; assert(k != NULL, "illegal use of unloaded klass"); return k; } - Klass* get_Klass() const { return get_klassOop()->klass_part(); } - // Certain subklasses have an associated class loader. virtual oop loader() { return NULL; } virtual jobject loader_handle() { return NULL; } @@ -88,6 +85,9 @@ bool can_be_primary_super(); static juint primary_super_limit() { return Klass::primary_super_limit(); } + // Is this ciObject the ciInstanceKlass representing java.lang.Object()? + virtual bool is_java_lang_Object() const { return false; } + // Get the shared parent of two klasses. ciKlass* least_common_ancestor(ciKlass* k); @@ -119,7 +119,7 @@ jint access_flags(); // What kind of ciObject is this? - bool is_klass() { return true; } + bool is_klass() const { return true; } void print_name_on(outputStream* st); }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciKlassKlass.cpp --- a/src/share/vm/ci/ciKlassKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "ci/ciKlassKlass.hpp" -#include "ci/ciUtilities.hpp" - -// ciKlassKlass -// -// This class represents a klassOop in the HotSpot virtual machine -// whose Klass part is a klassKlass. - -// ------------------------------------------------------------------ -// ciKlassKlass::instance -// -// Return the distinguished instance of this class -ciKlassKlass* ciKlassKlass::make() { - return CURRENT_ENV->_klass_klass_instance; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciKlassKlass.hpp --- a/src/share/vm/ci/ciKlassKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_CI_CIKLASSKLASS_HPP -#define SHARE_VM_CI_CIKLASSKLASS_HPP - -#include "ci/ciKlass.hpp" -#include "ci/ciSymbol.hpp" - -// ciKlassKlass -// -// This class represents a klassOop in the HotSpot virtual machine -// whose Klass part is a klassKlass or one of its subclasses -// (instanceKlassKlass, objArrayKlassKlass, typeArrayKlassKlass). -class ciKlassKlass : public ciKlass { - CI_PACKAGE_ACCESS - -protected: - ciKlassKlass(KlassHandle h_k) - : ciKlass(h_k, ciSymbol::make("unique_klassKlass")) { - assert(h_k()->klass_part()->oop_is_klass(), "wrong type"); - } - ciKlassKlass(KlassHandle h_k, ciSymbol *name) - : ciKlass(h_k, name) {} - - klassKlass* get_klassKlass() { return (klassKlass*)get_Klass(); } - - const char* type_string() { return "ciKlassKlass"; } - -public: - // What kind of ciObject is this? - bool is_klass_klass() { return true; } - - // Return the distinguished ciKlassKlass instance. - static ciKlassKlass* make(); -}; - -#endif // SHARE_VM_CI_CIKLASSKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciMemberName.cpp --- a/src/share/vm/ci/ciMemberName.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciMemberName.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -34,6 +34,11 @@ // Return: MN.vmtarget ciMethod* ciMemberName::get_vmtarget() const { VM_ENTRY_MARK; - oop vmtarget_oop = java_lang_invoke_MemberName::vmtarget(get_oop()); - return CURRENT_ENV->get_object(vmtarget_oop)->as_method(); + // FIXME: Share code with ciMethodHandle::get_vmtarget + Metadata* vmtarget = java_lang_invoke_MemberName::vmtarget(get_oop()); + if (vmtarget->is_method()) + return CURRENT_ENV->get_method((Method*) vmtarget); + // FIXME: What if the vmtarget is a Klass? + assert(false, ""); + return NULL; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciMetadata.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/ci/ciMetadata.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,55 @@ +/* + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "ci/ciObject.hpp" +#include "ci/ciUtilities.hpp" +#include "gc_interface/collectedHeap.inline.hpp" +#include "oops/oop.inline2.hpp" + +// ------------------------------------------------------------------ +// ciMetadata::print +// +// Print debugging output about this ciMetadata. +// +// Implementation note: dispatch to the virtual print_impl behavior +// for this ciObject. +void ciMetadata::print(outputStream* st) { + st->print("<%s", type_string()); + GUARDED_VM_ENTRY(print_impl(st);) + st->print(" ident=%d address=0x%x>", ident(), (address)this); +} + + +// ------------------------------------------------------------------ +// ciMetadata::print_oop +// +// Print debugging output about the metadata this ciMetadata represents. +void ciMetadata::print_metadata(outputStream* st) { + if (!is_loaded()) { + st->print_cr("UNLOADED"); + } else { + GUARDED_VM_ENTRY(_metadata->print_on(st);) + } +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciMetadata.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/ci/ciMetadata.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,120 @@ +/* + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_CI_CIMETADATA_HPP +#define SHARE_VM_CI_CIMETADATA_HPP + +#include "ci/ciBaseObject.hpp" +#include "ci/ciClassList.hpp" +#include "memory/allocation.hpp" +#include "runtime/handles.hpp" +#include "runtime/jniHandles.hpp" + +// ciMetadata +// +// Compiler interface to metadata object in the VM, not Java object. + +class ciMetadata: public ciBaseObject { + CI_PACKAGE_ACCESS + friend class ciEnv; + + protected: + Metadata* _metadata; + + ciMetadata(): _metadata(NULL) {} + ciMetadata(Metadata* o): _metadata(o) {} + + virtual bool is_classless() const { return false; } + public: + bool is_loaded() const { return _metadata != NULL || is_classless(); } + + virtual bool is_metadata() const { return true; } + + virtual bool is_type() const { return false; } + virtual bool is_cpcache() const { return false; } + virtual bool is_return_address() const { return false; } + virtual bool is_method() const { return false; } + virtual bool is_method_data() const { return false; } + virtual bool is_klass() const { return false; } + virtual bool is_instance_klass() const { return false; } + virtual bool is_array_klass() const { return false; } + virtual bool is_obj_array_klass() const { return false; } + virtual bool is_type_array_klass() const { return false; } + + ciMethod* as_method() { + assert(is_method(), "bad cast"); + return (ciMethod*)this; + } + ciMethodData* as_method_data() { + assert(is_method_data(), "bad cast"); + return (ciMethodData*)this; + } + ciSymbol* as_symbol() { + assert(is_symbol(), "bad cast"); + return (ciSymbol*)this; + } + ciType* as_type() { + assert(is_type(), "bad cast"); + return (ciType*)this; + } + ciReturnAddress* as_return_address() { + assert(is_return_address(), "bad cast"); + return (ciReturnAddress*)this; + } + ciKlass* as_klass() { + assert(is_klass(), "bad cast"); + return (ciKlass*)this; + } + ciInstanceKlass* as_instance_klass() { + assert(is_instance_klass(), "bad cast"); + return (ciInstanceKlass*)this; + } + ciArrayKlass* as_array_klass() { + assert(is_array_klass(), "bad cast"); + return (ciArrayKlass*)this; + } + ciObjArrayKlass* as_obj_array_klass() { + assert(is_obj_array_klass(), "bad cast"); + return (ciObjArrayKlass*)this; + } + ciTypeArrayKlass* as_type_array_klass() { + assert(is_type_array_klass(), "bad cast"); + return (ciTypeArrayKlass*)this; + } + + Metadata* constant_encoding() { return _metadata; } + + bool equals(ciMetadata* obj) const { return (this == obj); } + + int hash() { return ident() * 31; } // ??? + + void print(outputStream* st); + virtual void print_impl(outputStream* st) {} + virtual const char* type_string() { return "ciMetadata"; } + + void print() { print(tty); } + void print_metadata(outputStream* st = tty); + +}; +#endif // SHARE_VM_CI_CIMETADATA_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciMethod.cpp --- a/src/share/vm/ci/ciMethod.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciMethod.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -29,7 +29,6 @@ #include "ci/ciMethod.hpp" #include "ci/ciMethodBlocks.hpp" #include "ci/ciMethodData.hpp" -#include "ci/ciMethodKlass.hpp" #include "ci/ciStreams.hpp" #include "ci/ciSymbol.hpp" #include "ci/ciUtilities.hpp" @@ -51,16 +50,16 @@ #ifdef COMPILER2 #include "ci/bcEscapeAnalyzer.hpp" #include "ci/ciTypeFlow.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #endif #ifdef SHARK #include "ci/ciTypeFlow.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #endif // ciMethod // -// This class represents a methodOop in the HotSpot virtual +// This class represents a Method* in the HotSpot virtual // machine. @@ -68,7 +67,7 @@ // ciMethod::ciMethod // // Loaded method. -ciMethod::ciMethod(methodHandle h_m) : ciObject(h_m) { +ciMethod::ciMethod(methodHandle h_m) : ciMetadata(h_m()) { assert(h_m() != NULL, "no null method"); // These fields are always filled in in loaded methods. @@ -106,7 +105,7 @@ CHECK_UNHANDLED_OOPS_ONLY(Thread::current()->clear_unhandled_oops()); } - if (instanceKlass::cast(h_m()->method_holder())->is_linked()) { + if (InstanceKlass::cast(h_m()->method_holder())->is_linked()) { _can_be_statically_bound = h_m()->can_be_statically_bound(); } else { // Have to use a conservative value in this case. @@ -123,7 +122,7 @@ // generating _signature may allow GC and therefore move m. // These fields are always filled in. _name = env->get_symbol(h_m()->name()); - _holder = env->get_object(h_m()->method_holder())->as_instance_klass(); + _holder = env->get_instance_klass(h_m()->method_holder()); ciSymbol* sig_symbol = env->get_symbol(h_m()->signature()); constantPoolHandle cpool = h_m()->constants(); _signature = new (env->arena()) ciSignature(_holder, cpool, sig_symbol); @@ -151,7 +150,7 @@ ciSymbol* name, ciSymbol* signature, ciInstanceKlass* accessor) : - ciObject(ciMethodKlass::make()), + ciMetadata((Metadata*)NULL), _name( name), _holder( holder), _intrinsic_id( vmIntrinsics::_none), @@ -180,7 +179,7 @@ VM_ENTRY_MARK; assert(is_loaded(), "only loaded methods have code"); - methodOop me = get_methodOop(); + Method* me = get_Method(); Arena* arena = CURRENT_THREAD_ENV->arena(); // Load the bytecodes. @@ -189,7 +188,7 @@ // Revert any breakpoint bytecodes in ci's copy if (me->number_of_breakpoints() > 0) { - BreakpointInfo* bp = instanceKlass::cast(me->method_holder())->breakpoints(); + BreakpointInfo* bp = InstanceKlass::cast(me->method_holder())->breakpoints(); for (; bp != NULL; bp = bp->next()) { if (bp->match(me)) { code_at_put(bp->bci(), bp->orig_bytecode()); @@ -236,7 +235,7 @@ bool ciMethod::has_linenumber_table() const { check_is_loaded(); VM_ENTRY_MARK; - return get_methodOop()->has_linenumber_table(); + return get_Method()->has_linenumber_table(); } @@ -245,7 +244,7 @@ u_char* ciMethod::compressed_linenumber_table() const { check_is_loaded(); VM_ENTRY_MARK; - return get_methodOop()->compressed_linenumber_table(); + return get_Method()->compressed_linenumber_table(); } @@ -254,7 +253,7 @@ int ciMethod::line_number_from_bci(int bci) const { check_is_loaded(); VM_ENTRY_MARK; - return get_methodOop()->line_number_from_bci(bci); + return get_Method()->line_number_from_bci(bci); } @@ -266,7 +265,7 @@ check_is_loaded(); assert(holder()->is_linked(), "must be linked"); VM_ENTRY_MARK; - return get_methodOop()->vtable_index(); + return get_Method()->vtable_index(); } @@ -279,7 +278,7 @@ check_is_loaded(); assert(holder()->is_linked(), "must be linked"); VM_ENTRY_MARK; - return klassItable::compute_itable_index(get_methodOop()); + return klassItable::compute_itable_index(get_Method()); } #endif // SHARK @@ -292,7 +291,7 @@ check_is_loaded(); assert(flags().is_native(), "must be native method"); VM_ENTRY_MARK; - methodOop method = get_methodOop(); + Method* method = get_Method(); address entry = method->native_function(); assert(entry != NULL, "must be valid entry point"); return entry; @@ -306,7 +305,7 @@ address ciMethod::interpreter_entry() { check_is_loaded(); VM_ENTRY_MARK; - methodHandle mh(THREAD, get_methodOop()); + methodHandle mh(THREAD, get_Method()); return Interpreter::entry_for_method(mh); } @@ -321,7 +320,7 @@ // Analyze the method to see if monitors are used properly. VM_ENTRY_MARK; - methodHandle method(THREAD, get_methodOop()); + methodHandle method(THREAD, get_Method()); assert(method->has_monitor_bytecodes(), "should have checked this"); // Check to see if a previous compilation computed the @@ -426,7 +425,7 @@ BitMap ciMethod::live_local_oops_at_bci(int bci) { VM_ENTRY_MARK; InterpreterOopMap mask; - OopMapCache::compute_one_oop_map(get_methodOop(), bci, &mask); + OopMapCache::compute_one_oop_map(get_Method(), bci, &mask); int mask_size = max_locals(); BitMap result(mask_size); result.clear(); @@ -607,16 +606,16 @@ methodHandle target; { MutexLocker locker(Compile_lock); - klassOop context = actual_recv->get_klassOop(); + Klass* context = actual_recv->get_Klass(); target = Dependencies::find_unique_concrete_method(context, - root_m->get_methodOop()); + root_m->get_Method()); // %%% Should upgrade this ciMethod API to look for 1 or 2 concrete methods. } #ifndef PRODUCT - if (TraceDependencies && target() != NULL && target() != root_m->get_methodOop()) { + if (TraceDependencies && target() != NULL && target() != root_m->get_Method()) { tty->print("found a non-root unique target method"); - tty->print_cr(" context = %s", instanceKlass::cast(actual_recv->get_klassOop())->external_name()); + tty->print_cr(" context = %s", InstanceKlass::cast(actual_recv->get_Klass())->external_name()); tty->print(" method = "); target->print_short_name(tty); tty->cr(); @@ -626,7 +625,7 @@ if (target() == NULL) { return NULL; } - if (target() == root_m->get_methodOop()) { + if (target() == root_m->get_Method()) { return root_m; } if (!root_m->is_public() && @@ -640,7 +639,7 @@ // with the same name but different vtable indexes. return NULL; } - return CURRENT_THREAD_ENV->get_object(target())->as_method(); + return CURRENT_THREAD_ENV->get_method(target()); } // ------------------------------------------------------------------ @@ -652,18 +651,18 @@ check_is_loaded(); VM_ENTRY_MARK; - KlassHandle caller_klass (THREAD, caller->get_klassOop()); - KlassHandle h_recv (THREAD, exact_receiver->get_klassOop()); - KlassHandle h_resolved (THREAD, holder()->get_klassOop()); + KlassHandle caller_klass (THREAD, caller->get_Klass()); + KlassHandle h_recv (THREAD, exact_receiver->get_Klass()); + KlassHandle h_resolved (THREAD, holder()->get_Klass()); Symbol* h_name = name()->get_symbol(); Symbol* h_signature = signature()->get_symbol(); methodHandle m; // Only do exact lookup if receiver klass has been linked. Otherwise, // the vtable has not been setup, and the LinkResolver will fail. - if (h_recv->oop_is_javaArray() + if (h_recv->oop_is_array() || - instanceKlass::cast(h_recv())->is_linked() && !exact_receiver->is_interface()) { + InstanceKlass::cast(h_recv())->is_linked() && !exact_receiver->is_interface()) { if (holder()->is_interface()) { m = LinkResolver::resolve_interface_call_or_null(h_recv, h_resolved, h_name, h_signature, caller_klass); } else { @@ -677,8 +676,8 @@ } ciMethod* result = this; - if (m() != get_methodOop()) { - result = CURRENT_THREAD_ENV->get_object(m())->as_method(); + if (m() != get_Method()) { + result = CURRENT_THREAD_ENV->get_method(m()); } // Don't return abstract methods because they aren't @@ -694,11 +693,11 @@ // ciMethod::resolve_vtable_index // // Given a known receiver klass, find the vtable index for the call. -// Return methodOopDesc::invalid_vtable_index if the vtable_index is unknown. +// Return Method::invalid_vtable_index if the vtable_index is unknown. int ciMethod::resolve_vtable_index(ciKlass* caller, ciKlass* receiver) { check_is_loaded(); - int vtable_index = methodOopDesc::invalid_vtable_index; + int vtable_index = Method::invalid_vtable_index; // Only do lookup if receiver klass has been linked. Otherwise, // the vtable has not been setup, and the LinkResolver will fail. if (!receiver->is_interface() @@ -706,15 +705,15 @@ receiver->as_instance_klass()->is_linked())) { VM_ENTRY_MARK; - KlassHandle caller_klass (THREAD, caller->get_klassOop()); - KlassHandle h_recv (THREAD, receiver->get_klassOop()); + KlassHandle caller_klass (THREAD, caller->get_Klass()); + KlassHandle h_recv (THREAD, receiver->get_Klass()); Symbol* h_name = name()->get_symbol(); Symbol* h_signature = signature()->get_symbol(); vtable_index = LinkResolver::resolve_virtual_vtable_index(h_recv, h_recv, h_name, h_signature, caller_klass); - if (vtable_index == methodOopDesc::nonvirtual_vtable_index) { + if (vtable_index == Method::nonvirtual_vtable_index) { // A statically bound method. Return "no such index". - vtable_index = methodOopDesc::invalid_vtable_index; + vtable_index = Method::invalid_vtable_index; } } @@ -803,19 +802,19 @@ // ------------------------------------------------------------------ // ciMethod::ensure_method_data // -// Generate new methodDataOop objects at compile time. +// Generate new MethodData* objects at compile time. // Return true if allocation was successful or no MDO is required. bool ciMethod::ensure_method_data(methodHandle h_m) { EXCEPTION_CONTEXT; if (is_native() || is_abstract() || h_m()->is_accessor()) return true; if (h_m()->method_data() == NULL) { - methodOopDesc::build_interpreter_method_data(h_m, THREAD); + Method::build_interpreter_method_data(h_m, THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; } } if (h_m()->method_data() != NULL) { - _method_data = CURRENT_ENV->get_object(h_m()->method_data())->as_method_data(); + _method_data = CURRENT_ENV->get_method_data(h_m()->method_data()); _method_data->load_data(); return true; } else { @@ -829,7 +828,7 @@ bool result = true; if (_method_data == NULL || _method_data->is_empty()) { GUARDED_VM_ENTRY({ - result = ensure_method_data(get_methodOop()); + result = ensure_method_data(get_Method()); }); } return result; @@ -846,10 +845,10 @@ VM_ENTRY_MARK; ciEnv* env = CURRENT_ENV; Thread* my_thread = JavaThread::current(); - methodHandle h_m(my_thread, get_methodOop()); + methodHandle h_m(my_thread, get_Method()); if (h_m()->method_data() != NULL) { - _method_data = CURRENT_ENV->get_object(h_m()->method_data())->as_method_data(); + _method_data = CURRENT_ENV->get_method_data(h_m()->method_data()); _method_data->load_data(); } else { _method_data = CURRENT_ENV->get_empty_methodData(); @@ -894,7 +893,7 @@ bool ciMethod::should_exclude() { check_is_loaded(); VM_ENTRY_MARK; - methodHandle mh(THREAD, get_methodOop()); + methodHandle mh(THREAD, get_Method()); bool ignore; return CompilerOracle::should_exclude(mh, ignore); } @@ -906,7 +905,7 @@ bool ciMethod::should_inline() { check_is_loaded(); VM_ENTRY_MARK; - methodHandle mh(THREAD, get_methodOop()); + methodHandle mh(THREAD, get_Method()); return CompilerOracle::should_inline(mh); } @@ -917,7 +916,7 @@ bool ciMethod::should_not_inline() { check_is_loaded(); VM_ENTRY_MARK; - methodHandle mh(THREAD, get_methodOop()); + methodHandle mh(THREAD, get_Method()); return CompilerOracle::should_not_inline(mh); } @@ -928,7 +927,7 @@ bool ciMethod::should_print_assembly() { check_is_loaded(); VM_ENTRY_MARK; - methodHandle mh(THREAD, get_methodOop()); + methodHandle mh(THREAD, get_Method()); return CompilerOracle::should_print(mh); } @@ -940,7 +939,7 @@ bool ciMethod::break_at_execute() { check_is_loaded(); VM_ENTRY_MARK; - methodHandle mh(THREAD, get_methodOop()); + methodHandle mh(THREAD, get_Method()); return CompilerOracle::should_break_at(mh); } @@ -950,7 +949,7 @@ bool ciMethod::has_option(const char* option) { check_is_loaded(); VM_ENTRY_MARK; - methodHandle mh(THREAD, get_methodOop()); + methodHandle mh(THREAD, get_Method()); return CompilerOracle::has_option_string(mh, option); } @@ -980,7 +979,7 @@ } else { _is_c2_compilable = false; } - get_methodOop()->set_not_compilable(env->comp_level()); + get_Method()->set_not_compilable(env->comp_level()); } // ------------------------------------------------------------------ @@ -995,20 +994,20 @@ check_is_loaded(); VM_ENTRY_MARK; ciEnv* env = CURRENT_ENV; - return !get_methodOop()->is_not_osr_compilable(env->comp_level()); + return !get_Method()->is_not_osr_compilable(env->comp_level()); } // ------------------------------------------------------------------ // ciMethod::has_compiled_code bool ciMethod::has_compiled_code() { VM_ENTRY_MARK; - return get_methodOop()->code() != NULL; + return get_Method()->code() != NULL; } int ciMethod::comp_level() { check_is_loaded(); VM_ENTRY_MARK; - nmethod* nm = get_methodOop()->code(); + nmethod* nm = get_Method()->code(); if (nm != NULL) return nm->comp_level(); return 0; } @@ -1016,7 +1015,7 @@ int ciMethod::highest_osr_comp_level() { check_is_loaded(); VM_ENTRY_MARK; - return get_methodOop()->highest_osr_comp_level(); + return get_Method()->highest_osr_comp_level(); } // ------------------------------------------------------------------ @@ -1026,7 +1025,7 @@ // size of 1 for methods which has the ForceInline annotation. int ciMethod::code_size_for_inlining() { check_is_loaded(); - if (get_methodOop()->force_inline()) { + if (get_Method()->force_inline()) { return 1; } return code_size(); @@ -1042,7 +1041,7 @@ // specific accessor nmethod::insts_size. int ciMethod::instructions_size(int comp_level) { GUARDED_VM_ENTRY( - nmethod* code = get_methodOop()->code(); + nmethod* code = get_Method()->code(); if (code != NULL && (comp_level == CompLevel_any || comp_level == code->comp_level())) { return code->insts_end() - code->verified_entry_point(); } @@ -1054,7 +1053,7 @@ // ciMethod::log_nmethod_identity void ciMethod::log_nmethod_identity(xmlStream* log) { GUARDED_VM_ENTRY( - nmethod* code = get_methodOop()->code(); + nmethod* code = get_Method()->code(); if (code != NULL) { code->log_identity(log); } @@ -1067,14 +1066,14 @@ check_is_loaded(); VM_ENTRY_MARK; return Interpreter::is_not_reached( - methodHandle(THREAD, get_methodOop()), bci); + methodHandle(THREAD, get_Method()), bci); } // ------------------------------------------------------------------ // ciMethod::was_never_executed bool ciMethod::was_executed_more_than(int times) { VM_ENTRY_MARK; - return get_methodOop()->was_executed_more_than(times); + return get_Method()->was_executed_more_than(times); } // ------------------------------------------------------------------ @@ -1083,8 +1082,8 @@ VM_ENTRY_MARK; { EXCEPTION_MARK; - methodHandle m(THREAD, get_methodOop()); - bool has_unloaded = methodOopDesc::has_unloaded_classes_in_signature(m, (JavaThread *)THREAD); + methodHandle m(THREAD, get_Method()); + bool has_unloaded = Method::has_unloaded_classes_in_signature(m, (JavaThread *)THREAD); if( HAS_PENDING_EXCEPTION ) { CLEAR_PENDING_EXCEPTION; return true; // Declare that we may have unloaded classes @@ -1097,7 +1096,7 @@ // ciMethod::is_klass_loaded bool ciMethod::is_klass_loaded(int refinfo_index, bool must_be_resolved) const { VM_ENTRY_MARK; - return get_methodOop()->is_klass_loaded(refinfo_index, must_be_resolved); + return get_Method()->is_klass_loaded(refinfo_index, must_be_resolved); } // ------------------------------------------------------------------ @@ -1107,7 +1106,7 @@ { EXCEPTION_MARK; HandleMark hm(THREAD); - constantPoolHandle pool (THREAD, get_methodOop()->constants()); + constantPoolHandle pool (THREAD, get_Method()->constants()); methodHandle spec_method; KlassHandle spec_klass; Bytecodes::Code code = (is_static ? Bytecodes::_invokestatic : Bytecodes::_invokevirtual); @@ -1128,14 +1127,14 @@ // Print the bytecodes for this method. void ciMethod::print_codes_on(outputStream* st) { check_is_loaded(); - GUARDED_VM_ENTRY(get_methodOop()->print_codes_on(st);) + GUARDED_VM_ENTRY(get_Method()->print_codes_on(st);) } #define FETCH_FLAG_FROM_VM(flag_accessor) { \ check_is_loaded(); \ VM_ENTRY_MARK; \ - return get_methodOop()->flag_accessor(); \ + return get_Method()->flag_accessor(); \ } bool ciMethod::is_empty_method() const { FETCH_FLAG_FROM_VM(is_empty_method); } @@ -1174,7 +1173,7 @@ // Print a range of the bytecodes for this method. void ciMethod::print_codes_on(int from, int to, outputStream* st) { check_is_loaded(); - GUARDED_VM_ENTRY(get_methodOop()->print_codes_on(from, to, st);) + GUARDED_VM_ENTRY(get_Method()->print_codes_on(from, to, st);) } // ------------------------------------------------------------------ @@ -1183,7 +1182,7 @@ // Print the name of this method, including signature and some flags. void ciMethod::print_name(outputStream* st) { check_is_loaded(); - GUARDED_VM_ENTRY(get_methodOop()->print_name(st);) + GUARDED_VM_ENTRY(get_Method()->print_name(st);) } // ------------------------------------------------------------------ @@ -1192,7 +1191,7 @@ // Print the name of this method, without signature. void ciMethod::print_short_name(outputStream* st) { if (is_loaded()) { - GUARDED_VM_ENTRY(get_methodOop()->print_short_name(st);); + GUARDED_VM_ENTRY(get_Method()->print_short_name(st);); } else { // Fall back if method is not loaded. holder()->print_name_on(st); @@ -1208,7 +1207,7 @@ // // Implementation of the print method. void ciMethod::print_impl(outputStream* st) { - ciObject::print_impl(st); + ciMetadata::print_impl(st); st->print(" name="); name()->print_symbol_on(st); st->print(" holder="); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciMethod.hpp --- a/src/share/vm/ci/ciMethod.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciMethod.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,9 +42,9 @@ // ciMethod // -// This class represents a methodOop in the HotSpot virtual +// This class represents a Method* in the HotSpot virtual // machine. -class ciMethod : public ciObject { +class ciMethod : public ciMetadata { friend class CompileBroker; CI_PACKAGE_ACCESS friend class ciEnv; @@ -90,8 +90,8 @@ ciMethod(methodHandle h_m); ciMethod(ciInstanceKlass* holder, ciSymbol* name, ciSymbol* signature, ciInstanceKlass* accessor); - methodOop get_methodOop() const { - methodOop m = (methodOop)get_oop(); + Method* get_Method() const { + Method* m = (Method*)_metadata; assert(m != NULL, "illegal use of unloaded method"); return m; } @@ -164,8 +164,8 @@ // Code size for inlining decisions. int code_size_for_inlining(); - bool force_inline() { return get_methodOop()->force_inline(); } - bool dont_inline() { return get_methodOop()->dont_inline(); } + bool force_inline() { return get_Method()->force_inline(); } + bool dont_inline() { return get_Method()->dont_inline(); } int comp_level(); int highest_osr_comp_level(); @@ -268,7 +268,7 @@ bool has_member_arg() const; // What kind of ciObject is this? - bool is_method() { return true; } + bool is_method() const { return true; } // Java access flags bool is_public () const { return flags().is_public(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciMethodData.cpp --- a/src/share/vm/ci/ciMethodData.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciMethodData.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "ci/ciMetadata.hpp" #include "ci/ciMethodData.hpp" #include "ci/ciUtilities.hpp" #include "memory/allocation.inline.hpp" @@ -35,8 +36,8 @@ // ------------------------------------------------------------------ // ciMethodData::ciMethodData // -ciMethodData::ciMethodData(methodDataHandle h_md) : ciObject(h_md) { - assert(h_md() != NULL, "no null method data"); +ciMethodData::ciMethodData(MethodData* md) : ciMetadata(md) { + assert(md != NULL, "no null method data"); Copy::zero_to_words((HeapWord*) &_orig, sizeof(_orig) / sizeof(HeapWord)); _data = NULL; _data_size = 0; @@ -56,8 +57,8 @@ // ------------------------------------------------------------------ // ciMethodData::ciMethodData // -// No methodDataOop. -ciMethodData::ciMethodData() : ciObject() { +// No MethodData*. +ciMethodData::ciMethodData() : ciMetadata(NULL) { Copy::zero_to_words((HeapWord*) &_orig, sizeof(_orig) / sizeof(HeapWord)); _data = NULL; _data_size = 0; @@ -75,7 +76,7 @@ } void ciMethodData::load_data() { - methodDataOop mdo = get_methodDataOop(); + MethodData* mdo = get_MethodData(); if (mdo == NULL) return; // To do: don't copy the data if it is not "ripe" -- require a minimum # @@ -84,11 +85,9 @@ // Snapshot the data -- actually, take an approximate snapshot of // the data. Any concurrently executing threads may be changing the // data as we copy it. - int skip_header = oopDesc::header_size(); - Copy::disjoint_words((HeapWord*) mdo + skip_header, - (HeapWord*) &_orig + skip_header, - sizeof(_orig) / HeapWordSize - skip_header); - DEBUG_ONLY(*_orig.adr_method() = NULL); // no dangling oops, please + Copy::disjoint_words((HeapWord*) mdo, + (HeapWord*) &_orig, + sizeof(_orig) / HeapWordSize); Arena* arena = CURRENT_ENV->arena(); _data_size = mdo->data_size(); _extra_data_size = mdo->extra_data_size(); @@ -107,7 +106,7 @@ data = mdo->next_data(data); } // Note: Extra data are all BitData, and do not need translation. - _current_mileage = methodDataOopDesc::mileage_of(mdo->method()); + _current_mileage = MethodData::mileage_of(mdo->method()); _invocation_counter = mdo->invocation_count(); _backedge_counter = mdo->backedge_count(); _state = mdo->is_mature()? mature_state: immature_state; @@ -120,9 +119,9 @@ void ciReceiverTypeData::translate_receiver_data_from(ProfileData* data) { for (uint row = 0; row < row_limit(); row++) { - klassOop k = data->as_ReceiverTypeData()->receiver(row); + Klass* k = data->as_ReceiverTypeData()->receiver(row); if (k != NULL) { - ciKlass* klass = CURRENT_ENV->get_object(k)->as_klass(); + ciKlass* klass = CURRENT_ENV->get_klass(k); set_receiver(row, klass); } } @@ -184,7 +183,7 @@ // bci_to_extra_data(bci) ... DataLayout* dp = data_layout_at(data_size()); DataLayout* end = data_layout_at(data_size() + extra_data_size()); - for (; dp < end; dp = methodDataOopDesc::next_extra(dp)) { + for (; dp < end; dp = MethodData::next_extra(dp)) { if (dp->tag() == DataLayout::no_tag) { _saw_free_extra_data = true; // observed an empty slot (common case) return NULL; @@ -236,7 +235,7 @@ void ciMethodData::clear_escape_info() { VM_ENTRY_MARK; - methodDataOop mdo = get_methodDataOop(); + MethodData* mdo = get_MethodData(); if (mdo != NULL) { mdo->clear_escape_info(); ArgInfoData *aid = arg_info(); @@ -248,10 +247,10 @@ _eflags = _arg_local = _arg_stack = _arg_returned = 0; } -// copy our escape info to the methodDataOop if it exists +// copy our escape info to the MethodData* if it exists void ciMethodData::update_escape_info() { VM_ENTRY_MARK; - methodDataOop mdo = get_methodDataOop(); + MethodData* mdo = get_MethodData(); if ( mdo != NULL) { mdo->set_eflags(_eflags); mdo->set_arg_local(_arg_local); @@ -266,7 +265,7 @@ void ciMethodData::set_compilation_stats(short loops, short blocks) { VM_ENTRY_MARK; - methodDataOop mdo = get_methodDataOop(); + MethodData* mdo = get_MethodData(); if (mdo != NULL) { mdo->set_num_loops(loops); mdo->set_num_blocks(blocks); @@ -275,25 +274,25 @@ void ciMethodData::set_would_profile(bool p) { VM_ENTRY_MARK; - methodDataOop mdo = get_methodDataOop(); + MethodData* mdo = get_MethodData(); if (mdo != NULL) { mdo->set_would_profile(p); } } bool ciMethodData::has_escape_info() { - return eflag_set(methodDataOopDesc::estimated); + return eflag_set(MethodData::estimated); } -void ciMethodData::set_eflag(methodDataOopDesc::EscapeFlag f) { +void ciMethodData::set_eflag(MethodData::EscapeFlag f) { set_bits(_eflags, f); } -void ciMethodData::clear_eflag(methodDataOopDesc::EscapeFlag f) { +void ciMethodData::clear_eflag(MethodData::EscapeFlag f) { clear_bits(_eflags, f); } -bool ciMethodData::eflag_set(methodDataOopDesc::EscapeFlag f) const { +bool ciMethodData::eflag_set(MethodData::EscapeFlag f) const { return mask_bits(_eflags, f) != 0; } @@ -338,8 +337,8 @@ } ByteSize ciMethodData::offset_of_slot(ciProfileData* data, ByteSize slot_offset_in_data) { - // Get offset within methodDataOop of the data array - ByteSize data_offset = methodDataOopDesc::data_offset(); + // Get offset within MethodData* of the data array + ByteSize data_offset = MethodData::data_offset(); // Get cell offset of the ProfileData within data array int cell_offset = dp_to_di(data->dp()); @@ -354,7 +353,7 @@ // Should be last, have to skip all traps. DataLayout* dp = data_layout_at(data_size()); DataLayout* end = data_layout_at(data_size() + extra_data_size()); - for (; dp < end; dp = methodDataOopDesc::next_extra(dp)) { + for (; dp < end; dp = MethodData::next_extra(dp)) { if (dp->tag() == DataLayout::arg_info_data_tag) return new ciArgInfoData(dp); } @@ -364,7 +363,7 @@ // Implementation of the print method. void ciMethodData::print_impl(outputStream* st) { - ciObject::print_impl(st); + ciMetadata::print_impl(st); } #ifndef PRODUCT @@ -383,7 +382,7 @@ st->print_cr("--- Extra data:"); DataLayout* dp = data_layout_at(data_size()); DataLayout* end = data_layout_at(data_size() + extra_data_size()); - for (; dp < end; dp = methodDataOopDesc::next_extra(dp)) { + for (; dp < end; dp = MethodData::next_extra(dp)) { if (dp->tag() == DataLayout::no_tag) continue; if (dp->tag() == DataLayout::bit_data_tag) { data = new BitData(dp); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciMethodData.hpp --- a/src/share/vm/ci/ciMethodData.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciMethodData.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,7 @@ #include "ci/ciKlass.hpp" #include "ci/ciObject.hpp" #include "ci/ciUtilities.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "oops/oop.inline.hpp" class ciBitData; @@ -71,9 +71,9 @@ ciKlass* receiver(uint row) { assert((uint)row < row_limit(), "oob"); - ciObject* recv = (ciObject*)intptr_at(receiver0_offset + row * receiver_type_row_cell_count); + ciKlass* recv = (ciKlass*)intptr_at(receiver0_offset + row * receiver_type_row_cell_count); assert(recv == NULL || recv->is_klass(), "wrong type"); - return (ciKlass*)recv; + return recv; } // Copy & translate from oop based ReceiverTypeData @@ -139,10 +139,10 @@ // ciMethodData // -// This class represents a methodDataOop in the HotSpot virtual +// This class represents a MethodData* in the HotSpot virtual // machine. -class ciMethodData : public ciObject { +class ciMethodData : public ciMetadata { CI_PACKAGE_ACCESS private: @@ -179,9 +179,9 @@ int _backedge_counter; // Coherent snapshot of original header. - methodDataOopDesc _orig; + MethodData _orig; - ciMethodData(methodDataHandle h_md); + ciMethodData(MethodData* md); ciMethodData(); // Accessors @@ -189,11 +189,8 @@ int extra_data_size() const { return _extra_data_size; } intptr_t * data() const { return _data; } - methodDataOop get_methodDataOop() const { - if (handle() == NULL) return NULL; - methodDataOop mdo = (methodDataOop)get_oop(); - assert(mdo != NULL, "illegal use of unloaded method data"); - return mdo; + MethodData* get_MethodData() const { + return (MethodData*)_metadata; } const char* type_string() { return "ciMethodData"; } @@ -232,7 +229,7 @@ ciArgInfoData *arg_info() const; public: - bool is_method_data() { return true; } + bool is_method_data() const { return true; } void set_mature() { _state = mature_state; } @@ -244,7 +241,7 @@ int invocation_count() { return _invocation_counter; } int backedge_count() { return _backedge_counter; } - // Transfer information about the method to methodDataOop. + // Transfer information about the method to MethodData*. // would_profile means we would like to profile this method, // meaning it's not trivial. void set_would_profile(bool p); @@ -300,9 +297,9 @@ bool has_escape_info(); void update_escape_info(); - void set_eflag(methodDataOopDesc::EscapeFlag f); - void clear_eflag(methodDataOopDesc::EscapeFlag f); - bool eflag_set(methodDataOopDesc::EscapeFlag f) const; + void set_eflag(MethodData::EscapeFlag f); + void clear_eflag(MethodData::EscapeFlag f); + bool eflag_set(MethodData::EscapeFlag f) const; void set_arg_local(int i); void set_arg_stack(int i); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciMethodHandle.cpp --- a/src/share/vm/ci/ciMethodHandle.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciMethodHandle.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,11 @@ VM_ENTRY_MARK; oop form_oop = java_lang_invoke_MethodHandle::form(get_oop()); oop vmentry_oop = java_lang_invoke_LambdaForm::vmentry(form_oop); - oop vmtarget_oop = java_lang_invoke_MemberName::vmtarget(vmentry_oop); - return CURRENT_ENV->get_object(vmtarget_oop)->as_method(); + // FIXME: Share code with ciMemberName::get_vmtarget + Metadata* vmtarget = java_lang_invoke_MemberName::vmtarget(vmentry_oop); + if (vmtarget->is_method()) + return CURRENT_ENV->get_method((Method*) vmtarget); + // FIXME: What if the vmtarget is a Klass? + assert(false, ""); + return NULL; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciMethodKlass.cpp --- a/src/share/vm/ci/ciMethodKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "ci/ciMethodKlass.hpp" -#include "ci/ciUtilities.hpp" - -// ciMethodKlass -// -// This class represents a klassOop in the HotSpot virtual machine -// whose Klass part is a methodKlass. - -// ------------------------------------------------------------------ -// ciMethodKlass::instance -// -// Return the distinguished instance of this class -ciMethodKlass* ciMethodKlass::make() { - return CURRENT_ENV->_method_klass_instance; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciMethodKlass.hpp --- a/src/share/vm/ci/ciMethodKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_CI_CIMETHODKLASS_HPP -#define SHARE_VM_CI_CIMETHODKLASS_HPP - -#include "ci/ciKlass.hpp" -#include "ci/ciSymbol.hpp" - -// ciMethodKlass -// -// This class represents a klassOop in the HotSpot virtual machine -// whose Klass part in a methodKlass. -class ciMethodKlass : public ciKlass { - CI_PACKAGE_ACCESS - -protected: - ciMethodKlass(KlassHandle h_k) : - ciKlass(h_k, ciSymbol::make("unique_methodKlass")) { - assert(get_Klass()->oop_is_method(), "wrong type"); - } - - methodKlass* get_methodKlass() { return (methodKlass*)get_Klass(); } - - const char* type_string() { return "ciMethodKlass"; } - -public: - // What kind of ciObject is this? - bool is_method_klass() { return true; } - - // Return the distinguished ciMethodKlass instance. - static ciMethodKlass* make(); -}; - -#endif // SHARE_VM_CI_CIMETHODKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciObjArrayKlass.cpp --- a/src/share/vm/ci/ciObjArrayKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciObjArrayKlass.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,14 +25,13 @@ #include "precompiled.hpp" #include "ci/ciInstanceKlass.hpp" #include "ci/ciObjArrayKlass.hpp" -#include "ci/ciObjArrayKlassKlass.hpp" #include "ci/ciSymbol.hpp" #include "ci/ciUtilities.hpp" #include "oops/objArrayKlass.hpp" // ciObjArrayKlass // -// This class represents a klassOop in the HotSpot virtual machine +// This class represents a Klass* in the HotSpot virtual machine // whose Klass part is an objArrayKlass. // ------------------------------------------------------------------ @@ -41,8 +40,8 @@ // Constructor for loaded object array klasses. ciObjArrayKlass::ciObjArrayKlass(KlassHandle h_k) : ciArrayKlass(h_k) { assert(get_Klass()->oop_is_objArray(), "wrong type"); - klassOop element_klassOop = get_objArrayKlass()->bottom_klass(); - _base_element_klass = CURRENT_ENV->get_object(element_klassOop)->as_klass(); + Klass* element_Klass = get_objArrayKlass()->bottom_klass(); + _base_element_klass = CURRENT_ENV->get_klass(element_Klass); assert(_base_element_klass->is_instance_klass() || _base_element_klass->is_type_array_klass(), "bad base klass"); if (dimension() == 1) { @@ -63,8 +62,7 @@ ciKlass* base_element_klass, int dimension) : ciArrayKlass(array_name, - dimension, - ciObjArrayKlassKlass::make()) { + dimension, T_OBJECT) { _base_element_klass = base_element_klass; assert(_base_element_klass->is_instance_klass() || _base_element_klass->is_type_array_klass(), "bad base klass"); @@ -85,8 +83,8 @@ // Produce the element klass. if (is_loaded()) { VM_ENTRY_MARK; - klassOop element_klassOop = get_objArrayKlass()->element_klass(); - _element_klass = CURRENT_THREAD_ENV->get_object(element_klassOop)->as_klass(); + Klass* element_Klass = get_objArrayKlass()->element_klass(); + _element_klass = CURRENT_THREAD_ENV->get_klass(element_Klass); } else { VM_ENTRY_MARK; // We are an unloaded array klass. Attempt to fetch our @@ -154,13 +152,13 @@ if (element_klass->is_loaded()) { EXCEPTION_CONTEXT; // The element klass is loaded - klassOop array = element_klass->get_Klass()->array_klass(THREAD); + Klass* array = element_klass->get_Klass()->array_klass(THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; CURRENT_THREAD_ENV->record_out_of_memory_failure(); return ciEnv::unloaded_ciobjarrayklass(); } - return CURRENT_THREAD_ENV->get_object(array)->as_obj_array_klass(); + return CURRENT_THREAD_ENV->get_obj_array_klass(array); } // The array klass was unable to be made or the element klass was @@ -179,6 +177,5 @@ // // Make an array klass corresponding to the specified primitive type. ciObjArrayKlass* ciObjArrayKlass::make(ciKlass* element_klass) { - assert(element_klass->is_java_klass(), "wrong kind of klass"); GUARDED_VM_ENTRY(return make_impl(element_klass);) } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciObjArrayKlass.hpp --- a/src/share/vm/ci/ciObjArrayKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciObjArrayKlass.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,7 @@ // ciObjArrayKlass // -// This class represents a klassOop in the HotSpot virtual machine +// This class represents a Klass* in the HotSpot virtual machine // whose Klass part is an objArrayKlass. class ciObjArrayKlass : public ciArrayKlass { CI_PACKAGE_ACCESS @@ -70,7 +70,7 @@ ciKlass* base_element_klass() { return _base_element_klass; } // What kind of ciObject is this? - bool is_obj_array_klass() { return true; } + bool is_obj_array_klass() const { return true; } static ciObjArrayKlass* make(ciKlass* element_klass); }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciObjArrayKlassKlass.cpp --- a/src/share/vm/ci/ciObjArrayKlassKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "ci/ciObjArrayKlassKlass.hpp" -#include "ci/ciUtilities.hpp" - -// ciObjArrayKlassKlass -// -// This class represents a klassOop in the HotSpot virtual machine -// whose Klass part is an arrayKlassKlass. - -// ------------------------------------------------------------------ -// ciObjArrayKlassKlass::instance -// -// Return the distinguished instance of this class -ciObjArrayKlassKlass* ciObjArrayKlassKlass::make() { - return CURRENT_ENV->_obj_array_klass_klass_instance; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciObjArrayKlassKlass.hpp --- a/src/share/vm/ci/ciObjArrayKlassKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_CI_CIOBJARRAYKLASSKLASS_HPP -#define SHARE_VM_CI_CIOBJARRAYKLASSKLASS_HPP - -#include "ci/ciArrayKlassKlass.hpp" - -// ciObjArrayKlassKlass -// -// This class represents a klassOop in the HotSpot virtual machine -// whose Klass part is a objArrayKlassKlass. -class ciObjArrayKlassKlass : public ciArrayKlassKlass { - CI_PACKAGE_ACCESS - -private: - ciObjArrayKlassKlass(KlassHandle h_k) - : ciArrayKlassKlass(h_k, ciSymbol::make("unique_objArrayKlassKlass")) { - assert(h_k()->klass_part()->oop_is_objArrayKlass(), "wrong type"); - } - - objArrayKlassKlass* get_objArrayKlassKlass() { - return (objArrayKlassKlass*)get_Klass(); - } - - const char* type_string() { return "ciObjArrayKlassKlass"; } - -public: - // What kind of ciObject is this? - bool is_obj_array_klass_klass() { return true; } - - // Return the distinguished ciObjArrayKlassKlass instance. - static ciObjArrayKlassKlass* make(); -}; - -#endif // SHARE_VM_CI_CIOBJARRAYKLASSKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciObject.cpp --- a/src/share/vm/ci/ciObject.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciObject.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,7 +43,7 @@ // // Within the VM, the oop and klass hierarchies are separate. // The compiler interface does not preserve this separation -- -// the distinction between `klassOop' and `Klass' are not +// the distinction between `Klass*' and `Klass' are not // reflected in the interface and instead the Klass hierarchy // is directly modeled as the subclasses of ciKlass. @@ -57,7 +57,6 @@ _handle = JNIHandles::make_global(o); } _klass = NULL; - _ident = 0; init_flags_from(o); } @@ -72,7 +71,6 @@ _handle = JNIHandles::make_global(h); } _klass = NULL; - _ident = 0; init_flags_from(h()); } @@ -86,7 +84,6 @@ assert(klass != NULL, "must supply klass"); _handle = NULL; _klass = klass; - _ident = 0; } // ------------------------------------------------------------------ @@ -97,7 +94,6 @@ ASSERT_IN_VM; _handle = NULL; _klass = NULL; - _ident = 0; } // ------------------------------------------------------------------ @@ -117,33 +113,13 @@ GUARDED_VM_ENTRY( oop o = get_oop(); - _klass = CURRENT_ENV->get_object(o->klass())->as_klass(); + _klass = CURRENT_ENV->get_klass(o->klass()); ); } return _klass; } // ------------------------------------------------------------------ -// ciObject::set_ident -// -// Set the unique identity number of a ciObject. -void ciObject::set_ident(uint id) { - assert((_ident >> FLAG_BITS) == 0, "must only initialize once"); - assert( id < ((uint)1 << (BitsPerInt-FLAG_BITS)), "id too big"); - _ident = _ident + (id << FLAG_BITS); -} - -// ------------------------------------------------------------------ -// ciObject::ident -// -// Report the unique identity number of a ciObject. -uint ciObject::ident() { - uint id = _ident >> FLAG_BITS; - assert(id != 0, "must be initialized"); - return id; -} - -// ------------------------------------------------------------------ // ciObject::equals // // Are two ciObjects equal? @@ -187,7 +163,7 @@ // ciObject::can_be_constant bool ciObject::can_be_constant() { if (ScavengeRootsInCode >= 1) return true; // now everybody can encode as a constant - return handle() == NULL || is_perm(); + return handle() == NULL; } // ------------------------------------------------------------------ @@ -197,7 +173,7 @@ if (is_null_object()) return true; ciEnv* env = CURRENT_ENV; - if (!JavaObjectsInPerm) { + // We want Strings and Classes to be embeddable by default since // they used to be in the perm world. Not all Strings used to be // embeddable but there's no easy way to distinguish the interned @@ -205,7 +181,6 @@ if (klass() == env->String_klass() || klass() == env->Class_klass()) { return true; } - } if (EnableInvokeDynamic && (klass()->is_subclass_of(env->MethodHandle_klass()) || klass()->is_subclass_of(env->CallSite_klass()))) { @@ -214,9 +189,20 @@ return true; } - return handle() == NULL || is_perm(); + return handle() == NULL; } +// ------------------------------------------------------------------ +// ciObject::should_be_constant() +void ciObject::init_flags_from(oop x) { + int flags = 0; + if (x != NULL) { + assert(Universe::heap()->is_in_reserved(x), "must be"); + if (x->is_scavengable()) + flags |= SCAVENGABLE_FLAG; + } + _ident |= flags; +} // ------------------------------------------------------------------ // ciObject::print @@ -228,8 +214,7 @@ void ciObject::print(outputStream* st) { st->print("<%s", type_string()); GUARDED_VM_ENTRY(print_impl(st);) - st->print(" ident=%d %s%s address=0x%x>", ident(), - is_perm() ? "PERM" : "", + st->print(" ident=%d %s address=0x%x>", ident(), is_scavengable() ? "SCAVENGABLE" : "", (address)this); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciObject.hpp --- a/src/share/vm/ci/ciObject.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciObject.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ #ifndef SHARE_VM_CI_CIOBJECT_HPP #define SHARE_VM_CI_CIOBJECT_HPP +#include "ci/ciBaseObject.hpp" #include "ci/ciClassList.hpp" #include "memory/allocation.hpp" #include "runtime/handles.hpp" @@ -45,10 +46,10 @@ // // Within the VM, the oop and klass hierarchies are separate. // The compiler interface does not preserve this separation -- -// the distinction between `klassOop' and `Klass' are not +// the distinction between `Klass*' and `Klass' are not // reflected in the interface and instead the Klass hierarchy // is directly modeled as the subclasses of ciKlass. -class ciObject : public ResourceObj { +class ciObject : public ciBaseObject { CI_PACKAGE_ACCESS friend class ciEnv; @@ -57,13 +58,7 @@ // handle may, in a small set of cases, correctly be NULL. jobject _handle; ciKlass* _klass; - uint _ident; - enum { FLAG_BITS = 2 }; - enum { - PERM_FLAG = 1, - SCAVENGABLE_FLAG = 2 - }; protected: ciObject(); ciObject(oop o); @@ -77,30 +72,17 @@ return JNIHandles::resolve_non_null(_handle); } - void init_flags_from(oop x) { - int flags = 0; - if (x != NULL) { - if (x->is_perm()) - flags |= PERM_FLAG; - if (x->is_scavengable()) - flags |= SCAVENGABLE_FLAG; - } - _ident |= flags; - } + void init_flags_from(oop x); // Virtual behavior of the print() method. virtual void print_impl(outputStream* st) {} virtual const char* type_string() { return "ciObject"; } - void set_ident(uint id); public: // The klass of this ciObject. ciKlass* klass(); - // A number unique to this object. - uint ident(); - // Are two ciObjects equal? bool equals(ciObject* obj); @@ -119,11 +101,6 @@ // True if is_perm is true or ScavengeRootsInCode > 1. bool should_be_constant(); - // Is this object guaranteed to be in the permanent part of the heap? - // If so, CollectedHeap::can_elide_permanent_oop_store_barriers is relevant. - // If the answer is false, no guarantees are made. - bool is_perm() { return (_ident & PERM_FLAG) != 0; } - // Might this object possibly move during a scavenge operation? // If the answer is true and ScavengeRootsInCode==0, the oop cannot be embedded in code. bool is_scavengable() { return (_ident & SCAVENGABLE_FLAG) != 0; } @@ -137,57 +114,29 @@ // be registered with the oopRecorder. jobject constant_encoding(); + virtual bool is_object() const { return true; } + // What kind of ciObject is this? virtual bool is_null_object() const { return false; } virtual bool is_call_site() const { return false; } virtual bool is_cpcache() const { return false; } virtual bool is_instance() { return false; } virtual bool is_member_name() const { return false; } - virtual bool is_method() { return false; } - virtual bool is_method_data() { return false; } virtual bool is_method_handle() const { return false; } virtual bool is_array() { return false; } virtual bool is_obj_array() { return false; } virtual bool is_type_array() { return false; } - virtual bool is_symbol() { return false; } - virtual bool is_type() { return false; } - virtual bool is_return_address() { return false; } - virtual bool is_klass() { return false; } - virtual bool is_instance_klass() { return false; } - virtual bool is_method_klass() { return false; } - virtual bool is_array_klass() { return false; } - virtual bool is_obj_array_klass() { return false; } - virtual bool is_type_array_klass() { return false; } - virtual bool is_symbol_klass() { return false; } - virtual bool is_klass_klass() { return false; } - virtual bool is_instance_klass_klass() { return false; } - virtual bool is_array_klass_klass() { return false; } - virtual bool is_obj_array_klass_klass() { return false; } - virtual bool is_type_array_klass_klass() { return false; } // Is this a type or value which has no associated class? // It is true of primitive types and null objects. virtual bool is_classless() const { return false; } - // Is this ciObject a Java Language Object? That is, - // is the ciObject an instance or an array - virtual bool is_java_object() { return false; } - - // Does this ciObject represent a Java Language class? - // That is, is the ciObject an instanceKlass or arrayKlass? - virtual bool is_java_klass() { return false; } - - // Is this ciObject the ciInstanceKlass representing - // java.lang.Object()? - virtual bool is_java_lang_Object() { return false; } - - // Does this ciObject refer to a real oop in the VM? - // - // Note: some ciObjects refer to oops which have yet to be - // created. We refer to these as "unloaded". Specifically, - // there are unloaded ciMethods, ciObjArrayKlasses, and - // ciInstanceKlasses. By convention the ciNullObject is - // considered loaded, and primitive types are considered loaded. + // Note: some ciObjects refer to oops which have yet to be created. + // We refer to these as "unloaded". Specifically, there are + // unloaded instances of java.lang.Class, + // java.lang.invoke.MethodHandle, and java.lang.invoke.MethodType. + // By convention the ciNullObject is considered loaded, and + // primitive types are considered loaded. bool is_loaded() const { return handle() != NULL || is_classless(); } @@ -201,10 +150,6 @@ assert(is_call_site(), "bad cast"); return (ciCallSite*) this; } - ciCPCache* as_cpcache() { - assert(is_cpcache(), "bad cast"); - return (ciCPCache*) this; - } ciInstance* as_instance() { assert(is_instance(), "bad cast"); return (ciInstance*)this; @@ -213,14 +158,6 @@ assert(is_member_name(), "bad cast"); return (ciMemberName*)this; } - ciMethod* as_method() { - assert(is_method(), "bad cast"); - return (ciMethod*)this; - } - ciMethodData* as_method_data() { - assert(is_method_data(), "bad cast"); - return (ciMethodData*)this; - } ciMethodHandle* as_method_handle() { assert(is_method_handle(), "bad cast"); return (ciMethodHandle*) this; @@ -237,62 +174,6 @@ assert(is_type_array(), "bad cast"); return (ciTypeArray*)this; } - ciSymbol* as_symbol() { - assert(is_symbol(), "bad cast"); - return (ciSymbol*)this; - } - ciType* as_type() { - assert(is_type(), "bad cast"); - return (ciType*)this; - } - ciReturnAddress* as_return_address() { - assert(is_return_address(), "bad cast"); - return (ciReturnAddress*)this; - } - ciKlass* as_klass() { - assert(is_klass(), "bad cast"); - return (ciKlass*)this; - } - ciInstanceKlass* as_instance_klass() { - assert(is_instance_klass(), "bad cast"); - return (ciInstanceKlass*)this; - } - ciMethodKlass* as_method_klass() { - assert(is_method_klass(), "bad cast"); - return (ciMethodKlass*)this; - } - ciArrayKlass* as_array_klass() { - assert(is_array_klass(), "bad cast"); - return (ciArrayKlass*)this; - } - ciObjArrayKlass* as_obj_array_klass() { - assert(is_obj_array_klass(), "bad cast"); - return (ciObjArrayKlass*)this; - } - ciTypeArrayKlass* as_type_array_klass() { - assert(is_type_array_klass(), "bad cast"); - return (ciTypeArrayKlass*)this; - } - ciKlassKlass* as_klass_klass() { - assert(is_klass_klass(), "bad cast"); - return (ciKlassKlass*)this; - } - ciInstanceKlassKlass* as_instance_klass_klass() { - assert(is_instance_klass_klass(), "bad cast"); - return (ciInstanceKlassKlass*)this; - } - ciArrayKlassKlass* as_array_klass_klass() { - assert(is_array_klass_klass(), "bad cast"); - return (ciArrayKlassKlass*)this; - } - ciObjArrayKlassKlass* as_obj_array_klass_klass() { - assert(is_obj_array_klass_klass(), "bad cast"); - return (ciObjArrayKlassKlass*)this; - } - ciTypeArrayKlassKlass* as_type_array_klass_klass() { - assert(is_type_array_klass_klass(), "bad cast"); - return (ciTypeArrayKlassKlass*)this; - } // Print debugging output about this ciObject. void print(outputStream* st); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciObjectFactory.cpp --- a/src/share/vm/ci/ciObjectFactory.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciObjectFactory.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,25 +23,21 @@ */ #include "precompiled.hpp" -#include "ci/ciCPCache.hpp" #include "ci/ciCallSite.hpp" #include "ci/ciInstance.hpp" #include "ci/ciInstanceKlass.hpp" -#include "ci/ciInstanceKlassKlass.hpp" #include "ci/ciMemberName.hpp" #include "ci/ciMethod.hpp" #include "ci/ciMethodData.hpp" #include "ci/ciMethodHandle.hpp" -#include "ci/ciMethodKlass.hpp" #include "ci/ciNullObject.hpp" #include "ci/ciObjArray.hpp" #include "ci/ciObjArrayKlass.hpp" -#include "ci/ciObjArrayKlassKlass.hpp" +#include "ci/ciObject.hpp" #include "ci/ciObjectFactory.hpp" #include "ci/ciSymbol.hpp" #include "ci/ciTypeArray.hpp" #include "ci/ciTypeArrayKlass.hpp" -#include "ci/ciTypeArrayKlassKlass.hpp" #include "ci/ciUtilities.hpp" #include "classfile/systemDictionary.hpp" #include "gc_interface/collectedHeap.inline.hpp" @@ -67,7 +63,7 @@ // problematic the underlying data structure can be switched to some // sort of balanced binary tree. -GrowableArray* ciObjectFactory::_shared_ci_objects = NULL; +GrowableArray* ciObjectFactory::_shared_ci_metadata = NULL; ciSymbol* ciObjectFactory::_shared_ci_symbols[vmSymbols::SID_LIMIT]; int ciObjectFactory::_shared_ident_limit = 0; volatile bool ciObjectFactory::_initialized = false; @@ -85,12 +81,12 @@ _next_ident = _shared_ident_limit; _arena = arena; - _ci_objects = new (arena) GrowableArray(arena, expected_size, 0, NULL); + _ci_metadata = new (arena) GrowableArray(arena, expected_size, 0, NULL); // If the shared ci objects exist append them to this factory's objects - if (_shared_ci_objects != NULL) { - _ci_objects->appendAll(_shared_ci_objects); + if (_shared_ci_metadata != NULL) { + _ci_metadata->appendAll(_shared_ci_metadata); } _unloaded_methods = new (arena) GrowableArray(arena, 4, 0, NULL); @@ -126,7 +122,7 @@ _next_ident = 1; // start numbering CI objects at 1 { - // Create the shared symbols, but not in _shared_ci_objects. + // Create the shared symbols, but not in _shared_ci_metadata. int i; for (i = vmSymbols::FIRST_SID; i < vmSymbols::SID_LIMIT; i++) { Symbol* vmsym = vmSymbols::symbol_at((vmSymbols::SID) i); @@ -145,7 +141,7 @@ #endif } - _ci_objects = new (_arena) GrowableArray(_arena, 64, 0, NULL); + _ci_metadata = new (_arena) GrowableArray(_arena, 64, 0, NULL); for (int i = T_BOOLEAN; i <= T_CONFLICT; i++) { BasicType t = (BasicType)i; @@ -157,31 +153,19 @@ ciEnv::_null_object_instance = new (_arena) ciNullObject(); init_ident_of(ciEnv::_null_object_instance); - ciEnv::_method_klass_instance = - get(Universe::methodKlassObj())->as_method_klass(); - ciEnv::_klass_klass_instance = - get(Universe::klassKlassObj())->as_klass_klass(); - ciEnv::_instance_klass_klass_instance = - get(Universe::instanceKlassKlassObj()) - ->as_instance_klass_klass(); - ciEnv::_type_array_klass_klass_instance = - get(Universe::typeArrayKlassKlassObj()) - ->as_type_array_klass_klass(); - ciEnv::_obj_array_klass_klass_instance = - get(Universe::objArrayKlassKlassObj()) - ->as_obj_array_klass_klass(); #define WK_KLASS_DEFN(name, ignore_s, opt) \ if (SystemDictionary::name() != NULL) \ - ciEnv::_##name = get(SystemDictionary::name())->as_instance_klass(); + ciEnv::_##name = get_metadata(SystemDictionary::name())->as_instance_klass(); WK_KLASSES_DO(WK_KLASS_DEFN) #undef WK_KLASS_DEFN - for (int len = -1; len != _ci_objects->length(); ) { - len = _ci_objects->length(); + for (int len = -1; len != _ci_metadata->length(); ) { + len = _ci_metadata->length(); for (int i2 = 0; i2 < len; i2++) { - ciObject* obj = _ci_objects->at(i2); + ciMetadata* obj = _ci_metadata->at(i2); + assert (obj->is_metadata(), "what else would it be?"); if (obj->is_loaded() && obj->is_instance_klass()) { obj->as_instance_klass()->compute_nonstatic_fields(); } @@ -189,21 +173,21 @@ } ciEnv::_unloaded_cisymbol = ciObjectFactory::get_symbol(vmSymbols::dummy_symbol()); - // Create dummy instanceKlass and objArrayKlass object and assign them idents + // Create dummy InstanceKlass and objArrayKlass object and assign them idents ciEnv::_unloaded_ciinstance_klass = new (_arena) ciInstanceKlass(ciEnv::_unloaded_cisymbol, NULL, NULL); init_ident_of(ciEnv::_unloaded_ciinstance_klass); ciEnv::_unloaded_ciobjarrayklass = new (_arena) ciObjArrayKlass(ciEnv::_unloaded_cisymbol, ciEnv::_unloaded_ciinstance_klass, 1); init_ident_of(ciEnv::_unloaded_ciobjarrayklass); assert(ciEnv::_unloaded_ciobjarrayklass->is_obj_array_klass(), "just checking"); - get(Universe::boolArrayKlassObj()); - get(Universe::charArrayKlassObj()); - get(Universe::singleArrayKlassObj()); - get(Universe::doubleArrayKlassObj()); - get(Universe::byteArrayKlassObj()); - get(Universe::shortArrayKlassObj()); - get(Universe::intArrayKlassObj()); - get(Universe::longArrayKlassObj()); + get_metadata(Universe::boolArrayKlassObj()); + get_metadata(Universe::charArrayKlassObj()); + get_metadata(Universe::singleArrayKlassObj()); + get_metadata(Universe::doubleArrayKlassObj()); + get_metadata(Universe::byteArrayKlassObj()); + get_metadata(Universe::shortArrayKlassObj()); + get_metadata(Universe::intArrayKlassObj()); + get_metadata(Universe::longArrayKlassObj()); @@ -215,7 +199,7 @@ // while the higher numbers are recycled afresh by each new ciEnv. _shared_ident_limit = _next_ident; - _shared_ci_objects = _ci_objects; + _shared_ci_metadata = _ci_metadata; } @@ -251,29 +235,8 @@ ciObject* ciObjectFactory::get(oop key) { ASSERT_IN_VM; -#ifdef ASSERT - if (CIObjectFactoryVerify) { - oop last = NULL; - for (int j = 0; j< _ci_objects->length(); j++) { - oop o = _ci_objects->at(j)->get_oop(); - assert(last < o, "out of order"); - last = o; - } - } -#endif // ASSERT - int len = _ci_objects->length(); - int index = find(key, _ci_objects); -#ifdef ASSERT - if (CIObjectFactoryVerify) { - for (int i=0; i<_ci_objects->length(); i++) { - if (_ci_objects->at(i)->get_oop() == key) { - assert(index == i, " bad lookup"); - } - } - } -#endif - if (!is_found_at(index, key, _ci_objects)) { - // Check in the non-perm area before putting it in the list. + assert(key == NULL || Universe::heap()->is_in_reserved(key), "must be"); + NonPermObject* &bucket = find_non_perm(key); if (bucket != NULL) { return bucket->object(); @@ -285,21 +248,62 @@ ciObject* new_object = create_new_object(keyHandle()); assert(keyHandle() == new_object->get_oop(), "must be properly recorded"); init_ident_of(new_object); - if (!new_object->is_perm()) { + assert(Universe::heap()->is_in_reserved(new_object->get_oop()), "must be"); + // Not a perm-space object. insert_non_perm(bucket, keyHandle(), new_object); return new_object; } - if (len != _ci_objects->length()) { + +// ------------------------------------------------------------------ +// ciObjectFactory::get +// +// Get the ciObject corresponding to some oop. If the ciObject has +// already been created, it is returned. Otherwise, a new ciObject +// is created. +ciMetadata* ciObjectFactory::get_metadata(Metadata* key) { + ASSERT_IN_VM; + + assert(key == NULL || key->is_metadata(), "must be"); + +#ifdef ASSERT + if (CIObjectFactoryVerify) { + Metadata* last = NULL; + for (int j = 0; j< _ci_metadata->length(); j++) { + Metadata* o = _ci_metadata->at(j)->constant_encoding(); + assert(last < o, "out of order"); + last = o; + } + } +#endif // ASSERT + int len = _ci_metadata->length(); + int index = find(key, _ci_metadata); +#ifdef ASSERT + if (CIObjectFactoryVerify) { + for (int i=0; i<_ci_metadata->length(); i++) { + if (_ci_metadata->at(i)->constant_encoding() == key) { + assert(index == i, " bad lookup"); + } + } + } +#endif + if (!is_found_at(index, key, _ci_metadata)) { + // The ciObject does not yet exist. Create it and insert it + // into the cache. + ciMetadata* new_object = create_new_object(key); + init_ident_of(new_object); + assert(new_object->is_metadata(), "must be"); + + if (len != _ci_metadata->length()) { // creating the new object has recursively entered new objects // into the table. We need to recompute our index. - index = find(keyHandle(), _ci_objects); + index = find(key, _ci_metadata); } - assert(!is_found_at(index, keyHandle(), _ci_objects), "no double insert"); - insert(index, new_object, _ci_objects); + assert(!is_found_at(index, key, _ci_metadata), "no double insert"); + insert(index, new_object, _ci_metadata); return new_object; } - return _ci_objects->at(index); + return _ci_metadata->at(index)->as_metadata(); } // ------------------------------------------------------------------ @@ -312,36 +316,7 @@ ciObject* ciObjectFactory::create_new_object(oop o) { EXCEPTION_CONTEXT; - if (o->is_klass()) { - KlassHandle h_k(THREAD, (klassOop)o); - Klass* k = ((klassOop)o)->klass_part(); - if (k->oop_is_instance()) { - return new (arena()) ciInstanceKlass(h_k); - } else if (k->oop_is_objArray()) { - return new (arena()) ciObjArrayKlass(h_k); - } else if (k->oop_is_typeArray()) { - return new (arena()) ciTypeArrayKlass(h_k); - } else if (k->oop_is_method()) { - return new (arena()) ciMethodKlass(h_k); - } else if (k->oop_is_klass()) { - if (k->oop_is_objArrayKlass()) { - return new (arena()) ciObjArrayKlassKlass(h_k); - } else if (k->oop_is_typeArrayKlass()) { - return new (arena()) ciTypeArrayKlassKlass(h_k); - } else if (k->oop_is_instanceKlass()) { - return new (arena()) ciInstanceKlassKlass(h_k); - } else { - assert(o == Universe::klassKlassObj(), "bad klassKlass"); - return new (arena()) ciKlassKlass(h_k); - } - } - } else if (o->is_method()) { - methodHandle h_m(THREAD, (methodOop)o); - return new (arena()) ciMethod(h_m); - } else if (o->is_methodData()) { - methodDataHandle h_md(THREAD, (methodDataOop)o); - return new (arena()) ciMethodData(h_md); - } else if (o->is_instance()) { + if (o->is_instance()) { instanceHandle h_i(THREAD, (instanceOop)o); if (java_lang_invoke_CallSite::is_instance(o)) return new (arena()) ciCallSite(h_i); @@ -357,9 +332,40 @@ } else if (o->is_typeArray()) { typeArrayHandle h_ta(THREAD, (typeArrayOop)o); return new (arena()) ciTypeArray(h_ta); - } else if (o->is_constantPoolCache()) { - constantPoolCacheHandle h_cpc(THREAD, (constantPoolCacheOop) o); - return new (arena()) ciCPCache(h_cpc); + } + + // The oop is of some type not supported by the compiler interface. + ShouldNotReachHere(); + return NULL; +} + +// ------------------------------------------------------------------ +// ciObjectFactory::create_new_object +// +// Create a new ciObject from a Metadata*. +// +// Implementation note: this functionality could be virtual behavior +// of the oop itself. For now, we explicitly marshal the object. +ciMetadata* ciObjectFactory::create_new_object(Metadata* o) { + EXCEPTION_CONTEXT; + + if (o->is_klass()) { + KlassHandle h_k(THREAD, (Klass*)o); + Klass* k = (Klass*)o; + if (k->oop_is_instance()) { + return new (arena()) ciInstanceKlass(h_k); + } else if (k->oop_is_objArray()) { + return new (arena()) ciObjArrayKlass(h_k); + } else if (k->oop_is_typeArray()) { + return new (arena()) ciTypeArrayKlass(h_k); + } + } else if (o->is_method()) { + methodHandle h_m(THREAD, (Method*)o); + return new (arena()) ciMethod(h_m); + } else if (o->is_methodData()) { + // Hold methodHandle alive - might not be necessary ??? + methodHandle h_m(THREAD, ((MethodData*)o)->method()); + return new (arena()) ciMethodData((MethodData*)o); } // The oop is of some type not supported by the compiler interface. @@ -446,7 +452,7 @@ ciKlass* new_klass = NULL; // Two cases: this is an unloaded objArrayKlass or an - // unloaded instanceKlass. Deal with both. + // unloaded InstanceKlass. Deal with both. if (name->byte_at(0) == '[') { // Decompose the name.' FieldArrayInfo fd; @@ -590,22 +596,17 @@ // ------------------------------------------------------------------ // ciObjectFactory::init_ident_of -void ciObjectFactory::init_ident_of(ciObject* obj) { +void ciObjectFactory::init_ident_of(ciBaseObject* obj) { obj->set_ident(_next_ident++); } -void ciObjectFactory::init_ident_of(ciSymbol* obj) { - obj->set_ident(_next_ident++); -} - - // ------------------------------------------------------------------ // ciObjectFactory::find // // Use binary search to find the position of this oop in the cache. // If there is no entry in the cache corresponding to this oop, return // the position at which the oop should be inserted. -int ciObjectFactory::find(oop key, GrowableArray* objects) { +int ciObjectFactory::find(Metadata* key, GrowableArray* objects) { int min = 0; int max = objects->length()-1; @@ -613,7 +614,7 @@ while (max >= min) { int mid = (max + min) / 2; - oop value = objects->at(mid)->get_oop(); + Metadata* value = objects->at(mid)->constant_encoding(); if (value < key) { min = mid + 1; } else if (value > key) { @@ -629,9 +630,9 @@ // ciObjectFactory::is_found_at // // Verify that the binary seach found the given key. -bool ciObjectFactory::is_found_at(int index, oop key, GrowableArray* objects) { +bool ciObjectFactory::is_found_at(int index, Metadata* key, GrowableArray* objects) { return (index < objects->length() && - objects->at(index)->get_oop() == key); + objects->at(index)->constant_encoding() == key); } @@ -639,7 +640,7 @@ // ciObjectFactory::insert // // Insert a ciObject into the table at some index. -void ciObjectFactory::insert(int index, ciObject* obj, GrowableArray* objects) { +void ciObjectFactory::insert(int index, ciMetadata* obj, GrowableArray* objects) { int len = objects->length(); if (len == index) { objects->append(obj); @@ -651,16 +652,6 @@ } objects->at_put(index, obj); } -#ifdef ASSERT - if (CIObjectFactoryVerify) { - oop last = NULL; - for (int j = 0; j< objects->length(); j++) { - oop o = objects->at(j)->get_oop(); - assert(last < o, "out of order"); - last = o; - } - } -#endif // ASSERT } static ciObjectFactory::NonPermObject* emptyBucket = NULL; @@ -672,25 +663,8 @@ // If there is no entry in the cache corresponding to this oop, return // the null tail of the bucket into which the oop should be inserted. ciObjectFactory::NonPermObject* &ciObjectFactory::find_non_perm(oop key) { - // Be careful: is_perm might change from false to true. - // Thus, there might be a matching perm object in the table. - // If there is, this probe must find it. - if (key->is_perm() && _non_perm_count == 0) { - return emptyBucket; - } else if (key->is_instance()) { - if (key->klass() == SystemDictionary::Class_klass() && JavaObjectsInPerm) { - // class mirror instances are always perm - return emptyBucket; - } - // fall through to probe - } else if (key->is_array()) { - // fall through to probe - } else { - // not an array or instance - return emptyBucket; - } - - ciObject* klass = get(key->klass()); + assert(Universe::heap()->is_in_reserved_or_null(key), "must be"); + ciMetadata* klass = get_metadata(key->klass()); NonPermObject* *bp = &_non_perm_bucket[(unsigned) klass->hash() % NON_PERM_BUCKETS]; for (NonPermObject* p; (p = (*bp)) != NULL; bp = &p->next()) { if (is_equal(p, key)) break; @@ -717,6 +691,7 @@ // // Insert a ciObject into the non-perm table. void ciObjectFactory::insert_non_perm(ciObjectFactory::NonPermObject* &where, oop key, ciObject* obj) { + assert(Universe::heap()->is_in_reserved_or_null(key), "must be"); assert(&where != &emptyBucket, "must not try to fill empty bucket"); NonPermObject* p = new (arena()) NonPermObject(where, key, obj); assert(where == p && is_equal(p, key) && p->object() == obj, "entry must match"); @@ -733,12 +708,22 @@ } // ------------------------------------------------------------------ +// ciObjectFactory::metadata_do +void ciObjectFactory::metadata_do(void f(Metadata*)) { + if (_ci_metadata == NULL) return; + for (int j = 0; j< _ci_metadata->length(); j++) { + Metadata* o = _ci_metadata->at(j)->constant_encoding(); + f(o); + } +} + +// ------------------------------------------------------------------ // ciObjectFactory::print_contents_impl void ciObjectFactory::print_contents_impl() { - int len = _ci_objects->length(); - tty->print_cr("ciObjectFactory (%d) oop contents:", len); + int len = _ci_metadata->length(); + tty->print_cr("ciObjectFactory (%d) meta data contents:", len); for (int i=0; iat(i)->print(); + _ci_metadata->at(i)->print(); tty->cr(); } } @@ -756,8 +741,8 @@ // // Print debugging information about the object factory void ciObjectFactory::print() { - tty->print("", - _ci_objects->length(), _unloaded_methods->length(), + tty->print("", + _non_perm_count, _ci_metadata->length(), _unloaded_methods->length(), _unloaded_instances->length(), _unloaded_klasses->length()); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciObjectFactory.hpp --- a/src/share/vm/ci/ciObjectFactory.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciObjectFactory.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,12 +41,12 @@ private: static volatile bool _initialized; - static GrowableArray* _shared_ci_objects; + static GrowableArray* _shared_ci_metadata; static ciSymbol* _shared_ci_symbols[]; static int _shared_ident_limit; Arena* _arena; - GrowableArray* _ci_objects; + GrowableArray* _ci_metadata; GrowableArray* _unloaded_methods; GrowableArray* _unloaded_klasses; GrowableArray* _unloaded_instances; @@ -68,10 +68,13 @@ NonPermObject* _non_perm_bucket[NON_PERM_BUCKETS]; int _non_perm_count; - int find(oop key, GrowableArray* objects); - bool is_found_at(int index, oop key, GrowableArray* objects); - void insert(int index, ciObject* obj, GrowableArray* objects); + int find(Metadata* key, GrowableArray* objects); + bool is_found_at(int index, Metadata* key, GrowableArray* objects); + void insert(int index, ciMetadata* obj, GrowableArray* objects); + ciObject* create_new_object(oop o); + ciMetadata* create_new_object(Metadata* o); + static bool is_equal(NonPermObject* p, oop key) { return p->object()->get_oop() == key; } @@ -79,8 +82,7 @@ NonPermObject* &find_non_perm(oop key); void insert_non_perm(NonPermObject* &where, oop key, ciObject* obj); - void init_ident_of(ciObject* obj); - void init_ident_of(ciSymbol* obj); + void init_ident_of(ciBaseObject* obj); Arena* arena() { return _arena; } @@ -99,7 +101,7 @@ // Get the ciObject corresponding to some oop. ciObject* get(oop key); - + ciMetadata* get_metadata(Metadata* key); ciSymbol* get_symbol(Symbol* key); // Get the ciSymbol corresponding to one of the vmSymbols. @@ -135,6 +137,9 @@ ciReturnAddress* get_return_address(int bci); + // RedefineClasses support + void metadata_do(void f(Metadata*)); + void print_contents(); void print(); }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciStreams.cpp --- a/src/share/vm/ci/ciStreams.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciStreams.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,6 @@ */ #include "precompiled.hpp" -#include "ci/ciCPCache.hpp" #include "ci/ciCallSite.hpp" #include "ci/ciConstant.hpp" #include "ci/ciField.hpp" @@ -186,7 +185,7 @@ // or checkcast, get the referenced klass. ciKlass* ciBytecodeStream::get_klass(bool& will_link) { VM_ENTRY_MARK; - constantPoolHandle cpool(_method->get_methodOop()->constants()); + constantPoolHandle cpool(_method->get_Method()->constants()); return CURRENT_ENV->get_klass_by_index(cpool, get_klass_index(), will_link, _holder); } @@ -211,12 +210,14 @@ // ------------------------------------------------------------------ // ciBytecodeStream::get_constant_pool_index -// Decode any CP cache index into a regular pool index. +// Decode any reference index into a regular pool index. int ciBytecodeStream::get_constant_pool_index() const { // work-alike for Bytecode_loadconstant::pool_index() int index = get_constant_raw_index(); if (has_cache_index()) { - return get_cpcache()->get_pool_index(index); + VM_ENTRY_MARK; + constantPoolHandle cpool(_method->get_Method()->constants()); + return cpool->object_to_cp_index(index); } return index; } @@ -242,7 +243,7 @@ pool_index = -1; } VM_ENTRY_MARK; - constantPoolHandle cpool(_method->get_methodOop()->constants()); + constantPoolHandle cpool(_method->get_Method()->constants()); return CURRENT_ENV->get_constant_by_index(cpool, pool_index, cache_index, _holder); } @@ -253,7 +254,7 @@ // constant. constantTag ciBytecodeStream::get_constant_pool_tag(int index) const { VM_ENTRY_MARK; - return _method->get_methodOop()->constants()->tag_at(index); + return _method->get_Method()->constants()->tag_at(index); } // ------------------------------------------------------------------ @@ -295,7 +296,7 @@ // for checking linkability when retrieving the associated field. ciInstanceKlass* ciBytecodeStream::get_declared_field_holder() { VM_ENTRY_MARK; - constantPoolHandle cpool(_method->get_methodOop()->constants()); + constantPoolHandle cpool(_method->get_Method()->constants()); int holder_index = get_field_holder_index(); bool ignore; return CURRENT_ENV->get_klass_by_index(cpool, holder_index, ignore, _holder) @@ -310,7 +311,7 @@ // deoptimization information. int ciBytecodeStream::get_field_holder_index() { GUARDED_VM_ENTRY( - constantPoolOop cpool = _holder->get_instanceKlass()->constants(); + ConstantPool* cpool = _holder->get_instanceKlass()->constants(); return cpool->klass_ref_index_at(get_field_index()); ) } @@ -323,7 +324,7 @@ // deoptimization information. int ciBytecodeStream::get_field_signature_index() { VM_ENTRY_MARK; - constantPoolOop cpool = _holder->get_instanceKlass()->constants(); + ConstantPool* cpool = _holder->get_instanceKlass()->constants(); int nt_index = cpool->name_and_type_ref_index_at(get_field_index()); return cpool->signature_ref_index_at(nt_index); } @@ -360,14 +361,14 @@ ciMethod* ciBytecodeStream::get_method(bool& will_link, ciSignature* *declared_signature_result) { VM_ENTRY_MARK; ciEnv* env = CURRENT_ENV; - constantPoolHandle cpool(_method->get_methodOop()->constants()); + constantPoolHandle cpool(_method->get_Method()->constants()); ciMethod* m = env->get_method_by_index(cpool, get_method_index(), cur_bc(), _holder); will_link = m->is_loaded(); // Get declared method signature and return it. if (has_optional_appendix()) { const int sig_index = get_method_signature_index(); Symbol* sig_sym = cpool->symbol_at(sig_index); - ciKlass* pool_holder = env->get_object(cpool->pool_holder())->as_klass(); + ciKlass* pool_holder = env->get_klass(cpool->pool_holder()); (*declared_signature_result) = new (env->arena()) ciSignature(pool_holder, cpool, env->get_symbol(sig_sym)); } else { (*declared_signature_result) = m->signature(); @@ -382,8 +383,8 @@ // constant pool cache at the current bci. bool ciBytecodeStream::has_appendix() { VM_ENTRY_MARK; - constantPoolHandle cpool(_method->get_methodOop()->constants()); - return constantPoolOopDesc::has_appendix_at_if_loaded(cpool, get_method_index()); + constantPoolHandle cpool(_method->get_Method()->constants()); + return ConstantPool::has_appendix_at_if_loaded(cpool, get_method_index()); } // ------------------------------------------------------------------ @@ -393,8 +394,8 @@ // the current bci. ciObject* ciBytecodeStream::get_appendix() { VM_ENTRY_MARK; - constantPoolHandle cpool(_method->get_methodOop()->constants()); - oop appendix_oop = constantPoolOopDesc::appendix_at_if_loaded(cpool, get_method_index()); + constantPoolHandle cpool(_method->get_Method()->constants()); + oop appendix_oop = ConstantPool::appendix_at_if_loaded(cpool, get_method_index()); return CURRENT_ENV->get_object(appendix_oop); } @@ -411,7 +412,7 @@ // for checking linkability when retrieving the associated method. ciKlass* ciBytecodeStream::get_declared_method_holder() { VM_ENTRY_MARK; - constantPoolHandle cpool(_method->get_methodOop()->constants()); + constantPoolHandle cpool(_method->get_Method()->constants()); bool ignore; // report as MethodHandle for invokedynamic, which is syntactically classless if (cur_bc() == Bytecodes::_invokedynamic) @@ -426,7 +427,7 @@ // referenced by the current bytecode. Used for generating // deoptimization information. int ciBytecodeStream::get_method_holder_index() { - constantPoolOop cpool = _method->get_methodOop()->constants(); + ConstantPool* cpool = _method->get_Method()->constants(); return cpool->klass_ref_index_at(get_method_index()); } @@ -438,7 +439,7 @@ // deoptimization information. int ciBytecodeStream::get_method_signature_index() { GUARDED_VM_ENTRY( - constantPoolOop cpool = _holder->get_instanceKlass()->constants(); + ConstantPool* cpool = _holder->get_instanceKlass()->constants(); const int method_index = get_method_index(); const int name_and_type_index = cpool->name_and_type_ref_index_at(method_index); return cpool->signature_ref_index_at(name_and_type_index); @@ -446,32 +447,12 @@ } // ------------------------------------------------------------------ -// ciBytecodeStream::get_cpcache -ciCPCache* ciBytecodeStream::get_cpcache() const { - if (_cpcache == NULL) { +// ciBytecodeStream::get_resolved_references +ciObjArray* ciBytecodeStream::get_resolved_references() { VM_ENTRY_MARK; // Get the constant pool. - constantPoolOop cpool = _holder->get_instanceKlass()->constants(); - constantPoolCacheOop cpcache = cpool->cache(); - - *(ciCPCache**)&_cpcache = CURRENT_ENV->get_object(cpcache)->as_cpcache(); - } - return _cpcache; -} + ConstantPool* cpool = _holder->get_instanceKlass()->constants(); -// ------------------------------------------------------------------ -// ciBytecodeStream::get_call_site -ciCallSite* ciBytecodeStream::get_call_site() { - VM_ENTRY_MARK; - // Get the constant pool. - constantPoolOop cpool = _holder->get_instanceKlass()->constants(); - constantPoolCacheOop cpcache = cpool->cache(); - - // Get the CallSite from the constant pool cache. - int method_index = get_method_index(); - ConstantPoolCacheEntry* cpcache_entry = cpcache->secondary_entry_at(method_index); - oop call_site_oop = cpcache_entry->f1_as_instance(); - - // Create a CallSite object and return it. - return CURRENT_ENV->get_object(call_site_oop)->as_call_site(); -} + // Create a resolved references array and return it. + return CURRENT_ENV->get_object(cpool->resolved_references())->as_obj_array(); + } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciStreams.hpp --- a/src/share/vm/ci/ciStreams.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciStreams.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -55,7 +55,6 @@ ciMethod* _method; // the method ciInstanceKlass* _holder; - ciCPCache* _cpcache; address _bc_start; // Start of current bytecode for table address _was_wide; // Address past last wide bytecode jint* _table_base; // Aligned start of last table or switch @@ -69,7 +68,6 @@ void reset( address base, unsigned int size ) { _bc_start =_was_wide = 0; _start = _pc = base; _end = base + size; - _cpcache = NULL; } void assert_wide(bool require_wide) const { @@ -266,8 +264,8 @@ int get_method_holder_index(); int get_method_signature_index(); - ciCPCache* get_cpcache() const; - ciCallSite* get_call_site(); + // Get the resolved references arrays from the constant pool + ciObjArray* get_resolved_references(); }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciSymbol.hpp --- a/src/share/vm/ci/ciSymbol.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciSymbol.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ #ifndef SHARE_VM_CI_CISYMBOL_HPP #define SHARE_VM_CI_CISYMBOL_HPP +#include "ci/ciBaseObject.hpp" #include "ci/ciObject.hpp" #include "ci/ciObjectFactory.hpp" #include "classfile/vmSymbols.hpp" @@ -34,9 +35,8 @@ // // This class represents a Symbol* in the HotSpot virtual // machine. -class ciSymbol : public ResourceObj { +class ciSymbol : public ciBaseObject { Symbol* _symbol; - uint _ident; CI_PACKAGE_ACCESS // These friends all make direct use of get_symbol: @@ -65,11 +65,7 @@ // Make a ciSymbol from a C string (implementation). static ciSymbol* make_impl(const char* s); - void set_ident(uint id) { _ident = id; } public: - // A number unique to this object. - uint ident() { return _ident; } - // The enumeration ID from vmSymbols, or vmSymbols::NO_SID if none. vmSymbols::SID sid() const { return _sid; } @@ -105,6 +101,8 @@ _symbol->print(); } + virtual bool is_symbol() const { return true; } + // Are two ciSymbols equal? bool equals(ciSymbol* obj) { return this->_symbol == obj->get_symbol(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciType.cpp --- a/src/share/vm/ci/ciType.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciType.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "ci/ciEnv.hpp" #include "ci/ciType.hpp" #include "ci/ciUtilities.hpp" #include "classfile/systemDictionary.hpp" @@ -38,20 +39,15 @@ // ------------------------------------------------------------------ // ciType::ciType // -ciType::ciType(BasicType basic_type) : ciObject() { +ciType::ciType(BasicType basic_type) : ciMetadata() { assert(basic_type >= T_BOOLEAN && basic_type <= T_CONFLICT, "range check"); - assert(basic_type != T_OBJECT && basic_type != T_ARRAY, "not a reference type"); _basic_type = basic_type; } -ciType::ciType(KlassHandle k) : ciObject(k) { +ciType::ciType(KlassHandle k) : ciMetadata(k()) { _basic_type = Klass::cast(k())->oop_is_array() ? T_ARRAY : T_OBJECT; } -ciType::ciType(ciKlass* klass) : ciObject(klass) { - _basic_type = klass->is_array_klass_klass() ? T_ARRAY : T_OBJECT; -} - // ------------------------------------------------------------------ // ciType::is_subtype_of @@ -87,7 +83,7 @@ // ciInstance* ciType::java_mirror() { VM_ENTRY_MARK; - return CURRENT_THREAD_ENV->get_object(Universe::java_mirror(basic_type()))->as_instance(); + return CURRENT_THREAD_ENV->get_instance(Universe::java_mirror(basic_type())); } // ------------------------------------------------------------------ @@ -100,7 +96,7 @@ if (basic_type() == T_VOID) return NULL; VM_ENTRY_MARK; - return CURRENT_THREAD_ENV->get_object(SystemDictionary::box_klass(basic_type()))->as_instance_klass(); + return CURRENT_THREAD_ENV->get_instance_klass(SystemDictionary::box_klass(basic_type())); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciType.hpp --- a/src/share/vm/ci/ciType.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciType.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,14 +25,13 @@ #ifndef SHARE_VM_CI_CITYPE_HPP #define SHARE_VM_CI_CITYPE_HPP -#include "ci/ciObject.hpp" -#include "oops/klassOop.hpp" +#include "ci/ciMetadata.hpp" // ciType // // This class represents either a class (T_OBJECT), array (T_ARRAY), // or one of the primitive types such as T_INT. -class ciType : public ciObject { +class ciType : public ciMetadata { CI_PACKAGE_ACCESS friend class ciKlass; friend class ciReturnAddress; @@ -40,9 +39,8 @@ private: BasicType _basic_type; - ciType(BasicType t); // for the primitive types only + ciType(BasicType t); // for primitive and unloaded types ciType(KlassHandle k); // for subclasses (reference types) - ciType(ciKlass* klass); // for unloaded types const char* type_string() { return "ciType"; } @@ -76,7 +74,7 @@ bool is_two_word() const { return size() == 2; } // What kind of ciObject is this? - bool is_type() { return true; } + bool is_type() const { return true; } bool is_classless() const { return is_primitive_type(); } virtual void print_name_on(outputStream* st); @@ -106,7 +104,7 @@ void print_impl(outputStream* st); public: - bool is_return_address() { return true; } + bool is_return_address() const { return true; } int bci() { return _bci; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciTypeArrayKlass.cpp --- a/src/share/vm/ci/ciTypeArrayKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciTypeArrayKlass.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ // ciTypeArrayKlass // -// This class represents a klassOop in the HotSpot virtual machine +// This class represents a Klass* in the HotSpot virtual machine // whose Klass part in a TypeArrayKlass. // ------------------------------------------------------------------ @@ -43,8 +43,8 @@ // // Implementation of make. ciTypeArrayKlass* ciTypeArrayKlass::make_impl(BasicType t) { - klassOop k = Universe::typeArrayKlassObj(t); - return CURRENT_ENV->get_object(k)->as_type_array_klass(); + Klass* k = Universe::typeArrayKlassObj(t); + return CURRENT_ENV->get_type_array_klass(k); } // ------------------------------------------------------------------ diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciTypeArrayKlass.hpp --- a/src/share/vm/ci/ciTypeArrayKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciTypeArrayKlass.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,7 @@ // ciTypeArrayKlass // -// This class represents a klassOop in the HotSpot virtual machine +// This class represents a Klass* in the HotSpot virtual machine // whose Klass part in a TypeArrayKlass. class ciTypeArrayKlass : public ciArrayKlass { CI_PACKAGE_ACCESS @@ -53,7 +53,7 @@ } // What kind of ciObject is this? - bool is_type_array_klass() { return true; } + bool is_type_array_klass() const { return true; } // Make an array klass corresponding to the specified primitive type. static ciTypeArrayKlass* make(BasicType type); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciTypeArrayKlassKlass.cpp --- a/src/share/vm/ci/ciTypeArrayKlassKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "ci/ciTypeArrayKlassKlass.hpp" -#include "ci/ciUtilities.hpp" - -// ciTypeArrayKlassKlass -// -// This class represents a klassOop in the HotSpot virtual machine -// whose Klass part is a arrayKlassKlass. - -// ------------------------------------------------------------------ -// ciTypeArrayKlassKlass::instance -// -// Return the distinguished instance of this class -ciTypeArrayKlassKlass* ciTypeArrayKlassKlass::make() { - return CURRENT_ENV->_type_array_klass_klass_instance; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciTypeArrayKlassKlass.hpp --- a/src/share/vm/ci/ciTypeArrayKlassKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_CI_CITYPEARRAYKLASSKLASS_HPP -#define SHARE_VM_CI_CITYPEARRAYKLASSKLASS_HPP - -#include "ci/ciArrayKlassKlass.hpp" - -// ciTypeArrayKlassKlass -// -// This class represents a klassOop in the HotSpot virtual machine -// whose Klass part is a typeArrayKlassKlass. -class ciTypeArrayKlassKlass : public ciArrayKlassKlass { - CI_PACKAGE_ACCESS - -private: - ciTypeArrayKlassKlass(KlassHandle h_k) - : ciArrayKlassKlass(h_k, ciSymbol::make("unique_typeArrayKlassKlass")) { - assert(h_k()->klass_part()->oop_is_typeArrayKlass(), "wrong type"); - } - - - typeArrayKlassKlass* get_typeArrayKlassKlass() { - return (typeArrayKlassKlass*)get_Klass(); - } - - const char* type_string() { return "ciTypeArrayKlassKlass"; } - -public: - // What kind of ciTypeect is this? - bool is_type_array_klass_klass() { return true; } - - // Return the distinguished ciTypeArrayKlassKlass instance. - static ciTypeArrayKlassKlass* make(); -}; - -#endif // SHARE_VM_CI_CITYPEARRAYKLASSKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/ciTypeFlow.cpp --- a/src/share/vm/ci/ciTypeFlow.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/ciTypeFlow.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -730,7 +730,7 @@ if (obj->is_null_object()) { push_null(); } else { - assert(!obj->is_klass(), "must be java_mirror of klass"); + assert(obj->is_instance(), "must be java_mirror of klass"); push_object(obj->klass()); } } else { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/ci/compilerInterface.hpp --- a/src/share/vm/ci/compilerInterface.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/ci/compilerInterface.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,6 @@ #include "ci/ciArray.hpp" #include "ci/ciArrayKlass.hpp" -#include "ci/ciArrayKlassKlass.hpp" #include "ci/ciCallProfile.hpp" #include "ci/ciConstant.hpp" #include "ci/ciEnv.hpp" @@ -36,22 +35,17 @@ #include "ci/ciFlags.hpp" #include "ci/ciInstance.hpp" #include "ci/ciInstanceKlass.hpp" -#include "ci/ciInstanceKlassKlass.hpp" #include "ci/ciKlass.hpp" -#include "ci/ciKlassKlass.hpp" #include "ci/ciMethod.hpp" -#include "ci/ciMethodKlass.hpp" #include "ci/ciNullObject.hpp" #include "ci/ciObjArray.hpp" #include "ci/ciObjArrayKlass.hpp" -#include "ci/ciObjArrayKlassKlass.hpp" #include "ci/ciObject.hpp" #include "ci/ciSignature.hpp" #include "ci/ciStreams.hpp" #include "ci/ciSymbol.hpp" #include "ci/ciTypeArray.hpp" #include "ci/ciTypeArrayKlass.hpp" -#include "ci/ciTypeArrayKlassKlass.hpp" // This is a dummy file used for including the complete // compiler interface. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/altHashing.cpp --- a/src/share/vm/classfile/altHashing.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/altHashing.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -33,7 +33,7 @@ // return a random number, which is one of the possible hash code used for // objects. We don't want to call the synchronizer hash code to install // this value because it may safepoint. -intptr_t object_hash(klassOop k) { +intptr_t object_hash(Klass* k) { intptr_t hc = k->java_mirror()->mark()->hash(); return hc != markOopDesc::no_hash ? hc : os::random(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/classFileParser.cpp --- a/src/share/vm/classfile/classFileParser.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/classFileParser.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -25,6 +25,8 @@ #include "precompiled.hpp" #include "classfile/classFileParser.hpp" #include "classfile/classLoader.hpp" +#include "classfile/classLoaderData.hpp" +#include "classfile/classLoaderData.inline.hpp" #include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" @@ -33,17 +35,18 @@ #include "classfile/vmSymbols.hpp" #include "memory/allocation.hpp" #include "memory/gcLocker.hpp" +#include "memory/metadataFactory.hpp" #include "memory/oopFactory.hpp" #include "memory/universe.inline.hpp" -#include "oops/constantPoolOop.hpp" +#include "oops/constantPool.hpp" #include "oops/fieldStreams.hpp" #include "oops/instanceKlass.hpp" #include "oops/instanceMirrorKlass.hpp" #include "oops/klass.inline.hpp" -#include "oops/klassOop.hpp" #include "oops/klassVtable.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/symbol.hpp" +#include "prims/jvm.h" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" #include "runtime/javaCalls.hpp" @@ -53,6 +56,7 @@ #include "runtime/timer.hpp" #include "services/classLoadingService.hpp" #include "services/threadService.hpp" +#include "utilities/array.hpp" // We generally try to create the oops directly when parsing, rather than // allocating temporary data structures and copying the bytes twice. A @@ -81,7 +85,7 @@ #define JAVA_7_VERSION 51 -void ClassFileParser::parse_constant_pool_entries(Handle class_loader, constantPoolHandle cp, int length, TRAPS) { +void ClassFileParser::parse_constant_pool_entries(ClassLoaderData* loader_data, constantPoolHandle cp, int length, TRAPS) { // Use a local copy of ClassFileStream. It helps the C++ compiler to optimize // this function (_current can be allocated in a register, with scalar // replacement of aggregates). The _current pointer is copied back to @@ -94,6 +98,7 @@ assert(cfs->allocated_on_stack(),"should be local"); u1* old_current = cfs0->current(); #endif + Handle class_loader(THREAD, loader_data->class_loader()); // Used for batching symbol allocations. const char* names[SymbolTable::symbol_alloc_batch_size]; @@ -272,7 +277,7 @@ indices[names_count] = index; hashValues[names_count++] = hash; if (names_count == SymbolTable::symbol_alloc_batch_size) { - SymbolTable::new_symbols(class_loader, cp, names_count, names, lengths, indices, hashValues, CHECK); + SymbolTable::new_symbols(loader_data, cp, names_count, names, lengths, indices, hashValues, CHECK); names_count = 0; } } else { @@ -289,7 +294,7 @@ // Allocate the remaining symbols if (names_count > 0) { - SymbolTable::new_symbols(class_loader, cp, names_count, names, lengths, indices, hashValues, CHECK); + SymbolTable::new_symbols(loader_data, cp, names_count, names, lengths, indices, hashValues, CHECK); } // Copy _current pointer of local copy back to stream(). @@ -325,7 +330,7 @@ return NULL; } -constantPoolHandle ClassFileParser::parse_constant_pool(Handle class_loader, TRAPS) { +constantPoolHandle ClassFileParser::parse_constant_pool(ClassLoaderData* loader_data, TRAPS) { ClassFileStream* cfs = stream(); constantPoolHandle nullHandle; @@ -334,17 +339,16 @@ guarantee_property( length >= 1, "Illegal constant pool size %u in class file %s", length, CHECK_(nullHandle)); - constantPoolOop constant_pool = - oopFactory::new_constantPool(length, - oopDesc::IsSafeConc, + ConstantPool* constant_pool = + ConstantPool::allocate(loader_data, + length, CHECK_(nullHandle)); constantPoolHandle cp (THREAD, constant_pool); - cp->set_partially_loaded(); // Enables heap verify to work on partial constantPoolOops ConstantPoolCleaner cp_in_error(cp); // set constant pool to be cleaned up. // parsing constant pool entries - parse_constant_pool_entries(class_loader, cp, length, CHECK_(nullHandle)); + parse_constant_pool_entries(loader_data, cp, length, CHECK_(nullHandle)); int index = 1; // declared outside of loops for portability @@ -423,9 +427,6 @@ cp->unresolved_klass_at_put(index, cp->symbol_at(class_index)); } break; - case JVM_CONSTANT_UnresolvedString : - ShouldNotReachHere(); // Only JVM_CONSTANT_StringIndex should be present - break; case JVM_CONSTANT_StringIndex : { int string_index = cp->string_index_at(index); @@ -531,12 +532,6 @@ patch_constant_pool(cp, index, cp_patch_at(index), CHECK_(nullHandle)); } } - // Ensure that all the patches have been used. - for (index = 0; index < _cp_patches->length(); index++) { - guarantee_property(!has_cp_patch_at(index), - "Unused constant pool patch at %d in class file %s", - index, CHECK_(nullHandle)); - } } if (!_need_verify) { @@ -671,6 +666,7 @@ void ClassFileParser::patch_constant_pool(constantPoolHandle cp, int index, Handle patch, TRAPS) { assert(EnableInvokeDynamic, ""); BasicType patch_type = T_VOID; + switch (cp->tag_at(index).value()) { case JVM_CONSTANT_UnresolvedClass : @@ -680,7 +676,7 @@ guarantee_property(!java_lang_Class::is_primitive(patch()), "Illegal class patch at %d in class file %s", index, CHECK); - cp->klass_at_put(index, java_lang_Class::as_klassOop(patch())); + cp->klass_at_put(index, java_lang_Class::as_Klass(patch())); } else { guarantee_property(java_lang_String::is_instance(patch()), "Illegal class patch at %d in class file %s", @@ -690,15 +686,10 @@ } break; - case JVM_CONSTANT_UnresolvedString : - // Patching a string means pre-resolving it. - // The spelling in the constant pool is ignored. - // The constant reference may be any object whatever. - // If it is not a real interned string, the constant is referred - // to as a "pseudo-string", and must be presented to the CP - // explicitly, because it may require scavenging. - cp->pseudo_string_at_put(index, patch()); - break; + case JVM_CONSTANT_String : + // skip this patch and don't clear it. Needs the oop array for resolved + // references to be created first. + return; case JVM_CONSTANT_Integer : patch_type = T_INT; goto patch_prim; case JVM_CONSTANT_Float : patch_type = T_FLOAT; goto patch_prim; @@ -789,27 +780,26 @@ } -objArrayHandle ClassFileParser::parse_interfaces(constantPoolHandle cp, +Array* ClassFileParser::parse_interfaces(constantPoolHandle cp, int length, - Handle class_loader, + ClassLoaderData* loader_data, Handle protection_domain, Symbol* class_name, TRAPS) { ClassFileStream* cfs = stream(); assert(length > 0, "only called for length>0"); - objArrayHandle nullHandle; - objArrayOop interface_oop = oopFactory::new_system_objArray(length, CHECK_(nullHandle)); - objArrayHandle interfaces (THREAD, interface_oop); + // FIXME: Leak at later OOM. + Array* interfaces = MetadataFactory::new_array(loader_data, length, NULL, CHECK_NULL); int index; for (index = 0; index < length; index++) { - u2 interface_index = cfs->get_u2(CHECK_(nullHandle)); + u2 interface_index = cfs->get_u2(CHECK_NULL); KlassHandle interf; check_property( valid_cp_range(interface_index, cp->length()) && is_klass_reference(cp, interface_index), "Interface name has bad constant pool index %u in class file %s", - interface_index, CHECK_(nullHandle)); + interface_index, CHECK_NULL); if (cp->tag_at(interface_index).is_klass()) { interf = KlassHandle(THREAD, cp->resolved_klass_at(interface_index)); } else { @@ -818,12 +808,13 @@ // Don't need to check legal name because it's checked when parsing constant pool. // But need to make sure it's not an array type. guarantee_property(unresolved_klass->byte_at(0) != JVM_SIGNATURE_ARRAY, - "Bad interface name in class file %s", CHECK_(nullHandle)); + "Bad interface name in class file %s", CHECK_NULL); + Handle class_loader(THREAD, loader_data->class_loader()); // Call resolve_super so classcircularity is checked - klassOop k = SystemDictionary::resolve_super_or_fail(class_name, + Klass* k = SystemDictionary::resolve_super_or_fail(class_name, unresolved_klass, class_loader, protection_domain, - false, CHECK_(nullHandle)); + false, CHECK_NULL); interf = KlassHandle(THREAD, k); if (LinkWellKnownClasses) // my super type is well known to me @@ -831,9 +822,9 @@ } if (!Klass::cast(interf())->is_interface()) { - THROW_MSG_(vmSymbols::java_lang_IncompatibleClassChangeError(), "Implementing class", nullHandle); + THROW_MSG_(vmSymbols::java_lang_IncompatibleClassChangeError(), "Implementing class", NULL); } - interfaces->obj_at_put(index, interf()); + interfaces->at_put(index, interf()); } if (!_need_verify || length <= 1) { @@ -849,8 +840,8 @@ { debug_only(No_Safepoint_Verifier nsv;) for (index = 0; index < length; index++) { - klassOop k = (klassOop)interfaces->obj_at(index); - Symbol* name = instanceKlass::cast(k)->name(); + Klass* k = interfaces->at(index); + Symbol* name = InstanceKlass::cast(k)->name(); // If no duplicates, add (name, NULL) in hashtable interface_names. if (!put_after_lookup(name, NULL, interface_names)) { dup = true; @@ -859,8 +850,7 @@ } } if (dup) { - classfile_parse_error("Duplicate interface name in class file %s", - CHECK_(nullHandle)); + classfile_parse_error("Duplicate interface name in class file %s", CHECK_NULL); } return interfaces; @@ -890,7 +880,7 @@ break; case T_OBJECT: guarantee_property((cp->symbol_at(signature_index)->equals("Ljava/lang/String;") - && (value_type.is_string() || value_type.is_unresolved_string())), + && value_type.is_string()), "Bad string initial value in class file %s", CHECK); break; default: @@ -902,13 +892,14 @@ // Parse attributes for a field. -void ClassFileParser::parse_field_attributes(constantPoolHandle cp, +void ClassFileParser::parse_field_attributes(ClassLoaderData* loader_data, + constantPoolHandle cp, u2 attributes_count, bool is_static, u2 signature_index, u2* constantvalue_index_addr, bool* is_synthetic_addr, u2* generic_signature_index_addr, - typeArrayHandle* field_annotations, + AnnotationArray** field_annotations, ClassFileParser::FieldAnnotationCollector* parsed_annotations, TRAPS) { ClassFileStream* cfs = stream(); @@ -985,7 +976,8 @@ *constantvalue_index_addr = constantvalue_index; *is_synthetic_addr = is_synthetic; *generic_signature_index_addr = generic_signature_index; - *field_annotations = assemble_annotations(runtime_visible_annotations, + *field_annotations = assemble_annotations(loader_data, + runtime_visible_annotations, runtime_visible_annotations_length, runtime_invisible_annotations, runtime_invisible_annotations_length, @@ -1029,7 +1021,8 @@ BAD_ALLOCATION_TYPE, // T_VOID = 14, BAD_ALLOCATION_TYPE, // T_ADDRESS = 15, BAD_ALLOCATION_TYPE, // T_NARROWOOP= 16, - BAD_ALLOCATION_TYPE, // T_CONFLICT = 17, + BAD_ALLOCATION_TYPE, // T_METADATA = 17, + BAD_ALLOCATION_TYPE, // T_CONFLICT = 18, BAD_ALLOCATION_TYPE, // 0 BAD_ALLOCATION_TYPE, // 1 BAD_ALLOCATION_TYPE, // 2 @@ -1047,7 +1040,8 @@ BAD_ALLOCATION_TYPE, // T_VOID = 14, BAD_ALLOCATION_TYPE, // T_ADDRESS = 15, BAD_ALLOCATION_TYPE, // T_NARROWOOP= 16, - BAD_ALLOCATION_TYPE, // T_CONFLICT = 17, + BAD_ALLOCATION_TYPE, // T_METADATA = 17, + BAD_ALLOCATION_TYPE, // T_CONFLICT = 18, }; static FieldAllocationType basic_type_to_atype(bool is_static, BasicType type) { @@ -1076,15 +1070,14 @@ } }; - -typeArrayHandle ClassFileParser::parse_fields(Symbol* class_name, +Array* ClassFileParser::parse_fields(ClassLoaderData* loader_data, + Symbol* class_name, constantPoolHandle cp, bool is_interface, FieldAllocationCount *fac, - objArrayHandle* fields_annotations, + Array** fields_annotations, u2* java_fields_count_ptr, TRAPS) { ClassFileStream* cfs = stream(); - typeArrayHandle nullHandle; - cfs->guarantee_more(2, CHECK_(nullHandle)); // length + cfs->guarantee_more(2, CHECK_NULL); // length u2 length = cfs->get_u2_fast(); *java_fields_count_ptr = length; @@ -1116,16 +1109,16 @@ u2* fa = NEW_RESOURCE_ARRAY_IN_THREAD( THREAD, u2, total_fields * (FieldInfo::field_slots + 1)); - typeArrayHandle field_annotations; + AnnotationArray* field_annotations = NULL; // The generic signature slots start after all other fields' data. int generic_signature_slot = total_fields * FieldInfo::field_slots; int num_generic_signature = 0; for (int n = 0; n < length; n++) { - cfs->guarantee_more(8, CHECK_(nullHandle)); // access_flags, name_index, descriptor_index, attributes_count + cfs->guarantee_more(8, CHECK_NULL); // access_flags, name_index, descriptor_index, attributes_count AccessFlags access_flags; jint flags = cfs->get_u2_fast() & JVM_RECOGNIZED_FIELD_MODIFIERS; - verify_legal_field_modifiers(flags, is_interface, CHECK_(nullHandle)); + verify_legal_field_modifiers(flags, is_interface, CHECK_NULL); access_flags.set_flags(flags); u2 name_index = cfs->get_u2_fast(); @@ -1133,18 +1126,18 @@ check_property( valid_cp_range(name_index, cp_size) && cp->tag_at(name_index).is_utf8(), "Invalid constant pool index %u for field name in class file %s", - name_index, CHECK_(nullHandle)); + name_index, CHECK_NULL); Symbol* name = cp->symbol_at(name_index); - verify_legal_field_name(name, CHECK_(nullHandle)); + verify_legal_field_name(name, CHECK_NULL); u2 signature_index = cfs->get_u2_fast(); check_property( valid_cp_range(signature_index, cp_size) && cp->tag_at(signature_index).is_utf8(), "Invalid constant pool index %u for field signature in class file %s", - signature_index, CHECK_(nullHandle)); + signature_index, CHECK_NULL); Symbol* sig = cp->symbol_at(signature_index); - verify_legal_field_signature(name, sig, CHECK_(nullHandle)); + verify_legal_field_signature(name, sig, CHECK_NULL); u2 constantvalue_index = 0; bool is_synthetic = false; @@ -1154,17 +1147,19 @@ u2 attributes_count = cfs->get_u2_fast(); if (attributes_count > 0) { - parse_field_attributes(cp, attributes_count, is_static, signature_index, + parse_field_attributes(loader_data, + cp, attributes_count, is_static, signature_index, &constantvalue_index, &is_synthetic, &generic_signature_index, &field_annotations, &parsed_annotations, - CHECK_(nullHandle)); - if (field_annotations.not_null()) { - if (fields_annotations->is_null()) { - objArrayOop md = oopFactory::new_system_objArray(length, CHECK_(nullHandle)); - *fields_annotations = objArrayHandle(THREAD, md); + CHECK_NULL); + if (field_annotations != NULL) { + if (*fields_annotations == NULL) { + *fields_annotations = MetadataFactory::new_array( + loader_data, length, NULL, + CHECK_NULL); } - (*fields_annotations)->obj_at_put(n, field_annotations()); + (*fields_annotations)->at_put(n, field_annotations); } if (is_synthetic) { access_flags.set_is_synthetic(); @@ -1244,20 +1239,19 @@ // the fields array could be too long. In that case the // fields array is trimed. Also unused slots that were reserved // for generic signature indexes are discarded. - typeArrayOop new_fields = oopFactory::new_permanent_shortArray( - index * FieldInfo::field_slots + num_generic_signature, - CHECK_(nullHandle)); - typeArrayHandle fields(THREAD, new_fields); + Array* fields = MetadataFactory::new_array( + loader_data, index * FieldInfo::field_slots + num_generic_signature, + CHECK_NULL); { int i = 0; for (; i < index * FieldInfo::field_slots; i++) { - new_fields->short_at_put(i, fa[i]); + fields->at_put(i, fa[i]); } for (int j = total_fields * FieldInfo::field_slots; j < generic_signature_slot; j++) { - new_fields->short_at_put(i++, fa[j]); + fields->at_put(i++, fa[j]); } - assert(i == new_fields->length(), ""); + assert(i == fields->length(), ""); } if (_need_verify && length > 1) { @@ -1281,7 +1275,7 @@ } if (dup) { classfile_parse_error("Duplicate field name&signature in class file %s", - CHECK_(nullHandle)); + CHECK_NULL); } } @@ -1296,7 +1290,8 @@ } -u2* ClassFileParser::parse_exception_table(u4 code_length, +u2* ClassFileParser::parse_exception_table(ClassLoaderData* loader_data, + u4 code_length, u4 exception_table_length, constantPoolHandle cp, TRAPS) { @@ -1578,7 +1573,8 @@ *u2_index = i2; } -typeArrayOop ClassFileParser::parse_stackmap_table( +Array* ClassFileParser::parse_stackmap_table( + ClassLoaderData* loader_data, u4 code_attribute_length, TRAPS) { if (code_attribute_length == 0) return NULL; @@ -1594,11 +1590,10 @@ return NULL; } - typeArrayOop stackmap_data = - oopFactory::new_permanent_byteArray(code_attribute_length, CHECK_NULL); - - stackmap_data->set_length(code_attribute_length); - memcpy((void*)stackmap_data->byte_at_addr(0), + Array* stackmap_data = + MetadataFactory::new_array(loader_data, code_attribute_length, 0, CHECK_NULL); + + memcpy((void*)stackmap_data->adr_at(0), (void*)stackmap_table_start, code_attribute_length); return stackmap_data; } @@ -1813,18 +1808,20 @@ // Note: the parse_method below is big and clunky because all parsing of the code and exceptions // attribute is inlined. This is cumbersome to avoid since we inline most of the parts in the -// methodOop to save footprint, so we only know the size of the resulting methodOop when the +// Method* to save footprint, so we only know the size of the resulting Method* when the // entire method attribute is parsed. // // The promoted_flags parameter is used to pass relevant access_flags // from the method back up to the containing klass. These flag values // are added to klass's access_flags. -methodHandle ClassFileParser::parse_method(constantPoolHandle cp, bool is_interface, +methodHandle ClassFileParser::parse_method(ClassLoaderData* loader_data, + constantPoolHandle cp, + bool is_interface, AccessFlags *promoted_flags, - typeArrayHandle* method_annotations, - typeArrayHandle* method_parameter_annotations, - typeArrayHandle* method_default_annotations, + AnnotationArray** method_annotations, + AnnotationArray** method_parameter_annotations, + AnnotationArray** method_default_annotations, TRAPS) { ClassFileStream* cfs = stream(); methodHandle nullHandle; @@ -1882,7 +1879,7 @@ u1* code_start = 0; u2 exception_table_length = 0; u2* exception_table_start = NULL; - typeArrayHandle exception_handlers(THREAD, Universe::the_empty_int_array()); + Array* exception_handlers = Universe::the_empty_int_array(); u2 checked_exceptions_length = 0; u2* checked_exceptions_start = NULL; CompressedLineNumberWriteStream* linenumber_table = NULL; @@ -1901,7 +1898,7 @@ bool parsed_checked_exceptions_attribute = false; bool parsed_stackmap_attribute = false; // stackmap attribute - JDK1.5 - typeArrayHandle stackmap_data; + Array* stackmap_data = NULL; u2 generic_signature_index = 0; MethodAnnotationCollector parsed_annotations; u1* runtime_visible_annotations = NULL; @@ -1970,7 +1967,7 @@ exception_table_length = cfs->get_u2_fast(); if (exception_table_length > 0) { exception_table_start = - parse_exception_table(code_length, exception_table_length, cp, CHECK_(nullHandle)); + parse_exception_table(loader_data, code_length, exception_table_length, cp, CHECK_(nullHandle)); } // Parse additional attributes in code attribute @@ -2079,9 +2076,7 @@ if (parsed_stackmap_attribute) { classfile_parse_error("Multiple StackMapTable attributes in class file %s", CHECK_(nullHandle)); } - typeArrayOop sm = - parse_stackmap_table(code_attribute_length, CHECK_(nullHandle)); - stackmap_data = typeArrayHandle(THREAD, sm); + stackmap_data = parse_stackmap_table(loader_data, code_attribute_length, CHECK_(nullHandle)); parsed_stackmap_attribute = true; } else { // Skip unknown attributes @@ -2173,17 +2168,17 @@ "Absent Code attribute in method that is not native or abstract in class file %s", CHECK_(nullHandle)); } - // All sizing information for a methodOop is finally available, now create it - methodOop m_oop = oopFactory::new_method(code_length, access_flags, + // All sizing information for a Method* is finally available, now create it + Method* m = Method::allocate(loader_data, + code_length, + access_flags, linenumber_table_length, total_lvt_length, exception_table_length, checked_exceptions_length, - oopDesc::IsSafeConc, CHECK_(nullHandle)); - methodHandle m (THREAD, m_oop); - - ClassLoadingService::add_class_method_size(m_oop->size()*HeapWordSize); + + ClassLoadingService::add_class_method_size(m->size()*HeapWordSize); // Fill in information from fixed part (access_flags already set) m->set_constants(cp()); @@ -2212,14 +2207,7 @@ m->set_max_stack(max_stack); m->set_max_locals(max_locals); - /** - * The stackmap_data field is the flag used to indicate - * that the methodOop and it's associated constMethodOop are partially - * initialized and thus are exempt from pre/post GC verification. Once - * the field is set, the oops are considered fully initialized so make - * sure that the oops can pass verification when this field is set. - */ - m->constMethod()->set_stackmap_data(stackmap_data()); + m->constMethod()->set_stackmap_data(stackmap_data); // Copy byte codes m->set_code(code_start); @@ -2321,17 +2309,20 @@ if (parsed_annotations.has_any_annotations()) parsed_annotations.apply_to(m); - *method_annotations = assemble_annotations(runtime_visible_annotations, + *method_annotations = assemble_annotations(loader_data, + runtime_visible_annotations, runtime_visible_annotations_length, runtime_invisible_annotations, runtime_invisible_annotations_length, CHECK_(nullHandle)); - *method_parameter_annotations = assemble_annotations(runtime_visible_parameter_annotations, + *method_parameter_annotations = assemble_annotations(loader_data, + runtime_visible_parameter_annotations, runtime_visible_parameter_annotations_length, runtime_invisible_parameter_annotations, runtime_invisible_parameter_annotations_length, CHECK_(nullHandle)); - *method_default_annotations = assemble_annotations(annotation_default, + *method_default_annotations = assemble_annotations(loader_data, + annotation_default, annotation_default_length, NULL, 0, @@ -2359,61 +2350,56 @@ // from the methods back up to the containing klass. These flag values // are added to klass's access_flags. -objArrayHandle ClassFileParser::parse_methods(constantPoolHandle cp, bool is_interface, +Array* ClassFileParser::parse_methods(ClassLoaderData* loader_data, + constantPoolHandle cp, + bool is_interface, AccessFlags* promoted_flags, bool* has_final_method, - objArrayOop* methods_annotations_oop, - objArrayOop* methods_parameter_annotations_oop, - objArrayOop* methods_default_annotations_oop, + Array** methods_annotations, + Array** methods_parameter_annotations, + Array** methods_default_annotations, TRAPS) { ClassFileStream* cfs = stream(); - objArrayHandle nullHandle; - typeArrayHandle method_annotations; - typeArrayHandle method_parameter_annotations; - typeArrayHandle method_default_annotations; - cfs->guarantee_more(2, CHECK_(nullHandle)); // length + AnnotationArray* method_annotations = NULL; + AnnotationArray* method_parameter_annotations = NULL; + AnnotationArray* method_default_annotations = NULL; + cfs->guarantee_more(2, CHECK_NULL); // length u2 length = cfs->get_u2_fast(); if (length == 0) { - return objArrayHandle(THREAD, Universe::the_empty_system_obj_array()); + return Universe::the_empty_method_array(); } else { - objArrayOop m = oopFactory::new_system_objArray(length, CHECK_(nullHandle)); - objArrayHandle methods(THREAD, m); + // FIXME: Handle leaks at later failures. + Array* methods = MetadataFactory::new_array(loader_data, length, NULL, CHECK_NULL); + HandleMark hm(THREAD); - objArrayHandle methods_annotations; - objArrayHandle methods_parameter_annotations; - objArrayHandle methods_default_annotations; for (int index = 0; index < length; index++) { - methodHandle method = parse_method(cp, is_interface, + methodHandle method = parse_method(loader_data, + cp, is_interface, promoted_flags, &method_annotations, &method_parameter_annotations, &method_default_annotations, - CHECK_(nullHandle)); + CHECK_NULL); + if (method->is_final()) { *has_final_method = true; } - methods->obj_at_put(index, method()); - if (method_annotations.not_null()) { - if (methods_annotations.is_null()) { - objArrayOop md = oopFactory::new_system_objArray(length, CHECK_(nullHandle)); - methods_annotations = objArrayHandle(THREAD, md); - } - methods_annotations->obj_at_put(index, method_annotations()); + methods->at_put(index, method()); + if (*methods_annotations == NULL) { + *methods_annotations = + MetadataFactory::new_array(loader_data, length, NULL, CHECK_NULL); } - if (method_parameter_annotations.not_null()) { - if (methods_parameter_annotations.is_null()) { - objArrayOop md = oopFactory::new_system_objArray(length, CHECK_(nullHandle)); - methods_parameter_annotations = objArrayHandle(THREAD, md); - } - methods_parameter_annotations->obj_at_put(index, method_parameter_annotations()); + (*methods_annotations)->at_put(index, method_annotations); + if (*methods_parameter_annotations == NULL) { + *methods_parameter_annotations = + MetadataFactory::new_array(loader_data, length, NULL, CHECK_NULL); } - if (method_default_annotations.not_null()) { - if (methods_default_annotations.is_null()) { - objArrayOop md = oopFactory::new_system_objArray(length, CHECK_(nullHandle)); - methods_default_annotations = objArrayHandle(THREAD, md); - } - methods_default_annotations->obj_at_put(index, method_default_annotations()); + (*methods_parameter_annotations)->at_put(index, method_parameter_annotations); + if (*methods_default_annotations == NULL) { + *methods_default_annotations = + MetadataFactory::new_array(loader_data, length, NULL, CHECK_NULL); } + (*methods_default_annotations)->at_put(index, method_default_annotations); } if (_need_verify && length > 1) { // Check duplicated methods @@ -2425,7 +2411,7 @@ { debug_only(No_Safepoint_Verifier nsv;) for (int i = 0; i < length; i++) { - methodOop m = (methodOop)methods->obj_at(i); + Method* m = methods->at(i); // If no duplicates, add name/signature in hashtable names_and_sigs. if (!put_after_lookup(m->name(), m->signature(), names_and_sigs)) { dup = true; @@ -2435,60 +2421,54 @@ } if (dup) { classfile_parse_error("Duplicate method name&signature in class file %s", - CHECK_(nullHandle)); + CHECK_NULL); } } - - *methods_annotations_oop = methods_annotations(); - *methods_parameter_annotations_oop = methods_parameter_annotations(); - *methods_default_annotations_oop = methods_default_annotations(); - return methods; } } -typeArrayHandle ClassFileParser::sort_methods(objArrayHandle methods, - objArrayHandle methods_annotations, - objArrayHandle methods_parameter_annotations, - objArrayHandle methods_default_annotations, +Array* ClassFileParser::sort_methods(ClassLoaderData* loader_data, + Array* methods, + Array* methods_annotations, + Array* methods_parameter_annotations, + Array* methods_default_annotations, TRAPS) { - typeArrayHandle nullHandle; - int length = methods()->length(); + int length = methods->length(); // If JVMTI original method ordering or sharing is enabled we have to // remember the original class file ordering. - // We temporarily use the vtable_index field in the methodOop to store the + // We temporarily use the vtable_index field in the Method* to store the // class file index, so we can read in after calling qsort. // Put the method ordering in the shared archive. if (JvmtiExport::can_maintain_original_method_order() || DumpSharedSpaces) { for (int index = 0; index < length; index++) { - methodOop m = methodOop(methods->obj_at(index)); + Method* m = methods->at(index); assert(!m->valid_vtable_index(), "vtable index should not be set"); m->set_vtable_index(index); } } // Sort method array by ascending method name (for faster lookups & vtable construction) // Note that the ordering is not alphabetical, see Symbol::fast_compare - methodOopDesc::sort_methods(methods(), - methods_annotations(), - methods_parameter_annotations(), - methods_default_annotations()); + Method::sort_methods(methods, + methods_annotations, + methods_parameter_annotations, + methods_default_annotations); // If JVMTI original method ordering or sharing is enabled construct int // array remembering the original ordering if (JvmtiExport::can_maintain_original_method_order() || DumpSharedSpaces) { - typeArrayOop new_ordering = oopFactory::new_permanent_intArray(length, CHECK_(nullHandle)); - typeArrayHandle method_ordering(THREAD, new_ordering); + Array* method_ordering = MetadataFactory::new_array(loader_data, length, CHECK_NULL); for (int index = 0; index < length; index++) { - methodOop m = methodOop(methods->obj_at(index)); + Method* m = methods->at(index); int old_index = m->vtable_index(); assert(old_index >= 0 && old_index < length, "invalid method index"); - method_ordering->int_at_put(index, old_index); - m->set_vtable_index(methodOopDesc::invalid_vtable_index); + method_ordering->at_put(index, old_index); + m->set_vtable_index(Method::invalid_vtable_index); } return method_ordering; } else { - return typeArrayHandle(THREAD, Universe::the_empty_int_array()); + return Universe::the_empty_int_array(); } } @@ -2532,7 +2512,8 @@ #define RECOGNIZED_INNER_CLASS_MODIFIERS (JVM_RECOGNIZED_CLASS_MODIFIERS | JVM_ACC_PRIVATE | JVM_ACC_PROTECTED | JVM_ACC_STATIC) // Return number of classes in the inner classes attribute table -u2 ClassFileParser::parse_classfile_inner_classes_attribute(u1* inner_classes_attribute_start, +u2 ClassFileParser::parse_classfile_inner_classes_attribute(ClassLoaderData* loader_data, + u1* inner_classes_attribute_start, bool parsed_enclosingmethod_attribute, u2 enclosing_method_class_index, u2 enclosing_method_method_index, @@ -2557,8 +2538,8 @@ // enclosing_method_class_index, // enclosing_method_method_index] int size = length * 4 + (parsed_enclosingmethod_attribute ? 2 : 0); - typeArrayOop ic = oopFactory::new_permanent_shortArray(size, CHECK_0); - typeArrayHandle inner_classes(THREAD, ic); + // FIXME: Will leak on exceptions. + Array* inner_classes = MetadataFactory::new_array(loader_data, size, CHECK_0); int index = 0; int cp_size = cp->length(); cfs->guarantee_more(8 * length, CHECK_0); // 4-tuples of u2 @@ -2600,20 +2581,20 @@ verify_legal_class_modifiers(flags, CHECK_0); inner_access_flags.set_flags(flags); - inner_classes->short_at_put(index++, inner_class_info_index); - inner_classes->short_at_put(index++, outer_class_info_index); - inner_classes->short_at_put(index++, inner_name_index); - inner_classes->short_at_put(index++, inner_access_flags.as_short()); + inner_classes->at_put(index++, inner_class_info_index); + inner_classes->at_put(index++, outer_class_info_index); + inner_classes->at_put(index++, inner_name_index); + inner_classes->at_put(index++, inner_access_flags.as_short()); } // 4347400: make sure there's no duplicate entry in the classes array if (_need_verify && _major_version >= JAVA_1_5_VERSION) { for(int i = 0; i < length * 4; i += 4) { for(int j = i + 4; j < length * 4; j += 4) { - guarantee_property((inner_classes->ushort_at(i) != inner_classes->ushort_at(j) || - inner_classes->ushort_at(i+1) != inner_classes->ushort_at(j+1) || - inner_classes->ushort_at(i+2) != inner_classes->ushort_at(j+2) || - inner_classes->ushort_at(i+3) != inner_classes->ushort_at(j+3)), + guarantee_property((inner_classes->at(i) != inner_classes->at(j) || + inner_classes->at(i+1) != inner_classes->at(j+1) || + inner_classes->at(i+2) != inner_classes->at(j+2) || + inner_classes->at(i+3) != inner_classes->at(j+3)), "Duplicate entry in InnerClasses in class file %s", CHECK_0); } @@ -2622,12 +2603,12 @@ // Set EnclosingMethod class and method indexes. if (parsed_enclosingmethod_attribute) { - inner_classes->short_at_put(index++, enclosing_method_class_index); - inner_classes->short_at_put(index++, enclosing_method_method_index); + inner_classes->at_put(index++, enclosing_method_class_index); + inner_classes->at_put(index++, enclosing_method_method_index); } assert(index == size, "wrong size"); - // Update instanceKlass with inner class info. + // Update InstanceKlass with inner class info. set_class_inner_classes(inner_classes); // Restore buffer's current position. @@ -2651,7 +2632,8 @@ set_class_generic_signature(cp->symbol_at(signature_index)); } -void ClassFileParser::parse_classfile_bootstrap_methods_attribute(constantPoolHandle cp, +void ClassFileParser::parse_classfile_bootstrap_methods_attribute(ClassLoaderData* loader_data, + constantPoolHandle cp, u4 attribute_byte_length, TRAPS) { ClassFileStream* cfs = stream(); u1* current_start = cfs->current(); @@ -2673,17 +2655,14 @@ // The array begins with a series of short[2] pairs, one for each tuple. int index_size = (attribute_array_length * 2); - typeArrayOop operands_oop = oopFactory::new_permanent_intArray(index_size + operand_count, CHECK); - typeArrayHandle operands(THREAD, operands_oop); - operands_oop = NULL; // tidy + Array* operands = MetadataFactory::new_array(loader_data, index_size + operand_count, CHECK); int operand_fill_index = index_size; int cp_size = cp->length(); for (int n = 0; n < attribute_array_length; n++) { // Store a 32-bit offset into the header of the operand array. - assert(constantPoolOopDesc::operand_offset_at(operands(), n) == 0, ""); - constantPoolOopDesc::operand_offset_at_put(operands(), n, operand_fill_index); + ConstantPool::operand_offset_at_put(operands, n, operand_fill_index); // Read a bootstrap specifier. cfs->guarantee_more(sizeof(u2) * 2, CHECK); // bsm, argc @@ -2695,8 +2674,8 @@ "bootstrap_method_index %u has bad constant type in class file %s", bootstrap_method_index, CHECK); - operands->short_at_put(operand_fill_index++, bootstrap_method_index); - operands->short_at_put(operand_fill_index++, argument_count); + operands->at_put(operand_fill_index++, bootstrap_method_index); + operands->at_put(operand_fill_index++, argument_count); cfs->guarantee_more(sizeof(u2) * argument_count, CHECK); // argv[argc] for (int j = 0; j < argument_count; j++) { @@ -2707,28 +2686,28 @@ "argument_index %u has bad constant type in class file %s", argument_index, CHECK); - operands->short_at_put(operand_fill_index++, argument_index); + operands->at_put(operand_fill_index++, argument_index); } } - assert(operand_fill_index == operands()->length(), "exact fill"); - assert(constantPoolOopDesc::operand_array_length(operands()) == attribute_array_length, "correct decode"); + assert(operand_fill_index == operands->length(), "exact fill"); + assert(ConstantPool::operand_array_length(operands) == attribute_array_length, "correct decode"); u1* current_end = cfs->current(); guarantee_property(current_end == current_start + attribute_byte_length, "Bad length on BootstrapMethods in class file %s", CHECK); - cp->set_operands(operands()); + cp->set_operands(operands); } - -void ClassFileParser::parse_classfile_attributes(constantPoolHandle cp, +void ClassFileParser::parse_classfile_attributes(ClassLoaderData* loader_data, + constantPoolHandle cp, ClassFileParser::ClassAnnotationCollector* parsed_annotations, TRAPS) { ClassFileStream* cfs = stream(); // Set inner classes attribute to default sentinel - set_class_inner_classes(typeArrayHandle(THREAD, Universe::the_empty_short_array())); + set_class_inner_classes(Universe::the_empty_short_array()); cfs->guarantee_more(2, CHECK); // attributes_count u2 attributes_count = cfs->get_u2_fast(); bool parsed_sourcefile_attribute = false; @@ -2844,7 +2823,7 @@ if (parsed_bootstrap_methods_attribute) classfile_parse_error("Multiple BootstrapMethods attributes in class file %s", CHECK); parsed_bootstrap_methods_attribute = true; - parse_classfile_bootstrap_methods_attribute(cp, attribute_length, CHECK); + parse_classfile_bootstrap_methods_attribute(loader_data, cp, attribute_length, CHECK); } else { // Unknown attribute cfs->skip_u1(attribute_length, CHECK); @@ -2854,7 +2833,8 @@ cfs->skip_u1(attribute_length, CHECK); } } - typeArrayHandle annotations = assemble_annotations(runtime_visible_annotations, + AnnotationArray* annotations = assemble_annotations(loader_data, + runtime_visible_annotations, runtime_visible_annotations_length, runtime_invisible_annotations, runtime_invisible_annotations_length, @@ -2863,6 +2843,7 @@ if (parsed_innerclasses_attribute || parsed_enclosingmethod_attribute) { u2 num_of_classes = parse_classfile_inner_classes_attribute( + loader_data, inner_classes_attribute_start, parsed_innerclasses_attribute, enclosing_method_class_index, @@ -2895,25 +2876,34 @@ if (_sde_buffer != NULL) { k->set_source_debug_extension(_sde_buffer, _sde_length); } - k->set_inner_classes(_inner_classes()); - k->set_class_annotations(_annotations()); + k->set_inner_classes(_inner_classes); + if (_annotations != NULL) { + k->annotations()->set_class_annotations(_annotations); + } } -typeArrayHandle ClassFileParser::assemble_annotations(u1* runtime_visible_annotations, +AnnotationArray* ClassFileParser::assemble_annotations(ClassLoaderData* loader_data, + u1* runtime_visible_annotations, int runtime_visible_annotations_length, u1* runtime_invisible_annotations, int runtime_invisible_annotations_length, TRAPS) { - typeArrayHandle annotations; + AnnotationArray* annotations = NULL; if (runtime_visible_annotations != NULL || runtime_invisible_annotations != NULL) { - typeArrayOop anno = oopFactory::new_permanent_byteArray(runtime_visible_annotations_length + - runtime_invisible_annotations_length, CHECK_(annotations)); - annotations = typeArrayHandle(THREAD, anno); + annotations = MetadataFactory::new_array(loader_data, + runtime_visible_annotations_length + + runtime_invisible_annotations_length, + CHECK_(annotations)); if (runtime_visible_annotations != NULL) { - memcpy(annotations->byte_at_addr(0), runtime_visible_annotations, runtime_visible_annotations_length); + for (int i = 0; i < runtime_visible_annotations_length; i++) { + annotations->at_put(i, runtime_visible_annotations[i]); + } } if (runtime_invisible_annotations != NULL) { - memcpy(annotations->byte_at_addr(runtime_visible_annotations_length), runtime_invisible_annotations, runtime_invisible_annotations_length); + for (int i = 0; i < runtime_invisible_annotations_length; i++) { + int append = runtime_visible_annotations_length+i; + annotations->at_put(append, runtime_invisible_annotations[i]); + } } } return annotations; @@ -2935,6 +2925,7 @@ // original class bytes. unsigned char *cached_class_file_bytes = NULL; jint cached_class_file_length; + ClassLoaderData* loader_data = ClassLoaderData::class_loader_data(class_loader()); ClassFileStream* cfs = stream(); // Timing @@ -3043,7 +3034,7 @@ _relax_verify = Verifier::relax_verify_for(class_loader()); // Constant pool - constantPoolHandle cp = parse_constant_pool(class_loader, CHECK_(nullHandle)); + constantPoolHandle cp = parse_constant_pool(loader_data, CHECK_(nullHandle)); ConstantPoolCleaner error_handler(cp); // set constant pool to be cleaned up. int cp_size = cp->length(); @@ -3092,7 +3083,7 @@ CHECK_(nullHandle)); } - klassOop preserve_this_klass; // for storing result across HandleMark + Klass* preserve_this_klass; // for storing result across HandleMark // release all handles when parsing is done { HandleMark hm(THREAD); @@ -3146,18 +3137,18 @@ // Interfaces u2 itfs_len = cfs->get_u2_fast(); - objArrayHandle local_interfaces; + Array* local_interfaces; if (itfs_len == 0) { - local_interfaces = objArrayHandle(THREAD, Universe::the_empty_system_obj_array()); + local_interfaces = Universe::the_empty_klass_array(); } else { - local_interfaces = parse_interfaces(cp, itfs_len, class_loader, protection_domain, _class_name, CHECK_(nullHandle)); + local_interfaces = parse_interfaces(cp, itfs_len, loader_data, protection_domain, _class_name, CHECK_(nullHandle)); } u2 java_fields_count = 0; // Fields (offsets are filled in later) FieldAllocationCount fac; - objArrayHandle fields_annotations; - typeArrayHandle fields = parse_fields(class_name, cp, access_flags.is_interface(), &fac, &fields_annotations, + Array* fields_annotations = NULL; + Array* fields = parse_fields(loader_data, class_name, cp, access_flags.is_interface(), &fac, &fields_annotations, &java_fields_count, CHECK_(nullHandle)); // Methods @@ -3166,24 +3157,21 @@ promoted_flags.set_flags(0); // These need to be oop pointers because they are allocated lazily // inside parse_methods inside a nested HandleMark - objArrayOop methods_annotations_oop = NULL; - objArrayOop methods_parameter_annotations_oop = NULL; - objArrayOop methods_default_annotations_oop = NULL; - objArrayHandle methods = parse_methods(cp, access_flags.is_interface(), + Array* methods_annotations = NULL; + Array* methods_parameter_annotations = NULL; + Array* methods_default_annotations = NULL; + Array* methods = parse_methods(loader_data, + cp, access_flags.is_interface(), &promoted_flags, &has_final_method, - &methods_annotations_oop, - &methods_parameter_annotations_oop, - &methods_default_annotations_oop, + &methods_annotations, + &methods_parameter_annotations, + &methods_default_annotations, CHECK_(nullHandle)); - objArrayHandle methods_annotations(THREAD, methods_annotations_oop); - objArrayHandle methods_parameter_annotations(THREAD, methods_parameter_annotations_oop); - objArrayHandle methods_default_annotations(THREAD, methods_default_annotations_oop); - // Additional attributes ClassAnnotationCollector parsed_annotations; - parse_classfile_attributes(cp, &parsed_annotations, CHECK_(nullHandle)); + parse_classfile_attributes(loader_data, cp, &parsed_annotations, CHECK_(nullHandle)); // Make sure this is the end of class file stream guarantee_property(cfs->at_eos(), "Extra bytes at the end of class file %s", CHECK_(nullHandle)); @@ -3198,7 +3186,7 @@ "Interfaces must have java.lang.Object as superclass in class file %s", CHECK_(nullHandle)); } - klassOop k = SystemDictionary::resolve_super_or_fail(class_name, + Klass* k = SystemDictionary::resolve_super_or_fail(class_name, sk, class_loader, protection_domain, @@ -3229,10 +3217,11 @@ } // Compute the transitive list of all unique interfaces implemented by this class - objArrayHandle transitive_interfaces = compute_transitive_interfaces(super_klass, local_interfaces, CHECK_(nullHandle)); + Array* transitive_interfaces = compute_transitive_interfaces(loader_data, super_klass, local_interfaces, CHECK_(nullHandle)); // sort methods - typeArrayHandle method_ordering = sort_methods(methods, + Array* method_ordering = sort_methods(loader_data, + methods, methods_annotations, methods_parameter_annotations, methods_default_annotations, @@ -3249,11 +3238,11 @@ klassVtable::compute_vtable_size_and_num_mirandas(vtable_size, num_miranda_methods, super_klass(), - methods(), + methods, access_flags, class_loader, class_name, - local_interfaces(), + local_interfaces, CHECK_(nullHandle)); // Size of Java itable (in words) @@ -3597,13 +3586,26 @@ rt = super_klass->reference_type(); } - // We can now create the basic klassOop for this klass - klassOop ik = oopFactory::new_instanceKlass(name, vtable_size, itable_size, + // We can now create the basic Klass* for this klass + int total_oop_map_size2 = + InstanceKlass::nonstatic_oop_map_size(total_oop_map_count); + + Klass* ik = InstanceKlass::allocate_instance_klass(loader_data, + vtable_size, + itable_size, static_field_size, - total_oop_map_count, + total_oop_map_size2, + rt, access_flags, - rt, host_klass, + name, + super_klass(), + host_klass, CHECK_(nullHandle)); + + // Add all classes to our internal class loader list here, + // including classes in the bootstrap (NULL) class loader. + loader_data->add_class(ik); + instanceKlassHandle this_klass (THREAD, ik); assert(this_klass->static_field_size() == static_field_size, "sanity"); @@ -3618,51 +3620,61 @@ assert(this_klass->size_helper() == instance_size, "correct size_helper"); // Not yet: supers are done below to support the new subtype-checking fields //this_klass->set_super(super_klass()); - this_klass->set_class_loader(class_loader()); + this_klass->set_class_loader_data(loader_data); this_klass->set_nonstatic_field_size(nonstatic_field_size); this_klass->set_has_nonstatic_fields(has_nonstatic_fields); this_klass->set_static_oop_field_count(fac.count[STATIC_OOP]); cp->set_pool_holder(this_klass()); error_handler.set_in_error(false); // turn off error handler for cp this_klass->set_constants(cp()); - this_klass->set_local_interfaces(local_interfaces()); - this_klass->set_fields(fields(), java_fields_count); - this_klass->set_methods(methods()); + this_klass->set_local_interfaces(local_interfaces); + this_klass->set_fields(fields, java_fields_count); + this_klass->set_methods(methods); if (has_final_method) { this_klass->set_has_final_method(); } - this_klass->set_method_ordering(method_ordering()); - // The instanceKlass::_methods_jmethod_ids cache and the - // instanceKlass::_methods_cached_itable_indices cache are + this_klass->set_method_ordering(method_ordering); + // The InstanceKlass::_methods_jmethod_ids cache and the + // InstanceKlass::_methods_cached_itable_indices cache are // both managed on the assumption that the initial cache // size is equal to the number of methods in the class. If - // that changes, then instanceKlass::idnum_can_increment() + // that changes, then InstanceKlass::idnum_can_increment() // has to be changed accordingly. this_klass->set_initial_method_idnum(methods->length()); this_klass->set_name(cp->klass_name_at(this_class_index)); if (LinkWellKnownClasses || is_anonymous()) // I am well known to myself cp->klass_at_put(this_class_index, this_klass()); // eagerly resolve - this_klass->set_protection_domain(protection_domain()); - this_klass->set_fields_annotations(fields_annotations()); - this_klass->set_methods_annotations(methods_annotations()); - this_klass->set_methods_parameter_annotations(methods_parameter_annotations()); - this_klass->set_methods_default_annotations(methods_default_annotations()); + + if (fields_annotations != NULL || + methods_annotations != NULL || + methods_parameter_annotations != NULL || + methods_default_annotations != NULL) { + // Allocate an annotation type if needed. + Annotations* anno = Annotations::allocate(loader_data, + fields_annotations, methods_annotations, + methods_parameter_annotations, + methods_default_annotations, CHECK_(nullHandle)); + this_klass->set_annotations(anno); + } else { + this_klass->set_annotations(NULL); + } + this_klass->set_minor_version(minor_version); this_klass->set_major_version(major_version); - // Set up methodOop::intrinsic_id as soon as we know the names of methods. + // Set up Method*::intrinsic_id as soon as we know the names of methods. // (We used to do this lazily, but now we query it in Rewriter, // which is eagerly done for every method, so we might as well do it now, // when everything is fresh in memory.) - if (methodOopDesc::klass_id_for_intrinsics(this_klass->as_klassOop()) != vmSymbols::NO_SID) { + if (Method::klass_id_for_intrinsics(this_klass()) != vmSymbols::NO_SID) { for (int j = 0; j < methods->length(); j++) { - ((methodOop)methods->obj_at(j))->init_intrinsic_id(); + methods->at(j)->init_intrinsic_id(); } } if (cached_class_file_bytes != NULL) { - // JVMTI: we have an instanceKlass now, tell it about the cached bytes + // JVMTI: we have an InstanceKlass now, tell it about the cached bytes this_klass->set_cached_class_file(cached_class_file_bytes, cached_class_file_length); } @@ -3677,13 +3689,18 @@ } // Fill in field values obtained by parse_classfile_attributes - if (parsed_annotations.has_any_annotations()) + if (parsed_annotations.has_any_annotations()) { parsed_annotations.apply_to(this_klass); + } + // Create annotations + if (_annotations != NULL && this_klass->annotations() == NULL) { + Annotations* anno = Annotations::allocate(loader_data, CHECK_NULL); + this_klass->set_annotations(anno); + } apply_parsed_class_attributes(this_klass); - // VerifyOops believes that once this has been set, the object is completely loaded. // Compute transitive closure of interfaces this class implements - this_klass->set_transitive_interfaces(transitive_interfaces()); + this_klass->set_transitive_interfaces(transitive_interfaces); // Fill in information needed to compute superclasses. this_klass->initialize_supers(super_klass(), CHECK_(nullHandle)); @@ -3718,7 +3735,18 @@ // Allocate mirror and initialize static fields java_lang_Class::create_mirror(this_klass, CHECK_(nullHandle)); - ClassLoadingService::notify_class_loaded(instanceKlass::cast(this_klass()), + // Allocate a simple java object for locking during class initialization. + // This needs to be a java object because it can be held across a java call. + typeArrayOop r = oopFactory::new_typeArray(T_INT, 0, CHECK_NULL); + this_klass->set_init_lock(r); + + // TODO: Move these oops to the mirror + this_klass->set_protection_domain(protection_domain()); + + // Update the loader_data graph. + record_defined_class_dependencies(this_klass, CHECK_NULL); + + ClassLoadingService::notify_class_loaded(InstanceKlass::cast(this_klass()), false /* not shared class */); if (TraceClassLoading) { @@ -3728,17 +3756,17 @@ cfs->source()); } else if (class_loader.is_null()) { if (THREAD->is_Java_thread()) { - klassOop caller = ((JavaThread*)THREAD)->security_get_caller_class(1); + Klass* caller = ((JavaThread*)THREAD)->security_get_caller_class(1); tty->print("[Loaded %s by instance of %s]\n", this_klass->external_name(), - instanceKlass::cast(caller)->external_name()); + InstanceKlass::cast(caller)->external_name()); } else { tty->print("[Loaded %s]\n", this_klass->external_name()); } } else { ResourceMark rm; tty->print("[Loaded %s from %s]\n", this_klass->external_name(), - instanceKlass::cast(class_loader->klass())->external_name()); + InstanceKlass::cast(class_loader->klass())->external_name()); } } @@ -3746,15 +3774,15 @@ // print out the superclass. const char * from = Klass::cast(this_klass())->external_name(); if (this_klass->java_super() != NULL) { - tty->print("RESOLVE %s %s (super)\n", from, instanceKlass::cast(this_klass->java_super())->external_name()); + tty->print("RESOLVE %s %s (super)\n", from, InstanceKlass::cast(this_klass->java_super())->external_name()); } // print out each of the interface classes referred to by this class. - objArrayHandle local_interfaces(THREAD, this_klass->local_interfaces()); - if (!local_interfaces.is_null()) { + Array* local_interfaces = this_klass->local_interfaces(); + if (local_interfaces != NULL) { int length = local_interfaces->length(); for (int i = 0; i < length; i++) { - klassOop k = klassOop(local_interfaces->obj_at(i)); - instanceKlass* to_class = instanceKlass::cast(k); + Klass* k = local_interfaces->at(i); + InstanceKlass* to_class = InstanceKlass::cast(k); const char * to = to_class->external_name(); tty->print("RESOLVE %s %s (interface)\n", from, to); } @@ -3781,9 +3809,10 @@ preserve_this_klass = this_klass(); } - // Create new handle outside HandleMark + // Create new handle outside HandleMark (might be needed for + // Extended Class Redefinition) instanceKlassHandle this_klass (THREAD, preserve_this_klass); - debug_only(this_klass->as_klassOop()->verify();) + debug_only(this_klass->verify();) return this_klass; } @@ -3826,7 +3855,7 @@ int* nonstatic_oop_offsets, unsigned int* nonstatic_oop_counts) { OopMapBlock* this_oop_map = k->start_of_nonstatic_oop_maps(); - const instanceKlass* const super = k->superklass(); + const InstanceKlass* const super = k->superklass(); const unsigned int super_count = super ? super->nonstatic_oop_map_count() : 0; if (super_count > 0) { // Copy maps from superklass @@ -3861,20 +3890,20 @@ void ClassFileParser::set_precomputed_flags(instanceKlassHandle k) { - klassOop super = k->super(); + Klass* super = k->super(); // Check if this klass has an empty finalize method (i.e. one with return bytecode only), // in which case we don't have to register objects as finalizable if (!_has_empty_finalizer) { if (_has_finalizer || - (super != NULL && super->klass_part()->has_finalizer())) { + (super != NULL && super->has_finalizer())) { k->set_has_finalizer(); } } #ifdef ASSERT bool f = false; - methodOop m = k->lookup_method(vmSymbols::finalize_method_name(), + Method* m = k->lookup_method(vmSymbols::finalize_method_name(), vmSymbols::void_method_signature()); if (m != NULL && !m->is_empty_method()) { f = true; @@ -3901,7 +3930,7 @@ #ifdef ASSERT bool v = false; if (Klass::cast(super)->has_vanilla_constructor()) { - methodOop constructor = k->find_method(vmSymbols::object_initializer_name( + Method* constructor = k->find_method(vmSymbols::object_initializer_name( ), vmSymbols::void_method_signature()); if (constructor != NULL && constructor->is_vanilla_constructor()) { v = true; @@ -3912,12 +3941,12 @@ } // If it cannot be fast-path allocated, set a bit in the layout helper. - // See documentation of instanceKlass::can_be_fastpath_allocated(). + // See documentation of InstanceKlass::can_be_fastpath_allocated(). assert(k->size_helper() > 0, "layout_helper is initialized"); if ((!RegisterFinalizersAtInit && k->has_finalizer()) || k->is_abstract() || k->is_interface() || (k->name() == vmSymbols::java_lang_Class() - && k->class_loader() == NULL) + && k->class_loader_data()->is_the_null_class_loader_data()) || k->size_helper() >= FastAllocateSizeLimit) { // Forbid fast-path allocation. jint lh = Klass::instance_layout_helper(k->size_helper(), true); @@ -3925,30 +3954,44 @@ } } - -// utility method for appending and array with check for duplicates - -void append_interfaces(objArrayHandle result, int& index, objArrayOop ifs) { - // iterate over new interfaces - for (int i = 0; i < ifs->length(); i++) { - oop e = ifs->obj_at(i); - assert(e->is_klass() && instanceKlass::cast(klassOop(e))->is_interface(), "just checking"); - // check for duplicates - bool duplicate = false; - for (int j = 0; j < index; j++) { - if (result->obj_at(j) == e) { - duplicate = true; - break; +// Attach super classes and interface classes to class loader data +void ClassFileParser::record_defined_class_dependencies(instanceKlassHandle defined_klass, TRAPS) { + ClassLoaderData * defining_loader_data = defined_klass->class_loader_data(); + if (defining_loader_data->is_the_null_class_loader_data()) { + // Dependencies to null class loader data are implicit. + return; + } else { + // add super class dependency + Klass* super = defined_klass->super(); + if (super != NULL) { + defining_loader_data->record_dependency(super, CHECK); + } + + // add super interface dependencies + Array* local_interfaces = defined_klass->local_interfaces(); + if (local_interfaces != NULL) { + int length = local_interfaces->length(); + for (int i = 0; i < length; i++) { + defining_loader_data->record_dependency(local_interfaces->at(i), CHECK); } } - // add new interface - if (!duplicate) { - result->obj_at_put(index++, e); - } } } -objArrayHandle ClassFileParser::compute_transitive_interfaces(instanceKlassHandle super, objArrayHandle local_ifs, TRAPS) { +// utility method for appending and array with check for duplicates + +void append_interfaces(GrowableArray* result, Array* ifs) { + // iterate over new interfaces + for (int i = 0; i < ifs->length(); i++) { + Klass* e = ifs->at(i); + assert(e->is_klass() && InstanceKlass::cast(e)->is_interface(), "just checking"); + // add new interface + result->append_if_missing(e); + } +} + + +Array* ClassFileParser::compute_transitive_interfaces(ClassLoaderData* loader_data, instanceKlassHandle super, Array* local_ifs, TRAPS) { // Compute maximum size for transitive interfaces int max_transitive_size = 0; int super_size = 0; @@ -3960,66 +4003,63 @@ // Add local interfaces' super interfaces int local_size = local_ifs->length(); for (int i = 0; i < local_size; i++) { - klassOop l = klassOop(local_ifs->obj_at(i)); - max_transitive_size += instanceKlass::cast(l)->transitive_interfaces()->length(); + Klass* l = local_ifs->at(i); + max_transitive_size += InstanceKlass::cast(l)->transitive_interfaces()->length(); } // Finally add local interfaces max_transitive_size += local_size; // Construct array - objArrayHandle result; if (max_transitive_size == 0) { // no interfaces, use canonicalized array - result = objArrayHandle(THREAD, Universe::the_empty_system_obj_array()); + return Universe::the_empty_klass_array(); } else if (max_transitive_size == super_size) { // no new local interfaces added, share superklass' transitive interface array - result = objArrayHandle(THREAD, super->transitive_interfaces()); + return super->transitive_interfaces(); } else if (max_transitive_size == local_size) { // only local interfaces added, share local interface array - result = local_ifs; + return local_ifs; } else { - objArrayHandle nullHandle; - objArrayOop new_objarray = oopFactory::new_system_objArray(max_transitive_size, CHECK_(nullHandle)); - result = objArrayHandle(THREAD, new_objarray); - int index = 0; + ResourceMark rm; + GrowableArray* result = new GrowableArray(max_transitive_size); + // Copy down from superclass if (super.not_null()) { - append_interfaces(result, index, super->transitive_interfaces()); + append_interfaces(result, super->transitive_interfaces()); } + // Copy down from local interfaces' superinterfaces for (int i = 0; i < local_ifs->length(); i++) { - klassOop l = klassOop(local_ifs->obj_at(i)); - append_interfaces(result, index, instanceKlass::cast(l)->transitive_interfaces()); + Klass* l = local_ifs->at(i); + append_interfaces(result, InstanceKlass::cast(l)->transitive_interfaces()); } // Finally add local interfaces - append_interfaces(result, index, local_ifs()); - - // Check if duplicates were removed - if (index != max_transitive_size) { - assert(index < max_transitive_size, "just checking"); - objArrayOop new_result = oopFactory::new_system_objArray(index, CHECK_(nullHandle)); - for (int i = 0; i < index; i++) { - oop e = result->obj_at(i); + append_interfaces(result, local_ifs); + + // length will be less than the max_transitive_size if duplicates were removed + int length = result->length(); + assert(length <= max_transitive_size, "just checking"); + Array* new_result = MetadataFactory::new_array(loader_data, length, CHECK_NULL); + for (int i = 0; i < length; i++) { + Klass* e = result->at(i); assert(e != NULL, "just checking"); - new_result->obj_at_put(i, e); - } - result = objArrayHandle(THREAD, new_result); + new_result->at_put(i, e); } + return new_result; } - return result; } void ClassFileParser::check_super_class_access(instanceKlassHandle this_klass, TRAPS) { - klassOop super = this_klass->super(); + Klass* super = this_klass->super(); if ((super != NULL) && - (!Reflection::verify_class_access(this_klass->as_klassOop(), super, false))) { + (!Reflection::verify_class_access(this_klass(), super, false))) { ResourceMark rm(THREAD); Exceptions::fthrow( THREAD_AND_LOCATION, vmSymbols::java_lang_IllegalAccessError(), "class %s cannot access its superclass %s", this_klass->external_name(), - instanceKlass::cast(super)->external_name() + InstanceKlass::cast(super)->external_name() ); return; } @@ -4027,19 +4067,19 @@ void ClassFileParser::check_super_interface_access(instanceKlassHandle this_klass, TRAPS) { - objArrayHandle local_interfaces (THREAD, this_klass->local_interfaces()); + Array* local_interfaces = this_klass->local_interfaces(); int lng = local_interfaces->length(); for (int i = lng - 1; i >= 0; i--) { - klassOop k = klassOop(local_interfaces->obj_at(i)); + Klass* k = local_interfaces->at(i); assert (k != NULL && Klass::cast(k)->is_interface(), "invalid interface"); - if (!Reflection::verify_class_access(this_klass->as_klassOop(), k, false)) { + if (!Reflection::verify_class_access(this_klass(), k, false)) { ResourceMark rm(THREAD); Exceptions::fthrow( THREAD_AND_LOCATION, vmSymbols::java_lang_IllegalAccessError(), "class %s cannot access its superinterface %s", this_klass->external_name(), - instanceKlass::cast(k)->external_name() + InstanceKlass::cast(k)->external_name() ); return; } @@ -4048,12 +4088,12 @@ void ClassFileParser::check_final_method_override(instanceKlassHandle this_klass, TRAPS) { - objArrayHandle methods (THREAD, this_klass->methods()); + Array* methods = this_klass->methods(); int num_methods = methods->length(); // go thru each method and check if it overrides a final method for (int index = 0; index < num_methods; index++) { - methodOop m = (methodOop)methods->obj_at(index); + Method* m = methods->at(index); // skip private, static and methods if ((!m->is_private()) && @@ -4062,20 +4102,20 @@ Symbol* name = m->name(); Symbol* signature = m->signature(); - klassOop k = this_klass->super(); - methodOop super_m = NULL; + Klass* k = this_klass->super(); + Method* super_m = NULL; while (k != NULL) { // skip supers that don't have final methods. - if (k->klass_part()->has_final_method()) { + if (k->has_final_method()) { // lookup a matching method in the super class hierarchy - super_m = instanceKlass::cast(k)->lookup_method(name, signature); + super_m = InstanceKlass::cast(k)->lookup_method(name, signature); if (super_m == NULL) { break; // didn't find any match; get out } if (super_m->is_final() && // matching method in super is final - (Reflection::verify_field_access(this_klass->as_klassOop(), + (Reflection::verify_field_access(this_klass(), super_m->method_holder(), super_m->method_holder(), super_m->access_flags(), false)) @@ -4094,11 +4134,11 @@ } // continue to look from super_m's holder's super. - k = instanceKlass::cast(super_m->method_holder())->super(); + k = InstanceKlass::cast(super_m->method_holder())->super(); continue; } - k = k->klass_part()->super(); + k = k->super(); } } } @@ -4108,11 +4148,11 @@ // assumes that this_klass is an interface void ClassFileParser::check_illegal_static_method(instanceKlassHandle this_klass, TRAPS) { assert(this_klass->is_interface(), "not an interface"); - objArrayHandle methods (THREAD, this_klass->methods()); + Array* methods = this_klass->methods(); int num_methods = methods->length(); for (int index = 0; index < num_methods; index++) { - methodOop m = (methodOop)methods->obj_at(index); + Method* m = methods->at(index); // if m is static and not the init method, throw a verify error if ((m->is_static()) && (m->name() != vmSymbols::class_initializer_name())) { ResourceMark rm(THREAD); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/classFileParser.hpp --- a/src/share/vm/classfile/classFileParser.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/classFileParser.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -62,15 +62,15 @@ Symbol* _generic_signature; char* _sde_buffer; int _sde_length; - typeArrayHandle _inner_classes; - typeArrayHandle _annotations; + Array* _inner_classes; + AnnotationArray* _annotations; void set_class_synthetic_flag(bool x) { _synthetic_flag = x; } void set_class_sourcefile(Symbol* x) { _sourcefile = x; } void set_class_generic_signature(Symbol* x) { _generic_signature = x; } void set_class_sde_buffer(char* x, int len) { _sde_buffer = x; _sde_length = len; } - void set_class_inner_classes(typeArrayHandle x) { _inner_classes = x; } - void set_class_annotations(typeArrayHandle x) { _annotations = x; } + void set_class_inner_classes(Array* x) { _inner_classes = x; } + void set_class_annotations(AnnotationArray* x) { _annotations = x; } void init_parsed_class_attributes() { _synthetic_flag = false; _sourcefile = NULL; @@ -140,54 +140,63 @@ void set_stream(ClassFileStream* st) { _stream = st; } // Constant pool parsing - void parse_constant_pool_entries(Handle class_loader, + void parse_constant_pool_entries(ClassLoaderData* loader_data, constantPoolHandle cp, int length, TRAPS); - constantPoolHandle parse_constant_pool(Handle class_loader, TRAPS); + constantPoolHandle parse_constant_pool(ClassLoaderData* loader_data, TRAPS); // Interface parsing - objArrayHandle parse_interfaces(constantPoolHandle cp, + Array* parse_interfaces(constantPoolHandle cp, int length, - Handle class_loader, + ClassLoaderData* loader_data, Handle protection_domain, Symbol* class_name, TRAPS); + void record_defined_class_dependencies(instanceKlassHandle defined_klass, TRAPS); // Field parsing - void parse_field_attributes(constantPoolHandle cp, u2 attributes_count, + void parse_field_attributes(ClassLoaderData* loader_data, + constantPoolHandle cp, u2 attributes_count, bool is_static, u2 signature_index, u2* constantvalue_index_addr, bool* is_synthetic_addr, u2* generic_signature_index_addr, - typeArrayHandle* field_annotations, + AnnotationArray** field_annotations, FieldAnnotationCollector* parsed_annotations, TRAPS); - typeArrayHandle parse_fields(Symbol* class_name, + Array* parse_fields(ClassLoaderData* loader_data, + Symbol* class_name, constantPoolHandle cp, bool is_interface, FieldAllocationCount *fac, - objArrayHandle* fields_annotations, + Array** fields_annotations, u2* java_fields_count_ptr, TRAPS); // Method parsing - methodHandle parse_method(constantPoolHandle cp, bool is_interface, + methodHandle parse_method(ClassLoaderData* loader_data, + constantPoolHandle cp, + bool is_interface, AccessFlags* promoted_flags, - typeArrayHandle* method_annotations, - typeArrayHandle* method_parameter_annotations, - typeArrayHandle* method_default_annotations, + AnnotationArray** method_annotations, + AnnotationArray** method_parameter_annotations, + AnnotationArray** method_default_annotations, TRAPS); - objArrayHandle parse_methods (constantPoolHandle cp, bool is_interface, + Array* parse_methods(ClassLoaderData* loader_data, + constantPoolHandle cp, + bool is_interface, AccessFlags* promoted_flags, bool* has_final_method, - objArrayOop* methods_annotations_oop, - objArrayOop* methods_parameter_annotations_oop, - objArrayOop* methods_default_annotations_oop, + Array** methods_annotations, + Array** methods_parameter_annotations, + Array** methods_default_annotations, TRAPS); - typeArrayHandle sort_methods (objArrayHandle methods, - objArrayHandle methods_annotations, - objArrayHandle methods_parameter_annotations, - objArrayHandle methods_default_annotations, + Array* sort_methods(ClassLoaderData* loader_data, + Array* methods, + Array* methods_annotations, + Array* methods_parameter_annotations, + Array* methods_default_annotations, TRAPS); - u2* parse_exception_table(u4 code_length, u4 exception_table_length, + u2* parse_exception_table(ClassLoaderData* loader_data, + u4 code_length, u4 exception_table_length, constantPoolHandle cp, TRAPS); void parse_linenumber_table( u4 code_attribute_length, u4 code_length, @@ -199,26 +208,30 @@ constantPoolHandle cp, TRAPS); void parse_type_array(u2 array_length, u4 code_length, u4* u1_index, u4* u2_index, u1* u1_array, u2* u2_array, constantPoolHandle cp, TRAPS); - typeArrayOop parse_stackmap_table(u4 code_attribute_length, TRAPS); + Array* parse_stackmap_table(ClassLoaderData* loader_data, u4 code_attribute_length, TRAPS); // Classfile attribute parsing void parse_classfile_sourcefile_attribute(constantPoolHandle cp, TRAPS); - void parse_classfile_source_debug_extension_attribute(constantPoolHandle cp, int length, TRAPS); - u2 parse_classfile_inner_classes_attribute(u1* inner_classes_attribute_start, + void parse_classfile_source_debug_extension_attribute(constantPoolHandle cp, + int length, TRAPS); + u2 parse_classfile_inner_classes_attribute(ClassLoaderData* loader_data, + u1* inner_classes_attribute_start, bool parsed_enclosingmethod_attribute, u2 enclosing_method_class_index, u2 enclosing_method_method_index, constantPoolHandle cp, TRAPS); - void parse_classfile_attributes(constantPoolHandle cp, + void parse_classfile_attributes(ClassLoaderData* loader_data, + constantPoolHandle cp, ClassAnnotationCollector* parsed_annotations, TRAPS); void parse_classfile_synthetic_attribute(constantPoolHandle cp, TRAPS); void parse_classfile_signature_attribute(constantPoolHandle cp, TRAPS); - void parse_classfile_bootstrap_methods_attribute(constantPoolHandle cp, u4 attribute_length, TRAPS); + void parse_classfile_bootstrap_methods_attribute(ClassLoaderData* loader_data, constantPoolHandle cp, u4 attribute_length, TRAPS); // Annotations handling - typeArrayHandle assemble_annotations(u1* runtime_visible_annotations, + AnnotationArray* assemble_annotations(ClassLoaderData* loader_data, + u1* runtime_visible_annotations, int runtime_visible_annotations_length, u1* runtime_invisible_annotations, int runtime_invisible_annotations_length, TRAPS); @@ -238,8 +251,9 @@ int* nonstatic_oop_offsets, unsigned int* nonstatic_oop_counts); void set_precomputed_flags(instanceKlassHandle k); - objArrayHandle compute_transitive_interfaces(instanceKlassHandle super, - objArrayHandle local_ifs, TRAPS); + Array* compute_transitive_interfaces(ClassLoaderData* loader_data, + instanceKlassHandle super, + Array* local_ifs, TRAPS); // Format checker methods void classfile_parse_error(const char* msg, TRAPS); @@ -326,7 +340,7 @@ void patch_constant_pool(constantPoolHandle cp, int index, Handle patch, TRAPS); // Wrapper for constantTag.is_klass_[or_]reference. - // In older versions of the VM, klassOops cannot sneak into early phases of + // In older versions of the VM, Klass*s cannot sneak into early phases of // constant pool construction, but in later versions they can. // %%% Let's phase out the old is_klass_reference. bool is_klass_reference(constantPoolHandle cp, int index) { @@ -339,7 +353,7 @@ // Constructor ClassFileParser(ClassFileStream* st) { set_stream(st); } - // Parse .class file and return new klassOop. The klassOop is not hooked up + // Parse .class file and return new Klass*. The Klass* is not hooked up // to the system dictionary or any other structures, so a .class file can // be loaded several times if desired. // The system dictionary hookup is done by the caller. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/classLoader.cpp --- a/src/share/vm/classfile/classLoader.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/classLoader.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,6 @@ #include "memory/generation.hpp" #include "memory/oopFactory.hpp" #include "memory/universe.inline.hpp" -#include "oops/constantPoolKlass.hpp" #include "oops/instanceKlass.hpp" #include "oops/instanceRefKlass.hpp" #include "oops/oop.inline.hpp" @@ -904,7 +903,7 @@ } } - instanceKlassHandle h(THREAD, klassOop(NULL)); + instanceKlassHandle h; if (stream != NULL) { // class file found, parse it @@ -1192,10 +1191,7 @@ if (PENDING_EXCEPTION->is_a(SystemDictionary::OutOfMemoryError_klass())) { CLEAR_PENDING_EXCEPTION; tty->print_cr("\nCompileTheWorld : Ran out of memory\n"); - size_t used = Universe::heap()->permanent_used(); - size_t capacity = Universe::heap()->permanent_capacity(); - tty->print_cr("Permanent generation used %dK of %dK", used/K, capacity/K); - tty->print_cr("Increase size by setting e.g. -XX:MaxPermSize=%dK\n", capacity*2/K); + tty->print_cr("Increase class metadata storage if a limit was set"); } else { tty->print_cr("\nCompileTheWorld : Unexpected exception occurred\n"); } @@ -1318,7 +1314,7 @@ // Construct name without extension TempNewSymbol sym = SymbolTable::new_symbol(buffer, CHECK); // Use loader to load and initialize class - klassOop ik = SystemDictionary::resolve_or_null(sym, loader, Handle(), THREAD); + Klass* ik = SystemDictionary::resolve_or_null(sym, loader, Handle(), THREAD); instanceKlassHandle k (THREAD, ik); if (k.not_null() && !HAS_PENDING_EXCEPTION) { k->initialize(THREAD); @@ -1326,7 +1322,7 @@ bool exception_occurred = HAS_PENDING_EXCEPTION; clear_pending_exception_if_not_oom(CHECK); if (CompileTheWorldPreloadClasses && k.not_null()) { - constantPoolKlass::preload_and_initialize_all_classes(k->constants(), THREAD); + ConstantPool::preload_and_initialize_all_classes(k->constants(), THREAD); if (HAS_PENDING_EXCEPTION) { // If something went wrong in preloading we just ignore it clear_pending_exception_if_not_oom(CHECK); @@ -1343,7 +1339,7 @@ // Preload all classes to get around uncommon traps // Iterate over all methods in class for (int n = 0; n < k->methods()->length(); n++) { - methodHandle m (THREAD, methodOop(k->methods()->obj_at(n))); + methodHandle m (THREAD, k->methods()->at(n)); if (CompilationPolicy::can_be_compiled(m)) { if (++_codecache_sweep_counter == CompileTheWorldSafepointInterval) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/classLoaderData.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/classfile/classLoaderData.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,640 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +// A ClassLoaderData identifies the full set of class types that a class +// loader's name resolution strategy produces for a given configuration of the +// class loader. +// Class types in the ClassLoaderData may be defined by from class file binaries +// provided by the class loader, or from other class loader it interacts with +// according to its name resolution strategy. +// +// Class loaders that implement a deterministic name resolution strategy +// (including with respect to their delegation behavior), such as the boot, the +// extension, and the system loaders of the JDK's built-in class loader +// hierarchy, always produce the same linkset for a given configuration. +// +// ClassLoaderData carries information related to a linkset (e.g., +// metaspace holding its klass definitions). +// The System Dictionary and related data structures (e.g., placeholder table, +// loader constraints table) as well as the runtime representation of classes +// only reference ClassLoaderData. +// +// Instances of java.lang.ClassLoader holds a pointer to a ClassLoaderData that +// that represent the loader's "linking domain" in the JVM. +// +// The bootstrap loader (represented by NULL) also has a ClassLoaderData, +// the singleton class the_null_class_loader_data(). + +#include "precompiled.hpp" +#include "classfile/classLoaderData.hpp" +#include "classfile/classLoaderData.inline.hpp" +#include "classfile/javaClasses.hpp" +#include "classfile/systemDictionary.hpp" +#include "code/codeCache.hpp" +#include "memory/metadataFactory.hpp" +#include "memory/metaspaceShared.hpp" +#include "prims/jvmtiRedefineClasses.hpp" +#include "runtime/jniHandles.hpp" +#include "runtime/mutex.hpp" +#include "runtime/safepoint.hpp" +#include "runtime/synchronizer.hpp" +#include "utilities/growableArray.hpp" +#include "utilities/ostream.hpp" + +ClassLoaderData * ClassLoaderData::_the_null_class_loader_data = NULL; + +ClassLoaderData::ClassLoaderData(Handle h_class_loader) : _class_loader(h_class_loader()), + _metaspace(NULL), _unloading(false), _klasses(NULL), + _claimed(0), _jmethod_ids(NULL), _handles(NULL), + _deallocate_list(NULL), _next(NULL), + _metaspace_lock(new Mutex(Monitor::leaf+1, "Metaspace allocation lock", true)) { + // empty +} + +bool ClassLoaderData::claim() { + if (_claimed == 1) { + return false; + } + + return (int) Atomic::cmpxchg(1, &_claimed, 0) == 0; +} + +void ClassLoaderData::oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) { + if (must_claim && !claim()) { + return; + } + + f->do_oop(&_class_loader); + _handles->oops_do(f); + if (klass_closure != NULL) { + classes_do(klass_closure); + } +} + +void ClassLoaderData::classes_do(KlassClosure* klass_closure) { + for (Klass* k = _klasses; k != NULL; k = k->next_link()) { + klass_closure->do_klass(k); + } +} + +void ClassLoaderData::classes_do(void f(InstanceKlass*)) { + for (Klass* k = _klasses; k != NULL; k = k->next_link()) { + if (k->oop_is_instance()) { + f(InstanceKlass::cast(k)); + } + } +} + +void ClassLoaderData::record_dependency(Klass* k, TRAPS) { + ClassLoaderData * const from_cld = this; + ClassLoaderData * const to_cld = k->class_loader_data(); + + // Records dependency between non-null class loaders only. + if (to_cld->is_the_null_class_loader_data() || from_cld->is_the_null_class_loader_data()) { + return; + } + + // Check that this dependency isn't from the same or parent class_loader + oop to = to_cld->class_loader(); + oop from = from_cld->class_loader(); + + oop curr = from; + while (curr != NULL) { + if (curr == to) { + return; // this class loader is in the parent list, no need to add it. + } + curr = java_lang_ClassLoader::parent(curr); + } + + // It's a dependency we won't find through GC, add it. This is relatively rare + from_cld->add_dependency(to_cld, CHECK); +} + +bool ClassLoaderData::has_dependency(ClassLoaderData* dependency) { + oop loader = dependency->class_loader(); + + // Get objArrayOop out of the class_loader oop and see if this dependency + // is there. Don't safepoint! These are all oops. + // Dependency list is (oop class_loader, objArrayOop next) + objArrayOop ok = (objArrayOop)java_lang_ClassLoader::dependencies(class_loader()); + while (ok != NULL) { + if (ok->obj_at(0) == loader) { + return true; + } + ok = (objArrayOop)ok->obj_at(1); + } + return false; +} + +void ClassLoaderData::add_dependency(ClassLoaderData* dependency, TRAPS) { + // Minimize the number of duplicates in the list. + if (has_dependency(dependency)) { + return; + } + + // Create a new dependency node with fields for (class_loader, next) + objArrayOop deps = oopFactory::new_objectArray(2, CHECK); + deps->obj_at_put(0, dependency->class_loader()); + + // Add this lock free, using compare and exchange, need barriers for GC + // Do the barrier first. + HeapWord* addr = java_lang_ClassLoader::dependencies_addr(class_loader()); + while (true) { + oop old_dependency = java_lang_ClassLoader::dependencies(class_loader()); + deps->obj_at_put(1, old_dependency); + + oop newold = oopDesc::atomic_compare_exchange_oop((oop)deps, addr, old_dependency, true); + if (newold == old_dependency) { + update_barrier_set((void*)addr, (oop)deps); + // we won the race to add this dependency + break; + } + } +} + + +void ClassLoaderDataGraph::clear_claimed_marks() { + for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) { + cld->clear_claimed(); + } +} + +void ClassLoaderData::add_class(Klass* k) { + MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag); + Klass* old_value = _klasses; + k->set_next_link(old_value); + // link the new item into the list + _klasses = k; + + if (TraceClassLoaderData && k->class_loader_data() != NULL) { + ResourceMark rm; + tty->print_cr("[TraceClassLoaderData] Adding k: " PTR_FORMAT " %s to CLD: " + PTR_FORMAT " loader: " PTR_FORMAT " %s", + k, + k->external_name(), + k->class_loader_data(), + k->class_loader(), + k->class_loader() != NULL ? k->class_loader()->klass()->external_name() : "NULL" + ); + } +} + +// This is called by InstanceKlass::deallocate_contents() to remove the +// scratch_class for redefine classes. We need a lock because there it may not +// be called at a safepoint if there's an error. +void ClassLoaderData::remove_class(Klass* scratch_class) { + MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag); + Klass* prev = NULL; + for (Klass* k = _klasses; k != NULL; k = k->next_link()) { + if (k == scratch_class) { + if (prev == NULL) { + _klasses = k->next_link(); + } else { + Klass* next = k->next_link(); + prev->set_next_link(next); + } + return; + } + prev = k; + } + ShouldNotReachHere(); // should have found this class!! +} + +ClassLoaderData::~ClassLoaderData() { + Metaspace *m = _metaspace; + if (m != NULL) { + _metaspace = NULL; + // release the metaspace + delete m; + // release the handles + if (_handles != NULL) { + JNIHandleBlock::release_block(_handles); + _handles = NULL; + } + } + + // Clear all the JNI handles for methods + // These aren't deallocated and are going to look like a leak, but that's + // needed because we can't really get rid of jmethodIDs because we don't + // know when native code is going to stop using them. The spec says that + // they're "invalid" but existing programs likely rely on their being + // NULL after class unloading. + if (_jmethod_ids != NULL) { + Method::clear_jmethod_ids(this); + } + // Delete lock + delete _metaspace_lock; + + // Delete free list + if (_deallocate_list != NULL) { + delete _deallocate_list; + } +} + +Metaspace* ClassLoaderData::metaspace_non_null() { + // If the metaspace has not been allocated, create a new one. Might want + // to create smaller arena for Reflection class loaders also. + // The reason for the delayed allocation is because some class loaders are + // simply for delegating with no metadata of their own. + if (_metaspace == NULL) { + MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag); + // Check again if metaspace has been allocated while we were getting this lock. + if (_metaspace != NULL) { + return _metaspace; + } + if (class_loader() == NULL) { + assert(this == the_null_class_loader_data(), "Must be"); + size_t word_size = Metaspace::first_chunk_word_size(); + set_metaspace(new Metaspace(_metaspace_lock, word_size)); + } else { + set_metaspace(new Metaspace(_metaspace_lock)); // default size for now. + } + } + return _metaspace; +} + +JNIHandleBlock* ClassLoaderData::handles() const { return _handles; } +void ClassLoaderData::set_handles(JNIHandleBlock* handles) { _handles = handles; } + +jobject ClassLoaderData::add_handle(Handle h) { + MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag); + if (handles() == NULL) { + set_handles(JNIHandleBlock::allocate_block()); + } + return handles()->allocate_handle(h()); +} + +// Add this metadata pointer to be freed when it's safe. This is only during +// class unloading because Handles might point to this metadata field. +void ClassLoaderData::add_to_deallocate_list(Metadata* m) { + // Metadata in shared region isn't deleted. + if (!m->is_shared()) { + MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag); + if (_deallocate_list == NULL) { + _deallocate_list = new (ResourceObj::C_HEAP, mtClass) GrowableArray(100, true); + } + _deallocate_list->append_if_missing(m); + } +} + +// Deallocate free metadata on the free list. How useful the PermGen was! +void ClassLoaderData::free_deallocate_list() { + // Don't need lock, at safepoint + assert(SafepointSynchronize::is_at_safepoint(), "only called at safepoint"); + if (_deallocate_list == NULL) { + return; + } + // Go backwards because this removes entries that are freed. + for (int i = _deallocate_list->length() - 1; i >= 0; i--) { + Metadata* m = _deallocate_list->at(i); + if (!m->on_stack()) { + _deallocate_list->remove_at(i); + // There are only three types of metadata that we deallocate directly. + // Cast them so they can be used by the template function. + if (m->is_method()) { + MetadataFactory::free_metadata(this, (Method*)m); + } else if (m->is_constantPool()) { + MetadataFactory::free_metadata(this, (ConstantPool*)m); + } else if (m->is_klass()) { + MetadataFactory::free_metadata(this, (InstanceKlass*)m); + } else { + ShouldNotReachHere(); + } + } + } +} + +#ifndef PRODUCT +void ClassLoaderData::print_loader(ClassLoaderData *loader_data, outputStream* out) { + oop class_loader = loader_data->class_loader(); + out->print("%s", SystemDictionary::loader_name(class_loader)); +} + +// Define to dump klasses +#undef CLD_DUMP_KLASSES + +void ClassLoaderData::dump(outputStream * const out) { + ResourceMark rm; + out->print("ClassLoaderData CLD: "PTR_FORMAT", loader: "PTR_FORMAT", loader_klass: "PTR_FORMAT" %s {", + this, class_loader(), + class_loader() != NULL ? class_loader()->klass() : NULL, + class_loader() != NULL ? class_loader()->klass()->external_name() : "NULL"); + if (claimed()) out->print(" claimed "); + if (is_unloading()) out->print(" unloading "); + out->print(" handles " INTPTR_FORMAT, handles()); + out->cr(); + if (metaspace_or_null() != NULL) { + out->print_cr("metaspace: " PTR_FORMAT, metaspace_or_null()); + metaspace_or_null()->dump(out); + } else { + out->print_cr("metaspace: NULL"); + } + +#ifdef CLD_DUMP_KLASSES + if (Verbose) { + ResourceMark rm; + Klass* k = _klasses; + while (k != NULL) { + out->print_cr("klass "PTR_FORMAT", %s, CT: %d, MUT: %d", k, k->name()->as_C_string(), + k->has_modified_oops(), k->has_accumulated_modified_oops()); + k = k->next_link(); + } + } +#endif // CLD_DUMP_KLASSES +#undef CLD_DUMP_KLASSES + if (_jmethod_ids != NULL) { + Method::print_jmethod_ids(this, out); + } + out->print_cr("}"); +} +#endif // PRODUCT + +void ClassLoaderData::verify() { + oop cl = class_loader(); + + guarantee(this == class_loader_data(cl), "Must be the same"); + guarantee(cl != NULL || this == ClassLoaderData::the_null_class_loader_data(), "must be"); + + // Verify the integrity of the allocated space. + if (metaspace_or_null() != NULL) { + metaspace_or_null()->verify(); + } + + for (Klass* k = _klasses; k != NULL; k = k->next_link()) { + guarantee(k->class_loader_data() == this, "Must be the same"); + k->verify(); + } +} + +// GC root of class loader data created. +ClassLoaderData* ClassLoaderDataGraph::_head = NULL; +ClassLoaderData* ClassLoaderDataGraph::_unloading = NULL; +ClassLoaderData* ClassLoaderDataGraph::_saved_head = NULL; + + +// Add a new class loader data node to the list. Assign the newly created +// ClassLoaderData into the java/lang/ClassLoader object as a hidden field +ClassLoaderData* ClassLoaderDataGraph::add(ClassLoaderData** cld_addr, Handle loader_data) { + // Not assigned a class loader data yet. + // Create one. + ClassLoaderData* *list_head = &_head; + ClassLoaderData* next = _head; + ClassLoaderData* cld = new ClassLoaderData(loader_data); + + // First, Atomically set it. + ClassLoaderData* old = (ClassLoaderData*) Atomic::cmpxchg_ptr(cld, cld_addr, NULL); + if (old != NULL) { + delete cld; + // Returns the data. + return old; + } + + // We won the race, and therefore the task of adding the data to the list of + // class loader data + do { + cld->set_next(next); + ClassLoaderData* exchanged = (ClassLoaderData*)Atomic::cmpxchg_ptr(cld, list_head, next); + if (exchanged == next) { + if (TraceClassLoaderData) { + tty->print("[ClassLoaderData: "); + tty->print("create class loader data "PTR_FORMAT, cld); + tty->print(" for instance "PTR_FORMAT" of ", cld->class_loader()); + loader_data->klass()->name()->print_symbol_on(tty); + tty->print_cr("]"); + } + return cld; + } + next = exchanged; + } while (true); +} + +void ClassLoaderDataGraph::oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) { + for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) { + cld->oops_do(f, klass_closure, must_claim); + } +} + +void ClassLoaderDataGraph::always_strong_oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) { + if (ClassUnloading) { + ClassLoaderData::the_null_class_loader_data()->oops_do(f, klass_closure, must_claim); + } else { + ClassLoaderDataGraph::oops_do(f, klass_closure, must_claim); + } +} + +void ClassLoaderDataGraph::classes_do(KlassClosure* klass_closure) { + for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) { + cld->classes_do(klass_closure); + } +} + +GrowableArray* ClassLoaderDataGraph::new_clds() { + assert(_head == NULL || _saved_head != NULL, "remember_new_clds(true) not called?"); + + GrowableArray* array = new GrowableArray(); + + // The CLDs in [_head, _saved_head] were all added during last call to remember_new_clds(true); + ClassLoaderData* curr = _head; + while (curr != _saved_head) { + if (!curr->claimed()) { + array->push(curr); + + if (TraceClassLoaderData) { + tty->print("[ClassLoaderData] found new CLD: "); + curr->print_value_on(tty); + tty->cr(); + } + } + + curr = curr->_next; + } + + return array; +} + +#ifndef PRODUCT +// for debugging and hsfind(x) +bool ClassLoaderDataGraph::contains(address x) { + // I think we need the _metaspace_lock taken here because the class loader + // data graph could be changing while we are walking it (new entries added, + // new entries being unloaded, etc). + if (DumpSharedSpaces) { + // There are only two metaspaces to worry about. + ClassLoaderData* ncld = ClassLoaderData::the_null_class_loader_data(); + return (ncld->ro_metaspace()->contains(x) || ncld->rw_metaspace()->contains(x)); + } + + if (UseSharedSpaces && MetaspaceShared::is_in_shared_space(x)) { + return true; + } + + for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) { + if (cld->metaspace_or_null() != NULL && cld->metaspace_or_null()->contains(x)) { + return true; + } + } + + // Could also be on an unloading list which is okay, ie. still allocated + // for a little while. + for (ClassLoaderData* ucld = _unloading; ucld != NULL; ucld = ucld->next()) { + if (ucld->metaspace_or_null() != NULL && ucld->metaspace_or_null()->contains(x)) { + return true; + } + } + return false; +} + +bool ClassLoaderDataGraph::contains_loader_data(ClassLoaderData* loader_data) { + for (ClassLoaderData* data = _head; data != NULL; data = data->next()) { + if (loader_data == data) { + return true; + } + } + + return false; +} +#endif // PRODUCT + +// Move class loader data from main list to the unloaded list for unloading +// and deallocation later. +bool ClassLoaderDataGraph::do_unloading(BoolObjectClosure* is_alive) { + ClassLoaderData* data = _head; + ClassLoaderData* prev = NULL; + bool seen_dead_loader = false; + // mark metadata seen on the stack and code cache so we can delete + // unneeded entries. + bool has_redefined_a_class = JvmtiExport::has_redefined_a_class(); + MetadataOnStackMark md_on_stack; + while (data != NULL) { + if (data->class_loader() == NULL || is_alive->do_object_b(data->class_loader())) { + assert(data->claimed(), "class loader data must have been claimed"); + if (has_redefined_a_class) { + data->classes_do(InstanceKlass::purge_previous_versions); + } + data->free_deallocate_list(); + prev = data; + data = data->next(); + continue; + } + seen_dead_loader = true; + ClassLoaderData* dead = data; + dead->mark_for_unload(); + if (TraceClassLoaderData) { + tty->print("[ClassLoaderData: unload loader data "PTR_FORMAT, dead); + tty->print(" for instance "PTR_FORMAT" of ", dead->class_loader()); + dead->class_loader()->klass()->name()->print_symbol_on(tty); + tty->print_cr("]"); + } + data = data->next(); + // Remove from loader list. + if (prev != NULL) { + prev->set_next(data); + } else { + assert(dead == _head, "sanity check"); + _head = data; + } + dead->set_next(_unloading); + _unloading = dead; + } + return seen_dead_loader; +} + +void ClassLoaderDataGraph::purge() { + ClassLoaderData* list = _unloading; + _unloading = NULL; + ClassLoaderData* next = list; + while (next != NULL) { + ClassLoaderData* purge_me = next; + next = purge_me->next(); + delete purge_me; + } +} + +// CDS support + +// Global metaspaces for writing information to the shared archive. When +// application CDS is supported, we may need one per metaspace, so this +// sort of looks like it. +Metaspace* ClassLoaderData::_ro_metaspace = NULL; +Metaspace* ClassLoaderData::_rw_metaspace = NULL; +static bool _shared_metaspaces_initialized = false; + +// Initialize shared metaspaces (change to call from somewhere not lazily) +void ClassLoaderData::initialize_shared_metaspaces() { + assert(DumpSharedSpaces, "only use this for dumping shared spaces"); + assert(this == ClassLoaderData::the_null_class_loader_data(), + "only supported for null loader data for now"); + assert (!_shared_metaspaces_initialized, "only initialize once"); + MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag); + _ro_metaspace = new Metaspace(_metaspace_lock, SharedReadOnlySize/wordSize); + _rw_metaspace = new Metaspace(_metaspace_lock, SharedReadWriteSize/wordSize); + _shared_metaspaces_initialized = true; +} + +Metaspace* ClassLoaderData::ro_metaspace() { + assert(_ro_metaspace != NULL, "should already be initialized"); + return _ro_metaspace; +} + +Metaspace* ClassLoaderData::rw_metaspace() { + assert(_rw_metaspace != NULL, "should already be initialized"); + return _rw_metaspace; +} + + +ClassLoaderDataGraphMetaspaceIterator::ClassLoaderDataGraphMetaspaceIterator() { + _data = ClassLoaderDataGraph::_head; +} + +ClassLoaderDataGraphMetaspaceIterator::~ClassLoaderDataGraphMetaspaceIterator() {} + +#ifndef PRODUCT +// callable from debugger +extern "C" int print_loader_data_graph() { + ClassLoaderDataGraph::dump_on(tty); + return 0; +} + +void ClassLoaderDataGraph::verify() { + for (ClassLoaderData* data = _head; data != NULL; data = data->next()) { + data->verify(); + } +} + +void ClassLoaderDataGraph::dump_on(outputStream * const out) { + for (ClassLoaderData* data = _head; data != NULL; data = data->next()) { + data->dump(out); + } + MetaspaceAux::dump(out); +} + +void ClassLoaderData::print_value_on(outputStream* out) const { + if (class_loader() == NULL) { + out->print_cr("NULL class_loader"); + } else { + out->print("class loader "PTR_FORMAT, this); + class_loader()->print_value_on(out); + } +} +#endif // PRODUCT diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/classLoaderData.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/classfile/classLoaderData.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,257 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_CLASSFILE_CLASSLOADERDATA_HPP +#define SHARE_VM_CLASSFILE_CLASSLOADERDATA_HPP + +#include "memory/allocation.hpp" +#include "memory/memRegion.hpp" +#include "memory/metaspace.hpp" +#include "memory/metaspaceCounters.hpp" +#include "runtime/mutex.hpp" +#include "utilities/growableArray.hpp" + +// +// A class loader represents a linkset. Conceptually, a linkset identifies +// the complete transitive closure of resolved links that a dynamic linker can +// produce. +// +// A ClassLoaderData also encapsulates the allocation space, called a metaspace, +// used by the dynamic linker to allocate the runtime representation of all +// the types it defines. +// +// ClassLoaderData are stored in the runtime representation of classes and the +// system dictionary, are roots of garbage collection, and provides iterators +// for root tracing and other GC operations. + +class ClassLoaderData; +class JNIMethodBlock; +class JNIHandleBlock; +class Metadebug; +// GC root for walking class loader data created + +class ClassLoaderDataGraph : public AllStatic { + friend class ClassLoaderData; + friend class ClassLoaderDataGraphMetaspaceIterator; + friend class VMStructs; + private: + // All CLDs (except the null CLD) can be reached by walking _head->_next->... + static ClassLoaderData* _head; + static ClassLoaderData* _unloading; + // CMS support. + static ClassLoaderData* _saved_head; + + static ClassLoaderData* add(ClassLoaderData** loader_data_addr, Handle class_loader); + public: + static ClassLoaderData* find_or_create(Handle class_loader); + static void purge(); + static void clear_claimed_marks(); + static void oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim); + static void always_strong_oops_do(OopClosure* blk, KlassClosure* klass_closure, bool must_claim); + static void classes_do(KlassClosure* klass_closure); + static bool do_unloading(BoolObjectClosure* is_alive); + + // CMS support. + static void remember_new_clds(bool remember) { _saved_head = (remember ? _head : NULL); } + static GrowableArray* new_clds(); + + static void dump_on(outputStream * const out) PRODUCT_RETURN; + static void dump() { dump_on(tty); } + static void verify(); + +#ifndef PRODUCT + // expensive test for pointer in metaspace for debugging + static bool contains(address x); + static bool contains_loader_data(ClassLoaderData* loader_data); +#endif +}; + +// ClassLoaderData class + +class ClassLoaderData : public CHeapObj { + friend class VMStructs; + private: + friend class ClassLoaderDataGraph; + friend class ClassLoaderDataGraphMetaspaceIterator; + friend class MetaDataFactory; + friend class Method; + + static ClassLoaderData * _the_null_class_loader_data; + + oop _class_loader; // oop used to uniquely identify a class loader + // class loader or a canonical class path + Metaspace * _metaspace; // Meta-space where meta-data defined by the + // classes in the class loader are allocated. + Mutex* _metaspace_lock; // Locks the metaspace for allocations and setup. + bool _unloading; // true if this class loader goes away + volatile int _claimed; // true if claimed, for example during GC traces. + // To avoid applying oop closure more than once. + // Has to be an int because we cas it. + Klass* _klasses; // The classes defined by the class loader. + + JNIHandleBlock* _handles; // Handles to constant pool arrays + + // These method IDs are created for the class loader and set to NULL when the + // class loader is unloaded. They are rarely freed, only for redefine classes + // and if they lose a data race in InstanceKlass. + JNIMethodBlock* _jmethod_ids; + + // Metadata to be deallocated when it's safe at class unloading, when + // this class loader isn't unloaded itself. + GrowableArray* _deallocate_list; + + // Support for walking class loader data objects + ClassLoaderData* _next; /// Next loader_datas created + + // ReadOnly and ReadWrite metaspaces (static because only on the null + // class loader for now). + static Metaspace* _ro_metaspace; + static Metaspace* _rw_metaspace; + + bool has_dependency(ClassLoaderData* cld); + void add_dependency(ClassLoaderData* to_loader_data, TRAPS); + + void set_next(ClassLoaderData* next) { _next = next; } + ClassLoaderData* next() const { return _next; } + + ClassLoaderData(Handle h_class_loader); + ~ClassLoaderData(); + + void set_metaspace(Metaspace* m) { _metaspace = m; } + + JNIHandleBlock* handles() const; + void set_handles(JNIHandleBlock* handles); + + Mutex* metaspace_lock() const { return _metaspace_lock; } + + // GC interface. + void clear_claimed() { _claimed = 0; } + bool claimed() const { return _claimed == 1; } + bool claim(); + + void mark_for_unload() { _unloading = true; } + + void classes_do(void f(InstanceKlass*)); + + // Deallocate free list during class unloading. + void free_deallocate_list(); + + // Allocate out of this class loader data + MetaWord* allocate(size_t size); + + public: + // Accessors + Metaspace* metaspace_or_null() const { return _metaspace; } + + static ClassLoaderData* the_null_class_loader_data() { + return _the_null_class_loader_data; + } + + static void init_null_class_loader_data() { + assert(_the_null_class_loader_data == NULL, "cannot initialize twice"); + assert(ClassLoaderDataGraph::_head == NULL, "cannot initialize twice"); + _the_null_class_loader_data = new ClassLoaderData((oop)NULL); + ClassLoaderDataGraph::_head = _the_null_class_loader_data; + assert(_the_null_class_loader_data->is_the_null_class_loader_data(), "Must be"); + if (DumpSharedSpaces) { + _the_null_class_loader_data->initialize_shared_metaspaces(); + } + } + + bool is_the_null_class_loader_data() const { + return this == _the_null_class_loader_data; + } + + // The Metaspace is created lazily so may be NULL. This + // method will allocate a Metaspace if needed. + Metaspace* metaspace_non_null(); + + oop class_loader() const { return _class_loader; } + + // Returns true if this class loader data is for a loader going away. + bool is_unloading() const { + assert(!(is_the_null_class_loader_data() && _unloading), "The null class loader can never be unloaded"); + return _unloading; + } + + unsigned int identity_hash() { + return _class_loader == NULL ? 0 : _class_loader->identity_hash(); + } + + // Used when tracing from klasses. + void oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim); + + void classes_do(KlassClosure* klass_closure); + + bool has_defined(Klass* klass) { + for (Klass* k = _klasses; k != NULL; k = k->next_link()) { + if (klass == k) { + return true; + } + } + return false; + } + + JNIMethodBlock* jmethod_ids() const { return _jmethod_ids; } + void set_jmethod_ids(JNIMethodBlock* new_block) { _jmethod_ids = new_block; } + + void print_value() { print_value_on(tty); } + void print_value_on(outputStream* out) const PRODUCT_RETURN; + void dump(outputStream * const out) PRODUCT_RETURN; + void verify(); + + jobject add_handle(Handle h); + void add_class(Klass* k); + void remove_class(Klass* k); + void record_dependency(Klass* to, TRAPS); + + void add_to_deallocate_list(Metadata* m); + + static ClassLoaderData* class_loader_data(oop loader); + static void print_loader(ClassLoaderData *loader_data, outputStream *out); + + // CDS support + Metaspace* ro_metaspace(); + Metaspace* rw_metaspace(); + void initialize_shared_metaspaces(); +}; + +class ClassLoaderDataGraphMetaspaceIterator : public StackObj { + ClassLoaderData* _data; + public: + ClassLoaderDataGraphMetaspaceIterator(); + ~ClassLoaderDataGraphMetaspaceIterator(); + bool repeat() { return _data != NULL; } + Metaspace* get_next() { + assert(_data != NULL, "Should not be NULL in call to the iterator"); + Metaspace* result = _data->metaspace_or_null(); + _data = _data->next(); + // This result might be NULL for class loaders without metaspace + // yet. It would be nice to return only non-null results but + // there is no guarantee that there will be a non-null result + // down the list so the caller is going to have to check. + return result; + } +}; +#endif // SHARE_VM_CLASSFILE_CLASSLOADERDATA_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/classLoaderData.inline.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/classfile/classLoaderData.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "classfile/classLoaderData.hpp" +#include "classfile/javaClasses.hpp" + +inline ClassLoaderData* ClassLoaderData::class_loader_data(oop loader) { + if (loader == NULL) return ClassLoaderData::the_null_class_loader_data(); + ClassLoaderData* loader_data = java_lang_ClassLoader::loader_data(loader); + assert(loader_data != NULL, "Must be"); + return loader_data; +} + + +inline ClassLoaderData *ClassLoaderDataGraph::find_or_create(Handle loader) { + assert(loader() != NULL,"Must be a class loader"); + // Gets the class loader data out of the java/lang/ClassLoader object, if non-null + // it's already in the loader_data, so no need to add + ClassLoaderData** loader_data_addr = java_lang_ClassLoader::loader_data_addr(loader()); + ClassLoaderData* loader_data_id = *loader_data_addr; + if (loader_data_id) { + return loader_data_id; + } + return ClassLoaderDataGraph::add(loader_data_addr, loader); +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/dictionary.cpp --- a/src/share/vm/classfile/dictionary.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/dictionary.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -36,7 +36,7 @@ Dictionary::Dictionary(int table_size) - : TwoOopHashtable(table_size, sizeof(DictionaryEntry)) { + : TwoOopHashtable(table_size, sizeof(DictionaryEntry)) { _current_class_index = 0; _current_class_entry = NULL; }; @@ -45,26 +45,18 @@ Dictionary::Dictionary(int table_size, HashtableBucket* t, int number_of_entries) - : TwoOopHashtable(table_size, sizeof(DictionaryEntry), t, number_of_entries) { + : TwoOopHashtable(table_size, sizeof(DictionaryEntry), t, number_of_entries) { _current_class_index = 0; _current_class_entry = NULL; }; -DictionaryEntry* Dictionary::new_entry(unsigned int hash, klassOop klass, - oop loader) { - DictionaryEntry* entry; - entry = (DictionaryEntry*)Hashtable::new_entry(hash, klass); - entry->set_loader(loader); +DictionaryEntry* Dictionary::new_entry(unsigned int hash, Klass* klass, + ClassLoaderData* loader_data) { + DictionaryEntry* entry = (DictionaryEntry*)Hashtable::new_entry(hash, klass); + entry->set_loader_data(loader_data); entry->set_pd_set(NULL); - return entry; -} - - -DictionaryEntry* Dictionary::new_entry() { - DictionaryEntry* entry = (DictionaryEntry*)Hashtable::new_entry(0L, NULL); - entry->set_loader(NULL); - entry->set_pd_set(NULL); + assert(klass->oop_is_instance(), "Must be"); return entry; } @@ -76,13 +68,13 @@ entry->set_pd_set(to_delete->next()); delete to_delete; } - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } bool DictionaryEntry::contains_protection_domain(oop protection_domain) const { #ifdef ASSERT - if (protection_domain == instanceKlass::cast(klass())->protection_domain()) { + if (protection_domain == InstanceKlass::cast(klass())->protection_domain()) { // Ensure this doesn't show up in the pd_set (invariant) bool in_pd_set = false; for (ProtectionDomainEntry* current = _pd_set; @@ -100,7 +92,7 @@ } #endif /* ASSERT */ - if (protection_domain == instanceKlass::cast(klass())->protection_domain()) { + if (protection_domain == InstanceKlass::cast(klass())->protection_domain()) { // Succeeds trivially return true; } @@ -131,7 +123,7 @@ } -bool Dictionary::do_unloading(BoolObjectClosure* is_alive) { +bool Dictionary::do_unloading() { assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); bool class_was_unloaded = false; int index = 0; // Defined here for portability! Do not move @@ -142,111 +134,33 @@ for (index = 0; index < table_size(); index++) { for (DictionaryEntry** p = bucket_addr(index); *p != NULL; ) { probe = *p; - klassOop e = probe->klass(); - oop class_loader = probe->loader(); - - instanceKlass* ik = instanceKlass::cast(e); - if (ik->previous_versions() != NULL) { - // This klass has previous versions so see what we can cleanup - // while it is safe to do so. - - int gc_count = 0; // leave debugging breadcrumbs - int live_count = 0; - - // RC_TRACE macro has an embedded ResourceMark - RC_TRACE(0x00000200, ("unload: %s: previous version length=%d", - ik->external_name(), ik->previous_versions()->length())); - - for (int i = ik->previous_versions()->length() - 1; i >= 0; i--) { - // check the previous versions array for GC'ed weak refs - PreviousVersionNode * pv_node = ik->previous_versions()->at(i); - jobject cp_ref = pv_node->prev_constant_pool(); - assert(cp_ref != NULL, "cp ref was unexpectedly cleared"); - if (cp_ref == NULL) { - delete pv_node; - ik->previous_versions()->remove_at(i); - // Since we are traversing the array backwards, we don't have to - // do anything special with the index. - continue; // robustness - } + Klass* e = probe->klass(); + ClassLoaderData* loader_data = probe->loader_data(); - constantPoolOop pvcp = (constantPoolOop)JNIHandles::resolve(cp_ref); - if (pvcp == NULL) { - // this entry has been GC'ed so remove it - delete pv_node; - ik->previous_versions()->remove_at(i); - // Since we are traversing the array backwards, we don't have to - // do anything special with the index. - gc_count++; - continue; - } else { - RC_TRACE(0x00000200, ("unload: previous version @%d is alive", i)); - if (is_alive->do_object_b(pvcp)) { - live_count++; - } else { - guarantee(false, "sanity check"); - } - } - - GrowableArray* method_refs = pv_node->prev_EMCP_methods(); - if (method_refs != NULL) { - RC_TRACE(0x00000200, ("unload: previous methods length=%d", - method_refs->length())); - for (int j = method_refs->length() - 1; j >= 0; j--) { - jweak method_ref = method_refs->at(j); - assert(method_ref != NULL, "weak method ref was unexpectedly cleared"); - if (method_ref == NULL) { - method_refs->remove_at(j); - // Since we are traversing the array backwards, we don't have to - // do anything special with the index. - continue; // robustness - } - - methodOop method = (methodOop)JNIHandles::resolve(method_ref); - if (method == NULL) { - // this method entry has been GC'ed so remove it - JNIHandles::destroy_weak_global(method_ref); - method_refs->remove_at(j); - } else { - // RC_TRACE macro has an embedded ResourceMark - RC_TRACE(0x00000200, - ("unload: %s(%s): prev method @%d in version @%d is alive", - method->name()->as_C_string(), - method->signature()->as_C_string(), j, i)); - } - } - } - } - assert(ik->previous_versions()->length() == live_count, "sanity check"); - RC_TRACE(0x00000200, - ("unload: previous version stats: live=%d, GC'ed=%d", live_count, - gc_count)); - } + InstanceKlass* ik = InstanceKlass::cast(e); // Non-unloadable classes were handled in always_strong_oops_do - if (!is_strongly_reachable(class_loader, e)) { + if (!is_strongly_reachable(loader_data, e)) { // Entry was not visited in phase1 (negated test from phase1) - assert(class_loader != NULL, "unloading entry with null class loader"); - oop k_def_class_loader = ik->class_loader(); + assert(!loader_data->is_the_null_class_loader_data(), "unloading entry with null class loader"); + ClassLoaderData* k_def_class_loader_data = ik->class_loader_data(); // Do we need to delete this system dictionary entry? bool purge_entry = false; // Do we need to delete this system dictionary entry? - if (!is_alive->do_object_b(class_loader)) { + if (loader_data->is_unloading()) { // If the loader is not live this entry should always be // removed (will never be looked up again). Note that this is // not the same as unloading the referred class. - if (k_def_class_loader == class_loader) { + if (k_def_class_loader_data == loader_data) { // This is the defining entry, so the referred class is about // to be unloaded. // Notify the debugger and clean up the class. - guarantee(!is_alive->do_object_b(e), - "klass should not be live if defining loader is not"); class_was_unloaded = true; // notify the debugger if (JvmtiExport::should_post_class_unload()) { - JvmtiExport::post_class_unload(ik->as_klassOop()); + JvmtiExport::post_class_unload(ik); } // notify ClassLoadingService of class unload @@ -254,22 +168,21 @@ // Clean up C heap ik->release_C_heap_structures(); + ik->constants()->release_C_heap_structures(); } // Also remove this system dictionary entry. purge_entry = true; } else { // The loader in this entry is alive. If the klass is dead, + // (determined by checking the defining class loader) // the loader must be an initiating loader (rather than the // defining loader). Remove this entry. - if (!is_alive->do_object_b(e)) { - guarantee(!is_alive->do_object_b(k_def_class_loader), - "defining loader should not be live if klass is not"); - // If we get here, the class_loader must not be the defining + if (k_def_class_loader_data->is_unloading()) { + // If we get here, the class_loader_data must not be the defining // loader, it must be an initiating one. - assert(k_def_class_loader != class_loader, + assert(k_def_class_loader_data != loader_data, "cannot have live defining loader and unreachable klass"); - // Loader is live, but class and its defining loader are dead. // Remove the entry. The class is going away. purge_entry = true; @@ -292,19 +205,15 @@ } -void Dictionary::always_strong_classes_do(OopClosure* blk) { +void Dictionary::always_strong_oops_do(OopClosure* blk) { // Follow all system classes and temporary placeholders in dictionary for (int index = 0; index < table_size(); index++) { for (DictionaryEntry *probe = bucket(index); probe != NULL; probe = probe->next()) { - klassOop e = probe->klass(); - oop class_loader = probe->loader(); - if (is_strongly_reachable(class_loader, e)) { - blk->do_oop((oop*)probe->klass_addr()); - if (class_loader != NULL) { - blk->do_oop(probe->loader_addr()); - } + Klass* e = probe->klass(); + ClassLoaderData* loader_data = probe->loader_data(); + if (is_strongly_reachable(loader_data, e)) { probe->protection_domain_set_oops_do(blk); } } @@ -312,14 +221,30 @@ } -// Just the classes from defining class loaders -void Dictionary::classes_do(void f(klassOop)) { +void Dictionary::always_strong_classes_do(KlassClosure* closure) { + // Follow all system classes and temporary placeholders in dictionary for (int index = 0; index < table_size(); index++) { for (DictionaryEntry* probe = bucket(index); probe != NULL; probe = probe->next()) { - klassOop k = probe->klass(); - if (probe->loader() == instanceKlass::cast(k)->class_loader()) { + Klass* e = probe->klass(); + ClassLoaderData* loader_data = probe->loader_data(); + if (is_strongly_reachable(loader_data, e)) { + closure->do_klass(e); + } + } + } +} + + +// Just the classes from defining class loaders +void Dictionary::classes_do(void f(Klass*)) { + for (int index = 0; index < table_size(); index++) { + for (DictionaryEntry* probe = bucket(index); + probe != NULL; + probe = probe->next()) { + Klass* k = probe->klass(); + if (probe->loader_data() == InstanceKlass::cast(k)->class_loader_data()) { f(k); } } @@ -328,13 +253,13 @@ // Added for initialize_itable_for_klass to handle exceptions // Just the classes from defining class loaders -void Dictionary::classes_do(void f(klassOop, TRAPS), TRAPS) { +void Dictionary::classes_do(void f(Klass*, TRAPS), TRAPS) { for (int index = 0; index < table_size(); index++) { for (DictionaryEntry* probe = bucket(index); probe != NULL; probe = probe->next()) { - klassOop k = probe->klass(); - if (probe->loader() == instanceKlass::cast(k)->class_loader()) { + Klass* k = probe->klass(); + if (probe->loader_data() == InstanceKlass::cast(k)->class_loader_data()) { f(k, CHECK); } } @@ -345,13 +270,13 @@ // All classes, and their class loaders // (added for helpers that use HandleMarks and ResourceMarks) // Don't iterate over placeholders -void Dictionary::classes_do(void f(klassOop, oop, TRAPS), TRAPS) { +void Dictionary::classes_do(void f(Klass*, ClassLoaderData*, TRAPS), TRAPS) { for (int index = 0; index < table_size(); index++) { for (DictionaryEntry* probe = bucket(index); probe != NULL; probe = probe->next()) { - klassOop k = probe->klass(); - f(k, probe->loader(), CHECK); + Klass* k = probe->klass(); + f(k, probe->loader_data(), CHECK); } } } @@ -359,13 +284,13 @@ // All classes, and their class loaders // Don't iterate over placeholders -void Dictionary::classes_do(void f(klassOop, oop)) { +void Dictionary::classes_do(void f(Klass*, ClassLoaderData*)) { for (int index = 0; index < table_size(); index++) { for (DictionaryEntry* probe = bucket(index); probe != NULL; probe = probe->next()) { - klassOop k = probe->klass(); - f(k, probe->loader()); + Klass* k = probe->klass(); + f(k, probe->loader_data()); } } } @@ -376,35 +301,31 @@ for (DictionaryEntry* probe = bucket(index); probe != NULL; probe = probe->next()) { - f->do_oop((oop*)probe->klass_addr()); - if (probe->loader() != NULL) { - f->do_oop(probe->loader_addr()); - } probe->protection_domain_set_oops_do(f); } } } -void Dictionary::methods_do(void f(methodOop)) { +void Dictionary::methods_do(void f(Method*)) { for (int index = 0; index < table_size(); index++) { for (DictionaryEntry* probe = bucket(index); probe != NULL; probe = probe->next()) { - klassOop k = probe->klass(); - if (probe->loader() == instanceKlass::cast(k)->class_loader()) { + Klass* k = probe->klass(); + if (probe->loader_data() == InstanceKlass::cast(k)->class_loader_data()) { // only take klass is we have the entry with the defining class loader - instanceKlass::cast(k)->methods_do(f); + InstanceKlass::cast(k)->methods_do(f); } } } } -klassOop Dictionary::try_get_next_class() { +Klass* Dictionary::try_get_next_class() { while (true) { if (_current_class_entry != NULL) { - klassOop k = _current_class_entry->klass(); + Klass* k = _current_class_entry->klass(); _current_class_entry = _current_class_entry->next(); return k; } @@ -421,15 +342,15 @@ // also cast to volatile; we do this to ensure store order is maintained // by the compilers. -void Dictionary::add_klass(Symbol* class_name, Handle class_loader, +void Dictionary::add_klass(Symbol* class_name, ClassLoaderData* loader_data, KlassHandle obj) { assert_locked_or_safepoint(SystemDictionary_lock); assert(obj() != NULL, "adding NULL obj"); assert(Klass::cast(obj())->name() == class_name, "sanity check on name"); - unsigned int hash = compute_hash(class_name, class_loader); + unsigned int hash = compute_hash(class_name, loader_data); int index = hash_to_index(hash); - DictionaryEntry* entry = new_entry(hash, obj(), class_loader()); + DictionaryEntry* entry = new_entry(hash, obj(), loader_data); add_entry(index, entry); } @@ -445,13 +366,12 @@ // _buckets[index] is read here, so the caller will not see the new entry. DictionaryEntry* Dictionary::get_entry(int index, unsigned int hash, Symbol* class_name, - Handle class_loader) { - oop loader = class_loader(); + ClassLoaderData* loader_data) { debug_only(_lookup_count++); for (DictionaryEntry* entry = bucket(index); entry != NULL; entry = entry->next()) { - if (entry->hash() == hash && entry->equals(class_name, loader)) { + if (entry->hash() == hash && entry->equals(class_name, loader_data)) { return entry; } debug_only(_lookup_length++); @@ -460,9 +380,9 @@ } -klassOop Dictionary::find(int index, unsigned int hash, Symbol* name, - Handle loader, Handle protection_domain, TRAPS) { - DictionaryEntry* entry = get_entry(index, hash, name, loader); +Klass* Dictionary::find(int index, unsigned int hash, Symbol* name, + ClassLoaderData* loader_data, Handle protection_domain, TRAPS) { + DictionaryEntry* entry = get_entry(index, hash, name, loader_data); if (entry != NULL && entry->is_valid_protection_domain(protection_domain)) { return entry->klass(); } else { @@ -471,34 +391,34 @@ } -klassOop Dictionary::find_class(int index, unsigned int hash, - Symbol* name, Handle loader) { +Klass* Dictionary::find_class(int index, unsigned int hash, + Symbol* name, ClassLoaderData* loader_data) { assert_locked_or_safepoint(SystemDictionary_lock); - assert (index == index_for(name, loader), "incorrect index?"); + assert (index == index_for(name, loader_data), "incorrect index?"); - DictionaryEntry* entry = get_entry(index, hash, name, loader); - return (entry != NULL) ? entry->klass() : (klassOop)NULL; + DictionaryEntry* entry = get_entry(index, hash, name, loader_data); + return (entry != NULL) ? entry->klass() : (Klass*)NULL; } // Variant of find_class for shared classes. No locking required, as // that table is static. -klassOop Dictionary::find_shared_class(int index, unsigned int hash, +Klass* Dictionary::find_shared_class(int index, unsigned int hash, Symbol* name) { - assert (index == index_for(name, Handle()), "incorrect index?"); + assert (index == index_for(name, NULL), "incorrect index?"); - DictionaryEntry* entry = get_entry(index, hash, name, Handle()); - return (entry != NULL) ? entry->klass() : (klassOop)NULL; + DictionaryEntry* entry = get_entry(index, hash, name, NULL); + return (entry != NULL) ? entry->klass() : (Klass*)NULL; } void Dictionary::add_protection_domain(int index, unsigned int hash, instanceKlassHandle klass, - Handle loader, Handle protection_domain, + ClassLoaderData* loader_data, Handle protection_domain, TRAPS) { Symbol* klass_name = klass->name(); - DictionaryEntry* entry = get_entry(index, hash, klass_name, loader); + DictionaryEntry* entry = get_entry(index, hash, klass_name, loader_data); assert(entry != NULL,"entry must be present, we just created it"); assert(protection_domain() != NULL, @@ -513,9 +433,9 @@ bool Dictionary::is_valid_protection_domain(int index, unsigned int hash, Symbol* name, - Handle loader, + ClassLoaderData* loader_data, Handle protection_domain) { - DictionaryEntry* entry = get_entry(index, hash, name, loader); + DictionaryEntry* entry = get_entry(index, hash, name, loader_data); return entry->is_valid_protection_domain(protection_domain); } @@ -538,16 +458,17 @@ } // Add the dictionary entries back to the list in the correct buckets. - Thread *thread = Thread::current(); - while (master_list != NULL) { DictionaryEntry* p = master_list; master_list = master_list->next(); p->set_next(NULL); - Symbol* class_name = instanceKlass::cast((klassOop)(p->klass()))->name(); - unsigned int hash = compute_hash(class_name, Handle(thread, p->loader())); + Symbol* class_name = InstanceKlass::cast((Klass*)(p->klass()))->name(); + // Since the null class loader data isn't copied to the CDS archive, + // compute the hash with NULL for loader data. + unsigned int hash = compute_hash(class_name, NULL); int index = hash_to_index(hash); p->set_hash(hash); + p->set_loader_data(NULL); // loader_data isn't copied to CDS p->set_next(bucket(index)); set_entry(index, p); } @@ -588,23 +509,22 @@ return p; } - void SymbolPropertyTable::oops_do(OopClosure* f) { for (int index = 0; index < table_size(); index++) { for (SymbolPropertyEntry* p = bucket(index); p != NULL; p = p->next()) { - if (p->property_oop() != NULL) { - f->do_oop(p->property_oop_addr()); + if (p->method_type() != NULL) { + f->do_oop(p->method_type_addr()); } } } } -void SymbolPropertyTable::methods_do(void f(methodOop)) { +void SymbolPropertyTable::methods_do(void f(Method*)) { for (int index = 0; index < table_size(); index++) { for (SymbolPropertyEntry* p = bucket(index); p != NULL; p = p->next()) { - oop prop = p->property_oop(); - if (prop != NULL && prop->is_method()) { - f((methodOop)prop); + Method* prop = p->method(); + if (prop != NULL) { + f((Method*)prop); } } } @@ -628,16 +548,15 @@ probe != NULL; probe = probe->next()) { if (Verbose) tty->print("%4d: ", index); - klassOop e = probe->klass(); - oop class_loader = probe->loader(); + Klass* e = probe->klass(); + ClassLoaderData* loader_data = probe->loader_data(); bool is_defining_class = - (class_loader == instanceKlass::cast(e)->class_loader()); + (loader_data == InstanceKlass::cast(e)->class_loader_data()); tty->print("%s%s", is_defining_class ? " " : "^", Klass::cast(e)->external_name()); - if (class_loader != NULL) { + tty->print(", loader "); - class_loader->print_value(); - } + loader_data->print_value(); tty->cr(); } } @@ -645,20 +564,24 @@ #endif + void Dictionary::verify() { guarantee(number_of_entries() >= 0, "Verify of system dictionary failed"); + int element_count = 0; for (int index = 0; index < table_size(); index++) { for (DictionaryEntry* probe = bucket(index); probe != NULL; probe = probe->next()) { - klassOop e = probe->klass(); - oop class_loader = probe->loader(); + Klass* e = probe->klass(); + ClassLoaderData* loader_data = probe->loader_data(); guarantee(Klass::cast(e)->oop_is_instance(), "Verify of system dictionary failed"); // class loader must be present; a null class loader is the // boostrap loader - guarantee(class_loader == NULL || class_loader->is_instance(), + guarantee(loader_data != NULL || DumpSharedSpaces || + loader_data->is_the_null_class_loader_data() || + loader_data->class_loader()->is_instance(), "checking type of class_loader"); e->verify(); probe->verify_protection_domain_set(); @@ -669,3 +592,4 @@ "Verify of system dictionary failed"); debug_only(verify_lookup_length((double)number_of_entries() / table_size())); } + diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/dictionary.hpp --- a/src/share/vm/classfile/dictionary.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/dictionary.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,12 +31,13 @@ #include "utilities/hashtable.hpp" class DictionaryEntry; +class PSPromotionManager; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // The data structure for the system dictionary (and the shared system // dictionary). -class Dictionary : public TwoOopHashtable { +class Dictionary : public TwoOopHashtable { friend class VMStructs; private: // current iteration index. @@ -45,78 +46,77 @@ static DictionaryEntry* _current_class_entry; DictionaryEntry* get_entry(int index, unsigned int hash, - Symbol* name, Handle loader); + Symbol* name, ClassLoaderData* loader_data); DictionaryEntry* bucket(int i) { - return (DictionaryEntry*)Hashtable::bucket(i); + return (DictionaryEntry*)Hashtable::bucket(i); } // The following method is not MT-safe and must be done under lock. DictionaryEntry** bucket_addr(int i) { - return (DictionaryEntry**)Hashtable::bucket_addr(i); + return (DictionaryEntry**)Hashtable::bucket_addr(i); } void add_entry(int index, DictionaryEntry* new_entry) { - Hashtable::add_entry(index, (HashtableEntry*)new_entry); + Hashtable::add_entry(index, (HashtableEntry*)new_entry); } - public: Dictionary(int table_size); Dictionary(int table_size, HashtableBucket* t, int number_of_entries); - DictionaryEntry* new_entry(unsigned int hash, klassOop klass, oop loader); + DictionaryEntry* new_entry(unsigned int hash, Klass* klass, ClassLoaderData* loader_data); DictionaryEntry* new_entry(); void free_entry(DictionaryEntry* entry); - void add_klass(Symbol* class_name, Handle class_loader,KlassHandle obj); + void add_klass(Symbol* class_name, ClassLoaderData* loader_data,KlassHandle obj); - klassOop find_class(int index, unsigned int hash, - Symbol* name, Handle loader); + Klass* find_class(int index, unsigned int hash, + Symbol* name, ClassLoaderData* loader_data); - klassOop find_shared_class(int index, unsigned int hash, Symbol* name); + Klass* find_shared_class(int index, unsigned int hash, Symbol* name); // Compiler support - klassOop try_get_next_class(); + Klass* try_get_next_class(); // GC support + void oops_do(OopClosure* f); + void always_strong_oops_do(OopClosure* blk); - void oops_do(OopClosure* f); - void always_strong_classes_do(OopClosure* blk); - void classes_do(void f(klassOop)); - void classes_do(void f(klassOop, TRAPS), TRAPS); - void classes_do(void f(klassOop, oop)); - void classes_do(void f(klassOop, oop, TRAPS), TRAPS); + void always_strong_classes_do(KlassClosure* closure); - void methods_do(void f(methodOop)); + void classes_do(void f(Klass*)); + void classes_do(void f(Klass*, TRAPS), TRAPS); + void classes_do(void f(Klass*, ClassLoaderData*)); + void classes_do(void f(Klass*, ClassLoaderData*, TRAPS), TRAPS); + + void methods_do(void f(Method*)); // Classes loaded by the bootstrap loader are always strongly reachable. // If we're not doing class unloading, all classes are strongly reachable. - static bool is_strongly_reachable(oop class_loader, klassOop klass) { + static bool is_strongly_reachable(ClassLoaderData* loader_data, Klass* klass) { assert (klass != NULL, "should have non-null klass"); - return (class_loader == NULL || !ClassUnloading); + return (loader_data->is_the_null_class_loader_data() || !ClassUnloading); } // Unload (that is, break root links to) all unmarked classes and // loaders. Returns "true" iff something was unloaded. - bool do_unloading(BoolObjectClosure* is_alive); + bool do_unloading(); // Protection domains - klassOop find(int index, unsigned int hash, Symbol* name, - Handle loader, Handle protection_domain, TRAPS); + Klass* find(int index, unsigned int hash, Symbol* name, + ClassLoaderData* loader_data, Handle protection_domain, TRAPS); bool is_valid_protection_domain(int index, unsigned int hash, - Symbol* name, Handle class_loader, + Symbol* name, ClassLoaderData* loader_data, Handle protection_domain); void add_protection_domain(int index, unsigned int hash, - instanceKlassHandle klass, Handle loader, + instanceKlassHandle klass, ClassLoaderData* loader_data, Handle protection_domain, TRAPS); // Sharing support - void dump(SerializeOopClosure* soc); - void restore(SerializeOopClosure* soc); void reorder_dictionary(); @@ -145,16 +145,15 @@ }; // An entry in the system dictionary, this describes a class as -// { klassOop, loader, protection_domain }. +// { Klass*, loader, protection_domain }. -class DictionaryEntry : public HashtableEntry { +class DictionaryEntry : public HashtableEntry { friend class VMStructs; private: // Contains the set of approved protection domains that can access // this system dictionary entry. ProtectionDomainEntry* _pd_set; - oop _loader; - + ClassLoaderData* _loader_data; public: // Tells whether a protection is in the approved set. @@ -162,20 +161,19 @@ // Adds a protection domain to the approved set. void add_protection_domain(oop protection_domain); - klassOop klass() const { return (klassOop)literal(); } - klassOop* klass_addr() { return (klassOop*)literal_addr(); } + Klass* klass() const { return (Klass*)literal(); } + Klass** klass_addr() { return (Klass**)literal_addr(); } DictionaryEntry* next() const { - return (DictionaryEntry*)HashtableEntry::next(); + return (DictionaryEntry*)HashtableEntry::next(); } DictionaryEntry** next_addr() { - return (DictionaryEntry**)HashtableEntry::next_addr(); + return (DictionaryEntry**)HashtableEntry::next_addr(); } - oop loader() const { return _loader; } - void set_loader(oop loader) { _loader = loader; } - oop* loader_addr() { return &_loader; } + ClassLoaderData* loader_data() const { return _loader_data; } + void set_loader_data(ClassLoaderData* loader_data) { _loader_data = loader_data; } ProtectionDomainEntry* pd_set() const { return _pd_set; } void set_pd_set(ProtectionDomainEntry* pd_set) { _pd_set = pd_set; } @@ -209,10 +207,10 @@ } } - bool equals(Symbol* class_name, oop class_loader) const { - klassOop klass = (klassOop)literal(); - return (instanceKlass::cast(klass)->name() == class_name && - _loader == class_loader); + bool equals(Symbol* class_name, ClassLoaderData* loader_data) const { + Klass* klass = (Klass*)literal(); + return (InstanceKlass::cast(klass)->name() == class_name && + _loader_data == loader_data); } void print() { @@ -232,8 +230,8 @@ friend class VMStructs; private: intptr_t _symbol_mode; // secondary key - oop _property_oop; - address _property_data; + Method* _method; + oop _method_type; public: Symbol* symbol() const { return literal(); } @@ -241,11 +239,12 @@ intptr_t symbol_mode() const { return _symbol_mode; } void set_symbol_mode(intptr_t m) { _symbol_mode = m; } - oop property_oop() const { return _property_oop; } - void set_property_oop(oop p) { _property_oop = p; } + Method* method() const { return _method; } + void set_method(Method* p) { _method = p; } - address property_data() const { return _property_data; } - void set_property_data(address p) { _property_data = p; } + oop method_type() const { return _method_type; } + oop* method_type_addr() { return &_method_type; } + void set_method_type(oop p) { _method_type = p; } SymbolPropertyEntry* next() const { return (SymbolPropertyEntry*)HashtableEntry::next(); @@ -255,20 +254,18 @@ return (SymbolPropertyEntry**)HashtableEntry::next_addr(); } - oop* property_oop_addr() { return &_property_oop; } - void print_on(outputStream* st) const { symbol()->print_value_on(st); st->print("/mode="INTX_FORMAT, symbol_mode()); st->print(" -> "); bool printed = false; - if (property_oop() != NULL) { - property_oop()->print_value_on(st); + if (method() != NULL) { + method()->print_value_on(st); printed = true; } - if (property_data() != NULL) { + if (method_type() != NULL) { if (printed) st->print(" and "); - st->print(INTPTR_FORMAT, property_data()); + st->print(INTPTR_FORMAT, method_type()); printed = true; } st->print_cr(printed ? "" : "(empty)"); @@ -302,8 +299,8 @@ // Hashtable with Symbol* literal must increment and decrement refcount. symbol->increment_refcount(); entry->set_symbol_mode(symbol_mode); - entry->set_property_oop(NULL); - entry->set_property_data(NULL); + entry->set_method(NULL); + entry->set_method_type(NULL); return entry; } @@ -334,11 +331,10 @@ // GC support void oops_do(OopClosure* f); - void methods_do(void f(methodOop)); + + void methods_do(void f(Method*)); // Sharing support - void dump(SerializeOopClosure* soc); - void restore(SerializeOopClosure* soc); void reorder_dictionary(); #ifndef PRODUCT diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/javaAssertions.cpp --- a/src/share/vm/classfile/javaAssertions.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/javaAssertions.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -94,7 +94,7 @@ oop JavaAssertions::createAssertionStatusDirectives(TRAPS) { Symbol* asd_sym = vmSymbols::java_lang_AssertionStatusDirectives(); - klassOop k = SystemDictionary::resolve_or_fail(asd_sym, true, CHECK_NULL); + Klass* k = SystemDictionary::resolve_or_fail(asd_sym, true, CHECK_NULL); instanceKlassHandle asd_klass (THREAD, k); asd_klass->initialize(CHECK_NULL); Handle h = asd_klass->allocate_instance_handle(CHECK_NULL); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/javaClasses.cpp --- a/src/share/vm/classfile/javaClasses.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/javaClasses.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -38,8 +38,7 @@ #include "oops/instanceKlass.hpp" #include "oops/instanceMirrorKlass.hpp" #include "oops/klass.hpp" -#include "oops/klassOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/symbol.hpp" #include "oops/typeArrayOop.hpp" #include "runtime/fieldDescriptor.hpp" @@ -106,7 +105,7 @@ } -static bool find_field(instanceKlass* ik, +static bool find_field(InstanceKlass* ik, Symbol* name_symbol, Symbol* signature_symbol, fieldDescriptor* fd, bool allow_super = false) { @@ -119,17 +118,17 @@ // Helpful routine for computing field offsets at run time rather than hardcoding them static void compute_offset(int &dest_offset, - klassOop klass_oop, Symbol* name_symbol, Symbol* signature_symbol, + Klass* klass_oop, Symbol* name_symbol, Symbol* signature_symbol, bool allow_super = false) { fieldDescriptor fd; - instanceKlass* ik = instanceKlass::cast(klass_oop); + InstanceKlass* ik = InstanceKlass::cast(klass_oop); if (!find_field(ik, name_symbol, signature_symbol, &fd, allow_super)) { ResourceMark rm; tty->print_cr("Invalid layout of %s at %s", ik->external_name(), name_symbol->as_C_string()); #ifndef PRODUCT klass_oop->print(); tty->print_cr("all fields:"); - for (AllFieldStream fs(instanceKlass::cast(klass_oop)); !fs.done(); fs.next()) { + for (AllFieldStream fs(InstanceKlass::cast(klass_oop)); !fs.done(); fs.next()) { tty->print_cr(" name: %s, sig: %s, flags: %08x", fs.name()->as_C_string(), fs.signature()->as_C_string(), fs.access_flags().as_int()); } #endif //PRODUCT @@ -141,10 +140,10 @@ // Same as above but for "optional" offsets that might not be present in certain JDK versions static void compute_optional_offset(int& dest_offset, - klassOop klass_oop, Symbol* name_symbol, Symbol* signature_symbol, + Klass* klass_oop, Symbol* name_symbol, Symbol* signature_symbol, bool allow_super = false) { fieldDescriptor fd; - instanceKlass* ik = instanceKlass::cast(klass_oop); + InstanceKlass* ik = InstanceKlass::cast(klass_oop); if (find_field(ik, name_symbol, signature_symbol, &fd, allow_super)) { dest_offset = fd.offset(); } @@ -161,7 +160,7 @@ void java_lang_String::compute_offsets() { assert(!initialized, "offsets should be initialized only once"); - klassOop k = SystemDictionary::String_klass(); + Klass* k = SystemDictionary::String_klass(); compute_offset(value_offset, k, vmSymbols::value_name(), vmSymbols::char_array_signature()); compute_optional_offset(offset_offset, k, vmSymbols::offset_name(), vmSymbols::int_signature()); compute_optional_offset(count_offset, k, vmSymbols::count_name(), vmSymbols::int_signature()); @@ -170,26 +169,18 @@ initialized = true; } -Handle java_lang_String::basic_create(int length, bool tenured, TRAPS) { +Handle java_lang_String::basic_create(int length, TRAPS) { assert(initialized, "Must be initialized"); // Create the String object first, so there's a chance that the String // and the char array it points to end up in the same cache line. oop obj; - if (tenured) { - obj = instanceKlass::cast(SystemDictionary::String_klass())->allocate_permanent_instance(CHECK_NH); - } else { - obj = instanceKlass::cast(SystemDictionary::String_klass())->allocate_instance(CHECK_NH); - } + obj = InstanceKlass::cast(SystemDictionary::String_klass())->allocate_instance(CHECK_NH); // Create the char array. The String object must be handlized here // because GC can happen as a result of the allocation attempt. Handle h_obj(THREAD, obj); typeArrayOop buffer; - if (tenured) { - buffer = oopFactory::new_permanent_charArray(length, CHECK_NH); - } else { buffer = oopFactory::new_charArray(length, CHECK_NH); - } // Point the String at the char array obj = h_obj(); @@ -202,8 +193,8 @@ return h_obj; } -Handle java_lang_String::basic_create_from_unicode(jchar* unicode, int length, bool tenured, TRAPS) { - Handle h_obj = basic_create(length, tenured, CHECK_NH); +Handle java_lang_String::create_from_unicode(jchar* unicode, int length, TRAPS) { + Handle h_obj = basic_create(length, CHECK_NH); typeArrayOop buffer = value(h_obj()); for (int index = 0; index < length; index++) { buffer->char_at_put(index, unicode[index]); @@ -211,16 +202,8 @@ return h_obj; } -Handle java_lang_String::create_from_unicode(jchar* unicode, int length, TRAPS) { - return basic_create_from_unicode(unicode, length, false, CHECK_NH); -} - -Handle java_lang_String::create_tenured_from_unicode(jchar* unicode, int length, TRAPS) { - return basic_create_from_unicode(unicode, length, JavaObjectsInPerm, CHECK_NH); -} - oop java_lang_String::create_oop_from_unicode(jchar* unicode, int length, TRAPS) { - Handle h_obj = basic_create_from_unicode(unicode, length, false, CHECK_0); + Handle h_obj = create_from_unicode(unicode, length, CHECK_0); return h_obj(); } @@ -229,7 +212,7 @@ return Handle(); } int length = UTF8::unicode_length(utf8_str); - Handle h_obj = basic_create(length, false, CHECK_NH); + Handle h_obj = basic_create(length, CHECK_NH); if (length > 0) { UTF8::convert_to_unicode(utf8_str, value(h_obj())->char_at_addr(0), length); } @@ -243,7 +226,7 @@ Handle java_lang_String::create_from_symbol(Symbol* symbol, TRAPS) { int length = UTF8::unicode_length((char*)symbol->bytes(), symbol->utf8_length()); - Handle h_obj = basic_create(length, false, CHECK_NH); + Handle h_obj = basic_create(length, CHECK_NH); if (length > 0) { UTF8::convert_to_unicode((char*)symbol->bytes(), value(h_obj())->char_at_addr(0), length); } @@ -327,7 +310,7 @@ // Create new UNICODE buffer. Must handlize value because GC // may happen during String and char array creation. typeArrayHandle h_value(THREAD, value); - Handle string = basic_create(length, false, CHECK_NH); + Handle string = basic_create(length, CHECK_NH); typeArrayOop from_buffer = h_value(); typeArrayOop to_buffer = java_lang_String::value(string()); @@ -519,17 +502,20 @@ void java_lang_Class::fixup_mirror(KlassHandle k, TRAPS) { assert(instanceMirrorKlass::offset_of_static_fields() != 0, "must have been computed already"); + // If the offset was read from the shared archive, it was fixed up already + if (!k->is_shared()) { if (k->oop_is_instance()) { // During bootstrap, java.lang.Class wasn't loaded so static field // offsets were computed without the size added it. Go back and // update all the static field offsets to included the size. - for (JavaFieldStream fs(instanceKlass::cast(k())); !fs.done(); fs.next()) { + for (JavaFieldStream fs(InstanceKlass::cast(k())); !fs.done(); fs.next()) { if (fs.access_flags().is_static()) { int real_offset = fs.offset() + instanceMirrorKlass::offset_of_static_fields(); fs.set_offset(real_offset); } } } + } create_mirror(k, CHECK); } @@ -541,7 +527,9 @@ // class is put into the system dictionary. int computed_modifiers = k->compute_modifier_flags(CHECK_0); k->set_modifier_flags(computed_modifiers); - if (SystemDictionary::Class_klass_loaded() && (k->oop_is_instance() || k->oop_is_javaArray())) { + // Class_klass has to be loaded because it is used to allocate + // the mirror. + if (SystemDictionary::Class_klass_loaded()) { // Allocate mirror (java.lang.Class instance) Handle mirror = instanceMirrorKlass::cast(SystemDictionary::Class_klass())->allocate_instance(k, CHECK_0); @@ -549,33 +537,35 @@ java_lang_Class::set_static_oop_field_count(mirror(), mk->compute_static_oop_field_count(mirror())); // It might also have a component mirror. This mirror must already exist. - if (k->oop_is_javaArray()) { + if (k->oop_is_array()) { Handle comp_mirror; if (k->oop_is_typeArray()) { - BasicType type = typeArrayKlass::cast(k->as_klassOop())->element_type(); + BasicType type = typeArrayKlass::cast(k())->element_type(); comp_mirror = Universe::java_mirror(type); - assert(comp_mirror.not_null(), "must have primitive mirror"); - } else if (k->oop_is_objArray()) { - klassOop element_klass = objArrayKlass::cast(k->as_klassOop())->element_klass(); - if (element_klass != NULL - && (Klass::cast(element_klass)->oop_is_instance() || - Klass::cast(element_klass)->oop_is_javaArray())) { + } else { + assert(k->oop_is_objArray(), "Must be"); + Klass* element_klass = objArrayKlass::cast(k())->element_klass(); + assert(element_klass != NULL, "Must have an element klass"); comp_mirror = Klass::cast(element_klass)->java_mirror(); - assert(comp_mirror.not_null(), "must have element mirror"); - } - // else some object array internal to the VM, like systemObjArrayKlassObj } - if (comp_mirror.not_null()) { + assert(comp_mirror.not_null(), "must have a mirror"); + // Two-way link between the array klass and its component mirror: - arrayKlass::cast(k->as_klassOop())->set_component_mirror(comp_mirror()); - set_array_klass(comp_mirror(), k->as_klassOop()); - } - } else if (k->oop_is_instance()) { + arrayKlass::cast(k())->set_component_mirror(comp_mirror()); + set_array_klass(comp_mirror(), k()); + } else { + assert(k->oop_is_instance(), "Must be"); // Initialize static fields - instanceKlass::cast(k())->do_local_static_fields(&initialize_static_field, CHECK_NULL); + InstanceKlass::cast(k())->do_local_static_fields(&initialize_static_field, CHECK_NULL); } return mirror(); } else { + if (fixup_mirror_list() == NULL) { + GrowableArray* list = + new (ResourceObj::C_HEAP, mtClass) GrowableArray(40, true); + set_fixup_mirror_list(list); + } + fixup_mirror_list()->push(k()); return NULL; } } @@ -602,9 +592,9 @@ oop java_lang_Class::create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS) { // This should be improved by adding a field at the Java level or by // introducing a new VM klass (see comment in ClassFileParser) - oop java_class = instanceMirrorKlass::cast(SystemDictionary::Class_klass())->allocate_instance((oop)NULL, CHECK_0); + oop java_class = instanceMirrorKlass::cast(SystemDictionary::Class_klass())->allocate_instance(NULL, CHECK_0); if (type != T_VOID) { - klassOop aklass = Universe::typeArrayKlassObj(type); + Klass* aklass = Universe::typeArrayKlassObj(type); assert(aklass != NULL, "correct bootstrap"); set_array_klass(java_class, aklass); } @@ -616,18 +606,18 @@ } -klassOop java_lang_Class::as_klassOop(oop java_class) { +Klass* java_lang_Class::as_Klass(oop java_class) { //%note memory_2 assert(java_lang_Class::is_instance(java_class), "must be a Class object"); - klassOop k = klassOop(java_class->obj_field(_klass_offset)); + Klass* k = ((Klass*)java_class->metadata_field(_klass_offset)); assert(k == NULL || k->is_klass(), "type check"); return k; } -void java_lang_Class::set_klass(oop java_class, klassOop klass) { +void java_lang_Class::set_klass(oop java_class, Klass* klass) { assert(java_lang_Class::is_instance(java_class), "must be a Class object"); - java_class->obj_field_put(_klass_offset, klass); + java_class->metadata_field_put(_klass_offset, klass); } @@ -638,7 +628,7 @@ if (is_primitive(java_class)) { name = vmSymbols::type_signature(primitive_type(java_class)); } else { - klassOop k = as_klassOop(java_class); + Klass* k = as_Klass(java_class); is_instance = Klass::cast(k)->oop_is_instance(); name = Klass::cast(k)->name(); } @@ -661,7 +651,7 @@ // that are not created or incremented due to a successful lookup. name->increment_refcount(); } else { - klassOop k = as_klassOop(java_class); + Klass* k = as_Klass(java_class); if (!Klass::cast(k)->oop_is_instance()) { name = Klass::cast(k)->name(); name->increment_refcount(); @@ -680,43 +670,52 @@ } -klassOop java_lang_Class::array_klass(oop java_class) { - klassOop k = klassOop(java_class->obj_field(_array_klass_offset)); - assert(k == NULL || k->is_klass() && Klass::cast(k)->oop_is_javaArray(), "should be array klass"); +Klass* java_lang_Class::array_klass(oop java_class) { + Klass* k = ((Klass*)java_class->metadata_field(_array_klass_offset)); + assert(k == NULL || k->is_klass() && Klass::cast(k)->oop_is_array(), "should be array klass"); return k; } -void java_lang_Class::set_array_klass(oop java_class, klassOop klass) { - assert(klass->is_klass() && Klass::cast(klass)->oop_is_javaArray(), "should be array klass"); - java_class->obj_field_put(_array_klass_offset, klass); +void java_lang_Class::set_array_klass(oop java_class, Klass* klass) { + assert(klass->is_klass() && Klass::cast(klass)->oop_is_array(), "should be array klass"); + java_class->metadata_field_put(_array_klass_offset, klass); } -methodOop java_lang_Class::resolved_constructor(oop java_class) { - oop constructor = java_class->obj_field(_resolved_constructor_offset); +Method* java_lang_Class::resolved_constructor(oop java_class) { + Metadata* constructor = java_class->metadata_field(_resolved_constructor_offset); assert(constructor == NULL || constructor->is_method(), "should be method"); - return methodOop(constructor); + return ((Method*)constructor); } -void java_lang_Class::set_resolved_constructor(oop java_class, methodOop constructor) { +void java_lang_Class::set_resolved_constructor(oop java_class, Method* constructor) { assert(constructor->is_method(), "should be method"); - java_class->obj_field_put(_resolved_constructor_offset, constructor); + java_class->metadata_field_put(_resolved_constructor_offset, constructor); } bool java_lang_Class::is_primitive(oop java_class) { // should assert: //assert(java_lang_Class::is_instance(java_class), "must be a Class object"); - klassOop k = klassOop(java_class->obj_field(_klass_offset)); - return k == NULL; + bool is_primitive = (java_class->metadata_field(_klass_offset) == NULL); + +#ifdef ASSERT + if (is_primitive) { + Klass* k = ((Klass*)java_class->metadata_field(_array_klass_offset)); + assert(k == NULL || is_java_primitive(arrayKlass::cast(k)->element_type()), + "Should be either the T_VOID primitive or a java primitive"); + } +#endif + + return is_primitive; } BasicType java_lang_Class::primitive_type(oop java_class) { assert(java_lang_Class::is_primitive(java_class), "just checking"); - klassOop ak = klassOop(java_class->obj_field(_array_klass_offset)); + Klass* ak = ((Klass*)java_class->metadata_field(_array_klass_offset)); BasicType type = T_VOID; if (ak != NULL) { // Note: create_basic_type_mirror above initializes ak to a non-null value. @@ -728,7 +727,7 @@ return type; } -BasicType java_lang_Class::as_BasicType(oop java_class, klassOop* reference_klass) { +BasicType java_lang_Class::as_BasicType(oop java_class, Klass** reference_klass) { assert(java_lang_Class::is_instance(java_class), "must be a Class object"); if (is_primitive(java_class)) { if (reference_klass != NULL) @@ -736,7 +735,7 @@ return primitive_type(java_class); } else { if (reference_klass != NULL) - (*reference_klass) = as_klassOop(java_class); + (*reference_klass) = as_Klass(java_class); return T_OBJECT; } } @@ -756,7 +755,7 @@ assert(!offsets_computed, "offsets should be initialized only once"); offsets_computed = true; - klassOop klass_oop = SystemDictionary::Class_klass(); + Klass* klass_oop = SystemDictionary::Class_klass(); // The classRedefinedCount field is only present starting in 1.5, // so don't go fatal. compute_optional_offset(classRedefinedCount_offset, @@ -814,7 +813,7 @@ void java_lang_Thread::compute_offsets() { assert(_group_offset == 0, "offsets should be initialized only once"); - klassOop k = SystemDictionary::Thread_klass(); + Klass* k = SystemDictionary::Thread_klass(); compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::char_array_signature()); compute_offset(_group_offset, k, vmSymbols::group_name(), vmSymbols::threadgroup_signature()); compute_offset(_contextClassLoader_offset, k, vmSymbols::contextClassLoader_name(), vmSymbols::classloader_signature()); @@ -1073,7 +1072,7 @@ void java_lang_ThreadGroup::compute_offsets() { assert(_parent_offset == 0, "offsets should be initialized only once"); - klassOop k = SystemDictionary::ThreadGroup_klass(); + Klass* k = SystemDictionary::ThreadGroup_klass(); compute_offset(_parent_offset, k, vmSymbols::parent_name(), vmSymbols::threadgroup_signature()); compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature()); @@ -1088,7 +1087,7 @@ } oop java_lang_Throwable::unassigned_stacktrace() { - instanceKlass* ik = instanceKlass::cast(SystemDictionary::Throwable_klass()); + InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::Throwable_klass()); address addr = ik->static_field_addr(static_unassigned_stacktrace_offset); if (UseCompressedOops) { return oopDesc::load_decode_heap_oop((narrowOop *)addr); @@ -1134,9 +1133,9 @@ void java_lang_Throwable::print(oop throwable, outputStream* st) { ResourceMark rm; - klassOop k = throwable->klass(); + Klass* k = throwable->klass(); assert(k != NULL, "just checking"); - st->print("%s", instanceKlass::cast(k)->external_name()); + st->print("%s", InstanceKlass::cast(k)->external_name()); oop msg = message(throwable); if (msg != NULL) { st->print(": %s", java_lang_String::as_utf8_string(msg)); @@ -1146,9 +1145,9 @@ void java_lang_Throwable::print(Handle throwable, outputStream* st) { ResourceMark rm; - klassOop k = throwable->klass(); + Klass* k = throwable->klass(); assert(k != NULL, "just checking"); - st->print("%s", instanceKlass::cast(k)->external_name()); + st->print("%s", InstanceKlass::cast(k)->external_name()); oop msg = message(throwable); if (msg != NULL) { st->print(": %s", java_lang_String::as_utf8_string(msg)); @@ -1156,9 +1155,9 @@ } // Print stack trace element to resource allocated buffer -char* java_lang_Throwable::print_stack_element_to_buffer(methodOop method, int bci) { +char* java_lang_Throwable::print_stack_element_to_buffer(Method* method, int bci) { // Get strings and string lengths - instanceKlass* klass = instanceKlass::cast(method->method_holder()); + InstanceKlass* klass = InstanceKlass::cast(method->method_holder()); const char* klass_name = klass->external_name(); int buf_len = (int)strlen(klass_name); char* source_file_name; @@ -1200,13 +1199,13 @@ } -void java_lang_Throwable::print_stack_element(Handle stream, methodOop method, int bci) { +void java_lang_Throwable::print_stack_element(Handle stream, Method* method, int bci) { ResourceMark rm; char* buf = print_stack_element_to_buffer(method, bci); print_to_stream(stream, buf); } -void java_lang_Throwable::print_stack_element(outputStream *st, methodOop method, int bci) { +void java_lang_Throwable::print_stack_element(outputStream *st, Method* method, int bci) { ResourceMark rm; char* buf = print_stack_element_to_buffer(method, bci); st->print_cr("%s", buf); @@ -1252,8 +1251,8 @@ } while (result.not_null()) { - objArrayHandle methods (THREAD, - objArrayOop(result->obj_at(trace_methods_offset))); + typeArrayHandle methods (THREAD, + typeArrayOop(result->obj_at(trace_methods_offset))); typeArrayHandle bcis (THREAD, typeArrayOop(result->obj_at(trace_bcis_offset))); @@ -1264,7 +1263,7 @@ int length = methods()->length(); for (int index = 0; index < length; index++) { - methodOop method = methodOop(methods()->obj_at(index)); + Method* method = ((Method*)methods()->metadata_at(index)); if (method == NULL) goto handle_cause; int bci = bcis->ushort_at(index); print_stack_element(st, method, bci); @@ -1309,8 +1308,8 @@ } while (result.not_null()) { - objArrayHandle methods (thread, - objArrayOop(result->obj_at(trace_methods_offset))); + typeArrayHandle methods(thread, + typeArrayOop(result->obj_at(trace_methods_offset))); typeArrayHandle bcis (thread, typeArrayOop(result->obj_at(trace_bcis_offset))); @@ -1321,7 +1320,7 @@ int length = methods()->length(); for (int index = 0; index < length; index++) { - methodOop method = methodOop(methods()->obj_at(index)); + Method* method = ((Method*)methods()->metadata_at(index)); if (method == NULL) return; int bci = bcis->ushort_at(index); print_stack_element(stream, method, bci); @@ -1337,8 +1336,9 @@ private: Handle _backtrace; objArrayOop _head; - objArrayOop _methods; + typeArrayOop _methods; typeArrayOop _bcis; + objArrayOop _mirrors; int _index; No_Safepoint_Verifier _nsv; @@ -1347,13 +1347,14 @@ enum { trace_methods_offset = java_lang_Throwable::trace_methods_offset, trace_bcis_offset = java_lang_Throwable::trace_bcis_offset, + trace_mirrors_offset = java_lang_Throwable::trace_mirrors_offset, trace_next_offset = java_lang_Throwable::trace_next_offset, trace_size = java_lang_Throwable::trace_size, trace_chunk_size = java_lang_Throwable::trace_chunk_size }; // constructor for new backtrace - BacktraceBuilder(TRAPS): _methods(NULL), _bcis(NULL), _head(NULL) { + BacktraceBuilder(TRAPS): _methods(NULL), _bcis(NULL), _head(NULL), _mirrors(NULL) { expand(CHECK); _backtrace = _head; _index = 0; @@ -1366,21 +1367,26 @@ objArrayOop head = oopFactory::new_objectArray(trace_size, CHECK); objArrayHandle new_head(THREAD, head); - objArrayOop methods = oopFactory::new_objectArray(trace_chunk_size, CHECK); - objArrayHandle new_methods(THREAD, methods); + typeArrayOop methods = oopFactory::new_metaDataArray(trace_chunk_size, CHECK); + typeArrayHandle new_methods(THREAD, methods); typeArrayOop bcis = oopFactory::new_shortArray(trace_chunk_size, CHECK); typeArrayHandle new_bcis(THREAD, bcis); + objArrayOop mirrors = oopFactory::new_objectArray(trace_chunk_size, CHECK); + objArrayHandle new_mirrors(THREAD, mirrors); + if (!old_head.is_null()) { old_head->obj_at_put(trace_next_offset, new_head()); } new_head->obj_at_put(trace_methods_offset, new_methods()); new_head->obj_at_put(trace_bcis_offset, new_bcis()); + new_head->obj_at_put(trace_mirrors_offset, new_mirrors()); _head = new_head(); _methods = new_methods(); _bcis = new_bcis(); + _mirrors = new_mirrors(); _index = 0; } @@ -1388,7 +1394,7 @@ return _backtrace(); } - inline void push(methodOop method, int bci, TRAPS) { + inline void push(Method* method, int bci, TRAPS) { // Smear the -1 bci to 0 since the array only holds unsigned // shorts. The later line number lookup would just smear the -1 // to a 0 even if it could be recorded. @@ -1401,14 +1407,18 @@ method = mhandle(); } - _methods->obj_at_put(_index, method); + _methods->metadata_at_put(_index, method); _bcis->ushort_at_put(_index, bci); + // we need to save the mirrors in the backtrace to keep the methods from + // being unloaded if their class loader is unloaded while we still have + // this stack trace. + _mirrors->obj_at_put(_index, method->method_holder()->java_mirror()); _index++; } - methodOop current_method() { + Method* current_method() { assert(_index >= 0 && _index < trace_chunk_size, "out of range"); - return methodOop(_methods->obj_at(_index)); + return ((Method*)_methods->metadata_at(_index)); } jushort current_bci() { @@ -1465,14 +1475,14 @@ bool skip_hidden = !ShowHiddenFrames; for (frame fr = thread->last_frame(); max_depth != total_count;) { - methodOop method = NULL; + Method* method = NULL; int bci = 0; // Compiled java method case. if (decode_offset != 0) { DebugInfoReadStream stream(nm, decode_offset); decode_offset = stream.read_int(); - method = (methodOop)nm->oop_at(stream.read_int()); + method = (Method*)nm->metadata_at(stream.read_int()); bci = stream.read_bci(); } else { if (fr.is_first_frame()) break; @@ -1508,7 +1518,7 @@ "Wrong stack trace"); st.next(); // vframeStream::method isn't GC-safe so store off a copy - // of the methodOop in case we GC. + // of the Method* in case we GC. if (!st.at_end()) { st_method = st.method(); } @@ -1580,14 +1590,17 @@ objArrayOop h_oop = oopFactory::new_objectArray(trace_size, CHECK); objArrayHandle backtrace (THREAD, h_oop); - objArrayOop m_oop = oopFactory::new_objectArray(trace_chunk_size, CHECK); - objArrayHandle methods (THREAD, m_oop); + typeArrayOop m_oop = oopFactory::new_metaDataArray(trace_chunk_size, CHECK); + typeArrayHandle methods (THREAD, m_oop); typeArrayOop b = oopFactory::new_shortArray(trace_chunk_size, CHECK); typeArrayHandle bcis(THREAD, b); + objArrayOop mirror_oop = oopFactory::new_objectArray(trace_chunk_size, CHECK); + objArrayHandle mirrors (THREAD, mirror_oop); // backtrace has space for one chunk (next is NULL) backtrace->obj_at_put(trace_methods_offset, methods()); backtrace->obj_at_put(trace_bcis_offset, bcis()); + backtrace->obj_at_put(trace_mirrors_offset, mirrors()); set_backtrace(throwable(), backtrace()); } @@ -1600,18 +1613,24 @@ assert(throwable->is_a(SystemDictionary::Throwable_klass()), "sanity check"); - oop backtrace = java_lang_Throwable::backtrace(throwable()); + objArrayOop backtrace = (objArrayOop)java_lang_Throwable::backtrace(throwable()); assert(backtrace != NULL, "backtrace not preallocated"); - oop m = objArrayOop(backtrace)->obj_at(trace_methods_offset); - objArrayOop methods = objArrayOop(m); + oop m = backtrace->obj_at(trace_methods_offset); + typeArrayOop methods = typeArrayOop(m); assert(methods != NULL && methods->length() > 0, "method array not preallocated"); - oop b = objArrayOop(backtrace)->obj_at(trace_bcis_offset); + oop b = backtrace->obj_at(trace_bcis_offset); typeArrayOop bcis = typeArrayOop(b); assert(bcis != NULL, "bci array not preallocated"); - assert(methods->length() == bcis->length(), "method and bci arrays should match"); + oop mr = backtrace->obj_at(trace_mirrors_offset); + objArrayOop mirrors = objArrayOop(mr); + assert(mirrors != NULL, "bci array not preallocated"); + + assert(methods->length() == bcis->length() && + methods->length() == mirrors->length(), + "method and bci arrays should match"); JavaThread* thread = JavaThread::current(); ResourceMark rm(thread); @@ -1632,7 +1651,9 @@ if (bci == SynchronizationEntryBCI) bci = 0; assert(bci == (jushort)bci, "doesn't fit"); bcis->ushort_at_put(chunk_count, bci); - methods->obj_at_put(chunk_count, st.method()); + methods->metadata_at_put(chunk_count, st.method()); + mirrors->obj_at_put(chunk_count, + st.method()->method_holder()->java_mirror()); chunk_count++; @@ -1667,11 +1688,11 @@ } assert(chunk != NULL && chunk->obj_at(trace_next_offset) == NULL, "sanity check"); // Count element in remaining partial chunk - objArrayOop methods = objArrayOop(chunk->obj_at(trace_methods_offset)); + typeArrayOop methods = typeArrayOop(chunk->obj_at(trace_methods_offset)); typeArrayOop bcis = typeArrayOop(chunk->obj_at(trace_bcis_offset)); assert(methods != NULL && bcis != NULL, "sanity check"); for (int i = 0; i < methods->length(); i++) { - if (methods->obj_at(i) == NULL) break; + if (methods->metadata_at(i) == NULL) break; depth++; } } @@ -1698,10 +1719,10 @@ THROW_(vmSymbols::java_lang_IndexOutOfBoundsException(), NULL); } // Get method,bci from chunk - objArrayOop methods = objArrayOop(chunk->obj_at(trace_methods_offset)); + typeArrayOop methods = typeArrayOop(chunk->obj_at(trace_methods_offset)); typeArrayOop bcis = typeArrayOop(chunk->obj_at(trace_bcis_offset)); assert(methods != NULL && bcis != NULL, "sanity check"); - methodHandle method(THREAD, methodOop(methods->obj_at(chunk_index))); + methodHandle method(THREAD, ((Method*)methods->metadata_at(chunk_index))); int bci = bcis->ushort_at(chunk_index); // Chunk can be partial full if (method.is_null()) { @@ -1717,7 +1738,7 @@ assert(JDK_Version::is_gte_jdk14x_version(), "should only be called in >= 1.4"); // Allocate java.lang.StackTraceElement instance - klassOop k = SystemDictionary::StackTraceElement_klass(); + Klass* k = SystemDictionary::StackTraceElement_klass(); assert(k != NULL, "must be loaded in 1.4+"); instanceKlassHandle ik (THREAD, k); if (ik->should_be_initialized()) { @@ -1727,14 +1748,14 @@ Handle element = ik->allocate_instance_handle(CHECK_0); // Fill in class name ResourceMark rm(THREAD); - const char* str = instanceKlass::cast(method->method_holder())->external_name(); + const char* str = InstanceKlass::cast(method->method_holder())->external_name(); oop classname = StringTable::intern((char*) str, CHECK_0); java_lang_StackTraceElement::set_declaringClass(element(), classname); // Fill in method name oop methodname = StringTable::intern(method->name(), CHECK_0); java_lang_StackTraceElement::set_methodName(element(), methodname); // Fill in source file name - Symbol* source = instanceKlass::cast(method->method_holder())->source_file_name(); + Symbol* source = InstanceKlass::cast(method->method_holder())->source_file_name(); if (ShowHiddenFrames && source == NULL) source = vmSymbols::unknown_class_name(); oop filename = StringTable::intern(source, CHECK_0); @@ -1760,7 +1781,7 @@ void java_lang_reflect_AccessibleObject::compute_offsets() { - klassOop k = SystemDictionary::reflect_AccessibleObject_klass(); + Klass* k = SystemDictionary::reflect_AccessibleObject_klass(); compute_offset(override_offset, k, vmSymbols::override_name(), vmSymbols::bool_signature()); } @@ -1775,7 +1796,7 @@ } void java_lang_reflect_Method::compute_offsets() { - klassOop k = SystemDictionary::reflect_Method_klass(); + Klass* k = SystemDictionary::reflect_Method_klass(); compute_offset(clazz_offset, k, vmSymbols::clazz_name(), vmSymbols::class_signature()); compute_offset(name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature()); compute_offset(returnType_offset, k, vmSymbols::returnType_name(), vmSymbols::class_signature()); @@ -1796,11 +1817,11 @@ Handle java_lang_reflect_Method::create(TRAPS) { assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); - klassOop klass = SystemDictionary::reflect_Method_klass(); + Klass* klass = SystemDictionary::reflect_Method_klass(); // This class is eagerly initialized during VM initialization, since we keep a refence // to one of the methods - assert(instanceKlass::cast(klass)->is_initialized(), "must be initialized"); - return instanceKlass::cast(klass)->allocate_instance_handle(CHECK_NH); + assert(InstanceKlass::cast(klass)->is_initialized(), "must be initialized"); + return InstanceKlass::cast(klass)->allocate_instance_handle(CHECK_NH); } oop java_lang_reflect_Method::clazz(oop reflect) { @@ -1938,7 +1959,7 @@ } void java_lang_reflect_Constructor::compute_offsets() { - klassOop k = SystemDictionary::reflect_Constructor_klass(); + Klass* k = SystemDictionary::reflect_Constructor_klass(); compute_offset(clazz_offset, k, vmSymbols::clazz_name(), vmSymbols::class_signature()); compute_offset(parameterTypes_offset, k, vmSymbols::parameterTypes_name(), vmSymbols::class_array_signature()); compute_offset(exceptionTypes_offset, k, vmSymbols::exceptionTypes_name(), vmSymbols::class_array_signature()); @@ -1956,7 +1977,7 @@ Handle java_lang_reflect_Constructor::create(TRAPS) { assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); Symbol* name = vmSymbols::java_lang_reflect_Constructor(); - klassOop k = SystemDictionary::resolve_or_fail(name, true, CHECK_NH); + Klass* k = SystemDictionary::resolve_or_fail(name, true, CHECK_NH); instanceKlassHandle klass (THREAD, k); // Ensure it is initialized klass->initialize(CHECK_NH); @@ -2062,7 +2083,7 @@ } void java_lang_reflect_Field::compute_offsets() { - klassOop k = SystemDictionary::reflect_Field_klass(); + Klass* k = SystemDictionary::reflect_Field_klass(); compute_offset(clazz_offset, k, vmSymbols::clazz_name(), vmSymbols::class_signature()); compute_offset(name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature()); compute_offset(type_offset, k, vmSymbols::type_name(), vmSymbols::class_signature()); @@ -2078,7 +2099,7 @@ Handle java_lang_reflect_Field::create(TRAPS) { assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); Symbol* name = vmSymbols::java_lang_reflect_Field(); - klassOop k = SystemDictionary::resolve_or_fail(name, true, CHECK_NH); + Klass* k = SystemDictionary::resolve_or_fail(name, true, CHECK_NH); instanceKlassHandle klass (THREAD, k); // Ensure it is initialized klass->initialize(CHECK_NH); @@ -2169,17 +2190,18 @@ void sun_reflect_ConstantPool::compute_offsets() { - klassOop k = SystemDictionary::reflect_ConstantPool_klass(); + Klass* k = SystemDictionary::reflect_ConstantPool_klass(); // This null test can be removed post beta if (k != NULL) { - compute_offset(_cp_oop_offset, k, vmSymbols::constantPoolOop_name(), vmSymbols::object_signature()); + // The field is called ConstantPool* in the sun.reflect.ConstantPool class. + compute_offset(_oop_offset, k, vmSymbols::ConstantPool_name(), vmSymbols::object_signature()); } } Handle sun_reflect_ConstantPool::create(TRAPS) { assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); - klassOop k = SystemDictionary::reflect_ConstantPool_klass(); + Klass* k = SystemDictionary::reflect_ConstantPool_klass(); instanceKlassHandle klass (THREAD, k); // Ensure it is initialized klass->initialize(CHECK_NH); @@ -2187,19 +2209,30 @@ } -oop sun_reflect_ConstantPool::cp_oop(oop reflect) { +void sun_reflect_ConstantPool::set_cp(oop reflect, ConstantPool* value) { assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); - return reflect->obj_field(_cp_oop_offset); + oop mirror = value->pool_holder()->java_mirror(); + // Save the mirror to get back the constant pool. + reflect->obj_field_put(_oop_offset, mirror); } - -void sun_reflect_ConstantPool::set_cp_oop(oop reflect, oop value) { +ConstantPool* sun_reflect_ConstantPool::get_cp(oop reflect) { assert(Universe::is_fully_initialized(), "Need to find another solution to the reflection problem"); - reflect->obj_field_put(_cp_oop_offset, value); + + oop mirror = reflect->obj_field(_oop_offset); + Klass* k = java_lang_Class::as_Klass(mirror); + assert(k->oop_is_instance(), "Must be"); + + // Get the constant pool back from the klass. Since class redefinition + // merges the new constant pool into the old, this is essentially the + // same constant pool as the original. If constant pool merging is + // no longer done in the future, this will have to change to save + // the original. + return InstanceKlass::cast(k)->constants(); } void sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets() { - klassOop k = SystemDictionary::reflect_UnsafeStaticFieldAccessorImpl_klass(); + Klass* k = SystemDictionary::reflect_UnsafeStaticFieldAccessorImpl_klass(); // This null test can be removed post beta if (k != NULL) { compute_offset(_base_offset, k, @@ -2208,7 +2241,7 @@ } oop java_lang_boxing_object::initialize_and_allocate(BasicType type, TRAPS) { - klassOop k = SystemDictionary::box_klass(type); + Klass* k = SystemDictionary::box_klass(type); if (k == NULL) return NULL; instanceKlassHandle h (THREAD, k); if (!h->is_initialized()) h->initialize(CHECK_0); @@ -2344,8 +2377,14 @@ // Support for java_lang_ref_Reference +HeapWord *java_lang_ref_Reference::pending_list_lock_addr() { + InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::Reference_klass()); + address addr = ik->static_field_addr(static_lock_offset); + return (HeapWord*) addr; +} + oop java_lang_ref_Reference::pending_list_lock() { - instanceKlass* ik = instanceKlass::cast(SystemDictionary::Reference_klass()); + InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::Reference_klass()); address addr = ik->static_field_addr(static_lock_offset); if (UseCompressedOops) { return oopDesc::load_decode_heap_oop((narrowOop *)addr); @@ -2355,7 +2394,7 @@ } HeapWord *java_lang_ref_Reference::pending_list_addr() { - instanceKlass* ik = instanceKlass::cast(SystemDictionary::Reference_klass()); + InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::Reference_klass()); address addr = ik->static_field_addr(static_pending_offset); // XXX This might not be HeapWord aligned, almost rather be char *. return (HeapWord*)addr; @@ -2378,13 +2417,13 @@ } jlong java_lang_ref_SoftReference::clock() { - instanceKlass* ik = instanceKlass::cast(SystemDictionary::SoftReference_klass()); + InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::SoftReference_klass()); jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset); return *offset; } void java_lang_ref_SoftReference::set_clock(jlong value) { - instanceKlass* ik = instanceKlass::cast(SystemDictionary::SoftReference_klass()); + InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::SoftReference_klass()); jlong* offset = (jlong*)ik->static_field_addr(static_clock_offset); *offset = value; } @@ -2400,12 +2439,13 @@ int java_lang_invoke_MemberName::_type_offset; int java_lang_invoke_MemberName::_flags_offset; int java_lang_invoke_MemberName::_vmtarget_offset; +int java_lang_invoke_MemberName::_vmloader_offset; int java_lang_invoke_MemberName::_vmindex_offset; int java_lang_invoke_LambdaForm::_vmentry_offset; void java_lang_invoke_MethodHandle::compute_offsets() { - klassOop klass_oop = SystemDictionary::MethodHandle_klass(); + Klass* klass_oop = SystemDictionary::MethodHandle_klass(); if (klass_oop != NULL && EnableInvokeDynamic) { compute_offset(_type_offset, klass_oop, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature()); compute_optional_offset(_form_offset, klass_oop, vmSymbols::form_name(), vmSymbols::java_lang_invoke_LambdaForm_signature()); @@ -2416,7 +2456,7 @@ } void java_lang_invoke_MemberName::compute_offsets() { - klassOop klass_oop = SystemDictionary::MemberName_klass(); + Klass* klass_oop = SystemDictionary::MemberName_klass(); if (klass_oop != NULL && EnableInvokeDynamic) { compute_offset(_clazz_offset, klass_oop, vmSymbols::clazz_name(), vmSymbols::class_signature()); compute_offset(_name_offset, klass_oop, vmSymbols::name_name(), vmSymbols::string_signature()); @@ -2427,7 +2467,7 @@ } void java_lang_invoke_LambdaForm::compute_offsets() { - klassOop klass_oop = SystemDictionary::LambdaForm_klass(); + Klass* klass_oop = SystemDictionary::LambdaForm_klass(); if (klass_oop != NULL && EnableInvokeDynamic) { compute_offset(_vmentry_offset, klass_oop, vmSymbols::vmentry_name(), vmSymbols::java_lang_invoke_MemberName_signature()); } @@ -2493,12 +2533,12 @@ mname->int_field_put(_flags_offset, flags); } -oop java_lang_invoke_MemberName::vmtarget(oop mname) { +Metadata* java_lang_invoke_MemberName::vmtarget(oop mname) { assert(is_instance(mname), "wrong type"); - return mname->obj_field(_vmtarget_offset); + return (Metadata*)mname->address_field(_vmtarget_offset); } -void java_lang_invoke_MemberName::set_vmtarget(oop mname, oop ref) { +void java_lang_invoke_MemberName::set_vmtarget(oop mname, Metadata* ref) { assert(is_instance(mname), "wrong type"); #ifdef ASSERT // check the type of the vmtarget @@ -2518,7 +2558,19 @@ } } #endif //ASSERT - mname->obj_field_put(_vmtarget_offset, ref); + mname->address_field_put(_vmtarget_offset, (address)ref); + oop loader = NULL; + if (ref != NULL) { + if (ref->is_klass()) { + loader = ((Klass*)ref)->class_loader(); + } else if (ref->is_method()) { + loader = ((Method*)ref)->method_holder()->class_loader(); + } else { + ShouldNotReachHere(); + } + } + // Add a reference to the loader to ensure the metadata is kept alive + mname->obj_field_put(_vmloader_offset, loader); } intptr_t java_lang_invoke_MemberName::vmindex(oop mname) { @@ -2543,7 +2595,7 @@ int java_lang_invoke_MethodType::_ptypes_offset; void java_lang_invoke_MethodType::compute_offsets() { - klassOop k = SystemDictionary::MethodType_klass(); + Klass* k = SystemDictionary::MethodType_klass(); if (k != NULL) { compute_offset(_rtype_offset, k, vmSymbols::rtype_name(), vmSymbols::class_signature()); compute_offset(_ptypes_offset, k, vmSymbols::ptypes_name(), vmSymbols::class_array_signature()); @@ -2630,7 +2682,7 @@ void java_lang_invoke_CallSite::compute_offsets() { if (!EnableInvokeDynamic) return; - klassOop k = SystemDictionary::CallSite_klass(); + Klass* k = SystemDictionary::CallSite_klass(); if (k != NULL) { compute_offset(_target_offset, k, vmSymbols::target_name(), vmSymbols::java_lang_invoke_MethodHandle_signature()); } @@ -2646,7 +2698,7 @@ void java_security_AccessControlContext::compute_offsets() { assert(_isPrivileged_offset == 0, "offsets should be initialized only once"); fieldDescriptor fd; - instanceKlass* ik = instanceKlass::cast(SystemDictionary::AccessControlContext_klass()); + InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass()); if (!ik->find_local_field(vmSymbols::context_name(), vmSymbols::protectiondomain_signature(), &fd)) { fatal("Invalid layout of java.security.AccessControlContext"); @@ -2668,9 +2720,9 @@ oop java_security_AccessControlContext::create(objArrayHandle context, bool isPrivileged, Handle privileged_context, TRAPS) { assert(_isPrivileged_offset != 0, "offsets should have been initialized"); // Ensure klass is initialized - instanceKlass::cast(SystemDictionary::AccessControlContext_klass())->initialize(CHECK_0); + InstanceKlass::cast(SystemDictionary::AccessControlContext_klass())->initialize(CHECK_0); // Allocate result - oop result = instanceKlass::cast(SystemDictionary::AccessControlContext_klass())->allocate_instance(CHECK_0); + oop result = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass())->allocate_instance(CHECK_0); // Fill in values result->obj_field_put(_context_offset, context()); result->obj_field_put(_privilegedContext_offset, privileged_context()); @@ -2680,17 +2732,43 @@ // Support for java_lang_ClassLoader + bool java_lang_ClassLoader::offsets_computed = false; +int java_lang_ClassLoader::_loader_data_offset = -1; +int java_lang_ClassLoader::_dependencies_offset = -1; int java_lang_ClassLoader::parallelCapable_offset = -1; +ClassLoaderData** java_lang_ClassLoader::loader_data_addr(oop loader) { + assert(loader != NULL && loader->is_oop(), "loader must be oop"); + return (ClassLoaderData**) loader->address_field_addr(_loader_data_offset); +} + +ClassLoaderData* java_lang_ClassLoader::loader_data(oop loader) { + return *java_lang_ClassLoader::loader_data_addr(loader); +} + +oop java_lang_ClassLoader::dependencies(oop loader) { + return loader->obj_field(_dependencies_offset); +} + +HeapWord* java_lang_ClassLoader::dependencies_addr(oop loader) { + if (UseCompressedOops) { + return (HeapWord*)loader->obj_field_addr(_dependencies_offset); + } else { + return (HeapWord*)loader->obj_field_addr(_dependencies_offset); + } +} + void java_lang_ClassLoader::compute_offsets() { assert(!offsets_computed, "offsets should be initialized only once"); offsets_computed = true; // The field indicating parallelCapable (parallelLockMap) is only present starting in 7, - klassOop k1 = SystemDictionary::ClassLoader_klass(); + Klass* k1 = SystemDictionary::ClassLoader_klass(); compute_optional_offset(parallelCapable_offset, k1, vmSymbols::parallelCapable_name(), vmSymbols::concurrenthashmap_signature()); + + CLASSLOADER_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET); } oop java_lang_ClassLoader::parent(oop loader) { @@ -2745,7 +2823,7 @@ // the generated bytecodes for reflection, and if so, "magically" // delegate to its parent to prevent class loading from occurring // in places where applications using reflection didn't expect it. - klassOop delegating_cl_class = SystemDictionary::reflect_DelegatingClassLoader_klass(); + Klass* delegating_cl_class = SystemDictionary::reflect_DelegatingClassLoader_klass(); // This might be null in non-1.4 JDKs if (delegating_cl_class != NULL && loader->is_a(delegating_cl_class)) { return parent(loader); @@ -2777,6 +2855,7 @@ int java_lang_Class::_resolved_constructor_offset; int java_lang_Class::_oop_size_offset; int java_lang_Class::_static_oop_field_count_offset; +GrowableArray* java_lang_Class::_fixup_mirror_list = NULL; int java_lang_Throwable::backtrace_offset; int java_lang_Throwable::detailMessage_offset; int java_lang_Throwable::cause_offset; @@ -2835,7 +2914,7 @@ int java_lang_AssertionStatusDirectives::deflt_offset; int java_nio_Buffer::_limit_offset; int java_util_concurrent_locks_AbstractOwnableSynchronizer::_owner_offset = 0; -int sun_reflect_ConstantPool::_cp_oop_offset; +int sun_reflect_ConstantPool::_oop_offset; int sun_reflect_UnsafeStaticFieldAccessorImpl::_base_offset; @@ -2888,7 +2967,7 @@ void java_nio_Buffer::compute_offsets() { - klassOop k = SystemDictionary::nio_Buffer_klass(); + Klass* k = SystemDictionary::nio_Buffer_klass(); assert(k != NULL, "must be loaded in 1.4+"); compute_offset(_limit_offset, k, vmSymbols::limit_name(), vmSymbols::int_signature()); } @@ -2898,7 +2977,7 @@ assert(JDK_Version::is_gte_jdk16x_version(), "Must be JDK 1.6 or later"); SystemDictionary::load_abstract_ownable_synchronizer_klass(CHECK); - klassOop k = SystemDictionary::abstract_ownable_synchronizer_klass(); + Klass* k = SystemDictionary::abstract_ownable_synchronizer_klass(); compute_offset(_owner_offset, k, vmSymbols::exclusive_owner_thread_name(), vmSymbols::thread_signature()); } @@ -3007,7 +3086,7 @@ EXCEPTION_MARK; fieldDescriptor fd; TempNewSymbol klass_sym = SymbolTable::new_symbol(klass_name, CATCH); - klassOop k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH); + Klass* k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH); instanceKlassHandle h_klass (THREAD, k); TempNewSymbol f_name = SymbolTable::new_symbol(field_name, CATCH); TempNewSymbol f_sig = SymbolTable::new_symbol(field_sig, CATCH); @@ -3033,7 +3112,7 @@ EXCEPTION_MARK; fieldDescriptor fd; TempNewSymbol klass_sym = SymbolTable::new_symbol(klass_name, CATCH); - klassOop k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH); + Klass* k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH); instanceKlassHandle h_klass (THREAD, k); TempNewSymbol f_name = SymbolTable::new_symbol(field_name, CATCH); TempNewSymbol f_sig = SymbolTable::new_symbol(field_sig, CATCH); @@ -3058,7 +3137,7 @@ EXCEPTION_MARK; fieldDescriptor fd; TempNewSymbol klass_sym = SymbolTable::new_symbol(klass_name, CATCH); - klassOop k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH); + Klass* k = SystemDictionary::resolve_or_fail(klass_sym, true, CATCH); instanceKlassHandle h_klass (THREAD, k); TempNewSymbol f_name = SymbolTable::new_symbol(field_name, CATCH); TempNewSymbol f_sig = SymbolTable::new_symbol(field_sig, CATCH); @@ -3088,6 +3167,7 @@ void JavaClasses::check_offsets() { bool valid = true; + HandleMark hm; #define CHECK_OFFSET(klass_name, cpp_klass_name, field_name, field_sig) \ valid &= check_offset(klass_name, cpp_klass_name :: field_name ## _offset, #field_name, field_sig) @@ -3192,8 +3272,8 @@ #endif // PRODUCT int InjectedField::compute_offset() { - klassOop klass_oop = klass(); - for (AllFieldStream fs(instanceKlass::cast(klass_oop)); !fs.done(); fs.next()) { + Klass* klass_oop = klass(); + for (AllFieldStream fs(InstanceKlass::cast(klass_oop)); !fs.done(); fs.next()) { if (!may_be_java && !fs.access_flags().is_internal()) { // Only look at injected fields continue; @@ -3203,11 +3283,11 @@ } } ResourceMark rm; - tty->print_cr("Invalid layout of %s at %s/%s%s", instanceKlass::cast(klass_oop)->external_name(), name()->as_C_string(), signature()->as_C_string(), may_be_java ? " (may_be_java)" : ""); + tty->print_cr("Invalid layout of %s at %s/%s%s", InstanceKlass::cast(klass_oop)->external_name(), name()->as_C_string(), signature()->as_C_string(), may_be_java ? " (may_be_java)" : ""); #ifndef PRODUCT klass_oop->print(); tty->print_cr("all fields:"); - for (AllFieldStream fs(instanceKlass::cast(klass_oop)); !fs.done(); fs.next()) { + for (AllFieldStream fs(InstanceKlass::cast(klass_oop)); !fs.done(); fs.next()) { tty->print_cr(" name: %s, sig: %s, flags: %08x", fs.name()->as_C_string(), fs.signature()->as_C_string(), fs.access_flags().as_int()); } #endif //PRODUCT diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/javaClasses.hpp --- a/src/share/vm/classfile/javaClasses.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/javaClasses.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -59,8 +59,7 @@ static bool initialized; - static Handle basic_create(int length, bool tenured, TRAPS); - static Handle basic_create_from_unicode(jchar* unicode, int length, bool tenured, TRAPS); + static Handle basic_create(int length, TRAPS); static void set_value( oop string, typeArrayOop buffer) { assert(initialized, "Must be initialized"); @@ -84,7 +83,6 @@ // Instance creation static Handle create_from_unicode(jchar* unicode, int len, TRAPS); - static Handle create_tenured_from_unicode(jchar* unicode, int len, TRAPS); static oop create_oop_from_unicode(jchar* unicode, int len, TRAPS); static Handle create_from_str(const char* utf8_str, TRAPS); static oop create_oop_from_str(const char* utf8_str, TRAPS); @@ -205,9 +203,9 @@ // Interface to java.lang.Class objects #define CLASS_INJECTED_FIELDS(macro) \ - macro(java_lang_Class, klass, object_signature, false) \ - macro(java_lang_Class, resolved_constructor, object_signature, false) \ - macro(java_lang_Class, array_klass, object_signature, false) \ + macro(java_lang_Class, klass, intptr_signature, false) \ + macro(java_lang_Class, resolved_constructor, intptr_signature, false) \ + macro(java_lang_Class, array_klass, intptr_signature, false) \ macro(java_lang_Class, oop_size, int_signature, false) \ macro(java_lang_Class, static_oop_field_count, int_signature, false) @@ -226,6 +224,7 @@ static bool offsets_computed; static int classRedefinedCount_offset; + static GrowableArray* _fixup_mirror_list; public: static void compute_offsets(); @@ -235,11 +234,11 @@ static void fixup_mirror(KlassHandle k, TRAPS); static oop create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS); // Conversion - static klassOop as_klassOop(oop java_class); - static void set_klass(oop java_class, klassOop klass); - static BasicType as_BasicType(oop java_class, klassOop* reference_klass = NULL); + static Klass* as_Klass(oop java_class); + static void set_klass(oop java_class, Klass* klass); + static BasicType as_BasicType(oop java_class, Klass** reference_klass = NULL); static BasicType as_BasicType(oop java_class, KlassHandle* reference_klass) { - klassOop refk_oop = NULL; + Klass* refk_oop = NULL; BasicType result = as_BasicType(java_class, &refk_oop); (*reference_klass) = KlassHandle(refk_oop); return result; @@ -254,11 +253,11 @@ static BasicType primitive_type(oop java_class); static oop primitive_mirror(BasicType t); // JVM_NewInstance support - static methodOop resolved_constructor(oop java_class); - static void set_resolved_constructor(oop java_class, methodOop constructor); + static Method* resolved_constructor(oop java_class); + static void set_resolved_constructor(oop java_class, Method* constructor); // JVM_NewArray support - static klassOop array_klass(oop java_class); - static void set_array_klass(oop java_class, klassOop klass); + static Klass* array_klass(oop java_class); + static void set_array_klass(oop java_class, Klass* klass); // compiler support for class operations static int klass_offset_in_bytes() { return _klass_offset; } static int resolved_constructor_offset_in_bytes() { return _resolved_constructor_offset; } @@ -272,9 +271,15 @@ static int static_oop_field_count(oop java_class); static void set_static_oop_field_count(oop java_class, int size); + static GrowableArray* fixup_mirror_list() { + return _fixup_mirror_list; + } + static void set_fixup_mirror_list(GrowableArray* v) { + _fixup_mirror_list = v; + } // Debugging friend class JavaClasses; - friend class instanceKlass; // verification code accesses offsets + friend class InstanceKlass; // verification code accesses offsets friend class ClassFileParser; // access to number_of_fake_fields }; @@ -449,8 +454,9 @@ enum { trace_methods_offset = 0, trace_bcis_offset = 1, - trace_next_offset = 2, - trace_size = 3, + trace_mirrors_offset = 2, + trace_next_offset = 3, + trace_size = 4, trace_chunk_size = 32 }; @@ -461,7 +467,7 @@ static int static_unassigned_stacktrace_offset; // Printing - static char* print_stack_element_to_buffer(methodOop method, int bci); + static char* print_stack_element_to_buffer(Method* method, int bci); static void print_to_stream(Handle stream, const char* str); // StackTrace (programmatic access, new since 1.4) static void clear_stacktrace(oop throwable); @@ -486,8 +492,8 @@ // Note: this is no longer used in Merlin, but we still suppport // it for compatibility. static void print_stack_trace(oop throwable, oop print_stream); - static void print_stack_element(Handle stream, methodOop method, int bci); - static void print_stack_element(outputStream *st, methodOop method, int bci); + static void print_stack_element(Handle stream, Method* method, int bci); + static void print_stack_element(outputStream *st, Method* method, int bci); static void print_stack_usage(Handle stream); // Allocate space for backtrace (created but stack trace not filled in) @@ -711,7 +717,7 @@ private: // Note that to reduce dependencies on the JDK we compute these // offsets at run-time. - static int _cp_oop_offset; + static int _oop_offset; static void compute_offsets(); @@ -720,12 +726,13 @@ static Handle create(TRAPS); // Accessors - static oop cp_oop(oop reflect); - static void set_cp_oop(oop reflect, oop value); - static int cp_oop_offset() { - return _cp_oop_offset; + static void set_cp(oop reflect, ConstantPool* value); + static int oop_offset() { + return _oop_offset; } + static ConstantPool* get_cp(oop reflect); + // Debugging friend class JavaClasses; }; @@ -853,6 +860,7 @@ static oop pending_list_lock(); static oop pending_list(); + static HeapWord* pending_list_lock_addr(); static HeapWord* pending_list_addr(); }; @@ -903,7 +911,7 @@ static void set_form(oop mh, oop lform); // Testers - static bool is_subclass(klassOop klass) { + static bool is_subclass(Klass* klass) { return Klass::cast(klass)->is_subclass_of(SystemDictionary::MethodHandle_klass()); } static bool is_instance(oop obj) { @@ -932,7 +940,7 @@ static void set_vmentry(oop lform, oop invoker); // Testers - static bool is_subclass(klassOop klass) { + static bool is_subclass(Klass* klass) { return SystemDictionary::LambdaForm_klass() != NULL && Klass::cast(klass)->is_subclass_of(SystemDictionary::LambdaForm_klass()); } @@ -949,8 +957,9 @@ // (These are a private interface for Java code to query the class hierarchy.) #define MEMBERNAME_INJECTED_FIELDS(macro) \ + macro(java_lang_invoke_MemberName, vmloader, object_signature, false) \ macro(java_lang_invoke_MemberName, vmindex, intptr_signature, false) \ - macro(java_lang_invoke_MemberName, vmtarget, object_signature, false) + macro(java_lang_invoke_MemberName, vmtarget, intptr_signature, false) class java_lang_invoke_MemberName: AllStatic { friend class JavaClasses; @@ -961,13 +970,14 @@ // private String name; // may be null if not yet materialized // private Object type; // may be null if not yet materialized // private int flags; // modifier bits; see reflect.Modifier - // private Object vmtarget; // VM-specific target value + // private intptr vmtarget; // VM-specific target value // private intptr_t vmindex; // member index within class or interface static int _clazz_offset; static int _name_offset; static int _type_offset; static int _flags_offset; static int _vmtarget_offset; + static int _vmloader_offset; static int _vmindex_offset; static void compute_offsets(); @@ -986,14 +996,14 @@ static int flags(oop mname); static void set_flags(oop mname, int flags); - static oop vmtarget(oop mname); - static void set_vmtarget(oop mname, oop target); + static Metadata* vmtarget(oop mname); + static void set_vmtarget(oop mname, Metadata* target); static intptr_t vmindex(oop mname); static void set_vmindex(oop mname, intptr_t index); // Testers - static bool is_subclass(klassOop klass) { + static bool is_subclass(Klass* klass) { return Klass::cast(klass)->is_subclass_of(SystemDictionary::MemberName_klass()); } static bool is_instance(oop obj) { @@ -1079,7 +1089,7 @@ static void set_target_volatile(oop site, oop target) { site->obj_field_put_volatile(_target_offset, target); } // Testers - static bool is_subclass(klassOop klass) { + static bool is_subclass(Klass* klass) { return Klass::cast(klass)->is_subclass_of(SystemDictionary::CallSite_klass()); } static bool is_instance(oop obj) { @@ -1112,19 +1122,31 @@ // Interface to java.lang.ClassLoader objects +#define CLASSLOADER_INJECTED_FIELDS(macro) \ + macro(java_lang_ClassLoader, loader_data, intptr_signature, false) \ + macro(java_lang_ClassLoader, dependencies, object_signature, false) + class java_lang_ClassLoader : AllStatic { private: + // The fake offsets are added by the class loader when java.lang.Class is loaded enum { hc_parent_offset = 0 }; - + static int _loader_data_offset; + static int _dependencies_offset; static bool offsets_computed; static int parent_offset; static int parallelCapable_offset; + public: static void compute_offsets(); - public: + static ClassLoaderData** loader_data_addr(oop loader); + static ClassLoaderData* loader_data(oop loader); + + static oop dependencies(oop loader); + static HeapWord* dependencies_addr(oop loader); + static oop parent(oop loader); static bool isAncestor(oop loader, oop cl); @@ -1137,7 +1159,7 @@ static oop non_reflection_class_loader(oop loader); // Testers - static bool is_subclass(klassOop klass) { + static bool is_subclass(Klass* klass) { return Klass::cast(klass)->is_subclass_of(SystemDictionary::ClassLoader_klass()); } static bool is_instance(oop obj) { @@ -1146,6 +1168,7 @@ // Debugging friend class JavaClasses; + friend class ClassFileParser; // access to number_of_fake_fields }; @@ -1268,7 +1291,7 @@ const bool may_be_java; - klassOop klass() const { return SystemDictionary::well_known_klass(klass_id); } + Klass* klass() const { return SystemDictionary::well_known_klass(klass_id); } Symbol* name() const { return lookup_symbol(name_index); } Symbol* signature() const { return lookup_symbol(signature_index); } @@ -1285,6 +1308,7 @@ #define ALL_INJECTED_FIELDS(macro) \ CLASS_INJECTED_FIELDS(macro) \ + CLASSLOADER_INJECTED_FIELDS(macro) \ MEMBERNAME_INJECTED_FIELDS(macro) // Interface to hard-coded offset checking diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/loaderConstraints.cpp --- a/src/share/vm/classfile/loaderConstraints.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/loaderConstraints.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/classLoaderData.inline.hpp" #include "classfile/loaderConstraints.hpp" #include "memory/resourceArea.hpp" #include "oops/oop.inline.hpp" @@ -30,16 +31,20 @@ #include "runtime/safepoint.hpp" #include "utilities/hashtable.inline.hpp" +void LoaderConstraintEntry::set_loader(int i, oop p) { + set_loader_data(i, ClassLoaderData::class_loader_data(p)); +} + LoaderConstraintTable::LoaderConstraintTable(int nof_buckets) - : Hashtable(nof_buckets, sizeof(LoaderConstraintEntry)) {}; + : Hashtable(nof_buckets, sizeof(LoaderConstraintEntry)) {}; LoaderConstraintEntry* LoaderConstraintTable::new_entry( unsigned int hash, Symbol* name, - klassOop klass, int num_loaders, + Klass* klass, int num_loaders, int max_loaders) { LoaderConstraintEntry* entry; - entry = (LoaderConstraintEntry*)Hashtable::new_entry(hash, klass); + entry = (LoaderConstraintEntry*)Hashtable::new_entry(hash, klass); entry->set_name(name); entry->set_num_loaders(num_loaders); entry->set_max_loaders(max_loaders); @@ -49,27 +54,21 @@ void LoaderConstraintTable::free_entry(LoaderConstraintEntry *entry) { // decrement name refcount before freeing entry->name()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } - -void LoaderConstraintTable::oops_do(OopClosure* f) { +// Enhanced Class Redefinition support +void LoaderConstraintTable::classes_do(KlassClosure* f) { for (int index = 0; index < table_size(); index++) { for (LoaderConstraintEntry* probe = bucket(index); probe != NULL; probe = probe->next()) { if (probe->klass() != NULL) { - f->do_oop((oop*)probe->klass_addr()); + f->do_klass(probe->klass()); } - for (int n = 0; n < probe->num_loaders(); n++) { - if (probe->loader(n) != NULL) { - f->do_oop(probe->loader_addr(n)); } } } - } -} - // The loaderConstraintTable must always be accessed with the // SystemDictionary lock held. This is true even for readers as @@ -81,12 +80,14 @@ unsigned int hash = compute_hash(name); int index = hash_to_index(hash); LoaderConstraintEntry** pp = bucket_addr(index); + ClassLoaderData* loader_data = ClassLoaderData::class_loader_data(loader()); + while (*pp) { LoaderConstraintEntry* p = *pp; if (p->hash() == hash) { if (p->name() == name) { for (int i = p->num_loaders() - 1; i >= 0; i--) { - if (p->loader(i) == loader()) { + if (p->loader_data(i) == loader_data) { return pp; } } @@ -98,16 +99,17 @@ } -void LoaderConstraintTable::purge_loader_constraints(BoolObjectClosure* is_alive) { +void LoaderConstraintTable::purge_loader_constraints() { assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); // Remove unloaded entries from constraint table for (int index = 0; index < table_size(); index++) { LoaderConstraintEntry** p = bucket_addr(index); while(*p) { LoaderConstraintEntry* probe = *p; - klassOop klass = probe->klass(); + Klass* klass = probe->klass(); // Remove klass that is no longer alive - if (klass != NULL && !is_alive->do_object_b(klass)) { + if (klass != NULL && + klass->class_loader_data()->is_unloading()) { probe->set_klass(NULL); if (TraceLoaderConstraints) { ResourceMark rm; @@ -116,19 +118,18 @@ probe->name()->as_C_string()); for (int i = 0; i < probe->num_loaders(); i++) { tty->print_cr("[ [%d]: %s", i, - SystemDictionary::loader_name(probe->loader(i))); + SystemDictionary::loader_name(probe->loader_data(i))); } } } // Remove entries no longer alive from loader array int n = 0; while (n < probe->num_loaders()) { - if (probe->loader(n) != NULL) { - if (!is_alive->do_object_b(probe->loader(n))) { + if (probe->loader_data(n)->is_unloading()) { if (TraceLoaderConstraints) { ResourceMark rm; tty->print_cr("[Purging loader %s from constraint for name %s", - SystemDictionary::loader_name(probe->loader(n)), + SystemDictionary::loader_name(probe->loader_data(n)), probe->name()->as_C_string() ); } @@ -136,22 +137,21 @@ // Compact array int num = probe->num_loaders() - 1; probe->set_num_loaders(num); - probe->set_loader(n, probe->loader(num)); - probe->set_loader(num, NULL); + probe->set_loader_data(n, probe->loader_data(num)); + probe->set_loader_data(num, NULL); if (TraceLoaderConstraints) { ResourceMark rm; tty->print_cr("[New loader list:"); for (int i = 0; i < probe->num_loaders(); i++) { tty->print_cr("[ [%d]: %s", i, - SystemDictionary::loader_name(probe->loader(i))); + SystemDictionary::loader_name(probe->loader_data(i))); } } continue; // current element replaced, so restart without // incrementing n } - } n++; } // Check whether entry should be purged @@ -169,12 +169,9 @@ } else { #ifdef ASSERT if (probe->klass() != NULL) { - assert(is_alive->do_object_b(probe->klass()), "klass should be live"); - } - for (n = 0; n < probe->num_loaders(); n++) { - if (probe->loader(n) != NULL) { - assert(is_alive->do_object_b(probe->loader(n)), "loader should be live"); - } + ClassLoaderData* loader_data = + probe->klass()->class_loader_data(); + assert(!loader_data->is_unloading(), "klass should be live"); } #endif // Go to next entry @@ -185,14 +182,14 @@ } bool LoaderConstraintTable::add_entry(Symbol* class_name, - klassOop klass1, Handle class_loader1, - klassOop klass2, Handle class_loader2) { + Klass* klass1, Handle class_loader1, + Klass* klass2, Handle class_loader2) { int failure_code = 0; // encode different reasons for failing if (klass1 != NULL && klass2 != NULL && klass1 != klass2) { failure_code = 1; } else { - klassOop klass = klass1 != NULL ? klass1 : klass2; + Klass* klass = klass1 != NULL ? klass1 : klass2; LoaderConstraintEntry** pp1 = find_loader_constraint(class_name, class_loader1); @@ -224,7 +221,7 @@ int index = hash_to_index(hash); LoaderConstraintEntry* p; p = new_entry(hash, class_name, klass, 2, 2); - p->set_loaders(NEW_C_HEAP_ARRAY(oop, 2, mtClass)); + p->set_loaders(NEW_C_HEAP_ARRAY(ClassLoaderData*, 2, mtClass)); p->set_loader(0, class_loader1()); p->set_loader(1, class_loader2()); p->set_klass(klass); @@ -319,11 +316,11 @@ } } -klassOop LoaderConstraintTable::find_constrained_klass(Symbol* name, +Klass* LoaderConstraintTable::find_constrained_klass(Symbol* name, Handle loader) { LoaderConstraintEntry *p = *(find_loader_constraint(name, loader)); if (p != NULL && p->klass() != NULL) { - if (Klass::cast(p->klass())->oop_is_instance() && !instanceKlass::cast(p->klass())->is_loaded()) { + if (Klass::cast(p->klass())->oop_is_instance() && !InstanceKlass::cast(p->klass())->is_loaded()) { // Only return fully loaded classes. Classes found through the // constraints might still be in the process of loading. return NULL; @@ -340,10 +337,10 @@ int nfree) { if (p->max_loaders() - p->num_loaders() < nfree) { int n = nfree + p->num_loaders(); - oop* new_loaders = NEW_C_HEAP_ARRAY(oop, n, mtClass); - memcpy(new_loaders, p->loaders(), sizeof(oop) * p->num_loaders()); + ClassLoaderData** new_loaders = NEW_C_HEAP_ARRAY(ClassLoaderData*, n, mtClass); + memcpy(new_loaders, p->loaders(), sizeof(ClassLoaderData*) * p->num_loaders()); p->set_max_loaders(n); - FREE_C_HEAP_ARRAY(oop, p->loaders(), mtClass); + FREE_C_HEAP_ARRAY(ClassLoaderData*, p->loaders(), mtClass); p->set_loaders(new_loaders); } } @@ -351,7 +348,7 @@ void LoaderConstraintTable::extend_loader_constraint(LoaderConstraintEntry* p, Handle loader, - klassOop klass) { + Klass* klass) { ensure_loader_constraint_capacity(p, 1); int num = p->num_loaders(); p->set_loader(num, loader()); @@ -376,7 +373,7 @@ void LoaderConstraintTable::merge_loader_constraints( LoaderConstraintEntry** pp1, LoaderConstraintEntry** pp2, - klassOop klass) { + Klass* klass) { // make sure *pp1 has higher capacity if ((*pp1)->max_loaders() < (*pp2)->max_loaders()) { LoaderConstraintEntry** tmp = pp2; @@ -391,7 +388,7 @@ for (int i = 0; i < p2->num_loaders(); i++) { int num = p1->num_loaders(); - p1->set_loader(num, p2->loader(i)); + p1->set_loader_data(num, p2->loader_data(i)); p1->set_num_loaders(num + 1); } @@ -403,7 +400,7 @@ for (int i = 0; i < p1->num_loaders(); i++) { tty->print_cr("[ [%d]: %s", i, - SystemDictionary::loader_name(p1->loader(i))); + SystemDictionary::loader_name(p1->loader_data(i))); } if (p1->klass() == NULL) { tty->print_cr("[... and setting class object]"); @@ -439,33 +436,33 @@ probe != NULL; probe = probe->next()) { if (probe->klass() != NULL) { - instanceKlass* ik = instanceKlass::cast(probe->klass()); + InstanceKlass* ik = InstanceKlass::cast(probe->klass()); guarantee(ik->name() == probe->name(), "name should match"); Symbol* name = ik->name(); - Handle loader(thread, ik->class_loader()); - unsigned int d_hash = dictionary->compute_hash(name, loader); + ClassLoaderData* loader_data = ik->class_loader_data(); + unsigned int d_hash = dictionary->compute_hash(name, loader_data); int d_index = dictionary->hash_to_index(d_hash); - klassOop k = dictionary->find_class(d_index, d_hash, name, loader); + Klass* k = dictionary->find_class(d_index, d_hash, name, loader_data); if (k != NULL) { // We found the class in the system dictionary, so we should - // make sure that the klassOop matches what we already have. + // make sure that the Klass* matches what we already have. guarantee(k == probe->klass(), "klass should be in dictionary"); } else { // If we don't find the class in the system dictionary, it // has to be in the placeholders table. - unsigned int p_hash = placeholders->compute_hash(name, loader); + unsigned int p_hash = placeholders->compute_hash(name, loader_data); int p_index = placeholders->hash_to_index(p_hash); PlaceholderEntry* entry = placeholders->get_entry(p_index, p_hash, - name, loader); + name, loader_data); - // The instanceKlass might not be on the entry, so the only + // The InstanceKlass might not be on the entry, so the only // thing we can check here is whether we were successful in // finding the class in the placeholders table. guarantee(entry != NULL, "klass should be in the placeholders"); } } for (int n = 0; n< probe->num_loaders(); n++) { - guarantee(probe->loader(n)->is_oop_or_null(), "should be oop"); + assert(ClassLoaderDataGraph::contains_loader_data(probe->loader_data(n)), "The loader is missing"); } } } @@ -487,7 +484,7 @@ probe->name()->print(); tty->print(" , loaders:"); for (int n = 0; n < probe->num_loaders(); n++) { - probe->loader(n)->print_value(); + probe->loader_data(n)->print_value(); tty->print(", "); } tty->cr(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/loaderConstraints.hpp --- a/src/share/vm/classfile/loaderConstraints.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/loaderConstraints.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,8 +30,9 @@ #include "utilities/hashtable.hpp" class LoaderConstraintEntry; +class Symbol; -class LoaderConstraintTable : public Hashtable { +class LoaderConstraintTable : public Hashtable { friend class VMStructs; private: @@ -48,45 +49,45 @@ LoaderConstraintTable(int nof_buckets); LoaderConstraintEntry* new_entry(unsigned int hash, Symbol* name, - klassOop klass, int num_loaders, + Klass* klass, int num_loaders, int max_loaders); void free_entry(LoaderConstraintEntry *entry); LoaderConstraintEntry* bucket(int i) { - return (LoaderConstraintEntry*)Hashtable::bucket(i); + return (LoaderConstraintEntry*)Hashtable::bucket(i); } LoaderConstraintEntry** bucket_addr(int i) { - return (LoaderConstraintEntry**)Hashtable::bucket_addr(i); + return (LoaderConstraintEntry**)Hashtable::bucket_addr(i); } - // GC support - void oops_do(OopClosure* f); + // Enhanced Class Redefinition support + void classes_do(KlassClosure* f); // Check class loader constraints - bool add_entry(Symbol* name, klassOop klass1, Handle loader1, - klassOop klass2, Handle loader2); + bool add_entry(Symbol* name, Klass* klass1, Handle loader1, + Klass* klass2, Handle loader2); // Note: The main entry point for this module is via SystemDictionary. // SystemDictionary::check_signature_loaders(Symbol* signature, // Handle loader1, Handle loader2, // bool is_method, TRAPS) - klassOop find_constrained_klass(Symbol* name, Handle loader); + Klass* find_constrained_klass(Symbol* name, Handle loader); // Class loader constraints void ensure_loader_constraint_capacity(LoaderConstraintEntry *p, int nfree); void extend_loader_constraint(LoaderConstraintEntry* p, Handle loader, - klassOop klass); + Klass* klass); void merge_loader_constraints(LoaderConstraintEntry** pp1, - LoaderConstraintEntry** pp2, klassOop klass); + LoaderConstraintEntry** pp2, Klass* klass); bool check_or_update(instanceKlassHandle k, Handle loader, Symbol* name); - void purge_loader_constraints(BoolObjectClosure* is_alive); + void purge_loader_constraints(); void verify(Dictionary* dictionary, PlaceholderTable* placeholders); #ifndef PRODUCT @@ -94,29 +95,32 @@ #endif }; -class LoaderConstraintEntry : public HashtableEntry { +class LoaderConstraintEntry : public HashtableEntry { friend class VMStructs; private: Symbol* _name; // class name int _num_loaders; int _max_loaders; - oop* _loaders; // initiating loaders + // Loader constraints enforce correct linking behavior. + // Thus, it really operates on ClassLoaderData which represents linking domain, + // not class loaders. + ClassLoaderData** _loaders; // initiating loaders public: - klassOop klass() { return literal(); } - klassOop* klass_addr() { return literal_addr(); } - void set_klass(klassOop k) { set_literal(k); } + Klass* klass() { return literal(); } + Klass** klass_addr() { return literal_addr(); } + void set_klass(Klass* k) { set_literal(k); } LoaderConstraintEntry* next() { - return (LoaderConstraintEntry*)HashtableEntry::next(); + return (LoaderConstraintEntry*)HashtableEntry::next(); } LoaderConstraintEntry** next_addr() { - return (LoaderConstraintEntry**)HashtableEntry::next_addr(); + return (LoaderConstraintEntry**)HashtableEntry::next_addr(); } void set_next(LoaderConstraintEntry* next) { - HashtableEntry::set_next(next); + HashtableEntry::set_next(next); } Symbol* name() { return _name; } @@ -131,13 +135,13 @@ int max_loaders() { return _max_loaders; } void set_max_loaders(int i) { _max_loaders = i; } - oop* loaders() { return _loaders; } - void set_loaders(oop* loaders) { _loaders = loaders; } + ClassLoaderData** loaders() { return _loaders; } + void set_loaders(ClassLoaderData** loaders) { _loaders = loaders; } - oop loader(int i) { return _loaders[i]; } - oop* loader_addr(int i) { return &_loaders[i]; } - void set_loader(int i, oop p) { _loaders[i] = p; } - + ClassLoaderData* loader_data(int i) { return _loaders[i]; } + void set_loader_data(int i, ClassLoaderData* p) { _loaders[i] = p; } + // convenience + void set_loader(int i, oop p); }; #endif // SHARE_VM_CLASSFILE_LOADERCONSTRAINTS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/placeholders.cpp --- a/src/share/vm/classfile/placeholders.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/placeholders.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,12 +32,13 @@ // Placeholder methods PlaceholderEntry* PlaceholderTable::new_entry(int hash, Symbol* name, - oop loader, bool havesupername, + ClassLoaderData* loader_data, + bool havesupername, Symbol* supername) { PlaceholderEntry* entry = (PlaceholderEntry*)Hashtable::new_entry(hash, name); // Hashtable with Symbol* literal must increment and decrement refcount. name->increment_refcount(); - entry->set_loader(loader); + entry->set_loader_data(loader_data); entry->set_havesupername(havesupername); entry->set_supername(supername); entry->set_superThreadQ(NULL); @@ -61,14 +62,14 @@ // SystemDictionary_lock, so we don't need special precautions // on store ordering here. void PlaceholderTable::add_entry(int index, unsigned int hash, - Symbol* class_name, Handle class_loader, + Symbol* class_name, ClassLoaderData* loader_data, bool havesupername, Symbol* supername){ assert_locked_or_safepoint(SystemDictionary_lock); assert(class_name != NULL, "adding NULL obj"); // Both readers and writers are locked so it's safe to just // create the placeholder and insert it in the list without a membar. - PlaceholderEntry* entry = new_entry(hash, class_name, class_loader(), havesupername, supername); + PlaceholderEntry* entry = new_entry(hash, class_name, loader_data, havesupername, supername); add_entry(index, entry); } @@ -76,12 +77,12 @@ // Remove a placeholder object. void PlaceholderTable::remove_entry(int index, unsigned int hash, Symbol* class_name, - Handle class_loader) { + ClassLoaderData* loader_data) { assert_locked_or_safepoint(SystemDictionary_lock); PlaceholderEntry** p = bucket_addr(index); while (*p) { PlaceholderEntry *probe = *p; - if (probe->hash() == hash && probe->equals(class_name, class_loader())) { + if (probe->hash() == hash && probe->equals(class_name, loader_data)) { // Delete entry *p = probe->next(); free_entry(probe); @@ -93,16 +94,14 @@ PlaceholderEntry* PlaceholderTable::get_entry(int index, unsigned int hash, Symbol* class_name, - Handle class_loader) { + ClassLoaderData* loader_data) { assert_locked_or_safepoint(SystemDictionary_lock); - oop class_loader_ = class_loader(); - for (PlaceholderEntry *place_probe = bucket(index); place_probe != NULL; place_probe = place_probe->next()) { if (place_probe->hash() == hash && - place_probe->equals(class_name, class_loader_)) { + place_probe->equals(class_name, loader_data)) { return place_probe; } } @@ -111,8 +110,8 @@ Symbol* PlaceholderTable::find_entry(int index, unsigned int hash, Symbol* class_name, - Handle class_loader) { - PlaceholderEntry* probe = get_entry(index, hash, class_name, class_loader); + ClassLoaderData* loader_data) { + PlaceholderEntry* probe = get_entry(index, hash, class_name, loader_data); return (probe? probe->klassname(): (Symbol*)NULL); } @@ -121,12 +120,17 @@ // If entry exists, reuse entry // For both, push SeenThread for classloadAction // if havesupername: this is used for circularity for instanceklass loading -PlaceholderEntry* PlaceholderTable::find_and_add(int index, unsigned int hash, Symbol* name, Handle loader, classloadAction action, Symbol* supername, Thread* thread) { - PlaceholderEntry* probe = get_entry(index, hash, name, loader); +PlaceholderEntry* PlaceholderTable::find_and_add(int index, unsigned int hash, + Symbol* name, + ClassLoaderData* loader_data, + classloadAction action, + Symbol* supername, + Thread* thread) { + PlaceholderEntry* probe = get_entry(index, hash, name, loader_data); if (probe == NULL) { // Nothing found, add place holder - add_entry(index, hash, name, loader, (action == LOAD_SUPER), supername); - probe = get_entry(index, hash, name, loader); + add_entry(index, hash, name, loader_data, (action == LOAD_SUPER), supername); + probe = get_entry(index, hash, name, loader_data); } else { if (action == LOAD_SUPER) { probe->set_havesupername(true); @@ -153,14 +157,14 @@ // Therefore - must always check SD first // Ignores the case where entry is not found void PlaceholderTable::find_and_remove(int index, unsigned int hash, - Symbol* name, Handle loader, Thread* thread) { + Symbol* name, ClassLoaderData* loader_data, Thread* thread) { assert_locked_or_safepoint(SystemDictionary_lock); - PlaceholderEntry *probe = get_entry(index, hash, name, loader); + PlaceholderEntry *probe = get_entry(index, hash, name, loader_data); if (probe != NULL) { // No other threads using this entry if ((probe->superThreadQ() == NULL) && (probe->loadInstanceThreadQ() == NULL) && (probe->defineThreadQ() == NULL) && (probe->definer() == NULL)) { - remove_entry(index, hash, name, loader); + remove_entry(index, hash, name, loader_data); } } } @@ -170,34 +174,31 @@ } -void PlaceholderTable::oops_do(OopClosure* f) { +void PlaceholderTable::classes_do(KlassClosure* f) { for (int index = 0; index < table_size(); index++) { for (PlaceholderEntry* probe = bucket(index); probe != NULL; probe = probe->next()) { - probe->oops_do(f); + probe->classes_do(f); } } } -void PlaceholderEntry::oops_do(OopClosure* blk) { +void PlaceholderEntry::classes_do(KlassClosure* closure) { assert(klassname() != NULL, "should have a non-null klass"); - if (_loader != NULL) { - blk->do_oop(loader_addr()); - } if (_instanceKlass != NULL) { - blk->do_oop((oop*)instanceKlass_addr()); + closure->do_klass(InstanceKlass()); } } // do all entries in the placeholder table -void PlaceholderTable::entries_do(void f(Symbol*, oop)) { +void PlaceholderTable::entries_do(void f(Symbol*)) { for (int index = 0; index < table_size(); index++) { for (PlaceholderEntry* probe = bucket(index); probe != NULL; probe = probe->next()) { - f(probe->klassname(), probe->loader()); + f(probe->klassname()); } } } @@ -207,9 +208,9 @@ // Note, doesn't append a cr void PlaceholderEntry::print() const { klassname()->print_value(); - if (loader() != NULL) { + if (loader_data() != NULL) { tty->print(", loader "); - loader()->print_value(); + loader_data()->print_value(); } if (supername() != NULL) { tty->print(", supername "); @@ -219,9 +220,9 @@ tty->print(", definer "); definer()->print_value(); } - if (instanceKlass() != NULL) { - tty->print(", instanceKlass "); - instanceKlass()->print_value(); + if (InstanceKlass() != NULL) { + tty->print(", InstanceKlass "); + InstanceKlass()->print_value(); } tty->print("\n"); tty->print("loadInstanceThreadQ threads:"); @@ -237,11 +238,12 @@ #endif void PlaceholderEntry::verify() const { - guarantee(loader() == NULL || loader()->is_instance(), + guarantee(loader_data() != NULL, "Must have been setup."); + guarantee(loader_data()->class_loader() == NULL || loader_data()->class_loader()->is_instance(), "checking type of _loader"); - guarantee(instanceKlass() == NULL - || Klass::cast(instanceKlass())->oop_is_instance(), - "checking type of instanceKlass result"); + guarantee(InstanceKlass() == NULL + || Klass::cast(InstanceKlass())->oop_is_instance(), + "checking type of InstanceKlass result"); } void PlaceholderTable::verify() { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/placeholders.hpp --- a/src/share/vm/classfile/placeholders.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/placeholders.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,7 +40,7 @@ public: PlaceholderTable(int table_size); - PlaceholderEntry* new_entry(int hash, Symbol* name, oop loader, bool havesupername, Symbol* supername); + PlaceholderEntry* new_entry(int hash, Symbol* name, ClassLoaderData* loader_data, bool havesupername, Symbol* supername); void free_entry(PlaceholderEntry* entry); PlaceholderEntry* bucket(int i) { @@ -56,14 +56,14 @@ } void add_entry(int index, unsigned int hash, Symbol* name, - Handle loader, bool havesupername, Symbol* supername); + ClassLoaderData* loader_data, bool havesupername, Symbol* supername); // This returns a Symbol* to match type for SystemDictionary Symbol* find_entry(int index, unsigned int hash, - Symbol* name, Handle loader); + Symbol* name, ClassLoaderData* loader_data); PlaceholderEntry* get_entry(int index, unsigned int hash, - Symbol* name, Handle loader); + Symbol* name, ClassLoaderData* loader_data); // caller to create a placeholder entry must enumerate an action // caller claims ownership of that action @@ -85,22 +85,22 @@ // If no entry exists, add a placeholder entry and push SeenThread // If entry exists, reuse entry and push SeenThread for classloadAction PlaceholderEntry* find_and_add(int index, unsigned int hash, - Symbol* name, Handle loader, + Symbol* name, ClassLoaderData* loader_data, classloadAction action, Symbol* supername, Thread* thread); void remove_entry(int index, unsigned int hash, - Symbol* name, Handle loader); + Symbol* name, ClassLoaderData* loader_data); // Remove placeholder information void find_and_remove(int index, unsigned int hash, - Symbol* name, Handle loader, Thread* thread); + Symbol* name, ClassLoaderData* loader_data, Thread* thread); // GC support. - void oops_do(OopClosure* f); + void classes_do(KlassClosure* f); // JVMTI support - void entries_do(void f(Symbol*, oop)); + void entries_do(void f(Symbol*)); #ifndef PRODUCT void print(); @@ -157,11 +157,11 @@ private: - oop _loader; // initiating loader + ClassLoaderData* _loader_data; // initiating loader bool _havesupername; // distinguish between null supername, and unknown Symbol* _supername; Thread* _definer; // owner of define token - klassOop _instanceKlass; // instanceKlass from successful define + Klass* _instanceKlass; // InstanceKlass from successful define SeenThread* _superThreadQ; // doubly-linked queue of Threads loading a superclass for this class SeenThread* _loadInstanceThreadQ; // loadInstance thread // can be multiple threads if classloader object lock broken by application @@ -176,9 +176,8 @@ // Simple accessors, used only by SystemDictionary Symbol* klassname() const { return literal(); } - oop loader() const { return _loader; } - void set_loader(oop loader) { _loader = loader; } - oop* loader_addr() { return &_loader; } + ClassLoaderData* loader_data() const { return _loader_data; } + void set_loader_data(ClassLoaderData* loader_data) { _loader_data = loader_data; } bool havesupername() const { return _havesupername; } void set_havesupername(bool havesupername) { _havesupername = havesupername; } @@ -192,9 +191,8 @@ Thread* definer() const {return _definer; } void set_definer(Thread* definer) { _definer = definer; } - klassOop instanceKlass() const {return _instanceKlass; } - void set_instanceKlass(klassOop instanceKlass) { _instanceKlass = instanceKlass; } - klassOop* instanceKlass_addr() { return &_instanceKlass; } + Klass* InstanceKlass() const {return _instanceKlass; } + void set_instanceKlass(Klass* InstanceKlass) { _instanceKlass = InstanceKlass; } SeenThread* superThreadQ() const { return _superThreadQ; } void set_superThreadQ(SeenThread* SeenThread) { _superThreadQ = SeenThread; } @@ -215,8 +213,8 @@ // Test for equality // Entries are unique for class/classloader name pair - bool equals(Symbol* class_name, oop class_loader) const { - return (klassname() == class_name && loader() == class_loader); + bool equals(Symbol* class_name, ClassLoaderData* loader) const { + return (klassname() == class_name && loader_data() == loader); } SeenThread* actionToQueue(PlaceholderTable::classloadAction action) { @@ -331,7 +329,7 @@ // GC support // Applies "f->do_oop" to all root oops in the placeholder table. - void oops_do(OopClosure* blk); + void classes_do(KlassClosure* closure); // Print method doesn't append a cr void print() const PRODUCT_RETURN; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/resolutionErrors.cpp --- a/src/share/vm/classfile/resolutionErrors.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/resolutionErrors.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -64,10 +64,10 @@ } // create new error entry -ResolutionErrorEntry* ResolutionErrorTable::new_entry(int hash, constantPoolOop pool, +ResolutionErrorEntry* ResolutionErrorTable::new_entry(int hash, ConstantPool* pool, int cp_index, Symbol* error) { - ResolutionErrorEntry* entry = (ResolutionErrorEntry*)Hashtable::new_entry(hash, pool); + ResolutionErrorEntry* entry = (ResolutionErrorEntry*)Hashtable::new_entry(hash, pool); entry->set_cp_index(cp_index); NOT_PRODUCT(entry->set_error(NULL);) entry->set_error(error); @@ -79,42 +79,46 @@ // decrement error refcount assert(entry->error() != NULL, "error should be set"); entry->error()->decrement_refcount(); - Hashtable::free_entry(entry); + Hashtable::free_entry(entry); } // create resolution error table ResolutionErrorTable::ResolutionErrorTable(int table_size) - : Hashtable(table_size, sizeof(ResolutionErrorEntry)) { + : Hashtable(table_size, sizeof(ResolutionErrorEntry)) { } -// GC support -void ResolutionErrorTable::oops_do(OopClosure* f) { +// RedefineClasses support - remove matching entry of a +// constant pool that is going away +void ResolutionErrorTable::delete_entry(ConstantPool* c) { + assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); for (int i = 0; i < table_size(); i++) { - for (ResolutionErrorEntry* probe = bucket(i); - probe != NULL; - probe = probe->next()) { - assert(probe->pool() != (constantPoolOop)NULL, "resolution error table is corrupt"); - assert(probe->error() != (Symbol*)NULL, "resolution error table is corrupt"); - probe->oops_do(f); + for (ResolutionErrorEntry** p = bucket_addr(i); *p != NULL; ) { + ResolutionErrorEntry* entry = *p; + assert(entry->pool() != NULL, "resolution error table is corrupt"); + if (entry->pool() == c) { + *p = entry->next(); + free_entry(entry); + } else { + p = entry->next_addr(); + } } } } -// GC support -void ResolutionErrorEntry::oops_do(OopClosure* blk) { - blk->do_oop((oop*)pool_addr()); -} // Remove unloaded entries from the table -void ResolutionErrorTable::purge_resolution_errors(BoolObjectClosure* is_alive) { +void ResolutionErrorTable::purge_resolution_errors() { assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); for (int i = 0; i < table_size(); i++) { for (ResolutionErrorEntry** p = bucket_addr(i); *p != NULL; ) { ResolutionErrorEntry* entry = *p; - assert(entry->pool() != (constantPoolOop)NULL, "resolution error table is corrupt"); - constantPoolOop pool = entry->pool(); - if (is_alive->do_object_b(pool)) { + assert(entry->pool() != (ConstantPool*)NULL, "resolution error table is corrupt"); + ConstantPool* pool = entry->pool(); + assert(pool->pool_holder() != NULL, "Constant pool without a class?"); + ClassLoaderData* loader_data = + pool->pool_holder()->class_loader_data(); + if (!loader_data->is_unloading()) { p = entry->next_addr(); } else { *p = entry->next(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/resolutionErrors.hpp --- a/src/share/vm/classfile/resolutionErrors.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/resolutionErrors.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ #ifndef SHARE_VM_CLASSFILE_RESOLUTIONERRORS_HPP #define SHARE_VM_CLASSFILE_RESOLUTIONERRORS_HPP -#include "oops/constantPoolOop.hpp" +#include "oops/constantPool.hpp" #include "utilities/hashtable.hpp" class ResolutionErrorEntry; @@ -33,25 +33,25 @@ // ResolutionError objects are used to record errors encountered during // constant pool resolution (JVMS 5.4.3). -class ResolutionErrorTable : public Hashtable { +class ResolutionErrorTable : public Hashtable { public: ResolutionErrorTable(int table_size); - ResolutionErrorEntry* new_entry(int hash, constantPoolOop pool, int cp_index, Symbol* error); + ResolutionErrorEntry* new_entry(int hash, ConstantPool* pool, int cp_index, Symbol* error); void free_entry(ResolutionErrorEntry *entry); ResolutionErrorEntry* bucket(int i) { - return (ResolutionErrorEntry*)Hashtable::bucket(i); + return (ResolutionErrorEntry*)Hashtable::bucket(i); } ResolutionErrorEntry** bucket_addr(int i) { - return (ResolutionErrorEntry**)Hashtable::bucket_addr(i); + return (ResolutionErrorEntry**)Hashtable::bucket_addr(i); } void add_entry(int index, ResolutionErrorEntry* new_entry) { - Hashtable::add_entry(index, - (HashtableEntry*)new_entry); + Hashtable::add_entry(index, + (HashtableEntry*)new_entry); } void add_entry(int index, unsigned int hash, @@ -68,21 +68,21 @@ } // purges unloaded entries from the table - void purge_resolution_errors(BoolObjectClosure* is_alive); + void purge_resolution_errors(); - // GC support. - void oops_do(OopClosure* f); + // RedefineClasses support - remove obsolete constant pool entry + void delete_entry(ConstantPool* c); }; -class ResolutionErrorEntry : public HashtableEntry { +class ResolutionErrorEntry : public HashtableEntry { private: int _cp_index; Symbol* _error; public: - constantPoolOop pool() const { return (constantPoolOop)literal(); } - constantPoolOop* pool_addr() { return (constantPoolOop*)literal_addr(); } + ConstantPool* pool() const { return (ConstantPool*)literal(); } + ConstantPool** pool_addr() { return (ConstantPool**)literal_addr(); } int cp_index() const { return _cp_index; } void set_cp_index(int cp_index) { _cp_index = cp_index; } @@ -91,15 +91,12 @@ void set_error(Symbol* e); ResolutionErrorEntry* next() const { - return (ResolutionErrorEntry*)HashtableEntry::next(); + return (ResolutionErrorEntry*)HashtableEntry::next(); } ResolutionErrorEntry** next_addr() { - return (ResolutionErrorEntry**)HashtableEntry::next_addr(); + return (ResolutionErrorEntry**)HashtableEntry::next_addr(); } - - // GC support - void oops_do(OopClosure* blk); }; #endif // SHARE_VM_CLASSFILE_RESOLUTIONERRORS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/stackMapFrame.hpp --- a/src/share/vm/classfile/stackMapFrame.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/stackMapFrame.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -27,7 +27,7 @@ #include "classfile/verificationType.hpp" #include "classfile/verifier.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "runtime/handles.hpp" #include "runtime/signature.hpp" #include "utilities/exceptions.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/stackMapTable.hpp --- a/src/share/vm/classfile/stackMapTable.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/stackMapTable.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -28,8 +28,8 @@ #include "classfile/stackMapFrame.hpp" #include "classfile/verifier.hpp" #include "memory/allocation.hpp" -#include "oops/constantPoolOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/constantPool.hpp" +#include "oops/method.hpp" #include "utilities/globalDefinitions.hpp" #ifdef TARGET_ARCH_x86 # include "bytes_x86.hpp" @@ -99,23 +99,23 @@ class StackMapStream : StackObj { private: - typeArrayHandle _data; + Array* _data; int _index; public: - StackMapStream(typeArrayHandle ah) + StackMapStream(Array* ah) : _data(ah), _index(0) { } u1 get_u1(TRAPS) { if (_data == NULL || _index >= _data->length()) { stackmap_format_error("access beyond the end of attribute", CHECK_0); } - return _data->byte_at(_index++); + return _data->at(_index++); } u2 get_u2(TRAPS) { if (_data == NULL || _index >= _data->length() - 1) { stackmap_format_error("access beyond the end of attribute", CHECK_0); } - u2 res = Bytes::get_Java_u2((u1*)_data->byte_at_addr(_index)); + u2 res = Bytes::get_Java_u2(_data->adr_at(_index)); _index += 2; return res; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/symbolTable.cpp --- a/src/share/vm/classfile/symbolTable.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/symbolTable.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -48,15 +48,19 @@ assert (len <= Symbol::max_length(), "should be checked by caller"); Symbol* sym; - // Allocate symbols in the C heap when dumping shared spaces in case there - // are temporary symbols we can remove. - if (c_heap || DumpSharedSpaces) { + + if (c_heap) { // refcount starts as 1 + assert(!DumpSharedSpaces, "never allocate to C heap"); sym = new (len, THREAD) Symbol(name, len, 1); + assert(sym != NULL, "new should call vm_exit_out_of_memory if C_HEAP is exhausted"); + } else { + if (DumpSharedSpaces) { + sym = new (len, ClassLoaderData::the_null_class_loader_data(), THREAD) Symbol(name, len, -1); } else { sym = new (len, arena(), THREAD) Symbol(name, len, -1); } - assert(sym != NULL, "new should call vm_exit_out_of_memory if C_HEAP is exhausted"); + } return sym; } @@ -102,7 +106,7 @@ break; } Symbol* s = entry->literal(); - memory_total += s->object_size(); + memory_total += s->size(); total++; assert(s != NULL, "just checking"); // If reference count is zero, remove. @@ -302,7 +306,7 @@ } } -void SymbolTable::add(Handle class_loader, constantPoolHandle cp, +void SymbolTable::add(ClassLoaderData* loader_data, constantPoolHandle cp, int names_count, const char** names, int* lengths, int* cp_indices, unsigned int* hashValues, TRAPS) { @@ -310,13 +314,13 @@ MutexLocker ml(SymbolTable_lock, THREAD); SymbolTable* table = the_table(); - bool added = table->basic_add(class_loader, cp, names_count, names, lengths, + bool added = table->basic_add(loader_data, cp, names_count, names, lengths, cp_indices, hashValues, CHECK); if (!added) { // do it the hard way for (int i=0; ihash_to_index(hashValues[i]); - bool c_heap = class_loader() != NULL; + bool c_heap = !loader_data->is_the_null_class_loader_data(); Symbol* sym = table->basic_add(index, (u1*)names[i], lengths[i], hashValues[i], c_heap, CHECK); cp->symbol_at_put(cp_indices[i], sym); } @@ -383,7 +387,7 @@ // This version of basic_add adds symbols in batch from the constant pool // parsing. -bool SymbolTable::basic_add(Handle class_loader, constantPoolHandle cp, +bool SymbolTable::basic_add(ClassLoaderData* loader_data, constantPoolHandle cp, int names_count, const char** names, int* lengths, int* cp_indices, unsigned int* hashValues, @@ -421,7 +425,7 @@ } else { // Create a new symbol. The null class loader is never unloaded so these // are allocated specially in a permanent arena. - bool c_heap = class_loader() != NULL; + bool c_heap = !loader_data->is_the_null_class_loader_data(); Symbol* sym = allocate_symbol((const u1*)names[i], lengths[i], c_heap, CHECK_(false)); assert(sym->equals(names[i], lengths[i]), "symbol must be properly initialized"); // why wouldn't it be??? HashtableEntry* entry = new_entry(hashValue, sym); @@ -490,7 +494,7 @@ for (i = 0; i < the_table()->table_size(); i++) { HashtableEntry* p = the_table()->bucket(i); for ( ; p != NULL; p = p->next()) { - memory_total += p->literal()->object_size(); + memory_total += p->literal()->size(); count++; int counter = p->literal()->utf8_length(); total += counter; @@ -695,10 +699,10 @@ Handle string; // try to reuse the string if possible - if (!string_or_null.is_null() && (!JavaObjectsInPerm || string_or_null()->is_perm())) { + if (!string_or_null.is_null()) { string = string_or_null; } else { - string = java_lang_String::create_tenured_from_unicode(name, len, CHECK_NULL); + string = java_lang_String::create_from_unicode(name, len, CHECK_NULL); } // Grab the StringTable_lock before getting the_table() because it could @@ -797,7 +801,6 @@ for ( ; p != NULL; p = p->next()) { oop s = p->literal(); guarantee(s != NULL, "interned string is NULL"); - guarantee(s->is_perm() || !JavaObjectsInPerm, "interned string not in permspace"); unsigned int h = java_lang_String::hash_string(s); guarantee(p->hash() == h, "broken hash in string table entry"); guarantee(the_table()->hash_to_index(h) == i, diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/symbolTable.hpp --- a/src/share/vm/classfile/symbolTable.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/symbolTable.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -94,17 +94,17 @@ // Adding elements Symbol* basic_add(int index, u1* name, int len, unsigned int hashValue, bool c_heap, TRAPS); - - bool basic_add(Handle class_loader, constantPoolHandle cp, int names_count, + bool basic_add(ClassLoaderData* loader_data, + constantPoolHandle cp, int names_count, const char** names, int* lengths, int* cp_indices, unsigned int* hashValues, TRAPS); - static void new_symbols(Handle class_loader, constantPoolHandle cp, - int names_count, + static void new_symbols(ClassLoaderData* loader_data, + constantPoolHandle cp, int names_count, const char** name, int* lengths, int* cp_indices, unsigned int* hashValues, TRAPS) { - add(class_loader, cp, names_count, name, lengths, cp_indices, hashValues, THREAD); + add(loader_data, cp, names_count, name, lengths, cp_indices, hashValues, THREAD); } // Table size @@ -170,7 +170,8 @@ static Symbol* lookup_unicode(const jchar* name, int len, TRAPS); static Symbol* lookup_only_unicode(const jchar* name, int len, unsigned int& hash); - static void add(Handle class_loader, constantPoolHandle cp, int names_count, + static void add(ClassLoaderData* loader_data, + constantPoolHandle cp, int names_count, const char** names, int* lengths, int* cp_indices, unsigned int* hashValues, TRAPS); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/systemDictionary.cpp --- a/src/share/vm/classfile/systemDictionary.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/systemDictionary.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/classLoaderData.inline.hpp" #include "classfile/dictionary.hpp" #include "classfile/javaClasses.hpp" #include "classfile/loaderConstraints.hpp" @@ -38,7 +39,7 @@ #include "oops/instanceKlass.hpp" #include "oops/instanceRefKlass.hpp" #include "oops/klass.inline.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.inline2.hpp" @@ -71,10 +72,10 @@ oop SystemDictionary::_system_loader_lock_obj = NULL; -klassOop SystemDictionary::_well_known_klasses[SystemDictionary::WKID_LIMIT] +Klass* SystemDictionary::_well_known_klasses[SystemDictionary::WKID_LIMIT] = { NULL /*, NULL...*/ }; -klassOop SystemDictionary::_box_klasses[T_VOID+1] = { NULL /*, NULL...*/ }; +Klass* SystemDictionary::_box_klasses[T_VOID+1] = { NULL /*, NULL...*/ }; oop SystemDictionary::_java_system_loader = NULL; @@ -82,7 +83,7 @@ bool SystemDictionary::_has_checkPackageAccess = false; // lazily initialized klass variables -volatile klassOop SystemDictionary::_abstract_ownable_synchronizer_klass = NULL; +Klass* volatile SystemDictionary::_abstract_ownable_synchronizer_klass = NULL; // ---------------------------------------------------------------------------- @@ -105,6 +106,11 @@ } +ClassLoaderData* SystemDictionary::register_loader(Handle class_loader) { + if (class_loader() == NULL) return ClassLoaderData::the_null_class_loader_data(); + return ClassLoaderDataGraph::find_or_create(class_loader); +} + // ---------------------------------------------------------------------------- // debugging @@ -145,8 +151,8 @@ // Forwards to resolve_or_null -klassOop SystemDictionary::resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS) { - klassOop klass = resolve_or_null(class_name, class_loader, protection_domain, THREAD); +Klass* SystemDictionary::resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS) { + Klass* klass = resolve_or_null(class_name, class_loader, protection_domain, THREAD); if (HAS_PENDING_EXCEPTION || klass == NULL) { KlassHandle k_h(THREAD, klass); // can return a null klass @@ -155,7 +161,7 @@ return klass; } -klassOop SystemDictionary::handle_resolution_exception(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, KlassHandle klass_h, TRAPS) { +Klass* SystemDictionary::handle_resolution_exception(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, KlassHandle klass_h, TRAPS) { if (HAS_PENDING_EXCEPTION) { // If we have a pending exception we forward it to the caller, unless throw_error is true, // in which case we have to check whether the pending exception is a ClassNotFoundException, @@ -180,11 +186,11 @@ THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), class_name->as_C_string()); } } - return (klassOop)klass_h(); + return (Klass*)klass_h(); } -klassOop SystemDictionary::resolve_or_fail(Symbol* class_name, +Klass* SystemDictionary::resolve_or_fail(Symbol* class_name, bool throw_error, TRAPS) { return resolve_or_fail(class_name, Handle(), Handle(), throw_error, THREAD); @@ -193,11 +199,11 @@ // Forwards to resolve_instance_class_or_null -klassOop SystemDictionary::resolve_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS) { +Klass* SystemDictionary::resolve_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS) { assert(!THREAD->is_Compiler_thread(), err_msg("can not load classes with compiler thread: class=%s, classloader=%s", class_name->as_C_string(), - class_loader.is_null() ? "null" : class_loader->klass()->klass_part()->name()->as_C_string())); + class_loader.is_null() ? "null" : class_loader->klass()->name()->as_C_string())); if (FieldType::is_array(class_name)) { return resolve_array_class_or_null(class_name, class_loader, protection_domain, CHECK_NULL); } else if (FieldType::is_obj(class_name)) { @@ -211,18 +217,18 @@ } } -klassOop SystemDictionary::resolve_or_null(Symbol* class_name, TRAPS) { +Klass* SystemDictionary::resolve_or_null(Symbol* class_name, TRAPS) { return resolve_or_null(class_name, Handle(), Handle(), THREAD); } // Forwards to resolve_instance_class_or_null -klassOop SystemDictionary::resolve_array_class_or_null(Symbol* class_name, +Klass* SystemDictionary::resolve_array_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS) { assert(FieldType::is_array(class_name), "must be array"); - klassOop k = NULL; + Klass* k = NULL; FieldArrayInfo fd; // dimension and object_key in FieldArrayInfo are assigned as a side-effect // of this call @@ -279,7 +285,7 @@ // Must be called, even if superclass is null, since this is // where the placeholder entry is created which claims this // thread is loading this class/classloader. -klassOop SystemDictionary::resolve_super_or_fail(Symbol* child_name, +Klass* SystemDictionary::resolve_super_or_fail(Symbol* child_name, Symbol* class_name, Handle class_loader, Handle protection_domain, @@ -289,7 +295,7 @@ // Try to get one of the well-known klasses. // They are trusted, and do not participate in circularities. if (LinkWellKnownClasses) { - klassOop k = find_well_known_klass(class_name); + Klass* k = find_well_known_klass(class_name); if (k != NULL) { return k; } @@ -300,7 +306,7 @@ // Make sure there's a placeholder for the *child* before resolving. // Used as a claim that this thread is currently loading superclass/classloader // Used here for ClassCircularity checks and also for heap verification - // (every instanceKlass in the heap needs to be in the system dictionary + // (every InstanceKlass in the heap needs to be in the system dictionary // or have a placeholder). // Must check ClassCircularity before checking if super class is already loaded // @@ -311,17 +317,18 @@ // Bugs 4643874, 4715493 // compute_hash can have a safepoint - unsigned int d_hash = dictionary()->compute_hash(child_name, class_loader); + ClassLoaderData* loader_data = class_loader_data(class_loader); + unsigned int d_hash = dictionary()->compute_hash(child_name, loader_data); int d_index = dictionary()->hash_to_index(d_hash); - unsigned int p_hash = placeholders()->compute_hash(child_name, class_loader); + unsigned int p_hash = placeholders()->compute_hash(child_name, loader_data); int p_index = placeholders()->hash_to_index(p_hash); // can't throw error holding a lock bool child_already_loaded = false; bool throw_circularity_error = false; { MutexLocker mu(SystemDictionary_lock, THREAD); - klassOop childk = find_class(d_index, d_hash, child_name, class_loader); - klassOop quicksuperk; + Klass* childk = find_class(d_index, d_hash, child_name, loader_data); + Klass* quicksuperk; // to support // loading: if child done loading, just return superclass // if class_name, & class_loader don't match: // if initial define, SD update will give LinkageError @@ -329,19 +336,19 @@ // so we don't throw an exception here. // see: nsk redefclass014 & java.lang.instrument Instrument032 if ((childk != NULL ) && (is_superclass) && - ((quicksuperk = instanceKlass::cast(childk)->super()) != NULL) && + ((quicksuperk = InstanceKlass::cast(childk)->super()) != NULL) && ((Klass::cast(quicksuperk)->name() == class_name) && (Klass::cast(quicksuperk)->class_loader() == class_loader()))) { return quicksuperk; } else { - PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, child_name, class_loader); + PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, child_name, loader_data); if (probe && probe->check_seen_thread(THREAD, PlaceholderTable::LOAD_SUPER)) { throw_circularity_error = true; } } if (!throw_circularity_error) { - PlaceholderEntry* newprobe = placeholders()->find_and_add(p_index, p_hash, child_name, class_loader, PlaceholderTable::LOAD_SUPER, class_name, THREAD); + PlaceholderEntry* newprobe = placeholders()->find_and_add(p_index, p_hash, child_name, loader_data, PlaceholderTable::LOAD_SUPER, class_name, THREAD); } } if (throw_circularity_error) { @@ -352,7 +359,7 @@ // java.lang.Object should have been found above assert(class_name != NULL, "null super class for resolving"); // Resolve the super class or interface, check results on return - klassOop superk = NULL; + Klass* superk = NULL; superk = SystemDictionary::resolve_or_null(class_name, class_loader, protection_domain, @@ -365,7 +372,7 @@ // or on error { MutexLocker mu(SystemDictionary_lock, THREAD); - PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, child_name, class_loader); + PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, child_name, loader_data); if (probe != NULL) { probe->remove_seen_thread(THREAD, PlaceholderTable::LOAD_SUPER); } @@ -394,8 +401,6 @@ tty->print(" - loading: "); klass()->print_value_on(tty); tty->cr(); } - assert(class_loader() != NULL, "should not have non-null protection domain for null classloader"); - KlassHandle system_loader(THREAD, SystemDictionary::ClassLoader_klass()); JavaCalls::call_special(&result, class_loader, @@ -422,8 +427,10 @@ { // We recalculate the entry here -- we've called out to java since // the last time it was calculated. + ClassLoaderData* loader_data = class_loader_data(class_loader); + Symbol* kn = klass->name(); - unsigned int d_hash = dictionary()->compute_hash(kn, class_loader); + unsigned int d_hash = dictionary()->compute_hash(kn, loader_data); int d_index = dictionary()->hash_to_index(d_hash); MutexLocker mu(SystemDictionary_lock, THREAD); @@ -436,7 +443,7 @@ // SystemDictionary::do_unloading() asserts that classes are only // unloaded at a safepoint. No_Safepoint_Verifier nosafepoint; - dictionary()->add_protection_domain(d_index, d_hash, klass, class_loader, + dictionary()->add_protection_domain(d_index, d_hash, klass, loader_data, protection_domain, THREAD); } } @@ -493,17 +500,18 @@ // Note: must call resolve_super_or_fail even if null super - // to force placeholder entry creation for this class for circularity detection // Caller must check for pending exception -// Returns non-null klassOop if other thread has completed load +// Returns non-null Klass* if other thread has completed load // and we are done, -// If return null klassOop and no pending exception, the caller must load the class +// If return null Klass* and no pending exception, the caller must load the class instanceKlassHandle SystemDictionary::handle_parallel_super_load( Symbol* name, Symbol* superclassname, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS) { instanceKlassHandle nh = instanceKlassHandle(); // null Handle - unsigned int d_hash = dictionary()->compute_hash(name, class_loader); + ClassLoaderData* loader_data = class_loader_data(class_loader); + unsigned int d_hash = dictionary()->compute_hash(name, loader_data); int d_index = dictionary()->hash_to_index(d_hash); - unsigned int p_hash = placeholders()->compute_hash(name, class_loader); + unsigned int p_hash = placeholders()->compute_hash(name, loader_data); int p_index = placeholders()->hash_to_index(p_hash); // superk is not used, resolve_super called for circularity check only @@ -514,7 +522,7 @@ // and has not yet finished. // In both cases the original caller will clean up the placeholder // entry on error. - klassOop superk = SystemDictionary::resolve_super_or_fail(name, + Klass* superk = SystemDictionary::resolve_super_or_fail(name, superclassname, class_loader, protection_domain, @@ -525,7 +533,7 @@ // data structures). { MutexLocker mu(SystemDictionary_lock, THREAD); - placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD); + placeholders()->find_and_remove(p_index, p_hash, name, loader_data, THREAD); SystemDictionary_lock->notify_all(); } @@ -534,7 +542,7 @@ if (!class_loader.is_null() && is_parallelCapable(class_loader)) { MutexLocker mu(SystemDictionary_lock, THREAD); // Check if classloading completed while we were loading superclass or waiting - klassOop check = find_class(d_index, d_hash, name, class_loader); + Klass* check = find_class(d_index, d_hash, name, loader_data); if (check != NULL) { // Klass is already loaded, so just return it return(instanceKlassHandle(THREAD, check)); @@ -550,12 +558,12 @@ while (super_load_in_progress) { MutexLocker mu(SystemDictionary_lock, THREAD); // Check if classloading completed while we were loading superclass or waiting - klassOop check = find_class(d_index, d_hash, name, class_loader); + Klass* check = find_class(d_index, d_hash, name, loader_data); if (check != NULL) { // Klass is already loaded, so just return it return(instanceKlassHandle(THREAD, check)); } else { - placeholder = placeholders()->get_entry(p_index, p_hash, name, class_loader); + placeholder = placeholders()->get_entry(p_index, p_hash, name, loader_data); if (placeholder && placeholder->super_load_in_progress() ){ // Before UnsyncloadClass: // We only get here if the application has released the @@ -568,7 +576,7 @@ // This logic has the current thread wait once it has done // all the superclass/superinterface loading it can, until // the original thread completes the class loading or fails - // If it completes we will use the resulting instanceKlass + // If it completes we will use the resulting InstanceKlass // which we will find below in the systemDictionary. // We also get here for parallel bootstrap classloader if (class_loader.is_null()) { @@ -586,19 +594,20 @@ } -klassOop SystemDictionary::resolve_instance_class_or_null(Symbol* name, Handle class_loader, Handle protection_domain, TRAPS) { +Klass* SystemDictionary::resolve_instance_class_or_null(Symbol* name, Handle class_loader, Handle protection_domain, TRAPS) { assert(name != NULL && !FieldType::is_array(name) && !FieldType::is_obj(name), "invalid class name"); // UseNewReflection // Fix for 4474172; see evaluation for more details class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader())); + ClassLoaderData *loader_data = register_loader(class_loader); // Do lookup to see if class already exist and the protection domain // has the right access - unsigned int d_hash = dictionary()->compute_hash(name, class_loader); + unsigned int d_hash = dictionary()->compute_hash(name, loader_data); int d_index = dictionary()->hash_to_index(d_hash); - klassOop probe = dictionary()->find(d_index, d_hash, name, class_loader, + Klass* probe = dictionary()->find(d_index, d_hash, name, loader_data, protection_domain, THREAD); if (probe != NULL) return probe; @@ -617,7 +626,7 @@ DoObjectLock = false; } - unsigned int p_hash = placeholders()->compute_hash(name, class_loader); + unsigned int p_hash = placeholders()->compute_hash(name, loader_data); int p_index = placeholders()->hash_to_index(p_hash); // Class is not in SystemDictionary so we have to do loading. @@ -636,13 +645,13 @@ { MutexLocker mu(SystemDictionary_lock, THREAD); - klassOop check = find_class(d_index, d_hash, name, class_loader); + Klass* check = find_class(d_index, d_hash, name, loader_data); if (check != NULL) { // Klass is already loaded, so just return it class_has_been_loaded = true; k = instanceKlassHandle(THREAD, check); } else { - placeholder = placeholders()->get_entry(p_index, p_hash, name, class_loader); + placeholder = placeholders()->get_entry(p_index, p_hash, name, loader_data); if (placeholder && placeholder->super_load_in_progress()) { super_load_in_progress = true; if (placeholder->havesupername() == true) { @@ -695,7 +704,7 @@ { MutexLocker mu(SystemDictionary_lock, THREAD); if (class_loader.is_null() || !is_parallelCapable(class_loader)) { - PlaceholderEntry* oldprobe = placeholders()->get_entry(p_index, p_hash, name, class_loader); + PlaceholderEntry* oldprobe = placeholders()->get_entry(p_index, p_hash, name, loader_data); if (oldprobe) { // only need check_seen_thread once, not on each loop // 6341374 java/lang/Instrument with -Xcomp @@ -715,14 +724,14 @@ double_lock_wait(lockObject, THREAD); } // Check if classloading completed while we were waiting - klassOop check = find_class(d_index, d_hash, name, class_loader); + Klass* check = find_class(d_index, d_hash, name, loader_data); if (check != NULL) { // Klass is already loaded, so just return it k = instanceKlassHandle(THREAD, check); class_has_been_loaded = true; } // check if other thread failed to load and cleaned up - oldprobe = placeholders()->get_entry(p_index, p_hash, name, class_loader); + oldprobe = placeholders()->get_entry(p_index, p_hash, name, loader_data); } } } @@ -732,20 +741,20 @@ // LOAD_INSTANCE in parallel // add placeholder entry even if error - callers will remove on error if (!throw_circularity_error && !class_has_been_loaded) { - PlaceholderEntry* newprobe = placeholders()->find_and_add(p_index, p_hash, name, class_loader, PlaceholderTable::LOAD_INSTANCE, NULL, THREAD); + PlaceholderEntry* newprobe = placeholders()->find_and_add(p_index, p_hash, name, loader_data, PlaceholderTable::LOAD_INSTANCE, NULL, THREAD); // For class loaders that do not acquire the classloader object lock, // if they did not catch another thread holding LOAD_INSTANCE, // need a check analogous to the acquire ObjectLocker/find_class // i.e. now that we hold the LOAD_INSTANCE token on loading this class/CL // one final check if the load has already completed // class loaders holding the ObjectLock shouldn't find the class here - klassOop check = find_class(d_index, d_hash, name, class_loader); + Klass* check = find_class(d_index, d_hash, name, loader_data); if (check != NULL) { // Klass is already loaded, so just return it k = instanceKlassHandle(THREAD, check); class_has_been_loaded = true; newprobe->remove_seen_thread(THREAD, PlaceholderTable::LOAD_INSTANCE); - placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD); + placeholders()->find_and_remove(p_index, p_hash, name, loader_data, THREAD); SystemDictionary_lock->notify_all(); } } @@ -765,7 +774,7 @@ // If they got a linkageError, check if a parallel class load succeeded. // If it did, then for bytecode resolution the specification requires // that we return the same result we did for the other thread, i.e. the - // successfully loaded instanceKlass + // successfully loaded InstanceKlass // Should not get here for classloaders that support parallelism // with the new cleaner mechanism, even with AllowParallelDefineClass // Bootstrap goes through here to allow for an extra guarantee check @@ -773,7 +782,7 @@ if (k.is_null() && HAS_PENDING_EXCEPTION && PENDING_EXCEPTION->is_a(SystemDictionary::LinkageError_klass())) { MutexLocker mu(SystemDictionary_lock, THREAD); - klassOop check = find_class(d_index, d_hash, name, class_loader); + Klass* check = find_class(d_index, d_hash, name, loader_data); if (check != NULL) { // Klass is already loaded, so just use it k = instanceKlassHandle(THREAD, check); @@ -789,10 +798,10 @@ // calling load_instance_class { MutexLocker mu(SystemDictionary_lock, THREAD); - PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, name, class_loader); + PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, name, loader_data); if (probe != NULL) { probe->remove_seen_thread(THREAD, PlaceholderTable::LOAD_INSTANCE); - placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD); + placeholders()->find_and_remove(p_index, p_hash, name, loader_data, THREAD); SystemDictionary_lock->notify_all(); } } @@ -824,7 +833,7 @@ // On error, clean up placeholders { MutexLocker mu(SystemDictionary_lock, THREAD); - placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD); + placeholders()->find_and_remove(p_index, p_hash, name, loader_data, THREAD); SystemDictionary_lock->notify_all(); } return NULL; @@ -834,9 +843,9 @@ #ifdef ASSERT { - Handle loader (THREAD, k->class_loader()); + ClassLoaderData* loader_data = k->class_loader_data(); MutexLocker mu(SystemDictionary_lock, THREAD); - oop kk = find_class(name, loader); + Klass* kk = find_class(name, loader_data); assert(kk == k(), "should be present in dictionary"); } #endif @@ -855,14 +864,14 @@ // unloaded at a safepoint. No_Safepoint_Verifier nosafepoint; if (dictionary()->is_valid_protection_domain(d_index, d_hash, name, - class_loader, + loader_data, protection_domain)) { return k(); } } // Verify protection domain. If it fails an exception is thrown - validate_protection_domain(k, class_loader, protection_domain, CHECK_(klassOop(NULL))); + validate_protection_domain(k, class_loader, protection_domain, CHECK_NULL); return k(); } @@ -879,7 +888,7 @@ // _dictionary->bucket(index) is read here, so the caller will not see // the new entry. -klassOop SystemDictionary::find(Symbol* class_name, +Klass* SystemDictionary::find(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS) { @@ -889,8 +898,9 @@ // of the call to resolve_instance_class_or_null(). // See evaluation 6790209 and 4474172 for more details. class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader())); - - unsigned int d_hash = dictionary()->compute_hash(class_name, class_loader); + ClassLoaderData* loader_data = register_loader(class_loader); + + unsigned int d_hash = dictionary()->compute_hash(class_name, loader_data); int d_index = dictionary()->hash_to_index(d_hash); { @@ -901,7 +911,7 @@ // SystemDictionary::do_unloading() asserts that classes are only // unloaded at a safepoint. No_Safepoint_Verifier nosafepoint; - return dictionary()->find(d_index, d_hash, class_name, class_loader, + return dictionary()->find(d_index, d_hash, class_name, loader_data, protection_domain, THREAD); } } @@ -909,11 +919,11 @@ // Look for a loaded instance or array klass by name. Do not do any loading. // return NULL in case of error. -klassOop SystemDictionary::find_instance_or_array_klass(Symbol* class_name, +Klass* SystemDictionary::find_instance_or_array_klass(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS) { - klassOop k = NULL; + Klass* k = NULL; assert(class_name != NULL, "class name must be non NULL"); // Try to get one of the well-known klasses. @@ -953,7 +963,7 @@ // => 60% hit after limit guard, 25% total win rate #endif -klassOop SystemDictionary::find_well_known_klass(Symbol* class_name) { +Klass* SystemDictionary::find_well_known_klass(Symbol* class_name) { // A bounds-check on class_name will quickly get a negative result. NOT_PRODUCT(find_wkk_calls++); if (class_name >= wk_klass_name_limits[0] && @@ -961,7 +971,7 @@ NOT_PRODUCT(find_wkk_probes++); vmSymbols::SID sid = vmSymbols::find_sid(class_name); if (sid != vmSymbols::NO_SID) { - klassOop k = NULL; + Klass* k = NULL; switch (sid) { #define WK_KLASS_CASE(name, symbol, ignore_option) \ case vmSymbols::VM_SYMBOL_ENUM_NAME(symbol): \ @@ -979,7 +989,7 @@ // Note: this method is much like resolve_from_stream, but // updates no supplemental data structures. // TODO consolidate the two methods with a helper routine? -klassOop SystemDictionary::parse_stream(Symbol* class_name, +Klass* SystemDictionary::parse_stream(Symbol* class_name, Handle class_loader, Handle protection_domain, ClassFileStream* st, @@ -1013,12 +1023,14 @@ // Parsed name could be null if we threw an error before we got far // enough along to parse it -- in that case, there is nothing to clean up. if (parsed_name != NULL) { + ClassLoaderData* loader_data = class_loader_data(class_loader); + unsigned int p_hash = placeholders()->compute_hash(parsed_name, - class_loader); + loader_data); int p_index = placeholders()->hash_to_index(p_hash); { MutexLocker mu(SystemDictionary_lock, THREAD); - placeholders()->find_and_remove(p_index, p_hash, parsed_name, class_loader, THREAD); + placeholders()->find_and_remove(p_index, p_hash, parsed_name, loader_data, THREAD); SystemDictionary_lock->notify_all(); } } @@ -1026,6 +1038,7 @@ if (host_klass.not_null() && k.not_null()) { assert(EnableInvokeDynamic, ""); // If it's anonymous, initialize it now, since nobody else will. + k->class_loader_data()->record_dependency(host_klass(), CHECK_NULL); k->set_host_klass(host_klass()); { @@ -1038,6 +1051,11 @@ // But, do not add to system dictionary. } + // Rewrite and patch constant pool here. + k->link_class(THREAD); + if (cp_patches != NULL) { + k->constants()->patch_resolved_references(cp_patches); + } k->eager_initialize(THREAD); // notify jvmti @@ -1046,6 +1064,8 @@ JvmtiExport::post_class_load((JavaThread *) THREAD, k()); } } + assert(host_klass.not_null() || cp_patches == NULL, + "cp_patches only found with host_klass"); return k(); } @@ -1055,7 +1075,7 @@ // Note: class_name can be NULL. In that case we do not know the name of // the class until we have parsed the stream. -klassOop SystemDictionary::resolve_from_stream(Symbol* class_name, +Klass* SystemDictionary::resolve_from_stream(Symbol* class_name, Handle class_loader, Handle protection_domain, ClassFileStream* st, @@ -1069,6 +1089,8 @@ DoObjectLock = false; } + ClassLoaderData* loader_data = register_loader(class_loader); + // Make sure we are synchronized on the class loader before we proceed Handle lockObject = compute_loader_lock_object(class_loader, THREAD); check_loader_lock_contention(lockObject, THREAD); @@ -1125,7 +1147,7 @@ // Add class just loaded // If a class loader supports parallel classloading handle parallel define requests - // find_or_define_instance_class may return a different instanceKlass + // find_or_define_instance_class may return a different InstanceKlass if (is_parallelCapable(class_loader)) { k = find_or_define_instance_class(class_name, class_loader, k, THREAD); } else { @@ -1140,11 +1162,11 @@ // find the name). if (HAS_PENDING_EXCEPTION && parsed_name != NULL) { unsigned int p_hash = placeholders()->compute_hash(parsed_name, - class_loader); + loader_data); int p_index = placeholders()->hash_to_index(p_hash); { MutexLocker mu(SystemDictionary_lock, THREAD); - placeholders()->find_and_remove(p_index, p_hash, parsed_name, class_loader, THREAD); + placeholders()->find_and_remove(p_index, p_hash, parsed_name, loader_data, THREAD); SystemDictionary_lock->notify_all(); } return NULL; @@ -1156,14 +1178,14 @@ if (!HAS_PENDING_EXCEPTION) { assert(parsed_name != NULL, "parsed_name is still null?"); Symbol* h_name = k->name(); - Handle h_loader (THREAD, k->class_loader()); + ClassLoaderData *defining_loader_data = k->class_loader_data(); MutexLocker mu(SystemDictionary_lock, THREAD); - klassOop check = find_class(parsed_name, class_loader); + Klass* check = find_class(parsed_name, loader_data); assert(check == k(), "should be present in the dictionary"); - klassOop check2 = find_class(h_name, h_loader); + Klass* check2 = find_class(h_name, defining_loader_data); assert(check == check2, "name inconsistancy in SystemDictionary"); } } ); @@ -1183,10 +1205,11 @@ // If there is a shared dictionary, then find the entry for the // given shared system class, if any. -klassOop SystemDictionary::find_shared_class(Symbol* class_name) { +Klass* SystemDictionary::find_shared_class(Symbol* class_name) { if (shared_dictionary() != NULL) { - unsigned int d_hash = shared_dictionary()->compute_hash(class_name, Handle()); + unsigned int d_hash = shared_dictionary()->compute_hash(class_name, NULL); int d_index = shared_dictionary()->hash_to_index(d_hash); + return shared_dictionary()->find_shared_class(d_index, d_hash, class_name); } else { return NULL; @@ -1223,21 +1246,21 @@ // their hierarchy references (supers, subs, and interfaces). if (ik->super() != NULL) { - Symbol* cn = ik->super()->klass_part()->name(); + Symbol* cn = ik->super()->name(); resolve_super_or_fail(class_name, cn, class_loader, Handle(), true, CHECK_(nh)); } - objArrayHandle interfaces (THREAD, ik->local_interfaces()); + Array* interfaces = ik->local_interfaces(); int num_interfaces = interfaces->length(); for (int index = 0; index < num_interfaces; index++) { - klassOop k = klassOop(interfaces->obj_at(index)); - - // Note: can not use instanceKlass::cast here because - // interfaces' instanceKlass's C++ vtbls haven't been + Klass* k = interfaces->at(index); + + // Note: can not use InstanceKlass::cast here because + // interfaces' InstanceKlass's C++ vtbls haven't been // reinitialized yet (they will be once the interface classes // are loaded) - Symbol* name = k->klass_part()->name(); + Symbol* name = k->name(); resolve_super_or_fail(class_name, name, class_loader, Handle(), false, CHECK_(nh)); } @@ -1255,23 +1278,7 @@ Handle lockObject = compute_loader_lock_object(class_loader, THREAD); check_loader_lock_contention(lockObject, THREAD); ObjectLocker ol(lockObject, THREAD, true); - - objArrayHandle methods (THREAD, ik->methods()); - int num_methods = methods->length(); - for (int index2 = 0; index2 < num_methods; ++index2) { - methodHandle m(THREAD, methodOop(methods->obj_at(index2))); - m()->link_method(m, CHECK_(nh)); - } - if (JvmtiExport::has_redefined_a_class()) { - // Reinitialize vtable because RedefineClasses may have changed some - // entries in this vtable for super classes so the CDS vtable might - // point to old or obsolete entries. RedefineClasses doesn't fix up - // vtables in the shared system dictionary, only the main one. - // It also redefines the itable too so fix that too. - ResourceMark rm(THREAD); - ik->vtable()->initialize_vtable(false, CHECK_(nh)); - ik->itable()->initialize_itable(false, CHECK_(nh)); - } + ik->restore_unshareable_info(CHECK_(nh)); } if (TraceClassLoading) { @@ -1281,7 +1288,7 @@ tty->print_cr("]"); } // notify a class loaded from shared object - ClassLoadingService::notify_class_loaded(instanceKlass::cast(ik()), + ClassLoadingService::notify_class_loaded(InstanceKlass::cast(ik()), true /* shared class */); } return ik; @@ -1297,7 +1304,7 @@ Symbol* class_name, TRAPS) { - klassOop dlm = SystemDictionary::DownloadManager_klass(); + Klass* dlm = SystemDictionary::DownloadManager_klass(); instanceKlassHandle nk; // If download manager class isn't loaded just return. @@ -1375,7 +1382,7 @@ } #endif // KERNEL - // find_or_define_instance_class may return a different instanceKlass + // find_or_define_instance_class may return a different InstanceKlass if (!k.is_null()) { k = find_or_define_instance_class(class_name, class_loader, k, CHECK_(nh)); } @@ -1444,7 +1451,7 @@ // used to obtain any of the Class objects representing primitives or void if ((obj != NULL) && !(java_lang_Class::is_primitive(obj))) { instanceKlassHandle k = - instanceKlassHandle(THREAD, java_lang_Class::as_klassOop(obj)); + instanceKlassHandle(THREAD, java_lang_Class::as_Klass(obj)); // For user defined Java class loaders, check that the name returned is // the same as that requested. This check is done for the bootstrap // loader when parsing the class file. @@ -1459,7 +1466,10 @@ void SystemDictionary::define_instance_class(instanceKlassHandle k, TRAPS) { - Handle class_loader_h(THREAD, k->class_loader()); + ClassLoaderData* loader_data = k->class_loader_data(); + Handle class_loader_h(THREAD, loader_data->class_loader()); + + for (uintx it = 0; it < GCExpandToAllocateDelayMillis; it++){} // for bootstrap and other parallel classloaders don't acquire lock, // use placeholder token @@ -1482,25 +1492,13 @@ // Parallel classloaders will call find_or_define_instance_class // which will require a token to perform the define class Symbol* name_h = k->name(); - unsigned int d_hash = dictionary()->compute_hash(name_h, class_loader_h); + unsigned int d_hash = dictionary()->compute_hash(name_h, loader_data); int d_index = dictionary()->hash_to_index(d_hash); check_constraints(d_index, d_hash, k, class_loader_h, true, CHECK); - // Register class just loaded with class loader (placed in Vector) - // Note we do this before updating the dictionary, as this can - // fail with an OutOfMemoryError (if it does, we will *not* put this - // class in the dictionary and will not update the class hierarchy). - if (k->class_loader() != NULL) { - methodHandle m(THREAD, Universe::loader_addClass_method()); - JavaValue result(T_VOID); - JavaCallArguments args(class_loader_h); - args.push_oop(Handle(THREAD, k->java_mirror())); - JavaCalls::call(&result, m, &args, CHECK); - } - // Add the new class. We need recompile lock during update of CHA. { - unsigned int p_hash = placeholders()->compute_hash(name_h, class_loader_h); + unsigned int p_hash = placeholders()->compute_hash(name_h, loader_data); int p_index = placeholders()->hash_to_index(p_hash); MutexLocker mu_r(Compile_lock, THREAD); @@ -1544,12 +1542,13 @@ instanceKlassHandle nh = instanceKlassHandle(); // null Handle Symbol* name_h = k->name(); // passed in class_name may be null - - unsigned int d_hash = dictionary()->compute_hash(name_h, class_loader); + ClassLoaderData* loader_data = class_loader_data(class_loader); + + unsigned int d_hash = dictionary()->compute_hash(name_h, loader_data); int d_index = dictionary()->hash_to_index(d_hash); // Hold SD lock around find_class and placeholder creation for DEFINE_CLASS - unsigned int p_hash = placeholders()->compute_hash(name_h, class_loader); + unsigned int p_hash = placeholders()->compute_hash(name_h, loader_data); int p_index = placeholders()->hash_to_index(p_hash); PlaceholderEntry* probe; @@ -1557,14 +1556,14 @@ MutexLocker mu(SystemDictionary_lock, THREAD); // First check if class already defined if (UnsyncloadClass || (is_parallelDefine(class_loader))) { - klassOop check = find_class(d_index, d_hash, name_h, class_loader); + Klass* check = find_class(d_index, d_hash, name_h, loader_data); if (check != NULL) { return(instanceKlassHandle(THREAD, check)); } } // Acquire define token for this class/classloader - probe = placeholders()->find_and_add(p_index, p_hash, name_h, class_loader, PlaceholderTable::DEFINE_CLASS, NULL, THREAD); + probe = placeholders()->find_and_add(p_index, p_hash, name_h, loader_data, PlaceholderTable::DEFINE_CLASS, NULL, THREAD); // Wait if another thread defining in parallel // All threads wait - even those that will throw duplicate class: otherwise // caller is surprised by LinkageError: duplicate, but findLoadedClass fails @@ -1575,15 +1574,15 @@ // Only special cases allow parallel defines and can use other thread's results // Other cases fall through, and may run into duplicate defines // caught by finding an entry in the SystemDictionary - if ((UnsyncloadClass || is_parallelDefine(class_loader)) && (probe->instanceKlass() != NULL)) { + if ((UnsyncloadClass || is_parallelDefine(class_loader)) && (probe->InstanceKlass() != NULL)) { probe->remove_seen_thread(THREAD, PlaceholderTable::DEFINE_CLASS); - placeholders()->find_and_remove(p_index, p_hash, name_h, class_loader, THREAD); + placeholders()->find_and_remove(p_index, p_hash, name_h, loader_data, THREAD); SystemDictionary_lock->notify_all(); #ifdef ASSERT - klassOop check = find_class(d_index, d_hash, name_h, class_loader); + Klass* check = find_class(d_index, d_hash, name_h, loader_data); assert(check != NULL, "definer missed recording success"); #endif - return(instanceKlassHandle(THREAD, probe->instanceKlass())); + return(instanceKlassHandle(THREAD, probe->InstanceKlass())); } else { // This thread will define the class (even if earlier thread tried and had an error) probe->set_definer(THREAD); @@ -1597,7 +1596,7 @@ // definer must notify any waiting threads { MutexLocker mu(SystemDictionary_lock, THREAD); - PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, name_h, class_loader); + PlaceholderEntry* probe = placeholders()->get_entry(p_index, p_hash, name_h, loader_data); assert(probe != NULL, "DEFINE_CLASS placeholder lost?"); if (probe != NULL) { if (HAS_PENDING_EXCEPTION) { @@ -1608,7 +1607,7 @@ } probe->set_definer(NULL); probe->remove_seen_thread(THREAD, PlaceholderTable::DEFINE_CLASS); - placeholders()->find_and_remove(p_index, p_hash, name_h, class_loader, THREAD); + placeholders()->find_and_remove(p_index, p_hash, name_h, loader_data, THREAD); SystemDictionary_lock->notify_all(); } } @@ -1655,30 +1654,30 @@ // ---------------------------------------------------------------------------- // Lookup -klassOop SystemDictionary::find_class(int index, unsigned int hash, +Klass* SystemDictionary::find_class(int index, unsigned int hash, Symbol* class_name, - Handle class_loader) { + ClassLoaderData* loader_data) { assert_locked_or_safepoint(SystemDictionary_lock); - assert (index == dictionary()->index_for(class_name, class_loader), + assert (index == dictionary()->index_for(class_name, loader_data), "incorrect index?"); - klassOop k = dictionary()->find_class(index, hash, class_name, class_loader); + Klass* k = dictionary()->find_class(index, hash, class_name, loader_data); return k; } // Basic find on classes in the midst of being loaded Symbol* SystemDictionary::find_placeholder(Symbol* class_name, - Handle class_loader) { + ClassLoaderData* loader_data) { assert_locked_or_safepoint(SystemDictionary_lock); - unsigned int p_hash = placeholders()->compute_hash(class_name, class_loader); + unsigned int p_hash = placeholders()->compute_hash(class_name, loader_data); int p_index = placeholders()->hash_to_index(p_hash); - return placeholders()->find_entry(p_index, p_hash, class_name, class_loader); + return placeholders()->find_entry(p_index, p_hash, class_name, loader_data); } // Used for assertions and verification only -klassOop SystemDictionary::find_class(Symbol* class_name, Handle class_loader) { +Klass* SystemDictionary::find_class(Symbol* class_name, ClassLoaderData* loader_data) { #ifndef ASSERT guarantee(VerifyBeforeGC || VerifyDuringGC || @@ -1688,14 +1687,14 @@ assert_locked_or_safepoint(SystemDictionary_lock); // First look in the loaded class array - unsigned int d_hash = dictionary()->compute_hash(class_name, class_loader); + unsigned int d_hash = dictionary()->compute_hash(class_name, loader_data); int d_index = dictionary()->hash_to_index(d_hash); - return find_class(d_index, d_hash, class_name, class_loader); + return find_class(d_index, d_hash, class_name, loader_data); } // Get the next class in the diictionary. -klassOop SystemDictionary::try_get_next_class() { +Klass* SystemDictionary::try_get_next_class() { return dictionary()->try_get_next_class(); } @@ -1712,7 +1711,7 @@ // Link into hierachy. Make sure the vtables are initialized before linking into k->append_to_sibling_list(); // add to superklass/sibling list k->process_interfaces(THREAD); // handle all "implements" declarations - k->set_init_state(instanceKlass::loaded); + k->set_init_state(InstanceKlass::loaded); // Now flush all code that depended on old class hierarchy. // Note: must be done *after* linking k into the hierarchy (was bug 12/9/97) // Also, first reinitialize vtable because it may have gotten out of synch @@ -1733,28 +1732,18 @@ // system dictionary and follows the remaining classes' contents. void SystemDictionary::always_strong_oops_do(OopClosure* blk) { - // Follow preloaded classes/mirrors and system loader object blk->do_oop(&_java_system_loader); - preloaded_oops_do(blk); - always_strong_classes_do(blk); + blk->do_oop(&_system_loader_lock_obj); + + dictionary()->always_strong_oops_do(blk); } - -void SystemDictionary::always_strong_classes_do(OopClosure* blk) { +void SystemDictionary::always_strong_classes_do(KlassClosure* closure) { // Follow all system classes and temporary placeholders in dictionary - dictionary()->always_strong_classes_do(blk); - - // Placeholders. These are *always* strong roots, as they - // represent classes we're actively loading. - placeholders_do(blk); - - // Visit extra methods - invoke_method_table()->oops_do(blk); -} - - -void SystemDictionary::placeholders_do(OopClosure* blk) { - placeholders()->oops_do(blk); + dictionary()->always_strong_classes_do(closure); + + // Placeholders. These represent classes we're actively loading. + placeholders()->classes_do(closure); } // Calculate a "good" systemdictionary size based @@ -1773,98 +1762,84 @@ return newsize; } bool SystemDictionary::do_unloading(BoolObjectClosure* is_alive) { - bool result = dictionary()->do_unloading(is_alive); - constraints()->purge_loader_constraints(is_alive); - resolution_errors()->purge_resolution_errors(is_alive); - return result; + // First, mark for unload all ClassLoaderData referencing a dead class loader. + bool has_dead_loaders = ClassLoaderDataGraph::do_unloading(is_alive); + bool unloading_occurred = false; + if (has_dead_loaders) { + unloading_occurred = dictionary()->do_unloading(); + constraints()->purge_loader_constraints(); + resolution_errors()->purge_resolution_errors(); } - - -// The mirrors are scanned by shared_oops_do() which is -// not called by oops_do(). In order to process oops in -// a necessary order, shared_oops_do() is call by -// Universe::oops_do(). + return unloading_occurred; +} + void SystemDictionary::oops_do(OopClosure* f) { - // Adjust preloaded classes and system loader object f->do_oop(&_java_system_loader); - preloaded_oops_do(f); - - lazily_loaded_oops_do(f); + f->do_oop(&_system_loader_lock_obj); // Adjust dictionary dictionary()->oops_do(f); // Visit extra methods invoke_method_table()->oops_do(f); - - // Partially loaded classes - placeholders()->oops_do(f); - - // Adjust constraint table - constraints()->oops_do(f); - - // Adjust resolution error table - resolution_errors()->oops_do(f); } - -void SystemDictionary::preloaded_oops_do(OopClosure* f) { +// Extended Class redefinition support. +// If one of these classes is replaced, we need to replace it in these places. +// KlassClosure::do_klass should take the address of a class but we can +// change that later. +void SystemDictionary::preloaded_classes_do(KlassClosure* f) { for (int k = (int)FIRST_WKID; k < (int)WKID_LIMIT; k++) { - f->do_oop((oop*) &_well_known_klasses[k]); + f->do_klass(_well_known_klasses[k]); } { for (int i = 0; i < T_VOID+1; i++) { if (_box_klasses[i] != NULL) { assert(i >= T_BOOLEAN, "checking"); - f->do_oop((oop*) &_box_klasses[i]); + f->do_klass(_box_klasses[i]); } } } - // The basic type mirrors would have already been processed in - // Universe::oops_do(), via a call to shared_oops_do(), so should - // not be processed again. - - f->do_oop((oop*) &_system_loader_lock_obj); - FilteredFieldsMap::klasses_oops_do(f); + FilteredFieldsMap::classes_do(f); } -void SystemDictionary::lazily_loaded_oops_do(OopClosure* f) { - f->do_oop((oop*) &_abstract_ownable_synchronizer_klass); +void SystemDictionary::lazily_loaded_classes_do(KlassClosure* f) { + f->do_klass(_abstract_ownable_synchronizer_klass); } // Just the classes from defining class loaders // Don't iterate over placeholders -void SystemDictionary::classes_do(void f(klassOop)) { +void SystemDictionary::classes_do(void f(Klass*)) { dictionary()->classes_do(f); } // Added for initialize_itable_for_klass // Just the classes from defining class loaders // Don't iterate over placeholders -void SystemDictionary::classes_do(void f(klassOop, TRAPS), TRAPS) { +void SystemDictionary::classes_do(void f(Klass*, TRAPS), TRAPS) { dictionary()->classes_do(f, CHECK); } // All classes, and their class loaders // Don't iterate over placeholders -void SystemDictionary::classes_do(void f(klassOop, oop)) { +void SystemDictionary::classes_do(void f(Klass*, ClassLoaderData*)) { dictionary()->classes_do(f); } // All classes, and their class loaders // (added for helpers that use HandleMarks and ResourceMarks) // Don't iterate over placeholders -void SystemDictionary::classes_do(void f(klassOop, oop, TRAPS), TRAPS) { +void SystemDictionary::classes_do(void f(Klass*, ClassLoaderData*, TRAPS), TRAPS) { dictionary()->classes_do(f, CHECK); } -void SystemDictionary::placeholders_do(void f(Symbol*, oop)) { +void SystemDictionary::placeholders_do(void f(Symbol*)) { placeholders()->entries_do(f); } -void SystemDictionary::methods_do(void f(methodOop)) { +void SystemDictionary::methods_do(void f(Method*)) { dictionary()->methods_do(f); invoke_method_table()->methods_do(f); } @@ -1878,9 +1853,9 @@ // if multiple threads calling this function, only one thread will load // the class. The other threads will find the loaded version once the // class is loaded. - klassOop aos = _abstract_ownable_synchronizer_klass; + Klass* aos = _abstract_ownable_synchronizer_klass; if (aos == NULL) { - klassOop k = resolve_or_fail(vmSymbols::java_util_concurrent_locks_AbstractOwnableSynchronizer(), true, CHECK); + Klass* k = resolve_or_fail(vmSymbols::java_util_concurrent_locks_AbstractOwnableSynchronizer(), true, CHECK); // Force a fence to prevent any read before the write completes OrderAccess::fence(); _abstract_ownable_synchronizer_klass = k; @@ -1903,7 +1878,7 @@ _invoke_method_table = new SymbolPropertyTable(_invoke_method_size); // Allocate private object used as system class loader lock - _system_loader_lock_obj = oopFactory::new_system_objArray(0, CHECK); + _system_loader_lock_obj = oopFactory::new_intArray(0, CHECK); // Initialize basic classes initialize_preloaded_classes(CHECK); } @@ -1924,7 +1899,7 @@ int info = wk_init_info[id - FIRST_WKID]; int sid = (info >> CEIL_LG_OPTION_LIMIT); Symbol* symbol = vmSymbols::symbol_at((vmSymbols::SID)sid); - klassOop* klassp = &_well_known_klasses[id]; + Klass** klassp = &_well_known_klasses[id]; bool must_load = (init_opt < SystemDictionary::Opt); bool try_load = true; if (init_opt == SystemDictionary::Opt_Kernel) { @@ -1972,8 +1947,16 @@ assert(WK_KLASS(Object_klass) == NULL, "preloaded classes should only be initialized once"); // Preload commonly used klasses WKID scan = FIRST_WKID; - // first do Object, String, Class + // first do Object, then String, Class + if (UseSharedSpaces) { + initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Object_klass), scan, CHECK); + // Initialize the constant pool for the Object_class + InstanceKlass* ik = InstanceKlass::cast(Object_klass()); + ik->constants()->restore_unshareable_info(CHECK); initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Class_klass), scan, CHECK); + } else { + initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Class_klass), scan, CHECK); + } // Calculate offsets for String and Class classes since they are loaded and // can be used after this point. @@ -1992,14 +1975,14 @@ initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(Reference_klass), scan, CHECK); // Preload ref klasses and set reference types - instanceKlass::cast(WK_KLASS(Reference_klass))->set_reference_type(REF_OTHER); + InstanceKlass::cast(WK_KLASS(Reference_klass))->set_reference_type(REF_OTHER); instanceRefKlass::update_nonstatic_oop_maps(WK_KLASS(Reference_klass)); initialize_wk_klasses_through(WK_KLASS_ENUM_NAME(PhantomReference_klass), scan, CHECK); - instanceKlass::cast(WK_KLASS(SoftReference_klass))->set_reference_type(REF_SOFT); - instanceKlass::cast(WK_KLASS(WeakReference_klass))->set_reference_type(REF_WEAK); - instanceKlass::cast(WK_KLASS(FinalReference_klass))->set_reference_type(REF_FINAL); - instanceKlass::cast(WK_KLASS(PhantomReference_klass))->set_reference_type(REF_PHANTOM); + InstanceKlass::cast(WK_KLASS(SoftReference_klass))->set_reference_type(REF_SOFT); + InstanceKlass::cast(WK_KLASS(WeakReference_klass))->set_reference_type(REF_WEAK); + InstanceKlass::cast(WK_KLASS(FinalReference_klass))->set_reference_type(REF_FINAL); + InstanceKlass::cast(WK_KLASS(PhantomReference_klass))->set_reference_type(REF_PHANTOM); // JSR 292 classes WKID jsr292_group_start = WK_KLASS_ENUM_NAME(MethodHandle_klass); @@ -2032,18 +2015,18 @@ #endif // KERNEL { // Compute whether we should use loadClass or loadClassInternal when loading classes. - methodOop method = instanceKlass::cast(ClassLoader_klass())->find_method(vmSymbols::loadClassInternal_name(), vmSymbols::string_class_signature()); + Method* method = InstanceKlass::cast(ClassLoader_klass())->find_method(vmSymbols::loadClassInternal_name(), vmSymbols::string_class_signature()); _has_loadClassInternal = (method != NULL); } { // Compute whether we should use checkPackageAccess or NOT - methodOop method = instanceKlass::cast(ClassLoader_klass())->find_method(vmSymbols::checkPackageAccess_name(), vmSymbols::class_protectiondomain_signature()); + Method* method = InstanceKlass::cast(ClassLoader_klass())->find_method(vmSymbols::checkPackageAccess_name(), vmSymbols::class_protectiondomain_signature()); _has_checkPackageAccess = (method != NULL); } } // Tells if a given klass is a box (wrapper class, such as java.lang.Integer). // If so, returns the basic type it holds. If not, returns T_OBJECT. -BasicType SystemDictionary::box_klass_type(klassOop k) { +BasicType SystemDictionary::box_klass_type(Klass* k) { assert(k != NULL, ""); for (int i = T_BOOLEAN; i < T_VOID+1; i++) { if (_box_klasses[i] == k) @@ -2052,20 +2035,13 @@ return T_OBJECT; } -KlassHandle SystemDictionaryHandles::box_klass(BasicType t) { - if (t >= T_BOOLEAN && t <= T_VOID) - return KlassHandle(&SystemDictionary::_box_klasses[t], true); - else - return KlassHandle(); -} - // Constraints on class loaders. The details of the algorithm can be // found in the OOPSLA'98 paper "Dynamic Class Loading in the Java // Virtual Machine" by Sheng Liang and Gilad Bracha. The basic idea is // that the system dictionary needs to maintain a set of contraints that // must be satisfied by all classes in the dictionary. // if defining is true, then LinkageError if already in systemDictionary -// if initiating loader, then ok if instanceKlass matches existing entry +// if initiating loader, then ok if InstanceKlass matches existing entry void SystemDictionary::check_constraints(int d_index, unsigned int d_hash, instanceKlassHandle k, @@ -2074,17 +2050,19 @@ const char *linkage_error = NULL; { Symbol* name = k->name(); + ClassLoaderData *loader_data = class_loader_data(class_loader); + MutexLocker mu(SystemDictionary_lock, THREAD); - klassOop check = find_class(d_index, d_hash, name, class_loader); - if (check != (klassOop)NULL) { - // if different instanceKlass - duplicate class definition, + Klass* check = find_class(d_index, d_hash, name, loader_data); + if (check != (Klass*)NULL) { + // if different InstanceKlass - duplicate class definition, // else - ok, class loaded by a different thread in parallel, // we should only have found it if it was done loading and ok to use // system dictionary only holds instance classes, placeholders // also holds array classes - assert(check->klass_part()->oop_is_instance(), "noninstance in systemdictionary"); + assert(check->oop_is_instance(), "noninstance in systemdictionary"); if ((defining == true) || (k() != check)) { linkage_error = "loader (instance of %s): attempted duplicate class " "definition for name: \"%s\""; @@ -2094,7 +2072,7 @@ } #ifdef ASSERT - Symbol* ph_check = find_placeholder(name, class_loader); + Symbol* ph_check = find_placeholder(name, loader_data); assert(ph_check == NULL || ph_check == name, "invalid symbol"); #endif @@ -2132,6 +2110,7 @@ // Compile_lock prevents systemDictionary updates during compilations assert_locked_or_safepoint(Compile_lock); Symbol* name = k->name(); + ClassLoaderData *loader_data = class_loader_data(class_loader); { MutexLocker mu1(SystemDictionary_lock, THREAD); @@ -2141,7 +2120,7 @@ // Note that this must be done past the last potential blocking // point / safepoint. We enable biased locking lazily using a // VM_Operation to iterate the SystemDictionary and installing the - // biasable mark word into each instanceKlass's prototype header. + // biasable mark word into each InstanceKlass's prototype header. // To avoid race conditions where we accidentally miss enabling the // optimization for one class in the process of being added to the // dictionary, we must not safepoint after the test of @@ -2164,14 +2143,14 @@ // Check for a placeholder. If there, remove it and make a // new system dictionary entry. - placeholders()->find_and_remove(p_index, p_hash, name, class_loader, THREAD); - klassOop sd_check = find_class(d_index, d_hash, name, class_loader); + placeholders()->find_and_remove(p_index, p_hash, name, loader_data, THREAD); + Klass* sd_check = find_class(d_index, d_hash, name, loader_data); if (sd_check == NULL) { - dictionary()->add_klass(name, class_loader, k); + dictionary()->add_klass(name, loader_data, k); notice_modification(); } #ifdef ASSERT - sd_check = find_class(d_index, d_hash, name, class_loader); + sd_check = find_class(d_index, d_hash, name, loader_data); assert (sd_check != NULL, "should have entry in system dictionary"); // Changed to allow PH to remain to complete class circularity checking // while only one thread can define a class at one time, multiple @@ -2188,13 +2167,13 @@ // Try to find a class name using the loader constraints. The // loader constraints might know about a class that isn't fully loaded // yet and these will be ignored. -klassOop SystemDictionary::find_constrained_instance_or_array_klass( +Klass* SystemDictionary::find_constrained_instance_or_array_klass( Symbol* class_name, Handle class_loader, TRAPS) { // First see if it has been loaded directly. // Force the protection domain to be null. (This removes protection checks.) Handle no_protection_domain; - klassOop klass = find_instance_or_array_klass(class_name, class_loader, + Klass* klass = find_instance_or_array_klass(class_name, class_loader, no_protection_domain, CHECK_NULL); if (klass != NULL) return klass; @@ -2203,8 +2182,8 @@ // a loader constraint that would require this loader to return the // klass that is already loaded. if (FieldType::is_array(class_name)) { - // For array classes, their klassOops are not kept in the - // constraint table. The element klassOops are. + // For array classes, their Klass*s are not kept in the + // constraint table. The element Klass*s are. FieldArrayInfo fd; BasicType t = FieldType::get_array_info(class_name, fd, CHECK_(NULL)); if (t != T_OBJECT) { @@ -2231,11 +2210,14 @@ Handle class_loader1, Handle class_loader2, Thread* THREAD) { + ClassLoaderData* loader_data1 = class_loader_data(class_loader1); + ClassLoaderData* loader_data2 = class_loader_data(class_loader2); + Symbol* constraint_name = NULL; if (!FieldType::is_array(class_name)) { constraint_name = class_name; } else { - // For array classes, their klassOops are not kept in the + // For array classes, their Klass*s are not kept in the // constraint table. The element classes are. FieldArrayInfo fd; BasicType t = FieldType::get_array_info(class_name, fd, CHECK_(false)); @@ -2246,10 +2228,10 @@ constraint_name = fd.object_key(); } } - unsigned int d_hash1 = dictionary()->compute_hash(constraint_name, class_loader1); + unsigned int d_hash1 = dictionary()->compute_hash(constraint_name, loader_data1); int d_index1 = dictionary()->hash_to_index(d_hash1); - unsigned int d_hash2 = dictionary()->compute_hash(constraint_name, class_loader2); + unsigned int d_hash2 = dictionary()->compute_hash(constraint_name, loader_data2); int d_index2 = dictionary()->hash_to_index(d_hash2); { MutexLocker mu_s(SystemDictionary_lock, THREAD); @@ -2257,8 +2239,8 @@ // Better never do a GC while we're holding these oops No_Safepoint_Verifier nosafepoint; - klassOop klass1 = find_class(d_index1, d_hash1, constraint_name, class_loader1); - klassOop klass2 = find_class(d_index2, d_hash2, constraint_name, class_loader2); + Klass* klass1 = find_class(d_index1, d_hash1, constraint_name, loader_data1); + Klass* klass2 = find_class(d_index2, d_hash2, constraint_name, loader_data2); return constraints()->add_entry(constraint_name, klass1, class_loader1, klass2, class_loader2); } @@ -2275,6 +2257,11 @@ } } +// Delete a resolution error for RedefineClasses for a constant pool is going away +void SystemDictionary::delete_resolution_error(ConstantPool* pool) { + resolution_errors()->delete_entry(pool); +} + // Lookup resolution error table. Returns error if found, otherwise NULL. Symbol* SystemDictionary::find_resolution_error(constantPoolHandle pool, int which) { unsigned int hash = resolution_errors()->compute_hash(pool, which); @@ -2376,10 +2363,10 @@ int index = invoke_method_table()->hash_to_index(hash); SymbolPropertyEntry* spe = invoke_method_table()->find_entry(index, hash, signature, iid); methodHandle m; - if (spe == NULL || spe->property_oop() == NULL) { + if (spe == NULL || spe->method() == NULL) { spe = NULL; // Must create lots of stuff here, but outside of the SystemDictionary lock. - m = methodOopDesc::make_method_handle_intrinsic(iid, signature, CHECK_(empty)); + m = Method::make_method_handle_intrinsic(iid, signature, CHECK_(empty)); CompileBroker::compile_method(m, InvocationEntryBci, CompLevel_highest_tier, methodHandle(), CompileThreshold, "MH", CHECK_(empty)); @@ -2390,16 +2377,13 @@ spe = invoke_method_table()->find_entry(index, hash, signature, iid); if (spe == NULL) spe = invoke_method_table()->add_entry(index, hash, signature, iid); - if (spe->property_oop() == NULL) - spe->set_property_oop(m()); + if (spe->method() == NULL) + spe->set_method(m()); } } - assert(spe != NULL && spe->property_oop() != NULL, ""); - m = methodOop(spe->property_oop()); - assert(m->is_method(), ""); - - return m; + assert(spe != NULL && spe->method() != NULL, ""); + return spe->method(); } // Helper for unpacking the return value from linkMethod and linkCallSite. @@ -2409,9 +2393,9 @@ TRAPS) { methodHandle empty; if (mname.not_null()) { - oop vmtarget = java_lang_invoke_MemberName::vmtarget(mname()); + Metadata* vmtarget = java_lang_invoke_MemberName::vmtarget(mname()); if (vmtarget != NULL && vmtarget->is_method()) { - methodOop m = methodOop(vmtarget); + Method* m = (Method*)vmtarget; oop appendix = appendix_box->obj_at(0); if (TraceMethodHandles) { #ifndef PRODUCT @@ -2443,7 +2427,7 @@ method_type = java_lang_String::create_from_symbol(signature, CHECK_(empty)); } - KlassHandle mh_klass = SystemDictionaryHandles::MethodHandle_klass(); + KlassHandle mh_klass = SystemDictionary::MethodHandle_klass(); int ref_kind = JVM_REF_invokeVirtual; Handle name_str = StringTable::intern(name, CHECK_(empty)); objArrayHandle appendix_box = oopFactory::new_objArray(SystemDictionary::Object_klass(), 1, CHECK_(empty)); @@ -2480,9 +2464,9 @@ unsigned int hash = invoke_method_table()->compute_hash(signature, null_iid); int index = invoke_method_table()->hash_to_index(hash); SymbolPropertyEntry* spe = invoke_method_table()->find_entry(index, hash, signature, null_iid); - if (spe != NULL && spe->property_oop() != NULL) { - assert(java_lang_invoke_MethodType::is_instance(spe->property_oop()), ""); - return Handle(THREAD, spe->property_oop()); + if (spe != NULL && spe->method_type() != NULL) { + assert(java_lang_invoke_MethodType::is_instance(spe->method_type()), ""); + return Handle(THREAD, spe->method_type()); } else if (THREAD->is_Compiler_thread()) { warning("SystemDictionary::find_method_handle_type called from compiler thread"); // FIXME return Handle(); // do not attempt from within compiler, unless it was cached @@ -2504,8 +2488,8 @@ if (mirror == NULL) { // fall back from BCP to accessing_klass if (accessing_klass.not_null()) { - class_loader = Handle(THREAD, instanceKlass::cast(accessing_klass())->class_loader()); - protection_domain = Handle(THREAD, instanceKlass::cast(accessing_klass())->protection_domain()); + class_loader = Handle(THREAD, InstanceKlass::cast(accessing_klass())->class_loader()); + protection_domain = Handle(THREAD, InstanceKlass::cast(accessing_klass())->protection_domain()); } is_on_bcp = false; } @@ -2522,9 +2506,9 @@ // Check accessibility. if (ss.is_object() && accessing_klass.not_null()) { - klassOop sel_klass = java_lang_Class::as_klassOop(mirror); + Klass* sel_klass = java_lang_Class::as_Klass(mirror); mirror = NULL; // safety - // Emulate constantPoolOopDesc::verify_constant_pool_resolve. + // Emulate ConstantPool::verify_constant_pool_resolve. if (Klass::cast(sel_klass)->oop_is_objArray()) sel_klass = objArrayKlass::cast(sel_klass)->bottom_klass(); if (Klass::cast(sel_klass)->oop_is_instance()) { @@ -2552,8 +2536,8 @@ spe = invoke_method_table()->find_entry(index, hash, signature, null_iid); if (spe == NULL) spe = invoke_method_table()->add_entry(index, hash, signature, null_iid); - if (spe->property_oop() == NULL) { - spe->set_property_oop(method_type()); + if (spe->method_type() == NULL) { + spe->set_method_type(method_type()); } } @@ -2721,17 +2705,16 @@ } -void SystemDictionary::verify_obj_klass_present(Handle obj, - Symbol* class_name, - Handle class_loader) { +void SystemDictionary::verify_obj_klass_present(Symbol* class_name, + ClassLoaderData* loader_data) { GCMutexLocker mu(SystemDictionary_lock); Symbol* name; - klassOop probe = find_class(class_name, class_loader); + Klass* probe = find_class(class_name, loader_data); if (probe == NULL) { probe = SystemDictionary::find_shared_class(class_name); if (probe == NULL) { - name = find_placeholder(class_name, class_loader); + name = find_placeholder(class_name, loader_data); } } guarantee(probe != NULL || name != NULL, @@ -2751,21 +2734,22 @@ static int debug_size; // size of debug info in methods static int methoddata_size; // size of methodData objects in words - static void do_class(klassOop k) { + static void do_class(Klass* k) { nclasses++; class_size += k->size(); - if (k->klass_part()->oop_is_instance()) { - instanceKlass* ik = (instanceKlass*)k->klass_part(); + if (k->oop_is_instance()) { + InstanceKlass* ik = (InstanceKlass*)k; class_size += ik->methods()->size(); class_size += ik->constants()->size(); class_size += ik->local_interfaces()->size(); class_size += ik->transitive_interfaces()->size(); // We do not have to count implementors, since we only store one! - class_size += ik->fields()->length(); + // SSS: How should these be accounted now that they have moved? + // class_size += ik->fields()->length(); } } - static void do_method(methodOop m) { + static void do_method(Method* m) { nmethods++; method_size += m->size(); // class loader uses same objArray for empty vectors, so don't count these @@ -2773,7 +2757,7 @@ method_size += m->stackmap_data()->size(); } - methodDataOop mdo = m->method_data(); + MethodData* mdo = m->method_data(); if (mdo != NULL) { nmethoddata++; methoddata_size += mdo->size(); @@ -2836,7 +2820,7 @@ for (int j = 0; j < Bytecodes::number_of_java_codes; j++) _bytecodes_profile [j] = 0; }; - static void do_method(methodOop m) { + static void do_method(Method* m) { _number_of_methods++; // collect flag info if (m->is_final() ) _number_of_final_methods++; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/systemDictionary.hpp --- a/src/share/vm/classfile/systemDictionary.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/systemDictionary.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -36,7 +36,7 @@ // The system dictionary stores all loaded classes and maps: // -// [class name,class loader] -> class i.e. [Symbol*,oop] -> klassOop +// [class name,class loader] -> class i.e. [Symbol*,oop] -> Klass* // // Classes are loaded lazily. The default VM class loader is // represented as NULL. @@ -184,9 +184,7 @@ class SystemDictionary : AllStatic { friend class VMStructs; - friend class CompactingPermGenGen; friend class SystemDictionaryHandles; - NOT_PRODUCT(friend class instanceKlassKlass;) public: enum WKID { @@ -223,25 +221,25 @@ // throw_error flag. For most uses the throw_error argument should be set // to true. - static klassOop resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS); + static Klass* resolve_or_fail(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, TRAPS); // Convenient call for null loader and protection domain. - static klassOop resolve_or_fail(Symbol* class_name, bool throw_error, TRAPS); + static Klass* resolve_or_fail(Symbol* class_name, bool throw_error, TRAPS); private: // handle error translation for resolve_or_null results - static klassOop handle_resolution_exception(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, KlassHandle klass_h, TRAPS); + static Klass* handle_resolution_exception(Symbol* class_name, Handle class_loader, Handle protection_domain, bool throw_error, KlassHandle klass_h, TRAPS); public: // Returns a class with a given class name and class loader. // Loads the class if needed. If not found NULL is returned. - static klassOop resolve_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); + static Klass* resolve_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); // Version with null loader and protection domain - static klassOop resolve_or_null(Symbol* class_name, TRAPS); + static Klass* resolve_or_null(Symbol* class_name, TRAPS); // Resolve a superclass or superinterface. Called from ClassFileParser, // parse_interfaces, resolve_instance_class_or_null, load_shared_class // "child_name" is the class whose super class or interface is being resolved. - static klassOop resolve_super_or_fail(Symbol* child_name, + static Klass* resolve_super_or_fail(Symbol* child_name, Symbol* class_name, Handle class_loader, Handle protection_domain, @@ -250,7 +248,7 @@ // Parse new stream. This won't update the system dictionary or // class hierarchy, simply parse the stream. Used by JVMTI RedefineClasses. - static klassOop parse_stream(Symbol* class_name, + static Klass* parse_stream(Symbol* class_name, Handle class_loader, Handle protection_domain, ClassFileStream* st, @@ -258,7 +256,7 @@ KlassHandle nullHandle; return parse_stream(class_name, class_loader, protection_domain, st, nullHandle, NULL, THREAD); } - static klassOop parse_stream(Symbol* class_name, + static Klass* parse_stream(Symbol* class_name, Handle class_loader, Handle protection_domain, ClassFileStream* st, @@ -267,23 +265,23 @@ TRAPS); // Resolve from stream (called by jni_DefineClass and JVM_DefineClass) - static klassOop resolve_from_stream(Symbol* class_name, Handle class_loader, + static Klass* resolve_from_stream(Symbol* class_name, Handle class_loader, Handle protection_domain, ClassFileStream* st, bool verify, TRAPS); // Lookup an already loaded class. If not found NULL is returned. - static klassOop find(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); + static Klass* find(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); // Lookup an already loaded instance or array class. // Do not make any queries to class loaders; consult only the cache. // If not found NULL is returned. - static klassOop find_instance_or_array_klass(Symbol* class_name, + static Klass* find_instance_or_array_klass(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); // If the given name is known to vmSymbols, return the well-know klass: - static klassOop find_well_known_klass(Symbol* class_name); + static Klass* find_well_known_klass(Symbol* class_name); // Lookup an instance or array class that has already been loaded // either into the given class loader, or else into another class @@ -306,34 +304,32 @@ // satisfied, and it is safe for classes in the given class loader // to manipulate strongly-typed values of the found class, subject // to local linkage and access checks. - static klassOop find_constrained_instance_or_array_klass(Symbol* class_name, + static Klass* find_constrained_instance_or_array_klass(Symbol* class_name, Handle class_loader, TRAPS); // Iterate over all klasses in dictionary // Just the classes from defining class loaders - static void classes_do(void f(klassOop)); + static void classes_do(void f(Klass*)); // Added for initialize_itable_for_klass to handle exceptions - static void classes_do(void f(klassOop, TRAPS), TRAPS); + static void classes_do(void f(Klass*, TRAPS), TRAPS); // All classes, and their class loaders - static void classes_do(void f(klassOop, oop)); + static void classes_do(void f(Klass*, ClassLoaderData*)); // All classes, and their class loaders // (added for helpers that use HandleMarks and ResourceMarks) - static void classes_do(void f(klassOop, oop, TRAPS), TRAPS); + static void classes_do(void f(Klass*, ClassLoaderData*, TRAPS), TRAPS); // All entries in the placeholder table and their class loaders - static void placeholders_do(void f(Symbol*, oop)); + static void placeholders_do(void f(Symbol*)); // Iterate over all methods in all klasses in dictionary - static void methods_do(void f(methodOop)); + static void methods_do(void f(Method*)); // Garbage collection support // This method applies "blk->do_oop" to all the pointers to "system" // classes and loaders. static void always_strong_oops_do(OopClosure* blk); - static void always_strong_classes_do(OopClosure* blk); - // This method applies "blk->do_oop" to all the placeholders. - static void placeholders_do(OopClosure* blk); + static void always_strong_classes_do(KlassClosure* closure); // Unload (that is, break root links to) all unmarked classes and // loaders. Returns "true" iff something was unloaded. @@ -348,11 +344,9 @@ static oop system_loader_lock() { return _system_loader_lock_obj; } private: - // Traverses preloaded oops: various system classes. These are - // guaranteed to be in the perm gen. - static void preloaded_oops_do(OopClosure* f); - static void lazily_loaded_oops_do(OopClosure* f); - + // Extended Redefine classes support (tbi) + static void preloaded_classes_do(KlassClosure* f); + static void lazily_loaded_classes_do(KlassClosure* f); public: // Sharing support. static void reorder_dictionary(); @@ -386,28 +380,27 @@ #endif // Verify class is in dictionary - static void verify_obj_klass_present(Handle obj, - Symbol* class_name, - Handle class_loader); + static void verify_obj_klass_present(Symbol* class_name, + ClassLoaderData* loader_data); // Initialization static void initialize(TRAPS); // Fast access to commonly used classes (preloaded) - static klassOop check_klass(klassOop k) { + static Klass* check_klass(Klass* k) { assert(k != NULL, "preloaded klass not initialized"); return k; } - static klassOop check_klass_Pre(klassOop k) { return check_klass(k); } - static klassOop check_klass_Pre_JSR292(klassOop k) { return EnableInvokeDynamic ? check_klass(k) : k; } - static klassOop check_klass_Opt(klassOop k) { return k; } - static klassOop check_klass_Opt_Kernel(klassOop k) { return k; } //== Opt - static klassOop check_klass_Opt_Only_JDK15(klassOop k) { + static Klass* check_klass_Pre(Klass* k) { return check_klass(k); } + static Klass* check_klass_Pre_JSR292(Klass* k) { return EnableInvokeDynamic ? check_klass(k) : k; } + static Klass* check_klass_Opt(Klass* k) { return k; } + static Klass* check_klass_Opt_Kernel(Klass* k) { return k; } //== Opt + static Klass* check_klass_Opt_Only_JDK15(Klass* k) { assert(JDK_Version::is_gte_jdk15x_version(), "JDK 1.5 only"); return k; } - static klassOop check_klass_Opt_Only_JDK14NewRef(klassOop k) { + static Klass* check_klass_Opt_Only_JDK14NewRef(Klass* k) { assert(JDK_Version::is_gte_jdk14x_version() && UseNewReflection, "JDK 1.4 only"); // despite the optional loading, if you use this it must be present: return check_klass(k); @@ -422,27 +415,35 @@ public: #define WK_KLASS_DECLARE(name, symbol, option) \ - static klassOop name() { return check_klass_##option(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } + static Klass* name() { return check_klass_##option(_well_known_klasses[WK_KLASS_ENUM_NAME(name)]); } \ + static Klass** name##_addr() { \ + return &SystemDictionary::_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]; \ + } WK_KLASSES_DO(WK_KLASS_DECLARE); #undef WK_KLASS_DECLARE - static klassOop well_known_klass(WKID id) { + static Klass* well_known_klass(WKID id) { assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob"); return _well_known_klasses[id]; } + static Klass** well_known_klass_addr(WKID id) { + assert(id >= (int)FIRST_WKID && id < (int)WKID_LIMIT, "oob"); + return &_well_known_klasses[id]; + } + // Local definition for direct access to the private array: #define WK_KLASS(name) _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)] - static klassOop box_klass(BasicType t) { + static Klass* box_klass(BasicType t) { assert((uint)t < T_VOID+1, "range check"); return check_klass(_box_klasses[t]); } - static BasicType box_klass_type(klassOop k); // inverse of box_klass + static BasicType box_klass_type(Klass* k); // inverse of box_klass // methods returning lazily loaded klasses // The corresponding method to load the class must be called before calling them. - static klassOop abstract_ownable_synchronizer_klass() { return check_klass(_abstract_ownable_synchronizer_klass); } + static Klass* abstract_ownable_synchronizer_klass() { return check_klass(_abstract_ownable_synchronizer_klass); } static void load_abstract_ownable_synchronizer_klass(TRAPS); @@ -450,12 +451,20 @@ // Tells whether ClassLoader.loadClassInternal is present static bool has_loadClassInternal() { return _has_loadClassInternal; } + // Returns the class loader data to be used when looking up/updating the + // system dictionary. + static ClassLoaderData *class_loader_data(Handle class_loader) { + return ClassLoaderData::class_loader_data(class_loader()); + } + public: // Tells whether ClassLoader.checkPackageAccess is present static bool has_checkPackageAccess() { return _has_checkPackageAccess; } static bool Class_klass_loaded() { return WK_KLASS(Class_klass) != NULL; } static bool Cloneable_klass_loaded() { return WK_KLASS(Cloneable_klass) != NULL; } + static bool Object_klass_loaded() { return WK_KLASS(Object_klass) != NULL; } + static bool ClassLoader_klass_loaded() { return WK_KLASS(ClassLoader_klass) != NULL; } // Returns default system loader static oop java_system_loader(); @@ -463,6 +472,8 @@ // Compute the default system loader static void compute_java_system_loader(TRAPS); + // Register a new class loader + static ClassLoaderData* register_loader(Handle class_loader); private: // Mirrors for primitive classes (created eagerly) static oop check_mirror(oop m) { @@ -517,12 +528,17 @@ // Utility for printing loader "name" as part of tracing constraints static const char* loader_name(oop loader) { return ((loader) == NULL ? "" : - instanceKlass::cast((loader)->klass())->name()->as_C_string() ); + InstanceKlass::cast((loader)->klass())->name()->as_C_string() ); + } + static const char* loader_name(ClassLoaderData* loader_data) { + return (loader_data->is_the_null_class_loader_data() ? "" : + InstanceKlass::cast((loader_data->class_loader())->klass())->name()->as_C_string() ); } // Record the error when the first attempt to resolve a reference from a constant // pool entry to a class fails. static void add_resolution_error(constantPoolHandle pool, int which, Symbol* error); + static void delete_resolution_error(ConstantPool* pool); static Symbol* find_resolution_error(constantPoolHandle pool, int which); private: @@ -574,7 +590,7 @@ public: // for VM_CounterDecay iteration support friend class CounterDecay; - static klassOop try_get_next_class(); + static Klass* try_get_next_class(); private: static void validate_protection_domain(instanceKlassHandle klass, @@ -591,8 +607,8 @@ static SymbolPropertyTable* invoke_method_table() { return _invoke_method_table; } // Basic loading operations - static klassOop resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); - static klassOop resolve_array_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); + static Klass* resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); + static Klass* resolve_array_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS); static instanceKlassHandle handle_parallel_super_load(Symbol* class_name, Symbol* supername, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS); // Wait on SystemDictionary_lock; unlocks lockObject before // waiting; relocks lockObject with correct recursion count @@ -613,7 +629,7 @@ static bool is_parallelCapable(Handle class_loader); static bool is_parallelDefine(Handle class_loader); - static klassOop find_shared_class(Symbol* class_name); + static Klass* find_shared_class(Symbol* class_name); // Setup link to hierarchy static void add_to_hierarchy(instanceKlassHandle k, TRAPS); @@ -623,31 +639,31 @@ // the SystemDictionary_lock. // Basic find on loaded classes - static klassOop find_class(int index, unsigned int hash, - Symbol* name, Handle loader); - static klassOop find_class(Symbol* class_name, Handle class_loader); + static Klass* find_class(int index, unsigned int hash, + Symbol* name, ClassLoaderData* loader_data); + static Klass* find_class(Symbol* class_name, ClassLoaderData* loader_data); // Basic find on classes in the midst of being loaded - static Symbol* find_placeholder(Symbol* name, Handle loader); + static Symbol* find_placeholder(Symbol* name, ClassLoaderData* loader_data); // Updating entry in dictionary // Add a completely loaded class static void add_klass(int index, Symbol* class_name, - Handle class_loader, KlassHandle obj); + ClassLoaderData* loader_data, KlassHandle obj); // Add a placeholder for a class being loaded static void add_placeholder(int index, Symbol* class_name, - Handle class_loader); + ClassLoaderData* loader_data); static void remove_placeholder(int index, Symbol* class_name, - Handle class_loader); + ClassLoaderData* loader_data); // Performs cleanups after resolve_super_or_fail. This typically needs // to be called on failure. // Won't throw, but can block. static void resolution_cleanups(Symbol* class_name, - Handle class_loader, + ClassLoaderData* loader_data, TRAPS); // Initialization @@ -659,16 +675,17 @@ bool defining, TRAPS); static void update_dictionary(int d_index, unsigned int d_hash, int p_index, unsigned int p_hash, - instanceKlassHandle k, Handle loader, TRAPS); + instanceKlassHandle k, Handle loader, + TRAPS); // Variables holding commonly used klasses (preloaded) - static klassOop _well_known_klasses[]; + static Klass* _well_known_klasses[]; // Lazily loaded klasses - static volatile klassOop _abstract_ownable_synchronizer_klass; + static Klass* volatile _abstract_ownable_synchronizer_klass; // table of box klasses (int_klass, etc.) - static klassOop _box_klasses[T_VOID+1]; + static Klass* _box_klasses[T_VOID+1]; static oop _java_system_loader; @@ -676,18 +693,4 @@ static bool _has_checkPackageAccess; }; -class SystemDictionaryHandles : AllStatic { -public: - #define WK_KLASS_HANDLE_DECLARE(name, ignore_symbol, option) \ - static KlassHandle name() { \ - SystemDictionary::name(); \ - klassOop* loc = &SystemDictionary::_well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]; \ - return KlassHandle(loc, true); \ - } - WK_KLASSES_DO(WK_KLASS_HANDLE_DECLARE); - #undef WK_KLASS_HANDLE_DECLARE - - static KlassHandle box_klass(BasicType t); -}; - #endif // SHARE_VM_CLASSFILE_SYSTEMDICTIONARY_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/verificationType.cpp --- a/src/share/vm/classfile/verificationType.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/verificationType.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -57,7 +57,7 @@ // any object or array is assignable to java.lang.Object return true; } - klassOop obj = SystemDictionary::resolve_or_fail( + Klass* obj = SystemDictionary::resolve_or_fail( name(), Handle(THREAD, klass->class_loader()), Handle(THREAD, klass->protection_domain()), true, CHECK_false); KlassHandle this_class(THREAD, obj); @@ -67,10 +67,10 @@ // java.lang.Cloneable and java.io.Serializable return true; } else if (from.is_object()) { - klassOop from_class = SystemDictionary::resolve_or_fail( + Klass* from_class = SystemDictionary::resolve_or_fail( from.name(), Handle(THREAD, klass->class_loader()), Handle(THREAD, klass->protection_domain()), true, CHECK_false); - return instanceKlass::cast(from_class)->is_subclass_of(this_class()); + return InstanceKlass::cast(from_class)->is_subclass_of(this_class()); } } else if (is_array() && from.is_array()) { VerificationType comp_this = get_component(context, CHECK_false); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/verifier.cpp --- a/src/share/vm/classfile/verifier.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/verifier.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -153,7 +153,7 @@ if (HAS_PENDING_EXCEPTION) { tty->print("Verification for %s has", klassName); tty->print_cr(" exception pending %s ", - instanceKlass::cast(PENDING_EXCEPTION->klass())->external_name()); + InstanceKlass::cast(PENDING_EXCEPTION->klass())->external_name()); } else if (exception_name != NULL) { tty->print_cr("Verification for %s failed", klassName); } @@ -186,7 +186,7 @@ bool Verifier::is_eligible_for_verification(instanceKlassHandle klass, bool should_verify_class) { Symbol* name = klass->name(); - klassOop refl_magic_klass = SystemDictionary::reflect_MagicAccessorImpl_klass(); + Klass* refl_magic_klass = SystemDictionary::reflect_MagicAccessorImpl_klass(); return (should_verify_for(klass->class_loader(), should_verify_class) && // return if the class is a bootstrapping class @@ -361,7 +361,7 @@ } #endif -void ErrorContext::details(outputStream* ss, methodOop method) const { +void ErrorContext::details(outputStream* ss, Method* method) const { if (is_valid()) { ss->print_cr(""); ss->print_cr("Exception Details:"); @@ -434,7 +434,7 @@ ss->print_cr(""); } -void ErrorContext::location_details(outputStream* ss, methodOop method) const { +void ErrorContext::location_details(outputStream* ss, Method* method) const { if (_bci != -1 && method != NULL) { streamIndentor si(ss); const char* bytecode_name = ""; @@ -446,7 +446,7 @@ bytecode_name = ""; } } - instanceKlass* ik = instanceKlass::cast(method->method_holder()); + InstanceKlass* ik = InstanceKlass::cast(method->method_holder()); ss->indent().print_cr("Location:"); streamIndentor si2(ss); ss->indent().print_cr("%s.%s%s @%d: %s", @@ -469,7 +469,7 @@ } } -void ErrorContext::bytecode_details(outputStream* ss, methodOop method) const { +void ErrorContext::bytecode_details(outputStream* ss, Method* method) const { if (method != NULL) { streamIndentor si(ss); ss->indent().print_cr("Bytecode:"); @@ -478,7 +478,7 @@ } } -void ErrorContext::handler_details(outputStream* ss, methodOop method) const { +void ErrorContext::handler_details(outputStream* ss, Method* method) const { if (method != NULL) { streamIndentor si(ss); ExceptionTable table(method); @@ -493,13 +493,13 @@ } } -void ErrorContext::stackmap_details(outputStream* ss, methodOop method) const { +void ErrorContext::stackmap_details(outputStream* ss, Method* method) const { if (method != NULL && method->has_stackmap_table()) { streamIndentor si(ss); ss->indent().print_cr("Stackmap Table:"); - typeArrayOop data = method->stackmap_data(); + Array* data = method->stackmap_data(); stack_map_table* sm_table = - stack_map_table::at((address)data->byte_at_addr(0)); + stack_map_table::at((address)data->adr_at(0)); stack_map_frame* sm_frame = sm_table->entries(); streamIndentor si2(ss); int current_offset = -1; @@ -547,14 +547,14 @@ _klass->external_name()); } - objArrayHandle methods(THREAD, _klass->methods()); + Array* methods = _klass->methods(); int num_methods = methods->length(); for (int index = 0; index < num_methods; index++) { // Check for recursive re-verification before each method. if (was_recursively_verified()) return; - methodOop m = (methodOop)methods->obj_at(index); + Method* m = methods->at(index); if (m->is_native() || m->is_abstract()) { // If m is native or abstract, skip it. It is checked in class file // parser that methods do not override a final method. @@ -571,6 +571,7 @@ } void ClassVerifier::verify_method(methodHandle m, TRAPS) { + HandleMark hm(THREAD); _method = m; // initialize _method if (VerboseVerification) { tty->print_cr("Verifying method %s", m->name_and_sig_as_C_string()); @@ -613,7 +614,7 @@ verify_local_variable_table(code_length, code_data, CHECK_VERIFY(this)); } - typeArrayHandle stackmap_data(THREAD, m->stackmap_data()); + Array* stackmap_data = m->stackmap_data(); StackMapStream stream(stackmap_data); StackMapReader reader(this, &stream, code_data, code_length, THREAD); StackMapTable stackmap_table(&reader, ¤t_frame, max_locals, max_stack, @@ -1848,7 +1849,7 @@ if ((index <= 0) || (index >= nconstants)) { verify_error(ErrorContext::bad_cp_index(bci, index), "Illegal constant pool index %d in class %s", - index, instanceKlass::cast(cp->pool_holder())->external_name()); + index, InstanceKlass::cast(cp->pool_holder())->external_name()); return; } } @@ -1867,7 +1868,7 @@ if ((types & (1 << tag)) == 0) { verify_error(ErrorContext::bad_cp_index(bci, index), "Illegal type at constant pool entry %d in class %s", - index, instanceKlass::cast(cp->pool_holder())->external_name()); + index, InstanceKlass::cast(cp->pool_holder())->external_name()); return; } } @@ -1879,7 +1880,7 @@ if (!tag.is_klass() && !tag.is_unresolved_klass()) { verify_error(ErrorContext::bad_cp_index(bci, index), "Illegal type at constant pool entry %d in class %s", - index, instanceKlass::cast(cp->pool_holder())->external_name()); + index, InstanceKlass::cast(cp->pool_holder())->external_name()); return; } } @@ -1915,7 +1916,7 @@ _message = ss.as_string(); } -klassOop ClassVerifier::load_class(Symbol* name, TRAPS) { +Klass* ClassVerifier::load_class(Symbol* name, TRAPS) { // Get current loader and protection domain first. oop loader = current_class()->class_loader(); oop protection_domain = current_class()->protection_domain(); @@ -1926,7 +1927,7 @@ } bool ClassVerifier::is_protected_access(instanceKlassHandle this_class, - klassOop target_class, + Klass* target_class, Symbol* field_name, Symbol* field_sig, bool is_method) { @@ -1937,17 +1938,17 @@ return false; } // Check if the specified method or field is protected - instanceKlass* target_instance = instanceKlass::cast(target_class); + InstanceKlass* target_instance = InstanceKlass::cast(target_class); fieldDescriptor fd; if (is_method) { - methodOop m = target_instance->uncached_lookup_method(field_name, field_sig); + Method* m = target_instance->uncached_lookup_method(field_name, field_sig); if (m != NULL && m->is_protected()) { if (!this_class->is_same_class_package(m->method_holder())) { return true; } } } else { - klassOop member_klass = target_instance->find_field(field_name, field_sig, &fd); + Klass* member_klass = target_instance->find_field(field_name, field_sig, &fd); if (member_klass != NULL && fd.is_protected()) { if (!this_class->is_same_class_package(member_klass)) { return true; @@ -1964,7 +1965,7 @@ constantTag tag = cp->tag_at(index); unsigned int types; if (opcode == Bytecodes::_ldc || opcode == Bytecodes::_ldc_w) { - if (!tag.is_unresolved_string() && !tag.is_unresolved_klass()) { + if (!tag.is_unresolved_klass()) { types = (1 << JVM_CONSTANT_Integer) | (1 << JVM_CONSTANT_Float) | (1 << JVM_CONSTANT_String) | (1 << JVM_CONSTANT_Class) | (1 << JVM_CONSTANT_MethodHandle) | (1 << JVM_CONSTANT_MethodType); @@ -1979,7 +1980,7 @@ } if (tag.is_string() && cp->is_pseudo_string_at(index)) { current_frame->push_stack(object_type(), CHECK_VERIFY(this)); - } else if (tag.is_string() || tag.is_unresolved_string()) { + } else if (tag.is_string()) { current_frame->push_stack( VerificationType::reference_type( vmSymbols::java_lang_String()), CHECK_VERIFY(this)); @@ -2086,12 +2087,12 @@ bool ClassVerifier::name_in_supers( Symbol* ref_name, instanceKlassHandle current) { - klassOop super = current->super(); + Klass* super = current->super(); while (super != NULL) { - if (super->klass_part()->name() == ref_name) { + if (super->name() == ref_name) { return true; } - super = super->klass_part()->super(); + super = super->super(); } return false; } @@ -2200,7 +2201,7 @@ // be a superclass of it. See revised JVMS 5.4.4. break; - klassOop ref_class_oop = load_class(ref_class_name, CHECK); + Klass* ref_class_oop = load_class(ref_class_name, CHECK); if (is_protected_access(current_class(), ref_class_oop, field_name, field_sig, false)) { // It's protected access, check if stack object is assignable to @@ -2230,9 +2231,9 @@ VerificationType::reference_check(), CHECK_VERIFY(this)); if (type == VerificationType::uninitialized_this_type()) { // The method must be an method of this class or its superclass - klassOop superk = current_class()->super(); + Klass* superk = current_class()->super(); if (ref_class_type.name() != current_class()->name() && - ref_class_type.name() != superk->klass_part()->name()) { + ref_class_type.name() != superk->name()) { verify_error(ErrorContext::bad_type(bci, TypeOrigin::implicit(ref_class_type), TypeOrigin::implicit(current_type())), @@ -2270,9 +2271,9 @@ // of the current class. VerificationType objectref_type = new_class_type; if (name_in_supers(ref_class_type.name(), current_class())) { - klassOop ref_klass = load_class( + Klass* ref_klass = load_class( ref_class_type.name(), CHECK_VERIFY(this)); - methodOop m = instanceKlass::cast(ref_klass)->uncached_lookup_method( + Method* m = InstanceKlass::cast(ref_klass)->uncached_lookup_method( vmSymbols::object_initializer_name(), cp->signature_ref_at(bcs->get_index_u2())); instanceKlassHandle mh(THREAD, m->method_holder()); @@ -2416,7 +2417,7 @@ } else if (opcode == Bytecodes::_invokespecial && !ref_class_type.equals(current_type()) && !ref_class_type.equals(VerificationType::reference_type( - current_class()->super()->klass_part()->name()))) { + current_class()->super()->name()))) { bool subtype = ref_class_type.is_assignable_from( current_type(), this, CHECK_VERIFY(this)); if (!subtype) { @@ -2450,7 +2451,7 @@ // See the comments in verify_field_instructions() for // the rationale behind this. if (name_in_supers(ref_class_name, current_class())) { - klassOop ref_class = load_class(ref_class_name, CHECK); + Klass* ref_class = load_class(ref_class_name, CHECK); if (is_protected_access( _klass, ref_class, method_name, method_sig, true)) { // It's protected access, check if stack object is diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/verifier.hpp --- a/src/share/vm/classfile/verifier.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/verifier.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -28,7 +28,7 @@ #include "classfile/verificationType.hpp" #include "memory/gcLocker.hpp" #include "oops/klass.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "runtime/handles.hpp" #include "utilities/exceptions.hpp" @@ -224,7 +224,7 @@ _expected.reset_frame(); } - void details(outputStream* ss, methodOop method) const; + void details(outputStream* ss, Method* method) const; #ifdef ASSERT void print_on(outputStream* str) const { @@ -237,12 +237,12 @@ #endif private: - void location_details(outputStream* ss, methodOop method) const; + void location_details(outputStream* ss, Method* method) const; void reason_details(outputStream* ss) const; void frame_details(outputStream* ss) const; - void bytecode_details(outputStream* ss, methodOop method) const; - void handler_details(outputStream* ss, methodOop method) const; - void stackmap_details(outputStream* ss, methodOop method) const; + void bytecode_details(outputStream* ss, Method* method) const; + void handler_details(outputStream* ss, Method* method) const; + void stackmap_details(outputStream* ss, Method* method) const; }; // A new instance of this class is created for each class being verified @@ -268,7 +268,7 @@ } bool is_protected_access( - instanceKlassHandle this_class, klassOop target_class, + instanceKlassHandle this_class, Klass* target_class, Symbol* field_name, Symbol* field_sig, bool is_method); void verify_cp_index(u2 bci, constantPoolHandle cp, int index, TRAPS); @@ -380,7 +380,7 @@ void verify_error(ErrorContext ctx, const char* fmt, ...); void class_format_error(const char* fmt, ...); - klassOop load_class(Symbol* name, TRAPS); + Klass* load_class(Symbol* name, TRAPS); int change_sig_to_verificationType( SignatureStream* sig_type, VerificationType* inference_type, TRAPS); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/vmSymbols.cpp --- a/src/share/vm/classfile/vmSymbols.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/vmSymbols.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -181,7 +181,7 @@ } } -void vmSymbols::serialize(SerializeOopClosure* soc) { +void vmSymbols::serialize(SerializeClosure* soc) { soc->do_region((u_char*)&_symbols[FIRST_SID], (SID_LIMIT - FIRST_SID) * sizeof(_symbols[0])); soc->do_region((u_char*)_type_signatures, sizeof(_type_signatures)); @@ -211,7 +211,7 @@ // Then, use a binary search over the index. // Expected trip count is less than log2_SID_LIMIT, about eight. // This is slow but acceptable, given that calls are not - // dynamically common. (methodOop::intrinsic_id has a cache.) + // dynamically common. (Method*::intrinsic_id has a cache.) NOT_PRODUCT(find_sid_calls++); int min = (int)FIRST_SID, max = (int)SID_LIMIT - 1; SID sid = NO_SID, sid1; @@ -324,20 +324,20 @@ return vmIntrinsics::_none; } -methodOop vmIntrinsics::method_for(vmIntrinsics::ID id) { +Method* vmIntrinsics::method_for(vmIntrinsics::ID id) { if (id == _none) return NULL; Symbol* cname = vmSymbols::symbol_at(class_for(id)); Symbol* mname = vmSymbols::symbol_at(name_for(id)); Symbol* msig = vmSymbols::symbol_at(signature_for(id)); if (cname == NULL || mname == NULL || msig == NULL) return NULL; - klassOop k = SystemDictionary::find_well_known_klass(cname); + Klass* k = SystemDictionary::find_well_known_klass(cname); if (k == NULL) return NULL; - methodOop m = instanceKlass::cast(k)->find_method(mname, msig); + Method* m = InstanceKlass::cast(k)->find_method(mname, msig); if (m == NULL && cname == vmSymbols::java_lang_invoke_MethodHandle() && msig == vmSymbols::star_name()) { // Any signature polymorphic method is represented by a fixed concrete signature: - m = instanceKlass::cast(k)->find_method(mname, vmSymbols::object_array_object_signature()); + m = InstanceKlass::cast(k)->find_method(mname, vmSymbols::object_array_object_signature()); } return m; } @@ -504,12 +504,12 @@ #ifndef PRODUCT // verify_method performs an extra check on a matched intrinsic method -static bool match_method(methodOop m, Symbol* n, Symbol* s) { +static bool match_method(Method* m, Symbol* n, Symbol* s) { return (m->name() == n && m->signature() == s); } -static vmIntrinsics::ID match_method_with_klass(methodOop m, Symbol* mk) { +static vmIntrinsics::ID match_method_with_klass(Method* m, Symbol* mk) { #define VM_INTRINSIC_MATCH(id, klassname, namepart, sigpart, flags) \ { Symbol* k = vmSymbols::klassname(); \ if (mk == k) { \ @@ -524,7 +524,7 @@ #undef VM_INTRINSIC_MATCH } -void vmIntrinsics::verify_method(ID actual_id, methodOop m) { +void vmIntrinsics::verify_method(ID actual_id, Method* m) { Symbol* mk = Klass::cast(m->method_holder())->name(); ID declared_id = match_method_with_klass(m, mk); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/classfile/vmSymbols.hpp --- a/src/share/vm/classfile/vmSymbols.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/classfile/vmSymbols.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -234,7 +234,7 @@ template(parameter_annotations_name, "parameterAnnotations") \ template(annotation_default_name, "annotationDefault") \ template(sun_reflect_ConstantPool, "sun/reflect/ConstantPool") \ - template(constantPoolOop_name, "constantPoolOop") \ + template(ConstantPool_name, "constantPoolOop") \ template(sun_reflect_UnsafeStaticFieldAccessorImpl, "sun/reflect/UnsafeStaticFieldAccessorImpl")\ template(base_name, "base") \ \ @@ -314,7 +314,6 @@ template(type_name, "type") \ template(findNative_name, "findNative") \ template(deadChild_name, "deadChild") \ - template(addClass_name, "addClass") \ template(getFromClass_name, "getFromClass") \ template(dispatch_name, "dispatch") \ template(getSystemClassLoader_name, "getSystemClassLoader") \ @@ -359,6 +358,8 @@ template(values_name, "values") \ template(receiver_name, "receiver") \ template(vmtarget_name, "vmtarget") \ + template(next_target_name, "next_target") \ + template(vmloader_name, "vmloader") \ template(vmindex_name, "vmindex") \ template(vmcount_name, "vmcount") \ template(vmentry_name, "vmentry") \ @@ -373,6 +374,8 @@ template(array_klass_name, "array_klass") \ template(oop_size_name, "oop_size") \ template(static_oop_field_count_name, "static_oop_field_count") \ + template(loader_data_name, "loader_data") \ + template(dependencies_name, "dependencies") \ \ /* non-intrinsic name/signature pairs: */ \ template(register_method_name, "register") \ @@ -1012,7 +1015,7 @@ // Sharing support static void symbols_do(SymbolClosure* f); - static void serialize(SerializeOopClosure* soc); + static void serialize(SerializeClosure* soc); static Symbol* type_signature(BasicType t) { assert((uint)t < T_VOID+1, "range check"); @@ -1110,7 +1113,7 @@ return id; } - static void verify_method(ID actual_id, methodOop m) PRODUCT_RETURN; + static void verify_method(ID actual_id, Method* m) PRODUCT_RETURN; // Find out the symbols behind an intrinsic: static vmSymbols::SID class_for(ID id); @@ -1121,7 +1124,7 @@ static const char* short_name_as_C_string(ID id, char* buf, int size); // Access to intrinsic methods: - static methodOop method_for(ID id); + static Method* method_for(ID id); // Wrapper object methods: static ID for_boxing(BasicType type); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/codeBlob.cpp --- a/src/share/vm/code/codeBlob.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/codeBlob.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -74,6 +74,7 @@ size = align_code_offset(size); size += round_to(cb->total_content_size(), oopSize); size += round_to(cb->total_oop_size(), oopSize); + size += round_to(cb->total_metadata_size(), oopSize); return size; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/codeBlob.hpp --- a/src/share/vm/code/codeBlob.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/codeBlob.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -68,8 +68,6 @@ OopMapSet* _oop_maps; // OopMap for this CodeBlob CodeComments _comments; - friend class OopRecorder; - public: // Returns the space needed for CodeBlob static unsigned int allocation_size(CodeBuffer* cb, int header_size); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/codeCache.cpp --- a/src/share/vm/code/codeCache.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/codeCache.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,9 @@ #include "precompiled.hpp" #include "code/codeBlob.hpp" #include "code/codeCache.hpp" +#include "code/compiledIC.hpp" #include "code/dependencies.hpp" +#include "code/icBuffer.hpp" #include "code/nmethod.hpp" #include "code/pcDesc.hpp" #include "gc_implementation/shared/markSweep.hpp" @@ -33,7 +35,7 @@ #include "memory/gcLocker.hpp" #include "memory/iterator.hpp" #include "memory/resourceArea.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" @@ -54,6 +56,7 @@ int stub_size; int relocation_size; int scopes_oop_size; + int scopes_metadata_size; int scopes_data_size; int scopes_pcs_size; @@ -66,6 +69,7 @@ stub_size = 0; relocation_size = 0; scopes_oop_size = 0; + scopes_metadata_size = 0; scopes_data_size = 0; scopes_pcs_size = 0; } @@ -83,6 +87,7 @@ code_size * 100 / total_size, stub_size * 100 / total_size, scopes_oop_size * 100 / total_size, + scopes_metadata_size * 100 / total_size, scopes_data_size * 100 / total_size, scopes_pcs_size * 100 / total_size); } @@ -98,6 +103,7 @@ stub_size += nm->stub_size(); scopes_oop_size += nm->oops_size(); + scopes_metadata_size += nm->metadata_size(); scopes_data_size += nm->scopes_data_size(); scopes_pcs_size += nm->scopes_pcs_size(); } else { @@ -284,6 +290,12 @@ } } +void CodeCache::alive_nmethods_do(void f(nmethod* nm)) { + assert_locked_or_safepoint(CodeCache_lock); + FOR_ALL_ALIVE_NMETHODS(nm) { + f(nm); + } +} int CodeCache::alignment_unit() { return (int)_heap->alignment_unit(); @@ -448,7 +460,7 @@ #endif //PRODUCT -nmethod* CodeCache::find_and_remove_saved_code(methodOop m) { +nmethod* CodeCache::find_and_remove_saved_code(Method* m) { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); nmethod* saved = _saved_nmethods; nmethod* prev = NULL; @@ -468,7 +480,7 @@ if (LogCompilation && (xtty != NULL)) { ttyLocker ttyl; xtty->begin_elem("nmethod_reconnected compile_id='%3d'", saved->compile_id()); - xtty->method(methodOop(m)); + xtty->method(m); xtty->stamp(); xtty->end_elem(); } @@ -518,7 +530,7 @@ if (LogCompilation && (xtty != NULL)) { ttyLocker ttyl; xtty->begin_elem("nmethod_disconnected compile_id='%3d'", nm->compile_id()); - xtty->method(methodOop(nm->method())); + xtty->method(nm->method()); xtty->stamp(); xtty->end_elem(); } @@ -548,6 +560,32 @@ set_needs_cache_clean(false); prune_scavenge_root_nmethods(); assert(!nmethod::oops_do_marking_is_active(), "oops_do_marking_prologue must be called"); + +#ifdef ASSERT + // make sure that we aren't leaking icholders + int count = 0; + FOR_ALL_BLOBS(cb) { + if (cb->is_nmethod()) { + RelocIterator iter((nmethod*)cb); + while(iter.next()) { + if (iter.type() == relocInfo::virtual_call_type) { + if (CompiledIC::is_icholder_call_site(iter.virtual_call_reloc())) { + CompiledIC *ic = CompiledIC_at(iter.reloc()); + if (TraceCompiledIC) { + tty->print("noticed icholder " INTPTR_FORMAT " ", ic->cached_icholder()); + ic->print(); + } + assert(ic->cached_icholder() != NULL, "must be non-NULL"); + count++; + } + } + } + } + } + + assert(count + InlineCacheBuffer::pending_icholder_count() + CompiledICHolder::live_not_claimed_count() == + CompiledICHolder::live_count(), "must agree"); +#endif } @@ -649,8 +687,8 @@ { No_Safepoint_Verifier nsv; for (DepChange::ContextStream str(changes, nsv); str.next(); ) { - klassOop d = str.klass(); - number_of_marked_CodeBlobs += instanceKlass::cast(d)->mark_dependent_nmethods(changes); + Klass* d = str.klass(); + number_of_marked_CodeBlobs += InstanceKlass::cast(d)->mark_dependent_nmethods(changes); } } @@ -683,10 +721,10 @@ int number_of_marked_CodeBlobs = 0; // Deoptimize all methods of the evolving class itself - objArrayOop old_methods = dependee->methods(); + Array* old_methods = dependee->methods(); for (int i = 0; i < old_methods->length(); i++) { ResourceMark rm; - methodOop old_method = (methodOop) old_methods->obj_at(i); + Method* old_method = old_methods->at(i); nmethod *nm = old_method->code(); if (nm != NULL) { nm->mark_for_deoptimization(); @@ -702,7 +740,7 @@ nm->mark_for_deoptimization(); number_of_marked_CodeBlobs++; } else { - // flush caches in case they refer to a redefined methodOop + // flush caches in case they refer to a redefined Method* nm->clear_inline_caches(); } } @@ -721,7 +759,7 @@ } -int CodeCache::mark_for_deoptimization(methodOop dependee) { +int CodeCache::mark_for_deoptimization(Method* dependee) { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); int number_of_marked_CodeBlobs = 0; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/codeCache.hpp --- a/src/share/vm/code/codeCache.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/codeCache.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -80,6 +80,7 @@ static void blobs_do(void f(CodeBlob* cb)); // iterates over all CodeBlobs static void blobs_do(CodeBlobClosure* f); // iterates over all CodeBlobs static void nmethods_do(void f(nmethod* nm)); // iterates over all nmethods + static void alive_nmethods_do(void f(nmethod* nm)); // iterates over all alive nmethods // Lookup static CodeBlob* find_blob(void* start); @@ -170,7 +171,7 @@ static void set_needs_cache_clean(bool v) { _needs_cache_clean = v; } static void clear_inline_caches(); // clear all inline caches - static nmethod* find_and_remove_saved_code(methodOop m); + static nmethod* find_and_remove_saved_code(Method* m); static void remove_saved_code(nmethod* nm); static void speculatively_disconnect(nmethod* nm); @@ -181,7 +182,7 @@ #endif // HOTSWAP static void mark_all_nmethods_for_deoptimization(); - static int mark_for_deoptimization(methodOop dependee); + static int mark_for_deoptimization(Method* dependee); static void make_marked_nmethods_zombies(); static void make_marked_nmethods_not_entrant(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/compiledIC.cpp --- a/src/share/vm/code/compiledIC.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/compiledIC.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -31,8 +31,9 @@ #include "code/vtableStubs.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/linkResolver.hpp" +#include "memory/metadataFactory.hpp" #include "memory/oopFactory.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "oops/symbol.hpp" #include "runtime/icache.hpp" @@ -44,61 +45,79 @@ // Every time a compiled IC is changed or its type is being accessed, // either the CompiledIC_lock must be set or we must be at a safe point. + +// Release the CompiledICHolder* associated with this call site is there is one. +void CompiledIC::cleanup_call_site(virtual_call_Relocation* call_site) { + // This call site might have become stale so inspect it carefully. + NativeCall* call = nativeCall_at(call_site->addr()); + if (is_icholder_entry(call->destination())) { + NativeMovConstReg* value = nativeMovConstReg_at(call_site->cached_value()); + InlineCacheBuffer::queue_for_release((CompiledICHolder*)value->data()); + } +} + + +bool CompiledIC::is_icholder_call_site(virtual_call_Relocation* call_site) { + // This call site might have become stale so inspect it carefully. + NativeCall* call = nativeCall_at(call_site->addr()); + return is_icholder_entry(call->destination()); +} + + //----------------------------------------------------------------------------- // Low-level access to an inline cache. Private, since they might not be // MT-safe to use. -void CompiledIC::set_cached_oop(oop cache) { +void* CompiledIC::cached_value() const { assert (CompiledIC_lock->is_locked() || SafepointSynchronize::is_at_safepoint(), ""); - assert (!is_optimized(), "an optimized virtual call does not have a cached oop"); - assert (cache == NULL || cache != badOop, "invalid oop"); + assert (!is_optimized(), "an optimized virtual call does not have a cached metadata"); + + if (!is_in_transition_state()) { + void* data = (void*)_value->data(); + // If we let the metadata value here be initialized to zero... + assert(data != NULL || Universe::non_oop_word() == NULL, + "no raw nulls in CompiledIC metadatas, because of patching races"); + return (data == (void*)Universe::non_oop_word()) ? NULL : data; + } else { + return InlineCacheBuffer::cached_value_for((CompiledIC *)this); + } +} + + +void CompiledIC::internal_set_ic_destination(address entry_point, bool is_icstub, void* cache, bool is_icholder) { + assert(entry_point != NULL, "must set legal entry point"); + assert(CompiledIC_lock->is_locked() || SafepointSynchronize::is_at_safepoint(), ""); + assert (!is_optimized() || cache == NULL, "an optimized virtual call does not have a cached metadata"); + assert (cache == NULL || cache != (Metadata*)badOopVal, "invalid metadata"); + + assert(!is_icholder || is_icholder_entry(entry_point), "must be"); + + // Don't use ic_destination for this test since that forwards + // through ICBuffer instead of returning the actual current state of + // the CompiledIC. + if (is_icholder_entry(_ic_call->destination())) { + // When patching for the ICStub case the cached value isn't + // overwritten until the ICStub copied into the CompiledIC during + // the next safepoint. Make sure that the CompiledICHolder* is + // marked for release at this point since it won't be identifiable + // once the entry point is overwritten. + InlineCacheBuffer::queue_for_release((CompiledICHolder*)_value->data()); + } if (TraceCompiledIC) { tty->print(" "); print_compiled_ic(); - tty->print_cr(" changing oop to " INTPTR_FORMAT, (address)cache); + tty->print(" changing destination to " INTPTR_FORMAT, entry_point); + if (!is_optimized()) { + tty->print(" changing cached %s to " INTPTR_FORMAT, is_icholder ? "icholder" : "metadata", (address)cache); + } + if (is_icstub) { + tty->print(" (icstub)"); + } + tty->cr(); } - if (cache == NULL) cache = (oop)Universe::non_oop_word(); - - *_oop_addr = cache; - // fix up the relocations - RelocIterator iter = _oops; - while (iter.next()) { - if (iter.type() == relocInfo::oop_type) { - oop_Relocation* r = iter.oop_reloc(); - if (r->oop_addr() == _oop_addr) - r->fix_oop_relocation(); - } - } - return; -} - - -oop CompiledIC::cached_oop() const { - assert (CompiledIC_lock->is_locked() || SafepointSynchronize::is_at_safepoint(), ""); - assert (!is_optimized(), "an optimized virtual call does not have a cached oop"); - - if (!is_in_transition_state()) { - oop data = *_oop_addr; - // If we let the oop value here be initialized to zero... - assert(data != NULL || Universe::non_oop_word() == NULL, - "no raw nulls in CompiledIC oops, because of patching races"); - return (data == (oop)Universe::non_oop_word()) ? (oop)NULL : data; - } else { - return InlineCacheBuffer::cached_oop_for((CompiledIC *)this); - } -} - - -void CompiledIC::set_ic_destination(address entry_point) { - assert(entry_point != NULL, "must set legal entry point"); - assert(CompiledIC_lock->is_locked() || SafepointSynchronize::is_at_safepoint(), ""); - if (TraceCompiledIC) { - tty->print(" "); - print_compiled_ic(); - tty->print_cr(" changing destination to " INTPTR_FORMAT, entry_point); - } + { MutexLockerEx pl(Patching_lock, Mutex::_no_safepoint_check_flag); #ifdef ASSERT CodeBlob* cb = CodeCache::find_blob_unsafe(_ic_call); @@ -107,6 +126,25 @@ _ic_call->set_destination_mt_safe(entry_point); } + if (is_optimized() || is_icstub) { + // Optimized call sites don't have a cache value and ICStub call + // sites only change the entry point. Changing the value in that + // case could lead to MT safety issues. + assert(cache == NULL, "must be null"); + return; + } + + if (cache == NULL) cache = (void*)Universe::non_oop_word(); + + _value->set_data((intptr_t)cache); +} + + +void CompiledIC::set_ic_destination(ICStub* stub) { + internal_set_ic_destination(stub->code_begin(), true, NULL, false); +} + + address CompiledIC::ic_destination() const { assert (CompiledIC_lock->is_locked() || SafepointSynchronize::is_at_safepoint(), ""); @@ -124,6 +162,11 @@ } +bool CompiledIC::is_icholder_call() const { + assert (CompiledIC_lock->is_locked() || SafepointSynchronize::is_at_safepoint(), ""); + return !_is_optimized && is_icholder_entry(ic_destination()); +} + // Returns native address of 'call' instruction in inline-cache. Used by // the InlineCacheBuffer when it needs to find the stub. address CompiledIC::stub_address() const { @@ -140,7 +183,6 @@ methodHandle method = call_info->selected_method(); bool is_invoke_interface = (bytecode == Bytecodes::_invokeinterface && !call_info->has_vtable_index()); assert(CompiledIC_lock->is_locked() || SafepointSynchronize::is_at_safepoint(), ""); - assert(method->is_oop(), "cannot be NULL and must be oop"); assert(!is_optimized(), "cannot set an optimized virtual call to megamorphic"); assert(is_call_to_compiled() || is_call_to_interpreted(), "going directly to megamorphic?"); @@ -149,7 +191,7 @@ int index = klassItable::compute_itable_index(call_info->resolved_method()()); entry = VtableStubs::create_stub(false, index, method()); assert(entry != NULL, "entry not computed"); - klassOop k = call_info->resolved_method()->method_holder(); + Klass* k = call_info->resolved_method()->method_holder(); assert(Klass::cast(k)->is_interface(), "sanity check"); InlineCacheBuffer::create_transition_stub(this, k, entry); } else { @@ -180,7 +222,7 @@ assert(CompiledIC_lock->is_locked() || SafepointSynchronize::is_at_safepoint(), ""); assert(!is_optimized(), "an optimized call cannot be megamorphic"); - // Cannot rely on cached_oop. It is either an interface or a method. + // Cannot rely on cached_value. It is either an interface or a method. return VtableStubs::is_entry_point(ic_destination()); } @@ -192,24 +234,16 @@ // has been cleaned up CodeBlob* cb = CodeCache::find_blob_unsafe(ic_destination()); bool is_monomorphic = (cb != NULL && cb->is_nmethod()); - // Check that the cached_oop is a klass for non-optimized monomorphic calls + // Check that the cached_value is a klass for non-optimized monomorphic calls // This assertion is invalid for compiler1: a call that does not look optimized (no static stub) can be used - // for calling directly to vep without using the inline cache (i.e., cached_oop == NULL) + // for calling directly to vep without using the inline cache (i.e., cached_value == NULL) #ifdef ASSERT -#ifdef TIERED CodeBlob* caller = CodeCache::find_blob_unsafe(instruction_address()); bool is_c1_method = caller->is_compiled_by_c1(); -#else -#ifdef COMPILER1 - bool is_c1_method = true; -#else - bool is_c1_method = false; -#endif // COMPILER1 -#endif // TIERED assert( is_c1_method || !is_monomorphic || is_optimized() || - (cached_oop() != NULL && cached_oop()->is_klass()), "sanity check"); + (cached_metadata() != NULL && cached_metadata()->is_klass()), "sanity check"); #endif // ASSERT return is_monomorphic; } @@ -226,7 +260,7 @@ // is to the interpreter. CodeBlob* cb = CodeCache::find_blob_unsafe(ic_destination()); is_call_to_interpreted = (cb != NULL && cb->is_adapter_blob()); - assert(!is_call_to_interpreted || (cached_oop() != NULL && cached_oop()->is_compiledICHolder()), "sanity check"); + assert(!is_call_to_interpreted || (is_icholder_call() && cached_icholder() != NULL), "sanity check"); } else { // Check if we are calling into our own codeblob (i.e., to a stub) CodeBlob* cb = CodeCache::find_blob(_ic_call->instruction_address()); @@ -257,19 +291,22 @@ entry = SharedRuntime::get_resolve_virtual_call_stub(); } - // A zombie transition will always be safe, since the oop has already been set to NULL, so + // A zombie transition will always be safe, since the metadata has already been set to NULL, so // we only need to patch the destination bool safe_transition = is_optimized() || SafepointSynchronize::is_at_safepoint(); if (safe_transition) { - if (!is_optimized()) set_cached_oop(NULL); // Kill any leftover stub we might have too if (is_in_transition_state()) { ICStub* old_stub = ICStub_from_destination_address(stub_address()); old_stub->clear(); } + if (is_optimized()) { set_ic_destination(entry); } else { + set_ic_destination_and_value(entry, (void*)NULL); + } + } else { // Unsafe transition - create stub. InlineCacheBuffer::create_transition_stub(this, NULL, entry); } @@ -289,12 +326,12 @@ address dest = ic_destination(); is_clean = dest == SharedRuntime::get_resolve_opt_virtual_call_stub() || dest == SharedRuntime::get_resolve_virtual_call_stub(); - assert(!is_clean || is_optimized() || cached_oop() == NULL, "sanity check"); + assert(!is_clean || is_optimized() || cached_value() == NULL, "sanity check"); return is_clean; } -void CompiledIC::set_to_monomorphic(const CompiledICInfo& info) { +void CompiledIC::set_to_monomorphic(CompiledICInfo& info) { assert (CompiledIC_lock->is_locked() || SafepointSynchronize::is_at_safepoint(), ""); // Updating a cache to the wrong entry can cause bugs that are very hard // to track down - if cache entry gets invalid - we just clean it. In @@ -309,7 +346,7 @@ // transitions are mt_safe Thread *thread = Thread::current(); - if (info._to_interpreter) { + if (info.to_interpreter()) { // Call to interpreter if (info.is_optimized() && is_optimized()) { assert(is_clean(), "unsafe IC path"); @@ -318,9 +355,9 @@ // (either because of CHA or the static target is final) // At code generation time, this call has been emitted as static call // Call via stub - assert(info.cached_oop().not_null() && info.cached_oop()->is_method(), "sanity check"); + assert(info.cached_metadata() != NULL && info.cached_metadata()->is_method(), "sanity check"); CompiledStaticCall* csc = compiledStaticCall_at(instruction_address()); - methodHandle method (thread, (methodOop)info.cached_oop()()); + methodHandle method (thread, (Method*)info.cached_metadata()); csc->set_to_interpreted(method, info.entry()); if (TraceICs) { ResourceMark rm(thread); @@ -330,17 +367,15 @@ } } else { // Call via method-klass-holder - assert(info.cached_oop().not_null(), "must be set"); - InlineCacheBuffer::create_transition_stub(this, info.cached_oop()(), info.entry()); - + InlineCacheBuffer::create_transition_stub(this, info.claim_cached_icholder(), info.entry()); if (TraceICs) { ResourceMark rm(thread); - tty->print_cr ("IC@" INTPTR_FORMAT ": monomorphic to interpreter via mkh", instruction_address()); + tty->print_cr ("IC@" INTPTR_FORMAT ": monomorphic to interpreter via icholder ", instruction_address()); } } } else { // Call to compiled code - bool static_bound = info.is_optimized() || (info.cached_oop().is_null()); + bool static_bound = info.is_optimized() || (info.cached_metadata() == NULL); #ifdef ASSERT CodeBlob* cb = CodeCache::find_blob_unsafe(info.entry()); assert (cb->is_nmethod(), "must be compiled!"); @@ -352,18 +387,21 @@ (!is_in_transition_state() && (info.is_optimized() || static_bound || is_clean())); if (!safe) { - InlineCacheBuffer::create_transition_stub(this, info.cached_oop()(), info.entry()); + InlineCacheBuffer::create_transition_stub(this, info.cached_metadata(), info.entry()); } else { + if (is_optimized()) { set_ic_destination(info.entry()); - if (!is_optimized()) set_cached_oop(info.cached_oop()()); + } else { + set_ic_destination_and_value(info.entry(), info.cached_metadata()); + } } if (TraceICs) { ResourceMark rm(thread); - assert(info.cached_oop() == NULL || info.cached_oop()()->is_klass(), "must be"); + assert(info.cached_metadata() == NULL || info.cached_metadata()->is_klass(), "must be"); tty->print_cr ("IC@" INTPTR_FORMAT ": monomorphic to compiled (rcvr klass) %s: %s", instruction_address(), - ((klassOop)info.cached_oop()())->print_value_string(), + ((Klass*)info.cached_metadata())->print_value_string(), (safe) ? "" : "via stub"); } } @@ -386,8 +424,6 @@ bool static_bound, CompiledICInfo& info, TRAPS) { - info._is_optimized = is_optimized; - nmethod* method_code = method->code(); address entry = NULL; if (method_code != NULL) { @@ -400,18 +436,12 @@ } if (entry != NULL) { // Call to compiled code - info._entry = entry; - if (static_bound || is_optimized) { - info._cached_oop = Handle(THREAD, (oop)NULL); - } else { - info._cached_oop = receiver_klass; - } - info._to_interpreter = false; + info.set_compiled_entry(entry, (static_bound || is_optimized) ? NULL : receiver_klass(), is_optimized); } else { // Note: the following problem exists with Compiler1: // - at compile time we may or may not know if the destination is final // - if we know that the destination is final, we will emit an optimized - // virtual call (no inline cache), and need a methodOop to make a call + // virtual call (no inline cache), and need a Method* to make a call // to the interpreter // - if we do not know if the destination is final, we emit a standard // virtual call, and use CompiledICHolder to call interpreted code @@ -422,7 +452,6 @@ // it look vanilla but is optimized. Code in is_call_to_interpreted // is aware of this and weakens its asserts. - info._to_interpreter = true; // static_bound should imply is_optimized -- otherwise we have a // performance bug (statically-bindable method is called via // dynamically-dispatched call note: the reverse implication isn't @@ -443,38 +472,46 @@ #endif // COMPILER2 if (is_optimized) { // Use stub entry - info._entry = method()->get_c2i_entry(); - info._cached_oop = method; + info.set_interpreter_entry(method()->get_c2i_entry(), method()); } else { - // Use mkh entry - oop holder = oopFactory::new_compiledICHolder(method, receiver_klass, CHECK); - info._cached_oop = Handle(THREAD, holder); - info._entry = method()->get_c2i_unverified_entry(); + // Use icholder entry + CompiledICHolder* holder = new CompiledICHolder(method(), receiver_klass()); + info.set_icholder_entry(method()->get_c2i_unverified_entry(), holder); } } + assert(info.is_optimized() == is_optimized, "must agree"); +} + + +bool CompiledIC::is_icholder_entry(address entry) { + CodeBlob* cb = CodeCache::find_blob_unsafe(entry); + return (cb != NULL && cb->is_adapter_blob()); } -inline static RelocIterator parse_ic(nmethod* nm, address ic_call, oop* &_oop_addr, bool *is_optimized) { - address first_oop = NULL; - // Mergers please note: Sun SC5.x CC insists on an lvalue for a reference parameter. - nmethod* tmp_nm = nm; - return virtual_call_Relocation::parse_ic(tmp_nm, ic_call, first_oop, _oop_addr, is_optimized); -} +CompiledIC::CompiledIC(nmethod* nm, NativeCall* call) + : _ic_call(call) +{ + address ic_call = call->instruction_address(); + + assert(ic_call != NULL, "ic_call address must be set"); + assert(nm != NULL, "must pass nmethod"); + assert(nm->contains(ic_call), "must be in nmethod"); -CompiledIC::CompiledIC(NativeCall* ic_call) - : _ic_call(ic_call), - _oops(parse_ic(NULL, ic_call->instruction_address(), _oop_addr, &_is_optimized)) -{ + // search for the ic_call at the given address + RelocIterator iter(nm, ic_call, ic_call+1); + bool ret = iter.next(); + assert(ret == true, "relocInfo must exist at this address"); + assert(iter.addr() == ic_call, "must find ic_call"); + if (iter.type() == relocInfo::virtual_call_type) { + virtual_call_Relocation* r = iter.virtual_call_reloc(); + _is_optimized = false; + _value = nativeMovConstReg_at(r->cached_value()); + } else { + assert(iter.type() == relocInfo::opt_virtual_call_type, "must be a virtual call"); + _is_optimized = true; + _value = NULL; } - - -CompiledIC::CompiledIC(Relocation* ic_reloc) - : _ic_call(nativeCall_at(ic_reloc->addr())), - _oops(parse_ic(ic_reloc->code(), ic_reloc->addr(), _oop_addr, &_is_optimized)) -{ - assert(ic_reloc->type() == relocInfo::virtual_call_type || - ic_reloc->type() == relocInfo::opt_virtual_call_type, "wrong reloc. info"); } @@ -639,8 +676,8 @@ void CompiledIC::print_compiled_ic() { - tty->print("Inline cache at " INTPTR_FORMAT ", calling %s " INTPTR_FORMAT, - instruction_address(), is_call_to_interpreted() ? "interpreted " : "", ic_destination()); + tty->print("Inline cache at " INTPTR_FORMAT ", calling %s " INTPTR_FORMAT " cached_value " INTPTR_FORMAT, + instruction_address(), is_call_to_interpreted() ? "interpreted " : "", ic_destination(), is_optimized() ? NULL : cached_value()); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/compiledIC.hpp --- a/src/share/vm/code/compiledIC.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/compiledIC.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,9 +26,7 @@ #define SHARE_VM_CODE_COMPILEDIC_HPP #include "interpreter/linkResolver.hpp" -#include "oops/compiledICHolderKlass.hpp" -#include "oops/compiledICHolderOop.hpp" -#include "oops/klassOop.hpp" +#include "oops/compiledICHolder.hpp" #ifdef TARGET_ARCH_x86 # include "nativeInst_x86.hpp" #endif @@ -57,36 +55,88 @@ // / \ /-<-\ // / [2] \ / \ // Interpreted ---------> Monomorphic | [3] -// (compiledICHolderOop) (klassOop) | +// (CompiledICHolder*) (Klass*) | // \ / \ / // [4] \ / [4] \->-/ // \->- Megamorphic -<-/ -// (methodOop) +// (Method*) // // The text in paranteses () refere to the value of the inline cache receiver (mov instruction) // // The numbers in square brackets refere to the kind of transition: // [1]: Initial fixup. Receiver it found from debug information // [2]: Compilation of a method -// [3]: Recompilation of a method (note: only entry is changed. The klassOop must stay the same) +// [3]: Recompilation of a method (note: only entry is changed. The Klass* must stay the same) // [4]: Inline cache miss. We go directly to megamorphic call. // // The class automatically inserts transition stubs (using the InlineCacheBuffer) when an MT-unsafe // transition is made to a stub. // class CompiledIC; +class ICStub; -class CompiledICInfo { - friend class CompiledIC; +class CompiledICInfo : public StackObj { private: address _entry; // entry point for call - Handle _cached_oop; // Value of cached_oop (either in stub or inline cache) + void* _cached_value; // Value of cached_value (either in stub or inline cache) + bool _is_icholder; // Is the cached value a CompiledICHolder* bool _is_optimized; // it is an optimized virtual call (i.e., can be statically bound) bool _to_interpreter; // Call it to interpreter + bool _release_icholder; public: address entry() const { return _entry; } - Handle cached_oop() const { return _cached_oop; } + Metadata* cached_metadata() const { assert(!_is_icholder, ""); return (Metadata*)_cached_value; } + CompiledICHolder* claim_cached_icholder() { + assert(_is_icholder, ""); + assert(_cached_value != NULL, "must be non-NULL"); + _release_icholder = false; + CompiledICHolder* icholder = (CompiledICHolder*)_cached_value; + icholder->claim(); + return icholder; + } bool is_optimized() const { return _is_optimized; } + bool to_interpreter() const { return _to_interpreter; } + + void set_compiled_entry(address entry, Klass* klass, bool is_optimized) { + _entry = entry; + _cached_value = (void*)klass; + _to_interpreter = false; + _is_icholder = false; + _is_optimized = is_optimized; + _release_icholder = false; + } + + void set_interpreter_entry(address entry, Method* method) { + _entry = entry; + _cached_value = (void*)method; + _to_interpreter = true; + _is_icholder = false; + _is_optimized = true; + _release_icholder = false; + } + + void set_icholder_entry(address entry, CompiledICHolder* icholder) { + _entry = entry; + _cached_value = (void*)icholder; + _to_interpreter = true; + _is_icholder = true; + _is_optimized = false; + _release_icholder = true; + } + + CompiledICInfo(): _entry(NULL), _cached_value(NULL), _is_icholder(false), + _to_interpreter(false), _is_optimized(false), _release_icholder(false) { + } + ~CompiledICInfo() { + // In rare cases the info is computed but not used, so release any + // CompiledICHolder* that was created + if (_release_icholder) { + assert(_is_icholder, "must be"); + CompiledICHolder* icholder = (CompiledICHolder*)_cached_value; + icholder->claim(); + delete icholder; + } + } }; class CompiledIC: public ResourceObj { @@ -96,18 +146,32 @@ private: NativeCall* _ic_call; // the call instruction - oop* _oop_addr; // patchable oop cell for this IC - RelocIterator _oops; // iteration over any and all set-oop instructions + NativeMovConstReg* _value; // patchable value cell for this IC bool _is_optimized; // an optimized virtual call (i.e., no compiled IC) - CompiledIC(NativeCall* ic_call); - CompiledIC(Relocation* ic_reloc); // Must be of virtual_call_type/opt_virtual_call_type + CompiledIC(nmethod* nm, NativeCall* ic_call); + + static bool is_icholder_entry(address entry); // low-level inline-cache manipulation. Cannot be accessed directly, since it might not be MT-safe // to change an inline-cache. These changes the underlying inline-cache directly. They *newer* make // changes to a transition stub. - void set_ic_destination(address entry_point); - void set_cached_oop(oop cache); + void internal_set_ic_destination(address entry_point, bool is_icstub, void* cache, bool is_icholder); + void set_ic_destination(ICStub* stub); + void set_ic_destination(address entry_point) { + assert(_is_optimized, "use set_ic_destination_and_value instead"); + internal_set_ic_destination(entry_point, false, NULL, false); + } + // This only for use by ICStubs where the type of the value isn't known + void set_ic_destination_and_value(address entry_point, void* value) { + internal_set_ic_destination(entry_point, false, value, is_icholder_entry(entry_point)); + } + void set_ic_destination_and_value(address entry_point, Metadata* value) { + internal_set_ic_destination(entry_point, false, value, false); + } + void set_ic_destination_and_value(address entry_point, CompiledICHolder* value) { + internal_set_ic_destination(entry_point, false, value, true); + } // Reads the location of the transition stub. This will fail with an assertion, if no transition stub is // associated with the inline cache. @@ -116,13 +180,28 @@ public: // conversion (machine PC to CompiledIC*) - friend CompiledIC* CompiledIC_before(address return_addr); - friend CompiledIC* CompiledIC_at(address call_site); + friend CompiledIC* CompiledIC_before(nmethod* nm, address return_addr); + friend CompiledIC* CompiledIC_at(nmethod* nm, address call_site); friend CompiledIC* CompiledIC_at(Relocation* call_site); - // Return the cached_oop/destination associated with this inline cache. If the cache currently points + // This is used to release CompiledICHolder*s from nmethods that + // are about to be freed. The callsite might contain other stale + // values of other kinds so it must be careful. + static void cleanup_call_site(virtual_call_Relocation* call_site); + static bool is_icholder_call_site(virtual_call_Relocation* call_site); + + // Return the cached_metadata/destination associated with this inline cache. If the cache currently points // to a transition stub, it will read the values from the transition stub. - oop cached_oop() const; + void* cached_value() const; + CompiledICHolder* cached_icholder() const { + assert(is_icholder_call(), "must be"); + return (CompiledICHolder*) cached_value(); + } + Metadata* cached_metadata() const { + assert(!is_icholder_call(), "must be"); + return (Metadata*) cached_value(); + } + address ic_destination() const; bool is_optimized() const { return _is_optimized; } @@ -133,6 +212,8 @@ bool is_call_to_compiled() const; bool is_call_to_interpreted() const; + bool is_icholder_call() const; + address end_of_call() { return _ic_call->return_address(); } // MT-safe patching of inline caches. Note: Only safe to call is_xxx when holding the CompiledIC_ock @@ -144,7 +225,7 @@ // They all takes a TRAP argument, since they can cause a GC if the inline-cache buffer is full. // void set_to_clean(); // Can only be called during a safepoint operation - void set_to_monomorphic(const CompiledICInfo& info); + void set_to_monomorphic(CompiledICInfo& info); void set_to_megamorphic(CallInfo* call_info, Bytecodes::Code bytecode, TRAPS); static void compute_monomorphic_entry(methodHandle method, KlassHandle receiver_klass, @@ -159,20 +240,22 @@ void verify() PRODUCT_RETURN; }; -inline CompiledIC* CompiledIC_before(address return_addr) { - CompiledIC* c_ic = new CompiledIC(nativeCall_before(return_addr)); +inline CompiledIC* CompiledIC_before(nmethod* nm, address return_addr) { + CompiledIC* c_ic = new CompiledIC(nm, nativeCall_before(return_addr)); c_ic->verify(); return c_ic; } -inline CompiledIC* CompiledIC_at(address call_site) { - CompiledIC* c_ic = new CompiledIC(nativeCall_at(call_site)); +inline CompiledIC* CompiledIC_at(nmethod* nm, address call_site) { + CompiledIC* c_ic = new CompiledIC(nm, nativeCall_at(call_site)); c_ic->verify(); return c_ic; } inline CompiledIC* CompiledIC_at(Relocation* call_site) { - CompiledIC* c_ic = new CompiledIC(call_site); + assert(call_site->type() == relocInfo::virtual_call_type || + call_site->type() == relocInfo::opt_virtual_call_type, "wrong reloc. info"); + CompiledIC* c_ic = new CompiledIC(call_site->code(), nativeCall_at(call_site->addr())); c_ic->verify(); return c_ic; } @@ -191,7 +274,7 @@ // // Clean: Calls directly to runtime method for fixup // Compiled code: Calls directly to compiled code -// Interpreted code: Calls to stub that set methodOop reference +// Interpreted code: Calls to stub that set Method* reference // // class CompiledStaticCall; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/debugInfo.cpp --- a/src/share/vm/code/debugInfo.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/debugInfo.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,6 +41,10 @@ write_int(recorder()->oop_recorder()->find_index(h)); } +void DebugInfoWriteStream::write_metadata(Metadata* h) { + write_int(recorder()->oop_recorder()->find_index(h)); +} + ScopeValue* DebugInfoReadStream::read_object_value() { int id = read_int(); #ifdef ASSERT @@ -109,7 +113,7 @@ void ObjectValue::read_object(DebugInfoReadStream* stream) { _klass = read_from(stream); - assert(_klass->is_constant_oop(), "should be constant klass oop"); + assert(_klass->is_constant_oop(), "should be constant java mirror oop"); int length = stream->read_int(); for (int i = 0; i < length; i++) { ScopeValue* val = read_from(stream); @@ -198,6 +202,9 @@ // ConstantOopWriteValue void ConstantOopWriteValue::write_on(DebugInfoWriteStream* stream) { + assert(JNIHandles::resolve(value()) == NULL || + Universe::heap()->is_in_reserved(JNIHandles::resolve(value())), + "Should be in heap"); stream->write_int(CONSTANT_OOP_CODE); stream->write_handle(value()); } @@ -211,6 +218,8 @@ ConstantOopReadValue::ConstantOopReadValue(DebugInfoReadStream* stream) { _value = Handle(stream->read_oop()); + assert(_value() == NULL || + Universe::heap()->is_in_reserved(_value()), "Should be in heap"); } void ConstantOopReadValue::write_on(DebugInfoWriteStream* stream) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/debugInfo.hpp --- a/src/share/vm/code/debugInfo.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/debugInfo.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,6 +40,8 @@ // - LocationValue describes a value in a given location (in frame or register) // - ConstantValue describes a constant +class ConstantOopReadValue; + class ScopeValue: public ResourceObj { public: // Testers @@ -51,6 +53,11 @@ virtual bool is_constant_oop() const { return false; } virtual bool equals(ScopeValue* other) const { return false; } + ConstantOopReadValue* as_ConstantOopReadValue() { + assert(is_constant_oop(), "must be"); + return (ConstantOopReadValue*) this; + } + // Serialization of debugging information virtual void write_on(DebugInfoWriteStream* stream) = 0; static ScopeValue* read_from(DebugInfoReadStream* stream); @@ -94,7 +101,7 @@ , _field_values() , _value() , _visited(false) { - assert(klass->is_constant_oop(), "should be constant klass oop"); + assert(klass->is_constant_oop(), "should be constant java mirror oop"); } ObjectValue(int id) @@ -260,7 +267,15 @@ } ; oop read_oop() { - return code()->oop_at(read_int()); + oop o = code()->oop_at(read_int()); + assert(o == NULL || o->is_oop(), "oop only"); + return o; + } + Method* read_method() { + Method* o = (Method*)(code()->metadata_at(read_int())); + assert(o == NULL || + o->is_metadata(), "meta data only"); + return o; } ScopeValue* read_object_value(); ScopeValue* get_cached_object(); @@ -279,6 +294,8 @@ DebugInfoWriteStream(DebugInformationRecorder* recorder, int initial_size); void write_handle(jobject h); void write_bci(int bci) { write_int(bci - InvocationEntryBci); } + + void write_metadata(Metadata* m); }; #endif // SHARE_VM_CODE_DEBUGINFO_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/debugInfoRec.cpp --- a/src/share/vm/code/debugInfoRec.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/debugInfoRec.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -305,7 +305,7 @@ stream()->write_int(sender_stream_offset); // serialize scope - jobject method_enc = (method == NULL)? NULL: method->constant_encoding(); + Metadata* method_enc = (method == NULL)? NULL: method->constant_encoding(); stream()->write_int(oop_recorder()->find_index(method_enc)); stream()->write_bci(bci); assert(method == NULL || @@ -378,26 +378,36 @@ } } +#ifdef ASSERT +bool DebugInformationRecorder::recorders_frozen() { + return _oop_recorder->is_complete() || _oop_recorder->is_complete(); +} + +void DebugInformationRecorder::mark_recorders_frozen() { + _oop_recorder->freeze(); +} +#endif // PRODUCT + DebugToken* DebugInformationRecorder::create_scope_values(GrowableArray* values) { - assert(!_oop_recorder->is_complete(), "not frozen yet"); + assert(!recorders_frozen(), "not frozen yet"); return (DebugToken*) (intptr_t) serialize_scope_values(values); } DebugToken* DebugInformationRecorder::create_monitor_values(GrowableArray* monitors) { - assert(!_oop_recorder->is_complete(), "not frozen yet"); + assert(!recorders_frozen(), "not frozen yet"); return (DebugToken*) (intptr_t) serialize_monitor_values(monitors); } int DebugInformationRecorder::data_size() { - debug_only(_oop_recorder->oop_size()); // mark it "frozen" for asserts + debug_only(mark_recorders_frozen()); // mark it "frozen" for asserts return _stream->position(); } int DebugInformationRecorder::pcs_size() { - debug_only(_oop_recorder->oop_size()); // mark it "frozen" for asserts + debug_only(mark_recorders_frozen()); // mark it "frozen" for asserts if (last_pc()->pc_offset() != PcDesc::upper_offset_limit) add_new_pc_offset(PcDesc::upper_offset_limit); return _pcs_length * sizeof(PcDesc); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/debugInfoRec.hpp --- a/src/share/vm/code/debugInfoRec.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/debugInfoRec.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -56,8 +56,8 @@ // NB: nodes from create_scope_values and create_locations // can be reused for simple sharing. // - mark the end of the scopes (end_safepoint or end_non_safepoint) -// 2) Use oop_size, data_size, pcs_size to create the nmethod and -// finally migrate the debugging information into the nmethod +// 2) Use oop_size, metadata_size, data_size, pcs_size to create the nmethod +// and finally migrate the debugging information into the nmethod // by calling copy_to. class DebugToken; // Opaque datatype for stored: @@ -123,6 +123,7 @@ int data_size(); int pcs_size(); int oop_size() { return oop_recorder()->oop_size(); } + int metadata_size() { return oop_recorder()->metadata_size(); } // copy the generated debugging information to nmethod void copy_to(nmethod* nm); @@ -193,6 +194,11 @@ int serialize_scope_values(GrowableArray* values); int find_sharable_decode_offset(int stream_offset); +#ifndef PRODUCT + bool recorders_frozen(); + void mark_recorders_frozen(); +#endif // PRODUCT + public: enum { serialized_null = 0 }; }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/dependencies.cpp --- a/src/share/vm/code/dependencies.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/dependencies.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -30,6 +30,7 @@ #include "code/dependencies.hpp" #include "compiler/compileLog.hpp" #include "oops/oop.inline.hpp" +#include "runtime/handles.hpp" #include "runtime/handles.inline.hpp" #include "utilities/copy.hpp" @@ -51,7 +52,7 @@ _dep_seen = new(arena) GrowableArray(arena, 500, 0, 0); DEBUG_ONLY(_deps[end_marker] = NULL); for (int i = (int)FIRST_TYPE; i < (int)TYPE_LIMIT; i++) { - _deps[i] = new(arena) GrowableArray(arena, 10, 0, 0); + _deps[i] = new(arena) GrowableArray(arena, 10, 0, 0); } _content_bytes = NULL; _size_in_bytes = (size_t)-1; @@ -121,9 +122,9 @@ // Helper function. If we are adding a new dep. under ctxk2, // try to find an old dep. under a broader* ctxk1. If there is // -bool Dependencies::maybe_merge_ctxk(GrowableArray* deps, +bool Dependencies::maybe_merge_ctxk(GrowableArray* deps, int ctxk_i, ciKlass* ctxk2) { - ciKlass* ctxk1 = deps->at(ctxk_i)->as_klass(); + ciKlass* ctxk1 = deps->at(ctxk_i)->as_metadata()->as_klass(); if (ctxk2->is_subtype_of(ctxk1)) { return true; // success, and no need to change } else if (ctxk1->is_subtype_of(ctxk2)) { @@ -135,10 +136,10 @@ } } -void Dependencies::assert_common_1(DepType dept, ciObject* x) { +void Dependencies::assert_common_1(DepType dept, ciBaseObject* x) { assert(dep_args(dept) == 1, "sanity"); log_dependency(dept, x); - GrowableArray* deps = _deps[dept]; + GrowableArray* deps = _deps[dept]; // see if the same (or a similar) dep is already recorded if (note_dep_seen(dept, x)) { @@ -149,10 +150,10 @@ } void Dependencies::assert_common_2(DepType dept, - ciObject* x0, ciObject* x1) { + ciBaseObject* x0, ciBaseObject* x1) { assert(dep_args(dept) == 2, "sanity"); log_dependency(dept, x0, x1); - GrowableArray* deps = _deps[dept]; + GrowableArray* deps = _deps[dept]; // see if the same (or a similar) dep is already recorded bool has_ctxk = has_explicit_context_arg(dept); @@ -162,9 +163,9 @@ // look in this bucket for redundant assertions const int stride = 2; for (int i = deps->length(); (i -= stride) >= 0; ) { - ciObject* y1 = deps->at(i+1); + ciBaseObject* y1 = deps->at(i+1); if (x1 == y1) { // same subject; check the context - if (maybe_merge_ctxk(deps, i+0, x0->as_klass())) { + if (maybe_merge_ctxk(deps, i+0, x0->as_metadata()->as_klass())) { return; } } @@ -176,8 +177,8 @@ // look in this bucket for redundant assertions const int stride = 2; for (int i = deps->length(); (i -= stride) >= 0; ) { - ciObject* y0 = deps->at(i+0); - ciObject* y1 = deps->at(i+1); + ciBaseObject* y0 = deps->at(i+0); + ciBaseObject* y1 = deps->at(i+1); if (x0 == y0 && x1 == y1) { return; } @@ -191,31 +192,31 @@ } void Dependencies::assert_common_3(DepType dept, - ciKlass* ctxk, ciObject* x, ciObject* x2) { + ciKlass* ctxk, ciBaseObject* x, ciBaseObject* x2) { assert(dep_context_arg(dept) == 0, "sanity"); assert(dep_args(dept) == 3, "sanity"); log_dependency(dept, ctxk, x, x2); - GrowableArray* deps = _deps[dept]; + GrowableArray* deps = _deps[dept]; // try to normalize an unordered pair: bool swap = false; switch (dept) { case abstract_with_exclusive_concrete_subtypes_2: - swap = (x->ident() > x2->ident() && x != ctxk); + swap = (x->ident() > x2->ident() && x->as_metadata()->as_klass() != ctxk); break; case exclusive_concrete_methods_2: - swap = (x->ident() > x2->ident() && x->as_method()->holder() != ctxk); + swap = (x->ident() > x2->ident() && x->as_metadata()->as_method()->holder() != ctxk); break; } - if (swap) { ciObject* t = x; x = x2; x2 = t; } + if (swap) { ciBaseObject* t = x; x = x2; x2 = t; } // see if the same (or a similar) dep is already recorded if (note_dep_seen(dept, x) && note_dep_seen(dept, x2)) { // look in this bucket for redundant assertions const int stride = 3; for (int i = deps->length(); (i -= stride) >= 0; ) { - ciObject* y = deps->at(i+1); - ciObject* y2 = deps->at(i+2); + ciBaseObject* y = deps->at(i+1); + ciBaseObject* y2 = deps->at(i+2); if (x == y && x2 == y2) { // same subjects; check the context if (maybe_merge_ctxk(deps, i+0, ctxk)) { return; @@ -241,24 +242,24 @@ assert(size_in_bytes() % sizeof(HeapWord) == 0, "copy by words"); } -static int sort_dep(ciObject** p1, ciObject** p2, int narg) { +static int sort_dep(ciBaseObject** p1, ciBaseObject** p2, int narg) { for (int i = 0; i < narg; i++) { int diff = p1[i]->ident() - p2[i]->ident(); if (diff != 0) return diff; } return 0; } -static int sort_dep_arg_1(ciObject** p1, ciObject** p2) +static int sort_dep_arg_1(ciBaseObject** p1, ciBaseObject** p2) { return sort_dep(p1, p2, 1); } -static int sort_dep_arg_2(ciObject** p1, ciObject** p2) +static int sort_dep_arg_2(ciBaseObject** p1, ciBaseObject** p2) { return sort_dep(p1, p2, 2); } -static int sort_dep_arg_3(ciObject** p1, ciObject** p2) +static int sort_dep_arg_3(ciBaseObject** p1, ciBaseObject** p2) { return sort_dep(p1, p2, 3); } void Dependencies::sort_all_deps() { for (int deptv = (int)FIRST_TYPE; deptv < (int)TYPE_LIMIT; deptv++) { DepType dept = (DepType)deptv; - GrowableArray* deps = _deps[dept]; + GrowableArray* deps = _deps[dept]; if (deps->length() <= 1) continue; switch (dep_args(dept)) { case 1: deps->sort(sort_dep_arg_1, 1); break; @@ -273,33 +274,33 @@ size_t est_size = 100; for (int deptv = (int)FIRST_TYPE; deptv < (int)TYPE_LIMIT; deptv++) { DepType dept = (DepType)deptv; - GrowableArray* deps = _deps[dept]; + GrowableArray* deps = _deps[dept]; est_size += deps->length()*2; // tags and argument(s) } return est_size; } -ciKlass* Dependencies::ctxk_encoded_as_null(DepType dept, ciObject* x) { +ciKlass* Dependencies::ctxk_encoded_as_null(DepType dept, ciBaseObject* x) { switch (dept) { case abstract_with_exclusive_concrete_subtypes_2: - return x->as_klass(); + return x->as_metadata()->as_klass(); case unique_concrete_method: case exclusive_concrete_methods_2: - return x->as_method()->holder(); + return x->as_metadata()->as_method()->holder(); } return NULL; // let NULL be NULL } -klassOop Dependencies::ctxk_encoded_as_null(DepType dept, oop x) { +Klass* Dependencies::ctxk_encoded_as_null(DepType dept, Metadata* x) { assert(must_be_in_vm(), "raw oops here"); switch (dept) { case abstract_with_exclusive_concrete_subtypes_2: assert(x->is_klass(), "sanity"); - return (klassOop) x; + return (Klass*) x; case unique_concrete_method: case exclusive_concrete_methods_2: assert(x->is_method(), "sanity"); - return ((methodOop)x)->method_holder(); + return ((Method*)x)->method_holder(); } return NULL; // let NULL be NULL } @@ -312,7 +313,7 @@ for (int deptv = (int)FIRST_TYPE; deptv < (int)TYPE_LIMIT; deptv++) { DepType dept = (DepType)deptv; - GrowableArray* deps = _deps[dept]; + GrowableArray* deps = _deps[dept]; if (deps->length() == 0) continue; int stride = dep_args(dept); int ctxkj = dep_context_arg(dept); // -1 if no context arg @@ -321,8 +322,8 @@ jbyte code_byte = (jbyte)dept; int skipj = -1; if (ctxkj >= 0 && ctxkj+1 < stride) { - ciKlass* ctxk = deps->at(i+ctxkj+0)->as_klass(); - ciObject* x = deps->at(i+ctxkj+1); // following argument + ciKlass* ctxk = deps->at(i+ctxkj+0)->as_metadata()->as_klass(); + ciBaseObject* x = deps->at(i+ctxkj+1); // following argument if (ctxk == ctxk_encoded_as_null(dept, x)) { skipj = ctxkj; // we win: maybe one less oop to keep track of code_byte |= default_context_type_bit; @@ -331,7 +332,13 @@ bytes.write_byte(code_byte); for (int j = 0; j < stride; j++) { if (j == skipj) continue; - bytes.write_int(_oop_recorder->find_index(deps->at(i+j)->constant_encoding())); + ciBaseObject* v = deps->at(i+j); + if (v->is_object()) { + bytes.write_int(_oop_recorder->find_index(v->as_object()->constant_encoding())); + } else { + ciMetadata* meta = v->as_metadata(); + bytes.write_int(_oop_recorder->find_index(meta->constant_encoding())); + } } } } @@ -397,10 +404,10 @@ // for the sake of the compiler log, print out current dependencies: void Dependencies::log_all_dependencies() { if (log() == NULL) return; - ciObject* args[max_arg_count]; + ciBaseObject* args[max_arg_count]; for (int deptv = (int)FIRST_TYPE; deptv < (int)TYPE_LIMIT; deptv++) { DepType dept = (DepType)deptv; - GrowableArray* deps = _deps[dept]; + GrowableArray* deps = _deps[dept]; if (deps->length() == 0) continue; int stride = dep_args(dept); for (int i = 0; i < deps->length(); i += stride) { @@ -415,31 +422,39 @@ void Dependencies::write_dependency_to(CompileLog* log, DepType dept, - int nargs, oop args[], - klassOop witness) { + int nargs, DepArgument args[], + Klass* witness) { if (log == NULL) { return; } ciEnv* env = ciEnv::current(); - ciObject* ciargs[max_arg_count]; + ciBaseObject* ciargs[max_arg_count]; assert(nargs <= max_arg_count, "oob"); for (int j = 0; j < nargs; j++) { - ciargs[j] = env->get_object(args[j]); + if (args[j].is_oop()) { + ciargs[j] = env->get_object(args[j].oop_value()); + } else { + ciargs[j] = env->get_metadata(args[j].metadata_value()); + } } Dependencies::write_dependency_to(log, dept, nargs, ciargs, witness); } void Dependencies::write_dependency_to(CompileLog* log, DepType dept, - int nargs, ciObject* args[], - klassOop witness) { + int nargs, ciBaseObject* args[], + Klass* witness) { if (log == NULL) return; assert(nargs <= max_arg_count, "oob"); int argids[max_arg_count]; int ctxkj = dep_context_arg(dept); // -1 if no context arg int j; for (j = 0; j < nargs; j++) { - argids[j] = log->identify(args[j]); + if (args[j]->is_object()) { + argids[j] = log->identify(args[j]->as_object()); + } else { + argids[j] = log->identify(args[j]->as_metadata()); + } } if (witness != NULL) { log->begin_elem("dependency_failed"); @@ -468,8 +483,8 @@ void Dependencies::write_dependency_to(xmlStream* xtty, DepType dept, - int nargs, oop args[], - klassOop witness) { + int nargs, DepArgument args[], + Klass* witness) { if (xtty == NULL) return; ttyLocker ttyl; int ctxkj = dep_context_arg(dept); // -1 if no context arg @@ -480,16 +495,24 @@ } xtty->print(" type='%s'", dep_name(dept)); if (ctxkj >= 0) { - xtty->object("ctxk", args[ctxkj]); + xtty->object("ctxk", args[ctxkj].metadata_value()); } // write remaining arguments, if any. for (int j = 0; j < nargs; j++) { if (j == ctxkj) continue; // already logged if (j == 1) { - xtty->object("x", args[j]); + if (args[j].is_oop()) { + xtty->object("x", args[j].oop_value()); + } else { + xtty->object("x", args[j].metadata_value()); + } } else { char xn[10]; sprintf(xn, "x%d", j); - xtty->object(xn, args[j]); + if (args[j].is_oop()) { + xtty->object(xn, args[j].oop_value()); + } else { + xtty->object(xn, args[j].metadata_value()); + } } } if (witness != NULL) { @@ -499,8 +522,8 @@ xtty->end_elem(); } -void Dependencies::print_dependency(DepType dept, int nargs, oop args[], - klassOop witness) { +void Dependencies::print_dependency(DepType dept, int nargs, DepArgument args[], + Klass* witness) { ResourceMark rm; ttyLocker ttyl; // keep the following output all in one block tty->print_cr("%s of type %s", @@ -509,26 +532,29 @@ // print arguments int ctxkj = dep_context_arg(dept); // -1 if no context arg for (int j = 0; j < nargs; j++) { - oop arg = args[j]; + DepArgument arg = args[j]; bool put_star = false; - if (arg == NULL) continue; + if (arg.is_null()) continue; const char* what; if (j == ctxkj) { + assert(arg.is_metadata(), "must be"); what = "context"; - put_star = !Dependencies::is_concrete_klass((klassOop)arg); - } else if (arg->is_method()) { + put_star = !Dependencies::is_concrete_klass((Klass*)arg.metadata_value()); + } else if (arg.is_method()) { what = "method "; - put_star = !Dependencies::is_concrete_method((methodOop)arg); - } else if (arg->is_klass()) { + put_star = !Dependencies::is_concrete_method((Method*)arg.metadata_value()); + } else if (arg.is_klass()) { what = "class "; } else { what = "object "; } tty->print(" %s = %s", what, (put_star? "*": "")); - if (arg->is_klass()) - tty->print("%s", Klass::cast((klassOop)arg)->external_name()); + if (arg.is_klass()) + tty->print("%s", Klass::cast((Klass*)arg.metadata_value())->external_name()); + else if (arg.is_method()) + ((Method*)arg.metadata_value())->print_value(); else - arg->print_value(); + ShouldNotReachHere(); // Provide impl for this type. tty->cr(); } if (witness != NULL) { @@ -539,13 +565,20 @@ } } -void Dependencies::DepStream::log_dependency(klassOop witness) { +void Dependencies::DepStream::log_dependency(Klass* witness) { if (_deps == NULL && xtty == NULL) return; // fast cutout for runtime + if (type() == call_site_target_value) { + os::breakpoint(); + } int nargs = argument_count(); - oop args[max_arg_count]; + DepArgument args[max_arg_count]; for (int j = 0; j < nargs; j++) { + if (type() == call_site_target_value) { + args[j] = argument_oop(j); + } else { args[j] = argument(j); } + } if (_deps != NULL && _deps->log() != NULL) { Dependencies::write_dependency_to(_deps->log(), type(), nargs, args, witness); @@ -555,9 +588,9 @@ } } -void Dependencies::DepStream::print_dependency(klassOop witness, bool verbose) { +void Dependencies::DepStream::print_dependency(Klass* witness, bool verbose) { int nargs = argument_count(); - oop args[max_arg_count]; + DepArgument args[max_arg_count]; for (int j = 0; j < nargs; j++) { args[j] = argument(j); } @@ -615,27 +648,47 @@ } } +inline Metadata* Dependencies::DepStream::recorded_metadata_at(int i) { + Metadata* o = NULL; + if (_code != NULL) { + o = _code->metadata_at(i); + } else { + o = _deps->oop_recorder()->metadata_at(i); + } + assert(o == NULL || o->is_metadata(), + err_msg("Should be perm " PTR_FORMAT, o)); + return o; +} + inline oop Dependencies::DepStream::recorded_oop_at(int i) { return (_code != NULL) ? _code->oop_at(i) - : JNIHandles::resolve(_deps->oop_recorder()->handle_at(i)); + : JNIHandles::resolve(_deps->oop_recorder()->oop_at(i)); } -oop Dependencies::DepStream::argument(int i) { - return recorded_oop_at(argument_index(i)); +Metadata* Dependencies::DepStream::argument(int i) { + Metadata* result = recorded_metadata_at(argument_index(i)); + assert(result == NULL || result->is_klass() || result->is_method(), "must be"); + return result; } -klassOop Dependencies::DepStream::context_type() { +oop Dependencies::DepStream::argument_oop(int i) { + oop result = recorded_oop_at(argument_index(i)); + assert(result == NULL || result->is_oop(), "must be"); + return result; +} + +Klass* Dependencies::DepStream::context_type() { assert(must_be_in_vm(), "raw oops here"); // Most dependencies have an explicit context type argument. { int ctxkj = dep_context_arg(_type); // -1 if no explicit context arg if (ctxkj >= 0) { - oop k = argument(ctxkj); + Metadata* k = argument(ctxkj); if (k != NULL) { // context type was not compressed away assert(k->is_klass(), "type check"); - return (klassOop) k; + return (Klass*) k; } // recompute "default" context type return ctxk_encoded_as_null(_type, argument(ctxkj+1)); @@ -647,9 +700,9 @@ { int ctxkj = dep_implicit_context_arg(_type); if (ctxkj >= 0) { - oop k = argument(ctxkj)->klass(); + Klass* k = argument_oop(ctxkj)->klass(); assert(k->is_klass(), "type check"); - return (klassOop) k; + return (Klass*) k; } } @@ -675,16 +728,16 @@ Symbol* _signature; // special classes which are not allowed to be witnesses: - klassOop _participants[PARTICIPANT_LIMIT+1]; + Klass* _participants[PARTICIPANT_LIMIT+1]; int _num_participants; // cache of method lookups - methodOop _found_methods[PARTICIPANT_LIMIT+1]; + Method* _found_methods[PARTICIPANT_LIMIT+1]; // if non-zero, tells how many witnesses to convert to participants int _record_witnesses; - void initialize(klassOop participant) { + void initialize(Klass* participant) { _record_witnesses = 0; _participants[0] = participant; _found_methods[0] = NULL; @@ -697,7 +750,7 @@ } } - void initialize_from_method(methodOop m) { + void initialize_from_method(Method* m) { assert(m != NULL && m->is_method(), "sanity"); _name = m->name(); _signature = m->signature(); @@ -706,15 +759,15 @@ public: // The walker is initialized to recognize certain methods and/or types // as friendly participants. - ClassHierarchyWalker(klassOop participant, methodOop m) { + ClassHierarchyWalker(Klass* participant, Method* m) { initialize_from_method(m); initialize(participant); } - ClassHierarchyWalker(methodOop m) { + ClassHierarchyWalker(Method* m) { initialize_from_method(m); initialize(NULL); } - ClassHierarchyWalker(klassOop participant = NULL) { + ClassHierarchyWalker(Klass* participant = NULL) { _name = NULL; _signature = NULL; initialize(participant); @@ -727,15 +780,15 @@ } int num_participants() { return _num_participants; } - klassOop participant(int n) { + Klass* participant(int n) { assert((uint)n <= (uint)_num_participants, "oob"); return _participants[n]; } // Note: If n==num_participants, returns NULL. - methodOop found_method(int n) { + Method* found_method(int n) { assert((uint)n <= (uint)_num_participants, "oob"); - methodOop fm = _found_methods[n]; + Method* fm = _found_methods[n]; assert(n == _num_participants || fm != NULL, "proper usage"); assert(fm == NULL || fm->method_holder() == _participants[n], "sanity"); return fm; @@ -744,7 +797,7 @@ #ifdef ASSERT // Assert that m is inherited into ctxk, without intervening overrides. // (May return true even if this is not true, in corner cases where we punt.) - bool check_method_context(klassOop ctxk, methodOop m) { + bool check_method_context(Klass* ctxk, Method* m) { if (m->method_holder() == ctxk) return true; // Quick win. if (m->is_private()) @@ -753,10 +806,10 @@ // The override story is complex when packages get involved. return true; // Must punt the assertion to true. Klass* k = Klass::cast(ctxk); - methodOop lm = k->lookup_method(m->name(), m->signature()); + Method* lm = k->lookup_method(m->name(), m->signature()); if (lm == NULL && k->oop_is_instance()) { // It might be an abstract interface method, devoid of mirandas. - lm = ((instanceKlass*)k)->lookup_method_in_all_interfaces(m->name(), + lm = ((InstanceKlass*)k)->lookup_method_in_all_interfaces(m->name(), m->signature()); } if (lm == m) @@ -788,7 +841,7 @@ } #endif - void add_participant(klassOop participant) { + void add_participant(Klass* participant) { assert(_num_participants + _record_witnesses < PARTICIPANT_LIMIT, "oob"); int np = _num_participants++; _participants[np] = participant; @@ -802,11 +855,11 @@ _record_witnesses = add; } - bool is_witness(klassOop k) { + bool is_witness(Klass* k) { if (doing_subtype_search()) { return Dependencies::is_concrete_klass(k); } else { - methodOop m = instanceKlass::cast(k)->find_method(_name, _signature); + Method* m = InstanceKlass::cast(k)->find_method(_name, _signature); if (m == NULL || !Dependencies::is_concrete_method(m)) return false; _found_methods[_num_participants] = m; // Note: If add_participant(k) is called, @@ -815,7 +868,7 @@ } } - bool is_participant(klassOop k) { + bool is_participant(Klass* k) { if (k == _participants[0]) { return true; } else if (_num_participants <= 1) { @@ -824,7 +877,7 @@ return in_list(k, &_participants[1]); } } - bool ignore_witness(klassOop witness) { + bool ignore_witness(Klass* witness) { if (_record_witnesses == 0) { return false; } else { @@ -833,9 +886,9 @@ return true; } } - static bool in_list(klassOop x, klassOop* list) { + static bool in_list(Klass* x, Klass** list) { for (int i = 0; ; i++) { - klassOop y = list[i]; + Klass* y = list[i]; if (y == NULL) break; if (y == x) return true; } @@ -844,15 +897,15 @@ private: // the actual search method: - klassOop find_witness_anywhere(klassOop context_type, + Klass* find_witness_anywhere(Klass* context_type, bool participants_hide_witnesses, bool top_level_call = true); // the spot-checking version: - klassOop find_witness_in(KlassDepChange& changes, - klassOop context_type, + Klass* find_witness_in(KlassDepChange& changes, + Klass* context_type, bool participants_hide_witnesses); public: - klassOop find_witness_subtype(klassOop context_type, KlassDepChange* changes = NULL) { + Klass* find_witness_subtype(Klass* context_type, KlassDepChange* changes = NULL) { assert(doing_subtype_search(), "must set up a subtype search"); // When looking for unexpected concrete types, // do not look beneath expected ones. @@ -865,7 +918,7 @@ return find_witness_anywhere(context_type, participants_hide_witnesses); } } - klassOop find_witness_definer(klassOop context_type, KlassDepChange* changes = NULL) { + Klass* find_witness_definer(Klass* context_type, KlassDepChange* changes = NULL) { assert(!doing_subtype_search(), "must set up a method definer search"); // When looking for unexpected concrete methods, // look beneath expected ones, to see if there are overrides. @@ -926,11 +979,11 @@ #endif //PRODUCT -klassOop ClassHierarchyWalker::find_witness_in(KlassDepChange& changes, - klassOop context_type, +Klass* ClassHierarchyWalker::find_witness_in(KlassDepChange& changes, + Klass* context_type, bool participants_hide_witnesses) { assert(changes.involves_context(context_type), "irrelevant dependency"); - klassOop new_type = changes.new_type(); + Klass* new_type = changes.new_type(); count_find_witness_calls(); NOT_PRODUCT(deps_find_witness_singles++); @@ -940,7 +993,7 @@ // Must not move the class hierarchy during this check: assert_locked_or_safepoint(Compile_lock); - int nof_impls = instanceKlass::cast(context_type)->nof_implementors(); + int nof_impls = InstanceKlass::cast(context_type)->nof_implementors(); if (nof_impls > 1) { // Avoid this case: *I.m > { A.m, C }; B.m > C // %%% Until this is fixed more systematically, bail out. @@ -952,7 +1005,7 @@ if (participants_hide_witnesses) { // If the new type is a subtype of a participant, we are done. for (int i = 0; i < num_participants(); i++) { - klassOop part = participant(i); + Klass* part = participant(i); if (part == NULL) continue; assert(changes.involves_context(part) == Klass::cast(new_type)->is_subtype_of(part), "correct marking of participants, b/c new_type is unique"); @@ -977,7 +1030,7 @@ // them only if participants_hide_witnesses is false. // If top_level_call is false, skip testing the context type, // because the caller has already considered it. -klassOop ClassHierarchyWalker::find_witness_anywhere(klassOop context_type, +Klass* ClassHierarchyWalker::find_witness_anywhere(Klass* context_type, bool participants_hide_witnesses, bool top_level_call) { // Current thread must be in VM (not native mode, as in CI): @@ -1005,13 +1058,13 @@ // Now we must check each implementor and each subclass. // Use a short worklist to avoid blowing the stack. // Each worklist entry is a *chain* of subklass siblings to process. - const int CHAINMAX = 100; // >= 1 + instanceKlass::implementors_limit + const int CHAINMAX = 100; // >= 1 + InstanceKlass::implementors_limit Klass* chains[CHAINMAX]; int chaini = 0; // index into worklist Klass* chain; // scratch variable #define ADD_SUBCLASS_CHAIN(k) { \ assert(chaini < CHAINMAX, "oob"); \ - chain = instanceKlass::cast(k)->subklass(); \ + chain = InstanceKlass::cast(k)->subklass(); \ if (chain != NULL) chains[chaini++] = chain; } // Look for non-abstract subclasses. @@ -1020,9 +1073,9 @@ // If it is an interface, search its direct implementors. // (Their subclasses are additional indirect implementors. - // See instanceKlass::add_implementor.) + // See InstanceKlass::add_implementor.) // (Note: nof_implementors is always zero for non-interfaces.) - int nof_impls = instanceKlass::cast(context_type)->nof_implementors(); + int nof_impls = InstanceKlass::cast(context_type)->nof_implementors(); if (nof_impls > 1) { // Avoid this case: *I.m > { A.m, C }; B.m > C // Here, I.m has 2 concrete implementations, but m appears unique @@ -1034,7 +1087,7 @@ return context_type; } if (nof_impls > 0) { - klassOop impl = instanceKlass::cast(context_type)->implementor(); + Klass* impl = InstanceKlass::cast(context_type)->implementor(); assert(impl != NULL, "just checking"); // If impl is the same as the context_type, then more than one // implementor has seen. No exact info in this case. @@ -1057,8 +1110,7 @@ // Recursively process each non-trivial sibling chain. while (chaini > 0) { Klass* chain = chains[--chaini]; - for (Klass* subk = chain; subk != NULL; subk = subk->next_sibling()) { - klassOop sub = subk->as_klassOop(); + for (Klass* sub = chain; sub != NULL; sub = sub->next_sibling()) { if (do_counts) { NOT_PRODUCT(deps_find_witness_steps++); } if (is_participant(sub)) { if (participants_hide_witnesses) continue; @@ -1076,7 +1128,7 @@ // no need for the recursive call to re-test. That's handy, // since the recursive call sees sub as the context_type.) if (do_counts) { NOT_PRODUCT(deps_find_witness_recursions++); } - klassOop witness = find_witness_anywhere(sub, + Klass* witness = find_witness_anywhere(sub, participants_hide_witnesses, /*top_level_call=*/ false); if (witness != NULL) return witness; @@ -1090,7 +1142,7 @@ } -bool Dependencies::is_concrete_klass(klassOop k) { +bool Dependencies::is_concrete_klass(Klass* k) { if (Klass::cast(k)->is_abstract()) return false; // %%% We could treat classes which are concrete but // have not yet been instantiated as virtually abstract. @@ -1099,7 +1151,7 @@ return true; } -bool Dependencies::is_concrete_method(methodOop m) { +bool Dependencies::is_concrete_method(Method* m) { // Statics are irrelevant to virtual call sites. if (m->is_static()) return false; @@ -1148,7 +1200,7 @@ // Any use of the contents (bytecodes) of a method must be // marked by an "evol_method" dependency, if those contents // can change. (Note: A method is always dependent on itself.) -klassOop Dependencies::check_evol_method(methodOop m) { +Klass* Dependencies::check_evol_method(Method* m) { assert(must_be_in_vm(), "raw oops here"); // Did somebody do a JVMTI RedefineClasses while our backs were turned? // Or is there a now a breakpoint? @@ -1168,17 +1220,17 @@ // can be optimized more strongly than this, because we // know that the checked type comes from a concrete type, // and therefore we can disregard abstract types.) -klassOop Dependencies::check_leaf_type(klassOop ctxk) { +Klass* Dependencies::check_leaf_type(Klass* ctxk) { assert(must_be_in_vm(), "raw oops here"); assert_locked_or_safepoint(Compile_lock); - instanceKlass* ctx = instanceKlass::cast(ctxk); + InstanceKlass* ctx = InstanceKlass::cast(ctxk); Klass* sub = ctx->subklass(); if (sub != NULL) { - return sub->as_klassOop(); + return sub; } else if (ctx->nof_implementors() != 0) { // if it is an interface, it must be unimplemented // (if it is not an interface, nof_implementors is always zero) - klassOop impl = ctx->implementor(); + Klass* impl = ctx->implementor(); assert(impl != NULL, "must be set"); return impl; } else { @@ -1190,8 +1242,8 @@ // The type conck itself is allowed to have have further concrete subtypes. // This allows the compiler to narrow occurrences of ctxk by conck, // when dealing with the types of actual instances. -klassOop Dependencies::check_abstract_with_unique_concrete_subtype(klassOop ctxk, - klassOop conck, +Klass* Dependencies::check_abstract_with_unique_concrete_subtype(Klass* ctxk, + Klass* conck, KlassDepChange* changes) { ClassHierarchyWalker wf(conck); return wf.find_witness_subtype(ctxk, changes); @@ -1200,7 +1252,7 @@ // If a non-concrete class has no concrete subtypes, it is not (yet) // instantiatable. This can allow the compiler to make some paths go // dead, if they are gated by a test of the type. -klassOop Dependencies::check_abstract_with_no_concrete_subtype(klassOop ctxk, +Klass* Dependencies::check_abstract_with_no_concrete_subtype(Klass* ctxk, KlassDepChange* changes) { // Find any concrete subtype, with no participants: ClassHierarchyWalker wf; @@ -1210,7 +1262,7 @@ // If a concrete class has no concrete subtypes, it can always be // exactly typed. This allows the use of a cheaper type test. -klassOop Dependencies::check_concrete_with_no_concrete_subtype(klassOop ctxk, +Klass* Dependencies::check_concrete_with_no_concrete_subtype(Klass* ctxk, KlassDepChange* changes) { // Find any concrete subtype, with only the ctxk as participant: ClassHierarchyWalker wf(ctxk); @@ -1223,12 +1275,12 @@ // proper subtypes, return ctxk itself, whether it is concrete or not. // The returned subtype is allowed to have have further concrete subtypes. // That is, return CC1 for CX > CC1 > CC2, but NULL for CX > { CC1, CC2 }. -klassOop Dependencies::find_unique_concrete_subtype(klassOop ctxk) { +Klass* Dependencies::find_unique_concrete_subtype(Klass* ctxk) { ClassHierarchyWalker wf(ctxk); // Ignore ctxk when walking. wf.record_witnesses(1); // Record one other witness when walking. - klassOop wit = wf.find_witness_subtype(ctxk); + Klass* wit = wf.find_witness_subtype(ctxk); if (wit != NULL) return NULL; // Too many witnesses. - klassOop conck = wf.participant(0); + Klass* conck = wf.participant(0); if (conck == NULL) { #ifndef PRODUCT // Make sure the dependency mechanism will pass this discovery: @@ -1268,10 +1320,10 @@ // except possibly for further subtypes of k[12] themselves. // The context type must be abstract. The types k1 and k2 are themselves // allowed to have further concrete subtypes. -klassOop Dependencies::check_abstract_with_exclusive_concrete_subtypes( - klassOop ctxk, - klassOop k1, - klassOop k2, +Klass* Dependencies::check_abstract_with_exclusive_concrete_subtypes( + Klass* ctxk, + Klass* k1, + Klass* k2, KlassDepChange* changes) { ClassHierarchyWalker wf; wf.add_participant(k1); @@ -1285,12 +1337,12 @@ // (Note that a return of 0 means there are exactly no concrete subtypes.) // In this search, if ctxk is concrete, it will be reported alone. // For any type CC reported, no proper subtypes of CC will be reported. -int Dependencies::find_exclusive_concrete_subtypes(klassOop ctxk, +int Dependencies::find_exclusive_concrete_subtypes(Klass* ctxk, int klen, - klassOop karray[]) { + Klass* karray[]) { ClassHierarchyWalker wf; wf.record_witnesses(klen); - klassOop wit = wf.find_witness_subtype(ctxk); + Klass* wit = wf.find_witness_subtype(ctxk); if (wit != NULL) return -1; // Too many witnesses. int num = wf.num_participants(); assert(num <= klen, "oob"); @@ -1332,7 +1384,7 @@ // If a class (or interface) has a unique concrete method uniqm, return NULL. // Otherwise, return a class that contains an interfering method. -klassOop Dependencies::check_unique_concrete_method(klassOop ctxk, methodOop uniqm, +Klass* Dependencies::check_unique_concrete_method(Klass* ctxk, Method* uniqm, KlassDepChange* changes) { // Here is a missing optimization: If uniqm->is_final(), // we don't really need to search beneath it for overrides. @@ -1346,13 +1398,13 @@ // (The method m must be defined or inherited in ctxk.) // Include m itself in the set, unless it is abstract. // If this set has exactly one element, return that element. -methodOop Dependencies::find_unique_concrete_method(klassOop ctxk, methodOop m) { +Method* Dependencies::find_unique_concrete_method(Klass* ctxk, Method* m) { ClassHierarchyWalker wf(m); assert(wf.check_method_context(ctxk, m), "proper context"); wf.record_witnesses(1); - klassOop wit = wf.find_witness_definer(ctxk); + Klass* wit = wf.find_witness_definer(ctxk); if (wit != NULL) return NULL; // Too many witnesses. - methodOop fm = wf.found_method(0); // Will be NULL if num_parts == 0. + Method* fm = wf.found_method(0); // Will be NULL if num_parts == 0. if (Dependencies::is_concrete_method(m)) { if (fm == NULL) { // It turns out that m was always the only implementation. @@ -1373,9 +1425,9 @@ return fm; } -klassOop Dependencies::check_exclusive_concrete_methods(klassOop ctxk, - methodOop m1, - methodOop m2, +Klass* Dependencies::check_exclusive_concrete_methods(Klass* ctxk, + Method* m1, + Method* m2, KlassDepChange* changes) { ClassHierarchyWalker wf(m1); wf.add_participant(m1->method_holder()); @@ -1389,15 +1441,15 @@ // Fill the given array m[0..(mlen-1)] with this set, and return the length. // (The length may be zero if no concrete methods are found anywhere.) // If there are too many concrete methods to fit in marray, return -1. -int Dependencies::find_exclusive_concrete_methods(klassOop ctxk, +int Dependencies::find_exclusive_concrete_methods(Klass* ctxk, int mlen, - methodOop marray[]) { - methodOop m0 = marray[0]; + Method* marray[]) { + Method* m0 = marray[0]; ClassHierarchyWalker wf(m0); assert(wf.check_method_context(ctxk, m0), "proper context"); wf.record_witnesses(mlen); bool participants_hide_witnesses = true; - klassOop wit = wf.find_witness_definer(ctxk); + Klass* wit = wf.find_witness_definer(ctxk); if (wit != NULL) return -1; // Too many witnesses. int num = wf.num_participants(); assert(num <= mlen, "oob"); @@ -1407,7 +1459,7 @@ if (Dependencies::is_concrete_method(m0)) mfill++; // keep m0 as marray[0], the first result for (int i = 0; i < num; i++) { - methodOop fm = wf.found_method(i); + Method* fm = wf.found_method(i); if (fm == m0) continue; // Already put this guy in the list. if (mfill == mlen) { return -1; // Oops. Too many methods after all! @@ -1438,19 +1490,15 @@ } -klassOop Dependencies::check_has_no_finalizable_subclasses(klassOop ctxk, KlassDepChange* changes) { - Klass* search_at = ctxk->klass_part(); +Klass* Dependencies::check_has_no_finalizable_subclasses(Klass* ctxk, KlassDepChange* changes) { + Klass* search_at = ctxk; if (changes != NULL) - search_at = changes->new_type()->klass_part(); // just look at the new bit - Klass* result = find_finalizable_subclass(search_at); - if (result == NULL) { - return NULL; - } - return result->as_klassOop(); + search_at = changes->new_type(); // just look at the new bit + return find_finalizable_subclass(search_at); } -klassOop Dependencies::check_call_site_target_value(oop call_site, oop method_handle, CallSiteDepChange* changes) { +Klass* Dependencies::check_call_site_target_value(oop call_site, oop method_handle, CallSiteDepChange* changes) { assert(call_site ->is_a(SystemDictionary::CallSite_klass()), "sanity"); assert(method_handle->is_a(SystemDictionary::MethodHandle_klass()), "sanity"); if (changes == NULL) { @@ -1468,7 +1516,7 @@ } -void Dependencies::DepStream::trace_and_log_witness(klassOop witness) { +void Dependencies::DepStream::trace_and_log_witness(Klass* witness) { if (witness != NULL) { if (TraceDependencies) { print_dependency(witness, /*verbose=*/ true); @@ -1479,11 +1527,11 @@ } -klassOop Dependencies::DepStream::check_klass_dependency(KlassDepChange* changes) { +Klass* Dependencies::DepStream::check_klass_dependency(KlassDepChange* changes) { assert_locked_or_safepoint(Compile_lock); Dependencies::check_valid_dependency_type(type()); - klassOop witness = NULL; + Klass* witness = NULL; switch (type()) { case evol_method: witness = check_evol_method(method_argument(0)); @@ -1521,14 +1569,14 @@ } -klassOop Dependencies::DepStream::check_call_site_dependency(CallSiteDepChange* changes) { +Klass* Dependencies::DepStream::check_call_site_dependency(CallSiteDepChange* changes) { assert_locked_or_safepoint(Compile_lock); Dependencies::check_valid_dependency_type(type()); - klassOop witness = NULL; + Klass* witness = NULL; switch (type()) { case call_site_target_value: - witness = check_call_site_target_value(argument(0), argument(1), changes); + witness = check_call_site_target_value(argument_oop(0), argument_oop(1), changes); break; default: witness = NULL; @@ -1539,7 +1587,7 @@ } -klassOop Dependencies::DepStream::spot_check_dependency_at(DepChange& changes) { +Klass* Dependencies::DepStream::spot_check_dependency_at(DepChange& changes) { // Handle klass dependency if (changes.is_klass_change() && changes.as_klass_change()->involves_context(context_type())) return check_klass_dependency(changes.as_klass_change()); @@ -1556,23 +1604,23 @@ void DepChange::print() { int nsup = 0, nint = 0; for (ContextStream str(*this); str.next(); ) { - klassOop k = str.klass(); + Klass* k = str.klass(); switch (str.change_type()) { case Change_new_type: - tty->print_cr(" dependee = %s", instanceKlass::cast(k)->external_name()); + tty->print_cr(" dependee = %s", InstanceKlass::cast(k)->external_name()); break; case Change_new_sub: if (!WizardMode) { ++nsup; } else { - tty->print_cr(" context super = %s", instanceKlass::cast(k)->external_name()); + tty->print_cr(" context super = %s", InstanceKlass::cast(k)->external_name()); } break; case Change_new_impl: if (!WizardMode) { ++nint; } else { - tty->print_cr(" context interface = %s", instanceKlass::cast(k)->external_name()); + tty->print_cr(" context interface = %s", InstanceKlass::cast(k)->external_name()); } break; } @@ -1583,7 +1631,7 @@ } void DepChange::ContextStream::start() { - klassOop new_type = _changes.is_klass_change() ? _changes.as_klass_change()->new_type() : (klassOop) NULL; + Klass* new_type = _changes.is_klass_change() ? _changes.as_klass_change()->new_type() : (Klass*) NULL; _change_type = (new_type == NULL ? NO_CHANGE : Start_Klass); _klass = new_type; _ti_base = NULL; @@ -1594,7 +1642,7 @@ bool DepChange::ContextStream::next() { switch (_change_type) { case Start_Klass: // initial state; _klass is the new type - _ti_base = instanceKlass::cast(_klass)->transitive_interfaces(); + _ti_base = InstanceKlass::cast(_klass)->transitive_interfaces(); _ti_index = 0; _change_type = Change_new_type; return true; @@ -1604,7 +1652,7 @@ case Change_new_sub: // 6598190: brackets workaround Sun Studio C++ compiler bug 6629277 { - _klass = instanceKlass::cast(_klass)->super(); + _klass = InstanceKlass::cast(_klass)->super(); if (_klass != NULL) { return true; } @@ -1614,7 +1662,7 @@ _change_type = Change_new_impl; case Change_new_impl: if (_ti_index < _ti_limit) { - _klass = klassOop( _ti_base->obj_at(_ti_index++) ); + _klass = _ti_base->at(_ti_index++); return true; } // fall through: @@ -1634,9 +1682,9 @@ // Mark all dependee and all its superclasses // Mark transitive interfaces for (ContextStream str(*this); str.next(); ) { - klassOop d = str.klass(); - assert(!instanceKlass::cast(d)->is_marked_dependent(), "checking"); - instanceKlass::cast(d)->set_is_marked_dependent(true); + Klass* d = str.klass(); + assert(!InstanceKlass::cast(d)->is_marked_dependent(), "checking"); + InstanceKlass::cast(d)->set_is_marked_dependent(true); } } @@ -1644,16 +1692,16 @@ // Unmark all dependee and all its superclasses // Unmark transitive interfaces for (ContextStream str(*this); str.next(); ) { - klassOop d = str.klass(); - instanceKlass::cast(d)->set_is_marked_dependent(false); + Klass* d = str.klass(); + InstanceKlass::cast(d)->set_is_marked_dependent(false); } } -bool KlassDepChange::involves_context(klassOop k) { +bool KlassDepChange::involves_context(Klass* k) { if (k == NULL || !Klass::cast(k)->oop_is_instance()) { return false; } - instanceKlass* ik = instanceKlass::cast(k); + InstanceKlass* ik = InstanceKlass::cast(k); bool is_contained = ik->is_marked_dependent(); assert(is_contained == Klass::cast(new_type())->is_subtype_of(k), "correct marking of potential context types"); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/dependencies.hpp --- a/src/share/vm/code/dependencies.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/dependencies.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -203,7 +203,7 @@ private: // State for writing a new set of dependencies: GrowableArray* _dep_seen; // (seen[h->ident] & (1<* _deps[TYPE_LIMIT]; + GrowableArray* _deps[TYPE_LIMIT]; static const char* _dep_name[TYPE_LIMIT]; static int _dep_args[TYPE_LIMIT]; @@ -212,7 +212,7 @@ return (int)dept >= 0 && dept < TYPE_LIMIT && ((1<ident(); assert(_dep_seen != NULL, "deps must be writable"); @@ -222,7 +222,7 @@ return (seen & (1<* deps, + bool maybe_merge_ctxk(GrowableArray* deps, int ctxk_i, ciKlass* ctxk); void sort_all_deps(); @@ -260,9 +260,9 @@ assert(!is_concrete_klass(ctxk->as_instance_klass()), "must be abstract"); } - void assert_common_1(DepType dept, ciObject* x); - void assert_common_2(DepType dept, ciObject* x0, ciObject* x1); - void assert_common_3(DepType dept, ciKlass* ctxk, ciObject* x1, ciObject* x2); + void assert_common_1(DepType dept, ciBaseObject* x); + void assert_common_2(DepType dept, ciBaseObject* x0, ciBaseObject* x1); + void assert_common_3(DepType dept, ciKlass* ctxk, ciBaseObject* x1, ciBaseObject* x2); public: // Adding assertions to a new dependency set at compile time: @@ -286,8 +286,8 @@ // methods to remain non-concrete until their first invocation. // In that case, there would be a middle ground between concrete // and abstract (as defined by the Java language and VM). - static bool is_concrete_klass(klassOop k); // k is instantiable - static bool is_concrete_method(methodOop m); // m is invocable + static bool is_concrete_klass(Klass* k); // k is instantiable + static bool is_concrete_method(Method* m); // m is invocable static Klass* find_finalizable_subclass(Klass* k); // These versions of the concreteness queries work through the CI. @@ -314,24 +314,24 @@ // dependency on it must fail. // Checking old assertions at run-time (in the VM only): - static klassOop check_evol_method(methodOop m); - static klassOop check_leaf_type(klassOop ctxk); - static klassOop check_abstract_with_unique_concrete_subtype(klassOop ctxk, klassOop conck, + static Klass* check_evol_method(Method* m); + static Klass* check_leaf_type(Klass* ctxk); + static Klass* check_abstract_with_unique_concrete_subtype(Klass* ctxk, Klass* conck, KlassDepChange* changes = NULL); - static klassOop check_abstract_with_no_concrete_subtype(klassOop ctxk, + static Klass* check_abstract_with_no_concrete_subtype(Klass* ctxk, KlassDepChange* changes = NULL); - static klassOop check_concrete_with_no_concrete_subtype(klassOop ctxk, + static Klass* check_concrete_with_no_concrete_subtype(Klass* ctxk, KlassDepChange* changes = NULL); - static klassOop check_unique_concrete_method(klassOop ctxk, methodOop uniqm, + static Klass* check_unique_concrete_method(Klass* ctxk, Method* uniqm, KlassDepChange* changes = NULL); - static klassOop check_abstract_with_exclusive_concrete_subtypes(klassOop ctxk, klassOop k1, klassOop k2, + static Klass* check_abstract_with_exclusive_concrete_subtypes(Klass* ctxk, Klass* k1, Klass* k2, KlassDepChange* changes = NULL); - static klassOop check_exclusive_concrete_methods(klassOop ctxk, methodOop m1, methodOop m2, + static Klass* check_exclusive_concrete_methods(Klass* ctxk, Method* m1, Method* m2, KlassDepChange* changes = NULL); - static klassOop check_has_no_finalizable_subclasses(klassOop ctxk, KlassDepChange* changes = NULL); - static klassOop check_call_site_target_value(oop call_site, oop method_handle, CallSiteDepChange* changes = NULL); - // A returned klassOop is NULL if the dependency assertion is still - // valid. A non-NULL klassOop is a 'witness' to the assertion + static Klass* check_has_no_finalizable_subclasses(Klass* ctxk, KlassDepChange* changes = NULL); + static Klass* check_call_site_target_value(oop call_site, oop method_handle, CallSiteDepChange* changes = NULL); + // A returned Klass* is NULL if the dependency assertion is still + // valid. A non-NULL Klass* is a 'witness' to the assertion // failure, a point in the class hierarchy where the assertion has // been proven false. For example, if check_leaf_type returns // non-NULL, the value is a subtype of the supposed leaf type. This @@ -345,10 +345,10 @@ // It is used by DepStream::spot_check_dependency_at. // Detecting possible new assertions: - static klassOop find_unique_concrete_subtype(klassOop ctxk); - static methodOop find_unique_concrete_method(klassOop ctxk, methodOop m); - static int find_exclusive_concrete_subtypes(klassOop ctxk, int klen, klassOop k[]); - static int find_exclusive_concrete_methods(klassOop ctxk, int mlen, methodOop m[]); + static Klass* find_unique_concrete_subtype(Klass* ctxk); + static Method* find_unique_concrete_method(Klass* ctxk, Method* m); + static int find_exclusive_concrete_subtypes(Klass* ctxk, int klen, Klass* k[]); + static int find_exclusive_concrete_methods(Klass* ctxk, int mlen, Method* m[]); // Create the encoding which will be stored in an nmethod. void encode_content_bytes(); @@ -368,15 +368,15 @@ void copy_to(nmethod* nm); void log_all_dependencies(); - void log_dependency(DepType dept, int nargs, ciObject* args[]) { + void log_dependency(DepType dept, int nargs, ciBaseObject* args[]) { write_dependency_to(log(), dept, nargs, args); } void log_dependency(DepType dept, - ciObject* x0, - ciObject* x1 = NULL, - ciObject* x2 = NULL) { + ciBaseObject* x0, + ciBaseObject* x1 = NULL, + ciBaseObject* x2 = NULL) { if (log() == NULL) return; - ciObject* args[max_arg_count]; + ciBaseObject* args[max_arg_count]; args[0] = x0; args[1] = x1; args[2] = x2; @@ -384,27 +384,47 @@ log_dependency(dept, dep_args(dept), args); } - static void write_dependency_to(CompileLog* log, - DepType dept, - int nargs, ciObject* args[], - klassOop witness = NULL); + class DepArgument : public ResourceObj { + private: + bool _is_oop; + bool _valid; + void* _value; + public: + DepArgument() : _is_oop(false), _value(NULL), _valid(false) {} + DepArgument(oop v): _is_oop(true), _value(v), _valid(true) {} + DepArgument(Metadata* v): _is_oop(false), _value(v), _valid(true) {} + + bool is_null() const { return _value == NULL; } + bool is_oop() const { return _is_oop; } + bool is_metadata() const { return !_is_oop; } + bool is_klass() const { return is_metadata() && metadata_value()->is_klass(); } + bool is_method() const { return is_metadata() && metadata_value()->is_method(); } + + oop oop_value() const { assert(_is_oop && _valid, "must be"); return (oop) _value; } + Metadata* metadata_value() const { assert(!_is_oop && _valid, "must be"); return (Metadata*) _value; } + }; + static void write_dependency_to(CompileLog* log, DepType dept, - int nargs, oop args[], - klassOop witness = NULL); + int nargs, ciBaseObject* args[], + Klass* witness = NULL); + static void write_dependency_to(CompileLog* log, + DepType dept, + int nargs, DepArgument args[], + Klass* witness = NULL); static void write_dependency_to(xmlStream* xtty, DepType dept, - int nargs, oop args[], - klassOop witness = NULL); + int nargs, DepArgument args[], + Klass* witness = NULL); static void print_dependency(DepType dept, - int nargs, oop args[], - klassOop witness = NULL); + int nargs, DepArgument args[], + Klass* witness = NULL); private: // helper for encoding common context types as zero: - static ciKlass* ctxk_encoded_as_null(DepType dept, ciObject* x); + static ciKlass* ctxk_encoded_as_null(DepType dept, ciBaseObject* x); - static klassOop ctxk_encoded_as_null(DepType dept, oop x); + static Klass* ctxk_encoded_as_null(DepType dept, Metadata* x); public: // Use this to iterate over an nmethod's dependency set. @@ -433,13 +453,13 @@ void initial_asserts(size_t byte_limit) NOT_DEBUG({}); + inline Metadata* recorded_metadata_at(int i); inline oop recorded_oop_at(int i); - // => _code? _code->oop_at(i): *_deps->_oop_recorder->handle_at(i) - klassOop check_klass_dependency(KlassDepChange* changes); - klassOop check_call_site_dependency(CallSiteDepChange* changes); + Klass* check_klass_dependency(KlassDepChange* changes); + Klass* check_call_site_dependency(CallSiteDepChange* changes); - void trace_and_log_witness(klassOop witness); + void trace_and_log_witness(Klass* witness); public: DepStream(Dependencies* deps) @@ -463,38 +483,39 @@ int argument_count() { return dep_args(type()); } int argument_index(int i) { assert(0 <= i && i < argument_count(), "oob"); return _xi[i]; } - oop argument(int i); // => recorded_oop_at(argument_index(i)) - klassOop context_type(); + Metadata* argument(int i); // => recorded_oop_at(argument_index(i)) + oop argument_oop(int i); // => recorded_oop_at(argument_index(i)) + Klass* context_type(); bool is_klass_type() { return Dependencies::is_klass_type(type()); } - methodOop method_argument(int i) { - oop x = argument(i); + Method* method_argument(int i) { + Metadata* x = argument(i); assert(x->is_method(), "type"); - return (methodOop) x; + return (Method*) x; } - klassOop type_argument(int i) { - oop x = argument(i); + Klass* type_argument(int i) { + Metadata* x = argument(i); assert(x->is_klass(), "type"); - return (klassOop) x; + return (Klass*) x; } // The point of the whole exercise: Is this dep still OK? - klassOop check_dependency() { - klassOop result = check_klass_dependency(NULL); + Klass* check_dependency() { + Klass* result = check_klass_dependency(NULL); if (result != NULL) return result; return check_call_site_dependency(NULL); } // A lighter version: Checks only around recent changes in a class // hierarchy. (See Universe::flush_dependents_on.) - klassOop spot_check_dependency_at(DepChange& changes); + Klass* spot_check_dependency_at(DepChange& changes); // Log the current dependency to xtty or compilation log. - void log_dependency(klassOop witness = NULL); + void log_dependency(Klass* witness = NULL); // Print the current dependency to tty. - void print_dependency(klassOop witness = NULL, bool verbose = false); + void print_dependency(Klass* witness = NULL, bool verbose = false); }; friend class Dependencies::DepStream; @@ -533,7 +554,7 @@ // Usage: // for (DepChange::ContextStream str(changes); str.next(); ) { - // klassOop k = str.klass(); + // Klass* k = str.klass(); // switch (str.change_type()) { // ... // } @@ -545,8 +566,8 @@ // iteration variables: ChangeType _change_type; - klassOop _klass; - objArrayOop _ti_base; // i.e., transitive_interfaces + Klass* _klass; + Array* _ti_base; // i.e., transitive_interfaces int _ti_index; int _ti_limit; @@ -566,7 +587,7 @@ bool next(); ChangeType change_type() { return _change_type; } - klassOop klass() { return _klass; } + Klass* klass() { return _klass; } }; friend class DepChange::ContextStream; }; @@ -598,10 +619,10 @@ // What kind of DepChange is this? virtual bool is_klass_change() const { return true; } - klassOop new_type() { return _new_type(); } + Klass* new_type() { return _new_type(); } // involves_context(k) is true if k is new_type or any of the super types - bool involves_context(klassOop k); + bool involves_context(Klass* k); }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/exceptionHandlerTable.hpp --- a/src/share/vm/code/exceptionHandlerTable.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/exceptionHandlerTable.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ #define SHARE_VM_CODE_EXCEPTIONHANDLERTABLE_HPP #include "memory/allocation.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" // A HandlerTableEntry describes an individual entry of a subtable // of ExceptionHandlerTable. An entry consists of a pair(bci, pco), diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/icBuffer.cpp --- a/src/share/vm/code/icBuffer.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/icBuffer.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,7 @@ #include "interpreter/linkResolver.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.inline2.hpp" #include "runtime/mutexLocker.hpp" @@ -59,16 +59,17 @@ StubQueue* InlineCacheBuffer::_buffer = NULL; ICStub* InlineCacheBuffer::_next_stub = NULL; +CompiledICHolder* InlineCacheBuffer::_pending_released = NULL; +int InlineCacheBuffer::_pending_count = 0; void ICStub::finalize() { if (!is_empty()) { ResourceMark rm; - CompiledIC *ic = CompiledIC_at(ic_site()); + CompiledIC *ic = CompiledIC_at(CodeCache::find_nmethod(ic_site()), ic_site()); assert(CodeCache::find_nmethod(ic->instruction_address()) != NULL, "inline cache in non-nmethod?"); assert(this == ICStub_from_destination_address(ic->stub_address()), "wrong owner of ic buffer"); - ic->set_cached_oop(cached_oop()); - ic->set_ic_destination(destination()); + ic->set_ic_destination_and_value(destination(), cached_value()); } } @@ -77,25 +78,28 @@ return InlineCacheBuffer::ic_buffer_entry_point(code_begin()); } -oop ICStub::cached_oop() const { - return InlineCacheBuffer::ic_buffer_cached_oop(code_begin()); +void* ICStub::cached_value() const { + return InlineCacheBuffer::ic_buffer_cached_value(code_begin()); } -void ICStub::set_stub(CompiledIC *ic, oop cached_value, address dest_addr) { +void ICStub::set_stub(CompiledIC *ic, void* cached_val, address dest_addr) { // We cannot store a pointer to the 'ic' object, since it is resource allocated. Instead we // store the location of the inline cache. Then we have enough information recreate the CompiledIC // object when we need to remove the stub. _ic_site = ic->instruction_address(); // Assemble new stub - InlineCacheBuffer::assemble_ic_buffer_code(code_begin(), cached_value, dest_addr); + InlineCacheBuffer::assemble_ic_buffer_code(code_begin(), cached_val, dest_addr); assert(destination() == dest_addr, "can recover destination"); - assert(cached_oop() == cached_value, "can recover destination"); + assert(cached_value() == cached_val, "can recover destination"); } void ICStub::clear() { + if (CompiledIC::is_icholder_entry(destination())) { + InlineCacheBuffer::queue_for_release((CompiledICHolder*)cached_value()); + } _ic_site = NULL; } @@ -161,6 +165,7 @@ buffer()->remove_all(); init_next_stub(); } + release_pending_icholders(); } @@ -179,11 +184,13 @@ } -void InlineCacheBuffer::create_transition_stub(CompiledIC *ic, oop cached_oop, address entry) { +void InlineCacheBuffer::create_transition_stub(CompiledIC *ic, void* cached_value, address entry) { assert(!SafepointSynchronize::is_at_safepoint(), "should not be called during a safepoint"); assert (CompiledIC_lock->is_locked(), ""); - assert(cached_oop == NULL || cached_oop->is_perm(), "must belong to perm. space"); - if (TraceICBuffer) { tty->print_cr(" create transition stub for " INTPTR_FORMAT, ic->instruction_address()); } + if (TraceICBuffer) { + tty->print_cr(" create transition stub for " INTPTR_FORMAT " destination " INTPTR_FORMAT " cached value " INTPTR_FORMAT, + ic->instruction_address(), entry, cached_value); + } // If an transition stub is already associate with the inline cache, then we remove the association. if (ic->is_in_transition_state()) { @@ -193,10 +200,10 @@ // allocate and initialize new "out-of-line" inline-cache ICStub* ic_stub = get_next_stub(); - ic_stub->set_stub(ic, cached_oop, entry); + ic_stub->set_stub(ic, cached_value, entry); // Update inline cache in nmethod to point to new "out-of-line" allocated inline cache - ic->set_ic_destination(ic_stub->code_begin()); + ic->set_ic_destination(ic_stub); set_next_stub(new_ic_stub()); // can cause safepoint synchronization } @@ -208,7 +215,35 @@ } -oop InlineCacheBuffer::cached_oop_for(CompiledIC *ic) { +void* InlineCacheBuffer::cached_value_for(CompiledIC *ic) { ICStub* stub = ICStub_from_destination_address(ic->stub_address()); - return stub->cached_oop(); + return stub->cached_value(); } + + +// Free CompiledICHolder*s that are no longer in use +void InlineCacheBuffer::release_pending_icholders() { + assert(SafepointSynchronize::is_at_safepoint(), "should only be called during a safepoint"); + CompiledICHolder* holder = _pending_released; + _pending_released = NULL; + while (holder != NULL) { + CompiledICHolder* next = holder->next(); + delete holder; + holder = next; + _pending_count--; + } + assert(_pending_count == 0, "wrong count"); +} + +// Enqueue this icholder for release during the next safepoint. It's +// not safe to free them until them since they might be visible to +// another thread. +void InlineCacheBuffer::queue_for_release(CompiledICHolder* icholder) { + MutexLockerEx mex(InlineCacheBuffer_lock); + icholder->set_next(_pending_released); + _pending_released = icholder; + _pending_count++; + if (TraceICBuffer) { + tty->print_cr("enqueueing icholder " INTPTR_FORMAT " to be freed", icholder); + } +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/icBuffer.hpp --- a/src/share/vm/code/icBuffer.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/icBuffer.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,7 +57,7 @@ public: // Creation - void set_stub(CompiledIC *ic, oop cached_value, address dest_addr); + void set_stub(CompiledIC *ic, void* cached_value, address dest_addr); // Code info address code_begin() const { return (address)this + round_to(sizeof(ICStub), CodeEntryAlignment); } @@ -70,7 +70,7 @@ // stub info address destination() const; // destination of jump instruction - oop cached_oop() const; // cached_oop for stub + void* cached_value() const; // cached_value for stub // Debugging void verify() PRODUCT_RETURN; @@ -99,6 +99,9 @@ static StubQueue* _buffer; static ICStub* _next_stub; + static CompiledICHolder* _pending_released; + static int _pending_count; + static StubQueue* buffer() { return _buffer; } static void set_next_stub(ICStub* next_stub) { _next_stub = next_stub; } static ICStub* get_next_stub() { return _next_stub; } @@ -109,9 +112,9 @@ // Machine-dependent implementation of ICBuffer - static void assemble_ic_buffer_code(address code_begin, oop cached_oop, address entry_point); + static void assemble_ic_buffer_code(address code_begin, void* cached_value, address entry_point); static address ic_buffer_entry_point (address code_begin); - static oop ic_buffer_cached_oop (address code_begin); + static void* ic_buffer_cached_value (address code_begin); public: @@ -127,11 +130,14 @@ // for debugging static bool is_empty(); + static void release_pending_icholders(); + static void queue_for_release(CompiledICHolder* icholder); + static int pending_icholder_count() { return _pending_count; } // New interface - static void create_transition_stub(CompiledIC *ic, oop cached_oop, address entry); + static void create_transition_stub(CompiledIC *ic, void* cached_value, address entry); static address ic_destination_for(CompiledIC *ic); - static oop cached_oop_for(CompiledIC *ic); + static void* cached_value_for(CompiledIC *ic); }; #endif // SHARE_VM_CODE_ICBUFFER_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/nmethod.cpp --- a/src/share/vm/code/nmethod.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/nmethod.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -34,7 +34,7 @@ #include "compiler/compilerOracle.hpp" #include "compiler/disassembler.hpp" #include "interpreter/bytecode.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "prims/jvmtiImpl.hpp" #include "runtime/sharedRuntime.hpp" @@ -59,7 +59,7 @@ #define DTRACE_METHOD_UNLOAD_PROBE(method) \ { \ - methodOop m = (method); \ + Method* m = (method); \ if (m != NULL) { \ Symbol* klass_name = m->klass_name(); \ Symbol* name = m->name(); \ @@ -73,7 +73,7 @@ #else /* USDT2 */ #define DTRACE_METHOD_UNLOAD_PROBE(method) \ { \ - methodOop m = (method); \ + Method* m = (method); \ if (m != NULL) { \ Symbol* klass_name = m->klass_name(); \ Symbol* name = m->name(); \ @@ -495,6 +495,7 @@ ByteSize basic_lock_owner_sp_offset, ByteSize basic_lock_sp_offset, OopMapSet* oop_maps) { + code_buffer->finalize_oop_references(method); // create nmethod nmethod* nm = NULL; { @@ -529,6 +530,7 @@ int trap_offset, int frame_complete, int frame_size) { + code_buffer->finalize_oop_references(method); // create nmethod nmethod* nm = NULL; { @@ -573,6 +575,7 @@ ) { assert(debug_info->oop_recorder() == code_buffer->oop_recorder(), "shared OR"); + code_buffer->finalize_oop_references(method); // create nmethod nmethod* nm = NULL; { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); @@ -601,11 +604,11 @@ // the number of methods compiled. For applications with a lot // classes the slow way is too slow. for (Dependencies::DepStream deps(nm); deps.next(); ) { - klassOop klass = deps.context_type(); + Klass* klass = deps.context_type(); if (klass == NULL) continue; // ignore things like evol_method // record this nmethod as dependent on this klass - instanceKlass::cast(klass)->add_dependent_nmethod(nm); + InstanceKlass::cast(klass)->add_dependent_nmethod(nm); } } NOT_PRODUCT(if (nm != NULL) nmethod_stats.note_nmethod(nm)); @@ -627,7 +630,7 @@ // For native wrappers nmethod::nmethod( - methodOop method, + Method* method, int nmethod_size, int compile_id, CodeOffsets* offsets, @@ -658,7 +661,8 @@ _consts_offset = data_offset(); _stub_offset = data_offset(); _oops_offset = data_offset(); - _scopes_data_offset = _oops_offset + round_to(code_buffer->total_oop_size(), oopSize); + _metadata_offset = _oops_offset + round_to(code_buffer->total_oop_size(), oopSize); + _scopes_data_offset = _metadata_offset + round_to(code_buffer->total_metadata_size(), wordSize); _scopes_pcs_offset = _scopes_data_offset; _dependencies_offset = _scopes_pcs_offset; _handler_table_offset = _dependencies_offset; @@ -672,7 +676,7 @@ _exception_cache = NULL; _pc_desc_cache.reset_to(NULL); - code_buffer->copy_oops_to(this); + code_buffer->copy_values_to(this); if (ScavengeRootsInCode && detect_scavenge_root_oops()) { CodeCache::add_scavenge_root_nmethod(this); } @@ -710,7 +714,7 @@ // For dtrace wrappers #ifdef HAVE_DTRACE_H nmethod::nmethod( - methodOop method, + Method* method, int nmethod_size, CodeOffsets* offsets, CodeBuffer* code_buffer, @@ -738,7 +742,8 @@ _consts_offset = data_offset(); _stub_offset = data_offset(); _oops_offset = data_offset(); - _scopes_data_offset = _oops_offset + round_to(code_buffer->total_oop_size(), oopSize); + _metadata_offset = _oops_offset + round_to(code_buffer->total_oop_size(), oopSize); + _scopes_data_offset = _metadata_offset + round_to(code_buffer->total_metadata_size(), wordSize); _scopes_pcs_offset = _scopes_data_offset; _dependencies_offset = _scopes_pcs_offset; _handler_table_offset = _dependencies_offset; @@ -752,7 +757,7 @@ _exception_cache = NULL; _pc_desc_cache.reset_to(NULL); - code_buffer->copy_oops_to(this); + code_buffer->copy_values_to(this); debug_only(verify_scavenge_root_oops()); CodeCache::commit(this); } @@ -792,7 +797,7 @@ nmethod::nmethod( - methodOop method, + Method* method, int nmethod_size, int compile_id, int entry_bci, @@ -847,7 +852,9 @@ } _oops_offset = data_offset(); - _scopes_data_offset = _oops_offset + round_to(code_buffer->total_oop_size (), oopSize); + _metadata_offset = _oops_offset + round_to(code_buffer->total_oop_size(), oopSize); + _scopes_data_offset = _metadata_offset + round_to(code_buffer->total_metadata_size(), wordSize); + _scopes_pcs_offset = _scopes_data_offset + round_to(debug_info->data_size (), oopSize); _dependencies_offset = _scopes_pcs_offset + adjust_pcs_size(debug_info->pcs_size()); _handler_table_offset = _dependencies_offset + round_to(dependencies->size_in_bytes (), oopSize); @@ -861,7 +868,7 @@ _pc_desc_cache.reset_to(scopes_pcs_begin()); // Copy contents of ScopeDescRecorder to nmethod - code_buffer->copy_oops_to(this); + code_buffer->copy_values_to(this); debug_info->copy_to(this); dependencies->copy_to(this); if (ScavengeRootsInCode && detect_scavenge_root_oops()) { @@ -1003,10 +1010,10 @@ } -void nmethod::copy_oops(GrowableArray* array) { - //assert(oops_size() == 0, "do this handshake just once, please"); +// Have to have the same name because it's called by a template +void nmethod::copy_values(GrowableArray* array) { int length = array->length(); - assert((address)(oops_begin() + length) <= data_end(), "oops big enough"); + assert((address)(oops_begin() + length) <= (address)oops_end(), "oops big enough"); oop* dest = oops_begin(); for (int index = 0 ; index < length; index++) { initialize_immediate_oop(&dest[index], array->at(index)); @@ -1020,6 +1027,14 @@ fix_oop_relocations(NULL, NULL, /*initialize_immediates=*/ true); } +void nmethod::copy_values(GrowableArray* array) { + int length = array->length(); + assert((address)(metadata_begin() + length) <= (address)metadata_end(), "big enough"); + Metadata** dest = metadata_begin(); + for (int index = 0 ; index < length; index++) { + dest[index] = array->at(index); + } +} bool nmethod::is_at_poll_return(address pc) { RelocIterator iter(this, pc, pc+1); @@ -1054,6 +1069,9 @@ } // Refresh the oop-related bits of this instruction. reloc->fix_oop_relocation(); + } else if (iter.type() == relocInfo::metadata_type) { + metadata_Relocation* reloc = iter.metadata_reloc(); + reloc->fix_metadata_relocation(); } // There must not be any interfering patches or breakpoints. @@ -1172,11 +1190,11 @@ void nmethod::inc_decompile_count() { if (!is_compiled_by_c2()) return; // Could be gated by ProfileTraps, but do not bother... - methodOop m = method(); + Method* m = method(); if (m == NULL) return; - methodDataOop mdo = m->method_data(); + MethodData* mdo = m->method_data(); if (mdo == NULL) return; - // There is a benign race here. See comments in methodDataOop.hpp. + // There is a benign race here. See comments in methodData.hpp. mdo->inc_decompile_count(); } @@ -1195,7 +1213,7 @@ // Break cycle between nmethod & method if (TraceClassUnloading && WizardMode) { tty->print_cr("[Class unloading: Making nmethod " INTPTR_FORMAT - " unloadable], methodOop(" INTPTR_FORMAT + " unloadable], Method*(" INTPTR_FORMAT "), cause(" INTPTR_FORMAT ")", this, (address)_method, (address)cause); if (!Universe::heap()->is_gc_active()) @@ -1205,12 +1223,12 @@ if (is_osr_method()) { invalidate_osr_method(); } - // If _method is already NULL the methodOop is about to be unloaded, + // If _method is already NULL the Method* is about to be unloaded, // so we don't have to break the cycle. Note that it is possible to - // have the methodOop live here, in case we unload the nmethod because - // it is pointing to some oop (other than the methodOop) being unloaded. + // have the Method* live here, in case we unload the nmethod because + // it is pointing to some oop (other than the Method*) being unloaded. if (_method != NULL) { - // OSR methods point to the methodOop, but the methodOop does not + // OSR methods point to the Method*, but the Method* does not // point back! if (_method->code() == this) { _method->clear_code(); // Break a cycle @@ -1230,7 +1248,7 @@ // Log the unloading. log_state_change(); - // The methodOop is gone at this point + // The Method* is gone at this point assert(_method == NULL, "Tautology"); set_osr_link(NULL); @@ -1242,7 +1260,7 @@ assert(_entry_bci != InvocationEntryBci, "wrong kind of nmethod"); // Remove from list of active nmethods if (method() != NULL) - instanceKlass::cast(method()->method_holder())->remove_osr_nmethod(this); + InstanceKlass::cast(method()->method_holder())->remove_osr_nmethod(this); // Set entry as invalid _entry_bci = InvalidOSREntryBci; } @@ -1320,7 +1338,7 @@ // Remove nmethod from method. // We need to check if both the _code and _from_compiled_code_entry_point // refer to this nmethod because there is a race in setting these two fields - // in methodOop as seen in bugid 4947125. + // in Method* as seen in bugid 4947125. // If the vep() points to the zombie nmethod, the memory for the nmethod // could be flushed and the compiler and vtable stubs could still call // through it. @@ -1440,13 +1458,13 @@ if (!has_flushed_dependencies()) { set_has_flushed_dependencies(); for (Dependencies::DepStream deps(this); deps.next(); ) { - klassOop klass = deps.context_type(); + Klass* klass = deps.context_type(); if (klass == NULL) continue; // ignore things like evol_method // During GC the is_alive closure is non-NULL, and is used to // determine liveness of dependees that need to be updated. - if (is_alive == NULL || is_alive->do_object_b(klass)) { - instanceKlass::cast(klass)->remove_dependent_nmethod(this); + if (is_alive == NULL || klass->is_loader_alive(is_alive)) { + InstanceKlass::cast(klass)->remove_dependent_nmethod(this); } } } @@ -1462,16 +1480,7 @@ if (obj == NULL || is_alive->do_object_b(obj)) { return false; } - if (obj->is_compiledICHolder()) { - compiledICHolderOop cichk_oop = compiledICHolderOop(obj); - if (is_alive->do_object_b( - cichk_oop->holder_method()->method_holder()) && - is_alive->do_object_b(cichk_oop->holder_klass())) { - // The oop should be kept alive - keep_alive->do_oop(root); - return false; - } - } + // If ScavengeRootsInCode is true, an nmethod might be unloaded // simply because one of its constant oops has gone dead. // No actual classes need to be unloaded in order for this to occur. @@ -1486,7 +1495,7 @@ // Transfer information from compilation to jvmti void nmethod::post_compiled_method_load_event() { - methodOop moop = method(); + Method* moop = method(); #ifndef USDT2 HS_DTRACE_PROBE8(hotspot, compiled__method__load, moop->klass_name()->bytes(), @@ -1541,10 +1550,10 @@ // If a JVMTI agent has enabled the CompiledMethodUnload event then // post the event. Sometime later this nmethod will be made a zombie - // by the sweeper but the methodOop will not be valid at that point. + // by the sweeper but the Method* will not be valid at that point. // If the _jmethod_id is null then no load event was ever requested // so don't bother posting the unload. The main reason for this is - // that the jmethodID is a weak reference to the methodOop so if + // that the jmethodID is a weak reference to the Method* so if // it's being unloaded there's no way to look it up since the weak // ref will have been cleared. if (_jmethod_id != NULL && JvmtiExport::should_post_compiled_method_unload()) { @@ -1602,19 +1611,12 @@ unloading_occurred = true; } - // Follow methodOop - if (can_unload(is_alive, keep_alive, (oop*)&_method, unloading_occurred)) { - return; - } - // Exception cache ExceptionCache* ec = exception_cache(); while (ec != NULL) { - oop* ex_addr = (oop*)ec->exception_type_addr(); - oop ex = *ex_addr; + Klass* ex_klass = ec->exception_type(); ExceptionCache* next_ec = ec->next(); - if (ex != NULL && !is_alive->do_object_b(ex)) { - assert(!ex->is_compiledICHolder(), "Possible error here"); + if (ex_klass != NULL && !ex_klass->is_loader_alive(is_alive)) { remove_from_exception_cache(ec); } ec = next_ec; @@ -1629,27 +1631,37 @@ while(iter.next()) { if (iter.type() == relocInfo::virtual_call_type) { CompiledIC *ic = CompiledIC_at(iter.reloc()); - oop ic_oop = ic->cached_oop(); - if (ic_oop != NULL && !is_alive->do_object_b(ic_oop)) { + if (ic->is_icholder_call()) { // The only exception is compiledICHolder oops which may // yet be marked below. (We check this further below). - if (ic_oop->is_compiledICHolder()) { - compiledICHolderOop cichk_oop = compiledICHolderOop(ic_oop); - if (is_alive->do_object_b( - cichk_oop->holder_method()->method_holder()) && - is_alive->do_object_b(cichk_oop->holder_klass())) { + CompiledICHolder* cichk_oop = ic->cached_icholder(); + if (cichk_oop->holder_method()->method_holder()->is_loader_alive(is_alive) && + cichk_oop->holder_klass()->is_loader_alive(is_alive)) { continue; } + } else { + Metadata* ic_oop = ic->cached_metadata(); + if (ic_oop != NULL) { + if (ic_oop->is_klass()) { + if (((Klass*)ic_oop)->is_loader_alive(is_alive)) { + continue; + } + } else if (ic_oop->is_method()) { + if (((Method*)ic_oop)->method_holder()->is_loader_alive(is_alive)) { + continue; + } + } else { + ShouldNotReachHere(); + } + } } ic->set_to_clean(); - assert(ic->cached_oop() == NULL, - "cached oop in IC should be cleared"); - } } } } // Compiled code + { RelocIterator iter(this, low_boundary); while (iter.next()) { if (iter.type() == relocInfo::oop_type) { @@ -1666,6 +1678,7 @@ } } } + } // Scopes @@ -1676,23 +1689,121 @@ } } -#ifndef PRODUCT - // This nmethod was not unloaded; check below that all CompiledICs - // refer to marked oops. - { + // Ensure that all metadata is still alive + verify_metadata_loaders(low_boundary, is_alive); +} + +#ifdef ASSERT + +class CheckClass : AllStatic { + static BoolObjectClosure* _is_alive; + + // Check class_loader is alive for this bit of metadata. + static void check_class(Metadata* md) { + Klass* klass = NULL; + if (md->is_klass()) { + klass = ((Klass*)md); + } else if (md->is_method()) { + klass = ((Method*)md)->method_holder(); + } else if (md->is_methodData()) { + klass = ((MethodData*)md)->method()->method_holder(); + } else { + md->print(); + ShouldNotReachHere(); + } + assert(klass->is_loader_alive(_is_alive), "must be alive"); + } + public: + static void do_check_class(BoolObjectClosure* is_alive, nmethod* nm) { + assert(SafepointSynchronize::is_at_safepoint(), "this is only ok at safepoint"); + _is_alive = is_alive; + nm->metadata_do(check_class); + } +}; + +// This is called during a safepoint so can use static data +BoolObjectClosure* CheckClass::_is_alive = NULL; +#endif // ASSERT + + +// Processing of oop references should have been sufficient to keep +// all strong references alive. Any weak references should have been +// cleared as well. Visit all the metadata and ensure that it's +// really alive. +void nmethod::verify_metadata_loaders(address low_boundary, BoolObjectClosure* is_alive) { +#ifdef ASSERT RelocIterator iter(this, low_boundary); while (iter.next()) { - if (iter.type() == relocInfo::virtual_call_type) { - CompiledIC *ic = CompiledIC_at(iter.reloc()); - oop ic_oop = ic->cached_oop(); - assert(ic_oop == NULL || is_alive->do_object_b(ic_oop), - "Found unmarked ic_oop in reachable nmethod"); - } + // static_stub_Relocations may have dangling references to + // Method*s so trim them out here. Otherwise it looks like + // compiled code is maintaining a link to dead metadata. + address static_call_addr = NULL; + if (iter.type() == relocInfo::opt_virtual_call_type) { + CompiledIC* cic = CompiledIC_at(iter.reloc()); + if (!cic->is_call_to_interpreted()) { + static_call_addr = iter.addr(); + } + } else if (iter.type() == relocInfo::static_call_type) { + CompiledStaticCall* csc = compiledStaticCall_at(iter.reloc()); + if (!csc->is_call_to_interpreted()) { + static_call_addr = iter.addr(); + } + } + if (static_call_addr != NULL) { + RelocIterator sciter(this, low_boundary); + while (sciter.next()) { + if (sciter.type() == relocInfo::static_stub_type && + sciter.static_stub_reloc()->static_call() == static_call_addr) { + sciter.static_stub_reloc()->clear_inline_cache(); + } + } } } -#endif // !PRODUCT + // Check that the metadata embedded in the nmethod is alive + CheckClass::do_check_class(is_alive, this); +#endif } + +// Iterate over metadata calling this function. Used by RedefineClasses +void nmethod::metadata_do(void f(Metadata*)) { + address low_boundary = verified_entry_point(); + if (is_not_entrant()) { + low_boundary += NativeJump::instruction_size; + // %%% Note: On SPARC we patch only a 4-byte trap, not a full NativeJump. + // (See comment above.) + } + { + // Visit all immediate references that are embedded in the instruction stream. + RelocIterator iter(this, low_boundary); + while (iter.next()) { + if (iter.type() == relocInfo::metadata_type ) { + metadata_Relocation* r = iter.metadata_reloc(); + // In this lmetadata, we must only follow those metadatas directly embedded in + // the code. Other metadatas (oop_index>0) are seen as part of + // the metadata section below. + assert(1 == (r->metadata_is_immediate()) + + (r->metadata_addr() >= metadata_begin() && r->metadata_addr() < metadata_end()), + "metadata must be found in exactly one place"); + if (r->metadata_is_immediate() && r->metadata_value() != NULL) { + Metadata* md = r->metadata_value(); + f(md); + } + } + } + } + + // Visit the metadata section + for (Metadata** p = metadata_begin(); p < metadata_end(); p++) { + if (*p == Universe::non_oop_word() || *p == NULL) continue; // skip non-oops + Metadata* md = *p; + f(md); + } + // Call function Method*, not embedded in these other places. + if (_method != NULL) f(_method); +} + + // This method is called twice during GC -- once while // tracing the "active" nmethods on thread stacks during // the (strong) marking phase, and then again when walking @@ -1719,17 +1830,6 @@ // (See comment above.) } - // Compiled code - f->do_oop((oop*) &_method); - if (!do_strong_roots_only) { - // weak roots processing phase -- update ExceptionCache oops - ExceptionCache* ec = exception_cache(); - while(ec != NULL) { - f->do_oop((oop*)ec->exception_type_addr()); - ec = ec->next(); - } - } // Else strong roots phase -- skip oops in ExceptionCache - RelocIterator iter(this, low_boundary); while (iter.next()) { @@ -2063,21 +2163,21 @@ return found_check; } -bool nmethod::is_evol_dependent_on(klassOop dependee) { - instanceKlass *dependee_ik = instanceKlass::cast(dependee); - objArrayOop dependee_methods = dependee_ik->methods(); +bool nmethod::is_evol_dependent_on(Klass* dependee) { + InstanceKlass *dependee_ik = InstanceKlass::cast(dependee); + Array* dependee_methods = dependee_ik->methods(); for (Dependencies::DepStream deps(this); deps.next(); ) { if (deps.type() == Dependencies::evol_method) { - methodOop method = deps.method_argument(0); + Method* method = deps.method_argument(0); for (int j = 0; j < dependee_methods->length(); j++) { - if ((methodOop) dependee_methods->obj_at(j) == method) { + if (dependee_methods->at(j) == method) { // RC_TRACE macro has an embedded ResourceMark RC_TRACE(0x01000000, ("Found evol dependency of nmethod %s.%s(%s) compile_id=%d on method %s.%s(%s)", - _method->method_holder()->klass_part()->external_name(), + _method->method_holder()->external_name(), _method->name()->as_C_string(), _method->signature()->as_C_string(), compile_id(), - method->method_holder()->klass_part()->external_name(), + method->method_holder()->external_name(), method->name()->as_C_string(), method->signature()->as_C_string())); if (TraceDependencies || LogCompilation) @@ -2091,11 +2191,11 @@ } // Called from mark_for_deoptimization, when dependee is invalidated. -bool nmethod::is_dependent_on_method(methodOop dependee) { +bool nmethod::is_dependent_on_method(Method* dependee) { for (Dependencies::DepStream deps(this); deps.next(); ) { if (deps.type() != Dependencies::evol_method) continue; - methodOop method = deps.method_argument(0); + Method* method = deps.method_argument(0); if (method == dependee) return true; } return false; @@ -2234,7 +2334,7 @@ // Make sure all the entry points are correctly aligned for patching. NativeJump::check_verified_entry_alignment(entry_point(), verified_entry_point()); - assert(method()->is_oop(), "must be valid"); + // assert(method()->is_oop(), "must be valid"); ResourceMark rm; @@ -2274,11 +2374,11 @@ if (CompiledIC_lock->owner() == cur || ((cur->is_VM_thread() || cur->is_ConcurrentGC_thread()) && SafepointSynchronize::is_at_safepoint())) { - ic = CompiledIC_at(call_site); + ic = CompiledIC_at(this, call_site); CHECK_UNHANDLED_OOPS_ONLY(Thread::current()->clear_unhandled_oops()); } else { MutexLocker ml_verify (CompiledIC_lock); - ic = CompiledIC_at(call_site); + ic = CompiledIC_at(this, call_site); } PcDesc* pd = pc_desc_at(ic->end_of_call()); assert(pd != NULL, "PcDesc must exist"); @@ -2413,6 +2513,10 @@ oops_begin(), oops_end(), oops_size()); + if (metadata_size () > 0) tty->print_cr(" metadata [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", + metadata_begin(), + metadata_end(), + metadata_size()); if (scopes_data_size () > 0) tty->print_cr(" scopes data [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d", scopes_data_begin(), scopes_data_end(), @@ -2462,10 +2566,10 @@ tty->print_cr("Dependencies:"); for (Dependencies::DepStream deps(this); deps.next(); ) { deps.print_dependency(); - klassOop ctxk = deps.context_type(); + Klass* ctxk = deps.context_type(); if (ctxk != NULL) { Klass* k = Klass::cast(ctxk); - if (k->oop_is_instance() && ((instanceKlass*)k)->is_dependent_nmethod(this)) { + if (k->oop_is_instance() && ((InstanceKlass*)k)->is_dependent_nmethod(this)) { tty->print_cr(" [nmethod<=klass]%s", k->external_name()); } } @@ -2528,6 +2632,16 @@ st.print(")"); return st.as_string(); } + case relocInfo::metadata_type: { + stringStream st; + metadata_Relocation* r = iter.metadata_reloc(); + Metadata* obj = r->metadata_value(); + st.print("metadata("); + if (obj == NULL) st.print("NULL"); + else obj->print_value_on(&st); + st.print(")"); + return st.as_string(); + } case relocInfo::virtual_call_type: return "virtual_call"; case relocInfo::opt_virtual_call_type: return "optimized virtual_call"; case relocInfo::static_call_type: return "static_call"; @@ -2690,7 +2804,7 @@ if (sd->bci() == SynchronizationEntryBCI) { st->print(";*synchronization entry"); } else { - if (sd->method().is_null()) { + if (sd->method() == NULL) { st->print("method is NULL"); } else if (sd->method()->is_native()) { st->print("method is native"); @@ -2731,7 +2845,7 @@ for (;sd != NULL; sd = sd->sender()) { st->move_to(column); st->print("; -"); - if (sd->method().is_null()) { + if (sd->method() == NULL) { st->print("method is NULL"); } else { sd->method()->print_short_name(st); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/nmethod.hpp --- a/src/share/vm/code/nmethod.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/nmethod.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -27,6 +27,7 @@ #include "code/codeBlob.hpp" #include "code/pcDesc.hpp" +#include "oops/metadata.hpp" // This class is used internally by nmethods, to cache // exception/pc/handler information. @@ -35,7 +36,7 @@ friend class VMStructs; private: enum { cache_size = 16 }; - klassOop _exception_type; + Klass* _exception_type; address _pc[cache_size]; address _handler[cache_size]; int _count; @@ -52,8 +53,7 @@ ExceptionCache(Handle exception, address pc, address handler); - klassOop exception_type() { return _exception_type; } - klassOop* exception_type_addr() { return &_exception_type; } + Klass* exception_type() { return _exception_type; } ExceptionCache* next() { return _next; } void set_next(ExceptionCache *ec) { _next = ec; } @@ -112,12 +112,12 @@ friend class CodeCache; // scavengable oops private: // Shared fields for all nmethod's - methodOop _method; + Method* _method; int _entry_bci; // != InvocationEntryBci if this nmethod is an on-stack replacement method jmethodID _jmethod_id; // Cache of method()->jmethod_id() // To support simple linked-list chaining of nmethods: - nmethod* _osr_link; // from instanceKlass::osr_nmethods_head + nmethod* _osr_link; // from InstanceKlass::osr_nmethods_head nmethod* _scavenge_root_link; // from CodeCache::scavenge_root_nmethods nmethod* _saved_nmethod_link; // from CodeCache::speculatively_disconnect @@ -148,6 +148,7 @@ int _consts_offset; int _stub_offset; int _oops_offset; // offset to where embedded oop table begins (inside data) + int _metadata_offset; // embedded meta data table int _scopes_data_offset; int _scopes_pcs_offset; int _dependencies_offset; @@ -226,7 +227,7 @@ friend class nmethodLocker; // For native wrappers - nmethod(methodOop method, + nmethod(Method* method, int nmethod_size, int compile_id, CodeOffsets* offsets, @@ -238,7 +239,7 @@ #ifdef HAVE_DTRACE_H // For native wrappers - nmethod(methodOop method, + nmethod(Method* method, int nmethod_size, CodeOffsets* offsets, CodeBuffer *code_buffer, @@ -246,7 +247,7 @@ #endif // def HAVE_DTRACE_H // Creation support - nmethod(methodOop method, + nmethod(Method* method, int nmethod_size, int compile_id, int entry_bci, @@ -325,7 +326,7 @@ #endif // def HAVE_DTRACE_H // accessors - methodOop method() const { return _method; } + Method* method() const { return _method; } AbstractCompiler* compiler() const { return _compiler; } // type info @@ -350,7 +351,10 @@ address deopt_mh_handler_begin() const { return header_begin() + _deoptimize_mh_offset ; } address unwind_handler_begin () const { return _unwind_handler_offset != -1 ? (header_begin() + _unwind_handler_offset) : NULL; } oop* oops_begin () const { return (oop*) (header_begin() + _oops_offset) ; } - oop* oops_end () const { return (oop*) (header_begin() + _scopes_data_offset) ; } + oop* oops_end () const { return (oop*) (header_begin() + _metadata_offset) ; } + + Metadata** metadata_begin () const { return (Metadata**) (header_begin() + _metadata_offset) ; } + Metadata** metadata_end () const { return (Metadata**) (header_begin() + _scopes_data_offset) ; } address scopes_data_begin () const { return header_begin() + _scopes_data_offset ; } address scopes_data_end () const { return header_begin() + _scopes_pcs_offset ; } @@ -368,6 +372,7 @@ int insts_size () const { return insts_end () - insts_begin (); } int stub_size () const { return stub_end () - stub_begin (); } int oops_size () const { return (address) oops_end () - (address) oops_begin (); } + int metadata_size () const { return (address) metadata_end () - (address) metadata_begin (); } int scopes_data_size () const { return scopes_data_end () - scopes_data_begin (); } int scopes_pcs_size () const { return (intptr_t) scopes_pcs_end () - (intptr_t) scopes_pcs_begin (); } int dependencies_size () const { return dependencies_end () - dependencies_begin (); } @@ -381,6 +386,7 @@ bool insts_contains (address addr) const { return insts_begin () <= addr && addr < insts_end (); } bool stub_contains (address addr) const { return stub_begin () <= addr && addr < stub_end (); } bool oops_contains (oop* addr) const { return oops_begin () <= addr && addr < oops_end (); } + bool metadata_contains (Metadata** addr) const { return metadata_begin () <= addr && addr < metadata_end (); } bool scopes_data_contains (address addr) const { return scopes_data_begin () <= addr && addr < scopes_data_end (); } bool scopes_pcs_contains (PcDesc* addr) const { return scopes_pcs_begin () <= addr && addr < scopes_pcs_end (); } bool handler_table_contains(address addr) const { return handler_table_begin() <= addr && addr < handler_table_end(); } @@ -448,7 +454,17 @@ return &oops_begin()[index - 1]; } - void copy_oops(GrowableArray* oops); + // Support for meta data in scopes and relocs: + // Note: index 0 is reserved for null. + Metadata* metadata_at(int index) const { return index == 0 ? NULL: *metadata_addr_at(index); } + Metadata** metadata_addr_at(int index) const { // for GC + // relocation indexes are biased by 1 (because 0 is reserved) + assert(index > 0 && index <= metadata_size(), "must be a valid non-zero index"); + return &metadata_begin()[index - 1]; + } + + void copy_values(GrowableArray* oops); + void copy_values(GrowableArray* metadata); // Relocation support private: @@ -516,6 +532,9 @@ return (addr >= code_begin() && addr < verified_entry_point()); } + // Check that all metadata is still alive + void verify_metadata_loaders(address low_boundary, BoolObjectClosure* is_alive); + // unlink and deallocate this nmethod // Only NMethodSweeper class is expected to use this. NMethodSweeper is not // expected to use any other private methods/data in this class. @@ -533,8 +552,8 @@ void mark_as_seen_on_stack(); bool can_not_entrant_be_converted(); - // Evolution support. We make old (discarded) compiled methods point to new methodOops. - void set_method(methodOop method) { _method = method; } + // Evolution support. We make old (discarded) compiled methods point to new Method*s. + void set_method(Method* method) { _method = method; } // GC support void do_unloading(BoolObjectClosure* is_alive, OopClosure* keep_alive, @@ -663,12 +682,12 @@ // Evolution support. Tells if this compiled method is dependent on any of // methods m() of class dependee, such that if m() in dependee is replaced, // this compiled method will have to be deoptimized. - bool is_evol_dependent_on(klassOop dependee); + bool is_evol_dependent_on(Klass* dependee); // Fast breakpoint support. Tells if this compiled method is // dependent on the given method. Returns true if this nmethod // corresponds to the given method as well. - bool is_dependent_on_method(methodOop dependee); + bool is_dependent_on_method(Method* dependee); // is it ok to patch at address? bool is_patchable_at(address instr_address); @@ -686,6 +705,12 @@ static int osr_entry_point_offset() { return offset_of(nmethod, _osr_entry_point); } static int entry_bci_offset() { return offset_of(nmethod, _entry_bci); } + // RedefineClasses support. Mark metadata in nmethods as on_stack so that + // redefine classes doesn't purge it. + static void mark_on_stack(nmethod* nm) { + nm->metadata_do(Metadata::mark_on_stack); + } + void metadata_do(void f(Metadata*)); }; // Locks an nmethod so its code will not get removed and it will not diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/oopRecorder.cpp --- a/src/share/vm/code/oopRecorder.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/oopRecorder.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,68 +23,65 @@ */ #include "precompiled.hpp" +#include "ci/ciEnv.hpp" +#include "ci/ciInstance.hpp" +#include "ci/ciMetadata.hpp" #include "code/oopRecorder.hpp" #include "memory/allocation.inline.hpp" #include "oops/oop.inline.hpp" #ifdef ASSERT -int OopRecorder::_find_index_calls = 0; -int OopRecorder::_hit_indexes = 0; -int OopRecorder::_missed_indexes = 0; +template int ValueRecorder::_find_index_calls = 0; +template int ValueRecorder::_hit_indexes = 0; +template int ValueRecorder::_missed_indexes = 0; #endif //ASSERT -OopRecorder::OopRecorder(Arena* arena) { +template ValueRecorder::ValueRecorder(Arena* arena) { _handles = NULL; _indexes = NULL; _arena = arena; _complete = false; } -OopRecorder::IndexCache::IndexCache() { +template template ValueRecorder::IndexCache::IndexCache() { assert(first_index > 0, "initial zero state of cache must be invalid index"); Copy::zero_to_bytes(&_cache[0], sizeof(_cache)); } -int OopRecorder::oop_size() { +template int ValueRecorder::size() { _complete = true; if (_handles == NULL) return 0; - return _handles->length() * sizeof(oop); + return _handles->length() * sizeof(T); } -void OopRecorder::copy_to(nmethod* nm) { +template void ValueRecorder::copy_values_to(nmethod* nm) { assert(_complete, "must be frozen"); maybe_initialize(); // get non-null handles, even if we have no oops - nm->copy_oops(_handles); + nm->copy_values(_handles); } -void OopRecorder::maybe_initialize() { +template void ValueRecorder::maybe_initialize() { if (_handles == NULL) { if (_arena != NULL) { - _handles = new(_arena) GrowableArray(_arena, 10, 0, 0); + _handles = new(_arena) GrowableArray(_arena, 10, 0, 0); _no_finds = new(_arena) GrowableArray( _arena, 10, 0, 0); } else { - _handles = new GrowableArray(10, 0, 0); + _handles = new GrowableArray(10, 0, 0); _no_finds = new GrowableArray( 10, 0, 0); } } } -jobject OopRecorder::handle_at(int index) { +template T ValueRecorder::at(int index) { // there is always a NULL virtually present as first object if (index == null_index) return NULL; return _handles->at(index - first_index); } -// Local definition. Used only in this module. -inline bool OopRecorder::is_real_jobject(jobject h) { - return h != NULL && h != (jobject)Universe::non_oop_word(); -} - - -int OopRecorder::add_handle(jobject h, bool make_findable) { +template int ValueRecorder::add_handle(T h, bool make_findable) { assert(!_complete, "cannot allocate more elements after size query"); maybe_initialize(); // indexing uses 1 as an origin--0 means null @@ -92,14 +89,14 @@ _handles->append(h); // Support correct operation of find_index(). - assert(!(make_findable && !is_real_jobject(h)), "nulls are not findable"); + assert(!(make_findable && !is_real(h)), "nulls are not findable"); if (make_findable) { // This index may be returned from find_index(). if (_indexes != NULL) { int* cloc = _indexes->cache_location(h); _indexes->set_cache_location_index(cloc, index); } else if (index == index_cache_threshold && _arena != NULL) { - _indexes = new(_arena) IndexCache(); + _indexes = new(_arena) IndexCache(); for (int i = 0; i < _handles->length(); i++) { // Load the cache with pre-existing elements. int index0 = i + first_index; @@ -108,10 +105,10 @@ _indexes->set_cache_location_index(cloc, index0); } } - } else if (is_real_jobject(h)) { + } else if (is_real(h)) { // Remember that this index is not to be returned from find_index(). // This case is rare, because most or all uses of allocate_index pass - // a jobject argument of NULL or Universe::non_oop_word. + // an argument of NULL or Universe::non_oop_word. // Thus, the expected length of _no_finds is zero. _no_finds->append(index); } @@ -120,12 +117,12 @@ } -int OopRecorder::maybe_find_index(jobject h) { +template int ValueRecorder::maybe_find_index(T h) { debug_only(_find_index_calls++); assert(!_complete, "cannot allocate more elements after size query"); maybe_initialize(); if (h == NULL) return null_index; - assert(is_real_jobject(h), "must be valid jobject"); + assert(is_real(h), "must be valid"); int* cloc = (_indexes == NULL)? NULL: _indexes->cache_location(h); if (cloc != NULL) { int cindex = _indexes->cache_location_index(cloc); @@ -156,3 +153,7 @@ } return -1; } + +// Explicitly instantiate these types +template class ValueRecorder; +template class ValueRecorder; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/oopRecorder.hpp --- a/src/share/vm/code/oopRecorder.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/oopRecorder.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,14 +25,15 @@ #ifndef SHARE_VM_CODE_OOPRECORDER_HPP #define SHARE_VM_CODE_OOPRECORDER_HPP +#include "memory/universe.hpp" #include "runtime/handles.hpp" #include "utilities/growableArray.hpp" -// Recording and retrieval of oop relocations in compiled code. +// Recording and retrieval of either oop relocations or metadata in compiled code. class CodeBlob; -class OopRecorder : public ResourceObj { +template class ValueRecorder : public StackObj { public: // A two-way mapping from positive indexes to oop handles. // The zero index is reserved for a constant (sharable) null. @@ -40,20 +41,21 @@ // Use the given arena to manage storage, if not NULL. // By default, uses the current ResourceArea. - OopRecorder(Arena* arena = NULL); + ValueRecorder(Arena* arena = NULL); - // Generate a new index on which CodeBlob::oop_addr_at will work. + // Generate a new index on which nmethod::oop_addr_at will work. // allocate_index and find_index never return the same index, // and allocate_index never returns the same index twice. // In fact, two successive calls to allocate_index return successive ints. - int allocate_index(jobject h) { + int allocate_index(T h) { return add_handle(h, false); } - // For a given jobject, this will return the same index repeatedly. - // The index can later be given to oop_at to retrieve the oop. - // However, the oop must not be changed via CodeBlob::oop_addr_at. - int find_index(jobject h) { + // For a given jobject or Metadata*, this will return the same index + // repeatedly. The index can later be given to nmethod::oop_at or + // metadata_at to retrieve the oop. + // However, the oop must not be changed via nmethod::oop_addr_at. + int find_index(T h) { int index = maybe_find_index(h); if (index < 0) { // previously unallocated index = add_handle(h, true); @@ -61,23 +63,26 @@ return index; } - // variant of find_index which does not allocate if not found (yields -1) - int maybe_find_index(jobject h); + // returns the size of the generated oop/metadata table, for sizing the + // CodeBlob. Must be called after all oops are allocated! + int size(); - // returns the size of the generated oop table, for sizing the CodeBlob. - // must be called after all oops are allocated! - int oop_size(); + // Retrieve the value at a given index. + T at(int index); - // Retrieve the oop handle at a given index. - jobject handle_at(int index); - - int element_count() { + int count() { + if (_handles == NULL) return 0; // there is always a NULL virtually present as first object return _handles->length() + first_index; } - // copy the generated oop table to nmethod - void copy_to(nmethod* nm); // => nm->copy_oops(_handles) + // Helper function; returns false for NULL or Universe::non_oop_word(). + bool is_real(T h) { + return h != NULL && h != (T)Universe::non_oop_word(); + } + + // copy the generated table to nmethod + void copy_values_to(nmethod* nm); bool is_unused() { return _handles == NULL && !_complete; } #ifdef ASSERT @@ -85,10 +90,13 @@ #endif private: + // variant of find_index which does not allocate if not found (yields -1) + int maybe_find_index(T h); + // leaky hash table of handle => index, to help detect duplicate insertion - class IndexCache: public ResourceObj { - // This class is only used by the OopRecorder class. - friend class OopRecorder; + template class IndexCache : public ResourceObj { + // This class is only used by the ValueRecorder class. + friend class ValueRecorder; enum { _log_cache_size = 9, _cache_size = (1<<_log_cache_size), @@ -98,13 +106,13 @@ _index_shift = _collision_bit_shift+1 }; int _cache[_cache_size]; - static juint cache_index(jobject handle) { + static juint cache_index(X handle) { juint ci = (int) (intptr_t) handle; ci ^= ci >> (BitsPerByte*2); ci += ci >> (BitsPerByte*1); return ci & (_cache_size-1); } - int* cache_location(jobject handle) { + int* cache_location(X handle) { return &_cache[ cache_index(handle) ]; } static bool cache_location_collision(int* cloc) { @@ -122,17 +130,14 @@ IndexCache(); }; - // Helper function; returns false for NULL or Universe::non_oop_word(). - inline bool is_real_jobject(jobject h); - void maybe_initialize(); - int add_handle(jobject h, bool make_findable); + int add_handle(T h, bool make_findable); enum { null_index = 0, first_index = 1, index_cache_threshold = 20 }; - GrowableArray* _handles; // ordered list (first is always NULL) + GrowableArray* _handles; // ordered list (first is always NULL) GrowableArray* _no_finds; // all unfindable indexes; usually empty - IndexCache* _indexes; // map: jobject -> its probable index + IndexCache* _indexes; // map: handle -> its probable index Arena* _arena; bool _complete; @@ -141,4 +146,76 @@ #endif }; +class OopRecorder : public ResourceObj { + private: + ValueRecorder _oops; + ValueRecorder _metadata; + public: + OopRecorder(Arena* arena = NULL): _oops(arena), _metadata(arena) {} + + int allocate_oop_index(jobject h) { + return _oops.allocate_index(h); + } + int find_index(jobject h) { + return _oops.find_index(h); + } + jobject oop_at(int index) { + return _oops.at(index); + } + int oop_size() { + return _oops.size(); + } + int oop_count() { + return _oops.count(); + } + bool is_real(jobject h) { + return _oops.is_real(h); + } + + int allocate_metadata_index(Metadata* oop) { + return _metadata.allocate_index(oop); + } + int find_index(Metadata* h) { + return _metadata.find_index(h); + } + Metadata* metadata_at(int index) { + return _metadata.at(index); + } + int metadata_size() { + return _metadata.size(); + } + int metadata_count() { + return _metadata.count(); + } + bool is_real(Metadata* h) { + return _metadata.is_real(h); + } + + bool is_unused() { + return _oops.is_unused() && _metadata.is_unused(); + } + + void freeze() { + _oops.size(); + _metadata.size(); + } + + void copy_values_to(nmethod* nm) { + if (!_oops.is_unused()) { + _oops.copy_values_to(nm); + } + if (!_metadata.is_unused()) { + _metadata.copy_values_to(nm); + } + } + +#ifdef ASSERT + bool is_complete() { + assert(_oops.is_complete() == _metadata.is_complete(), "must agree"); + return _oops.is_complete(); + } +#endif +}; + + #endif // SHARE_VM_CODE_OOPRECORDER_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/relocInfo.cpp --- a/src/share/vm/code/relocInfo.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/relocInfo.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -439,6 +439,11 @@ oop_Relocation* r = (oop_Relocation*)reloc(); return oop_Relocation::spec(r->oop_index(), r->offset() + offset); } + case relocInfo::metadata_type: + { + metadata_Relocation* r = (metadata_Relocation*)reloc(); + return metadata_Relocation::spec(r->metadata_index(), r->offset() + offset); + } default: ShouldNotReachHere(); } @@ -578,33 +583,33 @@ unpack_2_ints(_oop_index, _offset); } +void metadata_Relocation::pack_data_to(CodeSection* dest) { + short* p = (short*) dest->locs_end(); + p = pack_2_ints_to(p, _metadata_index, _offset); + dest->set_locs_end((relocInfo*) p); +} + + +void metadata_Relocation::unpack_data() { + unpack_2_ints(_metadata_index, _offset); +} + void virtual_call_Relocation::pack_data_to(CodeSection* dest) { short* p = (short*) dest->locs_end(); address point = dest->locs_point(); - // Try to make a pointer NULL first. - if (_oop_limit >= point && - _oop_limit <= point + NativeCall::instruction_size) { - _oop_limit = NULL; - } - // If the _oop_limit is NULL, it "defaults" to the end of the call. - // See ic_call_Relocation::oop_limit() below. - - normalize_address(_first_oop, dest); - normalize_address(_oop_limit, dest); - jint x0 = scaled_offset_null_special(_first_oop, point); - jint x1 = scaled_offset_null_special(_oop_limit, point); - p = pack_2_ints_to(p, x0, x1); + normalize_address(_cached_value, dest); + jint x0 = scaled_offset_null_special(_cached_value, point); + p = pack_1_int_to(p, x0); dest->set_locs_end((relocInfo*) p); } void virtual_call_Relocation::unpack_data() { - jint x0, x1; unpack_2_ints(x0, x1); + jint x0 = unpack_1_int(); address point = addr(); - _first_oop = x0==0? NULL: address_from_scaled_offset(x0, point); - _oop_limit = x1==0? NULL: address_from_scaled_offset(x1, point); + _cached_value = x0==0? NULL: address_from_scaled_offset(x0, point); } @@ -799,100 +804,48 @@ } } - -RelocIterator virtual_call_Relocation::parse_ic(nmethod* &nm, address &ic_call, address &first_oop, - oop* &oop_addr, bool *is_optimized) { - assert(ic_call != NULL, "ic_call address must be set"); - assert(ic_call != NULL || first_oop != NULL, "must supply a non-null input"); - if (nm == NULL) { - CodeBlob* code; - if (ic_call != NULL) { - code = CodeCache::find_blob(ic_call); - } else if (first_oop != NULL) { - code = CodeCache::find_blob(first_oop); - } - nm = code->as_nmethod_or_null(); - assert(nm != NULL, "address to parse must be in nmethod"); - } - assert(ic_call == NULL || nm->contains(ic_call), "must be in nmethod"); - assert(first_oop == NULL || nm->contains(first_oop), "must be in nmethod"); - - address oop_limit = NULL; - - if (ic_call != NULL) { - // search for the ic_call at the given address - RelocIterator iter(nm, ic_call, ic_call+1); - bool ret = iter.next(); - assert(ret == true, "relocInfo must exist at this address"); - assert(iter.addr() == ic_call, "must find ic_call"); - if (iter.type() == relocInfo::virtual_call_type) { - virtual_call_Relocation* r = iter.virtual_call_reloc(); - first_oop = r->first_oop(); - oop_limit = r->oop_limit(); - *is_optimized = false; +// meta data versions +Metadata** metadata_Relocation::metadata_addr() { + int n = _metadata_index; + if (n == 0) { + // metadata is stored in the code stream + return (Metadata**) pd_address_in_code(); } else { - assert(iter.type() == relocInfo::opt_virtual_call_type, "must be a virtual call"); - *is_optimized = true; - oop_addr = NULL; - first_oop = NULL; - return iter; + // metadata is stored in table at nmethod::metadatas_begin + return code()->metadata_addr_at(n); } } - // search for the first_oop, to get its oop_addr - RelocIterator all_oops(nm, first_oop); - RelocIterator iter = all_oops; - iter.set_limit(first_oop+1); - bool found_oop = false; - while (iter.next()) { - if (iter.type() == relocInfo::oop_type) { - assert(iter.addr() == first_oop, "must find first_oop"); - oop_addr = iter.oop_reloc()->oop_addr(); - found_oop = true; - break; - } - } - assert(found_oop, "must find first_oop"); - bool did_reset = false; - while (ic_call == NULL) { - // search forward for the ic_call matching the given first_oop - while (iter.next()) { - if (iter.type() == relocInfo::virtual_call_type) { - virtual_call_Relocation* r = iter.virtual_call_reloc(); - if (r->first_oop() == first_oop) { - ic_call = r->addr(); - oop_limit = r->oop_limit(); - break; - } - } - } - guarantee(!did_reset, "cannot find ic_call"); - iter = RelocIterator(nm); // search the whole nmethod - did_reset = true; +Metadata* metadata_Relocation::metadata_value() { + Metadata* v = *metadata_addr(); + // clean inline caches store a special pseudo-null + if (v == (Metadata*)Universe::non_oop_word()) v = NULL; + return v; } - assert(oop_limit != NULL && first_oop != NULL && ic_call != NULL, ""); - all_oops.set_limit(oop_limit); - return all_oops; + +void metadata_Relocation::fix_metadata_relocation() { + if (!metadata_is_immediate()) { + // get the metadata from the pool, and re-insert it into the instruction: + pd_fix_value(value()); + } } -address virtual_call_Relocation::first_oop() { - assert(_first_oop != NULL && _first_oop < addr(), "must precede ic_call"); - return _first_oop; +void metadata_Relocation::verify_metadata_relocation() { + if (!metadata_is_immediate()) { + // get the metadata from the pool, and re-insert it into the instruction: + verify_value(value()); + } } - -address virtual_call_Relocation::oop_limit() { - if (_oop_limit == NULL) - return addr() + NativeCall::instruction_size; - else - return _oop_limit; +address virtual_call_Relocation::cached_value() { + assert(_cached_value != NULL && _cached_value < addr(), "must precede ic_call"); + return _cached_value; } - void virtual_call_Relocation::clear_inline_cache() { // No stubs for ICs // Clean IC @@ -1139,6 +1092,25 @@ } break; } + case relocInfo::metadata_type: + { + metadata_Relocation* r = metadata_reloc(); + Metadata** metadata_addr = NULL; + Metadata* raw_metadata = NULL; + Metadata* metadata_value = NULL; + if (code() != NULL || r->metadata_is_immediate()) { + metadata_addr = r->metadata_addr(); + raw_metadata = *metadata_addr; + metadata_value = r->metadata_value(); + } + tty->print(" | [metadata_addr=" INTPTR_FORMAT " *=" INTPTR_FORMAT " offset=%d]", + metadata_addr, (address)raw_metadata, r->offset()); + if (metadata_value != NULL) { + tty->print("metadata_value=" INTPTR_FORMAT ": ", (address)metadata_value); + metadata_value->print_value_on(tty); + } + break; + } case relocInfo::external_word_type: case relocInfo::internal_word_type: case relocInfo::section_word_type: @@ -1157,8 +1129,8 @@ case relocInfo::virtual_call_type: { virtual_call_Relocation* r = (virtual_call_Relocation*) reloc(); - tty->print(" | [destination=" INTPTR_FORMAT " first_oop=" INTPTR_FORMAT " oop_limit=" INTPTR_FORMAT "]", - r->destination(), r->first_oop(), r->oop_limit()); + tty->print(" | [destination=" INTPTR_FORMAT " cached_value=" INTPTR_FORMAT "]", + r->destination(), r->cached_value()); break; } case relocInfo::static_stub_type: diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/relocInfo.hpp --- a/src/share/vm/code/relocInfo.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/relocInfo.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,6 +28,8 @@ #include "memory/allocation.hpp" #include "utilities/top.hpp" +class NativeMovConstReg; + // Types in this file: // relocInfo // One element of an array of halfwords encoding compressed relocations. @@ -35,8 +37,11 @@ // Relocation // A flyweight object representing a single relocation. // It is fully unpacked from the compressed relocation array. +// metadata_Relocation, ... (subclasses of Relocation) +// The location of some type-specific operations (metadata_addr, ...). +// Also, the source of relocation specs (metadata_Relocation::spec, ...). // oop_Relocation, ... (subclasses of Relocation) -// The location of some type-specific operations (oop_addr, ...). +// oops in the code stream (strings, class loaders) // Also, the source of relocation specs (oop_Relocation::spec, ...). // RelocationHolder // A ValueObj type which acts as a union holding a Relocation object. @@ -118,7 +123,7 @@ // (This means that any relocInfo can be disabled by setting // its type to none. See relocInfo::remove.) // -// relocInfo::oop_type -- a reference to an oop +// relocInfo::oop_type, relocInfo::metadata_type -- a reference to an oop or meta data // Value: an oop, or else the address (handle) of an oop // Instruction types: memory (load), set (load address) // Data: [] an oop stored in 4 bytes of instruction @@ -267,7 +272,7 @@ poll_type = 10, // polling instruction for safepoints poll_return_type = 11, // polling instruction for safepoints at return breakpoint_type = 12, // an initialization barrier or safepoint - yet_unused_type = 13, // Still unused + metadata_type = 13, // metadata that used to be oops yet_unused_type_2 = 14, // Still unused data_prefix_tag = 15, // tag for a prefix (carries data arguments) type_mask = 15 // A mask which selects only the above values @@ -297,6 +302,7 @@ #define APPLY_TO_RELOCATIONS(visitor) \ visitor(oop) \ + visitor(metadata) \ visitor(virtual_call) \ visitor(opt_virtual_call) \ visitor(static_call) \ @@ -972,35 +978,94 @@ // Note: oop_value transparently converts Universe::non_oop_word to NULL. }; + +// copy of oop_Relocation for now but may delete stuff in both/either +class metadata_Relocation : public DataRelocation { + relocInfo::relocType type() { return relocInfo::metadata_type; } + + public: + // encode in one of these formats: [] [n] [n l] [Nn l] [Nn Ll] + // an metadata in the CodeBlob's metadata pool + static RelocationHolder spec(int metadata_index, int offset = 0) { + assert(metadata_index > 0, "must be a pool-resident metadata"); + RelocationHolder rh = newHolder(); + new(rh) metadata_Relocation(metadata_index, offset); + return rh; + } + // an metadata in the instruction stream + static RelocationHolder spec_for_immediate() { + const int metadata_index = 0; + const int offset = 0; // if you want an offset, use the metadata pool + RelocationHolder rh = newHolder(); + new(rh) metadata_Relocation(metadata_index, offset); + return rh; + } + + private: + jint _metadata_index; // if > 0, index into nmethod::metadata_at + jint _offset; // byte offset to apply to the metadata itself + + metadata_Relocation(int metadata_index, int offset) { + _metadata_index = metadata_index; _offset = offset; + } + + friend class RelocIterator; + metadata_Relocation() { } + + // Fixes a Metadata pointer in the code. Most platforms embeds the + // Metadata pointer in the code at compile time so this is empty + // for them. + void pd_fix_value(address x); + + public: + int metadata_index() { return _metadata_index; } + int offset() { return _offset; } + + // data is packed in "2_ints" format: [i o] or [Ii Oo] + void pack_data_to(CodeSection* dest); + void unpack_data(); + + void fix_metadata_relocation(); // reasserts metadata value + + void verify_metadata_relocation(); + + address value() { return (address) *metadata_addr(); } + + bool metadata_is_immediate() { return metadata_index() == 0; } + + Metadata** metadata_addr(); // addr or &pool[jint_data] + Metadata* metadata_value(); // *metadata_addr + // Note: metadata_value transparently converts Universe::non_metadata_word to NULL. +}; + + class virtual_call_Relocation : public CallRelocation { relocInfo::relocType type() { return relocInfo::virtual_call_type; } public: - // "first_oop" points to the first associated set-oop. + // "cached_value" points to the first associated set-oop. // The oop_limit helps find the last associated set-oop. // (See comments at the top of this file.) - static RelocationHolder spec(address first_oop, address oop_limit = NULL) { + static RelocationHolder spec(address cached_value) { RelocationHolder rh = newHolder(); - new(rh) virtual_call_Relocation(first_oop, oop_limit); + new(rh) virtual_call_Relocation(cached_value); return rh; } - virtual_call_Relocation(address first_oop, address oop_limit) { - _first_oop = first_oop; _oop_limit = oop_limit; - assert(first_oop != NULL, "first oop address must be specified"); + virtual_call_Relocation(address cached_value) { + _cached_value = cached_value; + assert(cached_value != NULL, "first oop address must be specified"); } private: - address _first_oop; // location of first set-oop instruction - address _oop_limit; // search limit for set-oop instructions + address _cached_value; // location of set-value instruction friend class RelocIterator; virtual_call_Relocation() { } public: - address first_oop(); - address oop_limit(); + address cached_value(); // data is packed as scaled offsets in "2_ints" format: [f l] or [Ff Ll] // oop_limit is set to 0 if the limit falls somewhere within the call. @@ -1010,15 +1075,6 @@ void unpack_data(); void clear_inline_cache(); - - // Figure out where an ic_call is hiding, given a set-oop or call. - // Either ic_call or first_oop must be non-null; the other is deduced. - // Code if non-NULL must be the nmethod, else it is deduced. - // The address of the patchable oop is also deduced. - // The returned iterator will enumerate over the oops and the ic_call, - // as well as any other relocations that happen to be in that span of code. - // Recognize relevant set_oops with: oop_reloc()->oop_addr() == oop_addr. - static RelocIterator parse_ic(nmethod* &nm, address &ic_call, address &first_oop, oop* &oop_addr, bool *is_optimized); }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/scopeDesc.cpp --- a/src/share/vm/code/scopeDesc.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/scopeDesc.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -65,7 +65,7 @@ // This is a sentinel record, which is only relevant to // approximate queries. Decode a reasonable frame. _sender_decode_offset = DebugInformationRecorder::serialized_null; - _method = methodHandle(_code->method()); + _method = _code->method(); _bci = InvocationEntryBci; _locals_decode_offset = DebugInformationRecorder::serialized_null; _expressions_decode_offset = DebugInformationRecorder::serialized_null; @@ -75,7 +75,7 @@ DebugInfoReadStream* stream = stream_at(decode_offset()); _sender_decode_offset = stream->read_int(); - _method = methodHandle((methodOop) stream->read_oop()); + _method = stream->read_method(); _bci = stream->read_bci(); // decode offsets for body and sender @@ -157,7 +157,7 @@ void ScopeDesc::print_value_on(outputStream* st) const { tty->print(" "); - method()()->print_short_name(st); + method()->print_short_name(st); int lineno = method()->line_number_from_bci(bci()); if (lineno != -1) { st->print_cr("@%d (line %d)", bci(), lineno); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/scopeDesc.hpp --- a/src/share/vm/code/scopeDesc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/scopeDesc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,17 +27,17 @@ #include "code/debugInfo.hpp" #include "code/pcDesc.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "utilities/growableArray.hpp" // SimpleScopeDesc is used when all you need to extract from -// a given pc,nmethod pair is a methodOop and a bci. This is +// a given pc,nmethod pair is a Method* and a bci. This is // quite a bit faster than allocating a full ScopeDesc, but // very limited in abilities. class SimpleScopeDesc : public StackObj { private: - methodOop _method; + Method* _method; int _bci; public: @@ -46,11 +46,11 @@ assert(pc_desc != NULL, "Must be able to find matching PcDesc"); DebugInfoReadStream buffer(code, pc_desc->scope_decode_offset()); int ignore_sender = buffer.read_int(); - _method = methodOop(buffer.read_oop()); + _method = buffer.read_method(); _bci = buffer.read_bci(); } - methodOop method() { return _method; } + Method* method() { return _method; } int bci() { return _bci; } }; @@ -68,7 +68,7 @@ ScopeDesc(const nmethod* code, int decode_offset, bool reexecute, bool return_oop); // JVM state - methodHandle method() const { return _method; } + Method* method() const { return _method; } int bci() const { return _bci; } bool should_reexecute() const { return _reexecute; } bool return_oop() const { return _return_oop; } @@ -94,7 +94,7 @@ ScopeDesc(const ScopeDesc* parent); // JVM state - methodHandle _method; + Method* _method; int _bci; bool _reexecute; bool _return_oop; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/vtableStubs.cpp --- a/src/share/vm/code/vtableStubs.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/vtableStubs.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -111,7 +111,7 @@ } -address VtableStubs::create_stub(bool is_vtable_stub, int vtable_index, methodOop method) { +address VtableStubs::create_stub(bool is_vtable_stub, int vtable_index, Method* method) { assert(vtable_index >= 0, "must be positive"); VtableStub* s = ShareVtableStubs ? lookup(is_vtable_stub, vtable_index) : NULL; @@ -200,10 +200,10 @@ extern "C" void bad_compiled_vtable_index(JavaThread* thread, oop receiver, int index) { ResourceMark rm; HandleMark hm; - klassOop klass = receiver->klass(); - instanceKlass* ik = instanceKlass::cast(klass); + Klass* klass = receiver->klass(); + InstanceKlass* ik = InstanceKlass::cast(klass); klassVtable* vt = ik->vtable(); - klass->print(); + ik->print(); fatal(err_msg("bad compiled vtable dispatch: receiver " INTPTR_FORMAT ", " "index %d (vtable length %d)", (address)receiver, index, vt->length())); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/code/vtableStubs.hpp --- a/src/share/vm/code/vtableStubs.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/code/vtableStubs.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -123,7 +123,7 @@ static inline uint hash (bool is_vtable_stub, int vtable_index); public: - static address create_stub(bool is_vtable_stub, int vtable_index, methodOop method); // return the entry point of a stub for this call + static address create_stub(bool is_vtable_stub, int vtable_index, Method* method); // return the entry point of a stub for this call static bool is_entry_point(address pc); // is pc a vtable stub entry point? static bool contains(address pc); // is pc within any stub? static VtableStub* stub_containing(address pc); // stub containing pc or NULL diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/compiler/compileBroker.cpp --- a/src/share/vm/compiler/compileBroker.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/compiler/compileBroker.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -31,8 +31,8 @@ #include "compiler/compilerOracle.hpp" #include "interpreter/linkResolver.hpp" #include "memory/allocation.inline.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/nativeLookup.hpp" #include "runtime/arguments.hpp" @@ -242,7 +242,7 @@ if (log != NULL) task->log_task_done(log); thread->set_task(NULL); task->set_code_handle(NULL); - DEBUG_ONLY(thread->set_env((ciEnv*)badAddress)); + thread->set_env(NULL); if (task->is_blocking()) { MutexLocker notifier(task->lock(), thread); task->mark_complete(); @@ -271,7 +271,8 @@ assert(!_lock->is_locked(), "bad locking"); _compile_id = compile_id; - _method = JNIHandles::make_global(method); + _method = method(); + _method_loader = JNIHandles::make_global(_method->method_holder()->class_loader()); _osr_bci = osr_bci; _is_blocking = is_blocking; _comp_level = comp_level; @@ -282,6 +283,7 @@ _code_handle = NULL; _hot_method = NULL; + _hot_method_loader = NULL; _hot_count = hot_count; _time_queued = 0; // tidy _comment = comment; @@ -292,8 +294,9 @@ if (hot_method == method) { _hot_method = _method; } else { - _hot_method = JNIHandles::make_global(hot_method); + _hot_method = hot_method(); } + _hot_method_loader = JNIHandles::make_global(_hot_method->method_holder()->class_loader()); } } @@ -318,19 +321,25 @@ void CompileTask::free() { set_code(NULL); assert(!_lock->is_locked(), "Should not be locked when freed"); - if (_hot_method != NULL && _hot_method != _method) { - JNIHandles::destroy_global(_hot_method); - } - JNIHandles::destroy_global(_method); + JNIHandles::destroy_global(_method_loader); + JNIHandles::destroy_global(_hot_method_loader); } +void CompileTask::mark_on_stack() { + // Mark these methods as something redefine classes cannot remove. + _method->set_on_stack(true); + if (_hot_method != NULL) { + _hot_method->set_on_stack(true); + } +} + // ------------------------------------------------------------------ // CompileTask::print void CompileTask::print() { tty->print("print("method="); - ((methodOop)JNIHandles::resolve(_method))->print_name(tty); + _method->print_name(tty); tty->print_cr(" osr_bci=%d is_blocking=%s is_complete=%s is_success=%s>", _osr_bci, bool_to_str(_is_blocking), bool_to_str(_is_complete), bool_to_str(_is_success)); @@ -365,7 +374,7 @@ // ------------------------------------------------------------------ // CompileTask::print_compilation_impl -void CompileTask::print_compilation_impl(outputStream* st, methodOop method, int compile_id, int comp_level, +void CompileTask::print_compilation_impl(outputStream* st, Method* method, int compile_id, int comp_level, bool is_osr_method, int osr_bci, bool is_blocking, const char* msg, bool short_form) { if (!short_form) { @@ -483,19 +492,15 @@ // ------------------------------------------------------------------ // CompileTask::print_compilation void CompileTask::print_compilation(outputStream* st, bool short_form) { - oop rem = JNIHandles::resolve(method_handle()); - assert(rem != NULL && rem->is_method(), "must be"); - methodOop method = (methodOop) rem; bool is_osr_method = osr_bci() != InvocationEntryBci; - print_compilation_impl(st, method, compile_id(), comp_level(), is_osr_method, osr_bci(), is_blocking(), NULL, short_form); + print_compilation_impl(st, method(), compile_id(), comp_level(), is_osr_method, osr_bci(), is_blocking(), NULL, short_form); } // ------------------------------------------------------------------ // CompileTask::log_task void CompileTask::log_task(xmlStream* log) { Thread* thread = Thread::current(); - methodHandle method(thread, - (methodOop)JNIHandles::resolve(method_handle())); + methodHandle method(thread, this->method()); ResourceMark rm(thread); // @@ -530,10 +535,8 @@ xtty->print(" comment='%s'", _comment); } if (_hot_method != NULL) { - methodHandle hot(thread, - (methodOop)JNIHandles::resolve(_hot_method)); - methodHandle method(thread, - (methodOop)JNIHandles::resolve(_method)); + methodHandle hot(thread, _hot_method); + methodHandle method(thread, _method); if (hot() != method()) { xtty->method(hot); } @@ -558,8 +561,7 @@ // CompileTask::log_task_done void CompileTask::log_task_done(CompileLog* log) { Thread* thread = Thread::current(); - methodHandle method(thread, - (methodOop)JNIHandles::resolve(method_handle())); + methodHandle method(thread, this->method()); ResourceMark rm(thread); // @@ -610,7 +612,7 @@ ++_size; // Mark the method as being in the compile queue. - ((methodOop)JNIHandles::resolve(task->method_handle()))->set_queued_for_compilation(); + task->method()->set_queued_for_compilation(); if (CIPrintCompileQueue) { print(); @@ -674,6 +676,16 @@ --_size; } +// methods in the compile queue need to be marked as used on the stack +// so that they don't get reclaimed by Redefine Classes +void CompileQueue::mark_on_stack() { + CompileTask* task = _first; + while (task != NULL) { + task->mark_on_stack(); + task = task->next(); + } +} + // ------------------------------------------------------------------ // CompileQueue::print void CompileQueue::print() { @@ -868,7 +880,7 @@ CompilerThread* CompileBroker::make_compiler_thread(const char* name, CompileQueue* queue, CompilerCounters* counters, TRAPS) { CompilerThread* compiler_thread = NULL; - klassOop k = + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK_0); instanceKlassHandle klass (THREAD, k); @@ -987,6 +999,18 @@ } } + +// Set the methods on the stack as on_stack so that redefine classes doesn't +// reclaim them +void CompileBroker::mark_on_stack() { + if (_c2_method_queue != NULL) { + _c2_method_queue->mark_on_stack(); + } + if (_c1_method_queue != NULL) { + _c1_method_queue->mark_on_stack(); + } +} + // ------------------------------------------------------------------ // CompileBroker::is_idle bool CompileBroker::is_idle() { @@ -1025,9 +1049,9 @@ } guarantee(!method->is_abstract(), "cannot compile abstract methods"); - assert(method->method_holder()->klass_part()->oop_is_instance(), + assert(method->method_holder()->oop_is_instance(), "sanity check"); - assert(!instanceKlass::cast(method->method_holder())->is_not_initialized(), + assert(!InstanceKlass::cast(method->method_holder())->is_not_initialized(), "method holder must be initialized"); assert(!method->is_method_handle_intrinsic(), "do not enqueue these guys"); @@ -1179,10 +1203,10 @@ methodHandle hot_method, int hot_count, const char* comment, Thread* THREAD) { // make sure arguments make sense - assert(method->method_holder()->klass_part()->oop_is_instance(), "not an instance method"); + assert(method->method_holder()->oop_is_instance(), "not an instance method"); assert(osr_bci == InvocationEntryBci || (0 <= osr_bci && osr_bci < method->code_size()), "bci out of range"); assert(!method->is_abstract() && (osr_bci == InvocationEntryBci || !method->is_native()), "cannot compile abstract/native methods"); - assert(!instanceKlass::cast(method->method_holder())->is_not_initialized(), "method holder must be initialized"); + assert(!InstanceKlass::cast(method->method_holder())->is_not_initialized(), "method holder must be initialized"); if (!TieredCompilation) { comp_level = CompLevel_highest_tier; @@ -1234,7 +1258,7 @@ method->constants()->resolve_string_constants(CHECK_AND_CLEAR_NULL); // Resolve all classes seen in the signature of the method // we are compiling. - methodOopDesc::load_signature_classes(method, CHECK_AND_CLEAR_NULL); + Method::load_signature_classes(method, CHECK_AND_CLEAR_NULL); } // If the method is native, do the lookup in the thread requesting @@ -1497,8 +1521,7 @@ JavaThread *thread = JavaThread::current(); thread->set_blocked_on_compilation(true); - methodHandle method(thread, - (methodOop)JNIHandles::resolve(task->method_handle())); + methodHandle method(thread, task->method()); { MutexLocker waiter(task->lock(), thread); @@ -1583,8 +1606,7 @@ CompileTaskWrapper ctw(task); nmethodLocker result_handle; // (handle for the nmethod produced by this task) task->set_code_handle(&result_handle); - methodHandle method(thread, - (methodOop)JNIHandles::resolve(task->method_handle())); + methodHandle method(thread, task->method()); // Never compile a method if breakpoints are present in it if (method()->number_of_breakpoints() == 0) { @@ -1690,7 +1712,6 @@ } } - // ------------------------------------------------------------------ // CompileBroker::invoke_compiler_on_method // @@ -1721,8 +1742,7 @@ // accidentally be referenced once the thread transitions to // native. The NoHandleMark before the transition should catch // any cases where this occurs in the future. - methodHandle method(thread, - (methodOop)JNIHandles::resolve(task->method_handle())); + methodHandle method(thread, task->method()); should_break = check_break_at(method, compile_id, is_osr); if (should_log && !CompilerOracle::should_log(method)) { should_log = false; @@ -1737,7 +1757,7 @@ // Allocate a new set of JNI handles. push_jni_handle_block(); - jobject target_handle = JNIHandles::make_local(thread, JNIHandles::resolve(task->method_handle())); + Method* target_handle = task->method(); int compilable = ciEnv::MethodCompilable; { int system_dictionary_modification_counter; @@ -1806,8 +1826,7 @@ } pop_jni_handle_block(); - methodHandle method(thread, - (methodOop)JNIHandles::resolve(task->method_handle())); + methodHandle method(thread, task->method()); DTRACE_METHOD_COMPILE_END_PROBE(compiler(task->comp_level()), method, task->is_success()); @@ -1901,7 +1920,7 @@ size_t maxLen = CompilerCounters::cmname_buffer_length; if (UsePerfData) { - const char* class_name = method->method_holder()->klass_part()->name()->as_C_string(); + const char* class_name = method->method_holder()->name()->as_C_string(); size_t s1len = strlen(class_name); size_t s2len = strlen(method_name); @@ -1995,7 +2014,7 @@ void CompileBroker::collect_statistics(CompilerThread* thread, elapsedTimer time, CompileTask* task) { bool success = task->is_success(); - methodHandle method (thread, (methodOop)JNIHandles::resolve(task->method_handle())); + methodHandle method (thread, task->method()); uint compile_id = task->compile_id(); bool is_osr = (task->osr_bci() != standard_entry_bci); nmethod* code = task->code(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/compiler/compileBroker.hpp --- a/src/share/vm/compiler/compileBroker.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/compiler/compileBroker.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -42,7 +42,8 @@ private: Monitor* _lock; uint _compile_id; - jobject _method; + Method* _method; + jobject _method_loader; int _osr_bci; bool _is_complete; bool _is_success; @@ -54,7 +55,8 @@ // Fields used for logging why the compilation was initiated: jlong _time_queued; // in units of os::elapsed_counter() - jobject _hot_method; // which method actually triggered this task + Method* _hot_method; // which method actually triggered this task + jobject _hot_method_loader; int _hot_count; // information about its invocation counter const char* _comment; // more info about the task @@ -70,7 +72,7 @@ void free(); int compile_id() const { return _compile_id; } - jobject method_handle() const { return _method; } + Method* method() const { return _method; } int osr_bci() const { return _osr_bci; } bool is_complete() const { return _is_complete; } bool is_blocking() const { return _is_blocking; } @@ -98,7 +100,7 @@ void set_prev(CompileTask* prev) { _prev = prev; } private: - static void print_compilation_impl(outputStream* st, methodOop method, int compile_id, int comp_level, + static void print_compilation_impl(outputStream* st, Method* method, int compile_id, int comp_level, bool is_osr_method = false, int osr_bci = -1, bool is_blocking = false, const char* msg = NULL, bool short_form = false); @@ -115,6 +117,9 @@ print_inlining(tty, method, inline_level, bci, msg); } + // Redefine Classes support + void mark_on_stack(); + static void print_inline_indent(int inline_level, outputStream* st = tty); void print(); @@ -206,6 +211,9 @@ bool is_empty() const { return _first == NULL; } int size() const { return _size; } + // Redefine Classes support + void mark_on_stack(); + void print(); }; @@ -400,6 +408,9 @@ return _perf_total_compilation != NULL ? _perf_total_compilation->get_value() : 0; } + // Redefine Classes support + static void mark_on_stack(); + // Print a detailed accounting of compilation time static void print_times(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/compiler/compileLog.cpp --- a/src/share/vm/compiler/compileLog.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/compiler/compileLog.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ #include "ci/ciMethod.hpp" #include "compiler/compileLog.hpp" #include "memory/allocation.inline.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/os.hpp" @@ -99,7 +99,7 @@ // ------------------------------------------------------------------ // CompileLog::identify -int CompileLog::identify(ciObject* obj) { +int CompileLog::identify(ciBaseObject* obj) { if (obj == NULL) return 0; int id = obj->ident(); if (id < 0) return id; @@ -121,8 +121,10 @@ _identities[id] = 1; // mark // Now, print the object's identity once, in detail. - if (obj->is_klass()) { - ciKlass* klass = obj->as_klass(); + if (obj->is_metadata()) { + ciMetadata* mobj = obj->as_metadata(); + if (mobj->is_klass()) { + ciKlass* klass = mobj->as_klass(); begin_elem("klass id='%d'", id); name(klass->name()); if (!klass->is_loaded()) { @@ -131,8 +133,8 @@ print(" flags='%d'", klass->modifier_flags()); } end_elem(); - } else if (obj->is_method()) { - ciMethod* method = obj->as_method(); + } else if (mobj->is_method()) { + ciMethod* method = mobj->as_method(); ciSignature* sig = method->signature(); // Pre-identify items that we will need! identify(sig->return_type()); @@ -163,15 +165,18 @@ print(" iicount='%d'", method->interpreter_invocation_count()); } end_elem(); + } else if (mobj->is_type()) { + BasicType type = mobj->as_type()->basic_type(); + elem("type id='%d' name='%s'", id, type2name(type)); + } else { + // Should not happen. + elem("unknown id='%d'", id); + ShouldNotReachHere(); + } } else if (obj->is_symbol()) { begin_elem("symbol id='%d'", id); name(obj->as_symbol()); end_elem(); - } else if (obj->is_null_object()) { - elem("null_object id='%d'", id); - } else if (obj->is_type()) { - BasicType type = obj->as_type()->basic_type(); - elem("type id='%d' name='%s'", id, type2name(type)); } else { // Should not happen. elem("unknown id='%d'", id); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/compiler/compileLog.hpp --- a/src/share/vm/compiler/compileLog.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/compiler/compileLog.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,9 @@ #include "utilities/xmlstream.hpp" +class ciBaseObject; class ciObject; +class ciMetadata; class ciSymbol; // CompileLog @@ -66,7 +68,7 @@ void name(Symbol* s) { xmlStream::name(s); } // Output an object description, return obj->ident(). - int identify(ciObject* obj); + int identify(ciBaseObject* obj); void clear_identities(); // virtuals diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/compiler/compilerOracle.cpp --- a/src/share/vm/compiler/compilerOracle.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/compiler/compilerOracle.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -28,7 +28,7 @@ #include "memory/oopFactory.hpp" #include "memory/resourceArea.hpp" #include "oops/klass.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "oops/symbol.hpp" #include "runtime/handles.inline.hpp" @@ -455,7 +455,7 @@ // exclude java/lang/String indexOf // exclude,java/lang/String,indexOf // For easy cut-and-paste of method names, allow VM output format - // as produced by methodOopDesc::print_short_name: + // as produced by Method::print_short_name: // exclude java.lang.String::indexOf // For simple implementation convenience here, convert them all to space. if (have_colon) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -63,7 +63,6 @@ } void ConcurrentMarkSweepPolicy::initialize_generations() { - initialize_perm_generation(PermGen::ConcurrentMarkSweep); _generations = new GenerationSpecPtr[number_of_generations()]; if (_generations == NULL) vm_exit_during_initialization("Unable to allocate gen spec"); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,7 +48,65 @@ } \ } -class MarkRefsIntoClosure: public OopsInGenClosure { +// Applies the given oop closure to all oops in all klasses visited. +class CMKlassClosure : public KlassClosure { + friend class CMSOopClosure; + friend class CMSOopsInGenClosure; + + OopClosure* _oop_closure; + + // Used when _oop_closure couldn't be set in an initialization list. + void initialize(OopClosure* oop_closure) { + assert(_oop_closure == NULL, "Should only be called once"); + _oop_closure = oop_closure; + } + public: + CMKlassClosure(OopClosure* oop_closure = NULL) : _oop_closure(oop_closure) { } + + void do_klass(Klass* k); +}; + +// The base class for all CMS marking closures. +// It's used to proxy through the metadata to the oops defined in them. +class CMSOopClosure: public ExtendedOopClosure { + CMKlassClosure _klass_closure; + public: + CMSOopClosure() : ExtendedOopClosure() { + _klass_closure.initialize(this); + } + CMSOopClosure(ReferenceProcessor* rp) : ExtendedOopClosure(rp) { + _klass_closure.initialize(this); + } + + virtual bool do_metadata() { return do_metadata_nv(); } + inline bool do_metadata_nv() { return true; } + + virtual void do_klass(Klass* k); + void do_klass_nv(Klass* k); + + virtual void do_class_loader_data(ClassLoaderData* cld); +}; + +// TODO: This duplication of the CMSOopClosure class is only needed because +// some CMS OopClosures derive from OopsInGenClosure. It would be good +// to get rid of them completely. +class CMSOopsInGenClosure: public OopsInGenClosure { + CMKlassClosure _klass_closure; + public: + CMSOopsInGenClosure() { + _klass_closure.initialize(this); + } + + virtual bool do_metadata() { return do_metadata_nv(); } + inline bool do_metadata_nv() { return true; } + + virtual void do_klass(Klass* k); + void do_klass_nv(Klass* k); + + virtual void do_class_loader_data(ClassLoaderData* cld); +}; + +class MarkRefsIntoClosure: public CMSOopsInGenClosure { private: const MemRegion _span; CMSBitMap* _bitMap; @@ -58,9 +116,7 @@ MarkRefsIntoClosure(MemRegion span, CMSBitMap* bitMap); virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); - inline void do_oop_nv(oop* p) { MarkRefsIntoClosure::do_oop_work(p); } - inline void do_oop_nv(narrowOop* p) { MarkRefsIntoClosure::do_oop_work(p); } - bool do_header() { return true; } + Prefetch::style prefetch_style() { return Prefetch::do_read; } @@ -68,7 +124,7 @@ // A variant of the above used in certain kinds of CMS // marking verification. -class MarkRefsIntoVerifyClosure: public OopsInGenClosure { +class MarkRefsIntoVerifyClosure: public CMSOopsInGenClosure { private: const MemRegion _span; CMSBitMap* _verification_bm; @@ -80,53 +136,16 @@ CMSBitMap* cms_bm); virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); - inline void do_oop_nv(oop* p) { MarkRefsIntoVerifyClosure::do_oop_work(p); } - inline void do_oop_nv(narrowOop* p) { MarkRefsIntoVerifyClosure::do_oop_work(p); } - bool do_header() { return true; } + Prefetch::style prefetch_style() { return Prefetch::do_read; } }; -// KlassRememberingOopClosure is used when marking of the permanent generation -// is being done. It adds fields to support revisiting of klasses -// for class unloading. _should_remember_klasses should be set to -// indicate if klasses should be remembered. Currently that is whenever -// CMS class unloading is turned on. The _revisit_stack is used -// to save the klasses for later processing. -class KlassRememberingOopClosure : public OopClosure { - protected: +// The non-parallel version (the parallel version appears further below). +class PushAndMarkClosure: public CMSOopClosure { + private: CMSCollector* _collector; - CMSMarkStack* _revisit_stack; - bool const _should_remember_klasses; - public: - void check_remember_klasses() const PRODUCT_RETURN; - virtual const bool should_remember_klasses() const { - check_remember_klasses(); - return _should_remember_klasses; - } - virtual void remember_klass(Klass* k); - - KlassRememberingOopClosure(CMSCollector* collector, - ReferenceProcessor* rp, - CMSMarkStack* revisit_stack); -}; - -// Similar to KlassRememberingOopClosure for use when multiple -// GC threads will execute the closure. - -class Par_KlassRememberingOopClosure : public KlassRememberingOopClosure { - public: - Par_KlassRememberingOopClosure(CMSCollector* collector, - ReferenceProcessor* rp, - CMSMarkStack* revisit_stack): - KlassRememberingOopClosure(collector, rp, revisit_stack) {} - virtual void remember_klass(Klass* k); -}; - -// The non-parallel version (the parallel version appears further below). -class PushAndMarkClosure: public KlassRememberingOopClosure { - private: MemRegion _span; CMSBitMap* _bit_map; CMSBitMap* _mod_union_table; @@ -141,32 +160,26 @@ CMSBitMap* bit_map, CMSBitMap* mod_union_table, CMSMarkStack* mark_stack, - CMSMarkStack* revisit_stack, bool concurrent_precleaning); virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); inline void do_oop_nv(oop* p) { PushAndMarkClosure::do_oop_work(p); } inline void do_oop_nv(narrowOop* p) { PushAndMarkClosure::do_oop_work(p); } - bool do_header() { return true; } + Prefetch::style prefetch_style() { return Prefetch::do_read; } - // In support of class unloading - virtual const bool should_remember_mdo() const { - return false; - // return _should_remember_klasses; - } - virtual void remember_mdo(DataLayout* v); }; -// In the parallel case, the revisit stack, the bit map and the +// In the parallel case, the bit map and the // reference processor are currently all shared. Access to // these shared mutable structures must use appropriate // synchronization (for instance, via CAS). The marking stack // used in the non-parallel case above is here replaced with // an OopTaskQueue structure to allow efficient work stealing. -class Par_PushAndMarkClosure: public Par_KlassRememberingOopClosure { +class Par_PushAndMarkClosure: public CMSOopClosure { private: + CMSCollector* _collector; MemRegion _span; CMSBitMap* _bit_map; OopTaskQueue* _work_queue; @@ -177,26 +190,19 @@ MemRegion span, ReferenceProcessor* rp, CMSBitMap* bit_map, - OopTaskQueue* work_queue, - CMSMarkStack* revisit_stack); + OopTaskQueue* work_queue); virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); inline void do_oop_nv(oop* p) { Par_PushAndMarkClosure::do_oop_work(p); } inline void do_oop_nv(narrowOop* p) { Par_PushAndMarkClosure::do_oop_work(p); } - bool do_header() { return true; } + Prefetch::style prefetch_style() { return Prefetch::do_read; } - // In support of class unloading - virtual const bool should_remember_mdo() const { - return false; - // return _should_remember_klasses; - } - virtual void remember_mdo(DataLayout* v); }; // The non-parallel version (the parallel version appears further below). -class MarkRefsIntoAndScanClosure: public OopsInGenClosure { +class MarkRefsIntoAndScanClosure: public CMSOopsInGenClosure { private: MemRegion _span; CMSBitMap* _bit_map; @@ -215,7 +221,6 @@ CMSBitMap* bit_map, CMSBitMap* mod_union_table, CMSMarkStack* mark_stack, - CMSMarkStack* revisit_stack, CMSCollector* collector, bool should_yield, bool concurrent_precleaning); @@ -223,19 +228,13 @@ virtual void do_oop(narrowOop* p); inline void do_oop_nv(oop* p) { MarkRefsIntoAndScanClosure::do_oop_work(p); } inline void do_oop_nv(narrowOop* p) { MarkRefsIntoAndScanClosure::do_oop_work(p); } - bool do_header() { return true; } + Prefetch::style prefetch_style() { return Prefetch::do_read; } void set_freelistLock(Mutex* m) { _freelistLock = m; } - virtual const bool should_remember_klasses() const { - return _pushAndMarkClosure.should_remember_klasses(); - } - virtual void remember_klass(Klass* k) { - _pushAndMarkClosure.remember_klass(k); - } private: inline void do_yield_check(); @@ -247,7 +246,7 @@ // stack and the bitMap are shared, so access needs to be suitably // sycnhronized. An OopTaskQueue structure, supporting efficient // workstealing, replaces a CMSMarkStack for storing grey objects. -class Par_MarkRefsIntoAndScanClosure: public OopsInGenClosure { +class Par_MarkRefsIntoAndScanClosure: public CMSOopsInGenClosure { private: MemRegion _span; CMSBitMap* _bit_map; @@ -261,23 +260,12 @@ MemRegion span, ReferenceProcessor* rp, CMSBitMap* bit_map, - OopTaskQueue* work_queue, - CMSMarkStack* revisit_stack); + OopTaskQueue* work_queue); virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); inline void do_oop_nv(oop* p) { Par_MarkRefsIntoAndScanClosure::do_oop_work(p); } inline void do_oop_nv(narrowOop* p) { Par_MarkRefsIntoAndScanClosure::do_oop_work(p); } - bool do_header() { return true; } - // When ScanMarkedObjectsAgainClosure is used, - // it passes [Par_]MarkRefsIntoAndScanClosure to oop_oop_iterate(), - // and this delegation is used. - virtual const bool should_remember_klasses() const { - return _par_pushAndMarkClosure.should_remember_klasses(); - } - // See comment on should_remember_klasses() above. - virtual void remember_klass(Klass* k) { - _par_pushAndMarkClosure.remember_klass(k); - } + Prefetch::style prefetch_style() { return Prefetch::do_read; } @@ -287,8 +275,9 @@ // This closure is used during the concurrent marking phase // following the first checkpoint. Its use is buried in // the closure MarkFromRootsClosure. -class PushOrMarkClosure: public KlassRememberingOopClosure { +class PushOrMarkClosure: public CMSOopClosure { private: + CMSCollector* _collector; MemRegion _span; CMSBitMap* _bitMap; CMSMarkStack* _markStack; @@ -302,19 +291,12 @@ MemRegion span, CMSBitMap* bitMap, CMSMarkStack* markStack, - CMSMarkStack* revisitStack, HeapWord* finger, MarkFromRootsClosure* parent); virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); inline void do_oop_nv(oop* p) { PushOrMarkClosure::do_oop_work(p); } inline void do_oop_nv(narrowOop* p) { PushOrMarkClosure::do_oop_work(p); } - // In support of class unloading - virtual const bool should_remember_mdo() const { - return false; - // return _should_remember_klasses; - } - virtual void remember_mdo(DataLayout* v); // Deal with a stack overflow condition void handle_stack_overflow(HeapWord* lost); @@ -326,8 +308,9 @@ // This closure is used during the concurrent marking phase // following the first checkpoint. Its use is buried in // the closure Par_MarkFromRootsClosure. -class Par_PushOrMarkClosure: public Par_KlassRememberingOopClosure { +class Par_PushOrMarkClosure: public CMSOopClosure { private: + CMSCollector* _collector; MemRegion _whole_span; MemRegion _span; // local chunk CMSBitMap* _bit_map; @@ -345,7 +328,6 @@ CMSBitMap* bit_map, OopTaskQueue* work_queue, CMSMarkStack* mark_stack, - CMSMarkStack* revisit_stack, HeapWord* finger, HeapWord** global_finger_addr, Par_MarkFromRootsClosure* parent); @@ -353,12 +335,6 @@ virtual void do_oop(narrowOop* p); inline void do_oop_nv(oop* p) { Par_PushOrMarkClosure::do_oop_work(p); } inline void do_oop_nv(narrowOop* p) { Par_PushOrMarkClosure::do_oop_work(p); } - // In support of class unloading - virtual const bool should_remember_mdo() const { - return false; - // return _should_remember_klasses; - } - virtual void remember_mdo(DataLayout* v); // Deal with a stack overflow condition void handle_stack_overflow(HeapWord* lost); @@ -372,8 +348,9 @@ // processing phase of the CMS final checkpoint step, as // well as during the concurrent precleaning of the discovered // reference lists. -class CMSKeepAliveClosure: public KlassRememberingOopClosure { +class CMSKeepAliveClosure: public CMSOopClosure { private: + CMSCollector* _collector; const MemRegion _span; CMSMarkStack* _mark_stack; CMSBitMap* _bit_map; @@ -383,7 +360,7 @@ public: CMSKeepAliveClosure(CMSCollector* collector, MemRegion span, CMSBitMap* bit_map, CMSMarkStack* mark_stack, - CMSMarkStack* revisit_stack, bool cpc); + bool cpc); bool concurrent_precleaning() const { return _concurrent_precleaning; } virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); @@ -391,8 +368,9 @@ inline void do_oop_nv(narrowOop* p) { CMSKeepAliveClosure::do_oop_work(p); } }; -class CMSInnerParMarkAndPushClosure: public Par_KlassRememberingOopClosure { +class CMSInnerParMarkAndPushClosure: public CMSOopClosure { private: + CMSCollector* _collector; MemRegion _span; OopTaskQueue* _work_queue; CMSBitMap* _bit_map; @@ -401,7 +379,6 @@ public: CMSInnerParMarkAndPushClosure(CMSCollector* collector, MemRegion span, CMSBitMap* bit_map, - CMSMarkStack* revisit_stack, OopTaskQueue* work_queue); virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); @@ -412,7 +389,7 @@ // A parallel (MT) version of the above, used when // reference processing is parallel; the only difference // is in the do_oop method. -class CMSParKeepAliveClosure: public Par_KlassRememberingOopClosure { +class CMSParKeepAliveClosure: public CMSOopClosure { private: MemRegion _span; OopTaskQueue* _work_queue; @@ -425,12 +402,9 @@ DO_OOP_WORK_DEFN public: CMSParKeepAliveClosure(CMSCollector* collector, MemRegion span, - CMSBitMap* bit_map, CMSMarkStack* revisit_stack, - OopTaskQueue* work_queue); + CMSBitMap* bit_map, OopTaskQueue* work_queue); virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); - inline void do_oop_nv(oop* p) { CMSParKeepAliveClosure::do_oop_work(p); } - inline void do_oop_nv(narrowOop* p) { CMSParKeepAliveClosure::do_oop_work(p); } }; #endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSOOPCLOSURES_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ #include "gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp" #include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" +#include "oops/oop.inline.hpp" // Trim our work_queue so its length is below max at return inline void Par_MarkRefsIntoAndScanClosure::trim_queue(uint max) { @@ -43,42 +44,33 @@ } } -#ifndef PRODUCT -void KlassRememberingOopClosure::check_remember_klasses() const { - assert(_should_remember_klasses == must_remember_klasses(), - "Should remember klasses in this context."); +// CMSOopClosure and CMSoopsInGenClosure are duplicated, +// until we get rid of OopsInGenClosure. + +inline void CMSOopClosure::do_klass(Klass* k) { do_klass_nv(k); } +inline void CMSOopsInGenClosure::do_klass(Klass* k) { do_klass_nv(k); } + +inline void CMSOopClosure::do_klass_nv(Klass* k) { + ClassLoaderData* cld = k->class_loader_data(); + do_class_loader_data(cld); } -#endif - -void KlassRememberingOopClosure::remember_klass(Klass* k) { - if (!_revisit_stack->push(oop(k))) { - fatal("Revisit stack overflow in PushOrMarkClosure"); - } - check_remember_klasses(); +inline void CMSOopsInGenClosure::do_klass_nv(Klass* k) { + ClassLoaderData* cld = k->class_loader_data(); + do_class_loader_data(cld); } -inline void PushOrMarkClosure::remember_mdo(DataLayout* v) { - // TBD +inline void CMSOopClosure::do_class_loader_data(ClassLoaderData* cld) { + assert(_klass_closure._oop_closure == this, "Must be"); + + bool claim = true; // Must claim the class loader data before processing. + cld->oops_do(_klass_closure._oop_closure, &_klass_closure, claim); +} +inline void CMSOopsInGenClosure::do_class_loader_data(ClassLoaderData* cld) { + assert(_klass_closure._oop_closure == this, "Must be"); + + bool claim = true; // Must claim the class loader data before processing. + cld->oops_do(_klass_closure._oop_closure, &_klass_closure, claim); } -void Par_KlassRememberingOopClosure::remember_klass(Klass* k) { - if (!_revisit_stack->par_push(oop(k))) { - fatal("Revisit stack overflow in Par_KlassRememberingOopClosure"); - } - check_remember_klasses(); -} - -inline void Par_PushOrMarkClosure::remember_mdo(DataLayout* v) { - // TBD -} - -inline void PushOrMarkClosure::do_yield_check() { - _parent->do_yield_check(); -} - -inline void Par_PushOrMarkClosure::do_yield_check() { - _parent->do_yield_check(); -} - #endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSOOPCLOSURES_INLINE_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.cpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "gc_implementation/concurrentMarkSweep/cmsPermGen.hpp" -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp" -#include "gc_implementation/shared/cSpaceCounters.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/blockOffsetTable.inline.hpp" -#include "memory/compactPermGen.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/generation.inline.hpp" -#include "memory/permGen.hpp" -#include "memory/universe.hpp" -#include "oops/oop.inline.hpp" -#include "runtime/java.hpp" - -CMSPermGen::CMSPermGen(ReservedSpace rs, size_t initial_byte_size, - CardTableRS* ct, - FreeBlockDictionary::DictionaryChoice dictionaryChoice) { - CMSPermGenGen* g = - new CMSPermGenGen(rs, initial_byte_size, -1, ct); - if (g == NULL) { - vm_exit_during_initialization("Could not allocate a CompactingPermGen"); - } - - g->initialize_performance_counters(); - - _gen = g; -} - -HeapWord* CMSPermGen::mem_allocate(size_t size) { - Mutex* lock = _gen->freelistLock(); - bool lock_owned = lock->owned_by_self(); - if (lock_owned) { - MutexUnlocker mul(lock); - return mem_allocate_in_gen(size, _gen); - } else { - return mem_allocate_in_gen(size, _gen); - } -} - -HeapWord* CMSPermGen::request_expand_and_allocate(Generation* gen, - size_t size, - GCCause::Cause prev_cause /* ignored */) { - HeapWord* obj = gen->expand_and_allocate(size, false); - if (gen->capacity() >= _capacity_expansion_limit) { - set_capacity_expansion_limit(gen->capacity() + MaxPermHeapExpansion); - assert(((ConcurrentMarkSweepGeneration*)gen)->should_concurrent_collect(), - "Should kick off a collection if one not in progress"); - } - return obj; -} - -void CMSPermGen::compute_new_size() { - _gen->compute_new_size(); -} - -void CMSPermGenGen::initialize_performance_counters() { - - const char* gen_name = "perm"; - - // Generation Counters - generation 2, 1 subspace - _gen_counters = new GenerationCounters(gen_name, 2, 1, &_virtual_space); - - _gc_counters = NULL; - - _space_counters = new GSpaceCounters(gen_name, 0, - _virtual_space.reserved_size(), - this, _gen_counters); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.hpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSPERMGEN_HPP -#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSPERMGEN_HPP - -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" -#include "memory/permGen.hpp" - -class CardTableRS; // fwd decl -class ConcurrentMarkSweepGeneration; - -// A PermGen implemented with a CMS space, collected by a CMS collector. -class CMSPermGen: public PermGen { - friend class VMStructs; - - protected: - // The "generation" view. - ConcurrentMarkSweepGeneration* _gen; - - // Override default implementation from PermGen - virtual HeapWord* request_expand_and_allocate(Generation* gen, size_t size, - GCCause::Cause prev_cause); - - public: - CMSPermGen(ReservedSpace rs, size_t initial_byte_size, - CardTableRS* ct, FreeBlockDictionary::DictionaryChoice); - - HeapWord* mem_allocate(size_t size); - - void compute_new_size(); - - Generation* as_gen() const { return _gen; } -}; - -// This is the "generation" view of a CMSPermGen. -class CMSPermGenGen: public ConcurrentMarkSweepGeneration { - // Abstractly, this is a subtype that gets access to protected fields. - friend class CMSPermGen; -public: - CMSPermGenGen(ReservedSpace rs, size_t initial_byte_size, - int level, CardTableRS* ct): - // See comments in the constructor for CompactibleFreeListSpace - // regarding not using adaptive free lists for a perm gen. - ConcurrentMarkSweepGeneration(rs, initial_byte_size, // MinPermHeapExapnsion - level, ct, false /* use adaptive freelists */, - (FreeBlockDictionary::DictionaryChoice)CMSDictionaryChoice) - {} - - void initialize_performance_counters(); - - const char* name() const { - return "concurrent-mark-sweep perm gen"; - } - - const char* short_name() const { - return "CMS Perm"; - } - - bool must_be_youngest() const { return false; } - bool must_be_oldest() const { return false; } -}; - -#endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CMSPERMGEN_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -29,7 +29,7 @@ #include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" #include "gc_implementation/shared/liveRange.hpp" #include "gc_implementation/shared/spaceDecorator.hpp" -#include "gc_interface/collectedHeap.hpp" +#include "gc_interface/collectedHeap.inline.hpp" #include "memory/allocation.inline.hpp" #include "memory/blockOffsetTable.inline.hpp" #include "memory/resourceArea.hpp" @@ -658,13 +658,13 @@ void walk_mem_region_with_cl_nopar(MemRegion mr, \ HeapWord* bottom, HeapWord* top, \ ClosureType* cl) - walk_mem_region_with_cl_DECL(OopClosure); + walk_mem_region_with_cl_DECL(ExtendedOopClosure); walk_mem_region_with_cl_DECL(FilteringClosure); public: FreeListSpace_DCTOC(CompactibleFreeListSpace* sp, CMSCollector* collector, - OopClosure* cl, + ExtendedOopClosure* cl, CardTableModRefBS::PrecisionStyle precision, HeapWord* boundary) : Filtering_DCTOC(sp, cl, precision, boundary), @@ -746,11 +746,11 @@ // (There are only two of these, rather than N, because the split is due // only to the introduction of the FilteringClosure, a local part of the // impl of this abstraction.) -FreeListSpace_DCTOC__walk_mem_region_with_cl_DEFN(OopClosure) +FreeListSpace_DCTOC__walk_mem_region_with_cl_DEFN(ExtendedOopClosure) FreeListSpace_DCTOC__walk_mem_region_with_cl_DEFN(FilteringClosure) DirtyCardToOopClosure* -CompactibleFreeListSpace::new_dcto_cl(OopClosure* cl, +CompactibleFreeListSpace::new_dcto_cl(ExtendedOopClosure* cl, CardTableModRefBS::PrecisionStyle precision, HeapWord* boundary) { return new FreeListSpace_DCTOC(this, _collector, cl, precision, boundary); @@ -781,7 +781,7 @@ } // Apply the given closure to each oop in the space. -void CompactibleFreeListSpace::oop_iterate(OopClosure* cl) { +void CompactibleFreeListSpace::oop_iterate(ExtendedOopClosure* cl) { assert_lock_strong(freelistLock()); HeapWord *cur, *limit; size_t curSize; @@ -795,7 +795,7 @@ } // Apply the given closure to each oop in the space \intersect memory region. -void CompactibleFreeListSpace::oop_iterate(MemRegion mr, OopClosure* cl) { +void CompactibleFreeListSpace::oop_iterate(MemRegion mr, ExtendedOopClosure* cl) { assert_lock_strong(freelistLock()); if (is_empty()) { return; @@ -1006,13 +1006,12 @@ } } else { // must read from what 'p' points to in each loop. - klassOop k = ((volatile oopDesc*)p)->klass_or_null(); + Klass* k = ((volatile oopDesc*)p)->klass_or_null(); if (k != NULL) { - assert(k->is_oop(true /* ignore mark word */), "Should be klass oop"); + assert(k->is_klass(), "Should really be klass oop."); oop o = (oop)p; - assert(o->is_parsable(), "Should be parsable"); assert(o->is_oop(true /* ignore mark word */), "Should be an oop."); - size_t res = o->size_given_klass(k->klass_part()); + size_t res = o->size_given_klass(k); res = adjustObjectSize(res); assert(res != 0, "Block size should not be 0"); return res; @@ -1021,6 +1020,7 @@ } } +// TODO: Now that is_parsable is gone, we should combine these two functions. // A variant of the above that uses the Printezis bits for // unparsable but allocated objects. This avoids any possible // stalls waiting for mutators to initialize objects, and is @@ -1048,15 +1048,15 @@ } } else { // must read from what 'p' points to in each loop. - klassOop k = ((volatile oopDesc*)p)->klass_or_null(); + Klass* k = ((volatile oopDesc*)p)->klass_or_null(); // We trust the size of any object that has a non-NULL // klass and (for those in the perm gen) is parsable // -- irrespective of its conc_safe-ty. - if (k != NULL && ((oopDesc*)p)->is_parsable()) { - assert(k->is_oop(), "Should really be klass oop."); + if (k != NULL) { + assert(k->is_klass(), "Should really be klass oop."); oop o = (oop)p; assert(o->is_oop(), "Should be an oop"); - size_t res = o->size_given_klass(k->klass_part()); + size_t res = o->size_given_klass(k); res = adjustObjectSize(res); assert(res != 0, "Block size should not be 0"); return res; @@ -1103,7 +1103,7 @@ // assert(CollectedHeap::use_parallel_gc_threads() || _bt.block_start(p) == p, // "Should be a block boundary"); if (FreeChunk::indicatesFreeChunk(p)) return false; - klassOop k = oop(p)->klass_or_null(); + Klass* k = oop(p)->klass_or_null(); if (k != NULL) { // Ignore mark word because it may have been used to // chain together promoted objects (the last one @@ -1140,23 +1140,6 @@ if (_collector->abstract_state() == CMSCollector::Sweeping) { CMSBitMap* live_map = _collector->markBitMap(); return live_map->par_isMarked((HeapWord*) p); - } else { - // If we're not currently sweeping and we haven't swept the perm gen in - // the previous concurrent cycle then we may have dead but unswept objects - // in the perm gen. In this case, we use the "deadness" information - // that we had saved in perm_gen_verify_bit_map at the last sweep. - if (!CMSClassUnloadingEnabled && _collector->_permGen->reserved().contains(p)) { - if (_collector->verifying()) { - CMSBitMap* dead_map = _collector->perm_gen_verify_bit_map(); - // Object is marked in the dead_map bitmap at the previous sweep - // when we know that it's dead; if the bitmap is not allocated then - // the object is alive. - return (dead_map->sizeInBits() == 0) // bit_map has been allocated - || !dead_map->par_isMarked((HeapWord*) p); - } else { - return false; // We can't say for sure if it's live, so we say that it's dead. - } - } } return true; } @@ -2442,7 +2425,7 @@ VerifyAllOopsClosure(const CMSCollector* collector, const CompactibleFreeListSpace* sp, MemRegion span, bool past_remark, CMSBitMap* bit_map) : - OopClosure(), _collector(collector), _sp(sp), _span(span), + _collector(collector), _sp(sp), _span(span), _past_remark(past_remark), _bit_map(bit_map) { } virtual void do_oop(oop* p) { VerifyAllOopsClosure::do_oop_work(p); } @@ -2478,8 +2461,10 @@ VerifyAllOopsClosure cl(_collector, this, span, past_remark, _collector->markBitMap()); CollectedHeap* ch = Universe::heap(); - ch->oop_iterate(&cl); // all oops in generations - ch->permanent_oop_iterate(&cl); // all oops in perm gen + + // Iterate over all oops in the heap. Uses the _no_header version + // since we are not interested in following the klass pointers. + ch->oop_iterate_no_header(&cl); } if (VerifyObjectStartArray) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -70,7 +70,6 @@ friend class ConcurrentMarkSweepGeneration; friend class ASConcurrentMarkSweepGeneration; friend class CMSCollector; - friend class CMSPermGenGen; // Local alloc buffer for promotion into this space. friend class CFLS_LAB; @@ -349,8 +348,8 @@ Mutex* freelistLock() const { return &_freelistLock; } // Iteration support - void oop_iterate(MemRegion mr, OopClosure* cl); - void oop_iterate(OopClosure* cl); + void oop_iterate(MemRegion mr, ExtendedOopClosure* cl); + void oop_iterate(ExtendedOopClosure* cl); void object_iterate(ObjectClosure* blk); // Apply the closure to each object in the space whose references @@ -377,7 +376,7 @@ object_iterate_careful(ObjectClosureCareful* cl); // Override: provides a DCTO_CL specific to this kind of space. - DirtyCardToOopClosure* new_dcto_cl(OopClosure* cl, + DirtyCardToOopClosure* new_dcto_cl(ExtendedOopClosure* cl, CardTableModRefBS::PrecisionStyle precision, HeapWord* boundary); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/classLoaderData.hpp" #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "code/codeCache.hpp" @@ -260,17 +261,17 @@ // The field "_initiating_occupancy" represents the occupancy percentage // at which we trigger a new collection cycle. Unless explicitly specified -// via CMSInitiating[Perm]OccupancyFraction (argument "io" below), it +// via CMSInitiatingOccupancyFraction (argument "io" below), it // is calculated by: // // Let "f" be MinHeapFreeRatio in // // _intiating_occupancy = 100-f + -// f * (CMSTrigger[Perm]Ratio/100) -// where CMSTrigger[Perm]Ratio is the argument "tr" below. +// f * (CMSTriggerRatio/100) +// where CMSTriggerRatio is the argument "tr" below. // // That is, if we assume the heap is at its desired maximum occupancy at the -// end of a collection, we let CMSTrigger[Perm]Ratio of the (purported) free +// end of a collection, we let CMSTriggerRatio of the (purported) free // space be allocated before initiating a new collection cycle. // void ConcurrentMarkSweepGeneration::init_initiating_occupancy(intx io, intx tr) { @@ -304,12 +305,6 @@ // Initialize the _ref_processor field of CMSGen _cmsGen->set_ref_processor(_ref_processor); - // Allocate a dummy ref processor for perm gen. - ReferenceProcessor* rp2 = new ReferenceProcessor(); - if (rp2 == NULL) { - vm_exit_during_initialization("Could not allocate ReferenceProcessor object"); - } - _permGen->set_ref_processor(rp2); } } @@ -546,11 +541,9 @@ bool CMSCollector::_foregroundGCShouldWait = false; CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, - ConcurrentMarkSweepGeneration* permGen, CardTableRS* ct, ConcurrentMarkSweepPolicy* cp): _cmsGen(cmsGen), - _permGen(permGen), _ct(ct), _ref_processor(NULL), // will be set later _conc_workers(NULL), // may be set later @@ -558,13 +551,12 @@ _start_sampling(false), _between_prologue_and_epilogue(false), _markBitMap(0, Mutex::leaf + 1, "CMS_markBitMap_lock"), - _perm_gen_verify_bit_map(0, -1 /* no mutex */, "No_lock"), _modUnionTable((CardTableModRefBS::card_shift - LogHeapWordSize), -1 /* lock-free */, "No_lock" /* dummy */), _modUnionClosure(&_modUnionTable), _modUnionClosurePar(&_modUnionTable), - // Adjust my span to cover old (cms) gen and perm gen - _span(cmsGen->reserved()._union(permGen->reserved())), + // Adjust my span to cover old (cms) gen + _span(cmsGen->reserved()), // Construct the is_alive_closure with _span & markBitMap _is_alive_closure(_span, &_markBitMap), _restart_addr(NULL), @@ -606,18 +598,8 @@ // (MUT, marking bit map etc.) to cover both generations subject to // collection. - // First check that _permGen is adjacent to _cmsGen and above it. - assert( _cmsGen->reserved().word_size() > 0 - && _permGen->reserved().word_size() > 0, - "generations should not be of zero size"); - assert(_cmsGen->reserved().intersection(_permGen->reserved()).is_empty(), - "_cmsGen and _permGen should not overlap"); - assert(_cmsGen->reserved().end() == _permGen->reserved().start(), - "_cmsGen->end() different from _permGen->start()"); - // For use by dirty card to oop closures. _cmsGen->cmsSpace()->set_collector(this); - _permGen->cmsSpace()->set_collector(this); // Allocate MUT and marking bit map { @@ -637,10 +619,6 @@ warning("Failed to allocate CMS Marking Stack"); return; } - if (!_revisitStack.allocate(CMSRevisitStackSize)) { - warning("Failed to allocate CMS Revisit Stack"); - return; - } // Support for multi-threaded concurrent phases if (CMSConcurrentMTEnabled) { @@ -710,7 +688,6 @@ } _cmsGen ->init_initiating_occupancy(CMSInitiatingOccupancyFraction, CMSTriggerRatio); - _permGen->init_initiating_occupancy(CMSInitiatingPermOccupancyFraction, CMSTriggerPermRatio); // Clip CMSBootstrapOccupancy between 0 and 100. _bootstrap_occupancy = ((double)MIN2((uintx)100, MAX2((uintx)0, CMSBootstrapOccupancy))) @@ -801,7 +778,6 @@ "Error"); // Choose what strong roots should be scanned depending on verification options - // and perm gen collection mode. if (!CMSClassUnloadingEnabled) { // If class unloading is disabled we want to include all classes into the root set. add_root_scanning_option(SharedHeap::SO_AllClasses); @@ -1054,15 +1030,15 @@ MutexLockerEx y(_markBitMap.lock(), Mutex::_no_safepoint_check_flag); // [see comments preceding SweepClosure::do_blk() below for details] + // + // Can the P-bits be deleted now? JJJ + // // 1. need to mark the object as live so it isn't collected // 2. need to mark the 2nd bit to indicate the object may be uninitialized // 3. need to mark the end of the object so marking, precleaning or sweeping // can skip over uninitialized or unparsable objects. An allocated // object is considered uninitialized for our purposes as long as - // its klass word is NULL. (Unparsable objects are those which are - // initialized in the sense just described, but whose sizes can still - // not be correctly determined. Note that the class of unparsable objects - // can only occur in the perm gen. All old gen objects are parsable + // its klass word is NULL. All old gen objects are parsable // as soon as they are initialized.) _markBitMap.mark(start); // object is live _markBitMap.mark(start + 1); // object is potentially uninitialized? @@ -1324,7 +1300,6 @@ // // OBJECT: klass_word installed; klass_word != 0 && klass_word & 1 == 0; // obj->size() computes correct size -// [Perm Gen objects needs to be "parsable" before they can be navigated] // // TRANSIENT: klass_word == 0; size is indeterminate until we become an OBJECT // @@ -1334,7 +1309,6 @@ // // OBJECT: klass_word installed; klass_word != 0; // obj->size() computes correct size -// [Perm Gen comment above continues to hold] // // TRANSIENT: klass_word == 0; size is indeterminate until we become an OBJECT // @@ -1403,7 +1377,7 @@ assert(!((FreeChunk*)obj_ptr)->is_free(), "Error, block will look free but show wrong size"); OrderAccess::storestore(); - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { // Copy gap missed by (aligned) header size calculation below obj->set_klass_gap(old->klass_gap()); } @@ -1464,7 +1438,6 @@ ps->promo.promoted_oops_iterate_nv(dummy_cl); } -// XXXPERM bool ConcurrentMarkSweepGeneration::should_collect(bool full, size_t size, bool tlab) @@ -1517,7 +1490,8 @@ gclog_or_tty->print_cr("cms_allocation_rate=%g", stats().cms_allocation_rate()); gclog_or_tty->print_cr("occupancy=%3.7f", _cmsGen->occupancy()); gclog_or_tty->print_cr("initiatingOccupancy=%3.7f", _cmsGen->initiating_occupancy()); - gclog_or_tty->print_cr("initiatingPermOccupancy=%3.7f", _permGen->initiating_occupancy()); + gclog_or_tty->print_cr("metadata initialized %d", + MetaspaceGC::should_concurrent_collect()); } // ------------------------------------------------------------------ @@ -1546,7 +1520,7 @@ } } - // Otherwise, we start a collection cycle if either the perm gen or + // Otherwise, we start a collection cycle if // old gen want a collection cycle started. Each may use // an appropriate criterion for making this decision. // XXX We need to make sure that the gen expansion @@ -1571,22 +1545,19 @@ return true; } - if (CMSClassUnloadingEnabled && _permGen->should_concurrent_collect()) { - bool res = update_should_unload_classes(); - if (res) { + if (MetaspaceGC::should_concurrent_collect()) { if (Verbose && PrintGCDetails) { - gclog_or_tty->print_cr("CMS perm gen initiated"); + gclog_or_tty->print("CMSCollector: collect for metadata allocation "); } return true; } - } + return false; } // Clear _expansion_cause fields of constituent generations void CMSCollector::clear_expansion_cause() { _cmsGen->clear_expansion_cause(); - _permGen->clear_expansion_cause(); } // We should be conservative in starting a collection cycle. To @@ -1609,7 +1580,7 @@ // going to fail, or there is believed to be excessive fragmentation in // the generation, etc... or ... // [.(currently done by CMSCollector::shouldConcurrentCollect() only for -// the case of the old generation, not the perm generation; see CR 6543076): +// the case of the old generation; see CR 6543076): // we may be approaching a point at which allocation requests may fail because // we will be out of sufficient free space given allocation rate estimates.] bool ConcurrentMarkSweepGeneration::should_concurrent_collect() const { @@ -1902,13 +1873,13 @@ return; } -// Resize the perm generation and the tenured generation +// Resize the tenured generation // after obtaining the free list locks for the // two generations. void CMSCollector::compute_new_size() { assert_locked_or_safepoint(Heap_lock); FreelistLocker z(this); - _permGen->compute_new_size(); + MetaspaceGC::compute_new_size(); _cmsGen->compute_new_size(); } @@ -2012,6 +1983,9 @@ assert(_collectorState != Idling || _modUnionTable.isAllClear(), "_modUnionTable should be clear if the baton was not passed"); _modUnionTable.clear_all(); + assert(_collectorState != Idling || _ct->klass_rem_set()->mod_union_is_clear(), + "mod union for klasses should be clear if the baton was passed"); + _ct->klass_rem_set()->clear_mod_union(); // We must adjust the allocation statistics being maintained // in the free list space. We do so by reading and clearing @@ -2050,10 +2024,6 @@ _cmsGen->reset_after_compaction(); _concurrent_cycles_since_last_unload = 0; - if (verifying() && !should_unload_classes()) { - perm_gen_verify_bit_map()->clear_all(); - } - // Clear any data recorded in the PLAB chunk arrays. if (_survivor_plab_array != NULL) { reset_survivor_plab_arrays(); @@ -2117,21 +2087,18 @@ // Get locks for all free lists in all generations that this // collector is responsible for _cmsGen->freelistLock()->lock_without_safepoint_check(); - _permGen->freelistLock()->lock_without_safepoint_check(); } void CMSCollector::releaseFreelistLocks() const { // Release locks for all free lists in all generations that this // collector is responsible for _cmsGen->freelistLock()->unlock(); - _permGen->freelistLock()->unlock(); } bool CMSCollector::haveFreelistLocks() const { // Check locks for all free lists in all generations that this // collector is responsible for assert_lock_strong(_cmsGen->freelistLock()); - assert_lock_strong(_permGen->freelistLock()); PRODUCT_ONLY(ShouldNotReachHere()); return true; } @@ -2191,6 +2158,10 @@ // Reset the expansion cause, now that we are about to begin // a new cycle. clear_expansion_cause(); + + // Clear the MetaspaceGC flag since a concurrent collection + // is starting but also clear it after the collection. + MetaspaceGC::set_should_concurrent_collect(false); } // Decide if we want to enable class unloading as part of the // ensuing concurrent GC cycle. @@ -2368,6 +2339,9 @@ reset(true); assert(_collectorState == Idling, "Collector state should " "have changed"); + + MetaspaceGC::set_should_concurrent_collect(false); + stats().record_cms_end(); // Don't move the concurrent_phases_end() and compute_new_size() // calls to here because a preempted background collection @@ -2584,7 +2558,7 @@ // The role of the varaible _between_prologue_and_epilogue is to // enforce the invocation protocol. void CMSCollector::gc_prologue(bool full) { - // Call gc_prologue_work() for each CMSGen and PermGen that + // Call gc_prologue_work() for the CMSGen // we are responsible for. // The following locking discipline assumes that we are only called @@ -2592,7 +2566,7 @@ assert(SafepointSynchronize::is_at_safepoint(), "world is stopped assumption"); // The CMSCollector prologue must call the gc_prologues for the - // "generations" (including PermGen if any) that it's responsible + // "generations" that it's responsible // for. assert( Thread::current()->is_VM_thread() @@ -2610,19 +2584,29 @@ // set a bit saying prologue has been called; cleared in epilogue _between_prologue_and_epilogue = true; // Claim locks for common data structures, then call gc_prologue_work() - // for each CMSGen and PermGen that we are responsible for. + // for each CMSGen. getFreelistLocks(); // gets free list locks on constituent spaces bitMapLock()->lock_without_safepoint_check(); // Should call gc_prologue_work() for all cms gens we are responsible for - bool registerClosure = _collectorState >= Marking + bool duringMarking = _collectorState >= Marking && _collectorState < Sweeping; + + // The young collections clear the modified oops state, which tells if + // there are any modified oops in the class. The remark phase also needs + // that information. Tell the young collection to save the union of all + // modified klasses. + if (duringMarking) { + _ct->klass_rem_set()->set_accumulate_modified_oops(true); + } + + bool registerClosure = duringMarking; + ModUnionClosure* muc = CollectedHeap::use_parallel_gc_threads() ? &_modUnionClosurePar : &_modUnionClosure; _cmsGen->gc_prologue_work(full, registerClosure, muc); - _permGen->gc_prologue_work(full, registerClosure, muc); if (!full) { stats().record_gc0_begin(); @@ -2686,8 +2670,9 @@ assert(haveFreelistLocks(), "must have freelist locks"); assert_lock_strong(bitMapLock()); + _ct->klass_rem_set()->set_accumulate_modified_oops(false); + _cmsGen->gc_epilogue_work(full); - _permGen->gc_epilogue_work(full); if (_collectorState == AbortablePreclean || _collectorState == Precleaning) { // in case sampling was not already enabled, enable it @@ -2697,14 +2682,12 @@ _eden_chunk_index = 0; size_t cms_used = _cmsGen->cmsSpace()->used(); - size_t perm_used = _permGen->cmsSpace()->used(); // update performance counters - this uses a special version of // update_counters() that allows the utilization to be passed as a // parameter, avoiding multiple calls to used(). // _cmsGen->update_counters(cms_used); - _permGen->update_counters(perm_used); if (CMSIncrementalMode) { icms_update_allocation_limits(); @@ -2902,6 +2885,9 @@ HandleMark hm; GenCollectedHeap* gch = GenCollectedHeap::heap(); + // Get a clear set of claim bits for the strong roots processing to work with. + ClassLoaderDataGraph::clear_claimed_marks(); + // Mark from roots one level into CMS MarkRefsIntoClosure notOlder(_span, verification_mark_bm()); gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel. @@ -2909,16 +2895,16 @@ gch->gen_process_strong_roots(_cmsGen->level(), true, // younger gens are roots true, // activate StrongRootsScope - true, // collecting perm gen + false, // not scavenging SharedHeap::ScanningOption(roots_scanning_options()), ¬Older, true, // walk code active on stacks - NULL); + NULL, + NULL); // SSS: Provide correct closure // Now mark from the roots - assert(_revisitStack.isEmpty(), "Should be empty"); MarkFromRootsClosure markFromRootsClosure(this, _span, - verification_mark_bm(), verification_mark_stack(), &_revisitStack, + verification_mark_bm(), verification_mark_stack(), false /* don't yield */, true /* verifying */); assert(_restart_addr == NULL, "Expected pre-condition"); verification_mark_bm()->iterate(&markFromRootsClosure); @@ -2932,9 +2918,6 @@ } assert(verification_mark_stack()->isEmpty(), "Should have been drained"); verify_work_stacks_empty(); - // Should reset the revisit stack above, since no class tree - // surgery is forthcoming. - _revisitStack.reset(); // throwing away all contents // Marking completed -- now verify that each bit marked in // verification_mark_bm() is also marked in markBitMap(); flag all @@ -2948,26 +2931,46 @@ } } +class VerifyKlassOopsKlassClosure : public KlassClosure { + class VerifyKlassOopsClosure : public OopClosure { + CMSBitMap* _bitmap; + public: + VerifyKlassOopsClosure(CMSBitMap* bitmap) : _bitmap(bitmap) { } + void do_oop(oop* p) { guarantee(*p == NULL || _bitmap->isMarked((HeapWord*) *p), "Should be marked"); } + void do_oop(narrowOop* p) { ShouldNotReachHere(); } + } _oop_closure; + public: + VerifyKlassOopsKlassClosure(CMSBitMap* bitmap) : _oop_closure(bitmap) {} + void do_klass(Klass* k) { + k->oops_do(&_oop_closure); + } +}; + void CMSCollector::verify_after_remark_work_2() { ResourceMark rm; HandleMark hm; GenCollectedHeap* gch = GenCollectedHeap::heap(); + // Get a clear set of claim bits for the strong roots processing to work with. + ClassLoaderDataGraph::clear_claimed_marks(); + // Mark from roots one level into CMS MarkRefsIntoVerifyClosure notOlder(_span, verification_mark_bm(), markBitMap()); + CMKlassClosure klass_closure(¬Older); + gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel. gch->gen_process_strong_roots(_cmsGen->level(), true, // younger gens are roots true, // activate StrongRootsScope - true, // collecting perm gen + false, // not scavenging SharedHeap::ScanningOption(roots_scanning_options()), ¬Older, true, // walk code active on stacks - NULL); + NULL, + &klass_closure); // Now mark from the roots - assert(_revisitStack.isEmpty(), "Should be empty"); MarkFromRootsVerifyClosure markFromRootsClosure(this, _span, verification_mark_bm(), markBitMap(), verification_mark_stack()); assert(_restart_addr == NULL, "Expected pre-condition"); @@ -2982,9 +2985,9 @@ } assert(verification_mark_stack()->isEmpty(), "Should have been drained"); verify_work_stacks_empty(); - // Should reset the revisit stack above, since no class tree - // surgery is forthcoming. - _revisitStack.reset(); // throwing away all contents + + VerifyKlassOopsKlassClosure verify_klass_oops(verification_mark_bm()); + ClassLoaderDataGraph::classes_do(&verify_klass_oops); // Marking completed -- now verify that each bit marked in // verification_mark_bm() is also marked in markBitMap(); flag all @@ -3046,7 +3049,7 @@ } void -ConcurrentMarkSweepGeneration::oop_iterate(MemRegion mr, OopClosure* cl) { +ConcurrentMarkSweepGeneration::oop_iterate(MemRegion mr, ExtendedOopClosure* cl) { if (freelistLock()->owned_by_self()) { Generation::oop_iterate(mr, cl); } else { @@ -3056,7 +3059,7 @@ } void -ConcurrentMarkSweepGeneration::oop_iterate(OopClosure* cl) { +ConcurrentMarkSweepGeneration::oop_iterate(ExtendedOopClosure* cl) { if (freelistLock()->owned_by_self()) { Generation::oop_iterate(cl); } else { @@ -3086,10 +3089,6 @@ } void -ConcurrentMarkSweepGeneration::pre_adjust_pointers() { -} - -void ConcurrentMarkSweepGeneration::post_compact() { } @@ -3123,7 +3122,6 @@ void CMSCollector::verify() { _cmsGen->verify(); - _permGen->verify(); } #ifndef PRODUCT @@ -3149,15 +3147,12 @@ #endif // PRODUCT // Decide if we want to enable class unloading as part of the -// ensuing concurrent GC cycle. We will collect the perm gen and +// ensuing concurrent GC cycle. We will collect and // unload classes if it's the case that: // (1) an explicit gc request has been made and the flag // ExplicitGCInvokesConcurrentAndUnloadsClasses is set, OR // (2) (a) class unloading is enabled at the command line, and -// (b) (i) perm gen threshold has been crossed, or -// (ii) old gen is getting really full, or -// (iii) the previous N CMS collections did not collect the -// perm gen +// (b) old gen is getting really full // NOTE: Provided there is no change in the state of the heap between // calls to this method, it should have idempotent results. Moreover, // its results should be monotonically increasing (i.e. going from 0 to 1, @@ -3165,10 +3160,10 @@ // not collected. For the implementation below, it must thus rely on // the property that concurrent_cycles_since_last_unload() // will not decrease unless a collection cycle happened and that -// _permGen->should_concurrent_collect() and _cmsGen->is_too_full() are +// _cmsGen->is_too_full() are // themselves also monotonic in that sense. See check_monotonicity() // below. -bool CMSCollector::update_should_unload_classes() { +void CMSCollector::update_should_unload_classes() { _should_unload_classes = false; // Condition 1 above if (_full_gc_requested && ExplicitGCInvokesConcurrentAndUnloadsClasses) { @@ -3177,10 +3172,8 @@ // Disjuncts 2.b.(i,ii,iii) above _should_unload_classes = (concurrent_cycles_since_last_unload() >= CMSClassUnloadingMaxInterval) - || _permGen->should_concurrent_collect() || _cmsGen->is_too_full(); } - return _should_unload_classes; } bool ConcurrentMarkSweepGeneration::is_too_full() const { @@ -3203,25 +3196,6 @@ // Not unloading classes this cycle assert(!should_unload_classes(), "Inconsitency!"); if ((!verifying() || unloaded_classes_last_cycle()) && should_verify) { - // We were not verifying, or we _were_ unloading classes in the last cycle, - // AND some verification options are enabled this cycle; in this case, - // we must make sure that the deadness map is allocated if not already so, - // and cleared (if already allocated previously -- - // CMSBitMap::sizeInBits() is used to determine if it's allocated). - if (perm_gen_verify_bit_map()->sizeInBits() == 0) { - if (!perm_gen_verify_bit_map()->allocate(_permGen->reserved())) { - warning("Failed to allocate permanent generation verification CMS Bit Map;\n" - "permanent generation verification disabled"); - return; // Note that we leave verification disabled, so we'll retry this - // allocation next cycle. We _could_ remember this failure - // and skip further attempts and permanently disable verification - // attempts if that is considered more desirable. - } - assert(perm_gen_verify_bit_map()->covers(_permGen->reserved()), - "_perm_gen_ver_bit_map inconsistency?"); - } else { - perm_gen_verify_bit_map()->clear_all(); - } // Include symbols, strings and code cache elements to prevent their resurrection. add_root_scanning_option(rso); set_verifying(true); @@ -3241,10 +3215,6 @@ if (_span.contains(p)) { if (_cmsGen->cmsSpace()->is_in_reserved(addr)) { return _cmsGen->cmsSpace()->block_start(p); - } else { - assert(_permGen->cmsSpace()->is_in_reserved(addr), - "Inconsistent _span?"); - return _permGen->cmsSpace()->block_start(p); } } return NULL; @@ -3560,18 +3530,27 @@ // weak reference processing has not started yet. ref_processor()->set_enqueuing_is_done(false); + // Need to remember all newly created CLDs, + // so that we can guarantee that the remark finds them. + ClassLoaderDataGraph::remember_new_clds(true); + + // Whenever a CLD is found, it will be claimed before proceeding to mark + // the klasses. The claimed marks need to be cleared before marking starts. + ClassLoaderDataGraph::clear_claimed_marks(); + + CMKlassClosure klass_closure(¬Older); { - // This is not needed. DEBUG_ONLY(RememberKlassesChecker imx(true);) COMPILER2_PRESENT(DerivedPointerTableDeactivate dpt_deact;) gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel. gch->gen_process_strong_roots(_cmsGen->level(), true, // younger gens are roots true, // activate StrongRootsScope - true, // collecting perm gen + false, // not scavenging SharedHeap::ScanningOption(roots_scanning_options()), ¬Older, true, // walk all of code cache if (so & SO_CodeCache) - NULL); + NULL, + &klass_closure); } // Clear mod-union table; it will be dirtied in the prologue of @@ -3582,6 +3561,8 @@ " or no bits are set in the gc_prologue before the start of the next " "subsequent marking phase."); + assert(_ct->klass_rem_set()->mod_union_is_clear(), "Must be"); + // Save the end of the used_region of the constituent generations // to be used to limit the extent of sweep in each generation. save_sweep_limits(); @@ -3672,13 +3653,8 @@ // already have locks assert_lock_strong(bitMapLock()); - // Clear the revisit stack, just in case there are any - // obsolete contents from a short-circuited previous CMS cycle. - _revisitStack.reset(); verify_work_stacks_empty(); verify_overflow_empty(); - assert(_revisitStack.isEmpty(), "tabula rasa"); - DEBUG_ONLY(RememberKlassesChecker cmx(should_unload_classes());) bool result = false; if (CMSConcurrentMTEnabled && ConcGCThreads > 0) { result = do_marking_mt(asynch); @@ -3726,7 +3702,6 @@ bool _asynch; bool _result; CompactibleFreeListSpace* _cms_space; - CompactibleFreeListSpace* _perm_space; char _pad_front[64]; // padding to ... HeapWord* _global_finger; // ... avoid sharing cache line char _pad_back[64]; @@ -3745,14 +3720,12 @@ public: CMSConcMarkingTask(CMSCollector* collector, CompactibleFreeListSpace* cms_space, - CompactibleFreeListSpace* perm_space, bool asynch, YieldingFlexibleWorkGang* workers, OopTaskQueueSet* task_queues): YieldingFlexibleGangTask("Concurrent marking done multi-threaded"), _collector(collector), _cms_space(cms_space), - _perm_space(perm_space), _asynch(asynch), _n_workers(0), _result(true), _task_queues(task_queues), _term(_n_workers, task_queues, _collector), @@ -3761,8 +3734,6 @@ _requested_size = _n_workers; _term.set_task(this); _term_term.set_task(this); - assert(_cms_space->bottom() < _perm_space->bottom(), - "Finger incorrectly initialized below"); _restart_addr = _global_finger = _cms_space->bottom(); } @@ -3791,8 +3762,6 @@ void reset(HeapWord* ra) { assert(_global_finger >= _cms_space->end(), "Postcondition of ::work(i)"); - assert(_global_finger >= _perm_space->end(), "Postcondition of ::work(i)"); - assert(ra < _perm_space->end(), "ra too large"); _restart_addr = _global_finger = ra; _term.reset_for_reuse(); } @@ -3871,17 +3840,6 @@ // XXX: need xxx/xxx type of notation, two timers } - // ... do the same for the _perm_space - _timer.reset(); - _timer.start(); - do_scan_and_mark(worker_id, _perm_space); - _timer.stop(); - if (PrintCMSStatistics != 0) { - gclog_or_tty->print_cr("Finished perm space scanning in %dth thread: %3.3f sec", - worker_id, _timer.seconds()); - // XXX: need xxx/xxx type of notation, two timers - } - // ... do work stealing _timer.reset(); _timer.start(); @@ -3899,8 +3857,12 @@ // expanded since the completion of the concurrent // marking. XXX This will likely change under a strict // ABORT semantics. - assert(_global_finger > _cms_space->end() && - _global_finger >= _perm_space->end(), + // After perm removal the comparison was changed to + // greater than or equal to from strictly greater than. + // Before perm removal the highest address sweep would + // have been at the end of perm gen but now is at the + // end of the tenured gen. + assert(_global_finger >= _cms_space->end(), "All tasks have been completed"); DEBUG_ONLY(_collector->verify_overflow_empty();) } @@ -4025,7 +3987,6 @@ &_collector->_markBitMap, work_queue(i), &_collector->_markStack, - &_collector->_revisitStack, _asynch); _collector->_markBitMap.iterate(&cl, my_span.start(), my_span.end()); } // else nothing to do for this task @@ -4042,8 +4003,9 @@ pst->all_tasks_completed(); } -class Par_ConcMarkingClosure: public Par_KlassRememberingOopClosure { +class Par_ConcMarkingClosure: public CMSOopClosure { private: + CMSCollector* _collector; CMSConcMarkingTask* _task; MemRegion _span; CMSBitMap* _bit_map; @@ -4053,9 +4015,9 @@ DO_OOP_WORK_DEFN public: Par_ConcMarkingClosure(CMSCollector* collector, CMSConcMarkingTask* task, OopTaskQueue* work_queue, - CMSBitMap* bit_map, CMSMarkStack* overflow_stack, - CMSMarkStack* revisit_stack): - Par_KlassRememberingOopClosure(collector, collector->ref_processor(), revisit_stack), + CMSBitMap* bit_map, CMSMarkStack* overflow_stack): + CMSOopClosure(collector->ref_processor()), + _collector(collector), _task(task), _span(collector->_span), _work_queue(work_queue), @@ -4064,6 +4026,7 @@ { } virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); + void trim_queue(size_t max); void handle_stack_overflow(HeapWord* lost); void do_yield_check() { @@ -4128,7 +4091,6 @@ assert(new_oop->is_oop(), "Should be an oop"); assert(_bit_map->isMarked((HeapWord*)new_oop), "Grey object"); assert(_span.contains((HeapWord*)new_oop), "Not in span"); - assert(new_oop->is_parsable(), "Should be parsable"); new_oop->oop_iterate(this); // do_oop() above do_yield_check(); } @@ -4156,9 +4118,8 @@ oop obj_to_scan; CMSBitMap* bm = &(_collector->_markBitMap); CMSMarkStack* ovflw = &(_collector->_markStack); - CMSMarkStack* revisit = &(_collector->_revisitStack); int* seed = _collector->hash_seed(i); - Par_ConcMarkingClosure cl(_collector, this, work_q, bm, ovflw, revisit); + Par_ConcMarkingClosure cl(_collector, this, work_q, bm, ovflw); while (true) { cl.trim_queue(0); assert(work_q->size() == 0, "Should have been emptied above"); @@ -4184,7 +4145,6 @@ void CMSConcMarkingTask::coordinator_yield() { assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(), "CMS thread should hold CMS token"); - DEBUG_ONLY(RememberKlassesChecker mux(false);) // First give up the locks, then yield, then re-lock // We should probably use a constructor/destructor idiom to // do this unlock/lock or modify the MutexUnlocker class to @@ -4244,11 +4204,9 @@ conc_workers()->set_active_workers(num_workers); CompactibleFreeListSpace* cms_space = _cmsGen->cmsSpace(); - CompactibleFreeListSpace* perm_space = _permGen->cmsSpace(); CMSConcMarkingTask tsk(this, cms_space, - perm_space, asynch, conc_workers(), task_queues()); @@ -4258,12 +4216,10 @@ // below? In particular, may be we need to subclass the SequantialSubTasksDone // class?? XXX cms_space ->initialize_sequential_subtasks_for_marking(num_workers); - perm_space->initialize_sequential_subtasks_for_marking(num_workers); // Refs discovery is already non-atomic. assert(!ref_processor()->discovery_is_atomic(), "Should be non-atomic"); assert(ref_processor()->discovery_is_mt(), "Discovery should be MT"); - DEBUG_ONLY(RememberKlassesChecker cmx(should_unload_classes());) conc_workers()->start_task(&tsk); while (tsk.yielded()) { tsk.coordinator_yield(); @@ -4296,8 +4252,6 @@ tsk.reset(_restart_addr); cms_space ->initialize_sequential_subtasks_for_marking(num_workers, _restart_addr); - perm_space->initialize_sequential_subtasks_for_marking(num_workers, - _restart_addr); _restart_addr = NULL; // Get the workers going again conc_workers()->start_task(&tsk); @@ -4318,7 +4272,7 @@ // Temporarily make refs discovery single threaded (non-MT) ReferenceProcessorMTDiscoveryMutator rp_mut_discovery(ref_processor(), false); MarkFromRootsClosure markFromRootsClosure(this, _span, &_markBitMap, - &_markStack, &_revisitStack, CMSYield && asynch); + &_markStack, CMSYield && asynch); // the last argument to iterate indicates whether the iteration // should be incremental with periodic yields. _markBitMap.iterate(&markFromRootsClosure); @@ -4510,8 +4464,7 @@ CMSPrecleanRefsYieldClosure yield_cl(this); assert(rp->span().equals(_span), "Spans should be equal"); CMSKeepAliveClosure keep_alive(this, _span, &_markBitMap, - &_markStack, &_revisitStack, - true /* preclean */); + &_markStack, true /* preclean */); CMSDrainMarkingStackClosure complete_trace(this, _span, &_markBitMap, &_markStack, &keep_alive, true /* preclean */); @@ -4538,8 +4491,7 @@ // tweaking for better performance and some restructuring // for cleaner interfaces. rp->preclean_discovered_references( - rp->is_alive_non_header(), &keep_alive, &complete_trace, - &yield_cl, should_unload_classes()); + rp->is_alive_non_header(), &keep_alive, &complete_trace, &yield_cl); } if (clean_survivor) { // preclean the active survivor space(s) @@ -4550,8 +4502,7 @@ DefNewGeneration* dng = (DefNewGeneration*)_young_gen; PushAndMarkClosure pam_cl(this, _span, ref_processor(), &_markBitMap, &_modUnionTable, - &_markStack, &_revisitStack, - true /* precleaning phase */); + &_markStack, true /* precleaning phase */); stopTimer(); CMSTokenSyncWithLocks ts(true /* is cms thread */, bitMapLock()); @@ -4561,20 +4512,19 @@ SurvivorSpacePrecleanClosure sss_cl(this, _span, &_markBitMap, &_markStack, &pam_cl, before_count, CMSYield); - DEBUG_ONLY(RememberKlassesChecker mx(should_unload_classes());) dng->from()->object_iterate_careful(&sss_cl); dng->to()->object_iterate_careful(&sss_cl); } MarkRefsIntoAndScanClosure mrias_cl(_span, ref_processor(), &_markBitMap, &_modUnionTable, - &_markStack, &_revisitStack, this, CMSYield, + &_markStack, this, CMSYield, true /* precleaning phase */); // CAUTION: The following closure has persistent state that may need to // be reset upon a decrease in the sequence of addresses it // processes. ScanMarkedObjectsAgainCarefullyClosure smoac_cl(this, _span, - &_markBitMap, &_markStack, &_revisitStack, &mrias_cl, CMSYield); + &_markBitMap, &_markStack, &mrias_cl, CMSYield); // Preclean dirty cards in ModUnionTable and CardTable using // appropriate convergence criterion; @@ -4591,9 +4541,6 @@ numIter < CMSPrecleanIter; numIter++, lastNumCards = curNumCards, cumNumCards += curNumCards) { curNumCards = preclean_mod_union_table(_cmsGen, &smoac_cl); - if (CMSPermGenPrecleaningEnabled) { - curNumCards += preclean_mod_union_table(_permGen, &smoac_cl); - } if (Verbose && PrintGCDetails) { gclog_or_tty->print(" (modUnionTable: %d cards)", curNumCards); } @@ -4611,10 +4558,10 @@ break; } } + + preclean_klasses(&mrias_cl, _cmsGen->freelistLock()); + curNumCards = preclean_card_table(_cmsGen, &smoac_cl); - if (CMSPermGenPrecleaningEnabled) { - curNumCards += preclean_card_table(_permGen, &smoac_cl); - } cumNumCards += curNumCards; if (PrintGCDetails && PrintCMSStatistics != 0) { gclog_or_tty->print_cr(" (cardTable: %d cards, re-scanned %d cards, %d iterations)", @@ -4663,13 +4610,6 @@ verify_work_stacks_empty(); verify_overflow_empty(); - // Turn off checking for this method but turn it back on - // selectively. There are yield points in this method - // but it is difficult to turn the checking off just around - // the yield points. It is simpler to selectively turn - // it on. - DEBUG_ONLY(RememberKlassesChecker mux(false);) - // strategy: starting with the first card, accumulate contiguous // ranges of dirty cards; clear these cards, then scan the region // covered by these cards. @@ -4732,7 +4672,6 @@ verify_work_stacks_empty(); verify_overflow_empty(); sample_eden(); - DEBUG_ONLY(RememberKlassesChecker mx(should_unload_classes());) stop_point = gen->cmsSpace()->object_iterate_careful_m(dirtyRegion, cl); } @@ -4743,9 +4682,8 @@ // the bits corresponding to the partially-scanned or unscanned // cards. We'll either restart at the next block boundary or // abort the preclean. - assert((CMSPermGenPrecleaningEnabled && (gen == _permGen)) || - (_collectorState == AbortablePreclean && should_abort_preclean()), - "Unparsable objects should only be in perm gen."); + assert((_collectorState == AbortablePreclean && should_abort_preclean()), + "Should only be AbortablePreclean."); _modUnionTable.mark_range(MemRegion(stop_point, dirtyRegion.end())); if (should_abort_preclean()) { break; // out of preclean loop @@ -4820,17 +4758,11 @@ sample_eden(); verify_work_stacks_empty(); verify_overflow_empty(); - DEBUG_ONLY(RememberKlassesChecker mx(should_unload_classes());) HeapWord* stop_point = gen->cmsSpace()->object_iterate_careful_m(dirtyRegion, cl); if (stop_point != NULL) { - // The careful iteration stopped early because it found an - // uninitialized object. Redirty the bits corresponding to the - // partially-scanned or unscanned cards, and start again at the - // next block boundary. - assert(CMSPermGenPrecleaningEnabled || - (_collectorState == AbortablePreclean && should_abort_preclean()), - "Unparsable objects should only be in perm gen."); + assert((_collectorState == AbortablePreclean && should_abort_preclean()), + "Should only be AbortablePreclean."); _ct->ct_bs()->invalidate(MemRegion(stop_point, dirtyRegion.end())); if (should_abort_preclean()) { break; // out of preclean loop @@ -4848,6 +4780,35 @@ return cumNumDirtyCards; } +class PrecleanKlassClosure : public KlassClosure { + CMKlassClosure _cm_klass_closure; + public: + PrecleanKlassClosure(OopClosure* oop_closure) : _cm_klass_closure(oop_closure) {} + void do_klass(Klass* k) { + if (k->has_accumulated_modified_oops()) { + k->clear_accumulated_modified_oops(); + + _cm_klass_closure.do_klass(k); + } + } +}; + +// The freelist lock is needed to prevent asserts, is it really needed? +void CMSCollector::preclean_klasses(MarkRefsIntoAndScanClosure* cl, Mutex* freelistLock) { + + cl->set_freelistLock(freelistLock); + + CMSTokenSyncWithLocks ts(true, freelistLock, bitMapLock()); + + // SSS: Add equivalent to ScanMarkedObjectsAgainCarefullyClosure::do_yield_check and should_abort_preclean? + // SSS: We should probably check if precleaning should be aborted, at suitable intervals? + PrecleanKlassClosure preclean_klass_closure(cl); + ClassLoaderDataGraph::classes_do(&preclean_klass_closure); + + verify_work_stacks_empty(); + verify_overflow_empty(); +} + void CMSCollector::checkpointRootsFinal(bool asynch, bool clear_all_soft_refs, bool init_mark_was_synchronous) { assert(_collectorState == FinalMarking, "incorrect state transition?"); @@ -4922,7 +4883,6 @@ assert(haveFreelistLocks(), "must have free list locks"); assert_lock_strong(bitMapLock()); - DEBUG_ONLY(RememberKlassesChecker fmx(should_unload_classes());) if (!init_mark_was_synchronous) { // We might assume that we need not fill TLAB's when // CMSScavengeBeforeRemark is set, because we may have just done @@ -5027,9 +4987,6 @@ _markStack._hit_limit = 0; _markStack._failed_double = 0; - // Check that all the klasses have been checked - assert(_revisitStack.isEmpty(), "Not all klasses revisited"); - if ((VerifyAfterGC || VerifyDuringGC) && GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) { verify_after_remark(); @@ -5038,8 +4995,10 @@ // Change under the freelistLocks. _collectorState = Sweeping; // Call isAllClear() under bitMapLock - assert(_modUnionTable.isAllClear(), "Should be clear by end of the" - " final marking"); + assert(_modUnionTable.isAllClear(), + "Should be clear by end of the final marking"); + assert(_ct->klass_rem_set()->mod_union_is_clear(), + "Should be clear by end of the final marking"); if (UseAdaptiveSizePolicy) { size_policy()->checkpoint_roots_final_end(gch->gc_cause()); } @@ -5050,7 +5009,6 @@ CMSCollector* _collector; int _n_workers; CompactibleFreeListSpace* _cms_space; - CompactibleFreeListSpace* _perm_space; // The per-thread work queues, available here for stealing. OopTaskQueueSet* _task_queues; @@ -5061,12 +5019,11 @@ // workers to be taken from the active workers in the work gang. CMSParRemarkTask(CMSCollector* collector, CompactibleFreeListSpace* cms_space, - CompactibleFreeListSpace* perm_space, int n_workers, FlexibleWorkGang* workers, OopTaskQueueSet* task_queues): AbstractGangTask("Rescan roots and grey objects in parallel"), _collector(collector), - _cms_space(cms_space), _perm_space(perm_space), + _cms_space(cms_space), _n_workers(n_workers), _task_queues(task_queues), _term(n_workers, task_queues) { } @@ -5094,6 +5051,29 @@ void do_work_steal(int i, Par_MarkRefsIntoAndScanClosure* cl, int* seed); }; +class RemarkKlassClosure : public KlassClosure { + CMKlassClosure _cm_klass_closure; + public: + RemarkKlassClosure(OopClosure* oop_closure) : _cm_klass_closure(oop_closure) {} + void do_klass(Klass* k) { + // Check if we have modified any oops in the Klass during the concurrent marking. + if (k->has_accumulated_modified_oops()) { + k->clear_accumulated_modified_oops(); + + // We could have transfered the current modified marks to the accumulated marks, + // like we do with the Card Table to Mod Union Table. But it's not really necessary. + } else if (k->has_modified_oops()) { + // Don't clear anything, this info is needed by the next young collection. + } else { + // No modified oops in the Klass. + return; + } + + // The klass has modified fields, need to scan the klass. + _cm_klass_closure.do_klass(k); + } +}; + // work_queue(i) is passed to the closure // Par_MarkRefsIntoAndScanClosure. The "i" parameter // also is passed to do_dirty_card_rescan_tasks() and to @@ -5110,7 +5090,7 @@ Par_MarkRefsIntoAndScanClosure par_mrias_cl(_collector, _collector->_span, _collector->ref_processor(), &(_collector->_markBitMap), - work_queue(worker_id), &(_collector->_revisitStack)); + work_queue(worker_id)); // Rescan young gen roots first since these are likely // coarsely partitioned and may, on that account, constitute @@ -5149,11 +5129,12 @@ gch->gen_process_strong_roots(_collector->_cmsGen->level(), false, // yg was scanned above false, // this is parallel code - true, // collecting perm gen + false, // not scavenging SharedHeap::ScanningOption(_collector->CMSCollector::roots_scanning_options()), &par_mrias_cl, true, // walk all of code cache if (so & SO_CodeCache) - NULL); + NULL, + NULL); // The dirty klasses will be handled below assert(_collector->should_unload_classes() || (_collector->CMSCollector::roots_scanning_options() & SharedHeap::SO_CodeCache), "if we didn't scan the code cache, we have to be ready to drop nmethods with expired weak oops"); @@ -5164,15 +5145,61 @@ worker_id, _timer.seconds()); } + // ---------- unhandled CLD scanning ---------- + if (worker_id == 0) { // Single threaded at the moment. + _timer.reset(); + _timer.start(); + + // Scan all new class loader data objects and new dependencies that were + // introduced during concurrent marking. + ResourceMark rm; + GrowableArray* array = ClassLoaderDataGraph::new_clds(); + for (int i = 0; i < array->length(); i++) { + par_mrias_cl.do_class_loader_data(array->at(i)); + } + + // We don't need to keep track of new CLDs anymore. + ClassLoaderDataGraph::remember_new_clds(false); + + _timer.stop(); + if (PrintCMSStatistics != 0) { + gclog_or_tty->print_cr( + "Finished unhandled CLD scanning work in %dth thread: %3.3f sec", + worker_id, _timer.seconds()); + } + } + + // ---------- dirty klass scanning ---------- + if (worker_id == 0) { // Single threaded at the moment. + _timer.reset(); + _timer.start(); + + // Scan all classes that was dirtied during the concurrent marking phase. + RemarkKlassClosure remark_klass_closure(&par_mrias_cl); + ClassLoaderDataGraph::classes_do(&remark_klass_closure); + + _timer.stop(); + if (PrintCMSStatistics != 0) { + gclog_or_tty->print_cr( + "Finished dirty klass scanning work in %dth thread: %3.3f sec", + worker_id, _timer.seconds()); + } + } + + // We might have added oops to ClassLoaderData::_handles during the + // concurrent marking phase. These oops point to newly allocated objects + // that are guaranteed to be kept alive. Either by the direct allocation + // code, or when the young collector processes the strong roots. Hence, + // we don't have to revisit the _handles block during the remark phase. + // ---------- rescan dirty cards ------------ _timer.reset(); _timer.start(); // Do the rescan tasks for each of the two spaces - // (cms_space and perm_space) in turn. + // (cms_space) in turn. // "worker_id" is passed to select the task_queue for "worker_id" do_dirty_card_rescan_tasks(_cms_space, worker_id, &par_mrias_cl); - do_dirty_card_rescan_tasks(_perm_space, worker_id, &par_mrias_cl); _timer.stop(); if (PrintCMSStatistics != 0) { gclog_or_tty->print_cr( @@ -5284,10 +5311,9 @@ // address that performance anomaly if at all possible. XXX MemRegion full_span = _collector->_span; CMSBitMap* bm = &(_collector->_markBitMap); // shared - CMSMarkStack* rs = &(_collector->_revisitStack); // shared MarkFromDirtyCardsClosure greyRescanClosure(_collector, full_span, // entire span of interest - sp, bm, work_q, rs, cl); + sp, bm, work_q, cl); SequentialSubTasksDone* pst = sp->conc_par_seq_tasks(); assert(pst->valid(), "Uninitialized use?"); @@ -5551,10 +5577,9 @@ workers->set_active_workers(n_workers); } CompactibleFreeListSpace* cms_space = _cmsGen->cmsSpace(); - CompactibleFreeListSpace* perm_space = _permGen->cmsSpace(); CMSParRemarkTask tsk(this, - cms_space, perm_space, + cms_space, n_workers, workers, task_queues()); // Set up for parallel process_strong_roots work. @@ -5580,7 +5605,6 @@ // of parallel tasks (per constituent space) that are dynamically // claimed by the parallel threads. cms_space->initialize_sequential_subtasks_for_rescan(n_workers); - perm_space->initialize_sequential_subtasks_for_rescan(n_workers); // It turns out that even when we're using 1 thread, doing the work in a // separate thread causes wide variance in run times. We can't help this @@ -5598,6 +5622,7 @@ GenCollectedHeap::StrongRootsScope srs(gch); tsk.work(0); } + gch->set_par_threads(0); // 0 ==> non-parallel. // restore, single-threaded for now, any preserved marks // as a result of work_q overflow @@ -5612,14 +5637,13 @@ ReferenceProcessorMTDiscoveryMutator mt(ref_processor(), false); MarkRefsIntoAndScanClosure - mrias_cl(_span, ref_processor(), &_markBitMap, &_modUnionTable, - &_markStack, &_revisitStack, this, + mrias_cl(_span, ref_processor(), &_markBitMap, NULL /* not precleaning */, + &_markStack, this, false /* should_yield */, false /* not precleaning */); MarkFromDirtyCardsClosure markFromDirtyCardsClosure(this, _span, NULL, // space is set further below - &_markBitMap, &_markStack, &_revisitStack, - &mrias_cl); + &_markBitMap, &_markStack, &mrias_cl); { TraceTime t("grey object rescan", PrintGCDetails, false, gclog_or_tty); // Iterate over the dirty cards, setting the corresponding bits in the @@ -5629,9 +5653,6 @@ _ct->ct_bs()->dirty_card_iterate( _cmsGen->used_region(), &modUnionClosure); - _ct->ct_bs()->dirty_card_iterate( - _permGen->used_region(), - &modUnionClosure); } // Having transferred these marks into the modUnionTable, we just need // to rescan the marked objects on the dirty cards in the modUnionTable. @@ -5654,21 +5675,6 @@ markFromDirtyCardsClosure.num_dirty_cards()); } } - { - // .. and then repeat for dirty cards in perm gen - markFromDirtyCardsClosure.set_space(_permGen->cmsSpace()); - MemRegion ur = _permGen->used_region(); - HeapWord* lb = ur.start(); - HeapWord* ub = (HeapWord*)round_to((intptr_t)ur.end(), alignment); - MemRegion perm_span(lb, ub); - _modUnionTable.dirty_range_iterate_clear(perm_span, - &markFromDirtyCardsClosure); - verify_work_stacks_empty(); - if (PrintCMSStatistics != 0) { - gclog_or_tty->print(" (re-scanned "SIZE_FORMAT" dirty cards in perm gen) ", - markFromDirtyCardsClosure.num_dirty_cards()); - } - } } if (VerifyDuringGC && GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) { @@ -5685,15 +5691,54 @@ gch->gen_process_strong_roots(_cmsGen->level(), true, // younger gens as roots false, // use the local StrongRootsScope - true, // collecting perm gen + false, // not scavenging SharedHeap::ScanningOption(roots_scanning_options()), &mrias_cl, true, // walk code active on stacks - NULL); + NULL, + NULL); // The dirty klasses will be handled below + assert(should_unload_classes() || (roots_scanning_options() & SharedHeap::SO_CodeCache), "if we didn't scan the code cache, we have to be ready to drop nmethods with expired weak oops"); } + + { + TraceTime t("visit unhandled CLDs", PrintGCDetails, false, gclog_or_tty); + + verify_work_stacks_empty(); + + // Scan all class loader data objects that might have been introduced + // during concurrent marking. + ResourceMark rm; + GrowableArray* array = ClassLoaderDataGraph::new_clds(); + for (int i = 0; i < array->length(); i++) { + mrias_cl.do_class_loader_data(array->at(i)); + } + + // We don't need to keep track of new CLDs anymore. + ClassLoaderDataGraph::remember_new_clds(false); + + verify_work_stacks_empty(); + } + + { + TraceTime t("dirty klass scan", PrintGCDetails, false, gclog_or_tty); + + verify_work_stacks_empty(); + + RemarkKlassClosure remark_klass_closure(&mrias_cl); + ClassLoaderDataGraph::classes_do(&remark_klass_closure); + + verify_work_stacks_empty(); + } + + // We might have added oops to ClassLoaderData::_handles during the + // concurrent marking phase. These oops point to newly allocated objects + // that are guaranteed to be kept alive. Either by the direct allocation + // code, or when the young collector processes the strong roots. Hence, + // we don't have to revisit the _handles block during the remark phase. + verify_work_stacks_empty(); // Restore evacuated mark words, if any, used for overflow list links if (!CMSOverflowEarlyRestoration) { @@ -5749,11 +5794,9 @@ assert(_collector->_span.equals(_span), "Inconsistency in _span"); CMSParKeepAliveClosure par_keep_alive(_collector, _span, _mark_bit_map, - &_collector->_revisitStack, work_queue(worker_id)); CMSParDrainMarkingStackClosure par_drain_stack(_collector, _span, _mark_bit_map, - &_collector->_revisitStack, work_queue(worker_id)); CMSIsAliveClosure is_alive_closure(_span, _mark_bit_map); _task.work(worker_id, is_alive_closure, par_keep_alive, par_drain_stack); @@ -5782,13 +5825,11 @@ }; CMSParKeepAliveClosure::CMSParKeepAliveClosure(CMSCollector* collector, - MemRegion span, CMSBitMap* bit_map, CMSMarkStack* revisit_stack, - OopTaskQueue* work_queue): - Par_KlassRememberingOopClosure(collector, NULL, revisit_stack), + MemRegion span, CMSBitMap* bit_map, OopTaskQueue* work_queue): _span(span), _bit_map(bit_map), _work_queue(work_queue), - _mark_and_push(collector, span, bit_map, revisit_stack, work_queue), + _mark_and_push(collector, span, bit_map, work_queue), _low_water_mark(MIN2((uint)(work_queue->max_elems()/4), (uint)(CMSWorkQueueDrainThreshold * ParallelGCThreads))) { } @@ -5879,8 +5920,7 @@ verify_work_stacks_empty(); CMSKeepAliveClosure cmsKeepAliveClosure(this, _span, &_markBitMap, - &_markStack, &_revisitStack, - false /* !preclean */); + &_markStack, false /* !preclean */); CMSDrainMarkingStackClosure cmsDrainMarkingStackClosure(this, _span, &_markBitMap, &_markStack, &cmsKeepAliveClosure, false /* !preclean */); @@ -5933,18 +5973,8 @@ verify_work_stacks_empty(); // Update subklass/sibling/implementor links in KlassKlass descendants - assert(!_revisitStack.isEmpty(), "revisit stack should not be empty"); - oop k; - while ((k = _revisitStack.pop()) != NULL) { - ((Klass*)(oopDesc*)k)->follow_weak_klass_links( - &_is_alive_closure, - &cmsKeepAliveClosure); - } - assert(!ClassUnloading || - (_markStack.isEmpty() && overflow_list_is_empty()), - "Should not have found new reachable objects"); - assert(_revisitStack.isEmpty(), "revisit stack should have been drained"); - cmsDrainMarkingStackClosure.do_void(); + Klass::clean_weak_klass_links(&_is_alive_closure); + // Nothing should have been pushed onto the working stacks. verify_work_stacks_empty(); } @@ -5955,7 +5985,9 @@ } } - if (should_unload_classes() || !JavaObjectsInPerm) { + // CMS doesn't use the StringTable as hard roots when class unloading is turned off. + // Need to check if we really scanned the StringTable. + if ((roots_scanning_options() & SharedHeap::SO_Strings) == 0) { TraceTime t("scrub string table", PrintGCDetails, false, gclog_or_tty); // Now clean up stale oops in StringTable StringTable::unlink(&_is_alive_closure); @@ -6019,53 +6051,25 @@ _inter_sweep_estimate.sample(_inter_sweep_timer.seconds()); size_policy()->avg_cms_free_at_sweep()->sample(_cmsGen->free()); - // PermGen verification support: If perm gen sweeping is disabled in - // this cycle, we preserve the perm gen object "deadness" information - // in the perm_gen_verify_bit_map. In order to do that we traverse - // all blocks in perm gen and mark all dead objects. - if (verifying() && !should_unload_classes()) { - assert(perm_gen_verify_bit_map()->sizeInBits() != 0, - "Should have already been allocated"); - MarkDeadObjectsClosure mdo(this, _permGen->cmsSpace(), - markBitMap(), perm_gen_verify_bit_map()); - if (asynch) { - CMSTokenSyncWithLocks ts(true, _permGen->freelistLock(), - bitMapLock()); - _permGen->cmsSpace()->blk_iterate(&mdo); - } else { - // In the case of synchronous sweep, we already have - // the requisite locks/tokens. - _permGen->cmsSpace()->blk_iterate(&mdo); - } - } - assert(!_intra_sweep_timer.is_active(), "Should not be active"); _intra_sweep_timer.reset(); _intra_sweep_timer.start(); if (asynch) { TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty); CMSPhaseAccounting pa(this, "sweep", !PrintGCDetails); - // First sweep the old gen then the perm gen + // First sweep the old gen { CMSTokenSyncWithLocks ts(true, _cmsGen->freelistLock(), bitMapLock()); sweepWork(_cmsGen, asynch); } - // Now repeat for perm gen - if (should_unload_classes()) { - CMSTokenSyncWithLocks ts(true, _permGen->freelistLock(), - bitMapLock()); - sweepWork(_permGen, asynch); - } - // Update Universe::_heap_*_at_gc figures. // We need all the free list locks to make the abstract state // transition from Sweeping to Resetting. See detailed note // further below. { - CMSTokenSyncWithLocks ts(true, _cmsGen->freelistLock(), - _permGen->freelistLock()); + CMSTokenSyncWithLocks ts(true, _cmsGen->freelistLock()); // Update heap occupancy information which is used as // input to soft ref clearing policy at the next gc. Universe::update_heap_info_at_gc(); @@ -6074,10 +6078,6 @@ } else { // already have needed locks sweepWork(_cmsGen, asynch); - - if (should_unload_classes()) { - sweepWork(_permGen, asynch); - } // Update heap occupancy information which is used as // input to soft ref clearing policy at the next gc. Universe::update_heap_info_at_gc(); @@ -6412,7 +6412,7 @@ HeapWord* CMSCollector::next_card_start_after_block(HeapWord* addr) const { size_t sz = 0; oop p = (oop)addr; - if (p->klass_or_null() != NULL && p->is_parsable()) { + if (p->klass_or_null() != NULL) { sz = CompactibleFreeListSpace::adjustObjectSize(p->size()); } else { sz = block_size_using_printezis_bits(addr); @@ -6601,7 +6601,7 @@ // This closure is used to mark refs into the CMS generation in // the CMS bit map. Called at the first checkpoint. This closure // assumes that we do not need to re-mark dirty cards; if the CMS -// generation on which this is used is not an oldest (modulo perm gen) +// generation on which this is used is not an oldest // generation then this will lose younger_gen cards! MarkRefsIntoClosure::MarkRefsIntoClosure( @@ -6663,7 +6663,6 @@ CMSBitMap* bit_map, CMSBitMap* mod_union_table, CMSMarkStack* mark_stack, - CMSMarkStack* revisit_stack, CMSCollector* collector, bool should_yield, bool concurrent_precleaning): @@ -6672,7 +6671,7 @@ _bit_map(bit_map), _mark_stack(mark_stack), _pushAndMarkClosure(collector, span, rp, bit_map, mod_union_table, - mark_stack, revisit_stack, concurrent_precleaning), + mark_stack, concurrent_precleaning), _yield(should_yield), _concurrent_precleaning(concurrent_precleaning), _freelistLock(NULL) @@ -6707,7 +6706,6 @@ do { oop new_oop = _mark_stack->pop(); assert(new_oop != NULL && new_oop->is_oop(), "Expected an oop"); - assert(new_oop->is_parsable(), "Found unparsable oop"); assert(_bit_map->isMarked((HeapWord*)new_oop), "only grey objects on this stack"); // iterate over the oops in this oop, marking and pushing @@ -6747,7 +6745,6 @@ assert_lock_strong(_freelistLock); assert_lock_strong(_bit_map->lock()); // relinquish the free_list_lock and bitMaplock() - DEBUG_ONLY(RememberKlassesChecker mux(false);) _bit_map->lock()->unlock(); _freelistLock->unlock(); ConcurrentMarkSweepThread::desynchronize(true); @@ -6781,14 +6778,13 @@ /////////////////////////////////////////////////////////// Par_MarkRefsIntoAndScanClosure::Par_MarkRefsIntoAndScanClosure( CMSCollector* collector, MemRegion span, ReferenceProcessor* rp, - CMSBitMap* bit_map, OopTaskQueue* work_queue, CMSMarkStack* revisit_stack): + CMSBitMap* bit_map, OopTaskQueue* work_queue): _span(span), _bit_map(bit_map), _work_queue(work_queue), _low_water_mark(MIN2((uint)(work_queue->max_elems()/4), (uint)(CMSWorkQueueDrainThreshold * ParallelGCThreads))), - _par_pushAndMarkClosure(collector, span, rp, bit_map, work_queue, - revisit_stack) + _par_pushAndMarkClosure(collector, span, rp, bit_map, work_queue) { _ref_processor = rp; assert(_ref_processor != NULL, "_ref_processor shouldn't be NULL"); @@ -6849,16 +6845,6 @@ if (_bitMap->isMarked(addr)) { // it's marked; is it potentially uninitialized? if (p->klass_or_null() != NULL) { - // If is_conc_safe is false, the object may be undergoing - // change by the VM outside a safepoint. Don't try to - // scan it, but rather leave it for the remark phase. - if (CMSPermGenPrecleaningEnabled && - (!p->is_conc_safe() || !p->is_parsable())) { - // Signal precleaning to redirty the card since - // the klass pointer is already installed. - assert(size == 0, "Initial value"); - } else { - assert(p->is_parsable(), "must be parsable."); // an initialized object; ignore mark word in verification below // since we are running concurrent with mutators assert(p->is_oop(true), "should be an oop"); @@ -6886,7 +6872,6 @@ "inconsistent Printezis mark"); } #endif // DEBUG - } } else { // an unitialized object assert(_bitMap->isMarked(addr+1), "missing Printezis mark?"); @@ -6900,7 +6885,7 @@ } } else { // Either a not yet marked object or an uninitialized object - if (p->klass_or_null() == NULL || !p->is_parsable()) { + if (p->klass_or_null() == NULL) { // An uninitialized object, skip to the next card, since // we may not be able to read its P-bits yet. assert(size == 0, "Initial value"); @@ -6920,7 +6905,6 @@ "CMS thread should hold CMS token"); assert_lock_strong(_freelistLock); assert_lock_strong(_bitMap->lock()); - DEBUG_ONLY(RememberKlassesChecker mux(false);) // relinquish the free_list_lock and bitMaplock() _bitMap->lock()->unlock(); _freelistLock->unlock(); @@ -6959,7 +6943,6 @@ DEBUG_ONLY(_collector->verify_work_stacks_empty();) assert(!_span.contains(addr), "we are scanning the survivor spaces"); assert(p->klass_or_null() != NULL, "object should be initializd"); - assert(p->is_parsable(), "must be parsable."); // an initialized object; ignore mark word in verification below // since we are running concurrent with mutators assert(p->is_oop(true), "should be an oop"); @@ -6977,7 +6960,6 @@ while (!_mark_stack->isEmpty()) { oop new_oop = _mark_stack->pop(); assert(new_oop != NULL && new_oop->is_oop(), "Expected an oop"); - assert(new_oop->is_parsable(), "Found unparsable oop"); assert(_bit_map->isMarked((HeapWord*)new_oop), "only grey objects on this stack"); // iterate over the oops in this oop, marking and pushing @@ -6997,7 +6979,6 @@ assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(), "CMS thread should hold CMS token"); assert_lock_strong(_bit_map->lock()); - DEBUG_ONLY(RememberKlassesChecker smx(false);) // Relinquish the bit map lock _bit_map->lock()->unlock(); ConcurrentMarkSweepThread::desynchronize(true); @@ -7073,14 +7054,12 @@ MarkFromRootsClosure::MarkFromRootsClosure(CMSCollector* collector, MemRegion span, CMSBitMap* bitMap, CMSMarkStack* markStack, - CMSMarkStack* revisitStack, bool should_yield, bool verifying): _collector(collector), _span(span), _bitMap(bitMap), _mut(&collector->_modUnionTable), _markStack(markStack), - _revisitStack(revisitStack), _yield(should_yield), _skipBits(0) { @@ -7117,7 +7096,7 @@ assert(_skipBits == 0, "tautology"); _skipBits = 2; // skip next two marked bits ("Printezis-marks") oop p = oop(addr); - if (p->klass_or_null() == NULL || !p->is_parsable()) { + if (p->klass_or_null() == NULL) { DEBUG_ONLY(if (!_verifying) {) // We re-dirty the cards on which this object lies and increase // the _threshold so that we'll come back to scan this object @@ -7160,7 +7139,6 @@ assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(), "CMS thread should hold CMS token"); assert_lock_strong(_bitMap->lock()); - DEBUG_ONLY(RememberKlassesChecker mux(false);) _bitMap->lock()->unlock(); ConcurrentMarkSweepThread::desynchronize(true); ConcurrentMarkSweepThread::acknowledge_yield_request(); @@ -7227,10 +7205,6 @@ MemRegion mr(old_threshold, _threshold); assert(!mr.is_empty(), "Control point invariant"); assert(_span.contains(mr), "Should clear within span"); - // XXX When _finger crosses from old gen into perm gen - // we may be doing unnecessary cleaning; do better in the - // future by detecting that condition and clearing fewer - // MUT/CT entries. _mut->clear_range(mr); } DEBUG_ONLY(}) @@ -7238,7 +7212,6 @@ // the stack below. PushOrMarkClosure pushOrMarkClosure(_collector, _span, _bitMap, _markStack, - _revisitStack, _finger, this); bool res = _markStack->push(obj); assert(res, "Empty non-zero size stack should have space for single push"); @@ -7259,7 +7232,6 @@ CMSBitMap* bit_map, OopTaskQueue* work_queue, CMSMarkStack* overflow_stack, - CMSMarkStack* revisit_stack, bool should_yield): _collector(collector), _whole_span(collector->_span), @@ -7268,7 +7240,6 @@ _mut(&collector->_modUnionTable), _work_queue(work_queue), _overflow_stack(overflow_stack), - _revisit_stack(revisit_stack), _yield(should_yield), _skip_bits(0), _task(task) @@ -7296,7 +7267,7 @@ assert(_skip_bits == 0, "tautology"); _skip_bits = 2; // skip next two marked bits ("Printezis-marks") oop p = oop(addr); - if (p->klass_or_null() == NULL || !p->is_parsable()) { + if (p->klass_or_null() == NULL) { // in the case of Clean-on-Enter optimization, redirty card // and avoid clearing card by increasing the threshold. return true; @@ -7350,10 +7321,6 @@ MemRegion mr(old_threshold, _threshold); assert(!mr.is_empty(), "Control point invariant"); assert(_span.contains(mr), "Should clear within span"); // _whole_span ?? - // XXX When _finger crosses from old gen into perm gen - // we may be doing unnecessary cleaning; do better in the - // future by detecting that condition and clearing fewer - // MUT/CT entries. _mut->clear_range(mr); } @@ -7364,7 +7331,6 @@ _span, _bit_map, _work_queue, _overflow_stack, - _revisit_stack, _finger, gfa, this); bool res = _work_queue->push(obj); // overflow could occur here @@ -7461,7 +7427,7 @@ CMSCollector* collector, MemRegion span, CMSBitMap* verification_bm, CMSBitMap* cms_bm, CMSMarkStack* mark_stack): - OopClosure(collector->ref_processor()), + CMSOopClosure(collector->ref_processor()), _collector(collector), _span(span), _verification_bm(verification_bm), @@ -7513,9 +7479,9 @@ PushOrMarkClosure::PushOrMarkClosure(CMSCollector* collector, MemRegion span, CMSBitMap* bitMap, CMSMarkStack* markStack, - CMSMarkStack* revisitStack, HeapWord* finger, MarkFromRootsClosure* parent) : - KlassRememberingOopClosure(collector, collector->ref_processor(), revisitStack), + CMSOopClosure(collector->ref_processor()), + _collector(collector), _span(span), _bitMap(bitMap), _markStack(markStack), @@ -7528,13 +7494,11 @@ CMSBitMap* bit_map, OopTaskQueue* work_queue, CMSMarkStack* overflow_stack, - CMSMarkStack* revisit_stack, HeapWord* finger, HeapWord** global_finger_addr, Par_MarkFromRootsClosure* parent) : - Par_KlassRememberingOopClosure(collector, - collector->ref_processor(), - revisit_stack), + CMSOopClosure(collector->ref_processor()), + _collector(collector), _whole_span(collector->_span), _span(span), _bit_map(bit_map), @@ -7582,6 +7546,11 @@ _overflow_stack->expand(); // expand the stack if possible } +void CMKlassClosure::do_klass(Klass* k) { + assert(_oop_closure != NULL, "Not initialized?"); + k->oops_do(_oop_closure); +} + void PushOrMarkClosure::do_oop(oop obj) { // Ignore mark word because we are running concurrent with mutators. assert(obj->is_oop_or_null(true), "expected an oop or NULL"); @@ -7672,23 +7641,15 @@ void Par_PushOrMarkClosure::do_oop(oop* p) { Par_PushOrMarkClosure::do_oop_work(p); } void Par_PushOrMarkClosure::do_oop(narrowOop* p) { Par_PushOrMarkClosure::do_oop_work(p); } -KlassRememberingOopClosure::KlassRememberingOopClosure(CMSCollector* collector, - ReferenceProcessor* rp, - CMSMarkStack* revisit_stack) : - OopClosure(rp), - _collector(collector), - _revisit_stack(revisit_stack), - _should_remember_klasses(collector->should_unload_classes()) {} - PushAndMarkClosure::PushAndMarkClosure(CMSCollector* collector, MemRegion span, ReferenceProcessor* rp, CMSBitMap* bit_map, CMSBitMap* mod_union_table, CMSMarkStack* mark_stack, - CMSMarkStack* revisit_stack, bool concurrent_precleaning): - KlassRememberingOopClosure(collector, rp, revisit_stack), + CMSOopClosure(rp), + _collector(collector), _span(span), _bit_map(bit_map), _mod_union_table(mod_union_table), @@ -7759,9 +7720,9 @@ MemRegion span, ReferenceProcessor* rp, CMSBitMap* bit_map, - OopTaskQueue* work_queue, - CMSMarkStack* revisit_stack): - Par_KlassRememberingOopClosure(collector, rp, revisit_stack), + OopTaskQueue* work_queue): + CMSOopClosure(rp), + _collector(collector), _span(span), _bit_map(bit_map), _work_queue(work_queue) @@ -7817,16 +7778,7 @@ void Par_PushAndMarkClosure::do_oop(oop* p) { Par_PushAndMarkClosure::do_oop_work(p); } void Par_PushAndMarkClosure::do_oop(narrowOop* p) { Par_PushAndMarkClosure::do_oop_work(p); } -void PushAndMarkClosure::remember_mdo(DataLayout* v) { - // TBD -} - -void Par_PushAndMarkClosure::remember_mdo(DataLayout* v) { - // TBD -} - void CMSPrecleanRefsYieldClosure::do_yield_work() { - DEBUG_ONLY(RememberKlassesChecker mux(false);) Mutex* bml = _collector->bitMapLock(); assert_lock_strong(bml); assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(), @@ -8307,15 +8259,9 @@ "alignment problem"); #ifdef DEBUG - if (oop(addr)->klass_or_null() != NULL && - ( !_collector->should_unload_classes() - || (oop(addr)->is_parsable()) && - oop(addr)->is_conc_safe())) { + if (oop(addr)->klass_or_null() != NULL) { // Ignore mark word because we are running concurrent with mutators assert(oop(addr)->is_oop(true), "live block should be an oop"); - // is_conc_safe is checked before performing this assertion - // because an object that is not is_conc_safe may yet have - // the return from size() correct. assert(size == CompactibleFreeListSpace::adjustObjectSize(oop(addr)->size()), "P-mark and computed size do not agree"); @@ -8324,17 +8270,8 @@ } else { // This should be an initialized object that's alive. - assert(oop(addr)->klass_or_null() != NULL && - (!_collector->should_unload_classes() - || oop(addr)->is_parsable()), + assert(oop(addr)->klass_or_null() != NULL, "Should be an initialized object"); - // Note that there are objects used during class redefinition, - // e.g. merge_cp in VM_RedefineClasses::merge_cp_and_rewrite(), - // which are discarded with their is_conc_safe state still - // false. These object may be floating garbage so may be - // seen here. If they are floating garbage their size - // should be attainable from their klass. Do not that - // is_conc_safe() is true for oop(addr). // Ignore mark word because we are running concurrent with mutators assert(oop(addr)->is_oop(true), "live block should be an oop"); // Verify that the bit map has no bits marked between @@ -8576,11 +8513,12 @@ (!_span.contains(addr) || _bit_map->isMarked(addr)); } + CMSKeepAliveClosure::CMSKeepAliveClosure( CMSCollector* collector, MemRegion span, CMSBitMap* bit_map, CMSMarkStack* mark_stack, - CMSMarkStack* revisit_stack, bool cpc): - KlassRememberingOopClosure(collector, NULL, revisit_stack), + bool cpc): + _collector(collector), _span(span), _bit_map(bit_map), _mark_stack(mark_stack), @@ -8675,9 +8613,8 @@ CMSInnerParMarkAndPushClosure::CMSInnerParMarkAndPushClosure( CMSCollector* collector, MemRegion span, CMSBitMap* bit_map, - CMSMarkStack* revisit_stack, OopTaskQueue* work_queue): - Par_KlassRememberingOopClosure(collector, NULL, revisit_stack), + _collector(collector), _span(span), _bit_map(bit_map), _work_queue(work_queue) { } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -41,7 +41,7 @@ // ConcurrentMarkSweepGeneration is in support of a concurrent // mark-sweep old generation in the Detlefs-Printezis--Boehm-Demers-Schenker // style. We assume, for now, that this generation is always the -// seniormost generation (modulo the PermGeneration), and for simplicity +// seniormost generation and for simplicity // in the first implementation, that this generation is a single compactible // space. Neither of these restrictions appears essential, and will be // relaxed in the future when more time is available to implement the @@ -610,7 +610,6 @@ protected: ConcurrentMarkSweepGeneration* _cmsGen; // old gen (CMS) - ConcurrentMarkSweepGeneration* _permGen; // perm gen MemRegion _span; // span covering above two CardTableRS* _ct; // card table @@ -618,9 +617,6 @@ CMSBitMap _markBitMap; CMSBitMap _modUnionTable; CMSMarkStack _markStack; - CMSMarkStack _revisitStack; // used to keep track of klassKlass objects - // to revisit - CMSBitMap _perm_gen_verify_bit_map; // Mark bit map for perm gen verification support. HeapWord* _restart_addr; // in support of marking stack overflow void lower_restart_addr(HeapWord* low); @@ -783,6 +779,7 @@ // Does precleaning work, returning a quantity indicative of // the amount of "useful work" done. size_t preclean_work(bool clean_refs, bool clean_survivors); + void preclean_klasses(MarkRefsIntoAndScanClosure* cl, Mutex* freelistLock); void abortable_preclean(); // Preclean while looking for possible abort void initialize_sequential_subtasks_for_young_gen_rescan(int i); // Helper function for above; merge-sorts the per-thread plab samples @@ -855,7 +852,6 @@ void setup_cms_unloading_and_verification_state(); public: CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, - ConcurrentMarkSweepGeneration* permGen, CardTableRS* ct, ConcurrentMarkSweepPolicy* cp); ConcurrentMarkSweepThread* cmsThread() { return _cmsThread; } @@ -891,7 +887,7 @@ bool should_unload_classes() const { return _should_unload_classes; } - bool update_should_unload_classes(); + void update_should_unload_classes(); void direct_allocated(HeapWord* start, size_t size); @@ -1002,9 +998,6 @@ CMSMarkStack* verification_mark_stack() { return &_markStack; } CMSBitMap* verification_mark_bm() { return &_verification_mark_bm; } - // Get the bit map with a perm gen "deadness" information. - CMSBitMap* perm_gen_verify_bit_map() { return &_perm_gen_verify_bit_map; } - // Initialization errors bool completed_initialization() { return _completed_initialization; } }; @@ -1253,8 +1246,8 @@ void save_sweep_limit(); // More iteration support - virtual void oop_iterate(MemRegion mr, OopClosure* cl); - virtual void oop_iterate(OopClosure* cl); + virtual void oop_iterate(MemRegion mr, ExtendedOopClosure* cl); + virtual void oop_iterate(ExtendedOopClosure* cl); virtual void safe_object_iterate(ObjectClosure* cl); virtual void object_iterate(ObjectClosure* cl); @@ -1273,8 +1266,6 @@ // the space. FreeChunk* find_chunk_at_end(); - // Overriding of unused functionality (sharing not yet supported with CMS) - void pre_adjust_pointers(); void post_compact(); // Debugging @@ -1359,7 +1350,6 @@ CMSBitMap* _bitMap; CMSBitMap* _mut; CMSMarkStack* _markStack; - CMSMarkStack* _revisitStack; bool _yield; int _skipBits; HeapWord* _finger; @@ -1370,7 +1360,6 @@ MarkFromRootsClosure(CMSCollector* collector, MemRegion span, CMSBitMap* bitMap, CMSMarkStack* markStack, - CMSMarkStack* revisitStack, bool should_yield, bool verifying = false); bool do_bit(size_t offset); void reset(HeapWord* addr); @@ -1394,7 +1383,6 @@ CMSBitMap* _mut; OopTaskQueue* _work_queue; CMSMarkStack* _overflow_stack; - CMSMarkStack* _revisit_stack; bool _yield; int _skip_bits; HeapWord* _finger; @@ -1406,7 +1394,6 @@ CMSBitMap* bit_map, OopTaskQueue* work_queue, CMSMarkStack* overflow_stack, - CMSMarkStack* revisit_stack, bool should_yield); bool do_bit(size_t offset); inline void do_yield_check(); @@ -1419,7 +1406,7 @@ // The following closures are used to do certain kinds of verification of // CMS marking. -class PushAndMarkVerifyClosure: public OopClosure { +class PushAndMarkVerifyClosure: public CMSOopClosure { CMSCollector* _collector; MemRegion _span; CMSBitMap* _verification_bm; @@ -1428,7 +1415,7 @@ protected: void do_oop(oop p); template inline void do_oop_work(T *p) { - oop obj = oopDesc::load_decode_heap_oop_not_null(p); + oop obj = oopDesc::load_decode_heap_oop(p); do_oop(obj); } public: @@ -1439,6 +1426,7 @@ CMSMarkStack* mark_stack); void do_oop(oop* p); void do_oop(narrowOop* p); + // Deal with a stack overflow condition void handle_stack_overflow(HeapWord* lost); }; @@ -1504,7 +1492,6 @@ ReferenceProcessor* rp, CMSBitMap* bit_map, CMSMarkStack* mark_stack, - CMSMarkStack* revisit_stack, MarkRefsIntoAndScanClosure* cl): #ifdef ASSERT _collector(collector), @@ -1520,7 +1507,6 @@ ReferenceProcessor* rp, CMSBitMap* bit_map, OopTaskQueue* work_queue, - CMSMarkStack* revisit_stack, Par_MarkRefsIntoAndScanClosure* cl): #ifdef ASSERT _collector(collector), @@ -1558,24 +1544,22 @@ CompactibleFreeListSpace* space, CMSBitMap* bit_map, CMSMarkStack* mark_stack, - CMSMarkStack* revisit_stack, MarkRefsIntoAndScanClosure* cl): _space(space), _num_dirty_cards(0), _scan_cl(collector, span, collector->ref_processor(), bit_map, - mark_stack, revisit_stack, cl) { } + mark_stack, cl) { } MarkFromDirtyCardsClosure(CMSCollector* collector, MemRegion span, CompactibleFreeListSpace* space, CMSBitMap* bit_map, OopTaskQueue* work_queue, - CMSMarkStack* revisit_stack, Par_MarkRefsIntoAndScanClosure* cl): _space(space), _num_dirty_cards(0), _scan_cl(collector, span, collector->ref_processor(), bit_map, - work_queue, revisit_stack, cl) { } + work_queue, cl) { } void do_MemRegion(MemRegion mr); void set_space(CompactibleFreeListSpace* space) { _space = space; } @@ -1609,7 +1593,6 @@ MemRegion span, CMSBitMap* bitMap, CMSMarkStack* markStack, - CMSMarkStack* revisitStack, MarkRefsIntoAndScanClosure* cl, bool should_yield): _collector(collector), @@ -1838,13 +1821,12 @@ public: CMSParDrainMarkingStackClosure(CMSCollector* collector, MemRegion span, CMSBitMap* bit_map, - CMSMarkStack* revisit_stack, OopTaskQueue* work_queue): _collector(collector), _span(span), _bit_map(bit_map), _work_queue(work_queue), - _mark_and_push(collector, span, bit_map, revisit_stack, work_queue) { } + _mark_and_push(collector, span, bit_map, work_queue) { } public: void trim_queue(uint max); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -266,16 +266,12 @@ inline void CMSCollector::save_sweep_limits() { _cmsGen->save_sweep_limit(); - _permGen->save_sweep_limit(); } inline bool CMSCollector::is_dead_obj(oop obj) const { HeapWord* addr = (HeapWord*)obj; assert((_cmsGen->cmsSpace()->is_in_reserved(addr) - && _cmsGen->cmsSpace()->block_is_obj(addr)) - || - (_permGen->cmsSpace()->is_in_reserved(addr) - && _permGen->cmsSpace()->block_is_obj(addr)), + && _cmsGen->cmsSpace()->block_is_obj(addr)), "must be object"); return should_unload_classes() && _collectorState == Sweeping && @@ -453,6 +449,14 @@ } } +inline void PushOrMarkClosure::do_yield_check() { + _parent->do_yield_check(); +} + +inline void Par_PushOrMarkClosure::do_yield_check() { + _parent->do_yield_check(); +} + // Return value of "true" indicates that the on-going preclean // should be aborted. inline bool ScanMarkedObjectsAgainCarefullyClosure::do_yield_check() { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.cpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -118,7 +118,7 @@ track(trackOop, oop(trackOop)->klass()); } -void PromotionInfo::track(PromotedObject* trackOop, klassOop klassOfOop) { +void PromotionInfo::track(PromotedObject* trackOop, Klass* klassOfOop) { // make a copy of header as it may need to be spooled markOop mark = oop(trackOop)->mark(); trackOop->clear_next(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.hpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -170,7 +170,7 @@ void track(PromotedObject* trackOop); // keep track of a promoted oop // The following variant must be used when trackOop is not fully // initialized and has a NULL klass: - void track(PromotedObject* trackOop, klassOop klassOfOop); // keep track of a promoted oop + void track(PromotedObject* trackOop, Klass* klassOfOop); // keep track of a promoted oop void setSpace(CompactibleFreeListSpace* sp) { _space = sp; } CompactibleFreeListSpace* space() const { return _space; } markOop nextDisplacedHeader(); // get next header & forward spool pointer diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,8 +31,6 @@ nonstatic_field(CompactibleFreeListSpace, _collector, CMSCollector*) \ nonstatic_field(CompactibleFreeListSpace, _bt, BlockOffsetArrayNonContigSpace) \ \ - nonstatic_field(CMSPermGen, _gen, ConcurrentMarkSweepGeneration*) \ - nonstatic_field(CMSBitMap, _bmStartWord, HeapWord*) \ nonstatic_field(CMSBitMap, _bmWordSize, size_t) \ nonstatic_field(CMSBitMap, _shifter, const int) \ nonstatic_field(CMSBitMap, _bm, BitMap) \ @@ -57,8 +55,6 @@ \ declare_type(ConcurrentMarkSweepGeneration,CardGeneration) \ declare_type(CompactibleFreeListSpace, CompactibleSpace) \ - declare_type(CMSPermGenGen, ConcurrentMarkSweepGeneration) \ - declare_type(CMSPermGen, PermGen) \ declare_type(ConcurrentMarkSweepThread, NamedThread) \ declare_type(SurrogateLockerThread, JavaThread) \ declare_toplevel_type(CMSCollector) \ @@ -80,6 +76,5 @@ #define VM_INT_CONSTANTS_CMS(declare_constant) \ declare_constant(Generation::ConcurrentMarkSweep) \ - declare_constant(PermGen::ConcurrentMarkSweep) #endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_VMSTRUCTS_CMS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/concurrentMark.cpp --- a/src/share/vm/gc_implementation/g1/concurrentMark.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/concurrentMark.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -315,9 +315,7 @@ } bool ConcurrentMark::not_yet_marked(oop obj) const { - return (_g1h->is_obj_ill(obj) - || (_g1h->is_in_permanent(obj) - && !nextMarkBitMap()->isMarked((HeapWord*)obj))); + return _g1h->is_obj_ill(obj); } CMRootRegions::CMRootRegions() : @@ -1207,7 +1205,8 @@ } else { assert(last_idx < _card_bm->size(), "sanity"); // Note BitMap::par_at_put_range() is exclusive. - _card_bm->par_at_put_range(start_idx, last_idx+1, true); + BitMap::idx_t max_idx = MAX2(last_idx+1, _card_bm->size()); + _card_bm->par_at_put_range(start_idx, max_idx, true); } } @@ -1553,8 +1552,21 @@ // Now set the bits for [ntams, top] BitMap::idx_t start_idx = _cm->card_bitmap_index_for(ntams); - BitMap::idx_t last_idx = _cm->card_bitmap_index_for(top); + // set_card_bitmap_range() expects the last_idx to be with + // the range of the bit map (see assertion in set_card_bitmap_range()), + // so limit it to that range with this application of MIN2. + BitMap::idx_t last_idx = MIN2(_cm->card_bitmap_index_for(top), + _card_bm->size()-1); + if (start_idx < _card_bm->size()) { set_card_bitmap_range(start_idx, last_idx); + } else { + // To reach here start_idx must be beyond the end of + // the bit map and last_idx must have been limited by + // the MIN2(). + assert(start_idx == last_idx + 1, + err_msg("Not beyond end start_idx " SIZE_FORMAT " last_idx " + SIZE_FORMAT, start_idx, last_idx)); + } // Set the bit for the region if it contains live data if (hr->next_marked_bytes() > 0) { @@ -2011,7 +2023,7 @@ (!_g1->is_in_g1_reserved(addr) || !_g1->is_obj_ill(obj)); } -class G1CMKeepAliveClosure: public OopClosure { +class G1CMKeepAliveClosure: public ExtendedOopClosure { G1CollectedHeap* _g1; ConcurrentMark* _cm; public: @@ -2052,7 +2064,7 @@ _oopClosure(oopClosure) { } void do_void() { - _markStack->drain((OopClosure*)_oopClosure, _cm->nextMarkBitMap(), false); + _markStack->drain(_oopClosure, _cm->nextMarkBitMap(), false); } }; @@ -2494,7 +2506,7 @@ _out->print_cr(" "PTR_FORMAT"%s", o, (over_tams) ? " >" : (marked) ? " M" : ""); PrintReachableOopClosure oopCl(_out, _vo, _all); - o->oop_iterate(&oopCl); + o->oop_iterate_no_header(&oopCl); } } }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp --- a/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -382,8 +382,16 @@ // If the fist object's end q is at the card boundary. Start refining // with the corresponding card (the value of the entry will be basically // set to 0). If the object crosses the boundary -- start from the next card. + size_t n_index = _array->index_for(n); size_t next_index = _array->index_for(n) + !_array->is_card_boundary(n); - HeapWord* next_boundary = _array->address_for_index(next_index); + // Calculate a consistent next boundary. If "n" is not at the boundary + // already, step to the boundary. + HeapWord* next_boundary = _array->address_for_index(n_index) + + (n_index == next_index ? 0 : N_words); + assert(next_boundary <= _array->_end, + err_msg("next_boundary is beyond the end of the covered region " + " next_boundary " PTR_FORMAT " _array->_end " PTR_FORMAT, + next_boundary, _array->_end)); if (csp() != NULL) { if (addr >= csp()->top()) return csp()->top(); while (next_boundary < addr) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp --- a/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -61,7 +61,10 @@ assert(index < _vs.committed_size(), "bad index"); HeapWord* result = _reserved.start() + (index << LogN_words); assert(result >= _reserved.start() && result < _reserved.end(), - "bad address from index"); + err_msg("bad address from index result " PTR_FORMAT + " _reserved.start() " PTR_FORMAT " _reserved.end() " + PTR_FORMAT, + result, _reserved.start(), _reserved.end())); return result; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp --- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -463,7 +463,8 @@ G1CollectorPolicy* g1p = g1h->g1_policy(); HeapRegion* hr = heap_region_containing(p); if (hr == NULL) { - // perm gen (or null) + // null + assert(p == NULL, err_msg("Not NULL " PTR_FORMAT ,p)); return false; } else { return !hr->isHumongous(); @@ -1285,6 +1286,8 @@ print_heap_before_gc(); + size_t metadata_prev_used = MetaspaceAux::used_in_bytes(); + HRSPhaseSetter x(HRSPhaseFullGC); verify_region_sets_optional(); @@ -1402,6 +1405,9 @@ assert(!ref_processor_stw()->discovery_enabled(), "Postcondition"); ref_processor_stw()->verify_no_references_recorded(); + // Delete metaspaces for unloaded class loaders and clean up loader_data graph + ClassLoaderDataGraph::purge(); + // Note: since we've just done a full GC, concurrent // marking is no longer active. Therefore we need not // re-enable reference discovery for the CM ref processor. @@ -1475,8 +1481,7 @@ } if (true) { // FIXME - // Ask the permanent generation to adjust size for full collections - perm()->compute_new_size(); + MetaspaceGC::compute_new_size(); } // Start a new incremental collection set for the next pause @@ -1990,8 +1995,6 @@ _cg1r = new ConcurrentG1Refine(); // Reserve the maximum. - PermanentGenerationSpec* pgs = collector_policy()->permanent_generation(); - // Includes the perm-gen. // When compressed oops are enabled, the preferred heap base // is calculated by subtracting the requested size from the @@ -2005,44 +2008,11 @@ // compressed oops mode. // Since max_byte_size is aligned to the size of a heap region (checked - // above), we also need to align the perm gen size as it might not be. - const size_t total_reserved = max_byte_size + - align_size_up(pgs->max_size(), HeapRegion::GrainBytes); - Universe::check_alignment(total_reserved, HeapRegion::GrainBytes, "g1 heap and perm"); - - char* addr = Universe::preferred_heap_base(total_reserved, Universe::UnscaledNarrowOop); - - ReservedHeapSpace heap_rs(total_reserved, HeapRegion::GrainBytes, - UseLargePages, addr); - - if (UseCompressedOops) { - if (addr != NULL && !heap_rs.is_reserved()) { - // Failed to reserve at specified address - the requested memory - // region is taken already, for example, by 'java' launcher. - // Try again to reserver heap higher. - addr = Universe::preferred_heap_base(total_reserved, Universe::ZeroBasedNarrowOop); - - ReservedHeapSpace heap_rs0(total_reserved, HeapRegion::GrainBytes, - UseLargePages, addr); - - if (addr != NULL && !heap_rs0.is_reserved()) { - // Failed to reserve at specified address again - give up. - addr = Universe::preferred_heap_base(total_reserved, Universe::HeapBasedNarrowOop); - assert(addr == NULL, ""); - - ReservedHeapSpace heap_rs1(total_reserved, HeapRegion::GrainBytes, - UseLargePages, addr); - heap_rs = heap_rs1; - } else { - heap_rs = heap_rs0; - } - } - } - - if (!heap_rs.is_reserved()) { - vm_exit_during_initialization("Could not reserve enough space for object heap"); - return JNI_ENOMEM; - } + // above). + Universe::check_alignment(max_byte_size, HeapRegion::GrainBytes, "g1 heap"); + + ReservedSpace heap_rs = Universe::reserve_heap(max_byte_size, + HeapRegion::GrainBytes); // It is important to do this in a way such that concurrent readers can't // temporarily think somethings in the heap. (I've actually seen this @@ -2076,9 +2046,6 @@ ReservedSpace g1_rs = heap_rs.first_part(max_byte_size); _g1_reserved = MemRegion((HeapWord*)g1_rs.base(), g1_rs.size()/HeapWordSize); - ReservedSpace perm_gen_rs = heap_rs.last_part(max_byte_size); - - _perm_gen = pgs->init(perm_gen_rs, pgs->init_size(), rem_set()); _g1_storage.initialize(g1_rs, 0); _g1_committed = MemRegion((HeapWord*)_g1_storage.low(), (size_t) 0); @@ -2492,21 +2459,6 @@ FullGCCount_lock->notify_all(); } -void G1CollectedHeap::collect_as_vm_thread(GCCause::Cause cause) { - assert_at_safepoint(true /* should_be_vm_thread */); - GCCauseSetter gcs(this, cause); - switch (cause) { - case GCCause::_heap_inspection: - case GCCause::_heap_dump: { - HandleMark hm; - do_full_collection(false); // don't clear all soft refs - break; - } - default: // XXX FIX ME - ShouldNotReachHere(); // Unexpected use of this function - } -} - void G1CollectedHeap::collect(GCCause::Cause cause) { assert_heap_not_locked(); @@ -2580,7 +2532,7 @@ HeapRegion* hr = heap_region_containing_raw(p); return hr->is_in(p); } else { - return _perm_gen->as_gen()->is_in(p); + return false; } } @@ -2591,9 +2543,9 @@ class IterateOopClosureRegionClosure: public HeapRegionClosure { MemRegion _mr; - OopClosure* _cl; + ExtendedOopClosure* _cl; public: - IterateOopClosureRegionClosure(MemRegion mr, OopClosure* cl) + IterateOopClosureRegionClosure(MemRegion mr, ExtendedOopClosure* cl) : _mr(mr), _cl(cl) {} bool doHeapRegion(HeapRegion* r) { if (!r->continuesHumongous()) { @@ -2603,20 +2555,14 @@ } }; -void G1CollectedHeap::oop_iterate(OopClosure* cl, bool do_perm) { +void G1CollectedHeap::oop_iterate(ExtendedOopClosure* cl) { IterateOopClosureRegionClosure blk(_g1_committed, cl); heap_region_iterate(&blk); - if (do_perm) { - perm_gen()->oop_iterate(cl); - } -} - -void G1CollectedHeap::oop_iterate(MemRegion mr, OopClosure* cl, bool do_perm) { +} + +void G1CollectedHeap::oop_iterate(MemRegion mr, ExtendedOopClosure* cl) { IterateOopClosureRegionClosure blk(mr, cl); heap_region_iterate(&blk); - if (do_perm) { - perm_gen()->oop_iterate(cl); - } } // Iterates an ObjectClosure over all objects within a HeapRegion. @@ -2633,12 +2579,9 @@ } }; -void G1CollectedHeap::object_iterate(ObjectClosure* cl, bool do_perm) { +void G1CollectedHeap::object_iterate(ObjectClosure* cl) { IterateObjectClosureRegionClosure blk(cl); heap_region_iterate(&blk); - if (do_perm) { - perm_gen()->object_iterate(cl); - } } void G1CollectedHeap::object_iterate_since_last_GC(ObjectClosure* cl) { @@ -2983,8 +2926,6 @@ Space* G1CollectedHeap::space_containing(const void* addr) const { Space* res = heap_region_containing(addr); - if (res == NULL) - res = perm_gen()->space_containing(addr); return res; } @@ -3139,7 +3080,7 @@ guarantee(!_g1h->is_obj_dead(o), "mark word and concurrent mark mismatch"); } - o->oop_iterate(&isLive); + o->oop_iterate_no_header(&isLive); if (!_hr->obj_allocated_since_prev_marking(o)) { size_t obj_size = o->size(); // Make sure we don't overflow _live_bytes += (obj_size * HeapWordSize); @@ -3226,6 +3167,38 @@ } }; +class YoungRefCounterClosure : public OopClosure { + G1CollectedHeap* _g1h; + int _count; + public: + YoungRefCounterClosure(G1CollectedHeap* g1h) : _g1h(g1h), _count(0) {} + void do_oop(oop* p) { if (_g1h->is_in_young(*p)) { _count++; } } + void do_oop(narrowOop* p) { ShouldNotReachHere(); } + + int count() { return _count; } + void reset_count() { _count = 0; }; +}; + +class VerifyKlassClosure: public KlassClosure { + YoungRefCounterClosure _young_ref_counter_closure; + OopClosure *_oop_closure; + public: + VerifyKlassClosure(G1CollectedHeap* g1h, OopClosure* cl) : _young_ref_counter_closure(g1h), _oop_closure(cl) {} + void do_klass(Klass* k) { + k->oops_do(_oop_closure); + + _young_ref_counter_closure.reset_count(); + k->oops_do(&_young_ref_counter_closure); + if (_young_ref_counter_closure.count() > 0) { + guarantee(k->has_modified_oops(), err_msg("Klass %p, has young refs but is not dirty.", k)); + } + } +}; + +// TODO: VerifyRootsClosure extends OopsInGenClosure so that we can +// pass it as the perm_blk to SharedHeap::process_strong_roots. +// When process_strong_roots stop calling perm_blk->younger_refs_iterate +// we can change this closure to extend the simpler OopClosure. class VerifyRootsClosure: public OopsInGenClosure { private: G1CollectedHeap* _g1h; @@ -3303,39 +3276,31 @@ void G1CollectedHeap::verify(bool silent, VerifyOption vo) { if (SafepointSynchronize::is_at_safepoint() || ! UseTLAB) { - if (!silent) { gclog_or_tty->print("Roots (excluding permgen) "); } + if (!silent) { gclog_or_tty->print("Roots "); } VerifyRootsClosure rootsCl(vo); assert(Thread::current()->is_VM_thread(), "Expected to be executed serially by the VM thread at this point"); CodeBlobToOopClosure blobsCl(&rootsCl, /*do_marking=*/ false); + VerifyKlassClosure klassCl(this, &rootsCl); // We apply the relevant closures to all the oops in the // system dictionary, the string table and the code cache. const int so = SO_AllClasses | SO_Strings | SO_CodeCache; + // Need cleared claim bits for the strong roots processing + ClassLoaderDataGraph::clear_claimed_marks(); + process_strong_roots(true, // activate StrongRootsScope - true, // we set "collecting perm gen" to true, - // so we don't reset the dirty cards in the perm gen. + false, // we set "is scavenging" to false, + // so we don't reset the dirty cards. ScanningOption(so), // roots scanning options &rootsCl, &blobsCl, - &rootsCl); - - // If we're verifying after the marking phase of a Full GC then we can't - // treat the perm gen as roots into the G1 heap. Some of the objects in - // the perm gen may be dead and hence not marked. If one of these dead - // objects is considered to be a root then we may end up with a false - // "Root location points to dead ob " failure. - if (vo != VerifyOption_G1UseMarkWord) { - // Since we used "collecting_perm_gen" == true above, we will not have - // checked the refs from perm into the G1-collected heap. We check those - // references explicitly below. Whether the relevant cards are dirty - // is checked further below in the rem set verification. - if (!silent) { gclog_or_tty->print("Permgen roots "); } - perm_gen()->oop_iterate(&rootsCl); - } + &klassCl + ); + bool failures = rootsCl.failures(); if (vo != VerifyOption_G1UseMarkWord) { @@ -3431,7 +3396,6 @@ st->print("%u survivors (" SIZE_FORMAT "K)", survivor_regions, (size_t) survivor_regions * HeapRegion::GrainBytes / K); st->cr(); - perm()->as_gen()->print_on(st); } void G1CollectedHeap::print_extended_on(outputStream* st) const { @@ -3849,7 +3813,6 @@ if (g1_policy()->during_initial_mark_pause()) { concurrent_mark()->checkpointRootsInitialPre(); } - perm_gen()->save_marks(); #if YOUNG_LIST_VERBOSE gclog_or_tty->print_cr("\nBefore choosing collection set.\nYoung_list:"); @@ -4642,6 +4605,13 @@ return obj; } +template +void G1ParCopyHelper::do_klass_barrier(T* p, oop new_obj) { + if (_g1->heap_region_containing_raw(new_obj)->is_young()) { + _scanned_klass->record_modified_oops(); + } +} + template template void G1ParCopyClosure @@ -4671,6 +4641,8 @@ // When scanning the RS, we only care about objs in CS. if (barrier == G1BarrierRS) { _par_scan_state->update_rs(_from, p, _worker_id); + } else if (barrier == G1BarrierKlass) { + do_klass_barrier(p, forwardee); } } else { // The object is not in collection set. If we're a root scanning @@ -4799,6 +4771,32 @@ pss->retire_alloc_buffers(); } +class G1KlassScanClosure : public KlassClosure { + G1ParCopyHelper* _closure; + bool _process_only_dirty; + int _count; + public: + G1KlassScanClosure(G1ParCopyHelper* closure, bool process_only_dirty) + : _process_only_dirty(process_only_dirty), _closure(closure), _count(0) {} + void do_klass(Klass* klass) { + // If the klass has not been dirtied we know that there's + // no references into the young gen and we can skip it. + if (!_process_only_dirty || klass->has_modified_oops()) { + // Clean the klass since we're going to scavenge all the metadata. + klass->clear_modified_oops(); + + // Tell the closure that this klass is the Klass to scavenge + // and is the one to dirty if oops are left pointing into the young gen. + _closure->set_scanned_klass(klass); + + klass->oops_do(_closure); + + _closure->set_scanned_klass(NULL); + } + _count++; + } +}; + class G1ParTask : public AbstractGangTask { protected: G1CollectedHeap* _g1h; @@ -4866,28 +4864,34 @@ pss.set_partial_scan_closure(&partial_scan_cl); G1ParScanExtRootClosure only_scan_root_cl(_g1h, &pss, rp); - G1ParScanPermClosure only_scan_perm_cl(_g1h, &pss, rp); + G1ParScanMetadataClosure only_scan_metadata_cl(_g1h, &pss, rp); G1ParScanAndMarkExtRootClosure scan_mark_root_cl(_g1h, &pss, rp); - G1ParScanAndMarkPermClosure scan_mark_perm_cl(_g1h, &pss, rp); + G1ParScanAndMarkMetadataClosure scan_mark_metadata_cl(_g1h, &pss, rp); + + bool only_young = _g1h->g1_policy()->gcs_are_young(); + G1KlassScanClosure scan_mark_klasses_cl_s(&scan_mark_metadata_cl, false); + G1KlassScanClosure only_scan_klasses_cl_s(&only_scan_metadata_cl, only_young); OopClosure* scan_root_cl = &only_scan_root_cl; - OopsInHeapRegionClosure* scan_perm_cl = &only_scan_perm_cl; + G1KlassScanClosure* scan_klasses_cl = &only_scan_klasses_cl_s; if (_g1h->g1_policy()->during_initial_mark_pause()) { // We also need to mark copied objects. scan_root_cl = &scan_mark_root_cl; - scan_perm_cl = &scan_mark_perm_cl; + scan_klasses_cl = &scan_mark_klasses_cl_s; } G1ParPushHeapRSClosure push_heap_rs_cl(_g1h, &pss); + int so = SharedHeap::SO_AllClasses | SharedHeap::SO_Strings | SharedHeap::SO_CodeCache; + pss.start_strong_roots(); - _g1h->g1_process_strong_roots(/* not collecting perm */ false, - SharedHeap::SO_AllClasses, + _g1h->g1_process_strong_roots(/* is scavenging */ true, + SharedHeap::ScanningOption(so), scan_root_cl, &push_heap_rs_cl, - scan_perm_cl, + scan_klasses_cl, worker_id); pss.end_strong_roots(); @@ -4987,30 +4991,29 @@ void G1CollectedHeap:: -g1_process_strong_roots(bool collecting_perm_gen, +g1_process_strong_roots(bool is_scavenging, ScanningOption so, OopClosure* scan_non_heap_roots, OopsInHeapRegionClosure* scan_rs, - OopsInGenClosure* scan_perm, + G1KlassScanClosure* scan_klasses, int worker_i) { - // First scan the strong roots, including the perm gen. + // First scan the strong roots double ext_roots_start = os::elapsedTime(); double closure_app_time_sec = 0.0; BufferingOopClosure buf_scan_non_heap_roots(scan_non_heap_roots); - BufferingOopsInGenClosure buf_scan_perm(scan_perm); - buf_scan_perm.set_generation(perm_gen()); // Walk the code cache w/o buffering, because StarTask cannot handle // unaligned oop locations. G1FilteredCodeBlobToOopClosure eager_scan_code_roots(this, scan_non_heap_roots); process_strong_roots(false, // no scoping; this is parallel code - collecting_perm_gen, so, + is_scavenging, so, &buf_scan_non_heap_roots, &eager_scan_code_roots, - &buf_scan_perm); + scan_klasses + ); // Now the CM ref_processor roots. if (!_process_strong_tasks->is_task_claimed(G1H_PS_refProcessor_oops_do)) { @@ -5023,10 +5026,9 @@ // Finish up any enqueued closure apps (attributed as object copy time). buf_scan_non_heap_roots.done(); - buf_scan_perm.done(); - - double obj_copy_time_sec = buf_scan_perm.closure_app_seconds() + - buf_scan_non_heap_roots.closure_app_seconds(); + + double obj_copy_time_sec = buf_scan_non_heap_roots.closure_app_seconds(); + g1_policy()->phase_times()->record_obj_copy_time(worker_i, obj_copy_time_sec * 1000.0); double ext_root_time_ms = @@ -5053,7 +5055,6 @@ if (scan_rs != NULL) { g1_rem_set()->oops_into_collection_set_do(scan_rs, worker_i); } - _process_strong_tasks->all_tasks_completed(); } @@ -5113,17 +5114,17 @@ class G1CopyingKeepAliveClosure: public OopClosure { G1CollectedHeap* _g1h; OopClosure* _copy_non_heap_obj_cl; - OopsInHeapRegionClosure* _copy_perm_obj_cl; + OopsInHeapRegionClosure* _copy_metadata_obj_cl; G1ParScanThreadState* _par_scan_state; public: G1CopyingKeepAliveClosure(G1CollectedHeap* g1h, OopClosure* non_heap_obj_cl, - OopsInHeapRegionClosure* perm_obj_cl, + OopsInHeapRegionClosure* metadata_obj_cl, G1ParScanThreadState* pss): _g1h(g1h), _copy_non_heap_obj_cl(non_heap_obj_cl), - _copy_perm_obj_cl(perm_obj_cl), + _copy_metadata_obj_cl(metadata_obj_cl), _par_scan_state(pss) {} @@ -5148,22 +5149,20 @@ // phase of reference processing) the object and it's followers // will be copied, the reference field set to point to the // new location, and the RSet updated. Otherwise we need to - // use the the non-heap or perm closures directly to copy + // use the the non-heap or metadata closures directly to copy // the refernt object and update the pointer, while avoiding // updating the RSet. if (_g1h->is_in_g1_reserved(p)) { _par_scan_state->push_on_queue(p); } else { - // The reference field is not in the G1 heap. - if (_g1h->perm_gen()->is_in(p)) { - _copy_perm_obj_cl->do_oop(p); - } else { + assert(!ClassLoaderDataGraph::contains((address)p), + err_msg("Otherwise need to call _copy_metadata_obj_cl->do_oop(p) " + PTR_FORMAT, p)); _copy_non_heap_obj_cl->do_oop(p); } } } - } }; // Serial drain queue closure. Called as the 'complete_gc' @@ -5258,22 +5257,22 @@ pss.set_partial_scan_closure(&partial_scan_cl); G1ParScanExtRootClosure only_copy_non_heap_cl(_g1h, &pss, NULL); - G1ParScanPermClosure only_copy_perm_cl(_g1h, &pss, NULL); + G1ParScanMetadataClosure only_copy_metadata_cl(_g1h, &pss, NULL); G1ParScanAndMarkExtRootClosure copy_mark_non_heap_cl(_g1h, &pss, NULL); - G1ParScanAndMarkPermClosure copy_mark_perm_cl(_g1h, &pss, NULL); + G1ParScanAndMarkMetadataClosure copy_mark_metadata_cl(_g1h, &pss, NULL); OopClosure* copy_non_heap_cl = &only_copy_non_heap_cl; - OopsInHeapRegionClosure* copy_perm_cl = &only_copy_perm_cl; + OopsInHeapRegionClosure* copy_metadata_cl = &only_copy_metadata_cl; if (_g1h->g1_policy()->during_initial_mark_pause()) { // We also need to mark copied objects. copy_non_heap_cl = ©_mark_non_heap_cl; - copy_perm_cl = ©_mark_perm_cl; + copy_metadata_cl = ©_mark_metadata_cl; } // Keep alive closure. - G1CopyingKeepAliveClosure keep_alive(_g1h, copy_non_heap_cl, copy_perm_cl, &pss); + G1CopyingKeepAliveClosure keep_alive(_g1h, copy_non_heap_cl, copy_metadata_cl, &pss); // Complete GC closure G1ParEvacuateFollowersClosure drain_queue(_g1h, &pss, _task_queues, _terminator); @@ -5372,18 +5371,18 @@ G1ParScanExtRootClosure only_copy_non_heap_cl(_g1h, &pss, NULL); - G1ParScanPermClosure only_copy_perm_cl(_g1h, &pss, NULL); + G1ParScanMetadataClosure only_copy_metadata_cl(_g1h, &pss, NULL); G1ParScanAndMarkExtRootClosure copy_mark_non_heap_cl(_g1h, &pss, NULL); - G1ParScanAndMarkPermClosure copy_mark_perm_cl(_g1h, &pss, NULL); + G1ParScanAndMarkMetadataClosure copy_mark_metadata_cl(_g1h, &pss, NULL); OopClosure* copy_non_heap_cl = &only_copy_non_heap_cl; - OopsInHeapRegionClosure* copy_perm_cl = &only_copy_perm_cl; + OopsInHeapRegionClosure* copy_metadata_cl = &only_copy_metadata_cl; if (_g1h->g1_policy()->during_initial_mark_pause()) { // We also need to mark copied objects. copy_non_heap_cl = ©_mark_non_heap_cl; - copy_perm_cl = ©_mark_perm_cl; + copy_metadata_cl = ©_mark_metadata_cl; } // Is alive closure @@ -5391,7 +5390,7 @@ // Copying keep alive closure. Applied to referent objects that need // to be copied. - G1CopyingKeepAliveClosure keep_alive(_g1h, copy_non_heap_cl, copy_perm_cl, &pss); + G1CopyingKeepAliveClosure keep_alive(_g1h, copy_non_heap_cl, copy_metadata_cl, &pss); ReferenceProcessor* rp = _g1h->ref_processor_cm(); @@ -5502,22 +5501,22 @@ assert(pss.refs()->is_empty(), "pre-condition"); G1ParScanExtRootClosure only_copy_non_heap_cl(this, &pss, NULL); - G1ParScanPermClosure only_copy_perm_cl(this, &pss, NULL); + G1ParScanMetadataClosure only_copy_metadata_cl(this, &pss, NULL); G1ParScanAndMarkExtRootClosure copy_mark_non_heap_cl(this, &pss, NULL); - G1ParScanAndMarkPermClosure copy_mark_perm_cl(this, &pss, NULL); + G1ParScanAndMarkMetadataClosure copy_mark_metadata_cl(this, &pss, NULL); OopClosure* copy_non_heap_cl = &only_copy_non_heap_cl; - OopsInHeapRegionClosure* copy_perm_cl = &only_copy_perm_cl; + OopsInHeapRegionClosure* copy_metadata_cl = &only_copy_metadata_cl; if (_g1h->g1_policy()->during_initial_mark_pause()) { // We also need to mark copied objects. copy_non_heap_cl = ©_mark_non_heap_cl; - copy_perm_cl = ©_mark_perm_cl; + copy_metadata_cl = ©_mark_metadata_cl; } // Keep alive closure. - G1CopyingKeepAliveClosure keep_alive(this, copy_non_heap_cl, copy_perm_cl, &pss); + G1CopyingKeepAliveClosure keep_alive(this, copy_non_heap_cl, copy_metadata_cl, &pss); // Serial Complete GC closure G1STWDrainQueueClosure drain_queue(this, &pss); @@ -6241,7 +6240,7 @@ bool G1CollectedHeap::is_in_closed_subset(const void* p) const { HeapRegion* hr = heap_region_containing(p); if (hr == NULL) { - return is_in_permanent(p); + return false; } else { return hr->is_in(p); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp --- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -45,9 +45,9 @@ class HeapRegion; class HRRSCleanupTask; -class PermanentGenerationSpec; class GenerationSpec; class OopsInHeapRegionClosure; +class G1KlassScanClosure; class G1ScanHeapEvacClosure; class ObjectClosure; class SpaceClosure; @@ -190,7 +190,6 @@ class G1CollectedHeap : public SharedHeap { friend class VM_G1CollectForAllocation; - friend class VM_GenCollectForPermanentAllocation; friend class VM_G1CollectFull; friend class VM_G1IncCollectionPause; friend class VMStructs; @@ -225,7 +224,7 @@ static size_t _humongous_object_threshold_in_words; - // Storage for the G1 heap (excludes the permanent generation). + // Storage for the G1 heap. VirtualSpace _g1_storage; MemRegion _g1_reserved; @@ -630,7 +629,7 @@ // Callback from VM_G1CollectFull operation. // Perform a full collection. - void do_full_collection(bool clear_all_soft_refs); + virtual void do_full_collection(bool clear_all_soft_refs); // Resize the heap if necessary after a full collection. If this is // after a collect-for allocation, "word_size" is the allocation size, @@ -805,17 +804,17 @@ // Applies "scan_non_heap_roots" to roots outside the heap, // "scan_rs" to roots inside the heap (having done "set_region" to - // indicate the region in which the root resides), and does "scan_perm" - // (setting the generation to the perm generation.) If "scan_rs" is + // indicate the region in which the root resides), + // and does "scan_metadata" If "scan_rs" is // NULL, then this step is skipped. The "worker_i" // param is for use with parallel roots processing, and should be // the "i" of the calling parallel worker thread's work(i) function. // In the sequential case this param will be ignored. - void g1_process_strong_roots(bool collecting_perm_gen, + void g1_process_strong_roots(bool is_scavenging, ScanningOption so, OopClosure* scan_non_heap_roots, OopsInHeapRegionClosure* scan_rs, - OopsInGenClosure* scan_perm, + G1KlassScanClosure* scan_klasses, int worker_i); // Apply "blk" to all the weak roots of the system. These include @@ -1071,7 +1070,7 @@ G1CollectedHeap(G1CollectorPolicy* policy); // Initialize the G1CollectedHeap to have the initial and - // maximum sizes, permanent generation, and remembered and barrier sets + // maximum sizes and remembered and barrier sets // specified by the policy object. jint initialize(); @@ -1100,6 +1099,8 @@ // The current policy object for the collector. G1CollectorPolicy* g1_policy() const { return _g1_policy; } + virtual CollectorPolicy* collector_policy() const { return (CollectorPolicy*) g1_policy(); } + // Adaptive size policy. No such thing for g1. virtual AdaptiveSizePolicy* size_policy() { return NULL; } @@ -1278,12 +1279,6 @@ // The same as above but assume that the caller holds the Heap_lock. void collect_locked(GCCause::Cause cause); - // This interface assumes that it's being called by the - // vm thread. It collects the heap assuming that the - // heap lock is already held and that we are executing in - // the context of the vm thread. - virtual void collect_as_vm_thread(GCCause::Cause cause); - // True iff a evacuation has failed in the most-recent collection. bool evacuation_failed() { return _evacuation_failed; } @@ -1317,7 +1312,7 @@ inline bool obj_in_cs(oop obj); // Return "TRUE" iff the given object address is in the reserved - // region of g1 (excluding the permanent generation). + // region of g1. bool is_in_g1_reserved(const void* p) const { return _g1_reserved.contains(p); } @@ -1344,25 +1339,17 @@ // Iterate over all the ref-containing fields of all objects, calling // "cl.do_oop" on each. - virtual void oop_iterate(OopClosure* cl) { - oop_iterate(cl, true); - } - void oop_iterate(OopClosure* cl, bool do_perm); + virtual void oop_iterate(ExtendedOopClosure* cl); // Same as above, restricted to a memory region. - virtual void oop_iterate(MemRegion mr, OopClosure* cl) { - oop_iterate(mr, cl, true); - } - void oop_iterate(MemRegion mr, OopClosure* cl, bool do_perm); + void oop_iterate(MemRegion mr, ExtendedOopClosure* cl); // Iterate over all objects, calling "cl.do_object" on each. - virtual void object_iterate(ObjectClosure* cl) { - object_iterate(cl, true); - } + virtual void object_iterate(ObjectClosure* cl); + virtual void safe_object_iterate(ObjectClosure* cl) { - object_iterate(cl, true); + object_iterate(cl); } - void object_iterate(ObjectClosure* cl, bool do_perm); // Iterate over all objects allocated since the last collection, calling // "cl.do_object" on each. The heap must have been initialized properly @@ -1524,15 +1511,6 @@ return is_in_young(new_obj); } - // Can a compiler elide a store barrier when it writes - // a permanent oop into the heap? Applies when the compiler - // is storing x to the heap, where x->is_perm() is true. - virtual bool can_elide_permanent_oop_store_barriers() const { - // At least until perm gen collection is also G1-ified, at - // which point this should return false. - return true; - } - // Returns "true" iff the given word_size is "very large". static bool isHumongous(size_t word_size) { // Note this has to be strictly greater-than as the TLABs @@ -1657,15 +1635,12 @@ // This will find the region to which the object belongs and // then call the region version of the same function. - // Added if it is in permanent gen it isn't dead. // Added if it is NULL it isn't dead. bool is_obj_dead(const oop obj) const { const HeapRegion* hr = heap_region_containing(obj); if (hr == NULL) { - if (Universe::heap()->is_in_permanent(obj)) - return false; - else if (obj == NULL) return false; + if (obj == NULL) return false; else return true; } else return is_obj_dead(obj, hr); @@ -1674,9 +1649,7 @@ bool is_obj_ill(const oop obj) const { const HeapRegion* hr = heap_region_containing(obj); if (hr == NULL) { - if (Universe::heap()->is_in_permanent(obj)) - return false; - else if (obj == NULL) return false; + if (obj == NULL) return false; else return true; } else return is_obj_ill(obj, hr); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp --- a/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -170,7 +170,6 @@ void initialize_all() { initialize_flags(); initialize_size_info(); - initialize_perm_generation(PermGen::MarkSweepCompact); } CollectionSetChooser* _collectionSetChooser; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/g1MarkSweep.cpp --- a/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -68,15 +68,11 @@ GenMarkSweep::_ref_processor = rp; rp->setup_policy(clear_all_softrefs); - // When collecting the permanent generation methodOops may be moving, + // When collecting the permanent generation Method*s may be moving, // so we either have to flush all bcp data or convert it into bci. CodeCache::gc_prologue(); Threads::gc_prologue(); - // Increment the invocation count for the permanent generation, since it is - // implicitly collected whenever we do a full mark sweep collection. - sh->perm_gen()->stat_record()->invocations++; - bool marked_for_unloading = false; allocate_stacks(); @@ -100,10 +96,6 @@ BiasedLocking::restore_marks(); GenMarkSweep::deallocate_stacks(); - // We must invalidate the perm-gen rs, so that it gets rebuilt. - GenRemSet* rs = sh->rem_set(); - rs->invalidate(sh->perm_gen()->used_region(), true /*whole_heap*/); - // "free at last gc" is calculated from these. // CHF: cheating for now!!! // Universe::set_heap_capacity_at_last_gc(Universe::heap()->capacity()); @@ -132,12 +124,15 @@ SharedHeap* sh = SharedHeap::heap(); - sh->process_strong_roots(true, // activeate StrongRootsScope - true, // Collecting permanent generation. + // Need cleared claim bits for the strong roots processing + ClassLoaderDataGraph::clear_claimed_marks(); + + sh->process_strong_roots(true, // activate StrongRootsScope + false, // not scavenging. SharedHeap::SO_SystemClasses, &GenMarkSweep::follow_root_closure, &GenMarkSweep::follow_code_root_closure, - &GenMarkSweep::follow_root_closure); + &GenMarkSweep::follow_klass_closure); // Process reference objects found during marking ReferenceProcessor* rp = GenMarkSweep::ref_processor(); @@ -162,14 +157,10 @@ GenMarkSweep::follow_stack(); // Update subklass/sibling/implementor links of live klasses - GenMarkSweep::follow_weak_klass_links(); + Klass::clean_weak_klass_links(&GenMarkSweep::is_alive); assert(GenMarkSweep::_marking_stack.is_empty(), "stack should be empty by now"); - // Visit memoized MDO's and clear any unmarked weak refs - GenMarkSweep::follow_mdo_weak_refs(); - assert(GenMarkSweep::_marking_stack.is_empty(), "just drained"); - // Visit interned string tables and delete unmarked oops StringTable::unlink(&GenMarkSweep::is_alive); // Clean up unreferenced symbols in symbol table. @@ -265,19 +256,11 @@ void G1MarkSweep::mark_sweep_phase2() { // Now all live objects are marked, compute the new object addresses. - // It is imperative that we traverse perm_gen LAST. If dead space is - // allowed a range of dead object may get overwritten by a dead int - // array. If perm_gen is not traversed last a klassOop may get - // overwritten. This is fine since it is dead, but if the class has dead - // instances we have to skip them, and in order to find their size we - // need the klassOop! - // // It is not required that we traverse spaces in the same order in // phase2, phase3 and phase4, but the ValidateMarkSweep live oops // tracking expects us to do so. See comment under phase4. G1CollectedHeap* g1h = G1CollectedHeap::heap(); - Generation* pg = g1h->perm_gen(); TraceTime tm("phase 2", G1Log::fine() && Verbose, true, gclog_or_tty); GenMarkSweep::trace("2"); @@ -292,9 +275,6 @@ G1PrepareCompactClosure blk(sp); g1h->heap_region_iterate(&blk); blk.update_sets(); - - CompactPoint perm_cp(pg, NULL, NULL); - pg->prepare_for_compaction(&perm_cp); } class G1AdjustPointersClosure: public HeapRegionClosure { @@ -319,7 +299,6 @@ void G1MarkSweep::mark_sweep_phase3() { G1CollectedHeap* g1h = G1CollectedHeap::heap(); - Generation* pg = g1h->perm_gen(); // Adjust the pointers to reflect the new locations TraceTime tm("phase 3", G1Log::fine() && Verbose, true, gclog_or_tty); @@ -327,12 +306,15 @@ SharedHeap* sh = SharedHeap::heap(); + // Need cleared claim bits for the strong roots processing + ClassLoaderDataGraph::clear_claimed_marks(); + sh->process_strong_roots(true, // activate StrongRootsScope - true, // Collecting permanent generation. + false, // not scavenging. SharedHeap::SO_AllClasses, &GenMarkSweep::adjust_root_pointer_closure, NULL, // do not touch code cache here - &GenMarkSweep::adjust_pointer_closure); + &GenMarkSweep::adjust_klass_closure); assert(GenMarkSweep::ref_processor() == g1h->ref_processor_stw(), "Sanity"); g1h->ref_processor_stw()->weak_oops_do(&GenMarkSweep::adjust_root_pointer_closure); @@ -346,7 +328,6 @@ G1AdjustPointersClosure blk; g1h->heap_region_iterate(&blk); - pg->adjust_pointers(); } class G1SpaceCompactClosure: public HeapRegionClosure { @@ -374,23 +355,15 @@ void G1MarkSweep::mark_sweep_phase4() { // All pointers are now adjusted, move objects accordingly - // It is imperative that we traverse perm_gen first in phase4. All - // classes must be allocated earlier than their instances, and traversing - // perm_gen first makes sure that all klassOops have moved to their new - // location before any instance does a dispatch through it's klass! - // The ValidateMarkSweep live oops tracking expects us to traverse spaces // in the same order in phase2, phase3 and phase4. We don't quite do that - // here (perm_gen first rather than last), so we tell the validate code + // here (code and comment not fixed for perm removal), so we tell the validate code // to use a higher index (saved from phase2) when verifying perm_gen. G1CollectedHeap* g1h = G1CollectedHeap::heap(); - Generation* pg = g1h->perm_gen(); TraceTime tm("phase 4", G1Log::fine() && Verbose, true, gclog_or_tty); GenMarkSweep::trace("4"); - pg->compact(); - G1SpaceCompactClosure blk; g1h->heap_region_iterate(&blk); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp --- a/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -261,6 +261,7 @@ old_space_counters()->update_used(old_space_used()); old_collection_counters()->update_all(); young_collection_counters()->update_all(); + MetaspaceCounters::update_performance_counters(); } } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/g1OopClosures.hpp --- a/src/share/vm/gc_implementation/g1/g1OopClosures.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/g1OopClosures.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -118,8 +118,21 @@ virtual void do_oop(narrowOop* p) { do_oop_nv(p); } }; +// Add back base class for metadata +class G1ParCopyHelper : public G1ParClosureSuper { + Klass* _scanned_klass; + + public: + G1ParCopyHelper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state) : + _scanned_klass(NULL), + G1ParClosureSuper(g1, par_scan_state) {} + + void set_scanned_klass(Klass* k) { _scanned_klass = k; } + template void do_klass_barrier(T* p, oop new_obj); +}; + template -class G1ParCopyClosure : public G1ParClosureSuper { +class G1ParCopyClosure : public G1ParCopyHelper { G1ParScanClosure _scanner; template void do_oop_work(T* p); @@ -140,7 +153,7 @@ G1ParCopyClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state, ReferenceProcessor* rp) : _scanner(g1, par_scan_state, rp), - G1ParClosureSuper(g1, par_scan_state) { + G1ParCopyHelper(g1, par_scan_state) { assert(_ref_processor == NULL, "sanity"); } @@ -154,10 +167,12 @@ }; typedef G1ParCopyClosure G1ParScanExtRootClosure; -typedef G1ParCopyClosure G1ParScanPermClosure; +typedef G1ParCopyClosure G1ParScanMetadataClosure; + typedef G1ParCopyClosure G1ParScanAndMarkExtRootClosure; -typedef G1ParCopyClosure G1ParScanAndMarkPermClosure; +typedef G1ParCopyClosure G1ParScanAndMarkClosure; +typedef G1ParCopyClosure G1ParScanAndMarkMetadataClosure; // The following closure types are no longer used but are retained // for historical reasons: @@ -176,7 +191,7 @@ typedef G1ParCopyClosure G1ParScanHeapEvacFailureClosure; -class FilterIntoCSClosure: public OopClosure { +class FilterIntoCSClosure: public ExtendedOopClosure { G1CollectedHeap* _g1; OopClosure* _oc; DirtyCardToOopClosure* _dcto_cl; @@ -190,10 +205,9 @@ virtual void do_oop(oop* p) { do_oop_nv(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } bool apply_to_weak_ref_discovered_field() { return true; } - bool do_header() { return false; } }; -class FilterOutOfRegionClosure: public OopClosure { +class FilterOutOfRegionClosure: public ExtendedOopClosure { HeapWord* _r_bottom; HeapWord* _r_end; OopClosure* _oc; @@ -203,11 +217,10 @@ virtual void do_oop(oop* p) { do_oop_nv(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } bool apply_to_weak_ref_discovered_field() { return true; } - bool do_header() { return false; } }; // Closure for iterating over object fields during concurrent marking -class G1CMOopClosure : public OopClosure { +class G1CMOopClosure : public ExtendedOopClosure { private: G1CollectedHeap* _g1h; ConcurrentMark* _cm; @@ -220,7 +233,7 @@ }; // Closure to scan the root regions during concurrent marking -class G1RootRegionScanClosure : public OopClosure { +class G1RootRegionScanClosure : public ExtendedOopClosure { private: G1CollectedHeap* _g1h; ConcurrentMark* _cm; @@ -239,7 +252,7 @@ // during an evacuation pause) to record cards containing // pointers into the collection set. -class G1Mux2Closure : public OopClosure { +class G1Mux2Closure : public ExtendedOopClosure { OopClosure* _c1; OopClosure* _c2; public: @@ -252,7 +265,7 @@ // A closure that returns true if it is actually applied // to a reference -class G1TriggerClosure : public OopClosure { +class G1TriggerClosure : public ExtendedOopClosure { bool _triggered; public: G1TriggerClosure(); @@ -265,7 +278,7 @@ // A closure which uses a triggering closure to determine // whether to apply an oop closure. -class G1InvokeIfNotTriggeredClosure: public OopClosure { +class G1InvokeIfNotTriggeredClosure: public ExtendedOopClosure { G1TriggerClosure* _trigger_cl; OopClosure* _oop_cl; public: @@ -275,7 +288,7 @@ virtual void do_oop(narrowOop* p) { do_oop_nv(p); } }; -class G1UpdateRSOrPushRefOopClosure: public OopClosure { +class G1UpdateRSOrPushRefOopClosure: public ExtendedOopClosure { G1CollectedHeap* _g1; G1RemSet* _g1_rem_set; HeapRegion* _from; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/g1RemSet.cpp --- a/src/share/vm/gc_implementation/g1/g1RemSet.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/g1RemSet.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -380,7 +380,10 @@ assert(r != NULL, "unexpected null"); // Scan oops in the card looking for references into the collection set - HeapWord* end = _ct_bs->addr_for(card_ptr + 1); + // Don't use addr_for(card_ptr + 1) which can ask for + // a card beyond the heap. This is not safe without a perm + // gen. + HeapWord* end = start + CardTableModRefBS::card_size_in_words; MemRegion scanRegion(start, end); UpdateRSetImmediate update_rs_cl(_g1->g1_rem_set()); @@ -530,7 +533,10 @@ HeapRegion* r = _g1->heap_region_containing(start); assert(r != NULL, "unexpected null"); - HeapWord* end = _ct_bs->addr_for(card_ptr + 1); + // Don't use addr_for(card_ptr + 1) which can ask for + // a card beyond the heap. This is not safe without a perm + // gen at the upper end of the heap. + HeapWord* end = start + CardTableModRefBS::card_size_in_words; MemRegion dirtyRegion(start, end); #if CARD_REPEAT_HISTO @@ -622,7 +628,6 @@ // And find the region containing it. HeapRegion* r = _g1->heap_region_containing(start); if (r == NULL) { - guarantee(_g1->is_in_permanent(start), "Or else where?"); // Again no need to return that this card contains refs that // point into the collection set. return false; // Not in the G1 heap (might be in perm, for example.) @@ -706,9 +711,7 @@ if (res != NULL && (res != card_ptr || defer)) { start = _ct_bs->addr_for(res); r = _g1->heap_region_containing(start); - if (r == NULL) { - assert(_g1->is_in_permanent(start), "Or else where?"); - } else { + if (r != NULL) { // Checking whether the region we got back from the cache // is young here is inappropriate. The region could have been // freed, reallocated and tagged as young while in the cache. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/g1RemSet.hpp --- a/src/share/vm/gc_implementation/g1/g1RemSet.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/g1RemSet.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -153,7 +153,7 @@ HeapWord* start_first() { return _start_first; } }; -class UpdateRSOopClosure: public OopClosure { +class UpdateRSOopClosure: public ExtendedOopClosure { HeapRegion* _from; G1RemSet* _rs; int _worker_i; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp --- a/src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -34,7 +34,8 @@ enum G1Barrier { G1BarrierNone, G1BarrierRS, - G1BarrierEvac + G1BarrierEvac, + G1BarrierKlass }; template diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/heapRegion.cpp --- a/src/share/vm/gc_implementation/g1/heapRegion.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/heapRegion.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -40,7 +40,7 @@ size_t HeapRegion::CardsPerRegion = 0; HeapRegionDCTOC::HeapRegionDCTOC(G1CollectedHeap* g1, - HeapRegion* hr, OopClosure* cl, + HeapRegion* hr, ExtendedOopClosure* cl, CardTableModRefBS::PrecisionStyle precision, FilterKind fk) : ContiguousSpaceDCTOC(hr, cl, precision, NULL), @@ -83,8 +83,8 @@ void print_object(outputStream* out, oop obj) { #ifdef PRODUCT - klassOop k = obj->klass(); - const char* class_name = instanceKlass::cast(k)->external_name(); + Klass* k = obj->klass(); + const char* class_name = InstanceKlass::cast(k)->external_name(); out->print_cr("class name %s", class_name); #else // PRODUCT obj->print_on(out); @@ -213,10 +213,10 @@ void HeapRegionDCTOC::walk_mem_region_with_cl(MemRegion mr, HeapWord* bottom, HeapWord* top, - OopClosure* cl) { + ExtendedOopClosure* cl) { G1CollectedHeap* g1h = _g1; int oop_size; - OopClosure* cl2 = NULL; + ExtendedOopClosure* cl2 = NULL; FilterIntoCSClosure intoCSFilt(this, g1h, cl); FilterOutOfRegionClosure outOfRegionFilt(_hr, cl); @@ -535,7 +535,7 @@ set_saved_mark(); } -void HeapRegion::oops_in_mr_iterate(MemRegion mr, OopClosure* cl) { +void HeapRegion::oops_in_mr_iterate(MemRegion mr, ExtendedOopClosure* cl) { HeapWord* p = mr.start(); HeapWord* e = mr.end(); oop obj; @@ -553,7 +553,7 @@ SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(HeapRegion_OOP_SINCE_SAVE_MARKS_DEFN) -void HeapRegion::oop_before_save_marks_iterate(OopClosure* cl) { +void HeapRegion::oop_before_save_marks_iterate(ExtendedOopClosure* cl) { oops_in_mr_iterate(MemRegion(bottom(), saved_mark_word()), cl); } @@ -801,10 +801,10 @@ if (!g1->is_obj_dead_cond(obj, this, vo)) { if (obj->is_oop()) { - klassOop klass = obj->klass(); - if (!klass->is_perm()) { + Klass* klass = obj->klass(); + if (!klass->is_metadata()) { gclog_or_tty->print_cr("klass "PTR_FORMAT" of object "PTR_FORMAT" " - "not in perm", klass, obj); + "not metadata", klass, obj); *failures = true; return; } else if (!klass->is_klass()) { @@ -814,7 +814,7 @@ return; } else { vl_cl.set_containing_obj(obj); - obj->oop_iterate(&vl_cl); + obj->oop_iterate_no_header(&vl_cl); if (vl_cl.failures()) { *failures = true; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/heapRegion.hpp --- a/src/share/vm/gc_implementation/g1/heapRegion.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/heapRegion.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -85,7 +85,7 @@ void walk_mem_region_with_cl(MemRegion mr, HeapWord* bottom, HeapWord* top, - OopClosure* cl); + ExtendedOopClosure* cl); // We don't specialize this for FilteringClosure; filtering is handled by // the "FilterKind" mechanism. But we provide this to avoid a compiler @@ -94,7 +94,7 @@ HeapWord* bottom, HeapWord* top, FilteringClosure* cl) { HeapRegionDCTOC::walk_mem_region_with_cl(mr, bottom, top, - (OopClosure*)cl); + (ExtendedOopClosure*)cl); } // Get the actual top of the area on which the closure will @@ -119,7 +119,7 @@ public: HeapRegionDCTOC(G1CollectedHeap* g1, - HeapRegion* hr, OopClosure* cl, + HeapRegion* hr, ExtendedOopClosure* cl, CardTableModRefBS::PrecisionStyle precision, FilterKind fk); }; @@ -231,7 +231,7 @@ // Requires that the region "mr" be dense with objects, and begin and end // with an object. - void oops_in_mr_iterate(MemRegion mr, OopClosure* cl); + void oops_in_mr_iterate(MemRegion mr, ExtendedOopClosure* cl); // The remembered set for this region. // (Might want to make this "inline" later, to avoid some alloc failure @@ -606,7 +606,7 @@ // Apply "cl->do_oop" to (the addresses of) all reference fields in objects // allocated in the current region before the last call to "save_mark". - void oop_before_save_marks_iterate(OopClosure* cl); + void oop_before_save_marks_iterate(ExtendedOopClosure* cl); // Note the start or end of marking. This tells the heap region // that the collector is about to start or has finished (concurrently) diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/g1/satbQueue.cpp --- a/src/share/vm/gc_implementation/g1/satbQueue.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/g1/satbQueue.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -27,6 +27,7 @@ #include "gc_implementation/g1/satbQueue.hpp" #include "memory/allocation.inline.hpp" #include "memory/sharedHeap.hpp" +#include "oops/oop.inline.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/thread.hpp" #include "runtime/vmThread.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parNew/parNewGeneration.cpp --- a/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -478,7 +478,7 @@ ParScanClosure::ParScanClosure(ParNewGeneration* g, ParScanThreadState* par_scan_state) : - OopsInGenClosure(g), _par_scan_state(par_scan_state), _g(g) + OopsInKlassOrGenClosure(g), _par_scan_state(par_scan_state), _g(g) { assert(_g->level() == 0, "Optimized for youngest generation"); _boundary = _g->reserved().end(); @@ -607,16 +607,22 @@ par_scan_state.set_young_old_boundary(_young_old_boundary); + KlassScanClosure klass_scan_closure(&par_scan_state.to_space_root_closure(), + gch->rem_set()->klass_rem_set()); + + int so = SharedHeap::SO_AllClasses | SharedHeap::SO_Strings | SharedHeap::SO_CodeCache; + par_scan_state.start_strong_roots(); gch->gen_process_strong_roots(_gen->level(), true, // Process younger gens, if any, // as strong roots. false, // no scope; this is parallel code - false, // not collecting perm generation. - SharedHeap::SO_AllClasses, + true, // is scavenging + SharedHeap::ScanningOption(so), &par_scan_state.to_space_root_closure(), true, // walk *all* scavengable nmethods - &par_scan_state.older_gen_closure()); + &par_scan_state.older_gen_closure(), + &klass_scan_closure); par_scan_state.end_strong_roots(); // "evacuate followers". @@ -1191,6 +1197,16 @@ } assert(new_obj != NULL, "just checking"); +#ifndef PRODUCT + // This code must come after the CAS test, or it will print incorrect + // information. + if (TraceScavenge) { + gclog_or_tty->print_cr("{%s %s " PTR_FORMAT " -> " PTR_FORMAT " (%d)}", + is_in_reserved(new_obj) ? "copying" : "tenuring", + new_obj->klass()->internal_name(), old, new_obj, new_obj->size()); + } +#endif + if (forward_ptr == NULL) { oop obj_to_push = new_obj; if (par_scan_state->should_be_partially_scanned(obj_to_push, old)) { @@ -1303,6 +1319,16 @@ } assert(new_obj != NULL, "just checking"); +#ifndef PRODUCT + // This code must come after the CAS test, or it will print incorrect + // information. + if (TraceScavenge) { + gclog_or_tty->print_cr("{%s %s " PTR_FORMAT " -> " PTR_FORMAT " (%d)}", + is_in_reserved(new_obj) ? "copying" : "tenuring", + new_obj->klass()->internal_name(), old, new_obj, new_obj->size()); + } +#endif + // Now attempt to install the forwarding pointer (atomically). // We have to copy the mark word before overwriting with forwarding // ptr, so we can restore it below in the copy. @@ -1494,7 +1520,7 @@ size_t i = 1; oop cur = prefix; while (i < objsFromOverflow && cur->klass_or_null() != NULL) { - i++; cur = oop(cur->klass()); + i++; cur = cur->list_ptr_from_klass(); } // Reattach remaining (suffix) to overflow list @@ -1505,8 +1531,8 @@ (void) Atomic::cmpxchg_ptr(NULL, &_overflow_list, BUSY); } } else { - assert(cur->klass_or_null() != BUSY, "Error"); - oop suffix = oop(cur->klass()); // suffix will be put back on global list + assert(cur->klass_or_null() != (Klass*)(address)BUSY, "Error"); + oop suffix = cur->list_ptr_from_klass(); // suffix will be put back on global list cur->set_klass_to_list_ptr(NULL); // break off suffix // It's possible that the list is still in the empty(busy) state // we left it in a short while ago; in that case we may be @@ -1527,7 +1553,7 @@ // Find the last item of suffix list oop last = suffix; while (last->klass_or_null() != NULL) { - last = oop(last->klass()); + last = last->list_ptr_from_klass(); } // Atomically prepend suffix to current overflow list observed_overflow_list = _overflow_list; @@ -1551,7 +1577,7 @@ ssize_t n = 0; while (cur != NULL) { oop obj_to_push = cur->forwardee(); - oop next = oop(cur->klass_or_null()); + oop next = cur->list_ptr_from_klass(); cur->set_klass(obj_to_push->klass()); // This may be an array object that is self-forwarded. In that case, the list pointer // space, cur, is not in the Java heap, but rather in the C-heap and should be freed. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parNew/parOopClosures.hpp --- a/src/share/vm/gc_implementation/parNew/parOopClosures.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parNew/parOopClosures.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ typedef GenericTaskQueueSet ObjToScanQueueSet; class ParallelTaskTerminator; -class ParScanClosure: public OopsInGenClosure { +class ParScanClosure: public OopsInKlassOrGenClosure { protected: ParScanThreadState* _par_scan_state; ParNewGeneration* _g; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parNew/parOopClosures.inline.hpp --- a/src/share/vm/gc_implementation/parNew/parOopClosures.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parNew/parOopClosures.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,13 +37,13 @@ if ((HeapWord*)obj < _boundary && !_g->to()->is_in_reserved(obj)) { // we need to ensure that it is copied (see comment in // ParScanClosure::do_oop_work). - klassOop objK = obj->klass(); + Klass* objK = obj->klass(); markOop m = obj->mark(); oop new_obj; if (m->is_marked()) { // Contains forwarding pointer. new_obj = ParNewGeneration::real_forwardee(obj); } else { - size_t obj_sz = obj->size_given_klass(objK->klass_part()); + size_t obj_sz = obj->size_given_klass(objK); new_obj = ((ParNewGeneration*)_g)->copy_to_survivor_space(_par_scan_state, obj, obj_sz, m); } @@ -100,14 +100,22 @@ // forwarding pointer, then the klass is valid: the klass is only // overwritten with an overflow next pointer after the object is // forwarded. - klassOop objK = obj->klass(); + Klass* objK = obj->klass(); markOop m = obj->mark(); oop new_obj; if (m->is_marked()) { // Contains forwarding pointer. new_obj = ParNewGeneration::real_forwardee(obj); oopDesc::encode_store_heap_oop_not_null(p, new_obj); +#ifndef PRODUCT + if (TraceScavenge) { + gclog_or_tty->print_cr("{%s %s ( " PTR_FORMAT " ) " PTR_FORMAT " -> " PTR_FORMAT " (%d)}", + "forwarded ", + new_obj->klass()->internal_name(), p, obj, new_obj, new_obj->size()); + } +#endif + } else { - size_t obj_sz = obj->size_given_klass(objK->klass_part()); + size_t obj_sz = obj->size_given_klass(objK); new_obj = _g->copy_to_survivor_space(_par_scan_state, obj, obj_sz, m); oopDesc::encode_store_heap_oop_not_null(p, new_obj); if (root_scan) { @@ -117,7 +125,9 @@ (void)_par_scan_state->trim_queues(10 * ParallelGCThreads); } } - if (gc_barrier) { + if (is_scanning_a_klass()) { + do_klass_barrier(); + } else if (gc_barrier) { // Now call parent closure par_do_barrier(p); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,6 @@ #include "gc_implementation/parallelScavenge/adjoiningGenerations.hpp" #include "gc_implementation/parallelScavenge/adjoiningVirtualSpaces.hpp" #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psPermGen.hpp" // If boundary moving is being used, create the young gen and old // gen with ASPSYoungGen and ASPSOldGen, respectively. Revert to diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/adjoiningGenerations.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,6 @@ #include "gc_implementation/parallelScavenge/adjoiningVirtualSpaces.hpp" #include "gc_implementation/parallelScavenge/asPSOldGen.hpp" #include "gc_implementation/parallelScavenge/asPSYoungGen.hpp" -#include "gc_implementation/parallelScavenge/psPermGen.hpp" // Contains two generations that both use an AdjoiningVirtualSpaces. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -89,7 +89,7 @@ // fail unless the object head is also unmarked. virtual void do_object(oop obj) { CheckForUnmarkedOops object_check(_young_gen, _card_table); - obj->oop_iterate(&object_check); + obj->oop_iterate_no_header(&object_check); if (object_check.has_unmarked_oop()) { assert(_card_table->addr_is_marked_imprecise(obj), "Found unmarked young_gen object"); } @@ -229,8 +229,9 @@ int dirty_card_count = 0; oop* sp_top = (oop*)space_top; + oop* sp_last = sp->bottom() == space_top ? sp_top : sp_top - 1; jbyte* start_card = byte_for(sp->bottom()); - jbyte* end_card = byte_for(sp_top - 1) + 1; + jbyte* end_card = byte_for(sp_last) + 1; oop* last_scanned = NULL; // Prevent scanning objects more than once // The width of the stripe ssize*stripe_total must be // consistent with the number of stripes so that the complete slice @@ -406,10 +407,8 @@ assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); PSOldGen* old_gen = heap->old_gen(); - PSPermGen* perm_gen = heap->perm_gen(); old_gen->object_iterate(&check); - perm_gen->object_iterate(&check); } // This should be called immediately after a scavenge, before mutators resume. @@ -418,15 +417,12 @@ assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); PSOldGen* old_gen = heap->old_gen(); - PSPermGen* perm_gen = heap->perm_gen(); CheckForPreciseMarks check(heap->young_gen(), (CardTableExtension*)heap->barrier_set()); - old_gen->oop_iterate(&check); - perm_gen->oop_iterate(&check); + old_gen->oop_iterate_no_header(&check); verify_all_young_refs_precise_helper(old_gen->object_space()->used_region()); - verify_all_young_refs_precise_helper(perm_gen->object_space()->used_region()); } void CardTableExtension::verify_all_young_refs_precise_helper(MemRegion mr) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/generationSizer.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/generationSizer.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/generationSizer.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,8 +69,8 @@ size_t old_gen_size() { return _initial_gen1_size; } size_t max_old_gen_size() { return _max_gen1_size; } - size_t perm_gen_size() { return PermSize; } - size_t max_perm_gen_size() { return MaxPermSize; } + size_t metaspace_size() { return MetaspaceSize; } + size_t max_metaspace_size() { return MaxMetaspaceSize; } }; #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_GENERATIONSIZER_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/objectStartArray.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -140,8 +140,10 @@ } } // No object starts in this slice; verify this using - // more traditional methods: - assert(object_start(end_addr - 1) <= start_addr, + // more traditional methods: Note that no object can + // start before the start_addr. + assert(end_addr == start_addr || + object_start(end_addr - 1) <= start_addr, "Oops an object does start in this slice?"); return false; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -45,26 +45,23 @@ PSYoungGen* ParallelScavengeHeap::_young_gen = NULL; PSOldGen* ParallelScavengeHeap::_old_gen = NULL; -PSPermGen* ParallelScavengeHeap::_perm_gen = NULL; PSAdaptiveSizePolicy* ParallelScavengeHeap::_size_policy = NULL; PSGCAdaptivePolicyCounters* ParallelScavengeHeap::_gc_policy_counters = NULL; ParallelScavengeHeap* ParallelScavengeHeap::_psh = NULL; GCTaskManager* ParallelScavengeHeap::_gc_task_manager = NULL; static void trace_gen_sizes(const char* const str, - size_t pg_min, size_t pg_max, size_t og_min, size_t og_max, size_t yg_min, size_t yg_max) { if (TracePageSizes) { tty->print_cr("%s: " SIZE_FORMAT "," SIZE_FORMAT " " SIZE_FORMAT "," SIZE_FORMAT " " - SIZE_FORMAT "," SIZE_FORMAT " " SIZE_FORMAT, - str, pg_min / K, pg_max / K, + str, og_min / K, og_max / K, yg_min / K, yg_max / K, - (pg_max + og_max + yg_max) / K); + (og_max + yg_max) / K); } } @@ -79,25 +76,15 @@ size_t yg_max_size = _collector_policy->max_young_gen_size(); size_t og_min_size = _collector_policy->min_old_gen_size(); size_t og_max_size = _collector_policy->max_old_gen_size(); - // Why isn't there a min_perm_gen_size()? - size_t pg_min_size = _collector_policy->perm_gen_size(); - size_t pg_max_size = _collector_policy->max_perm_gen_size(); trace_gen_sizes("ps heap raw", - pg_min_size, pg_max_size, og_min_size, og_max_size, yg_min_size, yg_max_size); - // The ReservedSpace ctor used below requires that the page size for the perm - // gen is <= the page size for the rest of the heap (young + old gens). const size_t og_page_sz = os::page_size_for_region(yg_min_size + og_min_size, yg_max_size + og_max_size, 8); - const size_t pg_page_sz = MIN2(os::page_size_for_region(pg_min_size, - pg_max_size, 16), - og_page_sz); - const size_t pg_align = set_alignment(_perm_gen_alignment, pg_page_sz); const size_t og_align = set_alignment(_old_gen_alignment, og_page_sz); const size_t yg_align = set_alignment(_young_gen_alignment, og_page_sz); @@ -121,55 +108,20 @@ align_size_down(_collector_policy->old_gen_size(), og_align); og_cur_size = MAX2(og_cur_size, og_min_size); - pg_min_size = align_size_up(pg_min_size, pg_align); - pg_max_size = align_size_up(pg_max_size, pg_align); - size_t pg_cur_size = pg_min_size; - trace_gen_sizes("ps heap rnd", - pg_min_size, pg_max_size, og_min_size, og_max_size, yg_min_size, yg_max_size); - const size_t total_reserved = pg_max_size + og_max_size + yg_max_size; - char* addr = Universe::preferred_heap_base(total_reserved, Universe::UnscaledNarrowOop); - - // The main part of the heap (old gen + young gen) can often use a larger page - // size than is needed or wanted for the perm gen. Use the "compound - // alignment" ReservedSpace ctor to avoid having to use the same page size for - // all gens. - - ReservedHeapSpace heap_rs(pg_max_size, pg_align, og_max_size + yg_max_size, - og_align, addr); + const size_t heap_size = og_max_size + yg_max_size; - if (UseCompressedOops) { - if (addr != NULL && !heap_rs.is_reserved()) { - // Failed to reserve at specified address - the requested memory - // region is taken already, for example, by 'java' launcher. - // Try again to reserver heap higher. - addr = Universe::preferred_heap_base(total_reserved, Universe::ZeroBasedNarrowOop); - ReservedHeapSpace heap_rs0(pg_max_size, pg_align, og_max_size + yg_max_size, - og_align, addr); - if (addr != NULL && !heap_rs0.is_reserved()) { - // Failed to reserve at specified address again - give up. - addr = Universe::preferred_heap_base(total_reserved, Universe::HeapBasedNarrowOop); - assert(addr == NULL, ""); - ReservedHeapSpace heap_rs1(pg_max_size, pg_align, og_max_size + yg_max_size, - og_align, addr); - heap_rs = heap_rs1; - } else { - heap_rs = heap_rs0; - } - } - } + ReservedSpace heap_rs = Universe::reserve_heap(heap_size, og_align); MemTracker::record_virtual_memory_type((address)heap_rs.base(), mtJavaHeap); - os::trace_page_sizes("ps perm", pg_min_size, pg_max_size, pg_page_sz, - heap_rs.base(), pg_max_size); os::trace_page_sizes("ps main", og_min_size + yg_min_size, og_max_size + yg_max_size, og_page_sz, - heap_rs.base() + pg_max_size, - heap_rs.size() - pg_max_size); + heap_rs.base(), + heap_rs.size()); if (!heap_rs.is_reserved()) { vm_shutdown_during_initialization( "Could not reserve enough space for object heap"); @@ -194,11 +146,6 @@ const size_t init_young_size = align_size_up(4 * M, yg_align); yg_cur_size = MAX2(MIN2(init_young_size, yg_max_size), yg_cur_size); - // Split the reserved space into perm gen and the main heap (everything else). - // The main heap uses a different alignment. - ReservedSpace perm_rs = heap_rs.first_part(pg_max_size); - ReservedSpace main_rs = heap_rs.last_part(pg_max_size, og_align); - // Make up the generations // Calculate the maximum size that a generation can grow. This // includes growth into the other generation. Note that the @@ -208,7 +155,7 @@ double max_gc_pause_sec = ((double) MaxGCPauseMillis)/1000.0; double max_gc_minor_pause_sec = ((double) MaxGCMinorPauseMillis)/1000.0; - _gens = new AdjoiningGenerations(main_rs, + _gens = new AdjoiningGenerations(heap_rs, og_cur_size, og_min_size, og_max_size, @@ -233,13 +180,6 @@ GCTimeRatio ); - _perm_gen = new PSPermGen(perm_rs, - pg_align, - pg_cur_size, - pg_cur_size, - pg_max_size, - "perm", 2); - assert(!UseAdaptiveGCBoundary || (old_gen()->virtual_space()->high_boundary() == young_gen()->virtual_space()->low_boundary()), @@ -273,7 +213,7 @@ void ParallelScavengeHeap::update_counters() { young_gen()->update_counters(); old_gen()->update_counters(); - perm_gen()->update_counters(); + MetaspaceCounters::update_performance_counters(); } size_t ParallelScavengeHeap::capacity() const { @@ -291,17 +231,8 @@ } -size_t ParallelScavengeHeap::permanent_capacity() const { - return perm_gen()->capacity_in_bytes(); -} - -size_t ParallelScavengeHeap::permanent_used() const { - return perm_gen()->used_in_bytes(); -} - size_t ParallelScavengeHeap::max_capacity() const { size_t estimated = reserved_region().byte_size(); - estimated -= perm_gen()->reserved().byte_size(); if (UseAdaptiveSizePolicy) { estimated -= _size_policy->max_survivor_size(young_gen()->max_size()); } else { @@ -319,10 +250,6 @@ return true; } - if (perm_gen()->is_in(p)) { - return true; - } - return false; } @@ -335,10 +262,6 @@ return true; } - if (perm_gen()->is_in_reserved(p)) { - return true; - } - return false; } @@ -352,7 +275,7 @@ bool ParallelScavengeHeap::is_in_partial_collection(const void *p) { assert(is_in_reserved(p) || p == NULL, "Does not work if address is non-null and outside of the heap"); - // The order of the generations is perm (low addr), old, young (high addr) + // The order of the generations is old (low addr), young (high addr) return p >= old_gen()->reserved().end(); } #endif @@ -553,6 +476,18 @@ return NULL; } +void ParallelScavengeHeap::do_full_collection(bool clear_all_soft_refs) { + if (UseParallelOldGC) { + // The do_full_collection() parameter clear_all_soft_refs + // is interpreted here as maximum_compaction which will + // cause SoftRefs to be cleared. + bool maximum_compaction = clear_all_soft_refs; + PSParallelCompact::invoke(maximum_compaction); + } else { + PSMarkSweep::invoke(clear_all_soft_refs); + } +} + // Failed allocation policy. Must be called from the VM thread, and // only at a safepoint! Note that this method has policy for allocation // flow, and NOT collection policy. So we do not check for gc collection @@ -575,7 +510,7 @@ // Second level allocation failure. // Mark sweep and allocate in young generation. if (result == NULL && !invoked_full_gc) { - invoke_full_gc(false); + do_full_collection(false); result = young_gen()->allocate(size); } @@ -591,7 +526,7 @@ // Fourth level allocation failure. We're running out of memory. // More complete mark sweep and allocate in young generation. if (result == NULL) { - invoke_full_gc(true); + do_full_collection(true); result = young_gen()->allocate(size); } @@ -604,160 +539,6 @@ return result; } -// -// This is the policy loop for allocating in the permanent generation. -// If the initial allocation fails, we create a vm operation which will -// cause a collection. -HeapWord* ParallelScavengeHeap::permanent_mem_allocate(size_t size) { - assert(!SafepointSynchronize::is_at_safepoint(), "should not be at safepoint"); - assert(Thread::current() != (Thread*)VMThread::vm_thread(), "should not be in vm thread"); - assert(!Heap_lock->owned_by_self(), "this thread should not own the Heap_lock"); - - HeapWord* result; - - uint loop_count = 0; - uint gc_count = 0; - uint full_gc_count = 0; - - do { - // We don't want to have multiple collections for a single filled generation. - // To prevent this, each thread tracks the total_collections() value, and if - // the count has changed, does not do a new collection. - // - // The collection count must be read only while holding the heap lock. VM - // operations also hold the heap lock during collections. There is a lock - // contention case where thread A blocks waiting on the Heap_lock, while - // thread B is holding it doing a collection. When thread A gets the lock, - // the collection count has already changed. To prevent duplicate collections, - // The policy MUST attempt allocations during the same period it reads the - // total_collections() value! - { - MutexLocker ml(Heap_lock); - gc_count = Universe::heap()->total_collections(); - full_gc_count = Universe::heap()->total_full_collections(); - - result = perm_gen()->allocate_permanent(size); - - if (result != NULL) { - return result; - } - - if (GC_locker::is_active_and_needs_gc()) { - // If this thread is not in a jni critical section, we stall - // the requestor until the critical section has cleared and - // GC allowed. When the critical section clears, a GC is - // initiated by the last thread exiting the critical section; so - // we retry the allocation sequence from the beginning of the loop, - // rather than causing more, now probably unnecessary, GC attempts. - JavaThread* jthr = JavaThread::current(); - if (!jthr->in_critical()) { - MutexUnlocker mul(Heap_lock); - GC_locker::stall_until_clear(); - continue; - } else { - if (CheckJNICalls) { - fatal("Possible deadlock due to allocating while" - " in jni critical section"); - } - return NULL; - } - } - } - - if (result == NULL) { - - // Exit the loop if the gc time limit has been exceeded. - // The allocation must have failed above (result must be NULL), - // and the most recent collection must have exceeded the - // gc time limit. Exit the loop so that an out-of-memory - // will be thrown (returning a NULL will do that), but - // clear gc_overhead_limit_exceeded so that the next collection - // will succeeded if the applications decides to handle the - // out-of-memory and tries to go on. - const bool limit_exceeded = size_policy()->gc_overhead_limit_exceeded(); - if (limit_exceeded) { - size_policy()->set_gc_overhead_limit_exceeded(false); - if (PrintGCDetails && Verbose) { - gclog_or_tty->print_cr("ParallelScavengeHeap::permanent_mem_allocate:" - " return NULL because gc_overhead_limit_exceeded is set"); - } - assert(result == NULL, "Allocation did not fail"); - return NULL; - } - - // Generate a VM operation - VM_ParallelGCFailedPermanentAllocation op(size, gc_count, full_gc_count); - VMThread::execute(&op); - - // Did the VM operation execute? If so, return the result directly. - // This prevents us from looping until time out on requests that can - // not be satisfied. - if (op.prologue_succeeded()) { - assert(Universe::heap()->is_in_permanent_or_null(op.result()), - "result not in heap"); - // If GC was locked out during VM operation then retry allocation - // and/or stall as necessary. - if (op.gc_locked()) { - assert(op.result() == NULL, "must be NULL if gc_locked() is true"); - continue; // retry and/or stall as necessary - } - // If a NULL results is being returned, an out-of-memory - // will be thrown now. Clear the gc_overhead_limit_exceeded - // flag to avoid the following situation. - // gc_overhead_limit_exceeded is set during a collection - // the collection fails to return enough space and an OOM is thrown - // a subsequent GC prematurely throws an out-of-memory because - // the gc_overhead_limit_exceeded counts did not start - // again from 0. - if (op.result() == NULL) { - size_policy()->reset_gc_overhead_limit_count(); - } - return op.result(); - } - } - - // The policy object will prevent us from looping forever. If the - // time spent in gc crosses a threshold, we will bail out. - loop_count++; - if ((QueuedAllocationWarningCount > 0) && - (loop_count % QueuedAllocationWarningCount == 0)) { - warning("ParallelScavengeHeap::permanent_mem_allocate retries %d times \n\t" - " size=%d", loop_count, size); - } - } while (result == NULL); - - return result; -} - -// -// This is the policy code for permanent allocations which have failed -// and require a collection. Note that just as in failed_mem_allocate, -// we do not set collection policy, only where & when to allocate and -// collect. -HeapWord* ParallelScavengeHeap::failed_permanent_mem_allocate(size_t size) { - assert(SafepointSynchronize::is_at_safepoint(), "should be at safepoint"); - assert(Thread::current() == (Thread*)VMThread::vm_thread(), "should be in vm thread"); - assert(!Universe::heap()->is_gc_active(), "not reentrant"); - assert(!Heap_lock->owned_by_self(), "this thread should not own the Heap_lock"); - assert(size > perm_gen()->free_in_words(), "Allocation should fail"); - - // We assume (and assert!) that an allocation at this point will fail - // unless we collect. - - // First level allocation failure. Mark-sweep and allocate in perm gen. - GCCauseSetter gccs(this, GCCause::_allocation_failure); - invoke_full_gc(false); - HeapWord* result = perm_gen()->allocate_permanent(size); - - // Second level allocation failure. We're running out of memory. - if (result == NULL) { - invoke_full_gc(true); - result = perm_gen()->allocate_permanent(size); - } - - return result; -} - void ParallelScavengeHeap::ensure_parsability(bool retire_tlabs) { CollectedHeap::ensure_parsability(retire_tlabs); young_gen()->eden_space()->ensure_parsability(); @@ -812,44 +593,15 @@ VMThread::execute(&op); } -// This interface assumes that it's being called by the -// vm thread. It collects the heap assuming that the -// heap lock is already held and that we are executing in -// the context of the vm thread. -void ParallelScavengeHeap::collect_as_vm_thread(GCCause::Cause cause) { - assert(Thread::current()->is_VM_thread(), "Precondition#1"); - assert(Heap_lock->is_locked(), "Precondition#2"); - GCCauseSetter gcs(this, cause); - switch (cause) { - case GCCause::_heap_inspection: - case GCCause::_heap_dump: { - HandleMark hm; - invoke_full_gc(false); - break; - } - default: // XXX FIX ME - ShouldNotReachHere(); - } -} - - -void ParallelScavengeHeap::oop_iterate(OopClosure* cl) { +void ParallelScavengeHeap::oop_iterate(ExtendedOopClosure* cl) { Unimplemented(); } void ParallelScavengeHeap::object_iterate(ObjectClosure* cl) { young_gen()->object_iterate(cl); old_gen()->object_iterate(cl); - perm_gen()->object_iterate(cl); } -void ParallelScavengeHeap::permanent_oop_iterate(OopClosure* cl) { - Unimplemented(); -} - -void ParallelScavengeHeap::permanent_object_iterate(ObjectClosure* cl) { - perm_gen()->object_iterate(cl); -} HeapWord* ParallelScavengeHeap::block_start(const void* addr) const { if (young_gen()->is_in_reserved(addr)) { @@ -862,10 +614,6 @@ assert(old_gen()->is_in(addr), "addr should be in allocated part of old gen"); return old_gen()->start_array()->object_start((HeapWord*)addr); - } else if (perm_gen()->is_in_reserved(addr)) { - assert(perm_gen()->is_in(addr), - "addr should be in allocated part of perm gen"); - return perm_gen()->start_array()->object_start((HeapWord*)addr); } return 0; } @@ -891,7 +639,7 @@ void ParallelScavengeHeap::print_on(outputStream* st) const { young_gen()->print_on(st); old_gen()->print_on(st); - perm_gen()->print_on(st); + MetaspaceAux::print_on(st); } void ParallelScavengeHeap::gc_threads_do(ThreadClosure* tc) const { @@ -918,11 +666,6 @@ // Why do we need the total_collections()-filter below? if (total_collections() > 0) { if (!silent) { - gclog_or_tty->print("permanent "); - } - perm_gen()->verify(); - - if (!silent) { gclog_or_tty->print("tenured "); } old_gen()->verify(); @@ -1000,7 +743,6 @@ if (ZapUnusedHeapArea) { young_gen()->record_spaces_top(); old_gen()->record_spaces_top(); - perm_gen()->record_spaces_top(); } } @@ -1010,7 +752,6 @@ young_gen()->to_space()->mangle_unused_area(); young_gen()->from_space()->mangle_unused_area(); old_gen()->object_space()->mangle_unused_area(); - perm_gen()->object_space()->mangle_unused_area(); } } #endif diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -28,7 +28,6 @@ #include "gc_implementation/parallelScavenge/objectStartArray.hpp" #include "gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp" #include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psPermGen.hpp" #include "gc_implementation/parallelScavenge/psYoungGen.hpp" #include "gc_implementation/shared/gcPolicyCounters.hpp" #include "gc_interface/collectedHeap.inline.hpp" @@ -45,7 +44,6 @@ private: static PSYoungGen* _young_gen; static PSOldGen* _old_gen; - static PSPermGen* _perm_gen; // Sizing policy for entire heap static PSAdaptiveSizePolicy* _size_policy; @@ -53,7 +51,6 @@ static ParallelScavengeHeap* _psh; - size_t _perm_gen_alignment; size_t _young_gen_alignment; size_t _old_gen_alignment; @@ -79,7 +76,6 @@ public: ParallelScavengeHeap() : CollectedHeap() { _death_march_count = 0; - set_alignment(_perm_gen_alignment, intra_heap_alignment()); set_alignment(_young_gen_alignment, intra_heap_alignment()); set_alignment(_old_gen_alignment, intra_heap_alignment()); } @@ -94,12 +90,10 @@ return CollectedHeap::ParallelScavengeHeap; } -CollectorPolicy* collector_policy() const { return (CollectorPolicy*) _collector_policy; } - // GenerationSizer* collector_policy() const { return _collector_policy; } + virtual CollectorPolicy* collector_policy() const { return (CollectorPolicy*) _collector_policy; } static PSYoungGen* young_gen() { return _young_gen; } static PSOldGen* old_gen() { return _old_gen; } - static PSPermGen* perm_gen() { return _perm_gen; } virtual PSAdaptiveSizePolicy* size_policy() { return _size_policy; } @@ -117,7 +111,6 @@ void post_initialize(); void update_counters(); // The alignment used for the various generations. - size_t perm_gen_alignment() const { return _perm_gen_alignment; } size_t young_gen_alignment() const { return _young_gen_alignment; } size_t old_gen_alignment() const { return _old_gen_alignment; } @@ -128,7 +121,7 @@ size_t capacity() const; size_t used() const; - // Return "true" if all generations (but perm) have reached the + // Return "true" if all generations have reached the // maximal committed limit that they can reach, without a garbage // collection. virtual bool is_maximal_no_gc() const; @@ -142,29 +135,19 @@ // Does this heap support heap inspection? (+PrintClassHistogram) bool supports_heap_inspection() const { return true; } - size_t permanent_capacity() const; - size_t permanent_used() const; - size_t max_capacity() const; // Whether p is in the allocated part of the heap bool is_in(const void* p) const; bool is_in_reserved(const void* p) const; - bool is_in_permanent(const void *p) const { // reserved part - return perm_gen()->reserved().contains(p); - } #ifdef ASSERT virtual bool is_in_partial_collection(const void *p); #endif - bool is_permanent(const void *p) const { // committed part - return perm_gen()->is_in(p); - } - - inline bool is_in_young(oop p); // reserved part - inline bool is_in_old_or_perm(oop p); // reserved part + bool is_in_young(oop p); // reserved part + bool is_in_old(oop p); // reserved part // Memory allocation. "gc_time_limit_was_exceeded" will // be set to true if the adaptive size policy determine that @@ -179,18 +162,9 @@ // of the old generation. HeapWord* failed_mem_allocate(size_t size); - HeapWord* permanent_mem_allocate(size_t size); - HeapWord* failed_permanent_mem_allocate(size_t size); - // Support for System.gc() void collect(GCCause::Cause cause); - // This interface assumes that it's being called by the - // vm thread. It collects the heap assuming that the - // heap lock is already held and that we are executing in - // the context of the vm thread. - void collect_as_vm_thread(GCCause::Cause cause); - // These also should be called by the vm thread at a safepoint (e.g., from a // VM operation). // @@ -199,7 +173,9 @@ // maximum_compaction is true, it will compact everything and clear all soft // references. inline void invoke_scavenge(); - inline void invoke_full_gc(bool maximum_compaction); + + // Perform a full collection + virtual void do_full_collection(bool clear_all_soft_refs); bool supports_inline_contig_alloc() const { return !UseNUMA; } @@ -232,18 +208,9 @@ // initializing stores to an object at this address. virtual bool can_elide_initializing_store_barrier(oop new_obj); - // Can a compiler elide a store barrier when it writes - // a permanent oop into the heap? Applies when the compiler - // is storing x to the heap, where x->is_perm() is true. - virtual bool can_elide_permanent_oop_store_barriers() const { - return true; - } - - void oop_iterate(OopClosure* cl); + void oop_iterate(ExtendedOopClosure* cl); void object_iterate(ObjectClosure* cl); void safe_object_iterate(ObjectClosure* cl) { object_iterate(cl); } - void permanent_oop_iterate(OopClosure* cl); - void permanent_object_iterate(ObjectClosure* cl); HeapWord* block_start(const void* addr) const; size_t block_size(const HeapWord* addr) const; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -47,15 +47,6 @@ PSScavenge::invoke(); } -inline void ParallelScavengeHeap::invoke_full_gc(bool maximum_compaction) -{ - if (UseParallelOldGC) { - PSParallelCompact::invoke(maximum_compaction); - } else { - PSMarkSweep::invoke(maximum_compaction); - } -} - inline bool ParallelScavengeHeap::is_in_young(oop p) { // Assumes the the old gen address range is lower than that of the young gen. const void* loc = (void*) p; @@ -64,9 +55,4 @@ err_msg("incorrect test - result=%d, p=" PTR_FORMAT, result, (void*)p)); return result; } - -inline bool ParallelScavengeHeap::is_in_old_or_perm(oop p) { - return old_gen()->is_in_reserved(p) || perm_gen()->is_in_reserved(p); -} - #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PARALLELSCAVENGEHEAP_INLINE_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -74,6 +74,7 @@ ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); + PSParallelCompact::FollowKlassClosure follow_klass_closure(&mark_and_push_closure); switch (_root_type) { case universe: @@ -110,6 +111,7 @@ case system_dictionary: SystemDictionary::always_strong_oops_do(&mark_and_push_closure); + ClassLoaderDataGraph::always_strong_oops_do(&mark_and_push_closure, &follow_klass_closure, true); break; case code_cache: @@ -202,7 +204,7 @@ int random_seed = 17; do { while (ParCompactionManager::steal_objarray(which, &random_seed, task)) { - objArrayKlass* const k = (objArrayKlass*)task.obj()->blueprint(); + objArrayKlass* const k = (objArrayKlass*)task.obj()->klass(); k->oop_follow_contents(cm, task.obj(), task.index()); cm->follow_marking_stacks(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -198,7 +198,6 @@ size_t young_live, size_t eden_live, size_t old_live, - size_t perm_live, size_t cur_eden, size_t max_old_gen_size, size_t max_eden_size, @@ -208,7 +207,7 @@ // Update statistics // Time statistics are updated as we go, update footprint stats here - _avg_base_footprint->sample(BaseFootPrintEstimate + perm_live); + _avg_base_footprint->sample(BaseFootPrintEstimate); avg_young_live()->sample(young_live); avg_eden_live()->sample(eden_live); if (is_full_gc) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -344,7 +344,6 @@ void compute_generation_free_space(size_t young_live, size_t eden_live, size_t old_live, - size_t perm_live, size_t cur_eden, // current eden in bytes size_t max_old_gen_size, size_t max_eden_size, diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,6 @@ #include "gc_implementation/parallelScavenge/psOldGen.hpp" #include "gc_implementation/parallelScavenge/psParallelCompact.hpp" #include "oops/objArrayKlass.inline.hpp" -#include "oops/oop.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.pcgc.inline.hpp" #include "utilities/stack.inline.hpp" @@ -175,13 +174,6 @@ return _manager_array[index]; } -void ParCompactionManager::reset() { - for(uint i = 0; i < ParallelGCThreads + 1; i++) { - assert(manager_array(i)->revisit_klass_stack()->is_empty(), "sanity"); - assert(manager_array(i)->revisit_mdo_stack()->is_empty(), "sanity"); - } -} - void ParCompactionManager::follow_marking_stacks() { do { // Drain the overflow stack first, to allow stealing from the marking stack. @@ -196,10 +188,10 @@ // Process ObjArrays one at a time to avoid marking stack bloat. ObjArrayTask task; if (_objarray_stack.pop_overflow(task)) { - objArrayKlass* const k = (objArrayKlass*)task.obj()->blueprint(); + objArrayKlass* const k = (objArrayKlass*)task.obj()->klass(); k->oop_follow_contents(this, task.obj(), task.index()); } else if (_objarray_stack.pop_local(task)) { - objArrayKlass* const k = (objArrayKlass*)task.obj()->blueprint(); + objArrayKlass* const k = (objArrayKlass*)task.obj()->klass(); k->oop_follow_contents(this, task.obj(), task.index()); } } while (!marking_stacks_empty()); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -110,9 +110,6 @@ // popped. If -1, there has not been any entry popped. static int _recycled_bottom; - Stack _revisit_klass_stack; - Stack _revisit_mdo_stack; - static ParMarkBitMap* _mark_bitmap; Action _action; @@ -167,17 +164,11 @@ static void verify_region_list_empty(uint stack_index); ParMarkBitMap* mark_bitmap() { return _mark_bitmap; } - // Take actions in preparation for a compaction. - static void reset(); - // void drain_stacks(); bool should_update(); bool should_copy(); - Stack* revisit_klass_stack() { return &_revisit_klass_stack; } - Stack* revisit_mdo_stack() { return &_revisit_mdo_stack; } - // Save for later processing. Must not fail. inline void push(oop obj) { _marking_stack.push(obj); } inline void push_objarray(oop objarray, size_t index); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -32,10 +32,10 @@ #include "gc_implementation/parallelScavenge/psMarkSweep.hpp" #include "gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp" #include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psPermGen.hpp" #include "gc_implementation/parallelScavenge/psScavenge.hpp" #include "gc_implementation/parallelScavenge/psYoungGen.hpp" #include "gc_implementation/shared/isGCActiveMark.hpp" +#include "gc_implementation/shared/markSweep.hpp" #include "gc_implementation/shared/spaceDecorator.hpp" #include "gc_interface/gcCause.hpp" #include "memory/gcLocker.inline.hpp" @@ -52,7 +52,6 @@ #include "utilities/stack.inline.hpp" elapsedTimer PSMarkSweep::_accumulated_time; -unsigned int PSMarkSweep::_total_invocations = 0; jlong PSMarkSweep::_time_of_last_gc = 0; CollectorCounters* PSMarkSweep::_counters = NULL; @@ -119,7 +118,6 @@ PSYoungGen* young_gen = heap->young_gen(); PSOldGen* old_gen = heap->old_gen(); - PSPermGen* perm_gen = heap->perm_gen(); // Increment the invocation count heap->increment_total_collections(true /* full */); @@ -148,7 +146,6 @@ if (VerifyObjectStartArray && VerifyBeforeGC) { old_gen->verify_object_start_array(); - perm_gen->verify_object_start_array(); } heap->pre_full_gc_dump(); @@ -172,8 +169,6 @@ // Let the size policy know we're starting size_policy->major_collection_begin(); - // When collecting the permanent generation methodOops may be moving, - // so we either have to flush all bcp data or convert it into bci. CodeCache::gc_prologue(); Threads::gc_prologue(); BiasedLocking::preserve_marks(); @@ -181,8 +176,8 @@ // Capture heap size before collection for printing. size_t prev_used = heap->used(); - // Capture perm gen size before collection for sizing. - size_t perm_gen_prev_used = perm_gen->used_in_bytes(); + // Capture metadata size before collection for sizing. + size_t metadata_prev_used = MetaspaceAux::used_in_bytes(); // For PrintGCDetails size_t old_gen_prev_used = old_gen->used_in_bytes(); @@ -234,16 +229,16 @@ if (bs->is_a(BarrierSet::ModRef)) { ModRefBarrierSet* modBS = (ModRefBarrierSet*)bs; MemRegion old_mr = heap->old_gen()->reserved(); - MemRegion perm_mr = heap->perm_gen()->reserved(); - assert(perm_mr.end() <= old_mr.start(), "Generations out of order"); - if (young_gen_empty) { - modBS->clear(MemRegion(perm_mr.start(), old_mr.end())); + modBS->clear(MemRegion(old_mr.start(), old_mr.end())); } else { - modBS->invalidate(MemRegion(perm_mr.start(), old_mr.end())); + modBS->invalidate(MemRegion(old_mr.start(), old_mr.end())); } } + // Delete metaspaces for unloaded class loaders and clean up loader_data graph + ClassLoaderDataGraph::purge(); + BiasedLocking::restore_marks(); Threads::gc_epilogue(); CodeCache::gc_epilogue(); @@ -267,10 +262,8 @@ gclog_or_tty->print_cr(" collection: %d ", heap->total_collections()); if (Verbose) { - gclog_or_tty->print("old_gen_capacity: %d young_gen_capacity: %d" - " perm_gen_capacity: %d ", - old_gen->capacity_in_bytes(), young_gen->capacity_in_bytes(), - perm_gen->capacity_in_bytes()); + gclog_or_tty->print("old_gen_capacity: %d young_gen_capacity: %d", + old_gen->capacity_in_bytes(), young_gen->capacity_in_bytes()); } } @@ -290,7 +283,6 @@ size_policy->compute_generation_free_space(young_gen->used_in_bytes(), young_gen->eden_space()->used_in_bytes(), old_gen->used_in_bytes(), - perm_gen->used_in_bytes(), young_gen->eden_space()->capacity_in_bytes(), old_gen->max_gen_size(), max_eden_size, @@ -323,8 +315,8 @@ heap->resize_all_tlabs(); - // We collected the perm gen, so we'll resize it here. - perm_gen->compute_new_size(perm_gen_prev_used); + // We collected the heap, recalculate the metaspace capacity + MetaspaceGC::compute_new_size(); if (TraceGen1Time) accumulated_time()->stop(); @@ -336,11 +328,8 @@ old_gen->print_used_change(old_gen_prev_used); } heap->print_heap_change(prev_used); - // Do perm gen after heap becase prev_used does - // not include the perm gen (done this way in the other - // collectors). if (PrintGCDetails) { - perm_gen->print_used_change(perm_gen_prev_used); + MetaspaceAux::print_metaspace_change(metadata_prev_used); } } @@ -359,12 +348,10 @@ if (VerifyObjectStartArray && VerifyAfterGC) { old_gen->verify_object_start_array(); - perm_gen->verify_object_start_array(); } if (ZapUnusedHeapArea) { old_gen->object_space()->check_mangled_unused_area_complete(); - perm_gen->object_space()->check_mangled_unused_area_complete(); } NOT_PRODUCT(ref_processor()->verify_no_references_recorded()); @@ -490,8 +477,6 @@ _preserved_oop_stack.clear(true); _marking_stack.clear(); _objarray_stack.clear(true); - _revisit_klass_stack.clear(true); - _revisit_mdo_stack.clear(true); } void PSMarkSweep::mark_sweep_phase1(bool clear_all_softrefs) { @@ -502,6 +487,9 @@ ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); + // Need to clear claim bits before the tracing starts. + ClassLoaderDataGraph::clear_claimed_marks(); + // General strong roots. { ParallelScavengeHeap::ParStrongRootsScope psrs; @@ -514,6 +502,7 @@ Management::oops_do(mark_and_push_closure()); JvmtiExport::oops_do(mark_and_push_closure()); SystemDictionary::always_strong_oops_do(mark_and_push_closure()); + ClassLoaderDataGraph::always_strong_oops_do(mark_and_push_closure(), follow_klass_closure(), true); // Do not treat nmethods as strong roots for mark/sweep, since we can unload them. //CodeCache::scavenge_root_nmethods_do(CodeBlobToOopClosure(mark_and_push_closure())); } @@ -537,11 +526,7 @@ follow_stack(); // Flush marking stack // Update subklass/sibling/implementor links of live klasses - follow_weak_klass_links(); - assert(_marking_stack.is_empty(), "just drained"); - - // Visit memoized mdo's and clear unmarked weak refs - follow_mdo_weak_refs(); + Klass::clean_weak_klass_links(&is_alive); assert(_marking_stack.is_empty(), "just drained"); // Visit interned string tables and delete unmarked oops @@ -559,13 +544,6 @@ // Now all live objects are marked, compute the new object addresses. - // It is imperative that we traverse perm_gen LAST. If dead space is - // allowed a range of dead object may get overwritten by a dead int - // array. If perm_gen is not traversed last a klassOop may get - // overwritten. This is fine since it is dead, but if the class has dead - // instances we have to skip them, and in order to find their size we - // need the klassOop! - // // It is not required that we traverse spaces in the same order in // phase2, phase3 and phase4, but the ValidateMarkSweep live oops // tracking expects us to do so. See comment under phase4. @@ -574,18 +552,12 @@ assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); PSOldGen* old_gen = heap->old_gen(); - PSPermGen* perm_gen = heap->perm_gen(); // Begin compacting into the old gen PSMarkSweepDecorator::set_destination_decorator_tenured(); // This will also compact the young gen spaces. old_gen->precompact(); - - // Compact the perm gen into the perm gen - PSMarkSweepDecorator::set_destination_decorator_perm_gen(); - - perm_gen->precompact(); } // This should be moved to the shared markSweep code! @@ -606,7 +578,9 @@ PSYoungGen* young_gen = heap->young_gen(); PSOldGen* old_gen = heap->old_gen(); - PSPermGen* perm_gen = heap->perm_gen(); + + // Need to clear claim bits before the tracing starts. + ClassLoaderDataGraph::clear_claimed_marks(); // General strong roots. Universe::oops_do(adjust_root_pointer_closure()); @@ -618,6 +592,7 @@ JvmtiExport::oops_do(adjust_root_pointer_closure()); // SO_AllClasses SystemDictionary::oops_do(adjust_root_pointer_closure()); + ClassLoaderDataGraph::oops_do(adjust_root_pointer_closure(), adjust_klass_closure(), true); //CodeCache::scavenge_root_nmethods_oops_do(adjust_root_pointer_closure()); // Now adjust pointers in remaining weak roots. (All of which should @@ -634,7 +609,6 @@ young_gen->adjust_pointers(); old_gen->adjust_pointers(); - perm_gen->adjust_pointers(); } void PSMarkSweep::mark_sweep_phase4() { @@ -644,18 +618,12 @@ // All pointers are now adjusted, move objects accordingly - // It is imperative that we traverse perm_gen first in phase4. All - // classes must be allocated earlier than their instances, and traversing - // perm_gen first makes sure that all klassOops have moved to their new - // location before any instance does a dispatch through it's klass! ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); PSYoungGen* young_gen = heap->young_gen(); PSOldGen* old_gen = heap->old_gen(); - PSPermGen* perm_gen = heap->perm_gen(); - perm_gen->compact(); old_gen->compact(); young_gen->compact(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -36,15 +36,16 @@ class PSMarkSweep : public MarkSweep { private: static elapsedTimer _accumulated_time; - static unsigned int _total_invocations; static jlong _time_of_last_gc; // ms static CollectorCounters* _counters; // Closure accessors static OopClosure* mark_and_push_closure() { return &MarkSweep::mark_and_push_closure; } + static KlassClosure* follow_klass_closure() { return &MarkSweep::follow_klass_closure; } static VoidClosure* follow_stack_closure() { return (VoidClosure*)&MarkSweep::follow_stack_closure; } static OopClosure* adjust_pointer_closure() { return (OopClosure*)&MarkSweep::adjust_pointer_closure; } static OopClosure* adjust_root_pointer_closure() { return (OopClosure*)&MarkSweep::adjust_root_pointer_closure; } + static KlassClosure* adjust_klass_closure() { return &MarkSweep::adjust_klass_closure; } static BoolObjectClosure* is_alive_closure() { return (BoolObjectClosure*)&MarkSweep::is_alive; } debug_only(public:) // Used for PSParallelCompact debugging @@ -84,7 +85,6 @@ // Public accessors static elapsedTimer* accumulated_time() { return &_accumulated_time; } - static unsigned int total_invocations() { return _total_invocations; } static CollectorCounters* counters() { return _counters; } // Time since last full gc (in milliseconds) diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,19 +43,11 @@ _destination_decorator = heap->old_gen()->object_mark_sweep(); } -void PSMarkSweepDecorator::set_destination_decorator_perm_gen() { - ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); - assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); - - _destination_decorator = heap->perm_gen()->object_mark_sweep(); -} - void PSMarkSweepDecorator::advance_destination_decorator() { ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); assert(_destination_decorator != NULL, "Sanity"); - guarantee(_destination_decorator != heap->perm_gen()->object_mark_sweep(), "Cannot advance perm gen decorator"); PSMarkSweepDecorator* first = heap->old_gen()->object_mark_sweep(); PSMarkSweepDecorator* second = heap->young_gen()->eden_mark_sweep(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -59,7 +59,6 @@ // spaces in a given order. We want to fill space A, space B, and so // on. The code that controls that order is in the following methods. static void set_destination_decorator_tenured(); - static void set_destination_decorator_perm_gen(); static void advance_destination_decorator(); static PSMarkSweepDecorator* destination_decorator(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -57,9 +57,12 @@ const char* perf_data_name, int level) { initialize_virtual_space(rs, alignment); initialize_work(perf_data_name, level); + // The old gen can grow to gen_size_limit(). _reserve reflects only // the current maximum that can be committed. assert(_reserved.byte_size() <= gen_size_limit(), "Consistency check"); + + initialize_performance_counters(perf_data_name, level); } void PSOldGen::initialize_virtual_space(ReservedSpace rs, size_t alignment) { @@ -140,7 +143,9 @@ // Update the start_array start_array()->set_covered_region(cmr); +} +void PSOldGen::initialize_performance_counters(const char* perf_data_name, int level) { // Generation Counters, generation 'level', 1 subspace _gen_counters = new PSGenerationCounters(perf_data_name, level, 1, virtual_space()); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -107,10 +107,11 @@ PSOldGen(size_t initial_size, size_t min_size, size_t max_size, const char* perf_data_name, int level); - void initialize(ReservedSpace rs, size_t alignment, + virtual void initialize(ReservedSpace rs, size_t alignment, const char* perf_data_name, int level); void initialize_virtual_space(ReservedSpace rs, size_t alignment); void initialize_work(const char* perf_data_name, int level); + virtual void initialize_performance_counters(const char* perf_data_name, int level); MemRegion reserved() const { return _reserved; } virtual size_t max_gen_size() { return _max_gen_size; } @@ -166,7 +167,7 @@ HeapWord* allocate(size_t word_size); // Iteration. - void oop_iterate(OopClosure* cl) { object_space()->oop_iterate(cl); } + void oop_iterate_no_header(OopClosure* cl) { object_space()->oop_iterate_no_header(cl); } void object_iterate(ObjectClosure* cl) { object_space()->object_iterate(cl); } // Debugging - do not use for time critical operations diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -36,7 +36,6 @@ #include "gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp" #include "gc_implementation/parallelScavenge/psOldGen.hpp" #include "gc_implementation/parallelScavenge/psParallelCompact.hpp" -#include "gc_implementation/parallelScavenge/psPermGen.hpp" #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" #include "gc_implementation/parallelScavenge/psScavenge.hpp" #include "gc_implementation/parallelScavenge/psYoungGen.hpp" @@ -45,7 +44,7 @@ #include "memory/gcLocker.inline.hpp" #include "memory/referencePolicy.hpp" #include "memory/referenceProcessor.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.pcgc.inline.hpp" #include "runtime/fprofiler.hpp" @@ -90,7 +89,7 @@ bool PSParallelCompact::_print_phases = false; ReferenceProcessor* PSParallelCompact::_ref_processor = NULL; -klassOop PSParallelCompact::_updated_int_array_klass_obj = NULL; +Klass* PSParallelCompact::_updated_int_array_klass_obj = NULL; double PSParallelCompact::_dwl_mean; double PSParallelCompact::_dwl_std_dev; @@ -106,7 +105,6 @@ GrowableArray * PSParallelCompact::_live_oops_moved_to = NULL; GrowableArray* PSParallelCompact::_live_oops_size = NULL; size_t PSParallelCompact::_live_oops_index = 0; -size_t PSParallelCompact::_live_oops_index_at_perm = 0; GrowableArray* PSParallelCompact::_other_refs_stack = NULL; GrowableArray* PSParallelCompact::_adjusted_pointers = NULL; bool PSParallelCompact::_pointer_tracking = false; @@ -188,7 +186,7 @@ #ifndef PRODUCT const char* PSParallelCompact::space_names[] = { - "perm", "old ", "eden", "from", "to " + "old ", "eden", "from", "to " }; void PSParallelCompact::print_region_ranges() @@ -347,7 +345,7 @@ void print_initial_summary_data(ParallelCompactData& summary_data, SpaceInfo* space_info) { - unsigned int id = PSParallelCompact::perm_space_id; + unsigned int id = PSParallelCompact::old_space_id; const MutableSpace* space; do { space = space_info[id].space(); @@ -480,7 +478,7 @@ const size_t beg_ofs = region_offset(addr); _region_data[beg_region].add_live_obj(RegionSize - beg_ofs); - klassOop klass = ((oop)addr)->klass(); + Klass* klass = ((oop)addr)->klass(); // Middle regions--completely spanned by this object. for (size_t region = beg_region + 1; region < end_region; ++region) { _region_data[region].set_partial_obj_size(RegionSize); @@ -765,17 +763,6 @@ return result; } -klassOop ParallelCompactData::calc_new_klass(klassOop old_klass) { - klassOop updated_klass; - if (PSParallelCompact::should_update_klass(old_klass)) { - updated_klass = (klassOop) calc_new_pointer(old_klass); - } else { - updated_klass = old_klass; - } - - return updated_klass; -} - #ifdef ASSERT void ParallelCompactData::verify_clear(const PSVirtualSpace* vspace) { @@ -817,15 +804,25 @@ PSParallelCompact::AdjustPointerClosure PSParallelCompact::_adjust_root_pointer_closure(true); PSParallelCompact::AdjustPointerClosure PSParallelCompact::_adjust_pointer_closure(false); +PSParallelCompact::AdjustKlassClosure PSParallelCompact::_adjust_klass_closure; void PSParallelCompact::AdjustPointerClosure::do_oop(oop* p) { adjust_pointer(p, _is_root); } void PSParallelCompact::AdjustPointerClosure::do_oop(narrowOop* p) { adjust_pointer(p, _is_root); } void PSParallelCompact::FollowStackClosure::do_void() { _compaction_manager->follow_marking_stacks(); } -void PSParallelCompact::MarkAndPushClosure::do_oop(oop* p) { mark_and_push(_compaction_manager, p); } +void PSParallelCompact::MarkAndPushClosure::do_oop(oop* p) { + mark_and_push(_compaction_manager, p); +} void PSParallelCompact::MarkAndPushClosure::do_oop(narrowOop* p) { mark_and_push(_compaction_manager, p); } +void PSParallelCompact::FollowKlassClosure::do_klass(Klass* klass) { + klass->oops_do(_mark_and_push_closure); +} +void PSParallelCompact::AdjustKlassClosure::do_klass(Klass* klass) { + klass->oops_do(&PSParallelCompact::_adjust_root_pointer_closure); +} + void PSParallelCompact::post_initialize() { ParallelScavengeHeap* heap = gc_heap(); assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); @@ -880,22 +877,13 @@ ParallelScavengeHeap* heap = gc_heap(); PSYoungGen* young_gen = heap->young_gen(); - MutableSpace* perm_space = heap->perm_gen()->object_space(); - - _space_info[perm_space_id].set_space(perm_space); + _space_info[old_space_id].set_space(heap->old_gen()->object_space()); _space_info[eden_space_id].set_space(young_gen->eden_space()); _space_info[from_space_id].set_space(young_gen->from_space()); _space_info[to_space_id].set_space(young_gen->to_space()); - _space_info[perm_space_id].set_start_array(heap->perm_gen()->start_array()); _space_info[old_space_id].set_start_array(heap->old_gen()->start_array()); - - _space_info[perm_space_id].set_min_dense_prefix(perm_space->top()); - if (TraceParallelOldGCDensePrefix) { - tty->print_cr("perm min_dense_prefix=" PTR_FORMAT, - _space_info[perm_space_id].min_dense_prefix()); - } } void PSParallelCompact::initialize_dead_wood_limiter() @@ -919,19 +907,19 @@ _heap_used = heap->used(); _young_gen_used = heap->young_gen()->used_in_bytes(); _old_gen_used = heap->old_gen()->used_in_bytes(); - _perm_gen_used = heap->perm_gen()->used_in_bytes(); + _metadata_used = MetaspaceAux::used_in_bytes(); }; size_t heap_used() const { return _heap_used; } size_t young_gen_used() const { return _young_gen_used; } size_t old_gen_used() const { return _old_gen_used; } - size_t perm_gen_used() const { return _perm_gen_used; } + size_t metadata_used() const { return _metadata_used; } private: size_t _heap_used; size_t _young_gen_used; size_t _old_gen_used; - size_t _perm_gen_used; + size_t _metadata_used; }; void @@ -976,7 +964,6 @@ pre_gc_values->fill(heap); - ParCompactionManager::reset(); NOT_PRODUCT(_mark_bitmap.reset_counters()); DEBUG_ONLY(add_obj_count = add_obj_size = 0;) DEBUG_ONLY(mark_bitmap_count = mark_bitmap_size = 0;) @@ -1003,7 +990,6 @@ if (VerifyObjectStartArray && VerifyBeforeGC) { heap->old_gen()->verify_object_start_array(); - heap->perm_gen()->verify_object_start_array(); } DEBUG_ONLY(mark_bitmap()->verify_clear();) @@ -1017,7 +1003,7 @@ { TraceTime tm("post compact", print_phases(), true, gclog_or_tty); - for (unsigned int id = perm_space_id; id < last_space_id; ++id) { + for (unsigned int id = old_space_id; id < last_space_id; ++id) { // Clear the marking bitmap, summary data and split info. clear_data_covering_space(SpaceId(id)); // Update top(). Must be done after clearing the bitmap and summary data. @@ -1046,16 +1032,17 @@ if (bs->is_a(BarrierSet::ModRef)) { ModRefBarrierSet* modBS = (ModRefBarrierSet*)bs; MemRegion old_mr = heap->old_gen()->reserved(); - MemRegion perm_mr = heap->perm_gen()->reserved(); - assert(perm_mr.end() <= old_mr.start(), "Generations out of order"); if (young_gen_empty) { - modBS->clear(MemRegion(perm_mr.start(), old_mr.end())); + modBS->clear(MemRegion(old_mr.start(), old_mr.end())); } else { - modBS->invalidate(MemRegion(perm_mr.start(), old_mr.end())); + modBS->invalidate(MemRegion(old_mr.start(), old_mr.end())); } } + // Delete metaspaces for unloaded class loaders and clean up loader_data graph + ClassLoaderDataGraph::purge(); + Threads::gc_epilogue(); CodeCache::gc_epilogue(); JvmtiExport::gc_epilogue(); @@ -1409,8 +1396,7 @@ const size_t space_capacity = space->capacity_in_words(); const double density = double(space_live) / double(space_capacity); - const size_t min_percent_free = - id == perm_space_id ? PermMarkSweepDeadRatio : MarkSweepDeadRatio; + const size_t min_percent_free = MarkSweepDeadRatio; const double limiter = dead_wood_limiter(density, min_percent_free); const size_t dead_wood_max = space_used - space_live; const size_t dead_wood_limit = MIN2(size_t(space_capacity * limiter), @@ -1868,7 +1854,6 @@ // The amount of live data that will end up in old space (assuming it fits). size_t old_space_total_live = 0; - assert(perm_space_id < old_space_id, "should not count perm data here"); for (unsigned int id = old_space_id; id < last_space_id; ++id) { old_space_total_live += pointer_delta(_space_info[id].new_top(), _space_info[id].space()->bottom()); @@ -1886,8 +1871,7 @@ } #endif // #ifndef PRODUCT - // Permanent and Old generations. - summarize_space(perm_space_id, maximum_compaction); + // Old generations. summarize_space(old_space_id, maximum_compaction); // Summarize the remaining spaces in the young gen. The initial target space @@ -2013,7 +1997,6 @@ GCCause::Cause gc_cause = heap->gc_cause(); PSYoungGen* young_gen = heap->young_gen(); PSOldGen* old_gen = heap->old_gen(); - PSPermGen* perm_gen = heap->perm_gen(); PSAdaptiveSizePolicy* size_policy = heap->size_policy(); // The scope of casr should end after code that can change @@ -2062,8 +2045,6 @@ // Let the size policy know we're starting size_policy->major_collection_begin(); - // When collecting the permanent generation methodOops may be moving, - // so we either have to flush all bcp data or convert it into bci. CodeCache::gc_prologue(); Threads::gc_prologue(); @@ -2098,10 +2079,6 @@ adjust_roots(); compaction_start.update(); - // Does the perm gen always have to be done serially because - // klasses are used in the update of an object? - compact_perm(vmthread_cm); - compact(); // Reset the mark bitmap, summary data, and do other bookkeeping. Must be @@ -2118,10 +2095,8 @@ gclog_or_tty->print_cr(" collection: %d ", heap->total_collections()); if (Verbose) { - gclog_or_tty->print("old_gen_capacity: %d young_gen_capacity: %d" - " perm_gen_capacity: %d ", - old_gen->capacity_in_bytes(), young_gen->capacity_in_bytes(), - perm_gen->capacity_in_bytes()); + gclog_or_tty->print("old_gen_capacity: %d young_gen_capacity: %d", + old_gen->capacity_in_bytes(), young_gen->capacity_in_bytes()); } } @@ -2142,7 +2117,6 @@ young_gen->used_in_bytes(), young_gen->eden_space()->used_in_bytes(), old_gen->used_in_bytes(), - perm_gen->used_in_bytes(), young_gen->eden_space()->capacity_in_bytes(), old_gen->max_gen_size(), max_eden_size, @@ -2175,8 +2149,8 @@ heap->resize_all_tlabs(); - // We collected the perm gen, so we'll resize it here. - perm_gen->compute_new_size(pre_gc_values.perm_gen_used()); + // Resize the metaspace capactiy after a collection + MetaspaceGC::compute_new_size(); if (TraceGen1Time) accumulated_time()->stop(); @@ -2186,8 +2160,7 @@ young_gen->print_used_change(pre_gc_values.young_gen_used()); old_gen->print_used_change(pre_gc_values.old_gen_used()); heap->print_heap_change(pre_gc_values.heap_used()); - // Print perm gen last (print_heap_change() excludes the perm gen). - perm_gen->print_used_change(pre_gc_values.perm_gen_used()); + MetaspaceAux::print_metaspace_change(pre_gc_values.metadata_used()); } else { heap->print_heap_change(pre_gc_values.heap_used()); } @@ -2205,7 +2178,6 @@ ParCompactionManager::manager_array(int(i)); assert(cm->marking_stack()->is_empty(), "should be empty"); assert(ParCompactionManager::region_list(int(i))->is_empty(), "should be empty"); - assert(cm->revisit_klass_stack()->is_empty(), "should be empty"); } #endif // ASSERT @@ -2219,12 +2191,10 @@ if (VerifyObjectStartArray && VerifyAfterGC) { old_gen->verify_object_start_array(); - perm_gen->verify_object_start_array(); } if (ZapUnusedHeapArea) { old_gen->object_space()->check_mangled_unused_area_complete(); - perm_gen->object_space()->check_mangled_unused_area_complete(); } NOT_PRODUCT(ref_processor()->verify_no_references_recorded()); @@ -2357,6 +2327,9 @@ PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); PSParallelCompact::FollowStackClosure follow_stack_closure(cm); + // Need new claim bits before marking starts. + ClassLoaderDataGraph::clear_claimed_marks(); + { TraceTime tm_m("par mark", print_phases(), true, gclog_or_tty); ParallelScavengeHeap::ParStrongRootsScope psrs; @@ -2407,11 +2380,7 @@ cm->follow_marking_stacks(); // Flush marking stack. // Update subklass/sibling/implementor links of live klasses - // revisit_klass_stack is used in follow_weak_klass_links(). - follow_weak_klass_links(); - - // Revisit memoized MDO's and clear any unmarked weak refs - follow_mdo_weak_refs(); + Klass::clean_weak_klass_links(is_alive_closure()); // Visit interned string tables and delete unmarked oops StringTable::unlink(is_alive_closure()); @@ -2421,6 +2390,39 @@ assert(cm->marking_stacks_empty(), "marking stacks should be empty"); } +void PSParallelCompact::follow_klass(ParCompactionManager* cm, Klass* klass) { + ClassLoaderData* cld = klass->class_loader_data(); + assert(cld->has_defined(klass), "inconsistency!"); + + // The actual processing of the klass is done when we + // traverse the list of Klasses in the class loader data. + PSParallelCompact::follow_class_loader(cm, cld); +} + +void PSParallelCompact::adjust_klass(ParCompactionManager* cm, Klass* klass) { + ClassLoaderData* cld = klass->class_loader_data(); + assert(cld->has_defined(klass), "inconsistency!"); + + // The actual processing of the klass is done when we + // traverse the list of Klasses in the class loader data. + PSParallelCompact::adjust_class_loader(cm, cld); +} + +void PSParallelCompact::follow_class_loader(ParCompactionManager* cm, + ClassLoaderData* cld) { + PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); + PSParallelCompact::FollowKlassClosure follow_klass_closure(&mark_and_push_closure); + + cld->oops_do(&mark_and_push_closure, &follow_klass_closure, true); +} + +void PSParallelCompact::adjust_class_loader(ParCompactionManager* cm, + ClassLoaderData* cld) { + cld->oops_do(PSParallelCompact::adjust_root_pointer_closure(), + PSParallelCompact::adjust_klass_closure(), + true); +} + // This should be moved to the shared markSweep code! class PSAlwaysTrueClosure: public BoolObjectClosure { public: @@ -2433,6 +2435,9 @@ // Adjust the pointers to reflect the new locations TraceTime tm("adjust roots", print_phases(), true, gclog_or_tty); + // Need new claim bits when tracing through and adjusting pointers. + ClassLoaderDataGraph::clear_claimed_marks(); + // General strong roots. Universe::oops_do(adjust_root_pointer_closure()); JNIHandles::oops_do(adjust_root_pointer_closure()); // Global (strong) JNI handles @@ -2443,6 +2448,7 @@ JvmtiExport::oops_do(adjust_root_pointer_closure()); // SO_AllClasses SystemDictionary::oops_do(adjust_root_pointer_closure()); + ClassLoaderDataGraph::oops_do(adjust_root_pointer_closure(), adjust_klass_closure(), true); // Now adjust pointers in remaining weak roots. (All of which should // have been cleared if they pointed to non-surviving objects.) @@ -2460,14 +2466,6 @@ adjust_root_pointer_closure()); } -void PSParallelCompact::compact_perm(ParCompactionManager* cm) { - TraceTime tm("compact perm gen", print_phases(), true, gclog_or_tty); - // trace("4"); - - gc_heap()->perm_gen()->start_array()->reset(); - move_and_update(cm, perm_space_id); -} - void PSParallelCompact::enqueue_region_draining_tasks(GCTaskQueue* q, uint parallel_gc_threads) { @@ -2501,7 +2499,9 @@ // "which" must be 0 <= which < task_count which = 0; - for (unsigned int id = to_space_id; id > perm_space_id; --id) { + // id + 1 is used to test termination so unsigned can + // be used with an old_space_id == 0. + for (unsigned int id = to_space_id; id + 1 > old_space_id; --id) { SpaceInfo* const space_info = _space_info + id; MutableSpace* const space = space_info->space(); HeapWord* const new_top = space_info->new_top(); @@ -2509,9 +2509,8 @@ const size_t beg_region = sd.addr_to_region_idx(space_info->dense_prefix()); const size_t end_region = sd.addr_to_region_idx(sd.region_align_up(new_top)); - assert(end_region > 0, "perm gen cannot be empty"); - - for (size_t cur = end_region - 1; cur >= beg_region; --cur) { + + for (size_t cur = end_region - 1; cur + 1 > beg_region; --cur) { if (sd.region(cur)->claim_unsafe()) { ParCompactionManager::region_list_push(which, cur); @@ -2662,8 +2661,6 @@ #ifdef ASSERT // Verify that all regions have been processed before the deferred updates. - // Note that perm_space_id is skipped; this type of verification is not - // valid until the perm gen is compacted by regions. for (unsigned int id = old_space_id; id < last_space_id; ++id) { verify_complete(SpaceId(id)); } @@ -2722,66 +2719,6 @@ } #endif // #ifdef ASSERT -void -PSParallelCompact::follow_weak_klass_links() { - // All klasses on the revisit stack are marked at this point. - // Update and follow all subklass, sibling and implementor links. - // Check all the stacks here even if not all the workers are active. - // There is no accounting which indicates which stacks might have - // contents to be followed. - if (PrintRevisitStats) { - gclog_or_tty->print_cr("#classes in system dictionary = %d", - SystemDictionary::number_of_classes()); - } - for (uint i = 0; i < ParallelGCThreads + 1; i++) { - ParCompactionManager* cm = ParCompactionManager::manager_array(i); - KeepAliveClosure keep_alive_closure(cm); - Stack* const rks = cm->revisit_klass_stack(); - if (PrintRevisitStats) { - gclog_or_tty->print_cr("Revisit klass stack[%u] length = " SIZE_FORMAT, - i, rks->size()); - } - while (!rks->is_empty()) { - Klass* const k = rks->pop(); - k->follow_weak_klass_links(is_alive_closure(), &keep_alive_closure); - } - - cm->follow_marking_stacks(); - } -} - -void -PSParallelCompact::revisit_weak_klass_link(ParCompactionManager* cm, Klass* k) { - cm->revisit_klass_stack()->push(k); -} - -void PSParallelCompact::revisit_mdo(ParCompactionManager* cm, DataLayout* p) { - cm->revisit_mdo_stack()->push(p); -} - -void PSParallelCompact::follow_mdo_weak_refs() { - // All strongly reachable oops have been marked at this point; - // we can visit and clear any weak references from MDO's which - // we memoized during the strong marking phase. - if (PrintRevisitStats) { - gclog_or_tty->print_cr("#classes in system dictionary = %d", - SystemDictionary::number_of_classes()); - } - for (uint i = 0; i < ParallelGCThreads + 1; i++) { - ParCompactionManager* cm = ParCompactionManager::manager_array(i); - Stack* rms = cm->revisit_mdo_stack(); - if (PrintRevisitStats) { - gclog_or_tty->print_cr("Revisit MDO stack[%u] size = " SIZE_FORMAT, - i, rms->size()); - } - while (!rms->is_empty()) { - rms->pop()->follow_weak_refs(is_alive_closure()); - } - - cm->follow_marking_stacks(); - } -} - #ifdef VALIDATE_MARK_SWEEP @@ -2829,7 +2766,7 @@ _pointer_tracking = true; AdjusterTracker checker; - obj->oop_iterate(&checker); + obj->oop_iterate_no_header(&checker); } } @@ -2842,10 +2779,10 @@ } -void PSParallelCompact::reset_live_oop_tracking(bool at_perm) { +void PSParallelCompact::reset_live_oop_tracking() { if (ValidateMarkSweep) { guarantee((size_t)_live_oops->length() == _live_oops_index, "should be at end of live oops"); - _live_oops_index = at_perm ? _live_oops_index_at_perm : 0; + _live_oops_index = 0; } } @@ -2995,7 +2932,7 @@ PSParallelCompact::SpaceId PSParallelCompact::space_id(HeapWord* addr) { assert(Universe::heap()->is_in_reserved(addr), "addr not in the heap"); - for (unsigned int id = perm_space_id; id < last_space_id; ++id) { + for (unsigned int id = old_space_id; id < last_space_id; ++id) { if (_space_info[id].space()->contains(addr)) { return SpaceId(id); } @@ -3483,12 +3420,3 @@ do_addr(addr); return ParMarkBitMap::incomplete; } - -// Prepare for compaction. This method is executed once -// (i.e., by a single thread) before compaction. -// Save the updated location of the intArrayKlassObj for -// filling holes in the dense prefix. -void PSParallelCompact::compact_prologue() { - _updated_int_array_klass_obj = (klassOop) - summary_data().calc_new_pointer(Universe::intArrayKlassObj()); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -38,7 +38,6 @@ class PSAdaptiveSizePolicy; class PSYoungGen; class PSOldGen; -class PSPermGen; class ParCompactionManager; class ParallelTaskTerminator; class PSParallelCompact; @@ -405,9 +404,6 @@ return calc_new_pointer((HeapWord*) p); } - // Return the updated address for the given klass - klassOop calc_new_klass(klassOop); - #ifdef ASSERT void verify_clear(const PSVirtualSpace* vspace); void verify_clear(); @@ -779,7 +775,7 @@ typedef ParallelCompactData::RegionData RegionData; typedef enum { - perm_space_id, old_space_id, eden_space_id, + old_space_id, eden_space_id, from_space_id, to_space_id, last_space_id } SpaceId; @@ -821,7 +817,7 @@ virtual void do_void(); }; - class AdjustPointerClosure: public OopsInGenClosure { + class AdjustPointerClosure: public OopClosure { private: bool _is_root; public: @@ -832,11 +828,18 @@ virtual void do_code_blob(CodeBlob* cb) const { } }; + class AdjustKlassClosure : public KlassClosure { + public: + void do_klass(Klass* klass); + }; + friend class KeepAliveClosure; friend class FollowStackClosure; friend class AdjustPointerClosure; + friend class AdjustKlassClosure; + friend class FollowKlassClosure; friend class FollowRootClosure; - friend class instanceKlassKlass; + friend class instanceClassLoaderKlass; friend class RefProcTaskProxy; private: @@ -852,12 +855,13 @@ static bool _print_phases; static AdjustPointerClosure _adjust_root_pointer_closure; static AdjustPointerClosure _adjust_pointer_closure; + static AdjustKlassClosure _adjust_klass_closure; // Reference processing (used in ...follow_contents) static ReferenceProcessor* _ref_processor; // Updated location of intArrayKlassObj. - static klassOop _updated_int_array_klass_obj; + static Klass* _updated_int_array_klass_obj; // Values computed at initialization and used by dead_wood_limiter(). static double _dwl_mean; @@ -869,10 +873,6 @@ #endif // #ifdef ASSERT private: - // Closure accessors - static OopClosure* adjust_pointer_closure() { return (OopClosure*)&_adjust_pointer_closure; } - static OopClosure* adjust_root_pointer_closure() { return (OopClosure*)&_adjust_root_pointer_closure; } - static BoolObjectClosure* is_alive_closure() { return (BoolObjectClosure*)&_is_alive_closure; } static void initialize_space_info(); @@ -888,8 +888,6 @@ // Mark live objects static void marking_phase(ParCompactionManager* cm, bool maximum_heap_compaction); - static void follow_weak_klass_links(); - static void follow_mdo_weak_refs(); template static inline void adjust_pointer(T* p, bool is_root); static void adjust_root_pointer(oop* p) { adjust_pointer(p, true); } @@ -981,9 +979,6 @@ // Adjust addresses in roots. Does not adjust addresses in heap. static void adjust_roots(); - // Serial code executed in preparation for the compaction phase. - static void compact_prologue(); - // Move objects to new locations. static void compact_perm(ParCompactionManager* cm); static void compact(); @@ -1049,6 +1044,17 @@ virtual void do_oop(narrowOop* p); }; + // The one and only place to start following the classes. + // Should only be applied to the ClassLoaderData klasses list. + class FollowKlassClosure : public KlassClosure { + private: + MarkAndPushClosure* _mark_and_push_closure; + public: + FollowKlassClosure(MarkAndPushClosure* mark_and_push_closure) : + _mark_and_push_closure(mark_and_push_closure) { } + void do_klass(Klass* klass); + }; + PSParallelCompact(); // Convenient accessor for Universe::heap(). @@ -1066,6 +1072,12 @@ // in the event of a failure. static bool initialize(); + // Closure accessors + static OopClosure* adjust_pointer_closure() { return (OopClosure*)&_adjust_pointer_closure; } + static OopClosure* adjust_root_pointer_closure() { return (OopClosure*)&_adjust_root_pointer_closure; } + static KlassClosure* adjust_klass_closure() { return (KlassClosure*)&_adjust_klass_closure; } + static BoolObjectClosure* is_alive_closure() { return (BoolObjectClosure*)&_is_alive_closure; } + // Public accessors static elapsedTimer* accumulated_time() { return &_accumulated_time; } static unsigned int total_invocations() { return _total_invocations; } @@ -1073,16 +1085,25 @@ // Used to add tasks static GCTaskManager* const gc_task_manager(); - static klassOop updated_int_array_klass_obj() { + static Klass* updated_int_array_klass_obj() { return _updated_int_array_klass_obj; } // Marking support static inline bool mark_obj(oop obj); + static inline bool is_marked(oop obj); // Check mark and maybe push on marking stack template static inline void mark_and_push(ParCompactionManager* cm, T* p); + static void follow_klass(ParCompactionManager* cm, Klass* klass); + static void adjust_klass(ParCompactionManager* cm, Klass* klass); + + static void follow_class_loader(ParCompactionManager* cm, + ClassLoaderData* klass); + static void adjust_class_loader(ParCompactionManager* cm, + ClassLoaderData* klass); + // Compaction support. // Return true if p is in the range [beg_addr, end_addr). static inline bool is_in(HeapWord* p, HeapWord* beg_addr, HeapWord* end_addr); @@ -1094,9 +1115,6 @@ static inline HeapWord* dense_prefix(SpaceId space_id); static inline ObjectStartArray* start_array(SpaceId space_id); - // Return true if the klass should be updated. - static inline bool should_update_klass(klassOop k); - // Move and update the live objects in the specified space. static void move_and_update(ParCompactionManager* cm, SpaceId space_id); @@ -1179,7 +1197,7 @@ static void track_interior_pointers(oop obj); static void check_interior_pointers(); - static void reset_live_oop_tracking(bool at_perm); + static void reset_live_oop_tracking(); static void register_live_oop(oop p, size_t size); static void validate_live_oop(oop p, size_t size); static void live_oop_moved_to(HeapWord* q, size_t size, HeapWord* compaction_top); @@ -1192,13 +1210,6 @@ static void print_new_location_of_heap_address(HeapWord* q); #endif // #ifdef VALIDATE_MARK_SWEEP - // Call backs for class unloading - // Update subklass/sibling/implementor links at end of marking. - static void revisit_weak_klass_link(ParCompactionManager* cm, Klass* k); - - // Clear unmarked oops in MDOs at the end of marking. - static void revisit_mdo(ParCompactionManager* cm, DataLayout* p); - #ifndef PRODUCT // Debugging support. static const char* space_names[last_space_id]; @@ -1231,6 +1242,10 @@ } } +inline bool PSParallelCompact::is_marked(oop obj) { + return mark_bitmap()->is_marked(obj); +} + template inline void PSParallelCompact::follow_root(ParCompactionManager* cm, T* p) { assert(!Universe::heap()->is_in_reserved(p), @@ -1270,8 +1285,7 @@ if (!oopDesc::is_null(heap_oop)) { oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); oop new_obj = (oop)summary_data().calc_new_pointer(obj); - assert(new_obj != NULL || // is forwarding ptr? - obj->is_shared(), // never forwarded? + assert(new_obj != NULL, // is forwarding ptr? "should be forwarded"); // Just always do the update unconditionally? if (new_obj != NULL) { @@ -1353,10 +1367,6 @@ return _space_info[id].start_array(); } -inline bool PSParallelCompact::should_update_klass(klassOop k) { - return ((HeapWord*) k) >= dense_prefix(perm_space_id); -} - #ifdef ASSERT inline void PSParallelCompact::check_new_location(HeapWord* old_addr, HeapWord* new_addr) @@ -1448,8 +1458,7 @@ ParMarkBitMapClosure(PSParallelCompact::mark_bitmap(), cm), _start_array(PSParallelCompact::start_array(space_id)) { - assert(space_id == PSParallelCompact::perm_space_id || - space_id == PSParallelCompact::old_space_id, + assert(space_id == PSParallelCompact::old_space_id, "cannot use FillClosure in the young gen"); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psPermGen.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psPermGen.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" -#include "gc_implementation/parallelScavenge/psMarkSweepDecorator.hpp" -#include "gc_implementation/parallelScavenge/psParallelCompact.hpp" -#include "gc_implementation/parallelScavenge/psPermGen.hpp" -#include "gc_implementation/shared/gcUtil.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "oops/markOop.inline.hpp" - -PSPermGen::PSPermGen(ReservedSpace rs, size_t alignment, - size_t initial_size, size_t min_size, size_t max_size, - const char* gen_name, int level) : - PSOldGen(rs, alignment, initial_size, min_size, max_size, gen_name, level), - _last_used(0) -{ - assert(object_mark_sweep() != NULL, "Sanity"); - - object_mark_sweep()->set_allowed_dead_ratio(PermMarkSweepDeadRatio); - _avg_size = new AdaptivePaddedAverage(AdaptivePermSizeWeight, - PermGenPadding); -} - -HeapWord* PSPermGen::allocate_permanent(size_t size) { - assert_locked_or_safepoint(Heap_lock); - HeapWord* obj = allocate_noexpand(size); - - if (obj == NULL) { - obj = expand_and_allocate(size); - } - - return obj; -} - -void PSPermGen::compute_new_size(size_t used_before_collection) { - // Update our padded average of objects allocated in perm - // gen between collections. - assert(used_before_collection >= _last_used, - "negative allocation amount since last GC?"); - - const size_t alloc_since_last_gc = used_before_collection - _last_used; - _avg_size->sample(alloc_since_last_gc); - - const size_t current_live = used_in_bytes(); - // Stash away the current amount live for the next call to this method. - _last_used = current_live; - - // We have different alignment constraints than the rest of the heap. - const size_t alignment = MAX2(MinPermHeapExpansion, - virtual_space()->alignment()); - - // Compute the desired size: - // The free space is the newly computed padded average, - // so the desired size is what's live + the free space. - size_t desired_size = current_live + (size_t)_avg_size->padded_average(); - desired_size = align_size_up(desired_size, alignment); - - // ...and no larger or smaller than our max and min allowed. - desired_size = MAX2(MIN2(desired_size, _max_gen_size), _min_gen_size); - assert(desired_size <= _max_gen_size, "just checking"); - - const size_t size_before = _virtual_space->committed_size(); - - if (desired_size == size_before) { - // no change, we're done - return; - } - - { - // We'll be growing or shrinking the heap: in either case, - // we need to hold a lock. - MutexLocker x(ExpandHeap_lock); - if (desired_size > size_before) { - const size_t change_bytes = desired_size - size_before; - const size_t aligned_change_bytes = - align_size_up(change_bytes, alignment); - expand_by(aligned_change_bytes); - } else { - // Shrinking - const size_t change_bytes = - size_before - desired_size; - const size_t aligned_change_bytes = align_size_down(change_bytes, alignment); - shrink(aligned_change_bytes); - } - } - - // While this code isn't controlled by AdaptiveSizePolicy, it's - // convenient to see all resizing decsions under the same flag. - if (PrintAdaptiveSizePolicy) { - ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); - assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); - - gclog_or_tty->print_cr("AdaptiveSizePolicy::perm generation size: " - "collection: %d " - "(" SIZE_FORMAT ") -> (" SIZE_FORMAT ") ", - heap->total_collections(), - size_before, _virtual_space->committed_size()); - } -} - -void PSPermGen::precompact() { - // Reset start array first. - _start_array.reset(); - object_mark_sweep()->precompact(); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psPermGen.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psPermGen.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPERMGEN_HPP -#define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPERMGEN_HPP - -#include "gc_implementation/parallelScavenge/psOldGen.hpp" - -class AdaptivePaddedAverage; - -class PSPermGen : public PSOldGen { - friend class VMStructs; - protected: - AdaptivePaddedAverage* _avg_size; // Used for sizing - size_t _last_used; // Amount used at last GC, used for sizing - - public: - // Initialize the generation. - PSPermGen(ReservedSpace rs, size_t alignment, size_t initial_byte_size, - size_t minimum_byte_size, size_t maximum_byte_size, - const char* gen_name, int level); - - // Permanent Gen special allocation. Uses the OldGen allocation - // routines, which should not be directly called on this generation. - HeapWord* allocate_permanent(size_t word_size); - - // Size calculation. - void compute_new_size(size_t used_before_collection); - - // MarkSweep code - virtual void precompact(); - - virtual const char* name() const { return "PSPermGen"; } -}; - -#endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSPERMGEN_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -199,7 +199,6 @@ assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity"); MutableSpace* to_space = heap->young_gen()->to_space(); MutableSpace* old_space = heap->old_gen()->object_space(); - MutableSpace* perm_space = heap->perm_gen()->object_space(); #endif /* ASSERT */ OopStarTaskQueue* const tq = claimed_stack_depth(); @@ -318,11 +317,11 @@ obj = obj->forwardee(); } -#ifdef DEBUG +#ifndef PRODUCT if (TraceScavenge) { gclog_or_tty->print_cr("{%s %s 0x%x (%d)}", "promotion-failure", - obj->blueprint()->internal_name(), + obj->klass()->internal_name(), obj, obj->size()); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -212,13 +212,13 @@ new_obj = o->forwardee(); } -#ifdef DEBUG +#ifndef PRODUCT // This code must come after the CAS test, or it will print incorrect // information. if (TraceScavenge) { - gclog_or_tty->print_cr("{%s %s " PTR_FORMAT " -> " PTR_FORMAT " (" SIZE_FORMAT ")}", + gclog_or_tty->print_cr("{%s %s " PTR_FORMAT " -> " PTR_FORMAT " (%d)}", PSScavenge::should_scavenge(&new_obj) ? "copying" : "tenuring", - new_obj->blueprint()->internal_name(), o, new_obj, new_obj->size()); + new_obj->klass()->internal_name(), o, new_obj, new_obj->size()); } #endif diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -284,7 +284,6 @@ PSYoungGen* young_gen = heap->young_gen(); PSOldGen* old_gen = heap->old_gen(); - PSPermGen* perm_gen = heap->perm_gen(); PSAdaptiveSizePolicy* size_policy = heap->size_policy(); heap->increment_total_collections(); @@ -338,7 +337,6 @@ if (VerifyObjectStartArray && VerifyBeforeGC) { old_gen->verify_object_start_array(); - perm_gen->verify_object_start_array(); } // Verify no unmarked old->young roots @@ -370,12 +368,11 @@ // Reset our survivor overflow. set_survivor_overflow(false); - // We need to save the old/perm top values before + // We need to save the old top values before // creating the promotion_manager. We pass the top // values to the card_table, to prevent it from // straying into the promotion labs. HeapWord* old_top = old_gen->object_space()->top(); - HeapWord* perm_top = perm_gen->object_space()->top(); // Release all previously held resources gc_task_manager()->release_all_resources(); @@ -403,8 +400,6 @@ q->enqueue(new OldToYoungRootsTask(old_gen, old_top, i, stripe_total)); } - q->enqueue(new SerialOldToYoungRootsTask(perm_gen, perm_top)); - q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::universe)); q->enqueue(new ScavengeRootsTask(ScavengeRootsTask::jni_handles)); // We scan the thread roots in parallel @@ -454,13 +449,11 @@ reference_processor()->enqueue_discovered_references(NULL); } - if (!JavaObjectsInPerm) { // Unlink any dead interned Strings StringTable::unlink(&_is_alive_closure); // Process the remaining live ones PSScavengeRootsClosure root_closure(promotion_manager); StringTable::oops_do(&root_closure); - } // Finally, flush the promotion_manager's labs, and deallocate its stacks. PSPromotionManager::post_scavenge(); @@ -503,10 +496,8 @@ heap->total_collections()); if (Verbose) { - gclog_or_tty->print("old_gen_capacity: %d young_gen_capacity: %d" - " perm_gen_capacity: %d ", - old_gen->capacity_in_bytes(), young_gen->capacity_in_bytes(), - perm_gen->capacity_in_bytes()); + gclog_or_tty->print("old_gen_capacity: %d young_gen_capacity: %d", + old_gen->capacity_in_bytes(), young_gen->capacity_in_bytes()); } } @@ -564,7 +555,6 @@ size_policy->compute_generation_free_space(young_gen->used_in_bytes(), young_gen->eden_space()->used_in_bytes(), old_gen->used_in_bytes(), - perm_gen->used_in_bytes(), young_gen->eden_space()->capacity_in_bytes(), old_gen->max_gen_size(), max_eden_size, @@ -614,7 +604,6 @@ if (VerifyObjectStartArray && VerifyAfterGC) { old_gen->verify_object_start_array(); - perm_gen->verify_object_start_array(); } // Verify all old -> young cards are now precise @@ -810,11 +799,8 @@ PSYoungGen* young_gen = heap->young_gen(); PSOldGen* old_gen = heap->old_gen(); - PSPermGen* perm_gen = heap->perm_gen(); // Set boundary between young_gen and old_gen - assert(perm_gen->reserved().end() <= old_gen->object_space()->bottom(), - "perm above old"); assert(old_gen->reserved().end() <= young_gen->eden_space()->bottom(), "old above young"); _young_generation_boundary = young_gen->eden_space()->bottom(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -137,6 +137,8 @@ template inline static void copy_and_push_safe_barrier(PSPromotionManager* pm, T* p); + static void copy_and_push_safe_barrier_from_klass(PSPromotionManager* pm, oop* p); + // Is an object in the young generation // This assumes that the HeapWord argument is in the heap, // so it only checks one side of the complete predicate. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psScavenge.inline.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psScavenge.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psScavenge.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -30,6 +30,7 @@ #include "gc_implementation/parallelScavenge/psPromotionManager.hpp" #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" #include "gc_implementation/parallelScavenge/psScavenge.hpp" +#include "memory/iterator.hpp" inline void PSScavenge::save_to_space_top_before_gc() { ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); @@ -75,10 +76,22 @@ oop new_obj = o->is_forwarded() ? o->forwardee() : pm->copy_to_survivor_space(o); + +#ifndef PRODUCT + // This code must come after the CAS test, or it will print incorrect + // information. + if (TraceScavenge && o->is_forwarded()) { + gclog_or_tty->print_cr("{%s %s " PTR_FORMAT " -> " PTR_FORMAT " (%d)}", + "forwarding", + new_obj->klass()->internal_name(), o, new_obj, new_obj->size()); + } +#endif + oopDesc::encode_store_heap_oop_not_null(p, new_obj); // We cannot mark without test, as some code passes us pointers - // that are outside the heap. + // that are outside the heap. These pointers are either from roots + // or from metadata. if ((!PSScavenge::is_obj_in_young((HeapWord*)p)) && Universe::heap()->is_in_reserved(p)) { if (PSScavenge::is_obj_in_young((HeapWord*)new_obj)) { @@ -108,4 +121,85 @@ typedef PSRootsClosure PSScavengeRootsClosure; typedef PSRootsClosure PSPromoteRootsClosure; +// Scavenges a single oop in a Klass. +class PSScavengeFromKlassClosure: public OopClosure { + private: + PSPromotionManager* _pm; + // Used to redirty a scanned klass if it has oops + // pointing to the young generation after being scanned. + Klass* _scanned_klass; + public: + PSScavengeFromKlassClosure(PSPromotionManager* pm) : _pm(pm), _scanned_klass(NULL) { } + void do_oop(narrowOop* p) { ShouldNotReachHere(); } + void do_oop(oop* p) { + ParallelScavengeHeap* psh = ParallelScavengeHeap::heap(); + assert(!psh->is_in_reserved(p), "GC barrier needed"); + if (PSScavenge::should_scavenge(p)) { + assert(!Universe::heap()->is_in_reserved(p), "Not from meta-data?"); + assert(PSScavenge::should_scavenge(p, true), "revisiting object?"); + + oop o = *p; + oop new_obj; + if (o->is_forwarded()) { + new_obj = o->forwardee(); + } else { + new_obj = _pm->copy_to_survivor_space(o); + } + oopDesc::encode_store_heap_oop_not_null(p, new_obj); + + if (PSScavenge::is_obj_in_young((HeapWord*)new_obj)) { + do_klass_barrier(); + } + } + } + + void set_scanned_klass(Klass* klass) { + assert(_scanned_klass == NULL || klass == NULL, "Should always only handling one klass at a time"); + _scanned_klass = klass; + } + + private: + void do_klass_barrier() { + assert(_scanned_klass != NULL, "Should not be called without having a scanned klass"); + _scanned_klass->record_modified_oops(); + } + +}; + +// Scavenges the oop in a Klass. +class PSScavengeKlassClosure: public KlassClosure { + private: + PSScavengeFromKlassClosure _oop_closure; + protected: + public: + PSScavengeKlassClosure(PSPromotionManager* pm) : _oop_closure(pm) { } + void do_klass(Klass* klass) { + // If the klass has not been dirtied we know that there's + // no references into the young gen and we can skip it. + +#ifndef PRODUCT + if (TraceScavenge) { + ResourceMark rm; + gclog_or_tty->print_cr("PSScavengeKlassClosure::do_klass %p, %s, dirty: %s", + klass, + klass->external_name(), + klass->has_modified_oops() ? "true" : "false"); + } +#endif + + if (klass->has_modified_oops()) { + // Clean the klass since we're going to scavenge all the metadata. + klass->clear_modified_oops(); + + // Setup the promotion manager to redirty this klass + // if references are left in the young gen. + _oop_closure.set_scanned_klass(klass); + + klass->oops_do(&_oop_closure); + + _oop_closure.set_scanned_klass(NULL); + } + } +}; + #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSSCAVENGE_INLINE_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -78,7 +78,13 @@ break; case system_dictionary: + { SystemDictionary::oops_do(&roots_closure); + + // Move this to another root_type? + PSScavengeKlassClosure klass_closure(pm); + ClassLoaderDataGraph::oops_do(&roots_closure, &klass_closure, false); + } break; case management: diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -166,7 +166,7 @@ HeapWord** end_addr() const { return eden_space()->end_addr(); } // Iteration. - void oop_iterate(OopClosure* cl); + void oop_iterate(ExtendedOopClosure* cl); void object_iterate(ObjectClosure* cl); virtual void reset_after_change(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -54,27 +54,6 @@ } } -VM_ParallelGCFailedPermanentAllocation::VM_ParallelGCFailedPermanentAllocation(size_t size, - unsigned int gc_count, unsigned int full_gc_count) : - VM_GC_Operation(gc_count, GCCause::_allocation_failure, full_gc_count, true /* full */), - _size(size), - _result(NULL) -{ -} - -void VM_ParallelGCFailedPermanentAllocation::doit() { - SvcGCMarker sgcm(SvcGCMarker::FULL); - - ParallelScavengeHeap* heap = (ParallelScavengeHeap*)Universe::heap(); - assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "must be a ParallelScavengeHeap"); - - GCCauseSetter gccs(heap, _gc_cause); - _result = heap->failed_permanent_mem_allocate(_size); - if (_result == NULL && GC_locker::is_active_and_needs_gc()) { - set_gc_locked(); - } -} - // Only used for System.gc() calls VM_ParallelGCSystemGC::VM_ParallelGCSystemGC(unsigned int gc_count, unsigned int full_gc_count, @@ -96,6 +75,6 @@ // If (and only if) the scavenge fails, this will invoke a full gc. heap->invoke_scavenge(); } else { - heap->invoke_full_gc(false); + heap->do_full_collection(false); } } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/vmPSOperations.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,22 +45,6 @@ HeapWord* result() const { return _result; } }; -class VM_ParallelGCFailedPermanentAllocation: public VM_GC_Operation { -private: - size_t _size; - HeapWord* _result; - - public: - VM_ParallelGCFailedPermanentAllocation(size_t size, - unsigned int gc_count, - unsigned int full_gc_count); - virtual VMOp_Type type() const { - return VMOp_ParallelGCFailedPermanentAllocation; - } - virtual void doit(); - HeapWord* result() const { return _result; } -}; - class VM_ParallelGCSystemGC: public VM_GC_Operation { public: VM_ParallelGCSystemGC(unsigned int gc_count, unsigned int full_gc_count, diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp --- a/src/share/vm/gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,11 +58,9 @@ nonstatic_field(PSOldGen, _min_gen_size, const size_t) \ nonstatic_field(PSOldGen, _max_gen_size, const size_t) \ \ - nonstatic_field(PSPermGen, _last_used, size_t) \ \ static_field(ParallelScavengeHeap, _young_gen, PSYoungGen*) \ static_field(ParallelScavengeHeap, _old_gen, PSOldGen*) \ - static_field(ParallelScavengeHeap, _perm_gen, PSPermGen*) \ static_field(ParallelScavengeHeap, _psh, ParallelScavengeHeap*) \ \ @@ -81,7 +79,6 @@ declare_type(ASPSYoungGen, PSYoungGen) \ declare_toplevel_type(PSOldGen) \ declare_type(ASPSOldGen, PSOldGen) \ - declare_type(PSPermGen, PSOldGen) \ \ /*****************************/ \ /* Parallel GC pointer types */ \ @@ -94,7 +91,6 @@ declare_toplevel_type(ASPSYoungGen*) \ declare_toplevel_type(PSOldGen*) \ declare_toplevel_type(ASPSOldGen*) \ - declare_toplevel_type(PSPermGen*) \ declare_toplevel_type(ParallelScavengeHeap*) #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_VMSTRUCTS_PARALLELGC_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/shared/cSpaceCounters.cpp --- a/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/shared/cSpaceCounters.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,6 +24,7 @@ #include "precompiled.hpp" #include "gc_implementation/shared/cSpaceCounters.hpp" +#include "memory/metaspace.hpp" #include "memory/resourceArea.hpp" CSpaceCounters::CSpaceCounters(const char* name, int ordinal, size_t max_size, @@ -44,7 +45,7 @@ PerfDataManager::create_string_constant(SUN_GC, cname, name, CHECK); cname = PerfDataManager::counter_name(_name_space, "maxCapacity"); - PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_Bytes, + _max_capacity = PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes, (jlong)max_size, CHECK); cname = PerfDataManager::counter_name(_name_space, "capacity"); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/shared/cSpaceCounters.hpp --- a/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/shared/cSpaceCounters.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,6 +38,7 @@ private: PerfVariable* _capacity; PerfVariable* _used; + PerfVariable* _max_capacity; // Constant PerfData types don't need to retain a reference. // However, it's a good idea to document them here. @@ -55,15 +56,15 @@ if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space, mtInternal); } - inline void update_capacity() { + virtual inline void update_capacity() { _capacity->set_value(_space->capacity()); } - inline void update_used() { + virtual inline void update_used() { _used->set_value(_space->used()); } - inline void update_all() { + virtual inline void update_all() { update_used(); update_capacity(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/shared/concurrentGCThread.cpp --- a/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -175,7 +175,7 @@ {} SurrogateLockerThread* SurrogateLockerThread::make(TRAPS) { - klassOop k = + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK_NULL); instanceKlassHandle klass (THREAD, k); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/shared/immutableSpace.cpp --- a/src/share/vm/gc_implementation/shared/immutableSpace.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/shared/immutableSpace.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -40,7 +40,7 @@ _end = end; } -void ImmutableSpace::oop_iterate(OopClosure* cl) { +void ImmutableSpace::oop_iterate(ExtendedOopClosure* cl) { HeapWord* obj_addr = bottom(); HeapWord* t = end(); // Could call objects iterate, but this is easier. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/shared/immutableSpace.hpp --- a/src/share/vm/gc_implementation/shared/immutableSpace.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/shared/immutableSpace.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -59,7 +59,7 @@ virtual size_t capacity_in_words(Thread*) const { return capacity_in_words(); } // Iteration. - virtual void oop_iterate(OopClosure* cl); + virtual void oop_iterate(ExtendedOopClosure* cl); virtual void object_iterate(ObjectClosure* cl); // Debugging diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/shared/markSweep.cpp --- a/src/share/vm/gc_implementation/shared/markSweep.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/shared/markSweep.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,13 +26,13 @@ #include "compiler/compileBroker.hpp" #include "gc_implementation/shared/markSweep.inline.hpp" #include "gc_interface/collectedHeap.inline.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "oops/objArrayKlass.inline.hpp" #include "oops/oop.inline.hpp" +unsigned int MarkSweep::_total_invocations = 0; + Stack MarkSweep::_marking_stack; -Stack MarkSweep::_revisit_mdo_stack; -Stack MarkSweep::_revisit_klass_stack; Stack MarkSweep::_objarray_stack; Stack MarkSweep::_preserved_oop_stack; @@ -62,47 +62,6 @@ GrowableArray * MarkSweep::_last_gc_live_oops_size = NULL; #endif -void MarkSweep::revisit_weak_klass_link(Klass* k) { - _revisit_klass_stack.push(k); -} - -void MarkSweep::follow_weak_klass_links() { - // All klasses on the revisit stack are marked at this point. - // Update and follow all subklass, sibling and implementor links. - if (PrintRevisitStats) { - gclog_or_tty->print_cr("#classes in system dictionary = %d", - SystemDictionary::number_of_classes()); - gclog_or_tty->print_cr("Revisit klass stack size = " SIZE_FORMAT, - _revisit_klass_stack.size()); - } - while (!_revisit_klass_stack.is_empty()) { - Klass* const k = _revisit_klass_stack.pop(); - k->follow_weak_klass_links(&is_alive, &keep_alive); - } - follow_stack(); -} - -void MarkSweep::revisit_mdo(DataLayout* p) { - _revisit_mdo_stack.push(p); -} - -void MarkSweep::follow_mdo_weak_refs() { - // All strongly reachable oops have been marked at this point; - // we can visit and clear any weak references from MDO's which - // we memoized during the strong marking phase. - assert(_marking_stack.is_empty(), "Marking stack should be empty"); - if (PrintRevisitStats) { - gclog_or_tty->print_cr("#classes in system dictionary = %d", - SystemDictionary::number_of_classes()); - gclog_or_tty->print_cr("Revisit MDO stack size = " SIZE_FORMAT, - _revisit_mdo_stack.size()); - } - while (!_revisit_mdo_stack.is_empty()) { - _revisit_mdo_stack.pop()->follow_weak_refs(&is_alive); - } - follow_stack(); -} - MarkSweep::FollowRootClosure MarkSweep::follow_root_closure; CodeBlobToOopClosure MarkSweep::follow_code_root_closure(&MarkSweep::follow_root_closure, /*do_marking=*/ true); @@ -110,10 +69,46 @@ void MarkSweep::FollowRootClosure::do_oop(narrowOop* p) { follow_root(p); } MarkSweep::MarkAndPushClosure MarkSweep::mark_and_push_closure; +MarkSweep::FollowKlassClosure MarkSweep::follow_klass_closure; +MarkSweep::AdjustKlassClosure MarkSweep::adjust_klass_closure; -void MarkSweep::MarkAndPushClosure::do_oop(oop* p) { assert(*p == NULL || (*p)->is_oop(), ""); mark_and_push(p); } +void MarkSweep::MarkAndPushClosure::do_oop(oop* p) { mark_and_push(p); } void MarkSweep::MarkAndPushClosure::do_oop(narrowOop* p) { mark_and_push(p); } +void MarkSweep::FollowKlassClosure::do_klass(Klass* klass) { + klass->oops_do(&MarkSweep::mark_and_push_closure); +} +void MarkSweep::AdjustKlassClosure::do_klass(Klass* klass) { + klass->oops_do(&MarkSweep::adjust_pointer_closure); +} + +void MarkSweep::follow_klass(Klass* klass) { + ClassLoaderData* cld = klass->class_loader_data(); + assert(cld->has_defined(klass), "inconsistency!"); + + // The actual processing of the klass is done when we + // traverse the list of Klasses in the class loader data. + MarkSweep::follow_class_loader(cld); +} + +void MarkSweep::adjust_klass(Klass* klass) { + ClassLoaderData* cld = klass->class_loader_data(); + assert(cld->has_defined(klass), "inconsistency!"); + + // The actual processing of the klass is done when we + // traverse the list of Klasses in the class loader data. + MarkSweep::adjust_class_loader(cld); +} + +void MarkSweep::follow_class_loader(ClassLoaderData* cld) { + cld->oops_do(&MarkSweep::mark_and_push_closure, &MarkSweep::follow_klass_closure, true); +} + +void MarkSweep::adjust_class_loader(ClassLoaderData* cld) { + cld->oops_do(&MarkSweep::adjust_root_pointer_closure, &MarkSweep::adjust_klass_closure, true); +} + + void MarkSweep::follow_stack() { do { while (!_marking_stack.is_empty()) { @@ -124,7 +119,7 @@ // Process ObjArrays one at a time to avoid marking stack bloat. if (!_objarray_stack.is_empty()) { ObjArrayTask task = _objarray_stack.pop(); - objArrayKlass* const k = (objArrayKlass*)task.obj()->blueprint(); + objArrayKlass* const k = (objArrayKlass*)task.obj()->klass(); k->oop_follow_contents(task.obj(), task.index()); } } while (!_marking_stack.is_empty() || !_objarray_stack.is_empty()); @@ -237,7 +232,7 @@ _pointer_tracking = true; AdjusterTracker checker; - obj->oop_iterate(&checker); + obj->oop_iterate_no_header(&checker); } } @@ -248,10 +243,10 @@ } } -void MarkSweep::reset_live_oop_tracking(bool at_perm) { +void MarkSweep::reset_live_oop_tracking() { if (ValidateMarkSweep) { guarantee((size_t)_live_oops->length() == _live_oops_index, "should be at end of live oops"); - _live_oops_index = at_perm ? _live_oops_index_at_perm : 0; + _live_oops_index = 0; } } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/shared/markSweep.hpp --- a/src/share/vm/gc_implementation/shared/markSweep.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/shared/markSweep.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -76,8 +76,17 @@ public: virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); - virtual const bool should_remember_mdo() const { return true; } - virtual void remember_mdo(DataLayout* p) { MarkSweep::revisit_mdo(p); } + }; + + // The one and only place to start following the classes. + // Should only be applied to the ClassLoaderData klasses list. + class FollowKlassClosure : public KlassClosure { + public: + void do_klass(Klass* klass); + }; + class AdjustKlassClosure : public KlassClosure { + public: + void do_klass(Klass* klass); }; class FollowStackClosure: public VoidClosure { @@ -121,13 +130,12 @@ // Vars // protected: + // Total invocations of a MarkSweep collection + static unsigned int _total_invocations; + // Traversal stacks used during phase1 static Stack _marking_stack; static Stack _objarray_stack; - // Stack for live klasses to revisit at end of marking phase - static Stack _revisit_klass_stack; - // Set (stack) of MDO's to revisit at end of marking phase - static Stack _revisit_mdo_stack; // Space for storing/restoring mark word static Stack _preserved_mark_stack; @@ -167,27 +175,25 @@ #endif // Non public closures - static IsAliveClosure is_alive; static KeepAliveClosure keep_alive; - // Class unloading. Update subklass/sibling/implementor links at end of marking phase. - static void follow_weak_klass_links(); - - // Class unloading. Clear weak refs in MDO's (ProfileData) - // at the end of the marking phase. - static void follow_mdo_weak_refs(); - // Debugging static void trace(const char* msg) PRODUCT_RETURN; public: // Public closures + static IsAliveClosure is_alive; static FollowRootClosure follow_root_closure; static CodeBlobToOopClosure follow_code_root_closure; // => follow_root_closure static MarkAndPushClosure mark_and_push_closure; + static FollowKlassClosure follow_klass_closure; static FollowStackClosure follow_stack_closure; static AdjustPointerClosure adjust_root_pointer_closure; static AdjustPointerClosure adjust_pointer_closure; + static AdjustKlassClosure adjust_klass_closure; + + // Accessors + static unsigned int total_invocations() { return _total_invocations; } // Reference Processing static ReferenceProcessor* const ref_processor() { return _ref_processor; } @@ -196,12 +202,20 @@ static void mark_object(oop obj); // Mark pointer and follow contents. Empty marking stack afterwards. template static inline void follow_root(T* p); + // Check mark and maybe push on marking stack - template static inline void mark_and_push(T* p); + template static void mark_and_push(T* p); + static inline void push_objarray(oop obj, size_t index); static void follow_stack(); // Empty marking stack. + static void follow_klass(Klass* klass); + static void adjust_klass(Klass* klass); + + static void follow_class_loader(ClassLoaderData* cld); + static void adjust_class_loader(ClassLoaderData* cld); + static void preserve_mark(oop p, markOop mark); // Save the mark word so it can be restored later static void adjust_marks(); // Adjust the pointers in the preserved marks table @@ -219,7 +233,7 @@ static void track_interior_pointers(oop obj); static void check_interior_pointers(); - static void reset_live_oop_tracking(bool at_perm); + static void reset_live_oop_tracking(); static void register_live_oop(oop p, size_t size); static void validate_live_oop(oop p, size_t size); static void live_oop_moved_to(HeapWord* q, size_t size, HeapWord* compaction_top); @@ -231,12 +245,6 @@ // tracking down heap stomps. static void print_new_location_of_heap_address(HeapWord* q); #endif - - // Call backs for class unloading - // Update subklass/sibling/implementor links at end of marking. - static void revisit_weak_klass_link(Klass* k); - // For weak refs clearing in MDO's - static void revisit_mdo(DataLayout* p); }; class PreservedMark VALUE_OBJ_CLASS_SPEC { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/shared/markSweep.inline.hpp --- a/src/share/vm/gc_implementation/shared/markSweep.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/shared/markSweep.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -88,9 +88,8 @@ oop new_obj = oop(obj->mark()->decode_pointer()); assert(new_obj != NULL || // is forwarding ptr? obj->mark() == markOopDesc::prototype() || // not gc marked? - (UseBiasedLocking && obj->mark()->has_bias_pattern()) || + (UseBiasedLocking && obj->mark()->has_bias_pattern()), // not gc marked? - obj->is_shared(), // never forwarded? "should be forwarded"); if (new_obj != NULL) { assert(Universe::heap()->is_in_reserved(new_obj), diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/shared/mutableSpace.cpp --- a/src/share/vm/gc_implementation/shared/mutableSpace.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/shared/mutableSpace.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -216,7 +216,7 @@ return (HeapWord*)Atomic::cmpxchg_ptr(obj, top_addr(), expected_top) == expected_top; } -void MutableSpace::oop_iterate(OopClosure* cl) { +void MutableSpace::oop_iterate(ExtendedOopClosure* cl) { HeapWord* obj_addr = bottom(); HeapWord* t = top(); // Could call objects iterate, but this is easier. @@ -225,6 +225,15 @@ } } +void MutableSpace::oop_iterate_no_header(OopClosure* cl) { + HeapWord* obj_addr = bottom(); + HeapWord* t = top(); + // Could call objects iterate, but this is easier. + while (obj_addr < t) { + obj_addr += oop(obj_addr)->oop_iterate_no_header(cl); + } +} + void MutableSpace::object_iterate(ObjectClosure* cl) { HeapWord* p = bottom(); while (p < top()) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/shared/mutableSpace.hpp --- a/src/share/vm/gc_implementation/shared/mutableSpace.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/shared/mutableSpace.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -133,7 +133,8 @@ bool cas_deallocate(HeapWord *obj, size_t size); // Iteration. - void oop_iterate(OopClosure* cl); + void oop_iterate(ExtendedOopClosure* cl); + void oop_iterate_no_header(OopClosure* cl); void object_iterate(ObjectClosure* cl); // Debugging diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/shared/vmGCOperations.cpp --- a/src/share/vm/gc_implementation/shared/vmGCOperations.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/shared/vmGCOperations.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -192,31 +192,69 @@ gch->do_full_collection(gch->must_clear_all_soft_refs(), _max_level); } -void VM_GenCollectForPermanentAllocation::doit() { +void VM_CollectForMetadataAllocation::doit() { SvcGCMarker sgcm(SvcGCMarker::FULL); - SharedHeap* heap = (SharedHeap*)Universe::heap(); + CollectedHeap* heap = Universe::heap(); GCCauseSetter gccs(heap, _gc_cause); - switch (heap->kind()) { - case (CollectedHeap::GenCollectedHeap): { - GenCollectedHeap* gch = (GenCollectedHeap*)heap; - gch->do_full_collection(gch->must_clear_all_soft_refs(), - gch->n_gens() - 1); - break; + + bool do_cms_concurrent = false; + + // Check again if the space is available. Another thread + // may have similarly failed a metadata allocation and induced + // a GC that freed space for the allocation. + if (!MetadataAllocationFailALot) { + _result = _loader_data->metaspace_non_null()->allocate(_size, _mdtype); + } + + if (_result == NULL) { + if (!UseConcMarkSweepGC) { + // Don't clear the soft refs the first time. + heap->collect_as_vm_thread(GCCause::_metadata_GC_threshold); + _result = _loader_data->metaspace_non_null()->allocate(_size, _mdtype); + // Don't do this for now + // This seems too costly to do a second full GC + // Let the metaspace grow instead + // if (_result == NULL) { + // // If allocation fails again, clear soft refs + // heap->collect_as_vm_thread(GCCause::_last_ditch_collection); + // _result = _loader_data->metaspace_non_null()->allocate(_size, _mdtype); + // } + } else { + MetaspaceGC::set_should_concurrent_collect(true); + do_cms_concurrent = true; } -#ifndef SERIALGC - case (CollectedHeap::G1CollectedHeap): { - G1CollectedHeap* g1h = (G1CollectedHeap*)heap; - g1h->do_full_collection(_gc_cause == GCCause::_last_ditch_collection); - break; + if (_result == NULL) { + // If still failing, allow the Metaspace to expand. + // See delta_capacity_until_GC() for explanation of the + // amount of the expansion. + // This should work unless there really is no more space + // or a MaxMetaspaceSize has been specified on the command line. + MetaspaceGC::set_expand_after_GC(true); + size_t before_inc = MetaspaceGC::capacity_until_GC(); + size_t delta_words = MetaspaceGC::delta_capacity_until_GC(_size); + MetaspaceGC::inc_capacity_until_GC(delta_words); + if (PrintGCDetails && Verbose) { + gclog_or_tty->print_cr("Increase capacity to GC from " SIZE_FORMAT + " to " SIZE_FORMAT, before_inc, MetaspaceGC::capacity_until_GC()); + } + _result = _loader_data->metaspace_non_null()->allocate(_size, _mdtype); + if (do_cms_concurrent && _result == NULL) { + // Rather than fail with a metaspace out-of-memory, do a full + // GC for CMS. + heap->collect_as_vm_thread(GCCause::_metadata_GC_threshold); + _result = _loader_data->metaspace_non_null()->allocate(_size, _mdtype); + } + if (_result == NULL) { + if (PrintGCDetails) { + gclog_or_tty->print_cr("\nAfter Metaspace GC failed to allocate size " + SIZE_FORMAT, _size); + } + } } -#endif // SERIALGC - default: - ShouldNotReachHere(); } - _res = heap->perm_gen()->allocate(_size, false); - assert(heap->is_in_reserved_or_null(_res), "result not in heap"); - if (_res == NULL && GC_locker::is_active_and_needs_gc()) { + + if (_result == NULL && GC_locker::is_active_and_needs_gc()) { set_gc_locked(); } } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_implementation/shared/vmGCOperations.hpp --- a/src/share/vm/gc_implementation/shared/vmGCOperations.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_implementation/shared/vmGCOperations.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,7 +42,6 @@ // VM_GenCollectFull // VM_GenCollectFullConcurrent // VM_ParallelGCFailedAllocation -// VM_ParallelGCFailedPermanentAllocation // VM_ParallelGCSystemGC // VM_GC_Operation // - implements methods common to all classes in the hierarchy: @@ -53,9 +52,7 @@ // is specified; and also the attach "inspectheap" operation // // VM_GenCollectForAllocation -// VM_GenCollectForPermanentAllocation // VM_ParallelGCFailedAllocation -// VM_ParallelGCFailedPermanentAllocation // - this operation is invoked when allocation is failed; // operation performs garbage collection and tries to // allocate afterwards; @@ -191,24 +188,27 @@ virtual void doit(); }; -class VM_GenCollectForPermanentAllocation: public VM_GC_Operation { +class VM_CollectForMetadataAllocation: public VM_GC_Operation { private: - HeapWord* _res; + MetaWord* _result; size_t _size; // size of object to be allocated + Metaspace::MetadataType _mdtype; + ClassLoaderData* _loader_data; public: - VM_GenCollectForPermanentAllocation(size_t size, + VM_CollectForMetadataAllocation(ClassLoaderData* loader_data, + size_t size, Metaspace::MetadataType mdtype, unsigned int gc_count_before, unsigned int full_gc_count_before, GCCause::Cause gc_cause) : VM_GC_Operation(gc_count_before, gc_cause, full_gc_count_before, true), - _size(size) { - _res = NULL; - _gc_cause = gc_cause; + _loader_data(loader_data), _size(size), _mdtype(mdtype), _result(NULL) { } - ~VM_GenCollectForPermanentAllocation() {} - virtual VMOp_Type type() const { return VMOp_GenCollectForPermanentAllocation; } + ~VM_CollectForMetadataAllocation() { + MetaspaceGC::set_expand_after_GC(false); + } + virtual VMOp_Type type() const { return VMOp_CollectForMetadataAllocation; } virtual void doit(); - HeapWord* result() const { return _res; } + MetaWord* result() const { return _result; } }; class SvcGCMarker : public StackObj { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_interface/collectedHeap.cpp --- a/src/share/vm/gc_interface/collectedHeap.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_interface/collectedHeap.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -114,6 +114,38 @@ } } +// This interface assumes that it's being called by the +// vm thread. It collects the heap assuming that the +// heap lock is already held and that we are executing in +// the context of the vm thread. +void CollectedHeap::collect_as_vm_thread(GCCause::Cause cause) { + assert(Thread::current()->is_VM_thread(), "Precondition#1"); + assert(Heap_lock->is_locked(), "Precondition#2"); + GCCauseSetter gcs(this, cause); + switch (cause) { + case GCCause::_heap_inspection: + case GCCause::_heap_dump: + case GCCause::_metadata_GC_threshold : { + HandleMark hm; + do_full_collection(false); // don't clear all soft refs + break; + } + case GCCause::_last_ditch_collection: { + HandleMark hm; + do_full_collection(true); // do clear all soft refs + break; + } + default: + ShouldNotReachHere(); // Unexpected use of this function + } +} +MetaWord* CollectedHeap::satisfy_failed_metadata_allocation( + ClassLoaderData* loader_data, + size_t size, Metaspace::MetadataType mdtype) { + return collector_policy()->satisfy_failed_metadata_allocation(loader_data, size, mdtype); +} + + void CollectedHeap::pre_initialize() { // Used for ReduceInitialCardMarks (when COMPILER2 is used); // otherwise remains unused. @@ -215,9 +247,7 @@ assert(is_in(old_obj), "Not in allocated heap"); assert(!can_elide_initializing_store_barrier(old_obj), "Else should have been filtered in new_store_pre_barrier()"); - assert(!is_in_permanent(old_obj), "Sanity: not expected"); assert(old_obj->is_oop(true), "Not an oop"); - assert(old_obj->is_parsable(), "Will not be concurrently parsable"); assert(deferred.word_size() == (size_t)(old_obj->size()), "Mismatch: multiple objects?"); } @@ -470,15 +500,11 @@ assert(!Universe::heap()->is_gc_active(), "Allocation during gc not allowed"); assert(size >= 0, "int won't convert to size_t"); HeapWord* obj; - if (JavaObjectsInPerm) { - obj = common_permanent_mem_allocate_init(size, CHECK_NULL); - } else { assert(ScavengeRootsInCode > 0, "must be"); obj = common_mem_allocate_init(size, CHECK_NULL); - } post_allocation_setup_common(klass, obj); assert(Universe::is_bootstrapping() || - !((oop)obj)->blueprint()->oop_is_array(), "must not be an array"); + !((oop)obj)->is_array(), "must not be an array"); NOT_PRODUCT(Universe::heap()->check_for_bad_heap_word_value(obj, size)); oop mirror = (oop)obj; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_interface/collectedHeap.hpp --- a/src/share/vm/gc_interface/collectedHeap.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_interface/collectedHeap.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -77,7 +77,6 @@ class CollectedHeap : public CHeapObj { friend class VMStructs; friend class IsGCActiveMark; // Block structured external access to _is_gc_active - friend class constantPoolCacheKlass; // allocate() method inserts is_conc_safe #ifdef ASSERT static int _fire_out_of_memory_count; @@ -140,14 +139,6 @@ // is guaranteed initialized to zeros. inline static HeapWord* common_mem_allocate_init(size_t size, TRAPS); - // Same as common_mem version, except memory is allocated in the permanent area - // If there is no permanent area, revert to common_mem_allocate_noinit - inline static HeapWord* common_permanent_mem_allocate_noinit(size_t size, TRAPS); - - // Same as common_mem version, except memory is allocated in the permanent area - // If there is no permanent area, revert to common_mem_allocate_init - inline static HeapWord* common_permanent_mem_allocate_init(size_t size, TRAPS); - // Helper functions for (VM) allocation. inline static void post_allocation_setup_common(KlassHandle klass, HeapWord* obj); inline static void post_allocation_setup_no_klass_install(KlassHandle klass, @@ -221,14 +212,11 @@ // reach, without a garbage collection. virtual bool is_maximal_no_gc() const = 0; - virtual size_t permanent_capacity() const = 0; - virtual size_t permanent_used() const = 0; - // Support for java.lang.Runtime.maxMemory(): return the maximum amount of // memory that the vm could make available for storing 'normal' java objects. // This is based on the reserved address space, but should not include space - // that the vm uses internally for bookkeeping or temporary storage (e.g., - // perm gen space or, in the case of the young gen, one of the survivor + // that the vm uses internally for bookkeeping or temporary storage + // (e.g., in the case of the young gen, one of the survivor // spaces). virtual size_t max_capacity() const = 0; @@ -250,6 +238,15 @@ return p == NULL || is_in(p); } + bool is_in_place(Metadata** p) { + return !Universe::heap()->is_in(p); + } + bool is_in_place(oop* p) { return Universe::heap()->is_in(p); } + bool is_in_place(narrowOop* p) { + oop o = oopDesc::load_decode_heap_oop_not_null(p); + return Universe::heap()->is_in((const void*)o); + } + // Let's define some terms: a "closed" subset of a heap is one that // // 1) contains all currently-allocated objects, and @@ -282,37 +279,12 @@ return p == NULL || is_in_closed_subset(p); } - // XXX is_permanent() and is_in_permanent() should be better named - // to distinguish one from the other. - - // Returns "TRUE" if "p" is allocated as "permanent" data. - // If the heap does not use "permanent" data, returns the same - // value is_in_reserved() would return. - // NOTE: this actually returns true if "p" is in reserved space - // for the space not that it is actually allocated (i.e. in committed - // space). If you need the more conservative answer use is_permanent(). - virtual bool is_in_permanent(const void *p) const = 0; - - #ifdef ASSERT // Returns true if "p" is in the part of the // heap being collected. virtual bool is_in_partial_collection(const void *p) = 0; #endif - bool is_in_permanent_or_null(const void *p) const { - return p == NULL || is_in_permanent(p); - } - - // Returns "TRUE" if "p" is in the committed area of "permanent" data. - // If the heap does not use "permanent" data, returns the same - // value is_in() would return. - virtual bool is_permanent(const void *p) const = 0; - - bool is_permanent_or_null(const void *p) const { - return p == NULL || is_permanent(p); - } - // An object is scavengable if its location may move during a scavenge. // (A scavenge is a GC which is not a full GC.) virtual bool is_scavengable(const void *p) = 0; @@ -320,7 +292,7 @@ // Returns "TRUE" if "p" is a method oop in the // current heap, with high probability. This predicate // is not stable, in general. - bool is_valid_method(oop p) const; + bool is_valid_method(Method* p) const; void set_gc_cause(GCCause::Cause v) { if (UsePerfData) { @@ -338,11 +310,6 @@ // May be overridden to set additional parallelism. virtual void set_par_threads(uint t) { _n_par_threads = t; }; - // Preload classes into the shared portion of the heap, and then dump - // that data to a file so that it can be loaded directly by another - // VM (then terminate). - virtual void preload_and_dump(TRAPS) { ShouldNotReachHere(); } - // Allocate and initialize instances of Class static oop Class_obj_allocate(KlassHandle klass, int size, KlassHandle real_klass, TRAPS); @@ -351,30 +318,15 @@ inline static oop array_allocate(KlassHandle klass, int size, int length, TRAPS); inline static oop array_allocate_nozero(KlassHandle klass, int size, int length, TRAPS); - // Special obj/array allocation facilities. - // Some heaps may want to manage "permanent" data uniquely. These default - // to the general routines if the heap does not support such handling. - inline static oop permanent_obj_allocate(KlassHandle klass, int size, TRAPS); - // permanent_obj_allocate_no_klass_install() does not do the installation of - // the klass pointer in the newly created object (as permanent_obj_allocate() - // above does). This allows for a delay in the installation of the klass - // pointer that is needed during the create of klassKlass's. The - // method post_allocation_install_obj_klass() is used to install the - // klass pointer. - inline static oop permanent_obj_allocate_no_klass_install(KlassHandle klass, - int size, - TRAPS); - inline static void post_allocation_install_obj_klass(KlassHandle klass, oop obj); - inline static oop permanent_array_allocate(KlassHandle klass, int size, int length, TRAPS); + inline static void post_allocation_install_obj_klass(KlassHandle klass, + oop obj); // Raw memory allocation facilities // The obj and array allocate methods are covers for these methods. - // The permanent allocation method should default to mem_allocate if - // permanent memory isn't supported. mem_allocate() should never be + // mem_allocate() should never be // called to allocate TLABs, only individual objects. virtual HeapWord* mem_allocate(size_t size, bool* gc_overhead_limit_was_exceeded) = 0; - virtual HeapWord* permanent_mem_allocate(size_t size) = 0; // Utilities for turning raw memory into filler objects. // @@ -504,11 +456,6 @@ // remembered set. virtual void flush_deferred_store_barrier(JavaThread* thread); - // Can a compiler elide a store barrier when it writes - // a permanent oop into the heap? Applies when the compiler - // is storing x to the heap, where x->is_perm() is true. - virtual bool can_elide_permanent_oop_store_barriers() const = 0; - // Does this heap support heap inspection (+PrintClassHistogram?) virtual bool supports_heap_inspection() const = 0; @@ -517,11 +464,19 @@ // "CollectedHeap" supports. virtual void collect(GCCause::Cause cause) = 0; + // Perform a full collection + virtual void do_full_collection(bool clear_all_soft_refs) = 0; + // This interface assumes that it's being called by the // vm thread. It collects the heap assuming that the // heap lock is already held and that we are executing in // the context of the vm thread. - virtual void collect_as_vm_thread(GCCause::Cause cause) = 0; + virtual void collect_as_vm_thread(GCCause::Cause cause); + + // Callback from VM_CollectForMetadataAllocation operation. + MetaWord* satisfy_failed_metadata_allocation(ClassLoaderData* loader_data, + size_t size, + Metaspace::MetadataType mdtype); // Returns the barrier set for this heap BarrierSet* barrier_set() { return _barrier_set; } @@ -552,28 +507,19 @@ // Return the CollectorPolicy for the heap virtual CollectorPolicy* collector_policy() const = 0; + void oop_iterate_no_header(OopClosure* cl); + // Iterate over all the ref-containing fields of all objects, calling - // "cl.do_oop" on each. This includes objects in permanent memory. - virtual void oop_iterate(OopClosure* cl) = 0; + // "cl.do_oop" on each. + virtual void oop_iterate(ExtendedOopClosure* cl) = 0; // Iterate over all objects, calling "cl.do_object" on each. - // This includes objects in permanent memory. virtual void object_iterate(ObjectClosure* cl) = 0; // Similar to object_iterate() except iterates only // over live objects. virtual void safe_object_iterate(ObjectClosure* cl) = 0; - // Behaves the same as oop_iterate, except only traverses - // interior pointers contained in permanent memory. If there - // is no permanent memory, does nothing. - virtual void permanent_oop_iterate(OopClosure* cl) = 0; - - // Behaves the same as object_iterate, except only traverses - // object contained in permanent memory. If there is no - // permanent memory, does nothing. - virtual void permanent_object_iterate(ObjectClosure* cl) = 0; - // NOTE! There is no requirement that a collector implement these // functions. // diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_interface/collectedHeap.inline.hpp --- a/src/share/vm/gc_interface/collectedHeap.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_interface/collectedHeap.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -74,11 +74,10 @@ // and the beginning of the world. assert(klass() != NULL || !Universe::is_fully_initialized(), "NULL klass"); assert(klass() == NULL || klass()->is_klass(), "not a klass"); - assert(klass() == NULL || klass()->klass_part() != NULL, "not a klass"); assert(obj != NULL, "NULL object pointer"); obj->set_klass(klass()); - assert(!Universe::is_fully_initialized() || obj->blueprint() != NULL, - "missing blueprint"); + assert(!Universe::is_fully_initialized() || obj->klass() != NULL, + "missing klass"); } // Support for jvmti and dtrace @@ -91,7 +90,7 @@ if (DTraceAllocProbes) { // support for Dtrace object alloc event (no-op most of the time) - if (klass() != NULL && klass()->klass_part()->name() != NULL) { + if (klass() != NULL && klass()->name() != NULL) { SharedRuntime::dtrace_object_alloc(obj); } } @@ -101,7 +100,7 @@ HeapWord* obj) { post_allocation_setup_common(klass, obj); assert(Universe::is_bootstrapping() || - !((oop)obj)->blueprint()->oop_is_array(), "must not be an array"); + !((oop)obj)->is_array(), "must not be an array"); // notify jvmti and dtrace post_allocation_notify(klass, (oop)obj); } @@ -115,7 +114,7 @@ assert(length >= 0, "length should be non-negative"); ((arrayOop)obj)->set_length(length); post_allocation_setup_common(klass, obj); - assert(((oop)obj)->blueprint()->oop_is_array(), "must be an array"); + assert(((oop)obj)->is_array(), "must be an array"); // notify jvmti and dtrace (must be after length is set for dtrace) post_allocation_notify(klass, (oop)obj); } @@ -184,49 +183,6 @@ return obj; } -// Need to investigate, do we really want to throw OOM exception here? -HeapWord* CollectedHeap::common_permanent_mem_allocate_noinit(size_t size, TRAPS) { - if (HAS_PENDING_EXCEPTION) { - NOT_PRODUCT(guarantee(false, "Should not allocate with exception pending")); - return NULL; // caller does a CHECK_NULL too - } - -#ifdef ASSERT - if (CIFireOOMAt > 0 && THREAD->is_Compiler_thread() && - ++_fire_out_of_memory_count >= CIFireOOMAt) { - // For testing of OOM handling in the CI throw an OOM and see how - // it does. Historically improper handling of these has resulted - // in crashes which we really don't want to have in the CI. - THROW_OOP_0(Universe::out_of_memory_error_perm_gen()); - } -#endif - - HeapWord* result = Universe::heap()->permanent_mem_allocate(size); - if (result != NULL) { - NOT_PRODUCT(Universe::heap()-> - check_for_non_bad_heap_word_value(result, size)); - assert(!HAS_PENDING_EXCEPTION, - "Unexpected exception, will result in uninitialized storage"); - return result; - } - // -XX:+HeapDumpOnOutOfMemoryError and -XX:OnOutOfMemoryError support - report_java_out_of_memory("PermGen space"); - - if (JvmtiExport::should_post_resource_exhausted()) { - JvmtiExport::post_resource_exhausted( - JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR, - "PermGen space"); - } - - THROW_OOP_0(Universe::out_of_memory_error_perm_gen()); -} - -HeapWord* CollectedHeap::common_permanent_mem_allocate_init(size_t size, TRAPS) { - HeapWord* obj = common_permanent_mem_allocate_noinit(size, CHECK_NULL); - init_obj(obj, size); - return obj; -} - HeapWord* CollectedHeap::allocate_from_tlab(Thread* thread, size_t size) { assert(UseTLAB, "should use UseTLAB"); @@ -286,42 +242,6 @@ return (oop)obj; } -oop CollectedHeap::permanent_obj_allocate(KlassHandle klass, int size, TRAPS) { - oop obj = permanent_obj_allocate_no_klass_install(klass, size, CHECK_NULL); - post_allocation_install_obj_klass(klass, obj); - NOT_PRODUCT(Universe::heap()->check_for_bad_heap_word_value((HeapWord*) obj, - size)); - return obj; -} - -oop CollectedHeap::permanent_obj_allocate_no_klass_install(KlassHandle klass, - int size, - TRAPS) { - debug_only(check_for_valid_allocation_state()); - assert(!Universe::heap()->is_gc_active(), "Allocation during gc not allowed"); - assert(size >= 0, "int won't convert to size_t"); - HeapWord* obj = common_permanent_mem_allocate_init(size, CHECK_NULL); - post_allocation_setup_no_klass_install(klass, obj); -#ifndef PRODUCT - const size_t hs = oopDesc::header_size(); - Universe::heap()->check_for_bad_heap_word_value(obj+hs, size-hs); -#endif - return (oop)obj; -} - -oop CollectedHeap::permanent_array_allocate(KlassHandle klass, - int size, - int length, - TRAPS) { - debug_only(check_for_valid_allocation_state()); - assert(!Universe::heap()->is_gc_active(), "Allocation during gc not allowed"); - assert(size >= 0, "int won't convert to size_t"); - HeapWord* obj = common_permanent_mem_allocate_init(size, CHECK_NULL); - post_allocation_setup_array(klass, obj, length); - NOT_PRODUCT(Universe::heap()->check_for_bad_heap_word_value(obj, size)); - return (oop)obj; -} - // Returns "TRUE" if "p" is a method oop in the // current heap with high probability. NOTE: The main // current consumers of this interface are Forte:: @@ -334,18 +254,12 @@ // predicate is_valid_method() is not stable, so // it is possible that by the time "p" is used, it // is no longer valid. -inline bool CollectedHeap::is_valid_method(oop p) const { +inline bool CollectedHeap::is_valid_method(Method* p) const { return p != NULL && - // Check whether it is aligned at a HeapWord boundary. - Space::is_aligned(p) && - - // Check whether "method" is in the allocated part of the - // permanent generation -- this needs to be checked before - // p->klass() below to avoid a SEGV (but see below - // for a potential window of vulnerability). - is_permanent((void*)p) && + // Check whether "method" is metadata + p->is_metadata() && // See if GC is active; however, there is still an // apparently unavoidable window after this call @@ -354,10 +268,14 @@ // it's a risk the client must accept. !is_gc_active() && - // Check that p is a methodOop. - p->klass() == Universe::methodKlassObj(); + // Check that p is a Method*. + p->is_method(); } +inline void CollectedHeap::oop_iterate_no_header(OopClosure* cl) { + NoHeaderExtendedOopClosure no_header_cl(cl); + oop_iterate(&no_header_cl); +} #ifndef PRODUCT diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_interface/gcCause.cpp --- a/src/share/vm/gc_interface/gcCause.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_interface/gcCause.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -60,8 +60,8 @@ case _tenured_generation_full: return "Tenured Generation Full"; - case _permanent_generation_full: - return "Permanent Generation Full"; + case _metadata_GC_threshold: + return "Metadata GC Threshold"; case _cms_generation_full: return "CMS Generation Full"; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/gc_interface/gcCause.hpp --- a/src/share/vm/gc_interface/gcCause.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/gc_interface/gcCause.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -55,7 +55,7 @@ /* implementation specific */ _tenured_generation_full, - _permanent_generation_full, + _metadata_GC_threshold, _cms_generation_full, _cms_initial_mark, diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/abstractInterpreter.hpp --- a/src/share/vm/interpreter/abstractInterpreter.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/abstractInterpreter.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -176,21 +176,21 @@ // Activation size in words for a method that is just being called. // Parameters haven't been pushed so count them too. - static int size_top_interpreter_activation(methodOop method); + static int size_top_interpreter_activation(Method* method); // Deoptimization support // Compute the entry address for continuation after - static address deopt_continue_after_entry(methodOop method, + static address deopt_continue_after_entry(Method* method, address bcp, int callee_parameters, bool is_top_frame); // Compute the entry address for reexecution - static address deopt_reexecute_entry(methodOop method, address bcp); + static address deopt_reexecute_entry(Method* method, address bcp); // Deoptimization should reexecute this bytecode static bool bytecode_should_reexecute(Bytecodes::Code code); // share implementation of size_activation and layout_activation: - static int size_activation(methodOop method, + static int size_activation(Method* method, int temps, int popframe_args, int monitors, @@ -210,7 +210,7 @@ is_top_frame); } - static int layout_activation(methodOop method, + static int layout_activation(Method* method, int temps, int popframe_args, int monitors, diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/bytecode.cpp --- a/src/share/vm/interpreter/bytecode.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/bytecode.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "interpreter/bytecode.hpp" #include "interpreter/linkResolver.hpp" -#include "oops/constantPoolOop.hpp" +#include "oops/constantPool.hpp" #include "oops/oop.inline.hpp" #include "runtime/fieldType.hpp" #include "runtime/handles.inline.hpp" @@ -159,7 +159,7 @@ Handle Bytecode_invoke::appendix(TRAPS) { ConstantPoolCacheEntry* cpce = cpcache_entry(); if (cpce->has_appendix()) - return Handle(THREAD, cpce->f1_appendix()); + return Handle(THREAD, cpce->appendix_if_resolved(constants())); return Handle(); // usual case } @@ -179,11 +179,7 @@ ConstantPoolCacheEntry* Bytecode_member_ref::cpcache_entry() const { int index = this->index(); - DEBUG_ONLY({ - if (!has_index_u4(code())) - index = constantPoolOopDesc::get_cpcache_index(index); - }); - return cpcache()->entry_at(index); + return cpcache()->entry_at(ConstantPool::decode_cpcache_index(index, true)); } // Implementation of Bytecode_field @@ -207,7 +203,7 @@ int Bytecode_loadconstant::pool_index() const { int index = raw_index(); if (has_cache_index()) { - return _method->constants()->cache()->entry_at(index)->constant_pool_index(); + return _method->constants()->object_to_cp_index(index); } return index; } @@ -221,7 +217,7 @@ oop Bytecode_loadconstant::resolve_constant(TRAPS) const { assert(_method.not_null(), "must supply method to resolve constant"); int index = raw_index(); - constantPoolOop constants = _method->constants(); + ConstantPool* constants = _method->constants(); if (has_cache_index()) { return constants->resolve_cached_constant_at(index, THREAD); } else { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/bytecode.hpp --- a/src/share/vm/interpreter/bytecode.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/bytecode.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ #include "interpreter/bytecodes.hpp" #include "memory/allocation.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #ifdef TARGET_ARCH_x86 # include "bytes_x86.hpp" #endif @@ -68,8 +68,8 @@ int get_native_u4_at (int offset) const { return Bytes::get_native_u4(addr_at(offset)); } public: - Bytecode(methodOop method, address bcp): _bcp(bcp), _code(Bytecodes::code_at(method, addr_at(0))) { - assert(method != NULL, "this form requires a valid methodOop"); + Bytecode(Method* method, address bcp): _bcp(bcp), _code(Bytecodes::code_at(method, addr_at(0))) { + assert(method != NULL, "this form requires a valid Method*"); } // Defined in ciStreams.hpp inline Bytecode(const ciBytecodeStream* stream, address bcp = NULL); @@ -96,11 +96,11 @@ } int get_index_u1_cpcache(Bytecodes::Code bc) const { assert_same_format_as(bc); assert_index_size(1, bc); - return *(jubyte*)addr_at(1) + constantPoolOopDesc::CPCACHE_INDEX_TAG; + return *(jubyte*)addr_at(1) + ConstantPool::CPCACHE_INDEX_TAG; } int get_index_u2_cpcache(Bytecodes::Code bc) const { assert_same_format_as(bc); assert_index_size(2, bc); assert_native_index(bc); - return Bytes::get_native_u2(addr_at(1)) + constantPoolOopDesc::CPCACHE_INDEX_TAG; + return Bytes::get_native_u2(addr_at(1)) + ConstantPool::CPCACHE_INDEX_TAG; } int get_index_u4(Bytecodes::Code bc) const { assert_same_format_as(bc); assert_index_size(4, bc); @@ -158,7 +158,7 @@ class Bytecode_lookupswitch: public Bytecode { public: - Bytecode_lookupswitch(methodOop method, address bcp): Bytecode(method, bcp) { verify(); } + Bytecode_lookupswitch(Method* method, address bcp): Bytecode(method, bcp) { verify(); } // Defined in ciStreams.hpp inline Bytecode_lookupswitch(const ciBytecodeStream* stream); void verify() const PRODUCT_RETURN; @@ -174,7 +174,7 @@ class Bytecode_tableswitch: public Bytecode { public: - Bytecode_tableswitch(methodOop method, address bcp): Bytecode(method, bcp) { verify(); } + Bytecode_tableswitch(Method* method, address bcp): Bytecode(method, bcp) { verify(); } // Defined in ciStreams.hpp inline Bytecode_tableswitch(const ciBytecodeStream* stream); void verify() const PRODUCT_RETURN; @@ -196,8 +196,8 @@ Bytecode_member_ref(methodHandle method, int bci) : Bytecode(method(), method()->bcp_from(bci)), _method(method) {} methodHandle method() const { return _method; } - constantPoolOop constants() const { return _method->constants(); } - constantPoolCacheOop cpcache() const { return _method->constants()->cache(); } + ConstantPool* constants() const { return _method->constants(); } + ConstantPoolCache* cpcache() const { return _method->constants()->cache(); } ConstantPoolCacheEntry* cpcache_entry() const; public: @@ -278,7 +278,7 @@ // Abstraction for checkcast class Bytecode_checkcast: public Bytecode { public: - Bytecode_checkcast(methodOop method, address bcp): Bytecode(method, bcp) { verify(); } + Bytecode_checkcast(Method* method, address bcp): Bytecode(method, bcp) { verify(); } void verify() const { assert(Bytecodes::java_code(code()) == Bytecodes::_checkcast, "check checkcast"); } // Returns index @@ -288,7 +288,7 @@ // Abstraction for instanceof class Bytecode_instanceof: public Bytecode { public: - Bytecode_instanceof(methodOop method, address bcp): Bytecode(method, bcp) { verify(); } + Bytecode_instanceof(Method* method, address bcp): Bytecode(method, bcp) { verify(); } void verify() const { assert(code() == Bytecodes::_instanceof, "check instanceof"); } // Returns index @@ -297,7 +297,7 @@ class Bytecode_new: public Bytecode { public: - Bytecode_new(methodOop method, address bcp): Bytecode(method, bcp) { verify(); } + Bytecode_new(Method* method, address bcp): Bytecode(method, bcp) { verify(); } void verify() const { assert(java_code() == Bytecodes::_new, "check new"); } // Returns index @@ -306,7 +306,7 @@ class Bytecode_multianewarray: public Bytecode { public: - Bytecode_multianewarray(methodOop method, address bcp): Bytecode(method, bcp) { verify(); } + Bytecode_multianewarray(Method* method, address bcp): Bytecode(method, bcp) { verify(); } void verify() const { assert(java_code() == Bytecodes::_multianewarray, "check new"); } // Returns index @@ -315,7 +315,7 @@ class Bytecode_anewarray: public Bytecode { public: - Bytecode_anewarray(methodOop method, address bcp): Bytecode(method, bcp) { verify(); } + Bytecode_anewarray(Method* method, address bcp): Bytecode(method, bcp) { verify(); } void verify() const { assert(java_code() == Bytecodes::_anewarray, "check anewarray"); } // Returns index @@ -340,11 +340,11 @@ stdc == Bytecodes::_ldc2_w, "load constant"); } - // Only non-standard bytecodes (fast_aldc) have CP cache indexes. + // Only non-standard bytecodes (fast_aldc) have reference cache indexes. bool has_cache_index() const { return code() >= Bytecodes::number_of_java_codes; } int pool_index() const; // index into constant pool - int cache_index() const { // index into CP cache (or -1 if none) + int cache_index() const { // index into reference cache (or -1 if none) return has_cache_index() ? raw_index() : -1; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/bytecodeInterpreter.cpp --- a/src/share/vm/interpreter/bytecodeInterpreter.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/bytecodeInterpreter.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -490,7 +490,7 @@ register address pc = istate->bcp(); register jubyte opcode; register intptr_t* locals = istate->locals(); - register constantPoolCacheOop cp = istate->constants(); // method()->constants()->cache() + register ConstantPoolCache* cp = istate->constants(); // method()->constants()->cache() #ifdef LOTS_OF_REGS register JavaThread* THREAD = istate->thread(); register volatile jbyte* BYTE_MAP_BASE = _byte_map_base; @@ -679,7 +679,7 @@ // The bias pattern is present in the object's header. Need to check // whether the bias owner and the epoch are both still current. intptr_t xx = ((intptr_t) THREAD) ^ (intptr_t) mark; - xx = (intptr_t) rcvr->klass()->klass_part()->prototype_header() ^ xx; + xx = (intptr_t) rcvr->klass()->prototype_header() ^ xx; intptr_t yy = (xx & ~((int) markOopDesc::age_mask_in_place)); if (yy != 0 ) { // At this point we know that the header has the bias pattern and @@ -723,8 +723,8 @@ // value as the comparison value when doing the cas to acquire the // bias in the current epoch. In other words, we allow transfer of // the bias from one thread to another directly in this situation. - xx = (intptr_t) rcvr->klass()->klass_part()->prototype_header() | (intptr_t) THREAD; - if (Atomic::cmpxchg_ptr((intptr_t)THREAD | (intptr_t) rcvr->klass()->klass_part()->prototype_header(), + xx = (intptr_t) rcvr->klass()->prototype_header() | (intptr_t) THREAD; + if (Atomic::cmpxchg_ptr((intptr_t)THREAD | (intptr_t) rcvr->klass()->prototype_header(), (intptr_t*) rcvr->mark_addr(), (intptr_t) mark) != (intptr_t) mark) { CALL_VM(InterpreterRuntime::monitorenter(THREAD, mon), handle_exception); @@ -741,8 +741,8 @@ // bias of this particular object, so it's okay to continue in the // normal locking code. // - xx = (intptr_t) rcvr->klass()->klass_part()->prototype_header() | (intptr_t) THREAD; - if (Atomic::cmpxchg_ptr(rcvr->klass()->klass_part()->prototype_header(), + xx = (intptr_t) rcvr->klass()->prototype_header() | (intptr_t) THREAD; + if (Atomic::cmpxchg_ptr(rcvr->klass()->prototype_header(), (intptr_t*) rcvr->mark_addr(), mark) == mark) { // (*counters->revoked_lock_entry_count_addr())++; @@ -1530,7 +1530,7 @@ oop rcvr = LOCALS_OBJECT(0); VERIFY_OOP(rcvr); - if (rcvr->klass()->klass_part()->has_finalizer()) { + if (rcvr->klass()->has_finalizer()) { CALL_VM(InterpreterRuntime::register_finalizer(THREAD, rcvr), handle_exception); } goto handle_return; @@ -1625,14 +1625,13 @@ // arrObj, index are set if (rhsObject != NULL) { /* Check assignability of rhsObject into arrObj */ - klassOop rhsKlassOop = rhsObject->klass(); // EBX (subclass) - assert(arrObj->klass()->klass()->klass_part()->oop_is_objArrayKlass(), "Ack not an objArrayKlass"); - klassOop elemKlassOop = ((objArrayKlass*) arrObj->klass()->klass_part())->element_klass(); // superklass EAX + Klass* rhsKlassOop = rhsObject->klass(); // EBX (subclass) + Klass* elemKlassOop = objArrayKlass::cast(arrObj->klass())->element_klass(); // superklass EAX // // Check for compatibilty. This check must not GC!! // Seems way more expensive now that we must dispatch // - if (rhsKlassOop != elemKlassOop && !rhsKlassOop->klass_part()->is_subtype_of(elemKlassOop)) { // ebx->is... + if (rhsKlassOop != elemKlassOop && !rhsKlassOop->is_subtype_of(elemKlassOop)) { // ebx->is... VM_JAVA_ERROR(vmSymbols::java_lang_ArrayStoreException(), ""); } } @@ -1774,7 +1773,8 @@ oop obj; if ((Bytecodes::Code)opcode == Bytecodes::_getstatic) { - obj = (oop) cache->f1_as_instance(); + Klass* k = (Klass*) cache->f1(); + obj = k->java_mirror(); MORE_STACK(1); // Assume single slot push } else { obj = (oop) STACK_OBJECT(-1); @@ -1885,7 +1885,8 @@ --count; } if ((Bytecodes::Code)opcode == Bytecodes::_putstatic) { - obj = (oop) cache->f1_as_instance(); + Klass* k = (Klass*) cache->f1(); + obj = k->java_mirror(); } else { --count; obj = (oop) STACK_OBJECT(count); @@ -1944,14 +1945,14 @@ CASE(_new): { u2 index = Bytes::get_Java_u2(pc+1); - constantPoolOop constants = istate->method()->constants(); + ConstantPool* constants = istate->method()->constants(); if (!constants->tag_at(index).is_unresolved_klass()) { // Make sure klass is initialized and doesn't have a finalizer - oop entry = constants->slot_at(index).get_oop(); + Klass* entry = constants->slot_at(index).get_klass(); assert(entry->is_klass(), "Should be resolved klass"); - klassOop k_entry = (klassOop) entry; - assert(k_entry->klass_part()->oop_is_instance(), "Should be instanceKlass"); - instanceKlass* ik = (instanceKlass*) k_entry->klass_part(); + Klass* k_entry = (Klass*) entry; + assert(k_entry->oop_is_instance(), "Should be InstanceKlass"); + InstanceKlass* ik = (InstanceKlass*) k_entry; if ( ik->is_initialized() && ik->can_be_fastpath_allocated() ) { size_t obj_size = ik->size_helper(); oop result = NULL; @@ -2037,14 +2038,14 @@ if (METHOD->constants()->tag_at(index).is_unresolved_klass()) { CALL_VM(InterpreterRuntime::quicken_io_cc(THREAD), handle_exception); } - klassOop klassOf = (klassOop) METHOD->constants()->slot_at(index).get_oop(); - klassOop objKlassOop = STACK_OBJECT(-1)->klass(); //ebx + Klass* klassOf = (Klass*) METHOD->constants()->slot_at(index).get_klass(); + Klass* objKlassOop = STACK_OBJECT(-1)->klass(); //ebx // // Check for compatibilty. This check must not GC!! // Seems way more expensive now that we must dispatch // if (objKlassOop != klassOf && - !objKlassOop->klass_part()->is_subtype_of(klassOf)) { + !objKlassOop->is_subtype_of(klassOf)) { ResourceMark rm(THREAD); const char* objName = Klass::cast(objKlassOop)->external_name(); const char* klassName = Klass::cast(klassOf)->external_name(); @@ -2072,13 +2073,13 @@ if (METHOD->constants()->tag_at(index).is_unresolved_klass()) { CALL_VM(InterpreterRuntime::quicken_io_cc(THREAD), handle_exception); } - klassOop klassOf = (klassOop) METHOD->constants()->slot_at(index).get_oop(); - klassOop objKlassOop = STACK_OBJECT(-1)->klass(); + Klass* klassOf = (Klass*) METHOD->constants()->slot_at(index).get_klass(); + Klass* objKlassOop = STACK_OBJECT(-1)->klass(); // // Check for compatibilty. This check must not GC!! // Seems way more expensive now that we must dispatch // - if ( objKlassOop == klassOf || objKlassOop->klass_part()->is_subtype_of(klassOf)) { + if ( objKlassOop == klassOf || objKlassOop->is_subtype_of(klassOf)) { SET_STACK_INT(1, -1); } else { SET_STACK_INT(0, -1); @@ -2100,7 +2101,7 @@ wide = true; } - constantPoolOop constants = METHOD->constants(); + ConstantPool* constants = METHOD->constants(); switch (constants->tag_at(index).value()) { case JVM_CONSTANT_Integer: SET_STACK_INT(constants->int_at(index), 0); @@ -2111,16 +2112,24 @@ break; case JVM_CONSTANT_String: - VERIFY_OOP(constants->resolved_string_at(index)); - SET_STACK_OBJECT(constants->resolved_string_at(index), 0); + { + oop result = constants->resolved_references()->obj_at(index); + if (result == NULL) { + CALL_VM(InterpreterRuntime::resolve_ldc(THREAD, (Bytecodes::Code) opcode), handle_exception); + SET_STACK_OBJECT(THREAD->vm_result(), 0); + THREAD->set_vm_result(NULL); + } else { + VERIFY_OOP(result); + SET_STACK_OBJECT(result, 0); + } break; + } case JVM_CONSTANT_Class: VERIFY_OOP(constants->resolved_klass_at(index)->java_mirror()); SET_STACK_OBJECT(constants->resolved_klass_at(index)->java_mirror(), 0); break; - case JVM_CONSTANT_UnresolvedString: case JVM_CONSTANT_UnresolvedClass: case JVM_CONSTANT_UnresolvedClassInError: CALL_VM(InterpreterRuntime::ldc(THREAD, wide), handle_exception); @@ -2137,7 +2146,7 @@ { u2 index = Bytes::get_Java_u2(pc+1); - constantPoolOop constants = METHOD->constants(); + ConstantPool* constants = METHOD->constants(); switch (constants->tag_at(index).value()) { case JVM_CONSTANT_Long: @@ -2154,15 +2163,6 @@ CASE(_fast_aldc_w): CASE(_fast_aldc): { - if (!EnableInvokeDynamic) { - // We should not encounter this bytecode if !EnableInvokeDynamic. - // The verifier will stop it. However, if we get past the verifier, - // this will stop the thread in a reasonable way, without crashing the JVM. - CALL_VM(InterpreterRuntime::throw_IncompatibleClassChangeError(THREAD), - handle_exception); - ShouldNotReachHere(); - } - u2 index; int incr; if (opcode == Bytecodes::_fast_aldc) { @@ -2176,12 +2176,12 @@ // We are resolved if the f1 field contains a non-null object (CallSite, etc.) // This kind of CP cache entry does not need to match the flags byte, because // there is a 1-1 relation between bytecode type and CP entry type. - ConstantPoolCacheEntry* cache = cp->entry_at(index); - oop result = cache->f1_as_instance(); + ConstantPool* constants = METHOD->constants(); + oop result = constants->resolved_references()->obj_at(index); if (result == NULL) { CALL_VM(InterpreterRuntime::resolve_ldc(THREAD, (Bytecodes::Code) opcode), handle_exception); - result = cache->f1_as_instance(); + result = THREAD->vm_result(); } VERIFY_OOP(result); @@ -2201,16 +2201,15 @@ int index = Bytes::get_native_u4(pc+1); - // We are resolved if the f1 field contains a non-null object (CallSite, etc.) + // We are resolved if the resolved_references field contains a non-null object (CallSite, etc.) // This kind of CP cache entry does not need to match the flags byte, because // there is a 1-1 relation between bytecode type and CP entry type. - assert(constantPoolCacheOopDesc::is_secondary_index(index), "incorrect format"); - ConstantPoolCacheEntry* cache = cp->secondary_entry_at(index); - oop result = cache->f1_as_instance(); + ConstantPool* constants = METHOD->constants(); + oop result = constants->resolved_references()->obj_at(index); if (result == NULL) { CALL_VM(InterpreterRuntime::resolve_invokedynamic(THREAD), handle_exception); - result = cache->f1_as_instance(); + result = THREAD->vm_result(); } VERIFY_OOP(result); @@ -2218,7 +2217,7 @@ CHECK_NULL(method_handle); istate->set_msg(call_method_handle); - istate->set_callee((methodOop) method_handle); + istate->set_callee((Method*) method_handle); istate->set_bcp_advance(5); UPDATE_PC_AND_RETURN(0); // I'll be back... @@ -2244,7 +2243,7 @@ // This code isn't produced by javac, but could be produced by // another compliant java compiler. if (cache->is_forced_virtual()) { - methodOop callee; + Method* callee; CHECK_NULL(STACK_OBJECT(-(cache->parameter_size()))); if (cache->is_vfinal()) { callee = cache->f2_as_vfinal_method(); @@ -2253,9 +2252,9 @@ int parms = cache->parameter_size(); // Same comments as invokevirtual apply here VERIFY_OOP(STACK_OBJECT(-parms)); - instanceKlass* rcvrKlass = (instanceKlass*) - STACK_OBJECT(-parms)->klass()->klass_part(); - callee = (methodOop) rcvrKlass->start_of_vtable()[ cache->f2_as_index()]; + InstanceKlass* rcvrKlass = (InstanceKlass*) + STACK_OBJECT(-parms)->klass(); + callee = (Method*) rcvrKlass->start_of_vtable()[ cache->f2_as_index()]; } istate->set_callee(callee); istate->set_callee_entry_point(callee->from_interpreted_entry()); @@ -2269,14 +2268,14 @@ } // this could definitely be cleaned up QQQ - methodOop callee; - klassOop iclass = cache->f1_as_klass(); - // instanceKlass* interface = (instanceKlass*) iclass->klass_part(); + Method* callee; + Klass* iclass = cache->f1_as_klass(); + // InstanceKlass* interface = (InstanceKlass*) iclass; // get receiver int parms = cache->parameter_size(); oop rcvr = STACK_OBJECT(-parms); CHECK_NULL(rcvr); - instanceKlass* int2 = (instanceKlass*) rcvr->klass()->klass_part(); + InstanceKlass* int2 = (InstanceKlass*) rcvr->klass(); itableOffsetEntry* ki = (itableOffsetEntry*) int2->start_of_itable(); int i; for ( i = 0 ; i < int2->itable_length() ; i++, ki++ ) { @@ -2323,7 +2322,7 @@ istate->set_msg(call_method); { - methodOop callee; + Method* callee; if ((Bytecodes::Code)opcode == Bytecodes::_invokevirtual) { CHECK_NULL(STACK_OBJECT(-(cache->parameter_size()))); if (cache->is_vfinal()) callee = cache->f2_as_vfinal_method(); @@ -2331,13 +2330,13 @@ // get receiver int parms = cache->parameter_size(); // this works but needs a resourcemark and seems to create a vtable on every call: - // methodOop callee = rcvr->klass()->klass_part()->vtable()->method_at(cache->f2_as_index()); + // Method* callee = rcvr->klass()->vtable()->method_at(cache->f2_as_index()); // // this fails with an assert - // instanceKlass* rcvrKlass = instanceKlass::cast(STACK_OBJECT(-parms)->klass()); + // InstanceKlass* rcvrKlass = InstanceKlass::cast(STACK_OBJECT(-parms)->klass()); // but this works VERIFY_OOP(STACK_OBJECT(-parms)); - instanceKlass* rcvrKlass = (instanceKlass*) STACK_OBJECT(-parms)->klass()->klass_part(); + InstanceKlass* rcvrKlass = (InstanceKlass*) STACK_OBJECT(-parms)->klass(); /* Executing this code in java.lang.String: public String(char value[]) { @@ -2345,16 +2344,16 @@ this.value = (char[])value.clone(); } - a find on rcvr->klass()->klass_part() reports: + a find on rcvr->klass() reports: {type array char}{type array class} - klass: {other class} - but using instanceKlass::cast(STACK_OBJECT(-parms)->klass()) causes in assertion failure - because rcvr->klass()->klass_part()->oop_is_instance() == 0 + but using InstanceKlass::cast(STACK_OBJECT(-parms)->klass()) causes in assertion failure + because rcvr->klass()->oop_is_instance() == 0 However it seems to have a vtable in the right location. Huh? */ - callee = (methodOop) rcvrKlass->start_of_vtable()[ cache->f2_as_index()]; + callee = (Method*) rcvrKlass->start_of_vtable()[ cache->f2_as_index()]; } } else { if ((Bytecodes::Code)opcode == Bytecodes::_invokespecial) { @@ -2500,7 +2499,7 @@ CALL_VM(continuation_bci = (intptr_t)InterpreterRuntime::exception_handler_for_exception(THREAD, except_oop()), handle_exception); - except_oop = (oop) THREAD->vm_result(); + except_oop = THREAD->vm_result(); THREAD->set_vm_result(NULL); if (continuation_bci >= 0) { // Place exception on top of stack diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/bytecodeInterpreter.hpp --- a/src/share/vm/interpreter/bytecodeInterpreter.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/bytecodeInterpreter.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,8 @@ #define SHARE_VM_INTERPRETER_BYTECODEINTERPRETER_HPP #include "memory/allocation.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "runtime/basicLock.hpp" #include "runtime/frame.hpp" #include "runtime/globals.hpp" @@ -62,7 +62,7 @@ typedef class BytecodeInterpreter* interpreterState; struct call_message { - class methodOopDesc* _callee; /* method to call during call_method request */ + class Method* _callee; /* method to call during call_method request */ address _callee_entry_point; /* address to jump to for call_method request */ int _bcp_advance; /* size of the invoke bytecode operation */ }; @@ -119,8 +119,8 @@ JavaThread* _thread; // the vm's java thread pointer address _bcp; // instruction pointer intptr_t* _locals; // local variable pointer - constantPoolCacheOop _constants; // constant pool cache - methodOop _method; // method being executed + ConstantPoolCache* _constants; // constant pool cache + Method* _method; // method being executed DataLayout* _mdx; // compiler profiling data for current bytecode intptr_t* _stack; // expression stack messages _msg; // frame manager <-> interpreter message @@ -143,7 +143,7 @@ static void layout_interpreterState(interpreterState to_fill, frame* caller, frame* interpreter_frame, - methodOop method, + Method* method, intptr_t* locals, intptr_t* stack, intptr_t* stack_base, @@ -197,16 +197,16 @@ inline intptr_t* locals() { return _locals; } -inline constantPoolCacheOop constants() { return _constants; } -inline methodOop method() { return _method; } +inline ConstantPoolCache* constants() { return _constants; } +inline Method* method() { return _method; } inline DataLayout* mdx() { return _mdx; } inline void set_mdx(DataLayout *new_mdx) { _mdx = new_mdx; } inline messages msg() { return _msg; } inline void set_msg(messages new_msg) { _msg = new_msg; } -inline methodOop callee() { return _result._to_call._callee; } -inline void set_callee(methodOop new_callee) { _result._to_call._callee = new_callee; } +inline Method* callee() { return _result._to_call._callee; } +inline void set_callee(Method* new_callee) { _result._to_call._callee = new_callee; } inline void set_callee_entry_point(address entry) { _result._to_call._callee_entry_point = entry; } inline void set_osr_buf(address buf) { _result._osr._osr_buf = buf; } inline void set_osr_entry(address entry) { _result._osr._osr_entry = entry; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/bytecodeStream.hpp --- a/src/share/vm/interpreter/bytecodeStream.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/bytecodeStream.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,8 @@ #include "interpreter/bytecode.hpp" #include "memory/allocation.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" +#include "runtime/handles.inline.hpp" #ifdef TARGET_ARCH_x86 # include "bytes_x86.hpp" #endif @@ -45,7 +46,7 @@ #endif // A BytecodeStream is used for fast iteration over the bytecodes -// of a methodOop. +// of a Method*. // // Usage: // diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/bytecodeTracer.cpp --- a/src/share/vm/interpreter/bytecodeTracer.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/bytecodeTracer.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,8 +29,8 @@ #include "interpreter/interpreter.hpp" #include "interpreter/interpreterRuntime.hpp" #include "memory/resourceArea.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/timer.hpp" @@ -46,7 +46,7 @@ // between critical sections. Use only pointer-comparison // operations on the pointer, except within a critical section. // (Also, ensure that occasional false positives are benign.) - methodOop _current_method; + Method* _current_method; bool _is_wide; Bytecodes::Code _code; address _next_pc; // current decoding position @@ -58,16 +58,19 @@ int get_index_u1() { return *(address)_next_pc++; } int get_index_u2() { int i=Bytes::get_Java_u2(_next_pc); _next_pc+=2; return i; } - int get_index_u1_cpcache() { return get_index_u1() + constantPoolOopDesc::CPCACHE_INDEX_TAG; } - int get_index_u2_cpcache() { int i=Bytes::get_native_u2(_next_pc); _next_pc+=2; return i + constantPoolOopDesc::CPCACHE_INDEX_TAG; } + int get_index_u1_cpcache() { return get_index_u1() + ConstantPool::CPCACHE_INDEX_TAG; } + int get_index_u2_cpcache() { int i=Bytes::get_native_u2(_next_pc); _next_pc+=2; return i + ConstantPool::CPCACHE_INDEX_TAG; } int get_index_u4() { int i=Bytes::get_native_u4(_next_pc); _next_pc+=4; return i; } int get_index_special() { return (is_wide()) ? get_index_u2() : get_index_u1(); } - methodOop method() { return _current_method; } + Method* method() { return _current_method; } bool is_wide() { return _is_wide; } Bytecodes::Code raw_code() { return Bytecodes::Code(_code); } bool check_index(int i, int& cp_index, outputStream* st = tty); + bool check_cp_cache_index(int i, int& cp_index, outputStream* st = tty); + bool check_obj_index(int i, int& cp_index, outputStream* st = tty); + bool check_invokedynamic_index(int i, int& cp_index, outputStream* st = tty); void print_constant(int i, outputStream* st = tty); void print_field_or_method(int i, outputStream* st = tty); void print_field_or_method(int orig_i, int i, outputStream* st = tty); @@ -122,7 +125,7 @@ _code = Bytecodes::_illegal; } - // Used for methodOop::print_codes(). The input bcp comes from + // Used for Method*::print_codes(). The input bcp comes from // BytecodeStream, which will skip wide bytecodes. void trace(methodHandle method, address bcp, outputStream* st) { _current_method = method(); @@ -152,7 +155,7 @@ // %%% This set_closure thing seems overly general, given that // nobody uses it. Also, if BytecodePrinter weren't hidden -// then methodOop could use instances of it directly and it +// then Method* could use instances of it directly and it // would be easier to remove races on _current_method and bcp. // Since this is not product functionality, we can defer cleanup. @@ -170,7 +173,7 @@ // The ttyLocker also prevents races between two threads // trying to use the single instance of BytecodePrinter. // Using the ttyLocker prevents the system from coming to - // a safepoint within this code, which is sensitive to methodOop + // a safepoint within this code, which is sensitive to Method* // movement. // // There used to be a leaf mutex here, but the ttyLocker will @@ -217,56 +220,59 @@ } bool BytecodePrinter::check_index(int i, int& cp_index, outputStream* st) { - constantPoolOop constants = method()->constants(); + ConstantPool* constants = method()->constants(); + int ilimit = constants->length(); + Bytecodes::Code code = raw_code(); + + ConstantPoolCache* cache = NULL; + if (Bytecodes::uses_cp_cache(code)) { + bool okay = true; + switch (code) { + case Bytecodes::_fast_aldc: + case Bytecodes::_fast_aldc_w: + okay = check_obj_index(i, cp_index, st); + break; + case Bytecodes::_invokedynamic: + okay = check_invokedynamic_index(i, cp_index, st); + break; + default: + okay = check_cp_cache_index(i, cp_index, st); + break; + } + if (!okay) return false; + } + + + // check cp index + if (cp_index >= 0 && cp_index < ilimit) { + if (WizardMode) st->print(" cp[%d]", cp_index); + return true; + } + + st->print_cr(" CP[%d] not in CP", cp_index); + return false; +} + +bool BytecodePrinter::check_cp_cache_index(int i, int& cp_index, outputStream* st) { + ConstantPool* constants = method()->constants(); int ilimit = constants->length(), climit = 0; Bytecodes::Code code = raw_code(); - constantPoolCacheOop cache = NULL; - if (Bytecodes::uses_cp_cache(code)) { - cache = constants->cache(); - if (cache != NULL) { - //climit = cache->length(); // %%% private! - size_t size = cache->size() * HeapWordSize; - size -= sizeof(constantPoolCacheOopDesc); - size /= sizeof(ConstantPoolCacheEntry); - climit = (int) size; - } - } - - if (cache != NULL && constantPoolCacheOopDesc::is_secondary_index(i)) { - i = constantPoolCacheOopDesc::decode_secondary_index(i); - st->print(" secondary cache[%d] of", i); - if (i >= 0 && i < climit) { - if (!cache->entry_at(i)->is_secondary_entry()) { - st->print_cr(" not secondary entry?", i); - return false; - } - i = cache->entry_at(i)->main_entry_index() + constantPoolOopDesc::CPCACHE_INDEX_TAG; - goto check_cache_index; - } else { - st->print_cr(" not in cache[*]?", i); - return false; - } - } - - if (cache != NULL) { - goto check_cache_index; - } - - check_cp_index: - if (i >= 0 && i < ilimit) { - if (WizardMode) st->print(" cp[%d]", i); + ConstantPoolCache* cache = constants->cache(); + // If rewriter hasn't run, the index is the cp_index + if (cache == NULL) { cp_index = i; return true; } + //climit = cache->length(); // %%% private! + size_t size = cache->size() * HeapWordSize; + size -= sizeof(ConstantPoolCache); + size /= sizeof(ConstantPoolCacheEntry); + climit = (int) size; - st->print_cr(" CP[%d] not in CP", i); - return false; - - check_cache_index: #ifdef ASSERT { - const int CPCACHE_INDEX_TAG = constantPoolOopDesc::CPCACHE_INDEX_TAG; + const int CPCACHE_INDEX_TAG = ConstantPool::CPCACHE_INDEX_TAG; if (i >= CPCACHE_INDEX_TAG && i < climit + CPCACHE_INDEX_TAG) { i -= CPCACHE_INDEX_TAG; } else { @@ -276,22 +282,42 @@ } #endif //ASSERT if (i >= 0 && i < climit) { - if (cache->entry_at(i)->is_secondary_entry()) { - st->print_cr(" secondary entry?"); + cp_index = cache->entry_at(i)->constant_pool_index(); + } else { + st->print_cr(" not in CP[*]?", i); return false; } - i = cache->entry_at(i)->constant_pool_index(); - goto check_cp_index; + return true; } - st->print_cr(" not in CP[*]?", i); + + +bool BytecodePrinter::check_obj_index(int i, int& cp_index, outputStream* st) { + ConstantPool* constants = method()->constants(); + i -= ConstantPool::CPCACHE_INDEX_TAG; + + if (i >= 0 && i < constants->resolved_references()->length()) { + cp_index = constants->object_to_cp_index(i); + return true; + } else { + st->print_cr(" not in OBJ[*]?", i); return false; } +} + + +bool BytecodePrinter::check_invokedynamic_index(int i, int& cp_index, outputStream* st) { + ConstantPool* constants = method()->constants(); + assert(ConstantPool::is_invokedynamic_index(i), "not secondary index?"); + i = ConstantPool::decode_invokedynamic_index(i) + ConstantPool::CPCACHE_INDEX_TAG; + + return check_cp_cache_index(i, cp_index, st); +} void BytecodePrinter::print_constant(int i, outputStream* st) { int orig_i = i; if (!check_index(orig_i, i, st)) return; - constantPoolOop constants = method()->constants(); + ConstantPool* constants = method()->constants(); constantTag tag = constants->tag_at(i); if (tag.is_int()) { @@ -303,13 +329,10 @@ } else if (tag.is_double()) { st->print_cr(" %f", constants->double_at(i)); } else if (tag.is_string()) { - oop string = constants->pseudo_string_at(i); - print_oop(string, st); - } else if (tag.is_unresolved_string()) { const char* string = constants->string_at_noresolve(i); st->print_cr(" %s", string); } else if (tag.is_klass()) { - st->print_cr(" %s", constants->resolved_klass_at(i)->klass_part()->external_name()); + st->print_cr(" %s", constants->resolved_klass_at(i)->external_name()); } else if (tag.is_unresolved_klass()) { st->print_cr(" ", i); } else if (tag.is_object()) { @@ -336,7 +359,7 @@ } void BytecodePrinter::print_field_or_method(int orig_i, int i, outputStream* st) { - constantPoolOop constants = method()->constants(); + ConstantPool* constants = method()->constants(); constantTag tag = constants->tag_at(i); bool has_klass = true; @@ -438,7 +461,7 @@ break; case Bytecodes::_anewarray: { int klass_index = get_index_u2(); - constantPoolOop constants = method()->constants(); + ConstantPool* constants = method()->constants(); Symbol* name = constants->klass_name_at(klass_index); st->print_cr(" %s ", name->as_C_string()); } @@ -446,7 +469,7 @@ case Bytecodes::_multianewarray: { int klass_index = get_index_u2(); int nof_dims = get_index_u1(); - constantPoolOop constants = method()->constants(); + ConstantPool* constants = method()->constants(); Symbol* name = constants->klass_name_at(klass_index); st->print_cr(" %s %d", name->as_C_string(), nof_dims); } @@ -552,7 +575,7 @@ case Bytecodes::_checkcast: case Bytecodes::_instanceof: { int i = get_index_u2(); - constantPoolOop constants = method()->constants(); + ConstantPool* constants = method()->constants(); Symbol* name = constants->klass_name_at(i); st->print_cr(" %d <%s>", i, name->as_C_string()); } @@ -570,7 +593,7 @@ void BytecodePrinter::bytecode_epilog(int bci, outputStream* st) { - methodDataOop mdo = method()->method_data(); + MethodData* mdo = method()->method_data(); if (mdo != NULL) { ProfileData* data = mdo->bci_to_data(bci); if (data != NULL) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/bytecodes.cpp --- a/src/share/vm/interpreter/bytecodes.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/bytecodes.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "interpreter/bytecodes.hpp" #include "memory/resourceArea.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #ifdef TARGET_ARCH_x86 # include "bytes_x86.hpp" #endif @@ -61,7 +61,7 @@ u_short Bytecodes::_flags [(1<contains(bcp); } #endif @@ -89,11 +89,11 @@ return true; } -Bytecodes::Code Bytecodes::code_at(methodOop method, int bci) { +Bytecodes::Code Bytecodes::code_at(Method* method, int bci) { return code_at(method, method->bcp_from(bci)); } -Bytecodes::Code Bytecodes::non_breakpoint_code_at(const methodOopDesc* method, address bcp) { +Bytecodes::Code Bytecodes::non_breakpoint_code_at(const Method* method, address bcp) { assert(method != NULL, "must have the method for breakpoint conversion"); assert(method->contains(bcp), "must be valid bcp in method"); return method->orig_bytecode_at(method->bci_from(bcp)); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/bytecodes.hpp --- a/src/share/vm/interpreter/bytecodes.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/bytecodes.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -353,7 +353,7 @@ // Verify that bcp points into method #ifdef ASSERT - static bool check_method(const methodOopDesc* method, address bcp); + static bool check_method(const Method* method, address bcp); #endif static bool check_must_rewrite(Bytecodes::Code bc); @@ -368,26 +368,26 @@ // argument is used for conversion of breakpoints into the original // bytecode. The CI uses these methods but guarantees that // breakpoints are hidden so the method argument should be passed as - // NULL since in that case the bcp and methodOop are unrelated + // NULL since in that case the bcp and Method* are unrelated // memory. - static Code code_at(const methodOopDesc* method, address bcp) { + static Code code_at(const Method* method, address bcp) { assert(method == NULL || check_method(method, bcp), "bcp must point into method"); Code code = cast(*bcp); - assert(code != _breakpoint || method != NULL, "need methodOop to decode breakpoint"); + assert(code != _breakpoint || method != NULL, "need Method* to decode breakpoint"); return (code != _breakpoint) ? code : non_breakpoint_code_at(method, bcp); } - static Code java_code_at(const methodOopDesc* method, address bcp) { + static Code java_code_at(const Method* method, address bcp) { return java_code(code_at(method, bcp)); } // Fetch a bytecode or a breakpoint: static Code code_or_bp_at(address bcp) { return (Code)cast(*bcp); } - static Code code_at(methodOop method, int bci); + static Code code_at(Method* method, int bci); static bool is_active_breakpoint_at(address bcp) { return (Code)*bcp == _breakpoint; } // find a bytecode, behind a breakpoint if necessary: - static Code non_breakpoint_code_at(const methodOopDesc* method, address bcp); + static Code non_breakpoint_code_at(const Method* method, address bcp); // Bytecode attributes static bool is_defined (int code) { return 0 <= code && code < number_of_codes && flags(code, false) != 0; } @@ -408,11 +408,11 @@ // if 'end' is provided, it indicates the end of the code buffer which // should not be read past when parsing. static int special_length_at(Bytecodes::Code code, address bcp, address end = NULL); - static int special_length_at(methodOop method, address bcp, address end = NULL) { return special_length_at(code_at(method, bcp), bcp, end); } + static int special_length_at(Method* method, address bcp, address end = NULL) { return special_length_at(code_at(method, bcp), bcp, end); } static int raw_special_length_at(address bcp, address end = NULL); static int length_for_code_at(Bytecodes::Code code, address bcp) { int l = length_for(code); return l > 0 ? l : special_length_at(code, bcp); } - static int length_at (methodOop method, address bcp) { return length_for_code_at(code_at(method, bcp), bcp); } - static int java_length_at (methodOop method, address bcp) { return length_for_code_at(java_code_at(method, bcp), bcp); } + static int length_at (Method* method, address bcp) { return length_for_code_at(code_at(method, bcp), bcp); } + static int java_length_at (Method* method, address bcp) { return length_for_code_at(java_code_at(method, bcp), bcp); } static bool is_java_code (Code code) { return 0 <= code && code < number_of_java_codes; } static bool is_aload (Code code) { return (code == _aload || code == _aload_0 || code == _aload_1 diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/interpreter.cpp --- a/src/share/vm/interpreter/interpreter.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/interpreter.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,8 +32,8 @@ #include "memory/allocation.inline.hpp" #include "memory/resourceArea.hpp" #include "oops/arrayOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/forte.hpp" #include "prims/jvmtiExport.hpp" @@ -312,7 +312,7 @@ // Deoptimization support // If deoptimization happens, this function returns the point of next bytecode to continue execution -address AbstractInterpreter::deopt_continue_after_entry(methodOop method, address bcp, int callee_parameters, bool is_top_frame) { +address AbstractInterpreter::deopt_continue_after_entry(Method* method, address bcp, int callee_parameters, bool is_top_frame) { assert(method->contains(bcp), "just checkin'"); Bytecodes::Code code = Bytecodes::java_code_at(method, bcp); assert(!Interpreter::bytecode_should_reexecute(code), "should not reexecute"); @@ -350,7 +350,7 @@ // (NOT needed for the old calling convension) if (!is_top_frame) { int index = Bytes::get_native_u4(bcp+1); - method->constants()->cache()->secondary_entry_at(index)->set_parameter_size(callee_parameters); + method->constants()->invokedynamic_cp_cache_entry_at(index)->set_parameter_size(callee_parameters); } break; } @@ -382,7 +382,7 @@ // the bytecode. // Note: Bytecodes::_athrow is a special case in that it does not return // Interpreter::deopt_entry(vtos, 0) like others -address AbstractInterpreter::deopt_reexecute_entry(methodOop method, address bcp) { +address AbstractInterpreter::deopt_reexecute_entry(Method* method, address bcp) { assert(method->contains(bcp), "just checkin'"); Bytecodes::Code code = Bytecodes::java_code_at(method, bcp); #ifdef COMPILER1 diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/interpreterRuntime.cpp --- a/src/share/vm/interpreter/interpreterRuntime.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/interpreterRuntime.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -33,10 +33,9 @@ #include "interpreter/templateTable.hpp" #include "memory/oopFactory.hpp" #include "memory/universe.inline.hpp" -#include "oops/constantPoolOop.hpp" -#include "oops/cpCacheOop.hpp" +#include "oops/constantPool.hpp" #include "oops/instanceKlass.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" #include "oops/symbol.hpp" @@ -98,7 +97,7 @@ if (ProfileInterpreter) { // ProfileTraps uses MDOs independently of ProfileInterpreter. // That is why we must check both ProfileInterpreter and mdo != NULL. - methodDataOop mdo = last_frame(thread).interpreter_frame_method()->method_data(); + MethodData* mdo = last_frame(thread).interpreter_frame_method()->method_data(); if (mdo != NULL) { NEEDS_CLEANUP; last_frame(thread).interpreter_frame_set_mdp(mdo->bci_to_dp(last_frame(thread).interpreter_frame_bci())); @@ -112,25 +111,14 @@ IRT_ENTRY(void, InterpreterRuntime::ldc(JavaThread* thread, bool wide)) // access constant pool - constantPoolOop pool = method(thread)->constants(); + ConstantPool* pool = method(thread)->constants(); int index = wide ? get_index_u2(thread, Bytecodes::_ldc_w) : get_index_u1(thread, Bytecodes::_ldc); constantTag tag = pool->tag_at(index); - if (tag.is_unresolved_klass() || tag.is_klass()) { - klassOop klass = pool->klass_at(index, CHECK); + assert (tag.is_unresolved_klass() || tag.is_klass(), "wrong ldc call"); + Klass* klass = pool->klass_at(index, CHECK); oop java_class = klass->java_mirror(); thread->set_vm_result(java_class); - } else { -#ifdef ASSERT - // If we entered this runtime routine, we believed the tag contained - // an unresolved string, an unresolved class or a resolved class. - // However, another thread could have resolved the unresolved string - // or class by the time we go there. - assert(tag.is_unresolved_string()|| tag.is_string(), "expected string"); -#endif - oop s_oop = pool->string_at(index, CHECK); - thread->set_vm_result(s_oop); - } IRT_END IRT_ENTRY(void, InterpreterRuntime::resolve_ldc(JavaThread* thread, Bytecodes::Code bytecode)) { @@ -144,10 +132,11 @@ { // The bytecode wrappers aren't GC-safe so construct a new one Bytecode_loadconstant ldc2(m, bci(thread)); - ConstantPoolCacheEntry* cpce = m->constants()->cache()->entry_at(ldc2.cache_index()); - assert(result == cpce->f1_as_instance(), "expected result for assembly code"); + oop coop = m->constants()->resolved_references()->obj_at(ldc2.cache_index()); + assert(result == coop, "expected result for assembly code"); } #endif + thread->set_vm_result(result); } IRT_END @@ -155,8 +144,8 @@ //------------------------------------------------------------------------------------------------------------------------ // Allocation -IRT_ENTRY(void, InterpreterRuntime::_new(JavaThread* thread, constantPoolOopDesc* pool, int index)) - klassOop k_oop = pool->klass_at(index, CHECK); +IRT_ENTRY(void, InterpreterRuntime::_new(JavaThread* thread, ConstantPool* pool, int index)) + Klass* k_oop = pool->klass_at(index, CHECK); instanceKlassHandle klass (THREAD, k_oop); // Make sure we are not instantiating an abstract klass @@ -190,11 +179,11 @@ IRT_END -IRT_ENTRY(void, InterpreterRuntime::anewarray(JavaThread* thread, constantPoolOopDesc* pool, int index, jint size)) +IRT_ENTRY(void, InterpreterRuntime::anewarray(JavaThread* thread, ConstantPool* pool, int index, jint size)) // Note: no oopHandle for pool & klass needed since they are not used // anymore after new_objArray() and no GC can happen before. // (This may have to change if this code changes!) - klassOop klass = pool->klass_at(index, CHECK); + Klass* klass = pool->klass_at(index, CHECK); objArrayOop obj = oopFactory::new_objArray(klass, size, CHECK); thread->set_vm_result(obj); IRT_END @@ -202,11 +191,11 @@ IRT_ENTRY(void, InterpreterRuntime::multianewarray(JavaThread* thread, jint* first_size_address)) // We may want to pass in more arguments - could make this slightly faster - constantPoolOop constants = method(thread)->constants(); + ConstantPool* constants = method(thread)->constants(); int i = get_index_u2(thread, Bytecodes::_multianewarray); - klassOop klass = constants->klass_at(i, CHECK); + Klass* klass = constants->klass_at(i, CHECK); int nof_dims = number_of_dimensions(thread); - assert(oop(klass)->is_klass(), "not a class"); + assert(klass->is_klass(), "not a class"); assert(nof_dims >= 1, "multianewarray rank must be nonzero"); // We must create an array of jints to pass to multi_allocate. @@ -229,8 +218,8 @@ IRT_ENTRY(void, InterpreterRuntime::register_finalizer(JavaThread* thread, oopDesc* obj)) assert(obj->is_oop(), "must be a valid oop"); - assert(obj->klass()->klass_part()->has_finalizer(), "shouldn't be here otherwise"); - instanceKlass::register_finalizer(instanceOop(obj), CHECK); + assert(obj->klass()->has_finalizer(), "shouldn't be here otherwise"); + InstanceKlass::register_finalizer(instanceOop(obj), CHECK); IRT_END @@ -238,13 +227,13 @@ IRT_ENTRY(void, InterpreterRuntime::quicken_io_cc(JavaThread* thread)) // Force resolving; quicken the bytecode int which = get_index_u2(thread, Bytecodes::_checkcast); - constantPoolOop cpool = method(thread)->constants(); + ConstantPool* cpool = method(thread)->constants(); // We'd expect to assert that we're only here to quicken bytecodes, but in a multithreaded // program we might have seen an unquick'd bytecode in the interpreter but have another // thread quicken the bytecode before we get here. // assert( cpool->tag_at(which).is_unresolved_klass(), "should only come here to quicken bytecodes" ); - klassOop klass = cpool->klass_at(which, CHECK); - thread->set_vm_result(klass); + Klass* klass = cpool->klass_at(which, CHECK); + thread->set_vm_result_2(klass); IRT_END @@ -258,17 +247,17 @@ methodHandle trap_method(thread, method(thread)); if (trap_method.not_null()) { - methodDataHandle trap_mdo(thread, trap_method->method_data()); - if (trap_mdo.is_null()) { - methodOopDesc::build_interpreter_method_data(trap_method, THREAD); + MethodData* trap_mdo = trap_method->method_data(); + if (trap_mdo == NULL) { + Method::build_interpreter_method_data(trap_method, THREAD); if (HAS_PENDING_EXCEPTION) { assert((PENDING_EXCEPTION->is_a(SystemDictionary::OutOfMemoryError_klass())), "we expect only an OOM error here"); CLEAR_PENDING_EXCEPTION; } - trap_mdo = methodDataHandle(thread, trap_method->method_data()); + trap_mdo = trap_method->method_data(); // and fall through... } - if (trap_mdo.not_null()) { + if (trap_mdo != NULL) { // Update per-method count of trap events. The interpreter // is updating the MDO to simulate the effect of compiler traps. int trap_bci = trap_method->bci_from(bcp(thread)); @@ -277,9 +266,9 @@ } } -static Handle get_preinitialized_exception(klassOop k, TRAPS) { +static Handle get_preinitialized_exception(Klass* k, TRAPS) { // get klass - instanceKlass* klass = instanceKlass::cast(k); + InstanceKlass* klass = InstanceKlass::cast(k); assert(klass->is_initialized(), "this klass should have been initialized during VM initialization"); // create instance - do not call constructor since we may have no @@ -417,7 +406,7 @@ tty->print_cr(" at bci %d for thread " INTPTR_FORMAT, current_bci, thread); } // Don't go paging in something which won't be used. -// else if (h_extable->length() == 0) { +// else if (extable->length() == 0) { // // disabled for now - interpreter is not using shortcut yet // // (shortcut is not to call runtime if we have no exception handlers) // // warning("performance bug: should not call runtime if method has no exception handlers"); @@ -534,7 +523,7 @@ // class is intitialized. This is required so that access to the static // field will call the initialization function every time until the class // is completely initialized ala. in 2.17.5 in JVM Specification. - instanceKlass *klass = instanceKlass::cast(info.klass()->as_klassOop()); + InstanceKlass *klass = InstanceKlass::cast(info.klass()()); bool uninitialized_static = ((bytecode == Bytecodes::_getstatic || bytecode == Bytecodes::_putstatic) && !klass->is_initialized()); Bytecodes::Code get_code = (Bytecodes::Code)0; @@ -554,7 +543,8 @@ info.field_offset(), state, info.access_flags().is_final(), - info.access_flags().is_volatile() + info.access_flags().is_volatile(), + pool->pool_holder() ); IRT_END @@ -644,15 +634,15 @@ //------------------------------------------------------------------------------------------------------------------------ // Invokes -IRT_ENTRY(Bytecodes::Code, InterpreterRuntime::get_original_bytecode_at(JavaThread* thread, methodOopDesc* method, address bcp)) +IRT_ENTRY(Bytecodes::Code, InterpreterRuntime::get_original_bytecode_at(JavaThread* thread, Method* method, address bcp)) return method->orig_bytecode_at(method->bci_from(bcp)); IRT_END -IRT_ENTRY(void, InterpreterRuntime::set_original_bytecode_at(JavaThread* thread, methodOopDesc* method, address bcp, Bytecodes::Code new_code)) +IRT_ENTRY(void, InterpreterRuntime::set_original_bytecode_at(JavaThread* thread, Method* method, address bcp, Bytecodes::Code new_code)) method->set_orig_bytecode_at(method->bci_from(bcp), new_code); IRT_END -IRT_ENTRY(void, InterpreterRuntime::_breakpoint(JavaThread* thread, methodOopDesc* method, address bcp)) +IRT_ENTRY(void, InterpreterRuntime::_breakpoint(JavaThread* thread, Method* method, address bcp)) JvmtiExport::post_raw_breakpoint(thread, method, bcp); IRT_END @@ -669,7 +659,7 @@ assert(Universe::heap()->is_in_reserved_or_null(receiver()), "sanity check"); assert(receiver.is_null() || - Universe::heap()->is_in_reserved(receiver->klass()), + !Universe::heap()->is_in_reserved(receiver->klass()), "sanity check"); } @@ -745,7 +735,8 @@ cache_entry(thread)->set_method_handle( info.resolved_method(), - info.resolved_appendix()); + info.resolved_appendix(), + pool->resolved_references()); } IRT_END @@ -762,16 +753,17 @@ CallInfo info; constantPoolHandle pool(thread, method(thread)->constants()); int index = get_index_u4(thread, bytecode); - { JvmtiHideSingleStepping jhss(thread); LinkResolver::resolve_invoke(info, Handle(), pool, index, bytecode, CHECK); } // end JvmtiHideSingleStepping - pool->cache()->secondary_entry_at(index)->set_dynamic_call( + ConstantPoolCacheEntry* cp_cache_entry = pool->invokedynamic_cp_cache_entry_at(index); + cp_cache_entry->set_dynamic_call( info.resolved_method(), - info.resolved_appendix()); + info.resolved_appendix(), + pool->resolved_references()); } IRT_END @@ -790,7 +782,7 @@ // to examine nm directly since it might have been freed and used // for something else. frame fr = thread->last_frame(); - methodOop method = fr.interpreter_frame_method(); + Method* method = fr.interpreter_frame_method(); int bci = method->bci_from(fr.interpreter_frame_bcp()); nm = method->lookup_osr_nmethod_for(bci, CompLevel_none, false); } @@ -844,10 +836,10 @@ return osr_nm; IRT_END -IRT_LEAF(jint, InterpreterRuntime::bcp_to_di(methodOopDesc* method, address cur_bcp)) +IRT_LEAF(jint, InterpreterRuntime::bcp_to_di(Method* method, address cur_bcp)) assert(ProfileInterpreter, "must be profiling interpreter"); int bci = method->bci_from(cur_bcp); - methodDataOop mdo = method->method_data(); + MethodData* mdo = method->method_data(); if (mdo == NULL) return 0; return mdo->bci_to_di(bci); IRT_END @@ -861,7 +853,7 @@ frame fr = thread->last_frame(); assert(fr.is_interpreted_frame(), "must come from interpreter"); methodHandle method(thread, fr.interpreter_frame_method()); - methodOopDesc::build_interpreter_method_data(method, THREAD); + Method::build_interpreter_method_data(method, THREAD); if (HAS_PENDING_EXCEPTION) { assert((PENDING_EXCEPTION->is_a(SystemDictionary::OutOfMemoryError_klass())), "we expect only an OOM error here"); CLEAR_PENDING_EXCEPTION; @@ -871,10 +863,10 @@ #ifdef ASSERT -IRT_LEAF(void, InterpreterRuntime::verify_mdp(methodOopDesc* method, address bcp, address mdp)) +IRT_LEAF(void, InterpreterRuntime::verify_mdp(Method* method, address bcp, address mdp)) assert(ProfileInterpreter, "must be profiling interpreter"); - methodDataOop mdo = method->method_data(); + MethodData* mdo = method->method_data(); assert(mdo != NULL, "must not be null"); int bci = method->bci_from(bcp); @@ -907,7 +899,7 @@ HandleMark hm(thread); frame fr = thread->last_frame(); assert(fr.is_interpreted_frame(), "must come from interpreter"); - methodDataHandle h_mdo(thread, fr.interpreter_frame_method()->method_data()); + MethodData* h_mdo = fr.interpreter_frame_method()->method_data(); // Grab a lock to ensure atomic access to setting the return bci and // the displacement. This can block and GC, invalidating all naked oops. @@ -943,7 +935,7 @@ // check the access_flags for the field in the klass - instanceKlass* ik = instanceKlass::cast(java_lang_Class::as_klassOop(cp_entry->f1_as_klass_mirror())); + InstanceKlass* ik = InstanceKlass::cast(cp_entry->f1_as_klass()); int index = cp_entry->field_index(); if ((ik->field_access_flags(index) & JVM_ACC_FIELD_ACCESS_WATCHED) == 0) return; @@ -966,7 +958,7 @@ // non-static field accessors have an object, but we need a handle h_obj = Handle(thread, obj); } - instanceKlassHandle h_cp_entry_f1(thread, java_lang_Class::as_klassOop(cp_entry->f1_as_klass_mirror())); + instanceKlassHandle h_cp_entry_f1(thread, (Klass*)cp_entry->f1_as_klass()); jfieldID fid = jfieldIDWorkaround::to_jfieldID(h_cp_entry_f1, cp_entry->f2_as_index(), is_static); JvmtiExport::post_field_access(thread, method(thread), bcp(thread), h_cp_entry_f1, h_obj, fid); IRT_END @@ -974,10 +966,10 @@ IRT_ENTRY(void, InterpreterRuntime::post_field_modification(JavaThread *thread, oopDesc* obj, ConstantPoolCacheEntry *cp_entry, jvalue *value)) - klassOop k = java_lang_Class::as_klassOop(cp_entry->f1_as_klass_mirror()); + Klass* k = (Klass*)cp_entry->f1_as_klass(); // check the access_flags for the field in the klass - instanceKlass* ik = instanceKlass::cast(k); + InstanceKlass* ik = InstanceKlass::cast(k); int index = cp_entry->field_index(); // bail out if field modifications are not watched if ((ik->field_access_flags(index) & JVM_ACC_FIELD_MODIFICATION_WATCHED) == 0) return; @@ -1183,7 +1175,7 @@ address SignatureHandlerLibrary::_buffer = NULL; -IRT_ENTRY(void, InterpreterRuntime::prepare_native_call(JavaThread* thread, methodOopDesc* method)) +IRT_ENTRY(void, InterpreterRuntime::prepare_native_call(JavaThread* thread, Method* method)) methodHandle m(thread, method); assert(m->is_native(), "sanity check"); // lookup native function entry point if it doesn't exist diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/interpreterRuntime.hpp --- a/src/share/vm/interpreter/interpreterRuntime.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/interpreterRuntime.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ #include "interpreter/bytecode.hpp" #include "interpreter/linkResolver.hpp" #include "memory/universe.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "runtime/frame.inline.hpp" #include "runtime/signature.hpp" #include "utilities/top.hpp" @@ -55,7 +55,7 @@ private: // Helper functions to access current interpreter state static frame last_frame(JavaThread *thread) { return thread->last_frame(); } - static methodOop method(JavaThread *thread) { return last_frame(thread).interpreter_frame_method(); } + static Method* method(JavaThread *thread) { return last_frame(thread).interpreter_frame_method(); } static address bcp(JavaThread *thread) { return last_frame(thread).interpreter_frame_bcp(); } static int bci(JavaThread *thread) { return last_frame(thread).interpreter_frame_bci(); } static void set_bcp_and_mdp(address bcp, JavaThread*thread); @@ -88,9 +88,9 @@ static void resolve_ldc (JavaThread* thread, Bytecodes::Code bytecode); // Allocation - static void _new (JavaThread* thread, constantPoolOopDesc* pool, int index); + static void _new (JavaThread* thread, ConstantPool* pool, int index); static void newarray (JavaThread* thread, BasicType type, jint size); - static void anewarray (JavaThread* thread, constantPoolOopDesc* pool, int index, jint size); + static void anewarray (JavaThread* thread, ConstantPool* pool, int index, jint size); static void multianewarray(JavaThread* thread, jint* first_size_address); static void register_finalizer(JavaThread* thread, oopDesc* obj); @@ -124,9 +124,9 @@ static void resolve_invokedynamic(JavaThread* thread); // Breakpoints - static void _breakpoint(JavaThread* thread, methodOopDesc* method, address bcp); - static Bytecodes::Code get_original_bytecode_at(JavaThread* thread, methodOopDesc* method, address bcp); - static void set_original_bytecode_at(JavaThread* thread, methodOopDesc* method, address bcp, Bytecodes::Code new_code); + static void _breakpoint(JavaThread* thread, Method* method, address bcp); + static Bytecodes::Code get_original_bytecode_at(JavaThread* thread, Method* method, address bcp); + static void set_original_bytecode_at(JavaThread* thread, Method* method, address bcp, Bytecodes::Code new_code); static bool is_breakpoint(JavaThread *thread) { return Bytecodes::code_or_bp_at(bcp(thread)) == Bytecodes::_breakpoint; } // Safepoints @@ -142,9 +142,9 @@ static int interpreter_contains(address pc); // Native signature handlers - static void prepare_native_call(JavaThread* thread, methodOopDesc* method); + static void prepare_native_call(JavaThread* thread, Method* method); static address slow_signature_handler(JavaThread* thread, - methodOopDesc* method, + Method* method, intptr_t* from, intptr_t* to); #if defined(IA32) || defined(AMD64) || defined(ARM) @@ -174,11 +174,11 @@ static nmethod* frequency_counter_overflow(JavaThread* thread, address branch_bcp); // Interpreter profiling support - static jint bcp_to_di(methodOopDesc* method, address cur_bcp); + static jint bcp_to_di(Method* method, address cur_bcp); static void profile_method(JavaThread* thread); static void update_mdp_for_ret(JavaThread* thread, int bci); #ifdef ASSERT - static void verify_mdp(methodOopDesc* method, address bcp, address mdp); + static void verify_mdp(Method* method, address bcp, address mdp); #endif // ASSERT }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/linkResolver.cpp --- a/src/share/vm/interpreter/linkResolver.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/linkResolver.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -75,7 +75,7 @@ void CallInfo::set_static(KlassHandle resolved_klass, methodHandle resolved_method, TRAPS) { - int vtable_index = methodOopDesc::nonvirtual_vtable_index; + int vtable_index = Method::nonvirtual_vtable_index; set_common(resolved_klass, resolved_klass, resolved_method, resolved_method, vtable_index, CHECK); } @@ -85,7 +85,7 @@ // comes from java/lang/Object, it can be the subject of a virtual call, so // we should pick the vtable index from the resolved method. // Other than that case, there is no valid vtable index to specify. - int vtable_index = methodOopDesc::invalid_vtable_index; + int vtable_index = Method::invalid_vtable_index; if (resolved_method->method_holder() == SystemDictionary::Object_klass()) { assert(resolved_method->vtable_index() == selected_method->vtable_index(), "sanity check"); vtable_index = resolved_method->vtable_index(); @@ -94,7 +94,7 @@ } void CallInfo::set_virtual(KlassHandle resolved_klass, KlassHandle selected_klass, methodHandle resolved_method, methodHandle selected_method, int vtable_index, TRAPS) { - assert(vtable_index >= 0 || vtable_index == methodOopDesc::nonvirtual_vtable_index, "valid index"); + assert(vtable_index >= 0 || vtable_index == Method::nonvirtual_vtable_index, "valid index"); set_common(resolved_klass, selected_klass, resolved_method, selected_method, vtable_index, CHECK); assert(!resolved_method->is_compiled_lambda_form(), "these must be handled via an invokehandle call"); } @@ -103,11 +103,11 @@ if (resolved_method.is_null()) { THROW_MSG(vmSymbols::java_lang_InternalError(), "resolved method is null"); } - KlassHandle resolved_klass = SystemDictionaryHandles::MethodHandle_klass(); + KlassHandle resolved_klass = SystemDictionary::MethodHandle_klass(); assert(resolved_method->intrinsic_id() == vmIntrinsics::_invokeBasic || resolved_method->is_compiled_lambda_form(), "linkMethod must return one of these"); - int vtable_index = methodOopDesc::nonvirtual_vtable_index; + int vtable_index = Method::nonvirtual_vtable_index; assert(resolved_method->vtable_index() == vtable_index, ""); set_common(resolved_klass, resolved_klass, resolved_method, resolved_method, vtable_index, CHECK); _resolved_appendix = resolved_appendix; @@ -131,7 +131,7 @@ // don't force compilation, resolve was on behalf of compiler return; } - if (instanceKlass::cast(selected_method->method_holder())->is_not_initialized()) { + if (InstanceKlass::cast(selected_method->method_holder())->is_not_initialized()) { // 'is_not_initialized' means not only '!is_initialized', but also that // initialization has not been started yet ('!being_initialized') // Do not force compilation of methods in uninitialized classes. @@ -152,8 +152,8 @@ // Klass resolution void LinkResolver::check_klass_accessability(KlassHandle ref_klass, KlassHandle sel_klass, TRAPS) { - if (!Reflection::verify_class_access(ref_klass->as_klassOop(), - sel_klass->as_klassOop(), + if (!Reflection::verify_class_access(ref_klass(), + sel_klass(), true)) { ResourceMark rm(THREAD); Exceptions::fthrow( @@ -168,13 +168,13 @@ } void LinkResolver::resolve_klass(KlassHandle& result, constantPoolHandle pool, int index, TRAPS) { - klassOop result_oop = pool->klass_ref_at(index, CHECK); + Klass* result_oop = pool->klass_ref_at(index, CHECK); result = KlassHandle(THREAD, result_oop); } void LinkResolver::resolve_klass_no_update(KlassHandle& result, constantPoolHandle pool, int index, TRAPS) { - klassOop result_oop = - constantPoolOopDesc::klass_ref_at_if_loaded_check(pool, index, CHECK); + Klass* result_oop = + ConstantPool::klass_ref_at_if_loaded_check(pool, index, CHECK); result = KlassHandle(THREAD, result_oop); } @@ -185,7 +185,7 @@ // According to JVM spec. $5.4.3c & $5.4.3d void LinkResolver::lookup_method_in_klasses(methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS) { - methodOop result_oop = klass->uncached_lookup_method(name, signature); + Method* result_oop = klass->uncached_lookup_method(name, signature); if (EnableInvokeDynamic && result_oop != NULL) { vmIntrinsics::ID iid = result_oop->intrinsic_id(); if (MethodHandles::is_signature_polymorphic(iid)) { @@ -198,7 +198,7 @@ // returns first instance method void LinkResolver::lookup_instance_method_in_klasses(methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS) { - methodOop result_oop = klass->uncached_lookup_method(name, signature); + Method* result_oop = klass->uncached_lookup_method(name, signature); result = methodHandle(THREAD, result_oop); while (!result.is_null() && result->is_static()) { klass = KlassHandle(THREAD, Klass::cast(result->method_holder())->super()); @@ -209,12 +209,12 @@ int LinkResolver::vtable_index_of_miranda_method(KlassHandle klass, Symbol* name, Symbol* signature, TRAPS) { ResourceMark rm(THREAD); - klassVtable *vt = instanceKlass::cast(klass())->vtable(); + klassVtable *vt = InstanceKlass::cast(klass())->vtable(); return vt->index_of_miranda(name, signature); } void LinkResolver::lookup_method_in_interfaces(methodHandle& result, KlassHandle klass, Symbol* name, Symbol* signature, TRAPS) { - instanceKlass *ik = instanceKlass::cast(klass()); + InstanceKlass *ik = InstanceKlass::cast(klass()); result = methodHandle(THREAD, ik->lookup_method_in_all_interfaces(name, signature)); } @@ -264,8 +264,8 @@ // We will ask Java code to spin an adapter method for it. if (!MethodHandles::enabled()) { // Make sure the Java part of the runtime has been booted up. - klassOop natives = SystemDictionary::MethodHandleNatives_klass(); - if (natives == NULL || instanceKlass::cast(natives)->is_not_initialized()) { + Klass* natives = SystemDictionary::MethodHandleNatives_klass(); + if (natives == NULL || InstanceKlass::cast(natives)->is_not_initialized()) { SystemDictionary::resolve_or_fail(vmSymbols::java_lang_invoke_MethodHandleNatives(), Handle(), Handle(), @@ -340,9 +340,9 @@ } // assert(extra_arg_result_or_null != NULL, "must be able to return extra argument"); - if (!Reflection::verify_field_access(ref_klass->as_klassOop(), - resolved_klass->as_klassOop(), - sel_klass->as_klassOop(), + if (!Reflection::verify_field_access(ref_klass(), + resolved_klass(), + sel_klass(), flags, true)) { ResourceMark rm(THREAD); @@ -364,7 +364,7 @@ // resolve klass if (code == Bytecodes::_invokedynamic) { - resolved_klass = SystemDictionaryHandles::MethodHandle_klass(); + resolved_klass = SystemDictionary::MethodHandle_klass(); Symbol* method_name = vmSymbols::invoke_name(); Symbol* method_signature = pool->signature_ref_at(index); KlassHandle current_klass(THREAD, pool->pool_holder()); @@ -381,7 +381,7 @@ if (pool->has_preresolution() || (resolved_klass() == SystemDictionary::MethodHandle_klass() && MethodHandles::is_signature_polymorphic_name(resolved_klass(), method_name))) { - methodOop result_oop = constantPoolOopDesc::method_at_if_loaded(pool, index); + Method* result_oop = ConstantPool::method_at_if_loaded(pool, index); if (result_oop != NULL) { resolved_method = methodHandle(THREAD, result_oop); return; @@ -430,7 +430,7 @@ // 4. method lookup failed ResourceMark rm(THREAD); THROW_MSG_CAUSE(vmSymbols::java_lang_NoSuchMethodError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(resolved_klass()), + Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()), method_name, method_signature), nested_exception); @@ -441,7 +441,7 @@ if (resolved_method->is_abstract() && !resolved_klass->is_abstract()) { ResourceMark rm(THREAD); THROW_MSG(vmSymbols::java_lang_AbstractMethodError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(resolved_klass()), + Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()), method_name, method_signature)); } @@ -458,8 +458,8 @@ CHECK); // check loader constraints - Handle loader (THREAD, instanceKlass::cast(current_klass())->class_loader()); - Handle class_loader (THREAD, instanceKlass::cast(resolved_method->method_holder())->class_loader()); + Handle loader (THREAD, InstanceKlass::cast(current_klass())->class_loader()); + Handle class_loader (THREAD, InstanceKlass::cast(resolved_method->method_holder())->class_loader()); { ResourceMark rm(THREAD); char* failed_type_name = @@ -470,11 +470,11 @@ " \"%s\" the class loader (instance of %s) of the current class, %s," " and the class loader (instance of %s) for resolved class, %s, have" " different Class objects for the type %s used in the signature"; - char* sig = methodOopDesc::name_and_sig_as_C_string(Klass::cast(resolved_klass()),method_name,method_signature); + char* sig = Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),method_name,method_signature); const char* loader1 = SystemDictionary::loader_name(loader()); - char* current = instanceKlass::cast(current_klass())->name()->as_C_string(); + char* current = InstanceKlass::cast(current_klass())->name()->as_C_string(); const char* loader2 = SystemDictionary::loader_name(class_loader()); - char* resolved = instanceKlass::cast(resolved_klass())->name()->as_C_string(); + char* resolved = InstanceKlass::cast(resolved_klass())->name()->as_C_string(); size_t buflen = strlen(msg) + strlen(sig) + strlen(loader1) + strlen(current) + strlen(loader2) + strlen(resolved) + strlen(failed_type_name); @@ -512,7 +512,7 @@ // no method found ResourceMark rm(THREAD); THROW_MSG(vmSymbols::java_lang_NoSuchMethodError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(resolved_klass()), + Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()), method_name, method_signature)); } @@ -520,8 +520,8 @@ if (check_access) { HandleMark hm(THREAD); - Handle loader (THREAD, instanceKlass::cast(current_klass())->class_loader()); - Handle class_loader (THREAD, instanceKlass::cast(resolved_method->method_holder())->class_loader()); + Handle loader (THREAD, InstanceKlass::cast(current_klass())->class_loader()); + Handle class_loader (THREAD, InstanceKlass::cast(resolved_method->method_holder())->class_loader()); { ResourceMark rm(THREAD); char* failed_type_name = @@ -533,11 +533,11 @@ "current class, %s, and the class loader (instance of %s) for " "resolved class, %s, have different Class objects for the type %s " "used in the signature"; - char* sig = methodOopDesc::name_and_sig_as_C_string(Klass::cast(resolved_klass()),method_name,method_signature); + char* sig = Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()),method_name,method_signature); const char* loader1 = SystemDictionary::loader_name(loader()); - char* current = instanceKlass::cast(current_klass())->name()->as_C_string(); + char* current = InstanceKlass::cast(current_klass())->name()->as_C_string(); const char* loader2 = SystemDictionary::loader_name(class_loader()); - char* resolved = instanceKlass::cast(resolved_klass())->name()->as_C_string(); + char* resolved = InstanceKlass::cast(resolved_klass())->name()->as_C_string(); size_t buflen = strlen(msg) + strlen(sig) + strlen(loader1) + strlen(current) + strlen(loader2) + strlen(resolved) + strlen(failed_type_name); @@ -558,9 +558,9 @@ KlassHandle sel_klass, fieldDescriptor& fd, TRAPS) { - if (!Reflection::verify_field_access(ref_klass->as_klassOop(), - resolved_klass->as_klassOop(), - sel_klass->as_klassOop(), + if (!Reflection::verify_field_access(ref_klass(), + resolved_klass(), + sel_klass(), fd.access_flags(), true)) { ResourceMark rm(THREAD); @@ -605,7 +605,7 @@ // Resolve instance field fieldDescriptor fd; // find_field initializes fd if found - KlassHandle sel_klass(THREAD, instanceKlass::cast(resolved_klass())->find_field(field, sig, &fd)); + KlassHandle sel_klass(THREAD, InstanceKlass::cast(resolved_klass())->find_field(field, sig, &fd)); // check if field exists; i.e., if a klass containing the field def has been selected if (sel_klass.is_null()){ ResourceMark rm(THREAD); @@ -641,8 +641,8 @@ { HandleMark hm(THREAD); - Handle ref_loader (THREAD, instanceKlass::cast(ref_klass())->class_loader()); - Handle sel_loader (THREAD, instanceKlass::cast(sel_klass())->class_loader()); + Handle ref_loader (THREAD, InstanceKlass::cast(ref_klass())->class_loader()); + Handle sel_loader (THREAD, InstanceKlass::cast(sel_klass())->class_loader()); Symbol* signature_ref = pool->signature_ref_at(index); { ResourceMark rm(THREAD); @@ -658,7 +658,7 @@ "type, %s, have different Class objects for that type"; char* field_name = field->as_C_string(); const char* loader1 = SystemDictionary::loader_name(ref_loader()); - char* sel = instanceKlass::cast(sel_klass())->name()->as_C_string(); + char* sel = InstanceKlass::cast(sel_klass())->name()->as_C_string(); const char* loader2 = SystemDictionary::loader_name(sel_loader()); size_t buflen = strlen(msg) + strlen(field_name) + strlen(loader1) + strlen(sel) + strlen(loader2) + strlen(failed_type_name); @@ -718,7 +718,7 @@ if (!resolved_method->is_static()) { ResourceMark rm(THREAD); char buf[200]; - jio_snprintf(buf, sizeof(buf), "Expected static method %s", methodOopDesc::name_and_sig_as_C_string(Klass::cast(resolved_klass()), + jio_snprintf(buf, sizeof(buf), "Expected static method %s", Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()), resolved_method->name(), resolved_method->signature())); THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); @@ -761,7 +761,7 @@ char buf[200]; jio_snprintf(buf, sizeof(buf), "Expecting non-static method %s", - methodOopDesc::name_and_sig_as_C_string(Klass::cast(resolved_klass()), + Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()), resolved_method->name(), resolved_method->signature())); THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); @@ -795,7 +795,7 @@ if (sel_method.is_null()) { ResourceMark rm(THREAD); THROW_MSG(vmSymbols::java_lang_AbstractMethodError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(resolved_klass()), + Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()), resolved_method->name(), resolved_method->signature())); } @@ -806,7 +806,7 @@ if (sel_method->is_static()) { ResourceMark rm(THREAD); char buf[200]; - jio_snprintf(buf, sizeof(buf), "Expecting non-static method %s", methodOopDesc::name_and_sig_as_C_string(Klass::cast(resolved_klass()), + jio_snprintf(buf, sizeof(buf), "Expecting non-static method %s", Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()), resolved_method->name(), resolved_method->signature())); THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); @@ -816,7 +816,7 @@ if (sel_method->is_abstract()) { ResourceMark rm(THREAD); THROW_MSG(vmSymbols::java_lang_AbstractMethodError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(resolved_klass()), + Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()), sel_method->name(), sel_method->signature())); } @@ -847,7 +847,7 @@ if (resolved_method->is_static()) { ResourceMark rm(THREAD); char buf[200]; - jio_snprintf(buf, sizeof(buf), "Expecting non-static method %s", methodOopDesc::name_and_sig_as_C_string(Klass::cast(resolved_klass()), + jio_snprintf(buf, sizeof(buf), "Expecting non-static method %s", Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()), resolved_method->name(), resolved_method->signature())); THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf); @@ -864,7 +864,7 @@ TRAPS) { // setup default return values - int vtable_index = methodOopDesc::invalid_vtable_index; + int vtable_index = Method::invalid_vtable_index; methodHandle selected_method; assert(recv.is_null() || recv->is_oop(), "receiver is not an oop"); @@ -874,23 +874,23 @@ THROW(vmSymbols::java_lang_NullPointerException()); } - // Virtual methods cannot be resolved before its klass has been linked, for otherwise the methodOop's + // Virtual methods cannot be resolved before its klass has been linked, for otherwise the Method*'s // has not been rewritten, and the vtable initialized. - assert(instanceKlass::cast(resolved_method->method_holder())->is_linked(), "must be linked"); + assert(InstanceKlass::cast(resolved_method->method_holder())->is_linked(), "must be linked"); - // Virtual methods cannot be resolved before its klass has been linked, for otherwise the methodOop's + // Virtual methods cannot be resolved before its klass has been linked, for otherwise the Method*'s // has not been rewritten, and the vtable initialized. Make sure to do this after the nullcheck, since // a missing receiver might result in a bogus lookup. - assert(instanceKlass::cast(resolved_method->method_holder())->is_linked(), "must be linked"); + assert(InstanceKlass::cast(resolved_method->method_holder())->is_linked(), "must be linked"); // do lookup based on receiver klass using the vtable index - if (resolved_method->method_holder()->klass_part()->is_interface()) { // miranda method + if (resolved_method->method_holder()->is_interface()) { // miranda method vtable_index = vtable_index_of_miranda_method(resolved_klass, resolved_method->name(), resolved_method->signature(), CHECK); assert(vtable_index >= 0 , "we should have valid vtable index at this point"); - instanceKlass* inst = instanceKlass::cast(recv_klass()); + InstanceKlass* inst = InstanceKlass::cast(recv_klass()); selected_method = methodHandle(THREAD, inst->method_at_vtable(vtable_index)); } else { // at this point we are sure that resolved_method is virtual and not @@ -901,13 +901,13 @@ // unless they override an existing method. // If we do get a negative, it means the resolved method is the the selected // method, and it can never be changed by an override. - if (vtable_index == methodOopDesc::nonvirtual_vtable_index) { + if (vtable_index == Method::nonvirtual_vtable_index) { assert(resolved_method->can_be_statically_bound(), "cannot override this method"); selected_method = resolved_method; } else { // recv_klass might be an arrayKlassOop but all vtables start at // the same place. The cast is to avoid virtual call and assertion. - instanceKlass* inst = (instanceKlass*)recv_klass()->klass_part(); + InstanceKlass* inst = (InstanceKlass*)recv_klass(); selected_method = methodHandle(THREAD, inst->method_at_vtable(vtable_index)); } } @@ -916,7 +916,7 @@ if (selected_method.is_null()) { ResourceMark rm(THREAD); THROW_MSG(vmSymbols::java_lang_AbstractMethodError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(resolved_klass()), + Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()), resolved_method->name(), resolved_method->signature())); } @@ -925,7 +925,7 @@ if (check_null_and_abstract && selected_method->is_abstract()) { ResourceMark rm(THREAD); THROW_MSG(vmSymbols::java_lang_AbstractMethodError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(resolved_klass()), + Method::name_and_sig_as_C_string(Klass::cast(resolved_klass()), selected_method->name(), selected_method->signature())); } @@ -978,7 +978,7 @@ if (sel_method.is_null()) { ResourceMark rm(THREAD); THROW_MSG(vmSymbols::java_lang_AbstractMethodError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(recv_klass()), + Method::name_and_sig_as_C_string(Klass::cast(recv_klass()), resolved_method->name(), resolved_method->signature())); } @@ -986,7 +986,7 @@ if (!sel_method->is_public()) { ResourceMark rm(THREAD); THROW_MSG(vmSymbols::java_lang_IllegalAccessError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(recv_klass()), + Method::name_and_sig_as_C_string(Klass::cast(recv_klass()), sel_method->name(), sel_method->signature())); } @@ -994,7 +994,7 @@ if (check_null_and_abstract && sel_method->is_abstract()) { ResourceMark rm(THREAD); THROW_MSG(vmSymbols::java_lang_AbstractMethodError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(recv_klass()), + Method::name_and_sig_as_C_string(Klass::cast(recv_klass()), sel_method->name(), sel_method->signature())); } @@ -1080,7 +1080,7 @@ resolve_virtual_call(info, Handle(), receiver_klass, resolved_klass, name, signature, current_klass, true, false, THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; - return methodOopDesc::invalid_vtable_index; + return Method::invalid_vtable_index; } return info.vtable_index(); } @@ -1170,7 +1170,7 @@ Symbol* method_signature = NULL; KlassHandle current_klass; resolve_pool(resolved_klass, method_name, method_signature, current_klass, pool, index, CHECK); - KlassHandle recvrKlass (THREAD, recv.is_null() ? (klassOop)NULL : recv->klass()); + KlassHandle recvrKlass (THREAD, recv.is_null() ? (Klass*)NULL : recv->klass()); resolve_virtual_call(result, recv, recvrKlass, resolved_klass, method_name, method_signature, current_klass, true, true, CHECK); } @@ -1181,7 +1181,7 @@ Symbol* method_signature = NULL; KlassHandle current_klass; resolve_pool(resolved_klass, method_name, method_signature, current_klass, pool, index, CHECK); - KlassHandle recvrKlass (THREAD, recv.is_null() ? (klassOop)NULL : recv->klass()); + KlassHandle recvrKlass (THREAD, recv.is_null() ? (Klass*)NULL : recv->klass()); resolve_interface_call(result, recv, recvrKlass, resolved_klass, method_name, method_signature, current_klass, true, true, CHECK); } @@ -1227,24 +1227,24 @@ // Resolve the bootstrap specifier (BSM + optional arguments). Handle bootstrap_specifier; // Check if CallSite has been bound already: - ConstantPoolCacheEntry* cpce = pool->cache()->secondary_entry_at(index); + ConstantPoolCacheEntry* cpce = pool->invokedynamic_cp_cache_entry_at(index); if (cpce->is_f1_null()) { - int pool_index = pool->cache()->main_entry_at(index)->constant_pool_index(); + int pool_index = cpce->constant_pool_index(); oop bsm_info = pool->resolve_bootstrap_specifier_at(pool_index, CHECK); assert(bsm_info != NULL, ""); // FIXME: Cache this once per BootstrapMethods entry, not once per CONSTANT_InvokeDynamic. bootstrap_specifier = Handle(THREAD, bsm_info); } if (!cpce->is_f1_null()) { - methodHandle method(THREAD, cpce->f2_as_vfinal_method()); - Handle appendix(THREAD, cpce->has_appendix() ? cpce->f1_appendix() : (oop)NULL); + methodHandle method(THREAD, cpce->f1_as_method()); + Handle appendix(THREAD, cpce->appendix_if_resolved(pool)); result.set_handle(method, appendix, CHECK); return; } if (TraceMethodHandles) { tty->print_cr("resolve_invokedynamic #%d %s %s", - constantPoolCacheOopDesc::decode_secondary_index(index), + ConstantPool::decode_invokedynamic_index(index), method_name->as_C_string(), method_signature->as_C_string()); tty->print(" BSM info: "); bootstrap_specifier->print(); } @@ -1265,7 +1265,7 @@ bootstrap_specifier, method_name, method_signature, &resolved_appendix, - THREAD); + CHECK); if (HAS_PENDING_EXCEPTION) { if (TraceMethodHandles) { tty->print_cr("invokedynamic throws BSME for "INTPTR_FORMAT, PENDING_EXCEPTION); @@ -1282,7 +1282,8 @@ // See the "Linking Exceptions" section for the invokedynamic instruction in the JVMS. Handle nested_exception(THREAD, PENDING_EXCEPTION); CLEAR_PENDING_EXCEPTION; - THROW_CAUSE(vmSymbols::java_lang_BootstrapMethodError(), nested_exception) + THROW_MSG_CAUSE(vmSymbols::java_lang_BootstrapMethodError(), + "BootstrapMethodError", nested_exception) } result.set_handle(resolved_method, resolved_appendix, CHECK); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/linkResolver.hpp --- a/src/share/vm/interpreter/linkResolver.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/linkResolver.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ #ifndef SHARE_VM_INTERPRETER_LINKRESOLVER_HPP #define SHARE_VM_INTERPRETER_LINKRESOLVER_HPP -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "utilities/top.hpp" // All the necessary definitions for run-time link resolution. @@ -94,7 +94,7 @@ BasicType result_type() const { return selected_method()->result_type(); } bool has_vtable_index() const { return _vtable_index >= 0; } - bool is_statically_bound() const { return _vtable_index == methodOopDesc::nonvirtual_vtable_index; } + bool is_statically_bound() const { return _vtable_index == Method::nonvirtual_vtable_index; } int vtable_index() const { // Even for interface calls the vtable index could be non-negative. // See CallInfo::set_interface. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/oopMapCache.cpp --- a/src/share/vm/interpreter/oopMapCache.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/oopMapCache.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -194,21 +194,6 @@ for (int i = 0; i < N; i++) _bit_mask[i] = 0; } - -void InterpreterOopMap::oop_iterate(OopClosure *blk) { - if (method() != NULL) { - blk->do_oop((oop*) &_method); - } -} - -void InterpreterOopMap::oop_iterate(OopClosure *blk, MemRegion mr) { - if (method() != NULL && mr.contains(&_method)) { - blk->do_oop((oop*) &_method); - } -} - - - void InterpreterOopMap::iterate_oop(OffsetClosure* oop_closure) { int n = number_of_entries(); int word_index = 0; @@ -226,13 +211,6 @@ } } -void InterpreterOopMap::verify() { - // If we are doing mark sweep _method may not have a valid header - // $$$ This used to happen only for m/s collections; we might want to - // think of an appropriate generalization of this distinction. - guarantee(Universe::heap()->is_gc_active() || _method->is_oop_or_null(), - "invalid oop in oopMapCache"); -} #ifdef ENABLE_ZAP_DEAD_LOCALS @@ -387,9 +365,6 @@ OopMapForCacheEntry gen(method, bci, this); gen.compute_map(CATCH); } - #ifdef ASSERT - verify(); - #endif } @@ -464,7 +439,6 @@ void InterpreterOopMap::resource_copy(OopMapCacheEntry* from) { assert(_resource_allocate_bit_mask, "Should not resource allocate the _bit_mask"); - assert(from->method()->is_oop(), "MethodOop is bad"); set_method(from->method()); set_bci(from->bci()); @@ -544,18 +518,6 @@ } } -void OopMapCache::oop_iterate(OopClosure *blk) { - for (int i = 0; i < _size; i++) _array[i].oop_iterate(blk); -} - -void OopMapCache::oop_iterate(OopClosure *blk, MemRegion mr) { - for (int i = 0; i < _size; i++) _array[i].oop_iterate(blk, mr); -} - -void OopMapCache::verify() { - for (int i = 0; i < _size; i++) _array[i].verify(); -} - void OopMapCache::lookup(methodHandle method, int bci, InterpreterOopMap* entry_for) { @@ -586,10 +548,10 @@ // Compute entry and return it if (method->should_not_be_cached()) { - // It is either not safe or not a good idea to cache this methodOop + // It is either not safe or not a good idea to cache this Method* // at this time. We give the caller of lookup() a copy of the // interesting info via parameter entry_for, but we don't add it to - // the cache. See the gory details in methodOop.cpp. + // the cache. See the gory details in Method*.cpp. compute_one_oop_map(method, bci, entry_for); return; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/oopMapCache.hpp --- a/src/share/vm/interpreter/oopMapCache.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/oopMapCache.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,7 @@ // The memory management system uses the cache when locating object // references in an interpreted frame. // -// OopMapCache's are allocated lazily per instanceKlass. +// OopMapCache's are allocated lazily per InstanceKlass. // The oopMap (InterpreterOopMap) is stored as a bit mask. If the // bit_mask can fit into two words it is stored in @@ -83,7 +83,7 @@ }; private: - methodOop _method; // the method for which the mask is valid + Method* _method; // the method for which the mask is valid unsigned short _bci; // the bci for which the mask is valid int _mask_size; // the mask size in bits int _expression_stack_size; // the size of the expression stack in slots @@ -100,8 +100,8 @@ #endif // access methods - methodOop method() const { return _method; } - void set_method(methodOop v) { _method = v; } + Method* method() const { return _method; } + void set_method(Method* v) { _method = v; } int bci() const { return _bci; } void set_bci(int v) { _bci = v; } int mask_size() const { return _mask_size; } @@ -142,9 +142,6 @@ void resource_copy(OopMapCacheEntry* from); void iterate_oop(OffsetClosure* oop_closure); - void oop_iterate(OopClosure * blk); - void oop_iterate(OopClosure * blk, MemRegion mr); - void verify(); void print(); bool is_oop (int offset) { return (entry_at(offset) & (1 << oop_bit_number )) != 0; } @@ -185,12 +182,6 @@ // Compute an oop map without updating the cache or grabbing any locks (for debugging) static void compute_one_oop_map(methodHandle method, int bci, InterpreterOopMap* entry); - // Helpers - // Iterate over the entries in the cached OopMapCacheEntry's - void oop_iterate(OopClosure *blk); - void oop_iterate(OopClosure *blk, MemRegion mr); - void verify(); - // Returns total no. of bytes allocated as part of OopMapCache's static long memory_usage() PRODUCT_RETURN0; }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/rewriter.cpp --- a/src/share/vm/interpreter/rewriter.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/rewriter.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ #include "interpreter/interpreter.hpp" #include "interpreter/rewriter.hpp" #include "memory/gcLocker.hpp" +#include "memory/metadataFactory.hpp" #include "memory/oopFactory.hpp" #include "memory/resourceArea.hpp" #include "oops/generateOopMap.hpp" @@ -41,7 +42,7 @@ // Marks entries in CP which require additional processing. void Rewriter::compute_index_maps() { const int length = _pool->length(); - init_cp_map(length); + init_maps(length); bool saw_mh_symbol = false; for (int i = 0; i < length; i++) { int tag = _pool->tag_at(i).value(); @@ -49,10 +50,13 @@ case JVM_CONSTANT_InterfaceMethodref: case JVM_CONSTANT_Fieldref : // fall through case JVM_CONSTANT_Methodref : // fall through + add_cp_cache_entry(i); + break; + case JVM_CONSTANT_String: + case JVM_CONSTANT_Object: case JVM_CONSTANT_MethodHandle : // fall through case JVM_CONSTANT_MethodType : // fall through - case JVM_CONSTANT_InvokeDynamic : // fall through - add_cp_cache_entry(i); + add_resolved_references_entry(i); break; case JVM_CONSTANT_Utf8: if (_pool->symbol_at(i) == vmSymbols::java_lang_invoke_MethodHandle()) @@ -61,6 +65,9 @@ } } + // Record limits of resolved reference map for constant pool cache indices + record_map_limits(); + guarantee((int)_cp_cache_map.length()-1 <= (int)((u2)-1), "all cp cache indexes fit in a u2"); @@ -73,7 +80,7 @@ int len = _methods->length(); for (int i = len-1; i >= 0; i--) { - methodOop method = (methodOop)_methods->obj_at(i); + Method* method = _methods->at(i); scan_method(method, true); } } @@ -81,10 +88,17 @@ // Creates a constant pool cache given a CPC map void Rewriter::make_constant_pool_cache(TRAPS) { const int length = _cp_cache_map.length(); - constantPoolCacheOop cache = - oopFactory::new_constantPoolCache(length, CHECK); + ClassLoaderData* loader_data = _pool->pool_holder()->class_loader_data(); + ConstantPoolCache* cache = + ConstantPoolCache::allocate(loader_data, length, CHECK); + + // initialize object cache in constant pool + _pool->initialize_resolved_references(loader_data, _resolved_references_map, + _resolved_reference_limit, + CHECK); + No_Safepoint_Verifier nsv; - cache->initialize(_cp_cache_map); + cache->initialize(_cp_cache_map, _invokedynamic_references_map); _pool->set_cache(cache); cache->set_constant_pool(_pool()); } @@ -138,19 +152,19 @@ int cache_index = cp_entry_to_cp_cache(cp_index); Bytes::put_native_u2(p, cache_index); if (!_method_handle_invokers.is_empty()) - maybe_rewrite_invokehandle(p - 1, cp_index, reverse); + maybe_rewrite_invokehandle(p - 1, cp_index, cache_index, reverse); } else { int cache_index = Bytes::get_native_u2(p); int pool_index = cp_cache_entry_pool_index(cache_index); Bytes::put_Java_u2(p, pool_index); if (!_method_handle_invokers.is_empty()) - maybe_rewrite_invokehandle(p - 1, pool_index, reverse); + maybe_rewrite_invokehandle(p - 1, pool_index, cache_index, reverse); } } // Adjust the invocation bytecode for a signature-polymorphic method (MethodHandle.invoke, etc.) -void Rewriter::maybe_rewrite_invokehandle(address opc, int cp_index, bool reverse) { +void Rewriter::maybe_rewrite_invokehandle(address opc, int cp_index, int cache_index, bool reverse) { if (!reverse) { if ((*opc) == (u1)Bytecodes::_invokevirtual || // allow invokespecial as an alias, although it would be very odd: @@ -163,10 +177,13 @@ if (status == 0) { if (_pool->klass_ref_at_noresolve(cp_index) == vmSymbols::java_lang_invoke_MethodHandle() && MethodHandles::is_signature_polymorphic_name(SystemDictionary::MethodHandle_klass(), - _pool->name_ref_at(cp_index))) + _pool->name_ref_at(cp_index))) { + // we may need a resolved_refs entry for the appendix + add_invokedynamic_resolved_references_entry(cp_index, cache_index); status = +1; - else + } else { status = -1; + } _method_handle_invokers[cp_index] = status; } // We use a special internal bytecode for such methods (if non-static). @@ -193,9 +210,8 @@ assert(p[-1] == Bytecodes::_invokedynamic, "not invokedynamic bytecode"); if (!reverse) { int cp_index = Bytes::get_Java_u2(p); - int cpc = maybe_add_cp_cache_entry(cp_index); // add lazily - int cpc2 = add_secondary_cp_cache_entry(cpc); - + int cache_index = add_invokedynamic_cp_cache_entry(cp_index); + add_invokedynamic_resolved_references_entry(cp_index, cache_index); // Replace the trailing four bytes with a CPC index for the dynamic // call site. Unlike other CPC entries, there is one per bytecode, // not just one per distinct CP entry. In other words, the @@ -204,17 +220,17 @@ // all these entries. That is the main reason invokedynamic // must have a five-byte instruction format. (Of course, other JVM // implementations can use the bytes for other purposes.) - Bytes::put_native_u4(p, constantPoolCacheOopDesc::encode_secondary_index(cpc2)); + Bytes::put_native_u4(p, ConstantPool::encode_invokedynamic_index(cache_index)); // Note: We use native_u4 format exclusively for 4-byte indexes. } else { - int cache_index = constantPoolCacheOopDesc::decode_secondary_index( + // callsite index + int cache_index = ConstantPool::decode_invokedynamic_index( Bytes::get_native_u4(p)); - int secondary_index = cp_cache_secondary_entry_main_index(cache_index); - int pool_index = cp_cache_entry_pool_index(secondary_index); - assert(_pool->tag_at(pool_index).is_invoke_dynamic(), "wrong index"); + int cp_index = cp_cache_entry_pool_index(cache_index); + assert(_pool->tag_at(cp_index).is_invoke_dynamic(), "wrong index"); // zero out 4 bytes Bytes::put_Java_u4(p, 0); - Bytes::put_Java_u2(p, pool_index); + Bytes::put_Java_u2(p, cp_index); } } @@ -227,16 +243,16 @@ address p = bcp + offset; int cp_index = is_wide ? Bytes::get_Java_u2(p) : (u1)(*p); constantTag tag = _pool->tag_at(cp_index).value(); - if (tag.is_method_handle() || tag.is_method_type()) { - int cache_index = cp_entry_to_cp_cache(cp_index); + if (tag.is_method_handle() || tag.is_method_type() || tag.is_string() || tag.is_object()) { + int ref_index = cp_entry_to_resolved_references(cp_index); if (is_wide) { (*bcp) = Bytecodes::_fast_aldc_w; - assert(cache_index == (u2)cache_index, "index overflow"); - Bytes::put_native_u2(p, cache_index); + assert(ref_index == (u2)ref_index, "index overflow"); + Bytes::put_native_u2(p, ref_index); } else { (*bcp) = Bytecodes::_fast_aldc; - assert(cache_index == (u1)cache_index, "index overflow"); - (*p) = (u1)cache_index; + assert(ref_index == (u1)ref_index, "index overflow"); + (*p) = (u1)ref_index; } } } else { @@ -244,8 +260,8 @@ (is_wide ? Bytecodes::_fast_aldc_w : Bytecodes::_fast_aldc); if ((*bcp) == rewritten_bc) { address p = bcp + offset; - int cache_index = is_wide ? Bytes::get_native_u2(p) : (u1)(*p); - int pool_index = cp_cache_entry_pool_index(cache_index); + int ref_index = is_wide ? Bytes::get_native_u2(p) : (u1)(*p); + int pool_index = resolved_references_entry_to_pool_index(ref_index); if (is_wide) { (*bcp) = Bytecodes::_ldc_w; assert(pool_index == (u2)pool_index, "index overflow"); @@ -261,14 +277,14 @@ // Rewrites a method given the index_map information -void Rewriter::scan_method(methodOop method, bool reverse) { +void Rewriter::scan_method(Method* method, bool reverse) { int nof_jsrs = 0; bool has_monitor_bytecodes = false; { // We cannot tolerate a GC in this block, because we've - // cached the bytecodes in 'code_base'. If the methodOop + // cached the bytecodes in 'code_base'. If the Method* // moves, the bytecodes will also move. No_Safepoint_Verifier nsv; Bytecodes::Code c; @@ -371,16 +387,6 @@ ResolveOopMapConflicts romc(method); methodHandle original_method = method; method = romc.do_potential_rewrite(CHECK_(methodHandle())); - if (method() != original_method()) { - // Insert invalid bytecode into original methodOop and set - // interpreter entrypoint, so that a executing this method - // will manifest itself in an easy recognizable form. - address bcp = original_method->bcp_from(0); - *bcp = (u1)Bytecodes::_shouldnotreachhere; - int kind = Interpreter::method_kind(original_method); - original_method->set_interpreter_kind(kind); - } - // Update monitor matching info. if (romc.monitor_safe()) { method->set_guaranteed_monitor_matching(); @@ -396,28 +402,28 @@ } -void Rewriter::rewrite(instanceKlassHandle klass, constantPoolHandle cpool, objArrayHandle methods, TRAPS) { +void Rewriter::rewrite(instanceKlassHandle klass, constantPoolHandle cpool, Array* methods, TRAPS) { ResourceMark rm(THREAD); Rewriter rw(klass, cpool, methods, CHECK); // (That's all, folks.) } -Rewriter::Rewriter(instanceKlassHandle klass, constantPoolHandle cpool, objArrayHandle methods, TRAPS) +Rewriter::Rewriter(instanceKlassHandle klass, constantPoolHandle cpool, Array* methods, TRAPS) : _klass(klass), _pool(cpool), _methods(methods) { assert(_pool->cache() == NULL, "constant pool cache must not be set yet"); - // determine index maps for methodOop rewriting + // determine index maps for Method* rewriting compute_index_maps(); if (RegisterFinalizersAtInit && _klass->name() == vmSymbols::java_lang_Object()) { bool did_rewrite = false; int i = _methods->length(); while (i-- > 0) { - methodOop method = (methodOop)_methods->obj_at(i); + Method* method = _methods->at(i); if (method->intrinsic_id() == vmIntrinsics::_Object_init) { // rewrite the return bytecodes of Object. to register the // object for finalization if needed. @@ -434,7 +440,7 @@ int len = _methods->length(); for (int i = len-1; i >= 0; i--) { - methodOop method = (methodOop)_methods->obj_at(i); + Method* method = _methods->at(i); scan_method(method); } @@ -455,20 +461,19 @@ // Link and check jvmti dependencies while we're iterating over the methods. // JSR292 code calls with a different set of methods, so two entry points. void Rewriter::relocate_and_link(instanceKlassHandle this_oop, TRAPS) { - objArrayHandle methods(THREAD, this_oop->methods()); - relocate_and_link(this_oop, methods, THREAD); + relocate_and_link(this_oop, this_oop->methods(), THREAD); } void Rewriter::relocate_and_link(instanceKlassHandle this_oop, - objArrayHandle methods, TRAPS) { + Array* methods, TRAPS) { int len = methods->length(); for (int i = len-1; i >= 0; i--) { - methodHandle m(THREAD, (methodOop)methods->obj_at(i)); + methodHandle m(THREAD, methods->at(i)); if (m->has_jsrs()) { m = rewrite_jsrs(m, CHECK); // Method might have gotten rewritten. - methods->obj_at_put(i, m()); + methods->at_put(i, m()); } // Set up method entry points for compiler and interpreter . @@ -481,7 +486,7 @@ for (int j = i; j >= 0 && j >= i-4; j--) { if ((++nmc % 1000) == 0) tty->print_cr("Have run MethodComparator %d times...", nmc); bool z = MethodComparator::methods_EMCP(m(), - (methodOop)methods->obj_at(j)); + methods->at(j)); if (j == i && !z) { tty->print("MethodComparator FAIL: "); m->print(); m->print_codes(); assert(z, "method must compare equal to itself"); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/rewriter.hpp --- a/src/share/vm/interpreter/rewriter.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/rewriter.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,59 +36,121 @@ private: instanceKlassHandle _klass; constantPoolHandle _pool; - objArrayHandle _methods; + Array* _methods; intArray _cp_map; - intStack _cp_cache_map; + intStack _cp_cache_map; // for Methodref, Fieldref, + // InterfaceMethodref and InvokeDynamic + intArray _reference_map; // maps from cp index to resolved_refs index (or -1) + intStack _resolved_references_map; // for strings, methodHandle, methodType + intStack _invokedynamic_references_map; // for invokedynamic resolved refs intArray _method_handle_invokers; + int _resolved_reference_limit; - void init_cp_map(int length) { + void init_maps(int length) { _cp_map.initialize(length, -1); // Choose an initial value large enough that we don't get frequent // calls to grow(). _cp_cache_map.initialize(length / 2); + // Also cache resolved objects, in another different cache. + _reference_map.initialize(length, -1); + _resolved_references_map.initialize(length / 2); + _invokedynamic_references_map.initialize(length / 2); + _resolved_reference_limit = -1; + DEBUG_ONLY(_cp_cache_index_limit = -1); } + + int _cp_cache_index_limit; + void record_map_limits() { +#ifdef ASSERT + // Record initial size of the two arrays generated for the CP cache: + _cp_cache_index_limit = _cp_cache_map.length(); +#endif //ASSERT + _resolved_reference_limit = _resolved_references_map.length(); + } + int cp_entry_to_cp_cache(int i) { assert(has_cp_cache(i), "oob"); return _cp_map[i]; } bool has_cp_cache(int i) { return (uint)i < (uint)_cp_map.length() && _cp_map[i] >= 0; } - int maybe_add_cp_cache_entry(int i) { return has_cp_cache(i) ? _cp_map[i] : add_cp_cache_entry(i); } + int add_cp_cache_entry(int cp_index) { - assert((cp_index & _secondary_entry_tag) == 0, "bad tag"); + assert(_pool->tag_at(cp_index).value() != JVM_CONSTANT_InvokeDynamic, "use indy version"); assert(_cp_map[cp_index] == -1, "not twice on same cp_index"); + assert(_cp_cache_index_limit == -1, "do not add cache entries after first iteration"); int cache_index = _cp_cache_map.append(cp_index); _cp_map.at_put(cp_index, cache_index); assert(cp_entry_to_cp_cache(cp_index) == cache_index, ""); + assert(cp_cache_entry_pool_index(cache_index) == cp_index, ""); + return cache_index; + } + + // add a new CP cache entry beyond the normal cache (for invokedynamic only) + int add_invokedynamic_cp_cache_entry(int cp_index) { + assert(_pool->tag_at(cp_index).value() == JVM_CONSTANT_InvokeDynamic, "use non-indy version"); + assert(_cp_map[cp_index] == -1, "do not map from cp_index"); + assert(_cp_cache_index_limit >= 0, "add indy cache entries after first iteration"); + int cache_index = _cp_cache_map.append(cp_index); + assert(cache_index >= _cp_cache_index_limit, ""); + // do not update _cp_map, since the mapping is one-to-many + assert(cp_cache_entry_pool_index(cache_index) == cp_index, ""); return cache_index; } - int add_secondary_cp_cache_entry(int main_cpc_entry) { - assert(main_cpc_entry < _cp_cache_map.length(), "must be earlier CP cache entry"); - int cache_index = _cp_cache_map.append(main_cpc_entry | _secondary_entry_tag); - return cache_index; + + // fix duplicated code later + int cp_entry_to_resolved_references(int cp_index) const { + assert(has_entry_in_resolved_references(cp_index), "oob"); + return _reference_map[cp_index]; + } + bool has_entry_in_resolved_references(int cp_index) const { + return (uint)cp_index < (uint)_reference_map.length() && _reference_map[cp_index] >= 0; + } + + // add a new entry to the resolved_references map + int add_resolved_references_entry(int cp_index) { + assert(_reference_map[cp_index] == -1, "not twice on same cp_index"); + assert(_resolved_reference_limit == -1, "do not add CP refs after first iteration"); + int ref_index = _resolved_references_map.append(cp_index); + _reference_map.at_put(cp_index, ref_index); + assert(cp_entry_to_resolved_references(cp_index) == ref_index, ""); + return ref_index; + } + + // add a new entry to the resolved_references map (for invokedynamic only) + int add_invokedynamic_resolved_references_entry(int cp_index, int cache_index) { + assert(_resolved_reference_limit >= 0, "must add indy refs after first iteration"); + int ref_index = _resolved_references_map.append(cp_index); // many-to-one + assert(ref_index >= _resolved_reference_limit, ""); + _invokedynamic_references_map.at_put_grow(ref_index, cache_index, -1); + return ref_index; + } + + int resolved_references_entry_to_pool_index(int ref_index) { + int cp_index = _resolved_references_map[ref_index]; + return cp_index; + } + + // invokedynamic support - append the cpCache entry (encoded) in object map. + // The resolved_references_map should still be in ascending order + // The resolved_references has the invokedynamic call site objects appended after + // the objects that are resolved in the constant pool. + int add_callsite_entry(int main_cpc_entry) { + int ref_index = _resolved_references_map.append(main_cpc_entry); + return ref_index; } // Access the contents of _cp_cache_map to determine CP cache layout. int cp_cache_entry_pool_index(int cache_index) { int cp_index = _cp_cache_map[cache_index]; - if ((cp_index & _secondary_entry_tag) != 0) - return -1; - else return cp_index; } - int cp_cache_secondary_entry_main_index(int cache_index) { - int cp_index = _cp_cache_map[cache_index]; - if ((cp_index & _secondary_entry_tag) == 0) - return -1; - else - return (cp_index - _secondary_entry_tag); - } // All the work goes in here: - Rewriter(instanceKlassHandle klass, constantPoolHandle cpool, objArrayHandle methods, TRAPS); + Rewriter(instanceKlassHandle klass, constantPoolHandle cpool, Array* methods, TRAPS); void compute_index_maps(); void make_constant_pool_cache(TRAPS); - void scan_method(methodOop m, bool reverse = false); + void scan_method(Method* m, bool reverse = false); void rewrite_Object_init(methodHandle m, TRAPS); void rewrite_member_reference(address bcp, int offset, bool reverse = false); - void maybe_rewrite_invokehandle(address opc, int cp_index, bool reverse = false); + void maybe_rewrite_invokehandle(address opc, int cp_index, int cache_index, bool reverse = false); void rewrite_invokedynamic(address bcp, int offset, bool reverse = false); void maybe_rewrite_ldc(address bcp, int offset, bool is_wide, bool reverse = false); // Revert bytecodes in case of an exception. @@ -98,17 +160,13 @@ public: // Driver routine: static void rewrite(instanceKlassHandle klass, TRAPS); - static void rewrite(instanceKlassHandle klass, constantPoolHandle cpool, objArrayHandle methods, TRAPS); - - enum { - _secondary_entry_tag = nth_bit(30) - }; + static void rewrite(instanceKlassHandle klass, constantPoolHandle cpool, Array* methods, TRAPS); // Second pass, not gated by is_rewritten flag static void relocate_and_link(instanceKlassHandle klass, TRAPS); // JSR292 version to call with it's own methods. static void relocate_and_link(instanceKlassHandle klass, - objArrayHandle methods, TRAPS); + Array* methods, TRAPS); }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/templateInterpreter.cpp --- a/src/share/vm/interpreter/templateInterpreter.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/templateInterpreter.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -510,7 +510,7 @@ assert(step > 0, "just checkin'"); // setup stuff for dispatching next bytecode if (ProfileInterpreter && VerifyDataPointer - && methodDataOopDesc::bytecode_has_profile(t->bytecode())) { + && MethodData::bytecode_has_profile(t->bytecode())) { __ verify_method_data_pointer(); } __ dispatch_prolog(tos_out, step); @@ -588,7 +588,7 @@ // Deoptimization support // If deoptimization happens, this function returns the point of next bytecode to continue execution -address TemplateInterpreter::deopt_continue_after_entry(methodOop method, address bcp, int callee_parameters, bool is_top_frame) { +address TemplateInterpreter::deopt_continue_after_entry(Method* method, address bcp, int callee_parameters, bool is_top_frame) { return AbstractInterpreter::deopt_continue_after_entry(method, bcp, callee_parameters, is_top_frame); } @@ -596,7 +596,7 @@ // the bytecode. // Note: Bytecodes::_athrow (C1 only) and Bytecodes::_return are the special cases // that do not return "Interpreter::deopt_entry(vtos, 0)" -address TemplateInterpreter::deopt_reexecute_entry(methodOop method, address bcp) { +address TemplateInterpreter::deopt_reexecute_entry(Method* method, address bcp) { assert(method->contains(bcp), "just checkin'"); Bytecodes::Code code = Bytecodes::java_code_at(method, bcp); if (code == Bytecodes::_return) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/templateInterpreter.hpp --- a/src/share/vm/interpreter/templateInterpreter.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/templateInterpreter.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -174,14 +174,14 @@ // Deoptimization support // Compute the entry address for continuation after - static address deopt_continue_after_entry(methodOop method, + static address deopt_continue_after_entry(Method* method, address bcp, int callee_parameters, bool is_top_frame); // Deoptimization should reexecute this bytecode static bool bytecode_should_reexecute(Bytecodes::Code code); // Compute the address for reexecution - static address deopt_reexecute_entry(methodOop method, address bcp); + static address deopt_reexecute_entry(Method* method, address bcp); #ifdef TARGET_ARCH_x86 # include "templateInterpreter_x86.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/templateTable.cpp --- a/src/share/vm/interpreter/templateTable.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/templateTable.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -444,7 +444,7 @@ def(Bytecodes::_invokespecial , ubcp|disp|clvm|____, vtos, vtos, invokespecial , f1_byte ); def(Bytecodes::_invokestatic , ubcp|disp|clvm|____, vtos, vtos, invokestatic , f1_byte ); def(Bytecodes::_invokeinterface , ubcp|disp|clvm|____, vtos, vtos, invokeinterface , f1_byte ); - def(Bytecodes::_invokedynamic , ubcp|disp|clvm|____, vtos, vtos, invokedynamic , f12_oop ); + def(Bytecodes::_invokedynamic , ubcp|disp|clvm|____, vtos, vtos, invokedynamic , f1_byte ); def(Bytecodes::_new , ubcp|____|clvm|____, vtos, atos, _new , _ ); def(Bytecodes::_newarray , ubcp|____|clvm|____, itos, atos, newarray , _ ); def(Bytecodes::_anewarray , ubcp|____|clvm|____, itos, atos, anewarray , _ ); @@ -514,7 +514,7 @@ def(Bytecodes::_return_register_finalizer , ____|disp|clvm|____, vtos, vtos, _return , vtos ); - def(Bytecodes::_invokehandle , ubcp|disp|clvm|____, vtos, vtos, invokehandle , f12_oop ); + def(Bytecodes::_invokehandle , ubcp|disp|clvm|____, vtos, vtos, invokehandle , f1_byte ); def(Bytecodes::_shouldnotreachhere , ____|____|____|____, vtos, vtos, shouldnotreachhere , _ ); // platform specific bytecodes diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/interpreter/templateTable.hpp --- a/src/share/vm/interpreter/templateTable.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/interpreter/templateTable.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -98,7 +98,7 @@ public: enum Operation { add, sub, mul, div, rem, _and, _or, _xor, shl, shr, ushr }; enum Condition { equal, not_equal, less, less_equal, greater, greater_equal }; - enum CacheByte { f1_byte = 1, f2_byte = 2, f12_oop = 0x12 }; // byte_no codes + enum CacheByte { f1_byte = 1, f2_byte = 2 }; // byte_no codes private: static bool _is_initialized; // true if TemplateTable has been initialized @@ -272,7 +272,6 @@ static void _return(TosState state); static void resolve_cache_and_index(int byte_no, // one of 1,2,11 - Register result , // either noreg or output for f1/f2 Register cache, // output for CP cache Register index, // output for CP index size_t index_size); // one of 1,2,4 diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/allocation.cpp --- a/src/share/vm/memory/allocation.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/allocation.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,10 @@ #include "precompiled.hpp" #include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" +#include "memory/genCollectedHeap.hpp" +#include "memory/metaspaceShared.hpp" #include "memory/resourceArea.hpp" +#include "memory/universe.hpp" #include "runtime/atomic.hpp" #include "runtime/os.hpp" #include "runtime/task.hpp" @@ -51,6 +54,27 @@ void* _ValueObj::operator new(size_t size) { ShouldNotCallThis(); return 0; }; void _ValueObj::operator delete(void* p) { ShouldNotCallThis(); }; +void* MetaspaceObj::operator new(size_t size, ClassLoaderData* loader_data, + size_t word_size, bool read_only, TRAPS) { + // Klass has it's own operator new + return Metaspace::allocate(loader_data, word_size, read_only, + Metaspace::NonClassType, CHECK_NULL); +} + +bool MetaspaceObj::is_shared() const { + return MetaspaceShared::is_in_shared_space(this); +} + +bool MetaspaceObj::is_metadata() const { + // ClassLoaderDataGraph::contains((address)this); has lock inversion problems + return !Universe::heap()->is_in_reserved(this); +} + +void MetaspaceObj::print_address_on(outputStream* st) const { + st->print(" {"INTPTR_FORMAT"}", this); +} + + void* ResourceObj::operator new(size_t size, allocation_type type, MEMFLAGS flags) { address res; switch (type) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/allocation.hpp --- a/src/share/vm/memory/allocation.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/allocation.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -70,6 +70,9 @@ // For classes used as name spaces. // - AllStatic // +// For classes in Metaspace (class data) +// - MetaspaceObj +// // The printable subclasses are used for debugging and define virtual // member functions for printing. Classes that avoid allocating the // vtbl entries in the objects should therefore not be the printable @@ -211,6 +214,29 @@ void operator delete(void* p); }; + +// Base class for objects stored in Metaspace. +// Calling delete will result in fatal error. +// +// Do not inherit from something with a vptr because this class does +// not introduce one. This class is used to allocate both shared read-only +// and shared read-write classes. +// + +class ClassLoaderData; + +class MetaspaceObj { + public: + bool is_metadata() const; + bool is_shared() const; + void print_address_on(outputStream* st) const; // nonvirtual address printing + + void* operator new(size_t size, ClassLoaderData* loader_data, + size_t word_size, bool read_only, Thread* thread); + // can't use TRAPS from this header file. + void operator delete(void* p) { ShouldNotCallThis(); } +}; + // Base class for classes that constitute name spaces. class AllStatic { @@ -252,6 +278,7 @@ void chop(); // Chop this chunk void next_chop(); // Chop next chunk static size_t aligned_overhead_size(void) { return ARENA_ALIGN(sizeof(Chunk)); } + static size_t aligned_overhead_size(size_t byte_size) { return ARENA_ALIGN(byte_size); } size_t length() const { return _len; } Chunk* next() const { return _next; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/barrierSet.hpp --- a/src/share/vm/memory/barrierSet.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/barrierSet.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -70,7 +70,6 @@ // kinds requires a barrier. virtual bool read_ref_needs_barrier(void* field) = 0; virtual bool read_prim_needs_barrier(HeapWord* field, size_t bytes) = 0; - virtual bool write_ref_needs_barrier(void* field, oop new_val) = 0; virtual bool write_prim_needs_barrier(HeapWord* field, size_t bytes, juint val1, juint val2) = 0; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/binaryTreeDictionary.hpp --- a/src/share/vm/memory/binaryTreeDictionary.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/binaryTreeDictionary.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -164,10 +164,10 @@ class BinaryTreeDictionary: public FreeBlockDictionary { friend class VMStructs; bool _splay; + bool _adaptive_freelists; size_t _total_size; size_t _total_free_blocks; TreeList* _root; - bool _adaptive_freelists; // private accessors bool splay() const { return _splay; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/blockOffsetTable.cpp --- a/src/share/vm/memory/blockOffsetTable.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/blockOffsetTable.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -98,16 +98,6 @@ } -void BlockOffsetSharedArray::serialize(SerializeOopClosure* soc, - HeapWord* start, HeapWord* end) { - assert(_offset_array[0] == 0, "objects can't cross covered areas"); - assert(start <= end, "bad address range"); - size_t start_index = index_for(start); - size_t end_index = index_for(end-1)+1; - soc->do_region(&_offset_array[start_index], - (end_index - start_index) * sizeof(_offset_array[0])); -} - ////////////////////////////////////////////////////////////////////// // BlockOffsetArray ////////////////////////////////////////////////////////////////////// @@ -801,17 +791,6 @@ _array->set_offset_array(bottom_index, 0); } - -void BlockOffsetArrayContigSpace::serialize(SerializeOopClosure* soc) { - if (soc->reading()) { - // Null these values so that the serializer won't object to updating them. - _next_offset_threshold = NULL; - _next_offset_index = 0; - } - soc->do_ptr(&_next_offset_threshold); - soc->do_size_t(&_next_offset_index); -} - size_t BlockOffsetArrayContigSpace::last_active_index() const { size_t result = _next_offset_index - 1; return result >= 0 ? result : 0; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/blockOffsetTable.hpp --- a/src/share/vm/memory/blockOffsetTable.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/blockOffsetTable.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,7 +42,6 @@ // class ContiguousSpace; -class SerializeOopClosure; ////////////////////////////////////////////////////////////////////////// // The BlockOffsetTable "interface" @@ -258,9 +257,6 @@ // returned to the start of a region. It is a simple // primitive. HeapWord* inc_by_region_size(HeapWord* p) const { return p + N_words; } - - // Shared space support - void serialize(SerializeOopClosure* soc, HeapWord* start, HeapWord* end); }; ////////////////////////////////////////////////////////////////////////// @@ -563,8 +559,6 @@ HeapWord* block_start_unsafe(const void* addr) const; - void serialize(SerializeOopClosure* soc); - // Debugging support virtual size_t last_active_index() const; }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/blockOffsetTable.inline.hpp --- a/src/share/vm/memory/blockOffsetTable.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/blockOffsetTable.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,9 +28,6 @@ #include "memory/blockOffsetTable.hpp" #include "memory/space.hpp" #include "runtime/safepoint.hpp" -#ifndef SERIALGC -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" -#endif ////////////////////////////////////////////////////////////////////////// // BlockOffsetTable inlines diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/cardTableModRefBS.hpp --- a/src/share/vm/memory/cardTableModRefBS.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/cardTableModRefBS.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -285,12 +285,6 @@ bool has_write_ref_pre_barrier() { return false; } - inline bool write_ref_needs_barrier(void* field, oop new_val) { - // Note that this assumes the perm gen is the highest generation - // in the address space - return new_val != NULL && !new_val->is_perm(); - } - // Record a reference update. Note that these versions are precise! // The scanning code has to handle the fact that the write barrier may be // either precise or imprecise. We make non-virtual inline variants of diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/cardTableRS.cpp --- a/src/share/vm/memory/cardTableRS.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/cardTableRS.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -298,13 +298,12 @@ _ct_bs->non_clean_card_iterate_possibly_parallel(sp, urasm, cl, this); } -void CardTableRS::clear_into_younger(Generation* gen, bool clear_perm) { +void CardTableRS::clear_into_younger(Generation* gen) { GenCollectedHeap* gch = GenCollectedHeap::heap(); // Generations younger than gen have been evacuated. We can clear // card table entries for gen (we know that it has no pointers // to younger gens) and for those below. The card tables for - // the youngest gen need never be cleared, and those for perm gen - // will be cleared based on the parameter clear_perm. + // the youngest gen need never be cleared. // There's a bit of subtlety in the clear() and invalidate() // methods that we exploit here and in invalidate_or_clear() // below to avoid missing cards at the fringes. If clear() or @@ -317,17 +316,11 @@ MemRegion to_be_cleared_mr = g->prev_used_region(); clear(to_be_cleared_mr); } - // Clear perm gen cards if asked to do so. - if (clear_perm) { - MemRegion to_be_cleared_mr = gch->perm_gen()->prev_used_region(); - clear(to_be_cleared_mr); - } } -void CardTableRS::invalidate_or_clear(Generation* gen, bool younger, - bool perm) { +void CardTableRS::invalidate_or_clear(Generation* gen, bool younger) { GenCollectedHeap* gch = GenCollectedHeap::heap(); - // For each generation gen (and younger and/or perm) + // For each generation gen (and younger) // invalidate the cards for the currently occupied part // of that generation and clear the cards for the // unoccupied part of the generation (if any, making use @@ -345,16 +338,6 @@ invalidate(used_mr); if (!younger) break; } - // Clear perm gen cards if asked to do so. - if (perm) { - g = gch->perm_gen(); - MemRegion used_mr = g->used_region(); - MemRegion to_be_cleared_mr = g->prev_used_region().minus(used_mr); - if (!to_be_cleared_mr.is_empty()) { - clear(to_be_cleared_mr); - } - invalidate(used_mr); - } } @@ -456,7 +439,7 @@ VerifyCleanCardClosure verify_blk(gen_boundary, begin, end); for (HeapWord* cur = start_block; cur < end; cur += s->block_size(cur)) { if (s->block_is_obj(cur) && s->obj_is_alive(cur)) { - oop(cur)->oop_iterate(&verify_blk, mr); + oop(cur)->oop_iterate_no_header(&verify_blk, mr); } } } @@ -624,25 +607,12 @@ // generational heaps. VerifyCTGenClosure blk(this); CollectedHeap* ch = Universe::heap(); - // We will do the perm-gen portion of the card table, too. - Generation* pg = SharedHeap::heap()->perm_gen(); - HeapWord* pg_boundary = pg->reserved().start(); if (ch->kind() == CollectedHeap::GenCollectedHeap) { GenCollectedHeap::heap()->generation_iterate(&blk, false); _ct_bs->verify(); - - // If the old gen collections also collect perm, then we are only - // interested in perm-to-young pointers, not perm-to-old pointers. - GenCollectedHeap* gch = GenCollectedHeap::heap(); - CollectorPolicy* cp = gch->collector_policy(); - if (cp->is_mark_sweep_policy() || cp->is_concurrent_mark_sweep_policy()) { - pg_boundary = gch->get_gen(1)->reserved().start(); } } - VerifyCTSpaceClosure perm_space_blk(this, pg_boundary); - SharedHeap::heap()->perm_gen()->space_iterate(&perm_space_blk, true); -} void CardTableRS::verify_aligned_region_empty(MemRegion mr) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/cardTableRS.hpp --- a/src/share/vm/memory/cardTableRS.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/cardTableRS.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -141,12 +141,12 @@ void verify_aligned_region_empty(MemRegion mr); void clear(MemRegion mr) { _ct_bs->clear(mr); } - void clear_into_younger(Generation* gen, bool clear_perm); + void clear_into_younger(Generation* gen); void invalidate(MemRegion mr, bool whole_heap = false) { _ct_bs->invalidate(mr, whole_heap); } - void invalidate_or_clear(Generation* gen, bool younger, bool perm); + void invalidate_or_clear(Generation* gen, bool younger); static uintx ct_max_alignment_constraint() { return CardTableModRefBS::ct_max_alignment_constraint(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/classify.cpp --- a/src/share/vm/memory/classify.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,191 +0,0 @@ -/* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/systemDictionary.hpp" -#include "memory/classify.hpp" - - -const char* ClassifyObjectClosure::object_type_name[number_object_types] = { - "unknown", - "instance", - "instanceRef", - "objArray", - "symbol", - "klass", - "instanceKlass", - "method", - "constMethod", - "methodData", - "constantPool", - "constantPoolCache", - "typeArray", - "compiledICHolder" -}; - - -object_type ClassifyObjectClosure::classify_object(oop obj, bool count) { - object_type type = unknown_type; - - Klass* k = obj->blueprint(); - - if (k->as_klassOop() == SystemDictionary::Object_klass()) { - tty->print_cr("Found the class!"); - } - - if (count) { - k->set_alloc_count(k->alloc_count() + 1); - } - - if (obj->is_instance()) { - if (k->oop_is_instanceRef()) { - type = instanceRef_type; - } else { - type = instance_type; - } - } else if (obj->is_typeArray()) { - type = typeArray_type; - } else if (obj->is_objArray()) { - type = objArray_type; - } else if (obj->is_klass()) { - Klass* k = ((klassOop)obj)->klass_part(); - if (k->oop_is_instance()) { - type = instanceKlass_type; - } else { - type = klass_type; - } - } else if (obj->is_method()) { - type = method_type; - } else if (obj->is_constMethod()) { - type = constMethod_type; - } else if (obj->is_methodData()) { - ShouldNotReachHere(); - } else if (obj->is_constantPool()) { - type = constantPool_type; - } else if (obj->is_constantPoolCache()) { - type = constantPoolCache_type; - } else if (obj->is_compiledICHolder()) { - type = compiledICHolder_type; - } else { - ShouldNotReachHere(); - } - - assert(type != unknown_type, "found object of unknown type."); - return type; -} - - -void ClassifyObjectClosure::reset() { - for (int i = 0; i < number_object_types; ++i) { - object_count[i] = 0; - object_size[i] = 0; - } - total_object_count = 0; - total_object_size = 0; -} - - -void ClassifyObjectClosure::do_object(oop obj) { - int i = classify_object(obj, true); - ++object_count[i]; - ++total_object_count; - size_t size = obj->size() * HeapWordSize; - object_size[i] += size; - total_object_size += size; -} - - -size_t ClassifyObjectClosure::print() { - int num_objects = 0; - size_t size_objects = 0; - for (int i = 0; i < number_object_types; ++i) { - if (object_count[i] != 0) { - tty->print_cr("%8d %-22s (%8d bytes, %5.2f bytes/object)", - object_count[i], object_type_name[i], object_size[i], - (float)object_size[i]/(float)object_count[i]); - } - num_objects += object_count[i]; - size_objects += object_size[i]; - } - assert(num_objects == total_object_count, "Object count mismatch!"); - assert(size_objects == total_object_size, "Object size mismatch!"); - - tty->print_cr(" Total: %d objects, %d bytes", total_object_count, - total_object_size); - return total_object_size; -} - - -void ClassifyInstanceKlassClosure::do_object(oop obj) { - int type = classify_object(obj, false); - if (type == instanceKlass_type || type == klass_type) { - Klass* k = ((klassOop)obj)->klass_part(); - if (k->alloc_count() > 0) { - ResourceMark rm; - const char *name; - if (k->name() == NULL) { - - if (obj == Universe::klassKlassObj()) { - name = "_klassKlassObj"; - } else if (obj == Universe::arrayKlassKlassObj()) { - name = "_arrayKlassKlassObj"; - } else if (obj == Universe::objArrayKlassKlassObj()) { - name = "_objArrayKlassKlassObj"; - } else if (obj == Universe::typeArrayKlassKlassObj()) { - name = "_typeArrayKlassKlassObj"; - } else if (obj == Universe::instanceKlassKlassObj()) { - name = "_instanceKlassKlassObj"; - } else if (obj == Universe::methodKlassObj()) { - name = "_methodKlassObj"; - } else if (obj == Universe::constMethodKlassObj()) { - name = "_constMethodKlassObj"; - } else if (obj == Universe::constantPoolKlassObj()) { - name = "_constantPoolKlassObj"; - } else if (obj == Universe::constantPoolCacheKlassObj()) { - name = "_constantPoolCacheKlassObj"; - } else if (obj == Universe::compiledICHolderKlassObj()) { - name = "_compiledICHolderKlassObj"; - } else if (obj == Universe::systemObjArrayKlassObj()) { - name = "_systemObjArrayKlassObj"; - } else { - name = "[unnamed]"; - } - } else { - name = k->external_name(); - } - tty->print_cr("% 8d instances of %s", k->alloc_count(), name); - } - total_instances += k->alloc_count(); - } -} - - -void ClassifyInstanceKlassClosure::print() { - tty->print_cr(" Total instances: %d.", total_instances); -} - - -void ClassifyInstanceKlassClosure::reset() { - total_instances = 0; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/classify.hpp --- a/src/share/vm/memory/classify.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_MEMORY_CLASSIFY_HPP -#define SHARE_VM_MEMORY_CLASSIFY_HPP - -#include "oops/oop.inline.hpp" - -typedef enum oop_type { - unknown_type, - instance_type, - instanceRef_type, - objArray_type, - symbol_type, - klass_type, - instanceKlass_type, - method_type, - constMethod_type, - methodData_type, - constantPool_type, - constantPoolCache_type, - typeArray_type, - compiledICHolder_type, - number_object_types -} object_type; - - -// Classify objects by type and keep counts. -// Print the count and space taken for each type. - - -class ClassifyObjectClosure : public ObjectClosure { -private: - - static const char* object_type_name[number_object_types]; - - int total_object_count; - size_t total_object_size; - int object_count[number_object_types]; - size_t object_size[number_object_types]; - -public: - ClassifyObjectClosure() { reset(); } - void reset(); - void do_object(oop obj); - static object_type classify_object(oop obj, bool count); - size_t print(); -}; - - -// Count objects using the alloc_count field in the object's klass -// object. - -class ClassifyInstanceKlassClosure : public ClassifyObjectClosure { -private: - int total_instances; -public: - ClassifyInstanceKlassClosure() { reset(); } - void reset(); - void print(); - void do_object(oop obj); -}; - - -// Clear the alloc_count fields in all classes so that the count can be -// restarted. - -class ClearAllocCountClosure : public ObjectClosure { -public: - void do_object(oop obj) { - if (obj->is_klass()) { - Klass* k = Klass::cast((klassOop)obj); - k->set_alloc_count(0); - } - } -}; - -#endif // SHARE_VM_MEMORY_CLASSIFY_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/collectorPolicy.cpp --- a/src/share/vm/memory/collectorPolicy.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/collectorPolicy.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,32 +58,25 @@ // CollectorPolicy methods. void CollectorPolicy::initialize_flags() { - if (PermSize > MaxPermSize) { - MaxPermSize = PermSize; + if (MetaspaceSize > MaxMetaspaceSize) { + MaxMetaspaceSize = MetaspaceSize; } - PermSize = MAX2(min_alignment(), align_size_down_(PermSize, min_alignment())); - // Don't increase Perm size limit above specified. - MaxPermSize = align_size_down(MaxPermSize, max_alignment()); - if (PermSize > MaxPermSize) { - PermSize = MaxPermSize; + MetaspaceSize = MAX2(min_alignment(), align_size_down_(MetaspaceSize, min_alignment())); + // Don't increase Metaspace size limit above specified. + MaxMetaspaceSize = align_size_down(MaxMetaspaceSize, max_alignment()); + if (MetaspaceSize > MaxMetaspaceSize) { + MetaspaceSize = MaxMetaspaceSize; } - MinPermHeapExpansion = MAX2(min_alignment(), align_size_down_(MinPermHeapExpansion, min_alignment())); - MaxPermHeapExpansion = MAX2(min_alignment(), align_size_down_(MaxPermHeapExpansion, min_alignment())); + MinMetaspaceExpansion = MAX2(min_alignment(), align_size_down_(MinMetaspaceExpansion, min_alignment())); + MaxMetaspaceExpansion = MAX2(min_alignment(), align_size_down_(MaxMetaspaceExpansion, min_alignment())); MinHeapDeltaBytes = align_size_up(MinHeapDeltaBytes, min_alignment()); - SharedReadOnlySize = align_size_up(SharedReadOnlySize, max_alignment()); - SharedReadWriteSize = align_size_up(SharedReadWriteSize, max_alignment()); - SharedMiscDataSize = align_size_up(SharedMiscDataSize, max_alignment()); - - assert(PermSize % min_alignment() == 0, "permanent space alignment"); - assert(MaxPermSize % max_alignment() == 0, "maximum permanent space alignment"); - assert(SharedReadOnlySize % max_alignment() == 0, "read-only space alignment"); - assert(SharedReadWriteSize % max_alignment() == 0, "read-write space alignment"); - assert(SharedMiscDataSize % max_alignment() == 0, "misc-data space alignment"); - if (PermSize < M) { - vm_exit_during_initialization("Too small initial permanent heap"); + assert(MetaspaceSize % min_alignment() == 0, "metapace alignment"); + assert(MaxMetaspaceSize % max_alignment() == 0, "maximum metaspace alignment"); + if (MetaspaceSize < 256*K) { + vm_exit_during_initialization("Too small initial Metaspace size"); } } @@ -134,18 +127,6 @@ } } -void CollectorPolicy::initialize_perm_generation(PermGen::Name pgnm) { - _permanent_generation = - new PermanentGenerationSpec(pgnm, PermSize, MaxPermSize, - SharedReadOnlySize, - SharedReadWriteSize, - SharedMiscDataSize, - SharedMiscCodeSize); - if (_permanent_generation == NULL) { - vm_exit_during_initialization("Unable to allocate gen spec"); - } -} - bool CollectorPolicy::use_should_clear_all_soft_refs(bool v) { bool result = _should_clear_all_soft_refs; set_should_clear_all_soft_refs(false); @@ -753,6 +734,41 @@ return NULL; } +MetaWord* CollectorPolicy::satisfy_failed_metadata_allocation( + ClassLoaderData* loader_data, + size_t word_size, + Metaspace::MetadataType mdtype) { + uint loop_count = 0; + uint gc_count = 0; + uint full_gc_count = 0; + + do { + { // Need lock to get self consistent gc_count's + MutexLocker ml(Heap_lock); + gc_count = Universe::heap()->total_collections(); + full_gc_count = Universe::heap()->total_full_collections(); + } + + // Generate a VM operation + VM_CollectForMetadataAllocation op(loader_data, + word_size, + mdtype, + gc_count, + full_gc_count, + GCCause::_metadata_GC_threshold); + VMThread::execute(&op); + if (op.prologue_succeeded()) { + return op.result(); + } + loop_count++; + if ((QueuedAllocationWarningCount > 0) && + (loop_count % QueuedAllocationWarningCount == 0)) { + warning("satisfy_failed_metadata_allocation() retries %d times \n\t" + " size=%d", loop_count, word_size); + } + } while (true); // Until a GC is done +} + // Return true if any of the following is true: // . the allocation won't fit into the current young gen heap // . gc locker is occupied (jni critical section) @@ -778,7 +794,6 @@ } void MarkSweepPolicy::initialize_generations() { - initialize_perm_generation(PermGen::MarkSweepCompact); _generations = new GenerationSpecPtr[number_of_generations()]; if (_generations == NULL) vm_exit_during_initialization("Unable to allocate gen spec"); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/collectorPolicy.hpp --- a/src/share/vm/memory/collectorPolicy.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/collectorPolicy.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,9 +25,10 @@ #ifndef SHARE_VM_MEMORY_COLLECTORPOLICY_HPP #define SHARE_VM_MEMORY_COLLECTORPOLICY_HPP +#include "memory/allocation.hpp" #include "memory/barrierSet.hpp" +#include "memory/generationSpec.hpp" #include "memory/genRemSet.hpp" -#include "memory/permGen.hpp" // This class (or more correctly, subtypes of this class) // are used to define global garbage collector attributes. @@ -53,21 +54,16 @@ #endif // SERIALGC class GCPolicyCounters; -class PermanentGenerationSpec; class MarkSweepPolicy; class CollectorPolicy : public CHeapObj { protected: - PermanentGenerationSpec *_permanent_generation; GCPolicyCounters* _gc_policy_counters; // Requires that the concrete subclass sets the alignment constraints // before calling. virtual void initialize_flags(); virtual void initialize_size_info(); - // Initialize "_permanent_generation" to a spec for the given kind of - // Perm Gen. - void initialize_perm_generation(PermGen::Name pgnm); size_t _initial_heap_byte_size; size_t _max_heap_byte_size; @@ -155,11 +151,6 @@ #endif // SERIALGC - virtual PermanentGenerationSpec *permanent_generation() { - assert(_permanent_generation != NULL, "Sanity check"); - return _permanent_generation; - } - virtual BarrierSet::Name barrier_set_name() = 0; virtual GenRemSet::Name rem_set_name() = 0; @@ -181,6 +172,12 @@ // This method controls how a collector handles one or more // of its generations being fully allocated. virtual HeapWord *satisfy_failed_allocation(size_t size, bool is_tlab) = 0; + // This method controls how a collector handles a metadata allocation + // failure. + virtual MetaWord* satisfy_failed_metadata_allocation(ClassLoaderData* loader_data, + size_t size, + Metaspace::MetadataType mdtype); + // Performace Counter support GCPolicyCounters* counters() { return _gc_policy_counters; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/compactPermGen.hpp --- a/src/share/vm/memory/compactPermGen.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_MEMORY_COMPACTPERMGEN_HPP -#define SHARE_VM_MEMORY_COMPACTPERMGEN_HPP - -#include "memory/generation.hpp" -#include "memory/permGen.hpp" - -class ContigPermSpace; -class CardTableModRefBS; -class CompactingPermGenGen; -class PermanentGenerationSpec; - -// A PermGen implemented with a contiguous space. -class CompactingPermGen: public PermGen { - friend class VMStructs; -protected: - // The "generation" view. - OneContigSpaceCardGeneration* _gen; - -public: - CompactingPermGen(ReservedSpace rs, ReservedSpace shared_rs, - size_t initial_byte_size, GenRemSet* remset, - PermanentGenerationSpec* perm_spec); - - HeapWord* mem_allocate(size_t size); - - void compute_new_size(); - - Generation* as_gen() const { return _gen; } - -}; - -#endif // SHARE_VM_MEMORY_COMPACTPERMGEN_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/compactingPermGenGen.cpp --- a/src/share/vm/memory/compactingPermGenGen.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,481 +0,0 @@ -/* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/symbolTable.hpp" -#include "classfile/systemDictionary.hpp" -#include "memory/compactingPermGenGen.hpp" -#include "memory/filemap.hpp" -#include "memory/genOopClosures.inline.hpp" -#include "memory/generation.inline.hpp" -#include "memory/generationSpec.hpp" -#include "oops/oop.inline.hpp" -#include "runtime/java.hpp" -#ifndef SERIALGC -#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.inline.hpp" -#endif - - -// An ObjectClosure helper: Recursively adjust all pointers in an object -// and all objects by referenced it. Clear marks on objects in order to -// prevent visiting any object twice. This helper is used when the -// RedefineClasses() API has been called. - -class AdjustSharedObjectClosure : public ObjectClosure { -public: - void do_object(oop obj) { - if (obj->is_shared_readwrite()) { - if (obj->mark()->is_marked()) { - obj->init_mark(); // Don't revisit this object. - obj->adjust_pointers(); // Adjust this object's references. - } - } - } -}; - - -// An OopClosure helper: Recursively adjust all pointers in an object -// and all objects by referenced it. Clear marks on objects in order -// to prevent visiting any object twice. - -class RecursiveAdjustSharedObjectClosure : public OopClosure { - protected: - template inline void do_oop_work(T* p) { - oop obj = oopDesc::load_decode_heap_oop_not_null(p); - if (obj->is_shared_readwrite()) { - if (obj->mark()->is_marked()) { - obj->init_mark(); // Don't revisit this object. - obj->oop_iterate(this); // Recurse - adjust objects referenced. - obj->adjust_pointers(); // Adjust this object's references. - - // Special case: if a class has a read-only constant pool, - // then the read-write objects referenced by the pool must - // have their marks reset. - - if (obj->klass() == Universe::instanceKlassKlassObj()) { - instanceKlass* ik = instanceKlass::cast((klassOop)obj); - constantPoolOop cp = ik->constants(); - if (cp->is_shared_readonly()) { - cp->oop_iterate(this); - } - } - } - } - } - public: - virtual void do_oop(oop* p) { RecursiveAdjustSharedObjectClosure::do_oop_work(p); } - virtual void do_oop(narrowOop* p) { RecursiveAdjustSharedObjectClosure::do_oop_work(p); } -}; - - -// We need to go through all placeholders in the system dictionary and -// try to resolve them into shared classes. Other threads might be in -// the process of loading a shared class and have strong roots on -// their stack to the class without having added the class to the -// dictionary yet. This means the class will be marked during phase 1 -// but will not be unmarked during the application of the -// RecursiveAdjustSharedObjectClosure to the SystemDictionary. -class TraversePlaceholdersClosure { - public: - static void placeholders_do(Symbol* sym, oop loader) { - if (CompactingPermGenGen::is_shared(sym)) { - oop k = SystemDictionary::find_shared_class(sym); - if (k != NULL) { - RecursiveAdjustSharedObjectClosure clo; - clo.do_oop(&k); - } - } - } -}; - -void CompactingPermGenGen::initialize_performance_counters() { - - const char* gen_name = "perm"; - - // Generation Counters - generation 2, 1 subspace - _gen_counters = new GenerationCounters(gen_name, 2, 1, &_virtual_space); - - _space_counters = new CSpaceCounters(gen_name, 0, - _virtual_space.reserved_size(), - _the_space, _gen_counters); -} - -void CompactingPermGenGen::update_counters() { - if (UsePerfData) { - _space_counters->update_all(); - _gen_counters->update_all(); - } -} - - -CompactingPermGenGen::CompactingPermGenGen(ReservedSpace rs, - ReservedSpace shared_rs, - size_t initial_byte_size, - int level, GenRemSet* remset, - ContiguousSpace* space, - PermanentGenerationSpec* spec_) : - OneContigSpaceCardGeneration(rs, initial_byte_size, MinPermHeapExpansion, - level, remset, space) { - - set_spec(spec_); - if (!UseSharedSpaces && !DumpSharedSpaces) { - spec()->disable_sharing(); - } - - // Break virtual space into address ranges for all spaces. - - if (spec()->enable_shared_spaces()) { - shared_end = (HeapWord*)(shared_rs.base() + shared_rs.size()); - misccode_end = shared_end; - misccode_bottom = misccode_end - heap_word_size(spec()->misc_code_size()); - miscdata_end = misccode_bottom; - miscdata_bottom = miscdata_end - heap_word_size(spec()->misc_data_size()); - readwrite_end = miscdata_bottom; - readwrite_bottom = - readwrite_end - heap_word_size(spec()->read_write_size()); - readonly_end = readwrite_bottom; - readonly_bottom = - readonly_end - heap_word_size(spec()->read_only_size()); - shared_bottom = readonly_bottom; - unshared_end = shared_bottom; - assert((char*)shared_bottom == shared_rs.base(), "shared space mismatch"); - } else { - shared_end = (HeapWord*)(rs.base() + rs.size()); - misccode_end = shared_end; - misccode_bottom = shared_end; - miscdata_end = shared_end; - miscdata_bottom = shared_end; - readwrite_end = shared_end; - readwrite_bottom = shared_end; - readonly_end = shared_end; - readonly_bottom = shared_end; - shared_bottom = shared_end; - unshared_end = shared_bottom; - } - unshared_bottom = (HeapWord*) rs.base(); - - // Verify shared and unshared spaces adjacent. - assert((char*)shared_bottom == rs.base()+rs.size(), "shared space mismatch"); - assert(unshared_end > unshared_bottom, "shared space mismatch"); - - // Split reserved memory into pieces. - - ReservedSpace ro_rs = shared_rs.first_part(spec()->read_only_size(), - UseSharedSpaces); - ReservedSpace tmp_rs1 = shared_rs.last_part(spec()->read_only_size()); - ReservedSpace rw_rs = tmp_rs1.first_part(spec()->read_write_size(), - UseSharedSpaces); - ReservedSpace tmp_rs2 = tmp_rs1.last_part(spec()->read_write_size()); - ReservedSpace md_rs = tmp_rs2.first_part(spec()->misc_data_size(), - UseSharedSpaces); - ReservedSpace mc_rs = tmp_rs2.last_part(spec()->misc_data_size()); - - _shared_space_size = spec()->read_only_size() - + spec()->read_write_size() - + spec()->misc_data_size() - + spec()->misc_code_size(); - - // Allocate the unshared (default) space. - _the_space = new ContigPermSpace(_bts, - MemRegion(unshared_bottom, heap_word_size(initial_byte_size))); - if (_the_space == NULL) - vm_exit_during_initialization("Could not allocate an unshared" - " CompactingPermGen Space"); - - // Allocate shared spaces - if (spec()->enable_shared_spaces()) { - - // If mapping a shared file, the space is not committed, don't - // mangle. - NOT_PRODUCT(bool old_ZapUnusedHeapArea = ZapUnusedHeapArea;) - NOT_PRODUCT(if (UseSharedSpaces) ZapUnusedHeapArea = false;) - - // Commit the memory behind the shared spaces if dumping (not - // mapping). - if (DumpSharedSpaces) { - _ro_vs.initialize(ro_rs, spec()->read_only_size()); - _rw_vs.initialize(rw_rs, spec()->read_write_size()); - _md_vs.initialize(md_rs, spec()->misc_data_size()); - _mc_vs.initialize(mc_rs, spec()->misc_code_size()); - } - - // Allocate the shared spaces. - _ro_bts = new BlockOffsetSharedArray( - MemRegion(readonly_bottom, - heap_word_size(spec()->read_only_size())), - heap_word_size(spec()->read_only_size())); - _ro_space = new OffsetTableContigSpace(_ro_bts, - MemRegion(readonly_bottom, readonly_end)); - _rw_bts = new BlockOffsetSharedArray( - MemRegion(readwrite_bottom, - heap_word_size(spec()->read_write_size())), - heap_word_size(spec()->read_write_size())); - _rw_space = new OffsetTableContigSpace(_rw_bts, - MemRegion(readwrite_bottom, readwrite_end)); - - // Restore mangling flag. - NOT_PRODUCT(ZapUnusedHeapArea = old_ZapUnusedHeapArea;) - - if (_ro_space == NULL || _rw_space == NULL) - vm_exit_during_initialization("Could not allocate a shared space"); - - if (UseSharedSpaces) { - - // Map in the regions in the shared file. - FileMapInfo* mapinfo = FileMapInfo::current_info(); - size_t image_alignment = mapinfo->alignment(); - CollectedHeap* ch = Universe::heap(); - if ((!mapinfo->map_space(ro, ro_rs, _ro_space)) || - (!mapinfo->map_space(rw, rw_rs, _rw_space)) || - (!mapinfo->map_space(md, md_rs, NULL)) || - (!mapinfo->map_space(mc, mc_rs, NULL)) || - // check the alignment constraints - (ch == NULL || ch->kind() != CollectedHeap::GenCollectedHeap || - image_alignment != - ((GenCollectedHeap*)ch)->gen_policy()->max_alignment())) { - // Base addresses didn't match; skip sharing, but continue - shared_rs.release(); - spec()->disable_sharing(); - // If -Xshare:on is specified, print out the error message and exit VM, - // otherwise, set UseSharedSpaces to false and continue. - if (RequireSharedSpaces) { - vm_exit_during_initialization("Unable to use shared archive.", NULL); - } else { - FLAG_SET_DEFAULT(UseSharedSpaces, false); - } - - // Note: freeing the block offset array objects does not - // currently free up the underlying storage. - delete _ro_bts; - _ro_bts = NULL; - delete _ro_space; - _ro_space = NULL; - delete _rw_bts; - _rw_bts = NULL; - delete _rw_space; - _rw_space = NULL; - shared_end = (HeapWord*)(rs.base() + rs.size()); - } - } - - if (spec()->enable_shared_spaces()) { - // Cover both shared spaces entirely with cards. - _rs->resize_covered_region(MemRegion(readonly_bottom, readwrite_end)); - } - - // Reserved region includes shared spaces for oop.is_in_reserved(). - _reserved.set_end(shared_end); - - } else { - _ro_space = NULL; - _rw_space = NULL; - } -} - - -// Do a complete scan of the shared read write space to catch all -// objects which contain references to any younger generation. Forward -// the pointers. Avoid space_iterate, as actually visiting all the -// objects in the space will page in more objects than we need. -// Instead, use the system dictionary as strong roots into the read -// write space. -// -// If a RedefineClasses() call has been made, then we have to iterate -// over the entire shared read-write space in order to find all the -// objects that need to be forwarded. For example, it is possible for -// an nmethod to be found and marked in GC phase-1 only for the nmethod -// to be freed by the time we reach GC phase-3. The underlying method -// is still marked, but we can't (easily) find it in GC phase-3 so we -// blow up in GC phase-4. With RedefineClasses() we want replaced code -// (EMCP or obsolete) to go away (i.e., be collectible) once it is no -// longer being executed by any thread so we keep minimal attachments -// to the replaced code. However, we can't guarantee when those EMCP -// or obsolete methods will be collected so they may still be out there -// even after we've severed our minimal attachments. - -void CompactingPermGenGen::pre_adjust_pointers() { - if (spec()->enable_shared_spaces()) { - if (JvmtiExport::has_redefined_a_class()) { - // RedefineClasses() requires a brute force approach - AdjustSharedObjectClosure blk; - rw_space()->object_iterate(&blk); - } else { - RecursiveAdjustSharedObjectClosure blk; - Universe::oops_do(&blk); - StringTable::oops_do(&blk); - SystemDictionary::always_strong_classes_do(&blk); - SystemDictionary::placeholders_do(TraversePlaceholdersClosure::placeholders_do); - } - } -} - - -#ifdef ASSERT -class VerifyMarksClearedClosure : public ObjectClosure { -public: - void do_object(oop obj) { - assert(SharedSkipVerify || !obj->mark()->is_marked(), - "Shared oop still marked?"); - } -}; -#endif - - -void CompactingPermGenGen::post_compact() { -#ifdef ASSERT - if (!SharedSkipVerify && spec()->enable_shared_spaces()) { - VerifyMarksClearedClosure blk; - rw_space()->object_iterate(&blk); - } -#endif -} - - -// Do not use in time-critical operations due to the possibility of paging -// in otherwise untouched or previously unread portions of the perm gen, -// for instance, the shared spaces. NOTE: Because CompactingPermGenGen -// derives from OneContigSpaceCardGeneration which is supposed to have a -// single space, and does not override its object_iterate() method, -// object iteration via that interface does not look at the objects in -// the shared spaces when using CDS. This should be fixed; see CR 6897798. -void CompactingPermGenGen::space_iterate(SpaceClosure* blk, bool usedOnly) { - OneContigSpaceCardGeneration::space_iterate(blk, usedOnly); - if (spec()->enable_shared_spaces()) { - // Making the rw_space walkable will page in the entire space, and - // is to be avoided in the case of time-critical operations. - // However, this is required for Verify and heap dump operations. - blk->do_space(ro_space()); - blk->do_space(rw_space()); - } -} - - -void CompactingPermGenGen::print_on(outputStream* st) const { - OneContigSpaceCardGeneration::print_on(st); - if (spec()->enable_shared_spaces()) { - st->print(" ro"); - ro_space()->print_on(st); - st->print(" rw"); - rw_space()->print_on(st); - } else { - st->print_cr("No shared spaces configured."); - } -} - - -// References from the perm gen to the younger generation objects may -// occur in static fields in Java classes or in constant pool references -// to String objects. - -void CompactingPermGenGen::younger_refs_iterate(OopsInGenClosure* blk) { - OneContigSpaceCardGeneration::younger_refs_iterate(blk); - if (spec()->enable_shared_spaces()) { - blk->set_generation(this); - // ro_space has no younger gen refs. - _rs->younger_refs_in_space_iterate(rw_space(), blk); - blk->reset_generation(); - } -} - - -// Shared spaces are addressed in pre_adjust_pointers. -void CompactingPermGenGen::adjust_pointers() { - the_space()->adjust_pointers(); -} - - -void CompactingPermGenGen::compact() { - the_space()->compact(); -} - - -size_t CompactingPermGenGen::contiguous_available() const { - // Don't include shared spaces. - return OneContigSpaceCardGeneration::contiguous_available() - - _shared_space_size; -} - -size_t CompactingPermGenGen::max_capacity() const { - // Don't include shared spaces. - assert(UseSharedSpaces || (_shared_space_size == 0), - "If not used, the size of shared spaces should be 0"); - return OneContigSpaceCardGeneration::max_capacity() - - _shared_space_size; -} - - -// No young generation references, clear this generation's main space's -// card table entries. Do NOT clear the card table entries for the -// read-only space (always clear) or the read-write space (valuable -// information). - -void CompactingPermGenGen::clear_remembered_set() { - _rs->clear(MemRegion(the_space()->bottom(), the_space()->end())); -} - - -// Objects in this generation's main space may have moved, invalidate -// that space's cards. Do NOT invalidate the card table entries for the -// read-only or read-write spaces, as those objects never move. - -void CompactingPermGenGen::invalidate_remembered_set() { - _rs->invalidate(used_region()); -} - - -void CompactingPermGenGen::verify() { - the_space()->verify(); - if (!SharedSkipVerify && spec()->enable_shared_spaces()) { - ro_space()->verify(); - rw_space()->verify(); - } -} - - -HeapWord* CompactingPermGenGen::unshared_bottom; -HeapWord* CompactingPermGenGen::unshared_end; -HeapWord* CompactingPermGenGen::shared_bottom; -HeapWord* CompactingPermGenGen::shared_end; -HeapWord* CompactingPermGenGen::readonly_bottom; -HeapWord* CompactingPermGenGen::readonly_end; -HeapWord* CompactingPermGenGen::readwrite_bottom; -HeapWord* CompactingPermGenGen::readwrite_end; -HeapWord* CompactingPermGenGen::miscdata_bottom; -HeapWord* CompactingPermGenGen::miscdata_end; -HeapWord* CompactingPermGenGen::misccode_bottom; -HeapWord* CompactingPermGenGen::misccode_end; - -// JVM/TI RedefineClasses() support: -bool CompactingPermGenGen::remap_shared_readonly_as_readwrite() { - assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); - - if (UseSharedSpaces) { - // remap the shared readonly space to shared readwrite, private - FileMapInfo* mapinfo = FileMapInfo::current_info(); - if (!mapinfo->remap_shared_readonly_as_readwrite()) { - return false; - } - } - return true; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/compactingPermGenGen.hpp --- a/src/share/vm/memory/compactingPermGenGen.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,250 +0,0 @@ -/* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_MEMORY_COMPACTINGPERMGENGEN_HPP -#define SHARE_VM_MEMORY_COMPACTINGPERMGENGEN_HPP - -#include "gc_implementation/shared/generationCounters.hpp" -#include "memory/space.hpp" - -// All heaps contains a "permanent generation," containing permanent -// (reflective) objects. This is like a regular generation in some ways, -// but unlike one in others, and so is split apart. - -class PermanentGenerationSpec; - -// This is the "generation" view of a CompactingPermGen. -// NOTE: the shared spaces used for CDS are here handled in -// a somewhat awkward and potentially buggy fashion, see CR 6801625. -// This infelicity should be fixed, see CR 6897789. -class CompactingPermGenGen: public OneContigSpaceCardGeneration { - friend class VMStructs; - // Abstractly, this is a subtype that gets access to protected fields. - friend class CompactingPermGen; - -private: - // Shared spaces - PermanentGenerationSpec* _spec; - size_t _shared_space_size; - VirtualSpace _ro_vs; - VirtualSpace _rw_vs; - VirtualSpace _md_vs; - VirtualSpace _mc_vs; - BlockOffsetSharedArray* _ro_bts; - BlockOffsetSharedArray* _rw_bts; - OffsetTableContigSpace* _ro_space; - OffsetTableContigSpace* _rw_space; - - // With shared spaces there is a dichotomy in the use of the - // _virtual_space of the generation. There is a portion of the - // _virtual_space that is used for the unshared part of the - // permanent generation and a portion that is reserved for the shared part. - // The _reserved field in the generation represents both the - // unshared and shared parts of the generation. The _reserved - // variable is initialized for only the unshared part but is - // later extended to include the shared part during initialization - // if shared spaces are being used. - // The reserved size for the _virtual_space for CompactingPermGenGen - // is the size of the space for the permanent generation including the - // the shared spaces. This can be seen by the use of MaxPermSize - // in the allocation of PermanentGenerationSpec. The space for the - // shared spaces is committed separately (???). - // In general at initialization only a part of the - // space for the unshared part of the permanent generation is - // committed and more is committed as the permanent generation is - // grown. In growing the permanent generation the capacity() and - // max_capacity() of the generation are used. For the permanent - // generation (implemented with a CompactingPermGenGen) the capacity() - // is taken from the capacity of the space (_the_space variable used for the - // unshared part of the generation) and the max_capacity() is based - // on the size of the _reserved variable (which includes the size of the - // shared spaces) minus the size of the shared spaces. - - // These values are redundant, but are called out separately to avoid - // going through heap/space/gen pointers for performance. - static HeapWord* unshared_bottom; - static HeapWord* unshared_end; - static HeapWord* shared_bottom; - static HeapWord* readonly_bottom; - static HeapWord* readonly_end; - static HeapWord* readwrite_bottom; - static HeapWord* readwrite_end; - static HeapWord* miscdata_bottom; - static HeapWord* miscdata_end; - static HeapWord* misccode_bottom; - static HeapWord* misccode_end; - static HeapWord* shared_end; - - // Performance Counters - GenerationCounters* _gen_counters; - CSpaceCounters* _space_counters; - - void initialize_performance_counters(); - -public: - - enum { - vtbl_list_size = 17, // number of entries in the shared space vtable list. - num_virtuals = 200 // number of virtual methods in Klass (or - // subclass) objects, or greater. - }; - - enum { - ro = 0, // read-only shared space in the heap - rw = 1, // read-write shared space in the heap - md = 2, // miscellaneous data for initializing tables, etc. - mc = 3, // miscellaneous code - vtable replacement. - n_regions = 4 - }; - - CompactingPermGenGen(ReservedSpace rs, ReservedSpace shared_rs, - size_t initial_byte_size, int level, GenRemSet* remset, - ContiguousSpace* space, - PermanentGenerationSpec* perm_spec); - - const char* name() const { - return "compacting perm gen"; - } - - const char* short_name() const { - return "Perm"; - } - - // Return the maximum capacity for the object space. This - // explicitly does not include the shared spaces. - size_t max_capacity() const; - - void update_counters(); - - void compute_new_size() { - assert(false, "Should not call this -- handled at PermGen level."); - } - - bool must_be_youngest() const { return false; } - bool must_be_oldest() const { return false; } - - OffsetTableContigSpace* ro_space() const { return _ro_space; } - OffsetTableContigSpace* rw_space() const { return _rw_space; } - VirtualSpace* md_space() { return &_md_vs; } - VirtualSpace* mc_space() { return &_mc_vs; } - ContiguousSpace* unshared_space() const { return _the_space; } - - static bool inline is_shared(const void* p) { - return p >= shared_bottom && p < shared_end; - } - // RedefineClasses note: this tester is used to check residence of - // the specified oop in the shared readonly space and not whether - // the oop is readonly. - static bool inline is_shared_readonly(const void* p) { - return p >= readonly_bottom && p < readonly_end; - } - // RedefineClasses note: this tester is used to check residence of - // the specified oop in the shared readwrite space and not whether - // the oop is readwrite. - static bool inline is_shared_readwrite(const void* p) { - return p >= readwrite_bottom && p < readwrite_end; - } - - // Checks if the pointer is either in unshared space or in shared space - inline bool is_in(const void* p) const { - return OneContigSpaceCardGeneration::is_in(p) || is_shared(p); - } - - inline PermanentGenerationSpec* spec() const { return _spec; } - inline void set_spec(PermanentGenerationSpec* spec) { _spec = spec; } - - void pre_adjust_pointers(); - void adjust_pointers(); - void space_iterate(SpaceClosure* blk, bool usedOnly = false); - void print_on(outputStream* st) const; - void younger_refs_iterate(OopsInGenClosure* blk); - void compact(); - void post_compact(); - size_t contiguous_available() const; - - void clear_remembered_set(); - void invalidate_remembered_set(); - - inline bool block_is_obj(const HeapWord* addr) const { - if (addr < the_space()->top()) return true; - else if (addr < the_space()->end()) return false; - else if (addr < ro_space()->top()) return true; - else if (addr < ro_space()->end()) return false; - else if (addr < rw_space()->top()) return true; - else return false; - } - - - inline size_t block_size(const HeapWord* addr) const { - if (addr < the_space()->top()) { - return oop(addr)->size(); - } - else if (addr < the_space()->end()) { - assert(addr == the_space()->top(), "non-block head arg to block_size"); - return the_space()->end() - the_space()->top(); - } - - else if (addr < ro_space()->top()) { - return oop(addr)->size(); - } - else if (addr < ro_space()->end()) { - assert(addr == ro_space()->top(), "non-block head arg to block_size"); - return ro_space()->end() - ro_space()->top(); - } - - else if (addr < rw_space()->top()) { - return oop(addr)->size(); - } - else { - assert(addr == rw_space()->top(), "non-block head arg to block_size"); - return rw_space()->end() - rw_space()->top(); - } - } - - static void generate_vtable_methods(void** vtbl_list, - void** vtable, - char** md_top, char* md_end, - char** mc_top, char* mc_end); - static void* find_matching_vtbl_ptr(void** vtbl_list, - void* new_vtable_start, - void* obj); - - void verify(); - - // Serialization - static void initialize_oops() KERNEL_RETURN; - static void serialize_oops(SerializeOopClosure* soc); - void serialize_bts(SerializeOopClosure* soc); - - // Initiate dumping of shared file. - static jint dump_shared(GrowableArray* class_promote_order, TRAPS); - - // JVM/TI RedefineClasses() support: - // Remap the shared readonly space to shared readwrite, private if - // sharing is enabled. Simply returns true if sharing is not enabled - // or if the remapping has already been done by a prior call. - static bool remap_shared_readonly_as_readwrite(); -}; - -#endif // SHARE_VM_MEMORY_COMPACTINGPERMGENGEN_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/defNewGeneration.cpp --- a/src/share/vm/memory/defNewGeneration.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/defNewGeneration.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -30,6 +30,7 @@ #include "memory/gcLocker.inline.hpp" #include "memory/genCollectedHeap.hpp" #include "memory/genOopClosures.inline.hpp" +#include "memory/genRemSet.hpp" #include "memory/generationSpec.hpp" #include "memory/iterator.hpp" #include "memory/referencePolicy.hpp" @@ -118,7 +119,7 @@ } ScanClosure::ScanClosure(DefNewGeneration* g, bool gc_barrier) : - OopsInGenClosure(g), _g(g), _gc_barrier(gc_barrier) + OopsInKlassOrGenClosure(g), _g(g), _gc_barrier(gc_barrier) { assert(_g->level() == 0, "Optimized for youngest generation"); _boundary = _g->reserved().end(); @@ -128,7 +129,7 @@ void ScanClosure::do_oop(narrowOop* p) { ScanClosure::do_oop_work(p); } FastScanClosure::FastScanClosure(DefNewGeneration* g, bool gc_barrier) : - OopsInGenClosure(g), _g(g), _gc_barrier(gc_barrier) + OopsInKlassOrGenClosure(g), _g(g), _gc_barrier(gc_barrier) { assert(_g->level() == 0, "Optimized for youngest generation"); _boundary = _g->reserved().end(); @@ -137,8 +138,39 @@ void FastScanClosure::do_oop(oop* p) { FastScanClosure::do_oop_work(p); } void FastScanClosure::do_oop(narrowOop* p) { FastScanClosure::do_oop_work(p); } +void KlassScanClosure::do_klass(Klass* klass) { +#ifndef PRODUCT + if (TraceScavenge) { + ResourceMark rm; + gclog_or_tty->print_cr("KlassScanClosure::do_klass %p, %s, dirty: %s", + klass, + klass->external_name(), + klass->has_modified_oops() ? "true" : "false"); + } +#endif + + // If the klass has not been dirtied we know that there's + // no references into the young gen and we can skip it. + if (klass->has_modified_oops()) { + if (_accumulate_modified_oops) { + klass->accumulate_modified_oops(); + } + + // Clear this state since we're going to scavenge all the metadata. + klass->clear_modified_oops(); + + // Tell the closure which Klass is being scanned so that it can be dirtied + // if oops are left pointing into the young gen. + _scavenge_closure->set_scanned_klass(klass); + + klass->oops_do(_scavenge_closure); + + _scavenge_closure->set_scanned_klass(NULL); + } +} + ScanWeakRefClosure::ScanWeakRefClosure(DefNewGeneration* g) : - OopClosure(g->ref_processor()), _g(g) + _g(g) { assert(_g->level() == 0, "Optimized for youngest generation"); _boundary = _g->reserved().end(); @@ -150,6 +182,12 @@ void FilteringClosure::do_oop(oop* p) { FilteringClosure::do_oop_work(p); } void FilteringClosure::do_oop(narrowOop* p) { FilteringClosure::do_oop_work(p); } +KlassScanClosure::KlassScanClosure(OopsInKlassOrGenClosure* scavenge_closure, + KlassRemSet* klass_rem_set) + : _scavenge_closure(scavenge_closure), + _accumulate_modified_oops(klass_rem_set->accumulate_modified_oops()) {} + + DefNewGeneration::DefNewGeneration(ReservedSpace rs, size_t initial_size, int level, @@ -572,6 +610,9 @@ FastScanClosure fsc_with_no_gc_barrier(this, false); FastScanClosure fsc_with_gc_barrier(this, true); + KlassScanClosure klass_scan_closure(&fsc_with_no_gc_barrier, + gch->rem_set()->klass_rem_set()); + set_promo_failure_scan_stack_closure(&fsc_with_no_gc_barrier); FastEvacuateFollowersClosure evacuate_followers(gch, _level, this, &fsc_with_no_gc_barrier, @@ -580,15 +621,18 @@ assert(gch->no_allocs_since_save_marks(0), "save marks have not been newly set."); + int so = SharedHeap::SO_AllClasses | SharedHeap::SO_Strings | SharedHeap::SO_CodeCache; + gch->gen_process_strong_roots(_level, true, // Process younger gens, if any, // as strong roots. true, // activate StrongRootsScope - false, // not collecting perm generation. - SharedHeap::SO_AllClasses, + true, // is scavenging + SharedHeap::ScanningOption(so), &fsc_with_no_gc_barrier, true, // walk *all* scavengable nmethods - &fsc_with_gc_barrier); + &fsc_with_gc_barrier, + &klass_scan_closure); // "evacuate followers". evacuate_followers.do_void(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/defNewGeneration.hpp --- a/src/share/vm/memory/defNewGeneration.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/defNewGeneration.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -93,8 +93,8 @@ Stack _preserved_marks_of_objs; // Promotion failure handling - OopClosure *_promo_failure_scan_stack_closure; - void set_promo_failure_scan_stack_closure(OopClosure *scan_stack_closure) { + ExtendedOopClosure *_promo_failure_scan_stack_closure; + void set_promo_failure_scan_stack_closure(ExtendedOopClosure *scan_stack_closure) { _promo_failure_scan_stack_closure = scan_stack_closure; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/dump.cpp --- a/src/share/vm/memory/dump.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1592 +0,0 @@ -/* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/javaClasses.hpp" -#include "classfile/loaderConstraints.hpp" -#include "classfile/symbolTable.hpp" -#include "classfile/systemDictionary.hpp" -#include "gc_implementation/shared/spaceDecorator.hpp" -#include "memory/classify.hpp" -#include "memory/filemap.hpp" -#include "memory/oopFactory.hpp" -#include "memory/resourceArea.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/oop.inline.hpp" -#include "runtime/javaCalls.hpp" -#include "runtime/signature.hpp" -#include "runtime/vmThread.hpp" -#include "runtime/vm_operations.hpp" -#include "utilities/copy.hpp" - - -// Closure to set up the fingerprint field for all methods. - -class FingerprintMethodsClosure: public ObjectClosure { -public: - void do_object(oop obj) { - if (obj->is_method()) { - methodOop mobj = (methodOop)obj; - ResourceMark rm; - (new Fingerprinter(mobj))->fingerprint(); - } - } -}; - - - -// Closure to set the hash value (String.hash field) in all of the -// String objects in the heap. Setting the hash value is not required. -// However, setting the value in advance prevents the value from being -// written later, increasing the likelihood that the shared page contain -// the hash can be shared. -// -// NOTE THAT we have to call java_lang_String::to_hash() to match the -// algorithm in java.lang.String.toHash(). - -class StringHashCodeClosure: public OopClosure { -private: - Thread* THREAD; - int hash_offset; -public: - StringHashCodeClosure(Thread* t) { - THREAD = t; - hash_offset = java_lang_String::hash_offset_in_bytes(); - } - - void do_oop(oop* p) { - if (p != NULL) { - oop obj = *p; - if (obj->klass() == SystemDictionary::String_klass() && - java_lang_String::has_hash_field()) { - int hash = java_lang_String::to_hash(obj); - obj->int_field_put(hash_offset, hash); - } - } - } - void do_oop(narrowOop* p) { ShouldNotReachHere(); } -}; - - -// Remove data from objects which should not appear in the shared file -// (as it pertains only to the current JVM). - -class RemoveUnshareableInfoClosure : public ObjectClosure { -public: - void do_object(oop obj) { - // Zap data from the objects which is pertains only to this JVM. We - // want that data recreated in new JVMs when the shared file is used. - if (obj->is_method()) { - ((methodOop)obj)->remove_unshareable_info(); - } - else if (obj->is_klass()) { - Klass::cast((klassOop)obj)->remove_unshareable_info(); - } - - // Don't save compiler related special oops (shouldn't be any yet). - if (obj->is_methodData() || obj->is_compiledICHolder()) { - ShouldNotReachHere(); - } - } -}; - - -static bool mark_object(oop obj) { - if (obj != NULL && - !obj->is_shared() && - !obj->is_forwarded() && - !obj->is_gc_marked()) { - obj->set_mark(markOopDesc::prototype()->set_marked()); - return true; - } - - return false; -} - - -class MoveSymbols : public SymbolClosure { -private: - char* _start; - char* _end; - char* _top; - int _count; - - bool in_shared_space(Symbol* sym) const { - return (char*)sym >= _start && (char*)sym < _end; - } - - Symbol* get_shared_copy(Symbol* sym) { - return sym->refcount() > 0 ? NULL : (Symbol*)(_start - sym->refcount()); - } - - Symbol* make_shared_copy(Symbol* sym) { - Symbol* new_sym = (Symbol*)_top; - int size = sym->object_size(); - _top += size * HeapWordSize; - if (_top <= _end) { - Copy::disjoint_words((HeapWord*)sym, (HeapWord*)new_sym, size); - // Encode a reference to the copy as a negative distance from _start - // When a symbol is being copied to a shared space - // during CDS archive creation, the original symbol is marked - // as relocated by putting a negative value to its _refcount field, - // This value is also used to find where exactly the shared copy is - // (see MoveSymbols::get_shared_copy), so that the other references - // to this symbol could be changed to point to the shared copy. - sym->_refcount = (int)(_start - (char*)new_sym); - // Mark the symbol in the shared archive as immortal so it is read only - // and not refcounted. - new_sym->_refcount = -1; - _count++; - } else { - report_out_of_shared_space(SharedMiscData); - } - return new_sym; - } - -public: - MoveSymbols(char* top, char* end) : - _start(top), _end(end), _top(top), _count(0) { } - - char* get_top() const { return _top; } - int count() const { return _count; } - - void do_symbol(Symbol** p) { - Symbol* sym = load_symbol(p); - if (sym != NULL && !in_shared_space(sym)) { - Symbol* new_sym = get_shared_copy(sym); - if (new_sym == NULL) { - // The symbol has not been relocated yet; copy it to _top address - assert(sym->refcount() > 0, "should have positive reference count"); - new_sym = make_shared_copy(sym); - } - // Make the reference point to the shared copy of the symbol - store_symbol(p, new_sym); - } - } -}; - - -// Closure: mark objects closure. - -class MarkObjectsOopClosure : public OopClosure { -public: - void do_oop(oop* p) { mark_object(*p); } - void do_oop(narrowOop* p) { ShouldNotReachHere(); } -}; - - -class MarkObjectsSkippingKlassesOopClosure : public OopClosure { -public: - void do_oop(oop* pobj) { - oop obj = *pobj; - if (obj != NULL && - !obj->is_klass()) { - mark_object(obj); - } - } - void do_oop(narrowOop* pobj) { ShouldNotReachHere(); } -}; - - -static void mark_object_recursive_skipping_klasses(oop obj) { - mark_object(obj); - if (obj != NULL) { - MarkObjectsSkippingKlassesOopClosure mark_all; - obj->oop_iterate(&mark_all); - } -} - - -// Closure: mark common read-only objects - -class MarkCommonReadOnly : public ObjectClosure { -private: - MarkObjectsOopClosure mark_all; -public: - void do_object(oop obj) { - - // Mark all constMethod objects. - - if (obj->is_constMethod()) { - mark_object(obj); - mark_object(constMethodOop(obj)->stackmap_data()); - } - - // Mark objects referenced by klass objects which are read-only. - - else if (obj->is_klass()) { - Klass* k = Klass::cast((klassOop)obj); - mark_object(k->secondary_supers()); - - // The METHODS() OBJARRAYS CANNOT BE MADE READ-ONLY, even though - // it is never modified. Otherwise, they will be pre-marked; the - // GC marking phase will skip them; and by skipping them will fail - // to mark the methods objects referenced by the array. - - if (obj->blueprint()->oop_is_instanceKlass()) { - instanceKlass* ik = instanceKlass::cast((klassOop)obj); - mark_object(ik->method_ordering()); - mark_object(ik->local_interfaces()); - mark_object(ik->transitive_interfaces()); - mark_object(ik->fields()); - - mark_object(ik->class_annotations()); - - mark_object_recursive_skipping_klasses(ik->fields_annotations()); - mark_object_recursive_skipping_klasses(ik->methods_annotations()); - mark_object_recursive_skipping_klasses(ik->methods_parameter_annotations()); - mark_object_recursive_skipping_klasses(ik->methods_default_annotations()); - - typeArrayOop inner_classes = ik->inner_classes(); - if (inner_classes != NULL) { - mark_object(inner_classes); - } - } - } - } -}; - - -// Closure: find symbol references in Java Heap objects - -class CommonSymbolsClosure : public ObjectClosure { -private: - SymbolClosure* _closure; -public: - CommonSymbolsClosure(SymbolClosure* closure) : _closure(closure) { } - - void do_object(oop obj) { - - // Traverse symbols referenced by method objects. - - if (obj->is_method()) { - methodOop m = methodOop(obj); - constantPoolOop constants = m->constants(); - _closure->do_symbol(constants->symbol_at_addr(m->name_index())); - _closure->do_symbol(constants->symbol_at_addr(m->signature_index())); - } - - // Traverse symbols referenced by klass objects which are read-only. - - else if (obj->is_klass()) { - Klass* k = Klass::cast((klassOop)obj); - k->shared_symbols_iterate(_closure); - - if (obj->blueprint()->oop_is_instanceKlass()) { - instanceKlass* ik = instanceKlass::cast((klassOop)obj); - instanceKlassHandle ik_h((klassOop)obj); - InnerClassesIterator iter(ik_h); - constantPoolOop constants = ik->constants(); - for (; !iter.done(); iter.next()) { - int index = iter.inner_name_index(); - - if (index != 0) { - _closure->do_symbol(constants->symbol_at_addr(index)); - } - } - } - } - - // Traverse symbols referenced by other constantpool entries. - - else if (obj->is_constantPool()) { - constantPoolOop(obj)->shared_symbols_iterate(_closure); - } - } -}; - - -// Closure: mark char arrays used by strings - -class MarkStringValues : public ObjectClosure { -private: - MarkObjectsOopClosure mark_all; -public: - void do_object(oop obj) { - - // Character arrays referenced by String objects are read-only. - - if (java_lang_String::is_instance(obj)) { - mark_object(java_lang_String::value(obj)); - } - } -}; - - -#ifdef DEBUG -// Closure: Check for objects left in the heap which have not been moved. - -class CheckRemainingObjects : public ObjectClosure { -private: - int count; - -public: - CheckRemainingObjects() { - count = 0; - } - - void do_object(oop obj) { - if (!obj->is_shared() && - !obj->is_forwarded()) { - ++count; - if (Verbose) { - tty->print("Unreferenced object: "); - obj->print_on(tty); - } - } - } - - void status() { - tty->print_cr("%d objects no longer referenced, not shared.", count); - } -}; -#endif - - -// Closure: Mark remaining objects read-write, except Strings. - -class MarkReadWriteObjects : public ObjectClosure { -private: - MarkObjectsOopClosure mark_objects; -public: - void do_object(oop obj) { - - // The METHODS() OBJARRAYS CANNOT BE MADE READ-ONLY, even though - // it is never modified. Otherwise, they will be pre-marked; the - // GC marking phase will skip them; and by skipping them will fail - // to mark the methods objects referenced by the array. - - if (obj->is_klass()) { - mark_object(obj); - Klass* k = klassOop(obj)->klass_part(); - mark_object(k->java_mirror()); - if (obj->blueprint()->oop_is_instanceKlass()) { - instanceKlass* ik = (instanceKlass*)k; - mark_object(ik->methods()); - mark_object(ik->constants()); - } - if (obj->blueprint()->oop_is_javaArray()) { - arrayKlass* ak = (arrayKlass*)k; - mark_object(ak->component_mirror()); - } - return; - } - - // Mark constantPool tags and the constantPoolCache. - - else if (obj->is_constantPool()) { - constantPoolOop pool = constantPoolOop(obj); - mark_object(pool->cache()); - pool->shared_tags_iterate(&mark_objects); - return; - } - - // Mark all method objects. - - if (obj->is_method()) { - mark_object(obj); - } - } -}; - - -// Closure: Mark String objects read-write. - -class MarkStringObjects : public ObjectClosure { -private: - MarkObjectsOopClosure mark_objects; -public: - void do_object(oop obj) { - - // Mark String objects referenced by constant pool entries. - - if (obj->is_constantPool()) { - constantPoolOop pool = constantPoolOop(obj); - pool->shared_strings_iterate(&mark_objects); - return; - } - } -}; - - -// Move objects matching specified type (ie. lock_bits) to the specified -// space. - -class MoveMarkedObjects : public ObjectClosure { -private: - OffsetTableContigSpace* _space; - bool _read_only; - -public: - MoveMarkedObjects(OffsetTableContigSpace* space, bool read_only) { - _space = space; - _read_only = read_only; - } - - void do_object(oop obj) { - if (obj->is_shared()) { - return; - } - if (obj->is_gc_marked() && obj->forwardee() == NULL) { - int s = obj->size(); - oop sh_obj = (oop)_space->allocate(s); - if (sh_obj == NULL) { - report_out_of_shared_space(_read_only ? SharedReadOnly : SharedReadWrite); - } - if (PrintSharedSpaces && Verbose && WizardMode) { - tty->print_cr("\nMoveMarkedObjects: " PTR_FORMAT " -> " PTR_FORMAT " %s", obj, sh_obj, - (_read_only ? "ro" : "rw")); - } - Copy::aligned_disjoint_words((HeapWord*)obj, (HeapWord*)sh_obj, s); - obj->forward_to(sh_obj); - if (_read_only) { - // Readonly objects: set hash value to self pointer and make gc_marked. - sh_obj->forward_to(sh_obj); - } else { - sh_obj->init_mark(); - } - } - } -}; - -static void mark_and_move(oop obj, MoveMarkedObjects* move) { - if (mark_object(obj)) move->do_object(obj); -} - -enum order_policy { - OP_favor_startup = 0, - OP_balanced = 1, - OP_favor_runtime = 2 -}; - -static void mark_and_move_for_policy(order_policy policy, oop obj, MoveMarkedObjects* move) { - if (SharedOptimizeColdStartPolicy >= policy) mark_and_move(obj, move); -} - -class MarkAndMoveOrderedReadOnly : public ObjectClosure { -private: - MoveMarkedObjects *_move_ro; - -public: - MarkAndMoveOrderedReadOnly(MoveMarkedObjects *move_ro) : _move_ro(move_ro) {} - - void do_object(oop obj) { - if (obj->is_klass() && obj->blueprint()->oop_is_instanceKlass()) { - instanceKlass* ik = instanceKlass::cast((klassOop)obj); - int i; - - if (ik->super() != NULL) { - do_object(ik->super()); - } - - objArrayOop interfaces = ik->local_interfaces(); - mark_and_move_for_policy(OP_favor_startup, interfaces, _move_ro); - for(i = 0; i < interfaces->length(); i++) { - klassOop k = klassOop(interfaces->obj_at(i)); - do_object(k); - } - - objArrayOop methods = ik->methods(); - for(i = 0; i < methods->length(); i++) { - methodOop m = methodOop(methods->obj_at(i)); - mark_and_move_for_policy(OP_favor_startup, m->constMethod(), _move_ro); - mark_and_move_for_policy(OP_favor_runtime, m->constMethod()->stackmap_data(), _move_ro); - } - - mark_and_move_for_policy(OP_favor_startup, ik->transitive_interfaces(), _move_ro); - mark_and_move_for_policy(OP_favor_startup, ik->fields(), _move_ro); - - mark_and_move_for_policy(OP_favor_runtime, ik->secondary_supers(), _move_ro); - mark_and_move_for_policy(OP_favor_runtime, ik->method_ordering(), _move_ro); - mark_and_move_for_policy(OP_favor_runtime, ik->class_annotations(), _move_ro); - mark_and_move_for_policy(OP_favor_runtime, ik->fields_annotations(), _move_ro); - mark_and_move_for_policy(OP_favor_runtime, ik->methods_annotations(), _move_ro); - mark_and_move_for_policy(OP_favor_runtime, ik->methods_parameter_annotations(), _move_ro); - mark_and_move_for_policy(OP_favor_runtime, ik->methods_default_annotations(), _move_ro); - mark_and_move_for_policy(OP_favor_runtime, ik->inner_classes(), _move_ro); - mark_and_move_for_policy(OP_favor_runtime, ik->secondary_supers(), _move_ro); - } - } -}; - -class MarkAndMoveOrderedReadWrite: public ObjectClosure { -private: - MoveMarkedObjects *_move_rw; - -public: - MarkAndMoveOrderedReadWrite(MoveMarkedObjects *move_rw) : _move_rw(move_rw) {} - - void do_object(oop obj) { - if (obj->is_klass() && obj->blueprint()->oop_is_instanceKlass()) { - instanceKlass* ik = instanceKlass::cast((klassOop)obj); - int i; - - mark_and_move_for_policy(OP_favor_startup, ik->as_klassOop(), _move_rw); - - if (ik->super() != NULL) { - do_object(ik->super()); - } - - objArrayOop interfaces = ik->local_interfaces(); - for(i = 0; i < interfaces->length(); i++) { - klassOop k = klassOop(interfaces->obj_at(i)); - mark_and_move_for_policy(OP_favor_startup, k, _move_rw); - do_object(k); - } - - objArrayOop methods = ik->methods(); - mark_and_move_for_policy(OP_favor_startup, methods, _move_rw); - for(i = 0; i < methods->length(); i++) { - methodOop m = methodOop(methods->obj_at(i)); - mark_and_move_for_policy(OP_favor_startup, m, _move_rw); - mark_and_move_for_policy(OP_favor_startup, ik->constants(), _move_rw); // idempotent - mark_and_move_for_policy(OP_balanced, ik->constants()->cache(), _move_rw); // idempotent - mark_and_move_for_policy(OP_balanced, ik->constants()->tags(), _move_rw); // idempotent - } - - mark_and_move_for_policy(OP_favor_startup, ik->as_klassOop()->klass(), _move_rw); - mark_and_move_for_policy(OP_favor_startup, ik->constants()->klass(), _move_rw); - - // Although Java mirrors are marked in MarkReadWriteObjects, - // apparently they were never moved into shared spaces since - // MoveMarkedObjects skips marked instance oops. This may - // be a bug in the original implementation or simply the vestige - // of an abandoned experiment. Nevertheless we leave a hint - // here in case this capability is ever correctly implemented. - // - // mark_and_move_for_policy(OP_favor_runtime, ik->java_mirror(), _move_rw); - } - } - -}; - -// Adjust references in oops to refer to shared spaces. - -class ResolveForwardingClosure: public OopClosure { -public: - void do_oop(oop* p) { - oop obj = *p; - if (!obj->is_shared()) { - if (obj != NULL) { - oop f = obj->forwardee(); - guarantee(f->is_shared(), "Oop doesn't refer to shared space."); - *p = f; - } - } - } - void do_oop(narrowOop* pobj) { ShouldNotReachHere(); } -}; - - -// The methods array must be reordered by Symbol* address. -// (See classFileParser.cpp where methods in a class are originally -// sorted). The addresses of symbols have been changed as a result -// of moving to the shared space. - -class SortMethodsClosure: public ObjectClosure { -public: - void do_object(oop obj) { - if (obj->blueprint()->oop_is_instanceKlass()) { - instanceKlass* ik = instanceKlass::cast((klassOop)obj); - methodOopDesc::sort_methods(ik->methods(), - ik->methods_annotations(), - ik->methods_parameter_annotations(), - ik->methods_default_annotations(), - true /* idempotent, slow */); - } - } -}; - -// Vtable and Itable indices are calculated based on methods array -// order (see klassItable::compute_itable_index()). Must reinitialize -// after ALL methods of ALL classes have been reordered. -// We assume that since checkconstraints is false, this method -// cannot throw an exception. An exception here would be -// problematic since this is the VMThread, not a JavaThread. - -class ReinitializeTables: public ObjectClosure { -private: - Thread* _thread; - -public: - ReinitializeTables(Thread* thread) : _thread(thread) {} - - // Initialize super vtable first, check if already initialized to avoid - // quadradic behavior. The vtable is cleared in remove_unshareable_info. - void reinitialize_vtables(klassOop k) { - if (k->blueprint()->oop_is_instanceKlass()) { - instanceKlass* ik = instanceKlass::cast(k); - if (ik->vtable()->is_initialized()) return; - if (ik->super() != NULL) { - reinitialize_vtables(ik->super()); - } - ik->vtable()->initialize_vtable(false, _thread); - } - } - - void do_object(oop obj) { - if (obj->blueprint()->oop_is_instanceKlass()) { - instanceKlass* ik = instanceKlass::cast((klassOop)obj); - ResourceMark rm(_thread); - ik->itable()->initialize_itable(false, _thread); - reinitialize_vtables((klassOop)obj); -#ifdef ASSERT - ik->vtable()->verify(tty, true); -#endif // ASSERT - } else if (obj->blueprint()->oop_is_arrayKlass()) { - // The vtable for array klasses are that of its super class, - // ie. java.lang.Object. - arrayKlass* ak = arrayKlass::cast((klassOop)obj); - if (ak->vtable()->is_initialized()) return; - ak->vtable()->initialize_vtable(false, _thread); - } - } -}; - - -// Adjust references in oops to refer to shared spaces. - -class PatchOopsClosure: public ObjectClosure { -private: - Thread* _thread; - ResolveForwardingClosure resolve; - -public: - PatchOopsClosure(Thread* thread) : _thread(thread) {} - - void do_object(oop obj) { - obj->oop_iterate_header(&resolve); - obj->oop_iterate(&resolve); - - assert(obj->klass()->is_shared(), "Klass not pointing into shared space."); - - // If the object is a Java object or class which might (in the - // future) contain a reference to a young gen object, add it to the - // list. - - if (obj->is_klass() || obj->is_instance()) { - if (obj->is_klass() || - obj->is_a(SystemDictionary::Class_klass()) || - obj->is_a(SystemDictionary::Throwable_klass())) { - // Do nothing - } - else if (obj->is_a(SystemDictionary::String_klass())) { - // immutable objects. - } else { - // someone added an object we hadn't accounted for. - ShouldNotReachHere(); - } - } - } -}; - - -// Empty the young and old generations. - -class ClearSpaceClosure : public SpaceClosure { -public: - void do_space(Space* s) { - s->clear(SpaceDecorator::Mangle); - } -}; - - -// Closure for serializing initialization data out to a data area to be -// written to the shared file. - -class WriteClosure : public SerializeOopClosure { -private: - oop* top; - char* end; - - inline void check_space() { - if ((char*)top + sizeof(oop) > end) { - report_out_of_shared_space(SharedMiscData); - } - } - - -public: - WriteClosure(char* md_top, char* md_end) { - top = (oop*)md_top; - end = md_end; - } - - char* get_top() { return (char*)top; } - - void do_oop(oop* p) { - check_space(); - oop obj = *p; - assert(obj->is_oop_or_null(), "invalid oop"); - assert(obj == NULL || obj->is_shared(), - "Oop in shared space not pointing into shared space."); - *top = obj; - ++top; - } - - void do_oop(narrowOop* pobj) { ShouldNotReachHere(); } - - void do_int(int* p) { - check_space(); - *top = (oop)(intptr_t)*p; - ++top; - } - - void do_size_t(size_t* p) { - check_space(); - *top = (oop)(intptr_t)*p; - ++top; - } - - void do_ptr(void** p) { - check_space(); - *top = (oop)*p; - ++top; - } - - void do_ptr(HeapWord** p) { do_ptr((void **) p); } - - void do_tag(int tag) { - check_space(); - *top = (oop)(intptr_t)tag; - ++top; - } - - void do_region(u_char* start, size_t size) { - if ((char*)top + size > end) { - report_out_of_shared_space(SharedMiscData); - } - assert((intptr_t)start % sizeof(oop) == 0, "bad alignment"); - assert(size % sizeof(oop) == 0, "bad size"); - do_tag((int)size); - while (size > 0) { - *top = *(oop*)start; - ++top; - start += sizeof(oop); - size -= sizeof(oop); - } - } - - bool reading() const { return false; } -}; - - -class ResolveConstantPoolsClosure : public ObjectClosure { -private: - TRAPS; -public: - ResolveConstantPoolsClosure(Thread *t) { - __the_thread__ = t; - } - void do_object(oop obj) { - if (obj->is_constantPool()) { - constantPoolOop cpool = (constantPoolOop)obj; - int unresolved = cpool->pre_resolve_shared_klasses(THREAD); - } - } -}; - - -// Print a summary of the contents of the read/write spaces to help -// identify objects which might be able to be made read-only. At this -// point, the objects have been written, and we can trash them as -// needed. - -static void print_contents() { - if (PrintSharedSpaces) { - GenCollectedHeap* gch = GenCollectedHeap::heap(); - CompactingPermGenGen* gen = (CompactingPermGenGen*)gch->perm_gen(); - - // High level summary of the read-only space: - - ClassifyObjectClosure coc; - tty->cr(); tty->print_cr("ReadOnly space:"); - gen->ro_space()->object_iterate(&coc); - coc.print(); - - // High level summary of the read-write space: - - coc.reset(); - tty->cr(); tty->print_cr("ReadWrite space:"); - gen->rw_space()->object_iterate(&coc); - coc.print(); - - // Reset counters - - ClearAllocCountClosure cacc; - gen->ro_space()->object_iterate(&cacc); - gen->rw_space()->object_iterate(&cacc); - coc.reset(); - - // Lower level summary of the read-only space: - - gen->ro_space()->object_iterate(&coc); - tty->cr(); tty->print_cr("ReadOnly space:"); - ClassifyInstanceKlassClosure cikc; - gen->rw_space()->object_iterate(&cikc); - cikc.print(); - - // Reset counters - - gen->ro_space()->object_iterate(&cacc); - gen->rw_space()->object_iterate(&cacc); - coc.reset(); - - // Lower level summary of the read-write space: - - gen->rw_space()->object_iterate(&coc); - cikc.reset(); - tty->cr(); tty->print_cr("ReadWrite space:"); - gen->rw_space()->object_iterate(&cikc); - cikc.print(); - } -} - - -// Patch C++ vtable pointer in klass oops. - -// Klass objects contain references to c++ vtables in the JVM library. -// Fix them to point to our constructed vtables. However, don't iterate -// across the space while doing this, as that causes the vtables to be -// patched, undoing our useful work. Instead, iterate to make a list, -// then use the list to do the fixing. -// -// Our constructed vtables: -// Dump time: -// 1. init_self_patching_vtbl_list: table of pointers to current virtual method addrs -// 2. generate_vtable_methods: create jump table, appended to above vtbl_list -// 3. PatchKlassVtables: for Klass list, patch the vtable entry to point to jump table -// rather than to current vtbl -// Table layout: NOTE FIXED SIZE -// 1. vtbl pointers -// 2. #Klass X #virtual methods per Klass -// 1 entry for each, in the order: -// Klass1:method1 entry, Klass1:method2 entry, ... Klass1:method entry -// Klass2:method1 entry, Klass2:method2 entry, ... Klass2:method entry -// ... -// Klass:method1 entry, Klass:method2 entry, -// ... Klass:method entry -// Sample entry: (Sparc): -// save(sp, -256, sp) -// ba,pt common_code -// mov XXX, %L0 %L0 gets: Klass index <<8 + method index (note: max method index 255) -// -// Restore time: -// 1. initialize_oops: reserve space for table -// 2. init_self_patching_vtbl_list: update pointers to NEW virtual method addrs in text -// -// Execution time: -// First virtual method call for any object of these Klass types: -// 1. object->klass->klass_part -// 2. vtable entry for that klass_part points to the jump table entries -// 3. branches to common_code with %O0/klass_part, %L0: Klass index <<8 + method index -// 4. common_code: -// Get address of new vtbl pointer for this Klass from updated table -// Update new vtbl pointer in the Klass: future virtual calls go direct -// Jump to method, using new vtbl pointer and method index - -class PatchKlassVtables: public ObjectClosure { -private: - GrowableArray* _klass_objects; - -public: - PatchKlassVtables() { - _klass_objects = new GrowableArray(); - } - - void do_object(oop obj) { - if (obj->is_klass()) { - _klass_objects->append(klassOop(obj)); - } - } - - void patch(void** vtbl_list, void* new_vtable_start) { - int n = _klass_objects->length(); - for (int i = 0; i < n; i++) { - klassOop obj = (klassOop)_klass_objects->at(i); - Klass* k = obj->klass_part(); - *(void**)k = CompactingPermGenGen::find_matching_vtbl_ptr( - vtbl_list, new_vtable_start, k); - } - } -}; - -// Walk through all symbols and patch their vtable pointers. -// Note that symbols have vtable pointers only in non-product builds -// (see allocation.hpp). - -#ifndef PRODUCT -class PatchSymbolVtables: public SymbolClosure { -private: - void* _new_vtbl_ptr; - -public: - PatchSymbolVtables(void** vtbl_list, void* new_vtable_start) { - Symbol s; - _new_vtbl_ptr = CompactingPermGenGen::find_matching_vtbl_ptr( - vtbl_list, new_vtable_start, &s); - } - - void do_symbol(Symbol** p) { - Symbol* sym = load_symbol(p); - *(void**)sym = _new_vtbl_ptr; - } -}; -#endif - - -// Populate the shared space. - -class VM_PopulateDumpSharedSpace: public VM_Operation { -private: - GrowableArray *_class_promote_order; - OffsetTableContigSpace* _ro_space; - OffsetTableContigSpace* _rw_space; - VirtualSpace* _md_vs; - VirtualSpace* _mc_vs; - -public: - VM_PopulateDumpSharedSpace(GrowableArray *class_promote_order, - OffsetTableContigSpace* ro_space, - OffsetTableContigSpace* rw_space, - VirtualSpace* md_vs, VirtualSpace* mc_vs) { - _class_promote_order = class_promote_order; - _ro_space = ro_space; - _rw_space = rw_space; - _md_vs = md_vs; - _mc_vs = mc_vs; - } - - VMOp_Type type() const { return VMOp_PopulateDumpSharedSpace; } - void doit() { - Thread* THREAD = VMThread::vm_thread(); - NOT_PRODUCT(SystemDictionary::verify();) - // The following guarantee is meant to ensure that no loader constraints - // exist yet, since the constraints table is not shared. This becomes - // more important now that we don't re-initialize vtables/itables for - // shared classes at runtime, where constraints were previously created. - guarantee(SystemDictionary::constraints()->number_of_entries() == 0, - "loader constraints are not saved"); - // Revisit and implement this if we prelink method handle call sites: - guarantee(SystemDictionary::invoke_method_table() == NULL || - SystemDictionary::invoke_method_table()->number_of_entries() == 0, - "invoke method table is not saved"); - GenCollectedHeap* gch = GenCollectedHeap::heap(); - - // At this point, many classes have been loaded. - - // Update all the fingerprints in the shared methods. - - tty->print("Calculating fingerprints ... "); - FingerprintMethodsClosure fpmc; - gch->object_iterate(&fpmc); - tty->print_cr("done. "); - - // Remove all references outside the heap. - - tty->print("Removing unshareable information ... "); - RemoveUnshareableInfoClosure ruic; - gch->object_iterate(&ruic); - tty->print_cr("done. "); - - // Move the objects in three passes. - - MarkObjectsOopClosure mark_all; - MarkCommonReadOnly mark_common_ro; - MarkStringValues mark_string_values; - MarkReadWriteObjects mark_rw; - MarkStringObjects mark_strings; - MoveMarkedObjects move_ro(_ro_space, true); - MoveMarkedObjects move_rw(_rw_space, false); - - // The SharedOptimizeColdStart VM option governs the new layout - // algorithm for promoting classes into the shared archive. - // The general idea is to minimize cold start time by laying - // out the objects in the order they are accessed at startup time. - // By doing this we are trying to eliminate out-of-order accesses - // in the shared archive. This benefits cold startup time by making - // disk reads as sequential as possible during class loading and - // bootstrapping activities. There may also be a small secondary - // effect of better "packing" of more commonly used data on a smaller - // number of pages, although no direct benefit has been measured from - // this effect. - // - // At the class level of granularity, the promotion order is dictated - // by the classlist file whose generation is discussed elsewhere. - // - // At smaller granularity, optimal ordering was determined by an - // offline analysis of object access order in the shared archive. - // The dbx watchpoint facility, combined with SA post-processing, - // was used to observe common access patterns primarily during - // classloading. This information was used to craft the promotion - // order seen in the following closures. - // - // The observed access order is mostly governed by what happens - // in SystemDictionary::load_shared_class(). NOTE WELL - care - // should be taken when making changes to this method, because it - // may invalidate assumptions made about access order! - // - // (Ideally, there would be a better way to manage changes to - // the access order. Unfortunately a generic in-VM solution for - // dynamically observing access order and optimizing shared - // archive layout is pretty difficult. We go with the static - // analysis because the code is fairly mature at this point - // and we're betting that the access order won't change much.) - - MarkAndMoveOrderedReadOnly mark_and_move_ordered_ro(&move_ro); - MarkAndMoveOrderedReadWrite mark_and_move_ordered_rw(&move_rw); - - // Set up the share data and shared code segments. - - char* md_top = _md_vs->low(); - char* md_end = _md_vs->high(); - char* mc_top = _mc_vs->low(); - char* mc_end = _mc_vs->high(); - - // Reserve space for the list of klassOops whose vtables are used - // for patching others as needed. - - void** vtbl_list = (void**)md_top; - int vtbl_list_size = CompactingPermGenGen::vtbl_list_size; - Universe::init_self_patching_vtbl_list(vtbl_list, vtbl_list_size); - - md_top += vtbl_list_size * sizeof(void*); - void* vtable = md_top; - - // Reserve space for a new dummy vtable for klass objects in the - // heap. Generate self-patching vtable entries. - - CompactingPermGenGen::generate_vtable_methods(vtbl_list, - &vtable, - &md_top, md_end, - &mc_top, mc_end); - - // Reserve space for the total size and the number of stored symbols. - - md_top += sizeof(intptr_t) * 2; - - MoveSymbols move_symbols(md_top, md_end); - CommonSymbolsClosure traverse_common_symbols(&move_symbols); - - // Phase 1a: remove symbols with _refcount == 0 - - SymbolTable::unlink(); - - // Phase 1b: move commonly used symbols referenced by oop fields. - - tty->print("Moving common symbols to metadata section at " PTR_FORMAT " ... ", - move_symbols.get_top()); - gch->object_iterate(&traverse_common_symbols); - tty->print_cr("done. "); - - // Phase 1c: move known names and signatures. - - tty->print("Moving vmSymbols to metadata section at " PTR_FORMAT " ... ", - move_symbols.get_top()); - vmSymbols::symbols_do(&move_symbols); - tty->print_cr("done. "); - - // Phase 1d: move the remaining symbols by scanning the whole SymbolTable. - - void* extra_symbols = move_symbols.get_top(); - tty->print("Moving the remaining symbols to metadata section at " PTR_FORMAT " ... ", - move_symbols.get_top()); - SymbolTable::symbols_do(&move_symbols); - tty->print_cr("done. "); - - // Record the total length of all symbols at the beginning of the block. - ((intptr_t*)md_top)[-2] = move_symbols.get_top() - md_top; - ((intptr_t*)md_top)[-1] = move_symbols.count(); - tty->print_cr("Moved %d symbols, %d bytes.", - move_symbols.count(), move_symbols.get_top() - md_top); - // Advance the pointer to the end of symbol store. - md_top = move_symbols.get_top(); - - - // Phase 2: move commonly used read-only objects to the read-only space. - - if (SharedOptimizeColdStart) { - tty->print("Moving pre-ordered read-only objects to shared space at " PTR_FORMAT " ... ", - _ro_space->top()); - for (int i = 0; i < _class_promote_order->length(); i++) { - oop obj = _class_promote_order->at(i); - mark_and_move_ordered_ro.do_object(obj); - } - tty->print_cr("done. "); - } - - tty->print("Moving read-only objects to shared space at " PTR_FORMAT " ... ", - _ro_space->top()); - gch->object_iterate(&mark_common_ro); - gch->object_iterate(&move_ro); - tty->print_cr("done. "); - - // Phase 3: move String character arrays to the read-only space. - - tty->print("Moving string char arrays to shared space at " PTR_FORMAT " ... ", - _ro_space->top()); - gch->object_iterate(&mark_string_values); - gch->object_iterate(&move_ro); - tty->print_cr("done. "); - - // Phase 4: move read-write objects to the read-write space, except - // Strings. - - if (SharedOptimizeColdStart) { - tty->print("Moving pre-ordered read-write objects to shared space at " PTR_FORMAT " ... ", - _rw_space->top()); - for (int i = 0; i < _class_promote_order->length(); i++) { - oop obj = _class_promote_order->at(i); - mark_and_move_ordered_rw.do_object(obj); - } - tty->print_cr("done. "); - } - tty->print("Moving read-write objects to shared space at " PTR_FORMAT " ... ", - _rw_space->top()); - Universe::oops_do(&mark_all, true); - SystemDictionary::oops_do(&mark_all); - oop tmp = Universe::arithmetic_exception_instance(); - mark_object(java_lang_Throwable::message(tmp)); - gch->object_iterate(&mark_rw); - gch->object_iterate(&move_rw); - tty->print_cr("done. "); - - // Phase 5: move String objects to the read-write space. - - tty->print("Moving String objects to shared space at " PTR_FORMAT " ... ", - _rw_space->top()); - StringTable::oops_do(&mark_all); - gch->object_iterate(&mark_strings); - gch->object_iterate(&move_rw); - tty->print_cr("done. "); - tty->print_cr("Read-write space ends at " PTR_FORMAT ", %d bytes.", - _rw_space->top(), _rw_space->used()); - -#ifdef DEBUG - // Check: scan for objects which were not moved. - - CheckRemainingObjects check_objects; - gch->object_iterate(&check_objects); - check_objects.status(); -#endif - - // Resolve forwarding in objects and saved C++ structures - tty->print("Updating references to shared objects ... "); - ResolveForwardingClosure resolve; - Universe::oops_do(&resolve); - SystemDictionary::oops_do(&resolve); - StringTable::oops_do(&resolve); - - // Fix (forward) all of the references in these shared objects (which - // are required to point ONLY to objects in the shared spaces). - // Also, create a list of all objects which might later contain a - // reference to a younger generation object. - - CompactingPermGenGen* gen = (CompactingPermGenGen*)gch->perm_gen(); - PatchOopsClosure patch(THREAD); - gen->ro_space()->object_iterate(&patch); - gen->rw_space()->object_iterate(&patch); - - // Previously method sorting was done concurrently with forwarding - // pointer resolution in the shared spaces. This imposed an ordering - // restriction in that methods were required to be promoted/patched - // before their holder classes. (Because constant pool pointers in - // methodKlasses are required to be resolved before their holder class - // is visited for sorting, otherwise methods are sorted by incorrect, - // pre-forwarding addresses.) - // - // Now, we reorder methods as a separate step after ALL forwarding - // pointer resolution, so that methods can be promoted in any order - // with respect to their holder classes. - - SortMethodsClosure sort; - gen->ro_space()->object_iterate(&sort); - gen->rw_space()->object_iterate(&sort); - - ReinitializeTables reinit_tables(THREAD); - gen->ro_space()->object_iterate(&reinit_tables); - gen->rw_space()->object_iterate(&reinit_tables); - tty->print_cr("done. "); - tty->cr(); - - // Reorder the system dictionary. (Moving the symbols opps affects - // how the hash table indices are calculated.) - - SystemDictionary::reorder_dictionary(); - - // Empty the non-shared heap (because most of the objects were - // copied out, and the remainder cannot be considered valid oops). - - ClearSpaceClosure csc; - for (int i = 0; i < gch->n_gens(); ++i) { - gch->get_gen(i)->space_iterate(&csc); - } - csc.do_space(gen->the_space()); - NOT_PRODUCT(SystemDictionary::verify();) - - // Copy the String table, the symbol table, and the system - // dictionary to the shared space in usable form. Copy the hastable - // buckets first [read-write], then copy the linked lists of entries - // [read-only]. - - SymbolTable::reverse(extra_symbols); - NOT_PRODUCT(SymbolTable::verify()); - SymbolTable::copy_buckets(&md_top, md_end); - - StringTable::reverse(); - NOT_PRODUCT(StringTable::verify()); - StringTable::copy_buckets(&md_top, md_end); - - SystemDictionary::reverse(); - SystemDictionary::copy_buckets(&md_top, md_end); - - ClassLoader::verify(); - ClassLoader::copy_package_info_buckets(&md_top, md_end); - ClassLoader::verify(); - - SymbolTable::copy_table(&md_top, md_end); - StringTable::copy_table(&md_top, md_end); - SystemDictionary::copy_table(&md_top, md_end); - ClassLoader::verify(); - ClassLoader::copy_package_info_table(&md_top, md_end); - ClassLoader::verify(); - - // Print debug data. - - if (PrintSharedSpaces) { - const char* fmt = "%s space: " PTR_FORMAT " out of " PTR_FORMAT " bytes allocated at " PTR_FORMAT "."; - tty->print_cr(fmt, "ro", _ro_space->used(), _ro_space->capacity(), - _ro_space->bottom()); - tty->print_cr(fmt, "rw", _rw_space->used(), _rw_space->capacity(), - _rw_space->bottom()); - } - - // Write the oop data to the output array. - - WriteClosure wc(md_top, md_end); - CompactingPermGenGen::serialize_oops(&wc); - md_top = wc.get_top(); - - // Update the vtable pointers in all of the Klass objects in the - // heap. They should point to newly generated vtable. - - PatchKlassVtables pkvt; - _rw_space->object_iterate(&pkvt); - pkvt.patch(vtbl_list, vtable); - -#ifndef PRODUCT - // Update the vtable pointers in all symbols, - // but only in non-product builds where symbols DO have virtual methods. - PatchSymbolVtables psvt(vtbl_list, vtable); - SymbolTable::symbols_do(&psvt); -#endif - - char* saved_vtbl = (char*)malloc(vtbl_list_size * sizeof(void*)); - memmove(saved_vtbl, vtbl_list, vtbl_list_size * sizeof(void*)); - memset(vtbl_list, 0, vtbl_list_size * sizeof(void*)); - - // Create and write the archive file that maps the shared spaces. - - FileMapInfo* mapinfo = new FileMapInfo(); - mapinfo->populate_header(gch->gen_policy()->max_alignment()); - - // Pass 1 - update file offsets in header. - mapinfo->write_header(); - mapinfo->write_space(CompactingPermGenGen::ro, _ro_space, true); - _ro_space->set_saved_mark(); - mapinfo->write_space(CompactingPermGenGen::rw, _rw_space, false); - _rw_space->set_saved_mark(); - mapinfo->write_region(CompactingPermGenGen::md, _md_vs->low(), - pointer_delta(md_top, _md_vs->low(), sizeof(char)), - SharedMiscDataSize, - false, false); - mapinfo->write_region(CompactingPermGenGen::mc, _mc_vs->low(), - pointer_delta(mc_top, _mc_vs->low(), sizeof(char)), - SharedMiscCodeSize, - true, true); - - // Pass 2 - write data. - mapinfo->open_for_write(); - mapinfo->write_header(); - mapinfo->write_space(CompactingPermGenGen::ro, _ro_space, true); - mapinfo->write_space(CompactingPermGenGen::rw, _rw_space, false); - mapinfo->write_region(CompactingPermGenGen::md, _md_vs->low(), - pointer_delta(md_top, _md_vs->low(), sizeof(char)), - SharedMiscDataSize, - false, false); - mapinfo->write_region(CompactingPermGenGen::mc, _mc_vs->low(), - pointer_delta(mc_top, _mc_vs->low(), sizeof(char)), - SharedMiscCodeSize, - true, true); - mapinfo->close(); - - // Summarize heap. - memmove(vtbl_list, saved_vtbl, vtbl_list_size * sizeof(void*)); - print_contents(); - } -}; // class VM_PopulateDumpSharedSpace - - -// Populate the shared spaces and dump to a file. - -jint CompactingPermGenGen::dump_shared(GrowableArray* class_promote_order, TRAPS) { - GenCollectedHeap* gch = GenCollectedHeap::heap(); - - // Calculate hash values for all of the (interned) strings to avoid - // writes to shared pages in the future. - - tty->print("Calculating hash values for String objects .. "); - StringHashCodeClosure shcc(THREAD); - StringTable::oops_do(&shcc); - tty->print_cr("done. "); - - CompactingPermGenGen* gen = (CompactingPermGenGen*)gch->perm_gen(); - VM_PopulateDumpSharedSpace op(class_promote_order, - gen->ro_space(), gen->rw_space(), - gen->md_space(), gen->mc_space()); - VMThread::execute(&op); - return JNI_OK; -} - -void* CompactingPermGenGen::find_matching_vtbl_ptr(void** vtbl_list, - void* new_vtable_start, - void* obj) { - void* old_vtbl_ptr = *(void**)obj; - for (int i = 0; i < vtbl_list_size; i++) { - if (vtbl_list[i] == old_vtbl_ptr) { - return (void**)new_vtable_start + i * num_virtuals; - } - } - ShouldNotReachHere(); - return NULL; -} - - -class LinkClassesClosure : public ObjectClosure { - private: - Thread* THREAD; - - public: - LinkClassesClosure(Thread* thread) : THREAD(thread) {} - - void do_object(oop obj) { - if (obj->is_klass()) { - Klass* k = Klass::cast((klassOop) obj); - if (k->oop_is_instance()) { - instanceKlass* ik = (instanceKlass*) k; - // Link the class to cause the bytecodes to be rewritten and the - // cpcache to be created. - if (ik->init_state() < instanceKlass::linked) { - ik->link_class(THREAD); - guarantee(!HAS_PENDING_EXCEPTION, "exception in class rewriting"); - } - - // Create String objects from string initializer symbols. - ik->constants()->resolve_string_constants(THREAD); - guarantee(!HAS_PENDING_EXCEPTION, "exception resolving string constants"); - } - } - } -}; - - -// Support for a simple checksum of the contents of the class list -// file to prevent trivial tampering. The algorithm matches that in -// the MakeClassList program used by the J2SE build process. -#define JSUM_SEED ((jlong)CONST64(0xcafebabebabecafe)) -static jlong -jsum(jlong start, const char *buf, const int len) -{ - jlong h = start; - char *p = (char *)buf, *e = p + len; - while (p < e) { - char c = *p++; - if (c <= ' ') { - /* Skip spaces and control characters */ - continue; - } - h = 31 * h + c; - } - return h; -} - - - - - -// Preload classes from a list, populate the shared spaces and dump to a -// file. - -void GenCollectedHeap::preload_and_dump(TRAPS) { - TraceTime timer("Dump Shared Spaces", TraceStartupTime); - ResourceMark rm; - - // Preload classes to be shared. - // Should use some os:: method rather than fopen() here. aB. - // Construct the path to the class list (in jre/lib) - // Walk up two directories from the location of the VM and - // optionally tack on "lib" (depending on platform) - char class_list_path[JVM_MAXPATHLEN]; - os::jvm_path(class_list_path, sizeof(class_list_path)); - for (int i = 0; i < 3; i++) { - char *end = strrchr(class_list_path, *os::file_separator()); - if (end != NULL) *end = '\0'; - } - int class_list_path_len = (int)strlen(class_list_path); - if (class_list_path_len >= 3) { - if (strcmp(class_list_path + class_list_path_len - 3, "lib") != 0) { - strcat(class_list_path, os::file_separator()); - strcat(class_list_path, "lib"); - } - } - strcat(class_list_path, os::file_separator()); - strcat(class_list_path, "classlist"); - - FILE* file = fopen(class_list_path, "r"); - if (file != NULL) { - jlong computed_jsum = JSUM_SEED; - jlong file_jsum = 0; - - char class_name[256]; - int class_count = 0; - GenCollectedHeap* gch = GenCollectedHeap::heap(); - gch->_preloading_shared_classes = true; - GrowableArray* class_promote_order = new GrowableArray(); - - // Preload (and intern) strings which will be used later. - - StringTable::intern("main", THREAD); - StringTable::intern("([Ljava/lang/String;)V", THREAD); - StringTable::intern("Ljava/lang/Class;", THREAD); - - StringTable::intern("I", THREAD); // Needed for StringBuffer persistence? - StringTable::intern("Z", THREAD); // Needed for StringBuffer persistence? - - // sun.io.Converters - static const char obj_array_sig[] = "[[Ljava/lang/Object;"; - (void)SymbolTable::new_permanent_symbol(obj_array_sig, THREAD); - - // java.util.HashMap - static const char map_entry_array_sig[] = "[Ljava/util/Map$Entry;"; - (void)SymbolTable::new_permanent_symbol(map_entry_array_sig, THREAD); - - tty->print("Loading classes to share ... "); - while ((fgets(class_name, sizeof class_name, file)) != NULL) { - if (*class_name == '#') { - jint fsh, fsl; - if (sscanf(class_name, "# %8x%8x\n", &fsh, &fsl) == 2) { - file_jsum = ((jlong)(fsh) << 32) | (fsl & 0xffffffff); - } - - continue; - } - // Remove trailing newline - size_t name_len = strlen(class_name); - class_name[name_len-1] = '\0'; - - computed_jsum = jsum(computed_jsum, class_name, (const int)name_len - 1); - - // Got a class name - load it. - Symbol* class_name_symbol = SymbolTable::new_permanent_symbol(class_name, THREAD); - guarantee(!HAS_PENDING_EXCEPTION, "Exception creating a symbol."); - klassOop klass = SystemDictionary::resolve_or_null(class_name_symbol, - THREAD); - guarantee(!HAS_PENDING_EXCEPTION, "Exception resolving a class."); - if (klass != NULL) { - if (PrintSharedSpaces) { - tty->print_cr("Shared spaces preloaded: %s", class_name); - } - - - instanceKlass* ik = instanceKlass::cast(klass); - - // Should be class load order as per -XX:+TraceClassLoadingPreorder - class_promote_order->append(ik->as_klassOop()); - - // Link the class to cause the bytecodes to be rewritten and the - // cpcache to be created. The linking is done as soon as classes - // are loaded in order that the related data structures (klass, - // cpCache, Sting constants) are located together. - - if (ik->init_state() < instanceKlass::linked) { - ik->link_class(THREAD); - guarantee(!(HAS_PENDING_EXCEPTION), "exception in class rewriting"); - } - - // Create String objects from string initializer symbols. - - ik->constants()->resolve_string_constants(THREAD); - - class_count++; - } else { - if (PrintSharedSpaces) { - tty->cr(); - tty->print_cr(" Preload failed: %s", class_name); - } - } - file_jsum = 0; // Checksum must be on last line of file - } - if (computed_jsum != file_jsum) { - tty->cr(); - tty->print_cr("Preload failed: checksum of class list was incorrect."); - exit(1); - } - - tty->print_cr("done. "); - - if (PrintSharedSpaces) { - tty->print_cr("Shared spaces: preloaded %d classes", class_count); - } - - // Rewrite and unlink classes. - tty->print("Rewriting and unlinking classes ... "); - // Make heap parsable - ensure_parsability(false); // arg is actually don't care - - // Link any classes which got missed. (It's not quite clear why - // they got missed.) This iteration would be unsafe if we weren't - // single-threaded at this point; however we can't do it on the VM - // thread because it requires object allocation. - LinkClassesClosure lcc(Thread::current()); - object_iterate(&lcc); - ensure_parsability(false); // arg is actually don't care - tty->print_cr("done. "); - - // Create and dump the shared spaces. - jint err = CompactingPermGenGen::dump_shared(class_promote_order, THREAD); - if (err != JNI_OK) { - fatal("Dumping shared spaces failed."); - } - - } else { - char errmsg[JVM_MAXPATHLEN]; - os::lasterror(errmsg, JVM_MAXPATHLEN); - tty->print_cr("Loading classlist failed: %s", errmsg); - exit(1); - } - - // Since various initialization steps have been undone by this process, - // it is not reasonable to continue running a java process. - exit(0); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/filemap.cpp --- a/src/share/vm/memory/filemap.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/filemap.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -205,11 +205,12 @@ // Dump shared spaces to file. -void FileMapInfo::write_space(int i, CompactibleSpace* space, bool read_only) { +void FileMapInfo::write_space(int i, Metaspace* space, bool read_only) { align_file_position(); + size_t used = space->used_words(Metaspace::NonClassType) * BytesPerWord; + size_t capacity = space->capacity_words(Metaspace::NonClassType) * BytesPerWord; struct FileMapInfo::FileMapHeader::space_info* si = &_header._space[i]; - write_region(i, (char*)space->bottom(), space->used(), - space->capacity(), read_only, false); + write_region(i, (char*)space->bottom(), used, capacity, read_only, false); } @@ -223,8 +224,8 @@ if (_file_open) { guarantee(si->_file_offset == _file_offset, "file offset mismatch."); if (PrintSharedSpaces) { - tty->print_cr("Shared file region %d: 0x%x bytes, addr 0x%x," - " file offset 0x%x", region, size, base, _file_offset); + tty->print_cr("Shared file region %d: 0x%6x bytes, addr " INTPTR_FORMAT + " file offset 0x%6x", region, size, base, _file_offset); } } else { si->_file_offset = _file_offset; @@ -297,26 +298,6 @@ } -// Memory map a shared space from the archive file. - -bool FileMapInfo::map_space(int i, ReservedSpace rs, ContiguousSpace* space) { - struct FileMapInfo::FileMapHeader::space_info* si = &_header._space[i]; - if (space != NULL) { - if (si->_base != (char*)space->bottom() || - si->_capacity != space->capacity()) { - fail_continue("Shared space base address does not match."); - return false; - } - } - bool result = (map_region(i, rs) != NULL); - if (space != NULL && result) { - space->set_top((HeapWord*)(si->_base + si->_used)); - space->set_saved_mark(); - } - return result; -} - - // JVM/TI RedefineClasses() support: // Remap the shared readonly space to shared readwrite, private. bool FileMapInfo::remap_shared_readonly_as_readwrite() { @@ -346,6 +327,25 @@ return true; } +// Map the whole region at once, assumed to be allocated contiguously. +ReservedSpace FileMapInfo::reserve_shared_memory() { + struct FileMapInfo::FileMapHeader::space_info* si = &_header._space[0]; + char* requested_addr = si->_base; + size_t alignment = os::vm_allocation_granularity(); + + size_t size = align_size_up(SharedReadOnlySize + SharedReadWriteSize + + SharedMiscDataSize + SharedMiscCodeSize, + alignment); + + // Reserve the space first, then map otherwise map will go right over some + // other reserved memory (like the code cache). + ReservedSpace rs(size, alignment, false, requested_addr); + if (!rs.is_reserved()) { + fail_continue(err_msg("Unable to reserved shared space at required address " INTPTR_FORMAT, requested_addr)); + return rs; + } + return rs; +} // Memory map a region in the address space. @@ -358,35 +358,28 @@ ReservedSpace unmapped_rs = rs.last_part(size); mapped_rs.release(); - return map_region(i, true); + return map_region(i); } // Memory map a region in the address space. +static const char* shared_region_name[] = { "ReadOnly", "ReadWrite", "MiscData", "MiscCode"}; -char* FileMapInfo::map_region(int i, bool address_must_match) { +char* FileMapInfo::map_region(int i) { struct FileMapInfo::FileMapHeader::space_info* si = &_header._space[i]; size_t used = si->_used; - size_t size = align_size_up(used, os::vm_allocation_granularity()); - char *requested_addr = 0; - if (address_must_match) { - requested_addr = si->_base; - } + size_t alignment = os::vm_allocation_granularity(); + size_t size = align_size_up(used, alignment); + char *requested_addr = si->_base; + + // map the contents of the CDS archive in this memory char *base = os::map_memory(_fd, _full_path, si->_file_offset, requested_addr, size, si->_read_only, si->_allow_exec); - if (base == NULL) { - fail_continue("Unable to map shared space."); + if (base == NULL || base != si->_base) { + fail_continue(err_msg("Unable to map %s shared space at required address.", shared_region_name[i])); return NULL; } - if (address_must_match) { - if (base != si->_base) { - fail_continue("Unable to map shared space at required address."); - return NULL; - } - } else { - si->_base = base; // save mapped address for unmapping. - } return base; } @@ -417,8 +410,6 @@ // information (version, boot classpath, etc.). If initialization // fails, shared spaces are disabled and the file is closed. [See // fail_continue.] - - bool FileMapInfo::initialize() { assert(UseSharedSpaces, "UseSharedSpaces expected."); @@ -518,7 +509,7 @@ // Return: // True if the p is within the mapped shared space, otherwise, false. bool FileMapInfo::is_in_shared_space(const void* p) { - for (int i = 0; i < CompactingPermGenGen::n_regions; i++) { + for (int i = 0; i < MetaspaceShared::n_regions; i++) { if (p >= _header._space[i]._base && p < _header._space[i]._base + _header._space[i]._used) { return true; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/filemap.hpp --- a/src/share/vm/memory/filemap.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/filemap.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,7 @@ #ifndef SHARE_VM_MEMORY_FILEMAP_HPP #define SHARE_VM_MEMORY_FILEMAP_HPP -#include "memory/compactingPermGenGen.hpp" -#include "memory/space.hpp" +#include "memory/metaspaceShared.hpp" // Layout of the file: // header: dump of archive instance plus versioning info, datestamp, etc. @@ -43,6 +42,7 @@ static const int JVM_ARCH_MAX = 12; +class Metaspace; class FileMapInfo : public CHeapObj { private: @@ -71,7 +71,7 @@ size_t _used; // for setting space top on read bool _read_only; // read only space? bool _allow_exec; // executable code in space? - } _space[CompactingPermGenGen::n_regions]; + } _space[MetaspaceShared::n_regions]; // The following fields are all sanity checks for whether this archive // will function correctly with this JVM and the bootclasspath it's @@ -120,17 +120,17 @@ bool open_for_read(); void open_for_write(); void write_header(); - void write_space(int i, CompactibleSpace* space, bool read_only); + void write_space(int i, Metaspace* space, bool read_only); void write_region(int region, char* base, size_t size, size_t capacity, bool read_only, bool allow_exec); void write_bytes(const void* buffer, int count); void write_bytes_aligned(const void* buffer, int count); - bool map_space(int i, ReservedSpace rs, ContiguousSpace *space); char* map_region(int i, ReservedSpace rs); - char* map_region(int i, bool address_must_match); + char* map_region(int i); void unmap_region(int i); void close(); bool is_open() { return _file_open; } + ReservedSpace reserve_shared_memory(); // JVM/TI RedefineClasses() support: // Remap the shared readonly space to shared readwrite, private. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/freeBlockDictionary.hpp --- a/src/share/vm/memory/freeBlockDictionary.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/freeBlockDictionary.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -48,6 +48,10 @@ }; private: + // This field is added and can be set to point to the + // the Mutex used to synchronize access to the + // dictionary so that assertion checking can be done. + // For example it is set to point to _parDictionaryAllocLock. NOT_PRODUCT(Mutex* _lock;) public: diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/genCollectedHeap.cpp --- a/src/share/vm/memory/genCollectedHeap.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/genCollectedHeap.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -30,14 +30,12 @@ #include "gc_implementation/shared/collectorCounters.hpp" #include "gc_implementation/shared/vmGCOperations.hpp" #include "gc_interface/collectedHeap.inline.hpp" -#include "memory/compactPermGen.hpp" #include "memory/filemap.hpp" #include "memory/gcLocker.inline.hpp" #include "memory/genCollectedHeap.hpp" #include "memory/genOopClosures.inline.hpp" #include "memory/generation.inline.hpp" #include "memory/generationSpec.hpp" -#include "memory/permGen.hpp" #include "memory/resourceArea.hpp" #include "memory/sharedHeap.hpp" #include "memory/space.hpp" @@ -80,7 +78,6 @@ vm_exit_during_initialization("Failed necessary allocation."); } assert(policy != NULL, "Sanity check"); - _preloading_shared_classes = false; } jint GenCollectedHeap::initialize() { @@ -100,28 +97,11 @@ size_t alignment = Generation::GenGrain; _gen_specs = gen_policy()->generations(); - PermanentGenerationSpec *perm_gen_spec = - collector_policy()->permanent_generation(); // Make sure the sizes are all aligned. for (i = 0; i < _n_gens; i++) { _gen_specs[i]->align(alignment); } - perm_gen_spec->align(alignment); - - // If we are dumping the heap, then allocate a wasted block of address - // space in order to push the heap to a lower address. This extra - // address range allows for other (or larger) libraries to be loaded - // without them occupying the space required for the shared spaces. - - if (DumpSharedSpaces) { - uintx reserved = 0; - uintx block_size = 64*1024*1024; - while (reserved < SharedDummyBlockSize) { - char* dummy = os::reserve_memory(block_size); - reserved += block_size; - } - } // Allocate space for the heap. @@ -130,21 +110,9 @@ int n_covered_regions = 0; ReservedSpace heap_rs(0); - heap_address = allocate(alignment, perm_gen_spec, &total_reserved, + heap_address = allocate(alignment, &total_reserved, &n_covered_regions, &heap_rs); - if (UseSharedSpaces) { - if (!heap_rs.is_reserved() || heap_address != heap_rs.base()) { - if (heap_rs.is_reserved()) { - heap_rs.release(); - } - FileMapInfo* mapinfo = FileMapInfo::current_info(); - mapinfo->fail_continue("Unable to reserve shared region."); - allocate(alignment, perm_gen_spec, &total_reserved, &n_covered_regions, - &heap_rs); - } - } - if (!heap_rs.is_reserved()) { vm_shutdown_during_initialization( "Could not reserve enough space for object heap"); @@ -158,8 +126,7 @@ // temporarily think somethings in the heap. (Seen this happen in asserts.) _reserved.set_word_size(0); _reserved.set_start((HeapWord*)heap_rs.base()); - size_t actual_heap_size = heap_rs.size() - perm_gen_spec->misc_data_size() - - perm_gen_spec->misc_code_size(); + size_t actual_heap_size = heap_rs.size(); _reserved.set_end((HeapWord*)(heap_rs.base() + actual_heap_size)); _rem_set = collector_policy()->create_rem_set(_reserved, n_covered_regions); @@ -168,13 +135,10 @@ _gch = this; for (i = 0; i < _n_gens; i++) { - ReservedSpace this_rs = heap_rs.first_part(_gen_specs[i]->max_size(), - UseSharedSpaces, UseSharedSpaces); + ReservedSpace this_rs = heap_rs.first_part(_gen_specs[i]->max_size(), false, false); _gens[i] = _gen_specs[i]->init(this_rs, i, rem_set()); heap_rs = heap_rs.last_part(_gen_specs[i]->max_size()); } - _perm_gen = perm_gen_spec->init(heap_rs, PermSize, rem_set()); - clear_incremental_collection_failed(); #ifndef SERIALGC @@ -191,7 +155,6 @@ char* GenCollectedHeap::allocate(size_t alignment, - PermanentGenerationSpec* perm_gen_spec, size_t* _total_reserved, int* _n_covered_regions, ReservedSpace* heap_rs){ @@ -214,25 +177,10 @@ assert(total_reserved % pageSize == 0, err_msg("Gen size; total_reserved=" SIZE_FORMAT ", pageSize=" SIZE_FORMAT, total_reserved, pageSize)); - total_reserved += perm_gen_spec->max_size(); - assert(total_reserved % pageSize == 0, - err_msg("Perm size; total_reserved=" SIZE_FORMAT ", pageSize=" - SIZE_FORMAT ", perm gen max=" SIZE_FORMAT, total_reserved, - pageSize, perm_gen_spec->max_size())); - if (total_reserved < perm_gen_spec->max_size()) { - vm_exit_during_initialization(overflow_msg); - } - n_covered_regions += perm_gen_spec->n_covered_regions(); - - // Add the size of the data area which shares the same reserved area - // as the heap, but which is not actually part of the heap. - size_t s = perm_gen_spec->misc_data_size() + perm_gen_spec->misc_code_size(); - - total_reserved += s; - if (total_reserved < s) { - vm_exit_during_initialization(overflow_msg); - } + // Needed until the cardtable is fixed to have the right number + // of covered regions. + n_covered_regions += 2; if (UseLargePages) { assert(total_reserved != 0, "total_reserved cannot be 0"); @@ -242,55 +190,10 @@ } } - // Calculate the address at which the heap must reside in order for - // the shared data to be at the required address. - - char* heap_address; - if (UseSharedSpaces) { - - // Calculate the address of the first word beyond the heap. - FileMapInfo* mapinfo = FileMapInfo::current_info(); - int lr = CompactingPermGenGen::n_regions - 1; - size_t capacity = align_size_up(mapinfo->space_capacity(lr), alignment); - heap_address = mapinfo->region_base(lr) + capacity; - - // Calculate the address of the first word of the heap. - heap_address -= total_reserved; - } else { - heap_address = NULL; // any address will do. - if (UseCompressedOops) { - heap_address = Universe::preferred_heap_base(total_reserved, Universe::UnscaledNarrowOop); *_total_reserved = total_reserved; *_n_covered_regions = n_covered_regions; - *heap_rs = ReservedHeapSpace(total_reserved, alignment, - UseLargePages, heap_address); - - if (heap_address != NULL && !heap_rs->is_reserved()) { - // Failed to reserve at specified address - the requested memory - // region is taken already, for example, by 'java' launcher. - // Try again to reserver heap higher. - heap_address = Universe::preferred_heap_base(total_reserved, Universe::ZeroBasedNarrowOop); - *heap_rs = ReservedHeapSpace(total_reserved, alignment, - UseLargePages, heap_address); - - if (heap_address != NULL && !heap_rs->is_reserved()) { - // Failed to reserve at specified address again - give up. - heap_address = Universe::preferred_heap_base(total_reserved, Universe::HeapBasedNarrowOop); - assert(heap_address == NULL, ""); - *heap_rs = ReservedHeapSpace(total_reserved, alignment, - UseLargePages, heap_address); - } - } - return heap_address; - } - } - - *_total_reserved = total_reserved; - *_n_covered_regions = n_covered_regions; - *heap_rs = ReservedHeapSpace(total_reserved, alignment, - UseLargePages, heap_address); - - return heap_address; + *heap_rs = Universe::reserve_heap(total_reserved, alignment); + return heap_rs->base(); } @@ -340,16 +243,12 @@ return res; } -// Save the "used_region" for generations level and lower, -// and, if perm is true, for perm gen. -void GenCollectedHeap::save_used_regions(int level, bool perm) { +// Save the "used_region" for generations level and lower. +void GenCollectedHeap::save_used_regions(int level) { assert(level < _n_gens, "Illegal level parameter"); for (int i = level; i >= 0; i--) { _gens[i]->save_used_region(); } - if (perm) { - perm_gen()->save_used_region(); - } } size_t GenCollectedHeap::max_capacity() const { @@ -477,7 +376,7 @@ ClearedAllSoftRefs casr(do_clear_all_soft_refs, collector_policy()); - const size_t perm_prev_used = perm_gen()->used(); + const size_t metadata_prev_used = MetaspaceAux::used_in_bytes(); print_heap_before_gc(); @@ -642,9 +541,9 @@ if (PrintGCDetails) { print_heap_change(gch_prev_used); - // Print perm gen info for full GC with PrintGCDetails flag. + // Print metaspace info for full GC with PrintGCDetails flag. if (complete) { - print_perm_heap_change(perm_prev_used); + MetaspaceAux::print_metaspace_change(metadata_prev_used); } } @@ -654,8 +553,8 @@ } if (complete) { - // Ask the permanent generation to adjust size for full collections - perm()->compute_new_size(); + // Resize the metaspace capacity after full collections + MetaspaceGC::compute_new_size(); update_full_collections_completed(); } @@ -664,6 +563,11 @@ gc_epilogue(complete); + // Delete metaspaces for unloaded class loaders and clean up loader_data graph + if (complete) { + ClassLoaderDataGraph::purge(); + } + if (must_restore_marks_for_biased_locking) { BiasedLocking::restore_marks(); } @@ -692,21 +596,22 @@ gen_process_strong_roots(int level, bool younger_gens_as_roots, bool activate_scope, - bool collecting_perm_gen, + bool is_scavenging, SharedHeap::ScanningOption so, OopsInGenClosure* not_older_gens, bool do_code_roots, - OopsInGenClosure* older_gens) { + OopsInGenClosure* older_gens, + KlassClosure* klass_closure) { // General strong roots. if (!do_code_roots) { - SharedHeap::process_strong_roots(activate_scope, collecting_perm_gen, so, - not_older_gens, NULL, older_gens); + SharedHeap::process_strong_roots(activate_scope, is_scavenging, so, + not_older_gens, NULL, klass_closure); } else { bool do_code_marking = (activate_scope || nmethod::oops_do_marking_is_active()); CodeBlobToOopClosure code_roots(not_older_gens, /*do_marking=*/ do_code_marking); - SharedHeap::process_strong_roots(activate_scope, collecting_perm_gen, so, - not_older_gens, &code_roots, older_gens); + SharedHeap::process_strong_roots(activate_scope, is_scavenging, so, + not_older_gens, &code_roots, klass_closure); } if (younger_gens_as_roots) { @@ -748,7 +653,6 @@ for (int i = level+1; i < n_gens(); i++) { \ _gens[i]->oop_since_save_marks_iterate##nv_suffix(older); \ } \ - perm_gen()->oop_since_save_marks_iterate##nv_suffix(older); \ } ALL_SINCE_SAVE_MARKS_CLOSURES(GCH_SINCE_SAVE_MARKS_ITERATE_DEFN) @@ -759,7 +663,7 @@ for (int i = level; i < _n_gens; i++) { if (!_gens[i]->no_allocs_since_save_marks()) return false; } - return perm_gen()->no_allocs_since_save_marks(); + return true; } bool GenCollectedHeap::supports_inline_contig_alloc() const { @@ -811,27 +715,6 @@ collect_locked(cause, max_level); } -// This interface assumes that it's being called by the -// vm thread. It collects the heap assuming that the -// heap lock is already held and that we are executing in -// the context of the vm thread. -void GenCollectedHeap::collect_as_vm_thread(GCCause::Cause cause) { - assert(Thread::current()->is_VM_thread(), "Precondition#1"); - assert(Heap_lock->is_locked(), "Precondition#2"); - GCCauseSetter gcs(this, cause); - switch (cause) { - case GCCause::_heap_inspection: - case GCCause::_heap_dump: { - HandleMark hm; - do_full_collection(false, // don't clear all soft refs - n_gens() - 1); - break; - } - default: // XXX FIX ME - ShouldNotReachHere(); // Unexpected use of this function - } -} - void GenCollectedHeap::collect_locked(GCCause::Cause cause) { // The caller has the Heap_lock assert(Heap_lock->owned_by_self(), "this thread should own the Heap_lock"); @@ -842,9 +725,6 @@ // The Heap_lock is expected to be held on entry. void GenCollectedHeap::collect_locked(GCCause::Cause cause, int max_level) { - if (_preloading_shared_classes) { - report_out_of_shared_space(SharedPermGen); - } // Read the GC count while holding the Heap_lock unsigned int gc_count_before = total_collections(); unsigned int full_gc_count_before = total_full_collections(); @@ -860,14 +740,12 @@ bool GenCollectedHeap::create_cms_collector() { assert(((_gens[1]->kind() == Generation::ConcurrentMarkSweep) || - (_gens[1]->kind() == Generation::ASConcurrentMarkSweep)) && - _perm_gen->as_gen()->kind() == Generation::ConcurrentMarkSweep, + (_gens[1]->kind() == Generation::ASConcurrentMarkSweep)), "Unexpected generation kinds"); // Skip two header words in the block content verification NOT_PRODUCT(_skip_header_HeapWords = CMSCollector::skip_header_HeapWords();) CMSCollector* collector = new CMSCollector( (ConcurrentMarkSweepGeneration*)_gens[1], - (ConcurrentMarkSweepGeneration*)_perm_gen->as_gen(), _rem_set->as_CardTableRS(), (ConcurrentMarkSweepPolicy*) collector_policy()); @@ -896,6 +774,9 @@ } #endif // SERIALGC +void GenCollectedHeap::do_full_collection(bool clear_all_soft_refs) { + do_full_collection(clear_all_soft_refs, _n_gens - 1); +} void GenCollectedHeap::do_full_collection(bool clear_all_soft_refs, int max_level) { @@ -954,7 +835,6 @@ for (int i = 0; i < _n_gens; i++) { if (_gens[i]->is_in(p)) return true; } - if (_perm_gen->as_gen()->is_in(p)) return true; // Otherwise... return false; } @@ -965,18 +845,17 @@ bool GenCollectedHeap::is_in_partial_collection(const void* p) { assert(is_in_reserved(p) || p == NULL, "Does not work if address is non-null and outside of the heap"); - // The order of the generations is young (low addr), old, perm (high addr) return p < _gens[_n_gens - 2]->reserved().end() && p != NULL; } #endif -void GenCollectedHeap::oop_iterate(OopClosure* cl) { +void GenCollectedHeap::oop_iterate(ExtendedOopClosure* cl) { for (int i = 0; i < _n_gens; i++) { _gens[i]->oop_iterate(cl); } } -void GenCollectedHeap::oop_iterate(MemRegion mr, OopClosure* cl) { +void GenCollectedHeap::oop_iterate(MemRegion mr, ExtendedOopClosure* cl) { for (int i = 0; i < _n_gens; i++) { _gens[i]->oop_iterate(mr, cl); } @@ -986,14 +865,12 @@ for (int i = 0; i < _n_gens; i++) { _gens[i]->object_iterate(cl); } - perm_gen()->object_iterate(cl); } void GenCollectedHeap::safe_object_iterate(ObjectClosure* cl) { for (int i = 0; i < _n_gens; i++) { _gens[i]->safe_object_iterate(cl); } - perm_gen()->safe_object_iterate(cl); } void GenCollectedHeap::object_iterate_since_last_GC(ObjectClosure* cl) { @@ -1007,8 +884,6 @@ Space* res = _gens[i]->space_containing(addr); if (res != NULL) return res; } - Space* res = perm_gen()->space_containing(addr); - if (res != NULL) return res; // Otherwise... assert(false, "Could not find containing space"); return NULL; @@ -1024,11 +899,6 @@ return _gens[i]->block_start(addr); } } - if (perm_gen()->is_in_reserved(addr)) { - assert(perm_gen()->is_in(addr), - "addr should be in allocated part of perm gen"); - return perm_gen()->block_start(addr); - } assert(false, "Some generation should contain the address"); return NULL; } @@ -1042,11 +912,6 @@ return _gens[i]->block_size(addr); } } - if (perm_gen()->is_in_reserved(addr)) { - assert(perm_gen()->is_in(addr), - "addr should be in allocated part of perm gen"); - return perm_gen()->block_size(addr); - } assert(false, "Some generation should contain the address"); return 0; } @@ -1059,9 +924,6 @@ return _gens[i]->block_is_obj(addr); } } - if (perm_gen()->is_in_reserved(addr)) { - return perm_gen()->block_is_obj(addr); - } assert(false, "Some generation should contain the address"); return false; } @@ -1164,7 +1026,6 @@ ensure_parsability(false); // no need to retire TLABs GenPrepareForVerifyClosure blk; generation_iterate(&blk, false); - perm_gen()->prepare_for_verify(); } @@ -1185,11 +1046,10 @@ for (int i = 0; i < _n_gens; i++) { _gens[i]->space_iterate(cl, true); } - perm_gen()->space_iterate(cl, true); } bool GenCollectedHeap::is_maximal_no_gc() const { - for (int i = 0; i < _n_gens; i++) { // skip perm gen + for (int i = 0; i < _n_gens; i++) { if (!_gens[i]->is_maximal_no_gc()) { return false; } @@ -1201,7 +1061,6 @@ for (int i = 0; i < _n_gens; i++) { _gens[i]->save_marks(); } - perm_gen()->save_marks(); } void GenCollectedHeap::compute_new_generation_sizes(int collectedGen) { @@ -1232,10 +1091,6 @@ } void GenCollectedHeap::verify(bool silent, VerifyOption option /* ignored */) { - if (!silent) { - gclog_or_tty->print("permgen "); - } - perm_gen()->verify(); for (int i = _n_gens-1; i >= 0; i--) { Generation* g = _gens[i]; if (!silent) { @@ -1254,7 +1109,7 @@ for (int i = 0; i < _n_gens; i++) { _gens[i]->print_on(st); } - perm_gen()->print_on(st); + MetaspaceAux::print_on(st); } void GenCollectedHeap::gc_threads_do(ThreadClosure* tc) const { @@ -1302,13 +1157,6 @@ } } -//New method to print perm gen info with PrintGCDetails flag -void GenCollectedHeap::print_perm_heap_change(size_t perm_prev_used) const { - gclog_or_tty->print(", [%s :", perm_gen()->short_name()); - perm_gen()->print_heap_change(perm_prev_used); - gclog_or_tty->print("]"); -} - class GenGCPrologueClosure: public GenCollectedHeap::GenClosure { private: bool _full; @@ -1332,7 +1180,6 @@ // Walk generations GenGCPrologueClosure blk(full); generation_iterate(&blk, false); // not old-to-young. - perm_gen()->gc_prologue(full); }; class GenGCEpilogueClosure: public GenCollectedHeap::GenClosure { @@ -1356,12 +1203,13 @@ GenGCEpilogueClosure blk(full); generation_iterate(&blk, false); // not old-to-young. - perm_gen()->gc_epilogue(full); if (!CleanChunkPoolAsync) { Chunk::clean_chunk_pool(); } + MetaspaceCounters::update_performance_counters(); + always_do_update_barrier = UseConcMarkSweepGC; }; @@ -1378,7 +1226,6 @@ if (ZapUnusedHeapArea) { GenGCSaveTopsBeforeGCClosure blk; generation_iterate(&blk, false); // not old-to-young. - perm_gen()->record_spaces_top(); } } #endif // not PRODUCT @@ -1394,7 +1241,6 @@ CollectedHeap::ensure_parsability(retire_tlabs); GenEnsureParsabilityClosure ep_cl; generation_iterate(&ep_cl, false); - perm_gen()->ensure_parsability(); } oop GenCollectedHeap::handle_failed_promotion(Generation* gen, @@ -1447,7 +1293,6 @@ // iterate over generations getting the oldest // time that a generation was collected generation_iterate(&tolgc_cl, false); - tolgc_cl.do_generation(perm_gen()); // javaTimeNanos() is guaranteed to be monotonically non-decreasing // provided the underlying platform provides such a time source diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/genCollectedHeap.hpp --- a/src/share/vm/memory/genCollectedHeap.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/genCollectedHeap.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -43,7 +43,6 @@ friend class CMSCollector; friend class GenMarkSweep; friend class VM_GenCollectForAllocation; - friend class VM_GenCollectForPermanentAllocation; friend class VM_GenCollectFull; friend class VM_GenCollectFullConcurrent; friend class VM_GC_HeapInspection; @@ -86,10 +85,6 @@ // In block contents verification, the number of header words to skip NOT_PRODUCT(static size_t _skip_header_HeapWords;) - // GC is not allowed during the dump of the shared classes. Keep track - // of this in order to provide an reasonable error message when terminating. - bool _preloading_shared_classes; - protected: // Directs each generation up to and including "collectedGen" to recompute // its desired size. @@ -116,6 +111,7 @@ // Callback from VM_GenCollectFull operation. // Perform a full collection of the first max_level+1 generations. + virtual void do_full_collection(bool clear_all_soft_refs); void do_full_collection(bool clear_all_soft_refs, int max_level); // Does the "cause" of GC indicate that @@ -129,7 +125,7 @@ // Returns JNI_OK on success virtual jint initialize(); - char* allocate(size_t alignment, PermanentGenerationSpec* perm_gen_spec, + char* allocate(size_t alignment, size_t* _total_reserved, int* _n_covered_regions, ReservedSpace* heap_rs); @@ -145,6 +141,7 @@ // The generational collector policy. GenCollectorPolicy* gen_policy() const { return _gen_policy; } + virtual CollectorPolicy* collector_policy() const { return (CollectorPolicy*) gen_policy(); } // Adaptive size policy virtual AdaptiveSizePolicy* size_policy() { @@ -154,9 +151,8 @@ size_t capacity() const; size_t used() const; - // Save the "used_region" for generations level and lower, - // and, if perm is true, for perm gen. - void save_used_regions(int level, bool perm); + // Save the "used_region" for generations level and lower. + void save_used_regions(int level); size_t max_capacity() const; @@ -185,12 +181,6 @@ // supports. Caller does not hold the Heap_lock on entry. void collect(GCCause::Cause cause); - // This interface assumes that it's being called by the - // vm thread. It collects the heap assuming that the - // heap lock is already held and that we are executing in - // the context of the vm thread. - void collect_as_vm_thread(GCCause::Cause cause); - // The same as above but assume that the caller holds the Heap_lock. void collect_locked(GCCause::Cause cause); @@ -228,8 +218,8 @@ } // Iteration functions. - void oop_iterate(OopClosure* cl); - void oop_iterate(MemRegion mr, OopClosure* cl); + void oop_iterate(ExtendedOopClosure* cl); + void oop_iterate(MemRegion mr, ExtendedOopClosure* cl); void object_iterate(ObjectClosure* cl); void safe_object_iterate(ObjectClosure* cl); void object_iterate_since_last_GC(ObjectClosure* cl); @@ -294,14 +284,6 @@ return is_in_young(new_obj); } - // Can a compiler elide a store barrier when it writes - // a permanent oop into the heap? Applies when the compiler - // is storing x to the heap, where x->is_perm() is true. - virtual bool can_elide_permanent_oop_store_barriers() const { - // CMS needs to see all, even intra-generational, ref updates. - return !UseConcMarkSweepGC; - } - // The "requestor" generation is performing some garbage collection // action for which it would be useful to have scratch space. The // requestor promises to allocate no more than "max_alloc_words" in any @@ -338,7 +320,6 @@ for (int i = 0; i < _n_gens; i++) { _gens[i]->update_time_of_last_gc(now); } - perm_gen()->update_time_of_last_gc(now); } // Update the gc statistics for each generation. @@ -347,7 +328,6 @@ for (int i = 0; i < _n_gens; i++) { _gens[i]->update_gc_stats(current_level, full); } - perm_gen()->update_gc_stats(current_level, full); } // Override. @@ -367,7 +347,6 @@ // PrintGC, PrintGCDetails support void print_heap_change(size_t prev_used) const; - void print_perm_heap_change(size_t perm_prev_used) const; // The functions below are helper functions that a subclass of // "CollectedHeap" can use in the implementation of its virtual @@ -378,13 +357,13 @@ virtual void do_generation(Generation* gen) = 0; }; - // Apply "cl.do_generation" to all generations in the heap (not including - // the permanent generation). If "old_to_young" determines the order. + // Apply "cl.do_generation" to all generations in the heap + // If "old_to_young" determines the order. void generation_iterate(GenClosure* cl, bool old_to_young); void space_iterate(SpaceClosure* cl); - // Return "true" if all generations (but perm) have reached the + // Return "true" if all generations have reached the // maximal committed limit that they can reach, without a garbage // collection. virtual bool is_maximal_no_gc() const; @@ -429,10 +408,8 @@ // not scanned as roots; in this case, the caller must be arranging to // scan the younger generations itself. (For example, a generation might // explicitly mark reachable objects in younger generations, to avoid - // excess storage retention.) If "collecting_perm_gen" is false, then - // roots that may only contain references to permGen objects are not - // scanned; instead, the older_gens closure is applied to all outgoing - // references in the perm gen. The "so" argument determines which of the roots + // excess storage retention.) + // The "so" argument determines which of the roots // the closure is applied to: // "SO_None" does none; // "SO_AllClasses" applies the closure to all entries in the SystemDictionary; @@ -443,11 +420,12 @@ // The remaining arguments are in an order // consistent with SharedHeap::process_strong_roots: bool activate_scope, - bool collecting_perm_gen, + bool is_scavenging, SharedHeap::ScanningOption so, OopsInGenClosure* not_older_gens, bool do_code_roots, - OopsInGenClosure* older_gens); + OopsInGenClosure* older_gens, + KlassClosure* klass_closure); // Apply "blk" to all the weak roots of the system. These include // JNI weak roots, the code cache, system dictionary, symbol table, @@ -463,9 +441,9 @@ // Apply "cur->do_oop" or "older->do_oop" to all the oops in objects // allocated since the last call to save_marks in generations at or above - // "level" (including the permanent generation.) The "cur" closure is + // "level". The "cur" closure is // applied to references in the generation at "level", and the "older" - // closure to older (and permanent) generations. + // closure to older generations. #define GCH_SINCE_SAVE_MARKS_ITERATE_DECL(OopClosureType, nv_suffix) \ void oop_since_save_marks_iterate(int level, \ OopClosureType* cur, \ @@ -476,7 +454,7 @@ #undef GCH_SINCE_SAVE_MARKS_ITERATE_DECL // Returns "true" iff no allocations have occurred in any generation at - // "level" or above (including the permanent generation) since the last + // "level" or above since the last // call to "save_marks". bool no_allocs_since_save_marks(int level); @@ -506,7 +484,7 @@ _incremental_collection_failed = false; } - // Promotion of obj into gen failed. Try to promote obj to higher non-perm + // Promotion of obj into gen failed. Try to promote obj to higher // gens in ascending order; return the new location of obj if successful. // Otherwise, try expand-and-allocate for obj in each generation starting at // gen; return the new location of obj if successful. Otherwise, return NULL. @@ -547,9 +525,6 @@ protected: virtual void gc_prologue(bool full); virtual void gc_epilogue(bool full); - -public: - virtual void preload_and_dump(TRAPS) KERNEL_RETURN; }; #endif // SHARE_VM_MEMORY_GENCOLLECTEDHEAP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/genMarkSweep.cpp --- a/src/share/vm/memory/genMarkSweep.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/genMarkSweep.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -78,14 +78,13 @@ TraceTime t1(GCCauseString("Full GC", gch->gc_cause()), PrintGC && !PrintGCDetails, true, gclog_or_tty); - // When collecting the permanent generation methodOops may be moving, + // When collecting the permanent generation Method*s may be moving, // so we either have to flush all bcp data or convert it into bci. CodeCache::gc_prologue(); Threads::gc_prologue(); - // Increment the invocation count for the permanent generation, since it is - // implicitly collected whenever we do a full mark sweep collection. - gch->perm_gen()->stat_record()->invocations++; + // Increment the invocation count + _total_invocations++; // Capture heap size before collection for printing. size_t gch_prev_used = gch->used(); @@ -98,7 +97,7 @@ // Capture used regions for each generation that will be // subject to collection, so that card table adjustments can // be made intelligently (see clear / invalidate further below). - gch->save_used_regions(level, true /* perm */); + gch->save_used_regions(level); allocate_stacks(); @@ -149,14 +148,13 @@ if (all_empty) { // We've evacuated all generations below us. Generation* g = gch->get_gen(level); - rs->clear_into_younger(g, true /* perm */); + rs->clear_into_younger(g); } else { // Invalidate the cards corresponding to the currently used // region and clear those corresponding to the evacuated region // of all generations just collected (i.e. level and younger). rs->invalidate_or_clear(gch->get_gen(level), - true /* younger */, - true /* perm */); + true /* younger */); } Threads::gc_epilogue(); @@ -238,8 +236,6 @@ _preserved_oop_stack.clear(true); _marking_stack.clear(); _objarray_stack.clear(true); - _revisit_klass_stack.clear(true); - _revisit_mdo_stack.clear(true); #ifdef VALIDATE_MARK_SWEEP if (ValidateMarkSweep) { @@ -261,7 +257,7 @@ TraceTime tm("phase 1", PrintGC && Verbose, true, gclog_or_tty); trace(" 1"); - VALIDATE_MARK_SWEEP_ONLY(reset_live_oop_tracking(false)); + VALIDATE_MARK_SWEEP_ONLY(reset_live_oop_tracking()); GenCollectedHeap* gch = GenCollectedHeap::heap(); @@ -271,14 +267,18 @@ // are run. follow_root_closure.set_orig_generation(gch->get_gen(level)); + // Need new claim bits before marking starts. + ClassLoaderDataGraph::clear_claimed_marks(); + gch->gen_process_strong_roots(level, false, // Younger gens are not roots. true, // activate StrongRootsScope - true, // Collecting permanent generation. + false, // not scavenging SharedHeap::SO_SystemClasses, &follow_root_closure, true, // walk code active on stacks - &follow_root_closure); + &follow_root_closure, + &follow_klass_closure); // Process reference objects found during marking { @@ -295,11 +295,7 @@ follow_stack(); // Flush marking stack // Update subklass/sibling/implementor links of live klasses - follow_weak_klass_links(); - assert(_marking_stack.is_empty(), "just drained"); - - // Visit memoized MDO's and clear any unmarked weak refs - follow_mdo_weak_refs(); + Klass::clean_weak_klass_links(&is_alive); assert(_marking_stack.is_empty(), "just drained"); // Visit interned string tables and delete unmarked oops @@ -316,28 +312,23 @@ // It is imperative that we traverse perm_gen LAST. If dead space is // allowed a range of dead object may get overwritten by a dead int - // array. If perm_gen is not traversed last a klassOop may get + // array. If perm_gen is not traversed last a Klass* may get // overwritten. This is fine since it is dead, but if the class has dead // instances we have to skip them, and in order to find their size we - // need the klassOop! + // need the Klass*! // // It is not required that we traverse spaces in the same order in // phase2, phase3 and phase4, but the ValidateMarkSweep live oops // tracking expects us to do so. See comment under phase4. GenCollectedHeap* gch = GenCollectedHeap::heap(); - Generation* pg = gch->perm_gen(); TraceTime tm("phase 2", PrintGC && Verbose, true, gclog_or_tty); trace("2"); - VALIDATE_MARK_SWEEP_ONLY(reset_live_oop_tracking(false)); + VALIDATE_MARK_SWEEP_ONLY(reset_live_oop_tracking()); gch->prepare_for_compaction(); - - VALIDATE_MARK_SWEEP_ONLY(_live_oops_index_at_perm = _live_oops_index); - CompactPoint perm_cp(pg, NULL, NULL); - pg->prepare_for_compaction(&perm_cp); } class GenAdjustPointersClosure: public GenCollectedHeap::GenClosure { @@ -349,16 +340,15 @@ void GenMarkSweep::mark_sweep_phase3(int level) { GenCollectedHeap* gch = GenCollectedHeap::heap(); - Generation* pg = gch->perm_gen(); // Adjust the pointers to reflect the new locations TraceTime tm("phase 3", PrintGC && Verbose, true, gclog_or_tty); trace("3"); - VALIDATE_MARK_SWEEP_ONLY(reset_live_oop_tracking(false)); + // Need new claim bits for the pointer adjustment tracing. + ClassLoaderDataGraph::clear_claimed_marks(); - // Needs to be done before the system dictionary is adjusted. - pg->pre_adjust_pointers(); + VALIDATE_MARK_SWEEP_ONLY(reset_live_oop_tracking()); // Because the two closures below are created statically, cannot // use OopsInGenClosure constructor which takes a generation, @@ -370,11 +360,12 @@ gch->gen_process_strong_roots(level, false, // Younger gens are not roots. true, // activate StrongRootsScope - true, // Collecting permanent generation. + false, // not scavenging SharedHeap::SO_AllClasses, &adjust_root_pointer_closure, false, // do not walk code - &adjust_root_pointer_closure); + &adjust_root_pointer_closure, + &adjust_klass_closure); // Now adjust pointers in remaining weak roots. (All of which should // have been cleared if they pointed to non-surviving objects.) @@ -387,7 +378,6 @@ adjust_marks(); GenAdjustPointersClosure blk; gch->generation_iterate(&blk, true); - pg->adjust_pointers(); } class GenCompactClosure: public GenCollectedHeap::GenClosure { @@ -402,7 +392,7 @@ // It is imperative that we traverse perm_gen first in phase4. All // classes must be allocated earlier than their instances, and traversing - // perm_gen first makes sure that all klassOops have moved to their new + // perm_gen first makes sure that all Klass*s have moved to their new // location before any instance does a dispatch through it's klass! // The ValidateMarkSweep live oops tracking expects us to traverse spaces @@ -410,21 +400,14 @@ // here (perm_gen first rather than last), so we tell the validate code // to use a higher index (saved from phase2) when verifying perm_gen. GenCollectedHeap* gch = GenCollectedHeap::heap(); - Generation* pg = gch->perm_gen(); TraceTime tm("phase 4", PrintGC && Verbose, true, gclog_or_tty); trace("4"); - VALIDATE_MARK_SWEEP_ONLY(reset_live_oop_tracking(true)); - - pg->compact(); - - VALIDATE_MARK_SWEEP_ONLY(reset_live_oop_tracking(false)); + VALIDATE_MARK_SWEEP_ONLY(reset_live_oop_tracking()); GenCompactClosure blk; gch->generation_iterate(&blk, true); VALIDATE_MARK_SWEEP_ONLY(compaction_complete()); - - pg->post_compact(); // Shared spaces verification. } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/genOopClosures.hpp --- a/src/share/vm/memory/genOopClosures.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/genOopClosures.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,6 +33,7 @@ class CardTableRS; class CardTableModRefBS; class DefNewGeneration; +class KlassRemSet; template class GenericTaskQueue; typedef GenericTaskQueue OopTaskQueue; @@ -44,7 +45,7 @@ // method at the end of their own do_oop method! // Note: no do_oop defined, this is an abstract class. -class OopsInGenClosure : public OopClosure { +class OopsInGenClosure : public ExtendedOopClosure { private: Generation* _orig_gen; // generation originally set in ctor Generation* _gen; // generation being scanned @@ -66,7 +67,7 @@ template void par_do_barrier(T* p); public: - OopsInGenClosure() : OopClosure(NULL), + OopsInGenClosure() : ExtendedOopClosure(NULL), _orig_gen(NULL), _gen(NULL), _gen_boundary(NULL), _rs(NULL) {}; OopsInGenClosure(Generation* gen); @@ -82,13 +83,27 @@ } HeapWord* gen_boundary() { return _gen_boundary; } + +}; + +// Super class for scan closures. It contains code to dirty scanned Klasses. +class OopsInKlassOrGenClosure: public OopsInGenClosure { + Klass* _scanned_klass; + public: + OopsInKlassOrGenClosure(Generation* g) : OopsInGenClosure(g), _scanned_klass(NULL) {} + void set_scanned_klass(Klass* k) { + assert(k == NULL || _scanned_klass == NULL, "Must be"); + _scanned_klass = k; + } + bool is_scanning_a_klass() { return _scanned_klass != NULL; } + void do_klass_barrier(); }; // Closure for scanning DefNewGeneration. // // This closure will perform barrier store calls for ALL // pointers in scanned oops. -class ScanClosure: public OopsInGenClosure { +class ScanClosure: public OopsInKlassOrGenClosure { protected: DefNewGeneration* _g; HeapWord* _boundary; @@ -100,7 +115,6 @@ virtual void do_oop(narrowOop* p); inline void do_oop_nv(oop* p); inline void do_oop_nv(narrowOop* p); - bool do_header() { return false; } Prefetch::style prefetch_style() { return Prefetch::do_write; } @@ -111,7 +125,7 @@ // This closure only performs barrier store calls on // pointers into the DefNewGeneration. This is less // precise, but faster, than a ScanClosure -class FastScanClosure: public OopsInGenClosure { +class FastScanClosure: public OopsInKlassOrGenClosure { protected: DefNewGeneration* _g; HeapWord* _boundary; @@ -123,16 +137,25 @@ virtual void do_oop(narrowOop* p); inline void do_oop_nv(oop* p); inline void do_oop_nv(narrowOop* p); - bool do_header() { return false; } Prefetch::style prefetch_style() { return Prefetch::do_write; } }; -class FilteringClosure: public OopClosure { +class KlassScanClosure: public KlassClosure { + OopsInKlassOrGenClosure* _scavenge_closure; + // true if the the modified oops state should be saved. + bool _accumulate_modified_oops; + public: + KlassScanClosure(OopsInKlassOrGenClosure* scavenge_closure, + KlassRemSet* klass_rem_set_policy); + void do_klass(Klass* k); +}; + +class FilteringClosure: public ExtendedOopClosure { private: HeapWord* _boundary; - OopClosure* _cl; + ExtendedOopClosure* _cl; protected: template inline void do_oop_work(T* p) { T heap_oop = oopDesc::load_heap_oop(p); @@ -144,14 +167,15 @@ } } public: - FilteringClosure(HeapWord* boundary, OopClosure* cl) : - OopClosure(cl->_ref_processor), _boundary(boundary), + FilteringClosure(HeapWord* boundary, ExtendedOopClosure* cl) : + ExtendedOopClosure(cl->_ref_processor), _boundary(boundary), _cl(cl) {} virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); inline void do_oop_nv(oop* p) { FilteringClosure::do_oop_work(p); } inline void do_oop_nv(narrowOop* p) { FilteringClosure::do_oop_work(p); } - bool do_header() { return false; } + virtual bool do_metadata() { return do_metadata_nv(); } + inline bool do_metadata_nv() { assert(!_cl->do_metadata(), "assumption broken, must change to 'return _cl->do_metadata()'"); return false; } }; // Closure for scanning DefNewGeneration's weak references. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/genOopClosures.inline.hpp --- a/src/share/vm/memory/genOopClosures.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/genOopClosures.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ #include "memory/space.hpp" inline OopsInGenClosure::OopsInGenClosure(Generation* gen) : - OopClosure(gen->ref_processor()), _orig_gen(gen), _rs(NULL) { + ExtendedOopClosure(gen->ref_processor()), _orig_gen(gen), _rs(NULL) { set_generation(gen); } @@ -72,6 +72,11 @@ } } +inline void OopsInKlassOrGenClosure::do_klass_barrier() { + assert(_scanned_klass != NULL, "Must be"); + _scanned_klass->record_modified_oops(); +} + // NOTE! Any changes made here should also be made // in FastScanClosure::do_oop_work() template inline void ScanClosure::do_oop_work(T* p) { @@ -85,7 +90,10 @@ : _g->copy_to_survivor_space(obj); oopDesc::encode_store_heap_oop_not_null(p, new_obj); } - if (_gc_barrier) { + + if (is_scanning_a_klass()) { + do_klass_barrier(); + } else if (_gc_barrier) { // Now call parent closure do_barrier(p); } @@ -107,7 +115,9 @@ oop new_obj = obj->is_forwarded() ? obj->forwardee() : _g->copy_to_survivor_space(obj); oopDesc::encode_store_heap_oop_not_null(p, new_obj); - if (_gc_barrier) { + if (is_scanning_a_klass()) { + do_klass_barrier(); + } else if (_gc_barrier) { // Now call parent closure do_barrier(p); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/genRemSet.cpp --- a/src/share/vm/memory/genRemSet.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/genRemSet.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/classLoaderData.hpp" #include "memory/cardTableRS.hpp" #include "memory/genRemSet.hpp" @@ -39,3 +40,43 @@ return (0); // Make Windows compiler happy } } + +class HasAccumulatedModifiedOopsClosure : public KlassClosure { + bool _found; + public: + HasAccumulatedModifiedOopsClosure() : _found(false) {} + void do_klass(Klass* klass) { + if (_found) { + return; + } + + if (klass->has_accumulated_modified_oops()) { + _found = true; + } + } + bool found() { + return _found; + } +}; + +bool KlassRemSet::mod_union_is_clear() { + HasAccumulatedModifiedOopsClosure closure; + ClassLoaderDataGraph::classes_do(&closure); + + return !closure.found(); +} + + +class ClearKlassModUnionClosure : public KlassClosure { + public: + void do_klass(Klass* klass) { + if (klass->has_accumulated_modified_oops()) { + klass->clear_accumulated_modified_oops(); + } + } +}; + +void KlassRemSet::clear_mod_union() { + ClearKlassModUnionClosure closure; + ClassLoaderDataGraph::classes_do(&closure); +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/genRemSet.hpp --- a/src/share/vm/memory/genRemSet.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/genRemSet.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,10 +35,22 @@ class OopsInGenClosure; class CardTableRS; +// Helper to remember modified oops in all klasses. +class KlassRemSet { + bool _accumulate_modified_oops; + public: + KlassRemSet() : _accumulate_modified_oops(false) {} + void set_accumulate_modified_oops(bool value) { _accumulate_modified_oops = value; } + bool accumulate_modified_oops() { return _accumulate_modified_oops; } + bool mod_union_is_clear(); + void clear_mod_union(); +}; + class GenRemSet: public CHeapObj { friend class Generation; BarrierSet* _bs; + KlassRemSet _klass_rem_set; public: enum Name { @@ -62,6 +74,8 @@ // Set the barrier set. void set_bs(BarrierSet* bs) { _bs = bs; } + KlassRemSet* klass_rem_set() { return &_klass_rem_set; } + // Do any (sequential) processing necessary to prepare for (possibly // "parallel", if that arg is true) calls to younger_refs_iterate. virtual void prepare_for_younger_refs_iterate(bool parallel) = 0; @@ -121,7 +135,7 @@ // younger than gen from generations gen and older. // The parameter clear_perm indicates if the perm_gen's // remembered set should also be processed/cleared. - virtual void clear_into_younger(Generation* gen, bool clear_perm) = 0; + virtual void clear_into_younger(Generation* gen) = 0; // Informs the RS that refs in the given "mr" may have changed // arbitrarily, and therefore may contain old-to-young pointers. @@ -136,7 +150,7 @@ // younger indicates if the same should be done for younger generations // as well. The parameter perm indicates if the same should be done for // perm gen as well. - virtual void invalidate_or_clear(Generation* gen, bool younger, bool perm) = 0; + virtual void invalidate_or_clear(Generation* gen, bool younger) = 0; }; #endif // SHARE_VM_MEMORY_GENREMSET_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/generation.cpp --- a/src/share/vm/memory/generation.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/generation.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -293,21 +293,21 @@ class GenerationOopIterateClosure : public SpaceClosure { public: - OopClosure* cl; + ExtendedOopClosure* cl; MemRegion mr; virtual void do_space(Space* s) { s->oop_iterate(mr, cl); } - GenerationOopIterateClosure(OopClosure* _cl, MemRegion _mr) : + GenerationOopIterateClosure(ExtendedOopClosure* _cl, MemRegion _mr) : cl(_cl), mr(_mr) {} }; -void Generation::oop_iterate(OopClosure* cl) { +void Generation::oop_iterate(ExtendedOopClosure* cl) { GenerationOopIterateClosure blk(cl, _reserved); space_iterate(&blk); } -void Generation::oop_iterate(MemRegion mr, OopClosure* cl) { +void Generation::oop_iterate(MemRegion mr, ExtendedOopClosure* cl) { GenerationOopIterateClosure blk(cl, mr); space_iterate(&blk); } @@ -435,7 +435,7 @@ success = grow_to_reserved(); } if (PrintGC && Verbose) { - if (success && GC_locker::is_active()) { + if (success && GC_locker::is_active_and_needs_gc()) { gclog_or_tty->print_cr("Garbage collection disabled, expanded heap instead"); } } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/generation.hpp --- a/src/share/vm/memory/generation.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/generation.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -48,18 +48,17 @@ // - OneContigSpaceCardGeneration - abstract class holding a single // contiguous space with card marking // - TenuredGeneration - tenured (old object) space (markSweepCompact) -// - CompactingPermGenGen - reflective object area (klasses, methods, symbols, ...) // - ConcurrentMarkSweepGeneration - Mostly Concurrent Mark Sweep Generation // (Detlefs-Printezis refinement of // Boehm-Demers-Schenker) // // The system configurations currently allowed are: // -// DefNewGeneration + TenuredGeneration + PermGeneration -// DefNewGeneration + ConcurrentMarkSweepGeneration + ConcurrentMarkSweepPermGen +// DefNewGeneration + TenuredGeneration +// DefNewGeneration + ConcurrentMarkSweepGeneration // -// ParNewGeneration + TenuredGeneration + PermGeneration -// ParNewGeneration + ConcurrentMarkSweepGeneration + ConcurrentMarkSweepPermGen +// ParNewGeneration + TenuredGeneration +// ParNewGeneration + ConcurrentMarkSweepGeneration // class DefNewGeneration; @@ -442,7 +441,6 @@ // Mark sweep support phase2 virtual void prepare_for_compaction(CompactPoint* cp); // Mark sweep support phase3 - virtual void pre_adjust_pointers() {ShouldNotReachHere();} virtual void adjust_pointers(); // Mark sweep support phase4 virtual void compact(); @@ -538,11 +536,11 @@ // Iterate over all the ref-containing fields of all objects in the // generation, calling "cl.do_oop" on each. - virtual void oop_iterate(OopClosure* cl); + virtual void oop_iterate(ExtendedOopClosure* cl); // Same as above, restricted to the intersection of a memory region and // the generation. - virtual void oop_iterate(MemRegion mr, OopClosure* cl); + virtual void oop_iterate(MemRegion mr, ExtendedOopClosure* cl); // Iterate over all objects in the generation, calling "cl.do_object" on // each. @@ -666,7 +664,6 @@ class OneContigSpaceCardGeneration: public CardGeneration { friend class VMStructs; // Abstractly, this is a subtype that gets access to protected fields. - friend class CompactingPermGen; friend class VM_PopulateDumpSharedSpace; protected: diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/generationSpec.cpp --- a/src/share/vm/memory/generationSpec.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/generationSpec.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ */ #include "precompiled.hpp" -#include "memory/compactPermGen.hpp" +#include "memory/binaryTreeDictionary.hpp" #include "memory/defNewGeneration.hpp" #include "memory/filemap.hpp" #include "memory/genRemSet.hpp" @@ -31,8 +31,8 @@ #include "memory/tenuredGeneration.hpp" #include "runtime/java.hpp" #ifndef SERIALGC -#include "gc_implementation/concurrentMarkSweep/cmsPermGen.hpp" #include "gc_implementation/parNew/asParNewGeneration.hpp" +#include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" #include "gc_implementation/parNew/parNewGeneration.hpp" #endif @@ -101,99 +101,3 @@ return NULL; } } - - -PermanentGenerationSpec::PermanentGenerationSpec(PermGen::Name name, - size_t init_size, size_t max_size, - size_t read_only_size, size_t read_write_size, - size_t misc_data_size, size_t misc_code_size) { - _name = name; - _init_size = init_size; - - if (UseSharedSpaces || DumpSharedSpaces) { - _enable_shared_spaces = true; - if (UseSharedSpaces) { - // Override shared space sizes from those in the file. - FileMapInfo* mapinfo = FileMapInfo::current_info(); - _read_only_size = mapinfo->space_capacity(CompactingPermGenGen::ro); - _read_write_size = mapinfo->space_capacity(CompactingPermGenGen::rw); - _misc_data_size = mapinfo->space_capacity(CompactingPermGenGen::md); - _misc_code_size = mapinfo->space_capacity(CompactingPermGenGen::mc); - } else { - _read_only_size = read_only_size; - _read_write_size = read_write_size; - _misc_data_size = misc_data_size; - _misc_code_size = misc_code_size; - } - } else { - _enable_shared_spaces = false; - _read_only_size = 0; - _read_write_size = 0; - _misc_data_size = 0; - _misc_code_size = 0; - } - - _max_size = max_size; -} - - -PermGen* PermanentGenerationSpec::init(ReservedSpace rs, - size_t init_size, - GenRemSet *remset) { - - // Break the reserved spaces into pieces for the permanent space - // and the shared spaces. - ReservedSpace perm_rs = rs.first_part(_max_size, UseSharedSpaces, - UseSharedSpaces); - ReservedSpace shared_rs = rs.last_part(_max_size); - - if (enable_shared_spaces()) { - if (!perm_rs.is_reserved() || - perm_rs.base() + perm_rs.size() != shared_rs.base()) { - FileMapInfo* mapinfo = FileMapInfo::current_info(); - mapinfo->fail_continue("Sharing disabled - unable to " - "reserve address space."); - shared_rs.release(); - disable_sharing(); - } - } - - switch (name()) { - case PermGen::MarkSweepCompact: - return new CompactingPermGen(perm_rs, shared_rs, init_size, remset, this); - -#ifndef SERIALGC - case PermGen::MarkSweep: - guarantee(false, "NYI"); - return NULL; - - case PermGen::ConcurrentMarkSweep: { - assert(UseConcMarkSweepGC, "UseConcMarkSweepGC should be set"); - CardTableRS* ctrs = remset->as_CardTableRS(); - if (ctrs == NULL) { - vm_exit_during_initialization("RemSet/generation incompatibility."); - } - // XXXPERM - return new CMSPermGen(perm_rs, init_size, ctrs, - (FreeBlockDictionary::DictionaryChoice)CMSDictionaryChoice); - } -#endif // SERIALGC - default: - guarantee(false, "unrecognized GenerationName"); - return NULL; - } -} - - -// Alignment -void PermanentGenerationSpec::align(size_t alignment) { - _init_size = align_size_up(_init_size, alignment); - _max_size = align_size_up(_max_size, alignment); - _read_only_size = align_size_up(_read_only_size, alignment); - _read_write_size = align_size_up(_read_write_size, alignment); - _misc_data_size = align_size_up(_misc_data_size, alignment); - _misc_code_size = align_size_up(_misc_code_size, alignment); - - assert(enable_shared_spaces() || (_read_only_size + _read_write_size == 0), - "Shared space when disabled?"); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/generationSpec.hpp --- a/src/share/vm/memory/generationSpec.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/generationSpec.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,6 @@ #define SHARE_VM_MEMORY_GENERATIONSPEC_HPP #include "memory/generation.hpp" -#include "memory/permGen.hpp" // The specification of a generation. This class also encapsulates // some generation-specific behavior. This is done here rather than as a @@ -68,63 +67,4 @@ typedef GenerationSpec* GenerationSpecPtr; -// The specification of a permanent generation. This class is very -// similar to GenerationSpec in use. Due to PermGen's not being a -// true Generation, we cannot combine the spec classes either. -class PermanentGenerationSpec : public CHeapObj { - friend class VMStructs; -private: - PermGen::Name _name; - size_t _init_size; - size_t _max_size; - size_t _read_only_size; - size_t _read_write_size; - size_t _misc_data_size; - size_t _misc_code_size; - bool _enable_shared_spaces; - - enum { - _n_spaces = 2 - }; - -public: - PermanentGenerationSpec(PermGen::Name name, size_t init_size, - size_t max_size, size_t read_only_size, - size_t read_write_size, size_t misc_data_size, - size_t misc_code_size); - - PermGen* init(ReservedSpace rs, size_t init_size, GenRemSet* remset); - - void disable_sharing() { - _enable_shared_spaces = false; - _read_only_size = 0; - _read_write_size = 0; - _misc_data_size = 0; - _misc_code_size = 0; - } - - // Accessors - PermGen::Name name() const { return _name; } - size_t init_size() const { return _init_size; } - void set_init_size(size_t size) { _init_size = size; } - - // Max size for user DOES NOT include shared spaces. - // Max size for space allocation DOES include shared spaces. - size_t max_size() const { - return _max_size + _read_only_size + _read_write_size; - } - - // Need one covered region for the main space, and one for the shared - // spaces (together). - int n_covered_regions() const { return 2; } - - void align(size_t alignment); - - size_t read_only_size() const { return _read_only_size; } - size_t read_write_size() const { return _read_write_size; } - size_t misc_data_size() const { return _misc_data_size; } - size_t misc_code_size() const { return _misc_code_size; } - bool enable_shared_spaces() const { return _enable_shared_spaces; } -}; - #endif // SHARE_VM_MEMORY_GENERATIONSPEC_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/heapInspection.cpp --- a/src/share/vm/memory/heapInspection.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/heapInspection.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,6 @@ #include "memory/genCollectedHeap.hpp" #include "memory/heapInspection.hpp" #include "memory/resourceArea.hpp" -#include "oops/klassOop.hpp" #include "runtime/os.hpp" #include "utilities/globalDefinitions.hpp" #ifndef SERIALGC @@ -48,14 +47,9 @@ void KlassInfoEntry::print_on(outputStream* st) const { ResourceMark rm; const char* name;; - if (_klass->klass_part()->name() != NULL) { - name = _klass->klass_part()->external_name(); + if (_klass->name() != NULL) { + name = _klass->external_name(); } else { - if (_klass == Universe::klassKlassObj()) name = ""; else - if (_klass == Universe::arrayKlassKlassObj()) name = ""; else - if (_klass == Universe::objArrayKlassKlassObj()) name = ""; else - if (_klass == Universe::instanceKlassKlassObj()) name = ""; else - if (_klass == Universe::typeArrayKlassKlassObj()) name = ""; else if (_klass == Universe::boolArrayKlassObj()) name = ""; else if (_klass == Universe::charArrayKlassObj()) name = ""; else if (_klass == Universe::singleArrayKlassObj()) name = ""; else @@ -64,12 +58,6 @@ if (_klass == Universe::shortArrayKlassObj()) name = ""; else if (_klass == Universe::intArrayKlassObj()) name = ""; else if (_klass == Universe::longArrayKlassObj()) name = ""; else - if (_klass == Universe::methodKlassObj()) name = ""; else - if (_klass == Universe::constMethodKlassObj()) name = ""; else - if (_klass == Universe::methodDataKlassObj()) name = ""; else - if (_klass == Universe::constantPoolKlassObj()) name = ""; else - if (_klass == Universe::constantPoolCacheKlassObj()) name = ""; else - if (_klass == Universe::compiledICHolderKlassObj()) name = ""; else name = ""; } // simplify the formatting (ILP32 vs LP64) - always cast the numbers to 64-bit @@ -79,7 +67,7 @@ name); } -KlassInfoEntry* KlassInfoBucket::lookup(const klassOop k) { +KlassInfoEntry* KlassInfoBucket::lookup(Klass* const k) { KlassInfoEntry* elt = _list; while (elt != NULL) { if (elt->is_equal(k)) { @@ -135,12 +123,12 @@ } } -uint KlassInfoTable::hash(klassOop p) { - assert(Universe::heap()->is_in_permanent((HeapWord*)p), "all klasses in permgen"); +uint KlassInfoTable::hash(Klass* p) { + assert(p->is_metadata(), "all klasses are metadata"); return (uint)(((uintptr_t)p - (uintptr_t)_ref) >> 2); } -KlassInfoEntry* KlassInfoTable::lookup(const klassOop k) { +KlassInfoEntry* KlassInfoTable::lookup(Klass* const k) { uint idx = hash(k) % _size; assert(_buckets != NULL, "Allocation failure should have been caught"); KlassInfoEntry* e = _buckets[idx].lookup(k); @@ -153,7 +141,7 @@ // Return false if the entry could not be recorded on account // of running out of space required to create a new entry. bool KlassInfoTable::record_instance(const oop obj) { - klassOop k = obj->klass(); + Klass* k = obj->klass(); KlassInfoEntry* elt = lookup(k); // elt may be NULL if it's a new klass for which we // could not allocate space for a new entry in the hashtable. @@ -243,39 +231,16 @@ void HeapInspection::heap_inspection(outputStream* st, bool need_prologue) { ResourceMark rm; - HeapWord* ref; - + // Get some random number for ref (the hash key) + HeapWord* ref = (HeapWord*) Universe::boolArrayKlassObj(); CollectedHeap* heap = Universe::heap(); bool is_shared_heap = false; - switch (heap->kind()) { - case CollectedHeap::G1CollectedHeap: - case CollectedHeap::GenCollectedHeap: { - is_shared_heap = true; - SharedHeap* sh = (SharedHeap*)heap; - if (need_prologue) { - sh->gc_prologue(false /* !full */); // get any necessary locks, etc. - } - ref = sh->perm_gen()->used_region().start(); - break; - } -#ifndef SERIALGC - case CollectedHeap::ParallelScavengeHeap: { - ParallelScavengeHeap* psh = (ParallelScavengeHeap*)heap; - ref = psh->perm_gen()->object_space()->used_region().start(); - break; - } -#endif // SERIALGC - default: - ShouldNotReachHere(); // Unexpected heap kind for this op - } + // Collect klass instance info KlassInfoTable cit(KlassInfoTable::cit_size, ref); if (!cit.allocation_failed()) { // Iterate over objects in the heap RecordInstanceClosure ric(&cit); - // If this operation encounters a bad object when using CMS, - // consider using safe_object_iterate() which avoids perm gen - // objects that may contain bad references. Universe::heap()->object_iterate(&ric); // Report if certain classes are not counted because of @@ -308,11 +273,11 @@ class FindInstanceClosure : public ObjectClosure { private: - klassOop _klass; + Klass* _klass; GrowableArray* _result; public: - FindInstanceClosure(klassOop k, GrowableArray* result) : _klass(k), _result(result) {}; + FindInstanceClosure(Klass* k, GrowableArray* result) : _klass(k), _result(result) {}; void do_object(oop obj) { if (obj->is_a(_klass)) { @@ -321,7 +286,7 @@ } }; -void HeapInspection::find_instances_at_safepoint(klassOop k, GrowableArray* result) { +void HeapInspection::find_instances_at_safepoint(Klass* k, GrowableArray* result) { assert(SafepointSynchronize::is_at_safepoint(), "all threads are stopped"); assert(Heap_lock->is_locked(), "should have the Heap_lock"); @@ -331,7 +296,7 @@ // Iterate over objects in the heap FindInstanceClosure fic(k, result); // If this operation encounters a bad object when using CMS, - // consider using safe_object_iterate() which avoids perm gen + // consider using safe_object_iterate() which avoids metadata // objects that may contain bad references. Universe::heap()->object_iterate(&fic); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/heapInspection.hpp --- a/src/share/vm/memory/heapInspection.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/heapInspection.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ // HeapInspection // KlassInfoTable is a bucket hash table that -// maps klassOops to extra information: +// maps Klass*s to extra information: // instance count and instance word size. // // A KlassInfoBucket is the head of a link list @@ -47,17 +47,17 @@ class KlassInfoEntry: public CHeapObj { private: KlassInfoEntry* _next; - klassOop _klass; + Klass* _klass; long _instance_count; size_t _instance_words; public: - KlassInfoEntry(klassOop k, KlassInfoEntry* next) : + KlassInfoEntry(Klass* k, KlassInfoEntry* next) : _klass(k), _instance_count(0), _instance_words(0), _next(next) {} KlassInfoEntry* next() { return _next; } - bool is_equal(klassOop k) { return k == _klass; } - klassOop klass() { return _klass; } + bool is_equal(Klass* k) { return k == _klass; } + Klass* klass() { return _klass; } long count() { return _instance_count; } void set_count(long ct) { _instance_count = ct; } size_t words() { return _instance_words; } @@ -78,7 +78,7 @@ KlassInfoEntry* list() { return _list; } void set_list(KlassInfoEntry* l) { _list = l; } public: - KlassInfoEntry* lookup(const klassOop k); + KlassInfoEntry* lookup(Klass* const k); void initialize() { _list = NULL; } void empty(); void iterate(KlassInfoClosure* cic); @@ -94,8 +94,8 @@ HeapWord* _ref; KlassInfoBucket* _buckets; - uint hash(klassOop p); - KlassInfoEntry* lookup(const klassOop k); + uint hash(Klass* p); + KlassInfoEntry* lookup(Klass* const k); public: // Table size @@ -134,7 +134,7 @@ class HeapInspection : public AllStatic { public: static void heap_inspection(outputStream* st, bool need_prologue) KERNEL_RETURN; - static void find_instances_at_safepoint(klassOop k, GrowableArray* result) KERNEL_RETURN; + static void find_instances_at_safepoint(Klass* k, GrowableArray* result) KERNEL_RETURN; }; #endif // SHARE_VM_MEMORY_HEAPINSPECTION_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/iterator.cpp --- a/src/share/vm/memory/iterator.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/iterator.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,10 +26,6 @@ #include "memory/iterator.hpp" #include "oops/oop.inline.hpp" -#ifdef ASSERT -bool OopClosure::_must_remember_klasses = false; -#endif - void ObjectToOopClosure::do_object(oop obj) { obj->oop_iterate(_cl); } @@ -38,16 +34,6 @@ ShouldNotCallThis(); } -#ifdef ASSERT -bool OopClosure::must_remember_klasses() { - return _must_remember_klasses; -} -void OopClosure::set_must_remember_klasses(bool v) { - _must_remember_klasses = v; -} -#endif - - MarkingCodeBlobClosure::MarkScope::MarkScope(bool activate) : _active(activate) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/iterator.hpp --- a/src/share/vm/memory/iterator.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/iterator.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,8 @@ class nmethod; class ReferenceProcessor; class DataLayout; +class KlassClosure; +class ClassLoaderData; // Closure provides abortability. @@ -51,39 +53,50 @@ void clear_abort() { _abort = false; } }; -// OopClosure is used for iterating through roots (oop*) +// OopClosure is used for iterating through references to Java objects. class OopClosure : public Closure { public: - ReferenceProcessor* _ref_processor; - OopClosure(ReferenceProcessor* rp) : _ref_processor(rp) { } - OopClosure() : _ref_processor(NULL) { } virtual void do_oop(oop* o) = 0; virtual void do_oop_v(oop* o) { do_oop(o); } virtual void do_oop(narrowOop* o) = 0; virtual void do_oop_v(narrowOop* o) { do_oop(o); } - - // In support of post-processing of weak links of KlassKlass objects; - // see KlassKlass::oop_oop_iterate(). +}; - virtual const bool should_remember_klasses() const { - assert(!must_remember_klasses(), "Should have overriden this method."); - return false; - } - - virtual void remember_klass(Klass* k) { /* do nothing */ } +// ExtendedOopClosure adds extra code to be run during oop iterations. +// This is needed by the GC and is extracted to a separate type to not +// pollute the OopClosure interface. +class ExtendedOopClosure : public OopClosure { + public: + ReferenceProcessor* _ref_processor; + ExtendedOopClosure(ReferenceProcessor* rp) : _ref_processor(rp) { } + ExtendedOopClosure() : OopClosure(), _ref_processor(NULL) { } - // In support of post-processing of weak references in - // ProfileData (MethodDataOop) objects; see, for example, - // VirtualCallData::oop_iterate(). - virtual const bool should_remember_mdo() const { return false; } - virtual void remember_mdo(DataLayout* v) { /* do nothing */ } + // If the do_metadata functions return "true", + // we invoke the following when running oop_iterate(): + // + // 1) do_klass on the header klass pointer. + // 2) do_klass on the klass pointer in the mirrors. + // 3) do_class_loader_data on the class loader data in class loaders. + // + // The virtual (without suffix) and the non-virtual (with _nv suffix) need + // to be updated together, or else the devirtualization will break. + // + // Providing default implementations of the _nv functions unfortunately + // removes the compile-time safeness, but reduces the clutter for the + // ExtendedOopClosures that don't need to walk the metadata. Currently, + // only CMS needs these. - // The methods below control how object iterations invoking this closure - // should be performed: + virtual bool do_metadata() { return do_metadata_nv(); } + bool do_metadata_v() { return do_metadata(); } + bool do_metadata_nv() { return false; } - // If "true", invoke on header klass field. - bool do_header() { return true; } // Note that this is non-virtual. + virtual void do_klass(Klass* k) { do_klass_nv(k); } + void do_klass_v(Klass* k) { do_klass(k); } + void do_klass_nv(Klass* k) { ShouldNotReachHere(); } + + virtual void do_class_loader_data(ClassLoaderData* cld) { ShouldNotReachHere(); } + // Controls how prefetching is done for invocations of this closure. Prefetch::style prefetch_style() { // Note that this is non-virtual. return Prefetch::do_none; @@ -93,12 +106,26 @@ // location without an intervening "major reset" (like the end of a GC). virtual bool idempotent() { return false; } virtual bool apply_to_weak_ref_discovered_field() { return false; } +}; -#ifdef ASSERT - static bool _must_remember_klasses; - static bool must_remember_klasses(); - static void set_must_remember_klasses(bool v); -#endif +// Wrapper closure only used to implement oop_iterate_no_header(). +class NoHeaderExtendedOopClosure : public ExtendedOopClosure { + OopClosure* _wrapped_closure; + public: + NoHeaderExtendedOopClosure(OopClosure* cl) : _wrapped_closure(cl) {} + // Warning: this calls the virtual version do_oop in the the wrapped closure. + void do_oop_nv(oop* p) { _wrapped_closure->do_oop(p); } + void do_oop_nv(narrowOop* p) { _wrapped_closure->do_oop(p); } + + void do_oop(oop* p) { assert(false, "Only the _nv versions should be used"); + _wrapped_closure->do_oop(p); } + void do_oop(narrowOop* p) { assert(false, "Only the _nv versions should be used"); + _wrapped_closure->do_oop(p);} +}; + +class KlassClosure : public Closure { + public: + virtual void do_klass(Klass* k) = 0; }; // ObjectClosure is used for iterating through an object space @@ -118,10 +145,10 @@ // Applies an oop closure to all ref fields in objects iterated over in an // object iteration. class ObjectToOopClosure: public ObjectClosure { - OopClosure* _cl; + ExtendedOopClosure* _cl; public: void do_object(oop obj); - ObjectToOopClosure(OopClosure* cl) : _cl(cl) {} + ObjectToOopClosure(ExtendedOopClosure* cl) : _cl(cl) {} }; // A version of ObjectClosure with "memory" (see _previous_address below) @@ -263,23 +290,14 @@ // Abstract closure for serializing data (read or write). -class SerializeOopClosure : public OopClosure { +class SerializeClosure : public Closure { public: // Return bool indicating whether closure implements read or write. virtual bool reading() const = 0; - // Read/write the int pointed to by i. - virtual void do_int(int* i) = 0; - - // Read/write the size_t pointed to by i. - virtual void do_size_t(size_t* i) = 0; - // Read/write the void pointer pointed to by p. virtual void do_ptr(void** p) = 0; - // Read/write the HeapWord pointer pointed to be p. - virtual void do_ptr(HeapWord** p) = 0; - // Read/write the region specified. virtual void do_region(u_char* start, size_t size) = 0; @@ -306,48 +324,4 @@ } }; -#ifdef ASSERT -// This class is used to flag phases of a collection that -// can unload classes and which should override the -// should_remember_klasses() and remember_klass() of OopClosure. -// The _must_remember_klasses is set in the contructor and restored -// in the destructor. _must_remember_klasses is checked in assertions -// in the OopClosure implementations of should_remember_klasses() and -// remember_klass() and the expectation is that the OopClosure -// implementation should not be in use if _must_remember_klasses is set. -// Instances of RememberKlassesChecker can be place in -// marking phases of collections which can do class unloading. -// RememberKlassesChecker can be passed "false" to turn off checking. -// It is used by CMS when CMS yields to a different collector. -class RememberKlassesChecker: StackObj { - bool _saved_state; - bool _do_check; - public: - RememberKlassesChecker(bool checking_on) : _saved_state(false), - _do_check(true) { - // The ClassUnloading unloading flag affects the collectors except - // for CMS. - // CMS unloads classes if CMSClassUnloadingEnabled is true or - // if ExplicitGCInvokesConcurrentAndUnloadsClasses is true and - // the current collection is an explicit collection. Turning - // on the checking in general for - // ExplicitGCInvokesConcurrentAndUnloadsClasses and - // UseConcMarkSweepGC should not lead to false positives. - _do_check = - ClassUnloading && !UseConcMarkSweepGC || - CMSClassUnloadingEnabled && UseConcMarkSweepGC || - ExplicitGCInvokesConcurrentAndUnloadsClasses && UseConcMarkSweepGC; - if (_do_check) { - _saved_state = OopClosure::must_remember_klasses(); - OopClosure::set_must_remember_klasses(checking_on); - } - } - ~RememberKlassesChecker() { - if (_do_check) { - OopClosure::set_must_remember_klasses(_saved_state); - } - } -}; -#endif // ASSERT - #endif // SHARE_VM_MEMORY_ITERATOR_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/memRegion.hpp --- a/src/share/vm/memory/memRegion.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/memRegion.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,8 @@ // The intent is that they remain very small and contain no // objects. +class MetaWord; + class MemRegion VALUE_OBJ_CLASS_SPEC { friend class VMStructs; private: @@ -50,6 +52,10 @@ _start(start), _word_size(pointer_delta(end, start)) { assert(end >= start, "incorrect constructor arguments"); } + MemRegion(MetaWord* start, MetaWord* end) : + _start((HeapWord*)start), _word_size(pointer_delta(end, start)) { + assert(end >= start, "incorrect constructor arguments"); + } MemRegion(const MemRegion& mr): _start(mr._start), _word_size(mr._word_size) {} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/metadataFactory.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/memory/metadataFactory.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_MEMORY_METADATAFACTORY_HPP +#define SHARE_VM_MEMORY_METADATAFACTORY_HPP + +#include "utilities/array.hpp" +#include "utilities/exceptions.hpp" +#include "utilities/globalDefinitions.hpp" + +class MetadataFactory : AllStatic { + public: + template + static Array* new_array(ClassLoaderData* loader_data, int length, TRAPS) { + // The "true" argument is because all metadata arrays are read only when + // dumped to the shared archive + return new (loader_data, length, /*read_only*/true, THREAD) Array(length); + } + + template + static Array* new_array(ClassLoaderData* loader_data, int length, T value, TRAPS) { + Array* array = new_array(loader_data, length, CHECK_NULL); + for (int i = 0; i < length; i++) { + array->at_put(i, value); + } + return array; + } + + template + static Array* new_writeable_array(ClassLoaderData* loader_data, int length, TRAPS) { + return new (loader_data, length, /*read_only*/false, THREAD) Array(length); + } + + template + static Array* new_writeable_array(ClassLoaderData* loader_data, int length, T value, TRAPS) { + Array* array = new_writeable_array(loader_data, length, CHECK_NULL); + for (int i = 0; i < length; i++) { + array->at_put(i, value); + } + return array; + } + + template + static void free_array(ClassLoaderData* loader_data, Array* data) { + if (data != NULL) { + assert(loader_data != NULL, "shouldn't pass null"); + int size = data->size(); + loader_data->metaspace_non_null()->deallocate((MetaWord*)data, size, false); + } + } + + // Deallocation method for metadata + template + static void free_metadata(ClassLoaderData* loader_data, T md) { + if (md != NULL) { + assert(loader_data != NULL, "shouldn't pass null"); + int size = md->size(); + // Call metadata's deallocate function which will call deallocate fields + assert(!md->on_stack(), "can't deallocate things on stack"); + md->deallocate_contents(loader_data); + loader_data->metaspace_non_null()->deallocate((MetaWord*)md, size, md->is_klass()); + } + } +}; + +#endif // SHARE_VM_MEMORY_METADATAFACTORY_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/metaspace.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/memory/metaspace.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,2999 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#include "precompiled.hpp" +#include "gc_interface/collectedHeap.hpp" +#include "memory/binaryTreeDictionary.hpp" +#include "memory/collectorPolicy.hpp" +#include "memory/filemap.hpp" +#include "memory/freeList.hpp" +#include "memory/metaspace.hpp" +#include "memory/metaspaceShared.hpp" +#include "memory/resourceArea.hpp" +#include "memory/universe.hpp" +#include "runtime/globals.hpp" +#include "runtime/mutex.hpp" +#include "services/memTracker.hpp" +#include "utilities/copy.hpp" +#include "utilities/debug.hpp" + +// Define this macro to deallocate Metablock. If not defined, +// blocks are not yet deallocated and are only mangled. +#undef DEALLOCATE_BLOCKS + +// Easily recognizable patterns +// These patterns can be the same in 32bit or 64bit since +// they only have to be easily recognizable. +const void* metaspace_allocation_leader = (void*) 0X11111111; +const void* metaspace_allocation_trailer = (void*) 0X77777777; + +// Parameters for stress mode testing +const uint metadata_deallocate_a_lot_block = 10; +const uint metadata_deallocate_a_lock_chunk = 3; +size_t const allocation_from_dictionary_limit = 64 * K; +const size_t metadata_chunk_initialize = 0xf7f7f7f7; +const size_t metadata_deallocate = 0xf5f5f5f5; +const size_t metadata_space_manager_allocate = 0xf3f3f3f3; + +MetaWord* last_allocated = 0; + +// Used in declarations in SpaceManager and ChunkManager +enum ChunkIndex { + SmallIndex = 0, + MediumIndex = 1, + HumongousIndex = 2, + NumberOfFreeLists = 3 +}; + +static ChunkIndex next_chunk_index(ChunkIndex i) { + assert(i < NumberOfFreeLists, "Out of bound"); + return (ChunkIndex) (i+1); +} + +// Originally _capacity_until_GC was set to MetaspaceSize here but +// the default MetaspaceSize before argument processing was being +// used which was not the desired value. See the code +// in should_expand() to see how the initialization is handled +// now. +size_t MetaspaceGC::_capacity_until_GC = 0; +bool MetaspaceGC::_expand_after_GC = false; +uint MetaspaceGC::_shrink_factor = 0; +bool MetaspaceGC::_should_concurrent_collect = false; + +// Blocks of space for metadata are allocated out of Metachunks. +// +// Metachunk are allocated out of MetadataVirtualspaces and once +// allocated there is no explicit link between a Metachunk and +// the MetadataVirtualspaces from which it was allocated. +// +// Each SpaceManager maintains a +// list of the chunks it is using and the current chunk. The current +// chunk is the chunk from which allocations are done. Space freed in +// a chunk is placed on the free list of blocks (BlockFreelist) and +// reused from there. +// +// Future modification +// +// The Metachunk can conceivable be replaced by the Chunk in +// allocation.hpp. Note that the latter Chunk is the space for +// allocation (allocations from the chunk are out of the space in +// the Chunk after the header for the Chunk) where as Metachunks +// point to space in a VirtualSpace. To replace Metachunks with +// Chunks, change Chunks so that they can be allocated out of a VirtualSpace. +// + +// Metablock are the unit of allocation from a Chunk. It contains +// the size of the requested allocation in a debug build. +// Also in a debug build it has a marker before and after the +// body of the block. The address of the body is the address returned +// by the allocation. +// +// Layout in a debug build. In a product build only the body is present. +// +// +-----------+-----------+------------+ +-----------+ +// | word size | leader | body | ... | trailer | +// +-----------+-----------+------------+ +-----------+ +// +// A Metablock may be reused by its SpaceManager but are never moved between +// SpaceManagers. There is no explicit link to the Metachunk +// from which it was allocated. Metablock are not deallocated, rather +// the Metachunk it is a part of will be deallocated when it's +// associated class loader is collected. +// +// When the word size of a block is passed in to the deallocation +// call the word size no longer needs to be part of a Metablock. + +class Metablock { + friend class VMStructs; + private: + // Used to align the allocation (see below) and for debugging. +#ifdef ASSERT + struct { + size_t _word_size; + void* _leader; + } _header; + void* _data[1]; +#endif + static size_t _overhead; + +#ifdef ASSERT + void set_word_size(size_t v) { _header._word_size = v; } + void* leader() { return _header._leader; } + void* trailer() { + jlong index = (jlong) _header._word_size - sizeof(_header)/BytesPerWord - 1; + assert(index > 0, err_msg("Bad indexling of trailer %d", index)); + void** ptr = &_data[index]; + return *ptr; + } + void set_leader(void* v) { _header._leader = v; } + void set_trailer(void* v) { + void** ptr = &_data[_header._word_size - sizeof(_header)/BytesPerWord - 1]; + *ptr = v; + } + public: + size_t word_size() { return _header._word_size; } +#endif + public: + + static Metablock* initialize(MetaWord* p, size_t word_size); + + // This places the body of the block at a 2 word boundary + // because every block starts on a 2 word boundary. Work out + // how to make the body on a 2 word boundary if the block + // starts on a arbitrary boundary. JJJ + +#ifdef ASSERT + MetaWord* data() { return (MetaWord*) &_data[0]; } +#else + MetaWord* data() { return (MetaWord*) this; } +#endif + static Metablock* metablock_from_data(MetaWord* p) { +#ifdef ASSERT + size_t word_offset = offset_of(Metablock, _data)/BytesPerWord; + Metablock* result = (Metablock*) (p - word_offset); + return result; +#else + return (Metablock*) p; +#endif + } + + static size_t overhead() { return _overhead; } + void verify(); +}; + +// Metachunk - Quantum of allocation from a Virtualspace +// Metachunks are reused (when freed are put on a global freelist) and +// have no permanent association to a SpaceManager. + +// +--------------+ <- end +// | | --+ ---+ +// | | | free | +// | | | | +// | | | | capacity +// | | | | +// | | <- top --+ | +// | | ---+ | +// | | | used | +// | | | | +// | | | | +// +--------------+ <- bottom ---+ ---+ + +class Metachunk VALUE_OBJ_CLASS_SPEC { + // link to support lists of chunks + Metachunk* _next; + + MetaWord* _bottom; + MetaWord* _end; + MetaWord* _top; + size_t _word_size; + + // Metachunks are allocated out of a MetadataVirtualSpace and + // and use some of its space to describe itself (plus alignment + // considerations). Metadata is allocated in the rest of the chunk. + // This size is the overhead of maintaining the Metachunk within + // the space. + static size_t _overhead; + + void set_bottom(MetaWord* v) { _bottom = v; } + void set_end(MetaWord* v) { _end = v; } + void set_top(MetaWord* v) { _top = v; } + void set_word_size(size_t v) { _word_size = v; } + public: + + // Used to add a Metachunk to a list of Metachunks + void set_next(Metachunk* v) { _next = v; assert(v != this, "Boom");} + + Metablock* allocate(size_t word_size); + static Metachunk* initialize(MetaWord* ptr, size_t word_size); + + // Accessors + Metachunk* next() const { return _next; } + MetaWord* bottom() const { return _bottom; } + MetaWord* end() const { return _end; } + MetaWord* top() const { return _top; } + size_t word_size() const { return _word_size; } + static size_t overhead() { return _overhead; } + + // Reset top to bottom so chunk can be reused. + void reset_empty() { _top = (_bottom + _overhead); } + bool is_empty() { return _top == (_bottom + _overhead); } + + // used (has been allocated) + // free (available for future allocations) + // capacity (total size of chunk) + size_t used_word_size(); + size_t free_word_size(); + size_t capacity_word_size(); + +#ifdef ASSERT + void mangle() { + // Mangle the payload of the chunk and not the links that + // maintain list of chunks. + HeapWord* start = (HeapWord*)(bottom() + overhead()); + size_t word_size = capacity_word_size() - overhead(); + Copy::fill_to_words(start, word_size, metadata_chunk_initialize); + } +#endif // ASSERT + + void print_on(outputStream* st) const; + void verify(); +}; + + +// Pointer to list of Metachunks. +class ChunkList VALUE_OBJ_CLASS_SPEC { + // List of free chunks + Metachunk* _head; + + public: + // Constructor + ChunkList() : _head(NULL) {} + + // Accessors + Metachunk* head() { return _head; } + void set_head(Metachunk* v) { _head = v; } + + // Link at head of the list + void add_at_head(Metachunk* head, Metachunk* tail); + void add_at_head(Metachunk* head); + + size_t sum_list_size(); + size_t sum_list_count(); + size_t sum_list_capacity(); +}; + +// Manages the global free lists of chunks. +// Has three lists of free chunks, and a total size and +// count that includes all three + +class ChunkManager VALUE_OBJ_CLASS_SPEC { + + // Free list of chunks of different sizes. + // SmallChunk + // MediumChunk + // HumongousChunk + ChunkList _free_chunks[3]; + + // ChunkManager in all lists of this type + size_t _free_chunks_total; + size_t _free_chunks_count; + + void dec_free_chunks_total(size_t v) { + assert(_free_chunks_count > 0 && + _free_chunks_total > 0, + "About to go negative"); + Atomic::add_ptr(-1, &_free_chunks_count); + jlong minus_v = (jlong) - (jlong) v; + Atomic::add_ptr(minus_v, &_free_chunks_total); + } + + // Debug support + + size_t sum_free_chunks(); + size_t sum_free_chunks_count(); + + void locked_verify_free_chunks_total(); + void locked_verify_free_chunks_count(); + void verify_free_chunks_count(); + + public: + + ChunkManager() : _free_chunks_total(0), _free_chunks_count(0) {} + + // add or delete (return) a chunk to the global freelist. + Metachunk* chunk_freelist_allocate(size_t word_size); + void chunk_freelist_deallocate(Metachunk* chunk); + + // Total of the space in the free chunks list + size_t free_chunks_total(); + size_t free_chunks_total_in_bytes(); + + // Number of chunks in the free chunks list + size_t free_chunks_count(); + + void inc_free_chunks_total(size_t v, size_t count = 1) { + Atomic::add_ptr(count, &_free_chunks_count); + Atomic::add_ptr(v, &_free_chunks_total); + } + ChunkList* free_medium_chunks() { return &_free_chunks[1]; } + ChunkList* free_small_chunks() { return &_free_chunks[0]; } + ChunkList* free_humongous_chunks() { return &_free_chunks[2]; } + + ChunkList* free_chunks(ChunkIndex index); + + // Returns the list for the given chunk word size. + ChunkList* find_free_chunks_list(size_t word_size); + + // Add and remove from a list by size. Selects + // list based on size of chunk. + void free_chunks_put(Metachunk* chuck); + Metachunk* free_chunks_get(size_t chunk_word_size); + + // Debug support + void verify(); + void locked_verify(); + void verify_free_chunks_total(); + + void locked_print_free_chunks(outputStream* st); + void locked_print_sum_free_chunks(outputStream* st); +}; + + +// Used to manage the free list of Metablocks (a block corresponds +// to the allocation of a quantum of metadata). +class BlockFreelist VALUE_OBJ_CLASS_SPEC { +#ifdef DEALLOCATE_BLOCKS + BinaryTreeDictionary* _dictionary; +#endif + static Metablock* initialize_free_chunk(Metablock* block, size_t word_size); + +#ifdef DEALLOCATE_BLOCKS + // Accessors + BinaryTreeDictionary* dictionary() const { return _dictionary; } +#endif + + public: + BlockFreelist(); + ~BlockFreelist(); + + // Get and return a block to the free list + Metablock* get_block(size_t word_size); + void return_block(Metablock* block, size_t word_size); + + size_t totalSize() { +#ifdef DEALLOCATE_BLOCKS + if (dictionary() == NULL) { + return 0; + } else { + return dictionary()->totalSize(); + } +#else + return 0; +#endif + } + + void print_on(outputStream* st) const; +}; + +class VirtualSpaceNode : public CHeapObj { + friend class VirtualSpaceList; + + // Link to next VirtualSpaceNode + VirtualSpaceNode* _next; + + // total in the VirtualSpace + MemRegion _reserved; + ReservedSpace _rs; + VirtualSpace _virtual_space; + MetaWord* _top; + + // Convenience functions for logical bottom and end + MetaWord* bottom() const { return (MetaWord*) _virtual_space.low(); } + MetaWord* end() const { return (MetaWord*) _virtual_space.high(); } + + // Convenience functions to access the _virtual_space + char* low() const { return virtual_space()->low(); } + char* high() const { return virtual_space()->high(); } + + public: + + VirtualSpaceNode(size_t byte_size); + VirtualSpaceNode(ReservedSpace rs) : _top(NULL), _next(NULL), _rs(rs) {} + ~VirtualSpaceNode(); + + // address of next available space in _virtual_space; + // Accessors + VirtualSpaceNode* next() { return _next; } + void set_next(VirtualSpaceNode* v) { _next = v; } + + void set_reserved(MemRegion const v) { _reserved = v; } + void set_top(MetaWord* v) { _top = v; } + + // Accessors + MemRegion* reserved() { return &_reserved; } + VirtualSpace* virtual_space() const { return (VirtualSpace*) &_virtual_space; } + + // Returns true if "word_size" is available in the virtual space + bool is_available(size_t word_size) { return _top + word_size <= end(); } + + MetaWord* top() const { return _top; } + void inc_top(size_t word_size) { _top += word_size; } + + // used and capacity in this single entry in the list + size_t used_words_in_vs() const; + size_t capacity_words_in_vs() const; + + bool initialize(); + + // get space from the virtual space + Metachunk* take_from_committed(size_t chunk_word_size); + + // Allocate a chunk from the virtual space and return it. + Metachunk* get_chunk_vs(size_t chunk_word_size); + Metachunk* get_chunk_vs_with_expand(size_t chunk_word_size); + + // Expands/shrinks the committed space in a virtual space. Delegates + // to Virtualspace + bool expand_by(size_t words, bool pre_touch = false); + bool shrink_by(size_t words); + + // Debug support + static void verify_virtual_space_total(); + static void verify_virtual_space_count(); + void mangle(); + + void print_on(outputStream* st) const; +}; + + // byte_size is the size of the associated virtualspace. +VirtualSpaceNode::VirtualSpaceNode(size_t byte_size) : _top(NULL), _next(NULL), _rs(0) { + // This allocates memory with mmap. For DumpSharedspaces, allocate the + // space at low memory so that other shared images don't conflict. + // This is the same address as memory needed for UseCompressedOops but + // compressed oops don't work with CDS (offsets in metadata are wrong), so + // borrow the same address. + if (DumpSharedSpaces) { + char* shared_base = (char*)HeapBaseMinAddress; + _rs = ReservedSpace(byte_size, 0, false, shared_base, 0); + if (_rs.is_reserved()) { + assert(_rs.base() == shared_base, "should match"); + } else { + // If we are dumping the heap, then allocate a wasted block of address + // space in order to push the heap to a lower address. This extra + // address range allows for other (or larger) libraries to be loaded + // without them occupying the space required for the shared spaces. + uintx reserved = 0; + uintx block_size = 64*1024*1024; + while (reserved < SharedDummyBlockSize) { + char* dummy = os::reserve_memory(block_size); + reserved += block_size; + } + _rs = ReservedSpace(byte_size); + } + MetaspaceShared::set_shared_rs(&_rs); + } else { + _rs = ReservedSpace(byte_size); + } + + MemTracker::record_virtual_memory_type((address)_rs.base(), mtClass); +} + +// List of VirtualSpaces for metadata allocation. +// It has a _next link for singly linked list and a MemRegion +// for total space in the VirtualSpace. +class VirtualSpaceList : public CHeapObj { + friend class VirtualSpaceNode; + + enum VirtualSpaceSizes { + VirtualSpaceSize = 256 * K + }; + + // Global list of virtual spaces + // Head of the list + VirtualSpaceNode* _virtual_space_list; + // virtual space currently being used for allocations + VirtualSpaceNode* _current_virtual_space; + // Free chunk list for all other metadata + ChunkManager _chunk_manager; + + // Can this virtual list allocate >1 spaces? Also, used to determine + // whether to allocate unlimited small chunks in this virtual space + bool _is_class; + bool can_grow() const { return !is_class() || !UseCompressedKlassPointers; } + + // Sum of space in all virtual spaces and number of virtual spaces + size_t _virtual_space_total; + size_t _virtual_space_count; + + ~VirtualSpaceList(); + + VirtualSpaceNode* virtual_space_list() const { return _virtual_space_list; } + + void set_virtual_space_list(VirtualSpaceNode* v) { + _virtual_space_list = v; + } + void set_current_virtual_space(VirtualSpaceNode* v) { + _current_virtual_space = v; + } + + void link_vs(VirtualSpaceNode* new_entry, size_t vs_word_size); + + // Get another virtual space and add it to the list. This + // is typically prompted by a failed attempt to allocate a chunk + // and is typically followed by the allocation of a chunk. + bool grow_vs(size_t vs_word_size); + + public: + VirtualSpaceList(size_t word_size); + VirtualSpaceList(ReservedSpace rs); + + Metachunk* get_new_chunk(size_t word_size, size_t grow_chunks_by_words); + + VirtualSpaceNode* current_virtual_space() { + return _current_virtual_space; + } + + ChunkManager* chunk_manager() { return &_chunk_manager; } + bool is_class() const { return _is_class; } + + // Allocate the first virtualspace. + void initialize(size_t word_size); + + size_t virtual_space_total() { return _virtual_space_total; } + void inc_virtual_space_total(size_t v) { + Atomic::add_ptr(v, &_virtual_space_total); + } + + size_t virtual_space_count() { return _virtual_space_count; } + void inc_virtual_space_count() { + Atomic::inc_ptr(&_virtual_space_count); + } + + // Used and capacity in the entire list of virtual spaces. + // These are global values shared by all Metaspaces + size_t capacity_words_sum(); + size_t capacity_bytes_sum() { return capacity_words_sum() * BytesPerWord; } + size_t used_words_sum(); + size_t used_bytes_sum() { return used_words_sum() * BytesPerWord; } + + bool contains(const void *ptr); + + void print_on(outputStream* st) const; + + class VirtualSpaceListIterator : public StackObj { + VirtualSpaceNode* _virtual_spaces; + public: + VirtualSpaceListIterator(VirtualSpaceNode* virtual_spaces) : + _virtual_spaces(virtual_spaces) {} + + bool repeat() { + return _virtual_spaces != NULL; + } + + VirtualSpaceNode* get_next() { + VirtualSpaceNode* result = _virtual_spaces; + if (_virtual_spaces != NULL) { + _virtual_spaces = _virtual_spaces->next(); + } + return result; + } + }; +}; + + +class Metadebug : AllStatic { + // Debugging support for Metaspaces + static int _deallocate_block_a_lot_count; + static int _deallocate_chunk_a_lot_count; + static int _allocation_fail_alot_count; + + public: + static int deallocate_block_a_lot_count() { + return _deallocate_block_a_lot_count; + } + static void set_deallocate_block_a_lot_count(int v) { + _deallocate_block_a_lot_count = v; + } + static void inc_deallocate_block_a_lot_count() { + _deallocate_block_a_lot_count++; + } + static int deallocate_chunk_a_lot_count() { + return _deallocate_chunk_a_lot_count; + } + static void reset_deallocate_chunk_a_lot_count() { + _deallocate_chunk_a_lot_count = 1; + } + static void inc_deallocate_chunk_a_lot_count() { + _deallocate_chunk_a_lot_count++; + } + + static void init_allocation_fail_alot_count(); +#ifdef ASSERT + static bool test_metadata_failure(); +#endif + + static void deallocate_chunk_a_lot(SpaceManager* sm, + size_t chunk_word_size); + static void deallocate_block_a_lot(SpaceManager* sm, + size_t chunk_word_size); + +}; + +int Metadebug::_deallocate_block_a_lot_count = 0; +int Metadebug::_deallocate_chunk_a_lot_count = 0; +int Metadebug::_allocation_fail_alot_count = 0; + +// SpaceManager - used by Metaspace to handle allocations +class SpaceManager : public CHeapObj { + friend class Metaspace; + friend class Metadebug; + + private: + // protects allocations and contains. + Mutex* const _lock; + + // List of chunks in use by this SpaceManager. Allocations + // are done from the current chunk. The list is used for deallocating + // chunks when the SpaceManager is freed. + Metachunk* _chunks_in_use[NumberOfFreeLists]; + Metachunk* _current_chunk; + + // Virtual space where allocation comes from. + VirtualSpaceList* _vs_list; + + // Number of small chunks to allocate to a manager + // If class space manager, small chunks are unlimited + static uint const _small_chunk_limit; + bool has_small_chunk_limit() { return !vs_list()->is_class(); } + + // Sum of all space in allocated chunks + size_t _allocation_total; + + // Free lists of blocks are per SpaceManager since they + // are assumed to be in chunks in use by the SpaceManager + // and all chunks in use by a SpaceManager are freed when + // the class loader using the SpaceManager is collected. + BlockFreelist _block_freelists; + + // protects virtualspace and chunk expansions + static const char* _expand_lock_name; + static const int _expand_lock_rank; + static Mutex* const _expand_lock; + + // Accessors + Metachunk* chunks_in_use(ChunkIndex index) const { return _chunks_in_use[index]; } + void set_chunks_in_use(ChunkIndex index, Metachunk* v) { _chunks_in_use[index] = v; } + + BlockFreelist* block_freelists() const { + return (BlockFreelist*) &_block_freelists; + } + + VirtualSpaceList* vs_list() const { return _vs_list; } + + Metachunk* current_chunk() const { return _current_chunk; } + void set_current_chunk(Metachunk* v) { + _current_chunk = v; + } + + Metachunk* find_current_chunk(size_t word_size); + + // Add chunk to the list of chunks in use + void add_chunk(Metachunk* v, bool make_current); + + // Debugging support + void verify_chunks_in_use_index(ChunkIndex index, Metachunk* v) { + switch (index) { + case 0: + assert(v->word_size() == SmallChunk, "Not a SmallChunk"); + break; + case 1: + assert(v->word_size() == MediumChunk, "Not a MediumChunk"); + break; + case 2: + assert(v->word_size() > MediumChunk, "Not a HumongousChunk"); + break; + default: + assert(false, "Wrong list."); + } + } + + protected: + Mutex* lock() const { return _lock; } + + public: + SpaceManager(Mutex* lock, VirtualSpaceList* vs_list); + ~SpaceManager(); + + enum ChunkSizes { // in words. + SmallChunk = 512, + MediumChunk = 8 * K, + MediumChunkBunch = 4 * MediumChunk + }; + + // Accessors + size_t allocation_total() const { return _allocation_total; } + void inc_allocation_total(size_t v) { Atomic::add_ptr(v, &_allocation_total); } + static bool is_humongous(size_t word_size) { return word_size > MediumChunk; } + + static Mutex* expand_lock() { return _expand_lock; } + + size_t sum_capacity_in_chunks_in_use() const; + size_t sum_used_in_chunks_in_use() const; + size_t sum_free_in_chunks_in_use() const; + size_t sum_waste_in_chunks_in_use() const; + size_t sum_waste_in_chunks_in_use(ChunkIndex index ) const; + + size_t sum_count_in_chunks_in_use(); + size_t sum_count_in_chunks_in_use(ChunkIndex i); + + // Block allocation and deallocation. + // Allocates a block from the current chunk + MetaWord* allocate(size_t word_size); + + // Helper for allocations + Metablock* allocate_work(size_t word_size); + + // Returns a block to the per manager freelist + void deallocate(MetaWord* p); + + // Based on the allocation size and a minimum chunk size, + // returned chunk size (for expanding space for chunk allocation). + size_t calc_chunk_size(size_t allocation_word_size); + + // Called when an allocation from the current chunk fails. + // Gets a new chunk (may require getting a new virtual space), + // and allocates from that chunk. + Metablock* grow_and_allocate(size_t word_size); + + // debugging support. + + void dump(outputStream* const out) const; + void print_on(outputStream* st) const; + void locked_print_chunks_in_use_on(outputStream* st) const; + + void verify(); +#ifdef ASSERT + void mangle_freed_chunks(); + void verify_allocation_total(); +#endif +}; + +uint const SpaceManager::_small_chunk_limit = 4; + +const char* SpaceManager::_expand_lock_name = + "SpaceManager chunk allocation lock"; +const int SpaceManager::_expand_lock_rank = Monitor::leaf - 1; +Mutex* const SpaceManager::_expand_lock = + new Mutex(SpaceManager::_expand_lock_rank, + SpaceManager::_expand_lock_name, + Mutex::_allow_vm_block_flag); + +#ifdef ASSERT +size_t Metablock::_overhead = + Chunk::aligned_overhead_size(sizeof(Metablock)) / BytesPerWord; +#else +size_t Metablock::_overhead = 0; +#endif +size_t Metachunk::_overhead = + Chunk::aligned_overhead_size(sizeof(Metachunk)) / BytesPerWord; + +// New blocks returned by the Metaspace are zero initialized. +// We should fix the constructors to not assume this instead. +Metablock* Metablock::initialize(MetaWord* p, size_t word_size) { + Metablock* result = (Metablock*) p; + + // Clear the memory + Copy::fill_to_aligned_words((HeapWord*)result, word_size); +#ifdef ASSERT + result->set_word_size(word_size); + // Check after work size is set. + result->set_leader((void*) metaspace_allocation_leader); + result->set_trailer((void*) metaspace_allocation_trailer); +#endif + return result; +} + +void Metablock::verify() { +#ifdef ASSERT + assert(leader() == metaspace_allocation_leader && + trailer() == metaspace_allocation_trailer, + "block has been corrupted"); +#endif +} + +// Metachunk methods + +Metachunk* Metachunk::initialize(MetaWord* ptr, size_t word_size) { + // Set bottom, top, and end. Allow space for the Metachunk itself + Metachunk* chunk = (Metachunk*) ptr; + + MetaWord* chunk_bottom = ptr + _overhead; + chunk->set_bottom(ptr); + chunk->set_top(chunk_bottom); + MetaWord* chunk_end = ptr + word_size; + assert(chunk_end > chunk_bottom, "Chunk must be too small"); + chunk->set_end(chunk_end); + chunk->set_next(NULL); + chunk->set_word_size(word_size); +#ifdef ASSERT + size_t data_word_size = pointer_delta(chunk_end, chunk_bottom, sizeof(MetaWord)); + Copy::fill_to_words((HeapWord*) chunk_bottom, data_word_size, metadata_chunk_initialize); +#endif + return chunk; +} + + +Metablock* Metachunk::allocate(size_t word_size) { + Metablock* result = NULL; + // If available, bump the pointer to allocate. + if (free_word_size() >= word_size) { + result = Metablock::initialize(_top, word_size); + _top = _top + word_size; + } +#ifdef ASSERT + assert(result == NULL || + result->word_size() == word_size, + "Block size is not set correctly"); +#endif + return result; +} + +// _bottom points to the start of the chunk including the overhead. +size_t Metachunk::used_word_size() { + return pointer_delta(_top, _bottom, sizeof(MetaWord)); +} + +size_t Metachunk::free_word_size() { + return pointer_delta(_end, _top, sizeof(MetaWord)); +} + +size_t Metachunk::capacity_word_size() { + return pointer_delta(_end, _bottom, sizeof(MetaWord)); +} + +void Metachunk::print_on(outputStream* st) const { + st->print_cr("Metachunk:" + " bottom " PTR_FORMAT " top " PTR_FORMAT + " end " PTR_FORMAT " size " SIZE_FORMAT, + bottom(), top(), end(), word_size()); +} + + +void Metachunk::verify() { +#ifdef ASSERT + // Cannot walk through the blocks unless the blocks have + // headers with sizes. + MetaWord* curr = bottom() + overhead(); + while (curr < top()) { + Metablock* block = (Metablock*) curr; + size_t word_size = block->word_size(); + block->verify(); + curr = curr + word_size; + } +#endif + return; +} + +// BlockFreelist methods + +#ifdef DEALLOCATE_BLOCKS +BlockFreelist::BlockFreelist() : _dictionary(NULL) {} +#else +BlockFreelist::BlockFreelist() {} +#endif + +BlockFreelist::~BlockFreelist() { +#ifdef DEALLOCATE_BLOCKS + if (_dictionary != NULL) { + if (Verbose && TraceMetadataChunkAllocation) { + _dictionary->print_free_lists(gclog_or_tty); + } + delete _dictionary; + } +#endif +} + +Metablock* BlockFreelist::initialize_free_chunk(Metablock* block, size_t word_size) { +#ifdef DEALLOCATE_BLOCKS +#ifdef ASSERT + assert(word_size = block->word_size(), "Wrong chunk size"); +#endif + Metablock* result = block; + result->setSize(word_size); + result->linkPrev(NULL); + result->linkNext(NULL); + + return result; +#else + ShouldNotReachHere(); + return block; +#endif +} + +void BlockFreelist::return_block(Metablock* block, size_t word_size) { +#ifdef ASSERT + assert(word_size = block->word_size(), "Block size is wrong");; +#endif + Metablock* free_chunk = initialize_free_chunk(block, word_size); +#ifdef DEALLOCATE_BLOCKS + if (dictionary() == NULL) { + _dictionary = new BinaryTreeDictionary(false /* adaptive_freelists */); + } + dictionary()->returnChunk(free_chunk); +#endif +} + +Metablock* BlockFreelist::get_block(size_t word_size) { +#ifdef DEALLOCATE_BLOCKS + if (dictionary() == NULL) { + return NULL; + } + + Metablock* free_chunk = + dictionary()->getChunk(word_size, FreeBlockDictionary::exactly); +#else + Metablock* free_chunk = NULL; +#endif + if (free_chunk == NULL) { + return NULL; + } + assert(free_chunk->word_size() == word_size, "Size of chunk is incorrect"); + Metablock* block = Metablock::initialize((MetaWord*) free_chunk, word_size); +#ifdef ASSERT + assert(block->word_size() == word_size, "Block size is not set correctly"); +#endif + + return block; +} + +void BlockFreelist::print_on(outputStream* st) const { +#ifdef DEALLOCATE_BLOCKS + if (dictionary() == NULL) { + return; + } + dictionary()->print_free_lists(st); +#else + return; +#endif +} + +// VirtualSpaceNode methods + +VirtualSpaceNode::~VirtualSpaceNode() { + _rs.release(); +} + +size_t VirtualSpaceNode::used_words_in_vs() const { + return pointer_delta(top(), bottom(), sizeof(MetaWord)); +} + +// Space committed in the VirtualSpace +size_t VirtualSpaceNode::capacity_words_in_vs() const { + return pointer_delta(end(), bottom(), sizeof(MetaWord)); +} + + +// Allocates the chunk from the virtual space only. +// This interface is also used internally for debugging. Not all +// chunks removed here are necessarily used for allocation. +Metachunk* VirtualSpaceNode::take_from_committed(size_t chunk_word_size) { + // Bottom of the new chunk + MetaWord* chunk_limit = top(); + assert(chunk_limit != NULL, "Not safe to call this method"); + + if (!is_available(chunk_word_size)) { + if (TraceMetadataChunkAllocation) { + tty->print("VirtualSpaceNode::take_from_committed() not available %d words ", chunk_word_size); + // Dump some information about the virtual space that is nearly full + print_on(tty); + } + return NULL; + } + + // Take the space (bump top on the current virtual space). + inc_top(chunk_word_size); + + // Point the chunk at the space + Metachunk* result = Metachunk::initialize(chunk_limit, chunk_word_size); + return result; +} + + +// Expand the virtual space (commit more of the reserved space) +bool VirtualSpaceNode::expand_by(size_t words, bool pre_touch) { + size_t bytes = words * BytesPerWord; + bool result = virtual_space()->expand_by(bytes, pre_touch); + if (TraceMetavirtualspaceAllocation && !result) { + gclog_or_tty->print_cr("VirtualSpaceNode::expand_by() failed " + "for byte size " SIZE_FORMAT, bytes); + virtual_space()->print(); + } + return result; +} + +// Shrink the virtual space (commit more of the reserved space) +bool VirtualSpaceNode::shrink_by(size_t words) { + size_t bytes = words * BytesPerWord; + virtual_space()->shrink_by(bytes); + return true; +} + +// Add another chunk to the chunk list. + +Metachunk* VirtualSpaceNode::get_chunk_vs(size_t chunk_word_size) { + assert_lock_strong(SpaceManager::expand_lock()); + Metachunk* result = NULL; + + return take_from_committed(chunk_word_size); +} + +Metachunk* VirtualSpaceNode::get_chunk_vs_with_expand(size_t chunk_word_size) { + assert_lock_strong(SpaceManager::expand_lock()); + + Metachunk* new_chunk = get_chunk_vs(chunk_word_size); + + if (new_chunk == NULL) { + // Only a small part of the virtualspace is committed when first + // allocated so committing more here can be expected. + size_t page_size_words = os::vm_page_size() / BytesPerWord; + size_t aligned_expand_vs_by_words = align_size_up(chunk_word_size, + page_size_words); + expand_by(aligned_expand_vs_by_words, false); + new_chunk = get_chunk_vs(chunk_word_size); + } + return new_chunk; +} + +bool VirtualSpaceNode::initialize() { + + if (!_rs.is_reserved()) { + return false; + } + + // Commit only 1 page instead of the whole reserved space _rs.size() + size_t committed_byte_size = os::vm_page_size(); + bool result = virtual_space()->initialize(_rs, committed_byte_size); + if (result) { + set_top((MetaWord*)virtual_space()->low()); + set_reserved(MemRegion((HeapWord*)_rs.base(), + (HeapWord*)(_rs.base() + _rs.size()))); + } + + assert(reserved()->start() == (HeapWord*) _rs.base(), + err_msg("Reserved start was not set properly " PTR_FORMAT + " != " PTR_FORMAT, reserved()->start(), _rs.base())); + assert(reserved()->word_size() == _rs.size() / BytesPerWord, + err_msg("Reserved size was not set properly " SIZE_FORMAT + " != " SIZE_FORMAT, reserved()->word_size(), + _rs.size() / BytesPerWord)); + + return result; +} + +void VirtualSpaceNode::print_on(outputStream* st) const { + size_t used = used_words_in_vs(); + size_t capacity = capacity_words_in_vs(); + VirtualSpace* vs = virtual_space(); + st->print_cr(" space @ " PTR_FORMAT " " SIZE_FORMAT "K, %3d%% used " + "[" PTR_FORMAT ", " PTR_FORMAT ", " + PTR_FORMAT ", " PTR_FORMAT ")", + vs, capacity / K, used * 100 / capacity, + bottom(), top(), end(), + vs->high_boundary()); +} + +void VirtualSpaceNode::mangle() { + size_t word_size = capacity_words_in_vs(); + Copy::fill_to_words((HeapWord*) low(), word_size, 0xf1f1f1f1); +} + +// VirtualSpaceList methods +// Space allocated from the VirtualSpace + +VirtualSpaceList::~VirtualSpaceList() { + VirtualSpaceListIterator iter(virtual_space_list()); + while (iter.repeat()) { + VirtualSpaceNode* vsl = iter.get_next(); + delete vsl; + } +} + +size_t VirtualSpaceList::used_words_sum() { + size_t allocated_by_vs = 0; + VirtualSpaceListIterator iter(virtual_space_list()); + while (iter.repeat()) { + VirtualSpaceNode* vsl = iter.get_next(); + // Sum used region [bottom, top) in each virtualspace + allocated_by_vs += vsl->used_words_in_vs(); + } + assert(allocated_by_vs >= chunk_manager()->free_chunks_total(), + err_msg("Total in free chunks " SIZE_FORMAT + " greater than total from virtual_spaces " SIZE_FORMAT, + allocated_by_vs, chunk_manager()->free_chunks_total())); + size_t used = + allocated_by_vs - chunk_manager()->free_chunks_total(); + return used; +} + +// Space available in all MetadataVirtualspaces allocated +// for metadata. This is the upper limit on the capacity +// of chunks allocated out of all the MetadataVirtualspaces. +size_t VirtualSpaceList::capacity_words_sum() { + size_t capacity = 0; + VirtualSpaceListIterator iter(virtual_space_list()); + while (iter.repeat()) { + VirtualSpaceNode* vsl = iter.get_next(); + capacity += vsl->capacity_words_in_vs(); + } + return capacity; +} + +VirtualSpaceList::VirtualSpaceList(size_t word_size ) : + _is_class(false), + _virtual_space_list(NULL), + _current_virtual_space(NULL), + _virtual_space_total(0), + _virtual_space_count(0) { + MutexLockerEx cl(SpaceManager::expand_lock(), + Mutex::_no_safepoint_check_flag); + bool initialization_succeeded = grow_vs(word_size); + + assert(initialization_succeeded, + " VirtualSpaceList initialization should not fail"); +} + +VirtualSpaceList::VirtualSpaceList(ReservedSpace rs) : + _is_class(true), + _virtual_space_list(NULL), + _current_virtual_space(NULL), + _virtual_space_total(0), + _virtual_space_count(0) { + MutexLockerEx cl(SpaceManager::expand_lock(), + Mutex::_no_safepoint_check_flag); + VirtualSpaceNode* class_entry = new VirtualSpaceNode(rs); + bool succeeded = class_entry->initialize(); + assert(succeeded, " VirtualSpaceList initialization should not fail"); + link_vs(class_entry, rs.size()/BytesPerWord); +} + +// Allocate another meta virtual space and add it to the list. +bool VirtualSpaceList::grow_vs(size_t vs_word_size) { + assert_lock_strong(SpaceManager::expand_lock()); + if (vs_word_size == 0) { + return false; + } + // Reserve the space + size_t vs_byte_size = vs_word_size * BytesPerWord; + assert(vs_byte_size % os::vm_page_size() == 0, "Not aligned"); + + // Allocate the meta virtual space and initialize it. + VirtualSpaceNode* new_entry = new VirtualSpaceNode(vs_byte_size); + if (!new_entry->initialize()) { + delete new_entry; + return false; + } else { + link_vs(new_entry, vs_word_size); + return true; + } +} + +void VirtualSpaceList::link_vs(VirtualSpaceNode* new_entry, size_t vs_word_size) { + if (virtual_space_list() == NULL) { + set_virtual_space_list(new_entry); + } else { + current_virtual_space()->set_next(new_entry); + } + set_current_virtual_space(new_entry); + inc_virtual_space_total(vs_word_size); + inc_virtual_space_count(); +#ifdef ASSERT + new_entry->mangle(); +#endif + if (TraceMetavirtualspaceAllocation && Verbose) { + VirtualSpaceNode* vsl = current_virtual_space(); + vsl->print_on(tty); + } +} + +Metachunk* VirtualSpaceList::get_new_chunk(size_t word_size, + size_t grow_chunks_by_words) { + + // Get a chunk from the chunk freelist + Metachunk* next = chunk_manager()->chunk_freelist_allocate(grow_chunks_by_words); + + // Allocate a chunk out of the current virtual space. + if (next == NULL) { + next = current_virtual_space()->get_chunk_vs(grow_chunks_by_words); + } + + if (next == NULL) { + // Not enough room in current virtual space. Try to commit + // more space. + size_t expand_vs_by_words = MAX2((size_t)SpaceManager::MediumChunkBunch, + grow_chunks_by_words); + size_t page_size_words = os::vm_page_size() / BytesPerWord; + size_t aligned_expand_vs_by_words = align_size_up(expand_vs_by_words, + page_size_words); + bool vs_expanded = + current_virtual_space()->expand_by(aligned_expand_vs_by_words, false); + if (!vs_expanded) { + // Should the capacity of the metaspaces be expanded for + // this allocation? If it's the virtual space for classes and is + // being used for CompressedHeaders, don't allocate a new virtualspace. + if (can_grow() && MetaspaceGC::should_expand(this, word_size)) { + // Get another virtual space. + size_t grow_vs_words = + MAX2((size_t)VirtualSpaceSize, aligned_expand_vs_by_words); + if (grow_vs(grow_vs_words)) { + // Got it. It's on the list now. Get a chunk from it. + next = current_virtual_space()->get_chunk_vs_with_expand(grow_chunks_by_words); + } + if (TraceMetadataHumongousAllocation && SpaceManager::is_humongous(word_size)) { + gclog_or_tty->print_cr(" aligned_expand_vs_by_words " PTR_FORMAT, + aligned_expand_vs_by_words); + gclog_or_tty->print_cr(" grow_vs_words " PTR_FORMAT, + grow_vs_words); + } + } else { + // Allocation will fail and induce a GC + if (TraceMetadataChunkAllocation && Verbose) { + gclog_or_tty->print_cr("VirtualSpaceList::get_new_chunk():" + " Fail instead of expand the metaspace"); + } + } + } else { + // The virtual space expanded, get a new chunk + next = current_virtual_space()->get_chunk_vs(grow_chunks_by_words); + assert(next != NULL, "Just expanded, should succeed"); + } + } + + return next; +} + +void VirtualSpaceList::print_on(outputStream* st) const { + if (TraceMetadataChunkAllocation && Verbose) { + VirtualSpaceListIterator iter(virtual_space_list()); + while (iter.repeat()) { + VirtualSpaceNode* node = iter.get_next(); + node->print_on(st); + } + } +} + +#ifndef PRODUCT +bool VirtualSpaceList::contains(const void *ptr) { + VirtualSpaceNode* list = virtual_space_list(); + VirtualSpaceListIterator iter(list); + while (iter.repeat()) { + VirtualSpaceNode* node = iter.get_next(); + if (node->reserved()->contains(ptr)) { + return true; + } + } + return false; +} +#endif // PRODUCT + + +// MetaspaceGC methods + +// VM_CollectForMetadataAllocation is the vm operation used to GC. +// Within the VM operation after the GC the attempt to allocate the metadata +// should succeed. If the GC did not free enough space for the metaspace +// allocation, the HWM is increased so that another virtualspace will be +// allocated for the metadata. With perm gen the increase in the perm +// gen had bounds, MinMetaspaceExpansion and MaxMetaspaceExpansion. The +// metaspace policy uses those as the small and large steps for the HWM. +// +// After the GC the compute_new_size() for MetaspaceGC is called to +// resize the capacity of the metaspaces. The current implementation +// is based on the flags MinHeapFreeRatio and MaxHeapFreeRatio used +// to resize the Java heap by some GC's. New flags can be implemented +// if really needed. MinHeapFreeRatio is used to calculate how much +// free space is desirable in the metaspace capacity to decide how much +// to increase the HWM. MaxHeapFreeRatio is used to decide how much +// free space is desirable in the metaspace capacity before decreasing +// the HWM. + +// Calculate the amount to increase the high water mark (HWM). +// Increase by a minimum amount (MinMetaspaceExpansion) so that +// another expansion is not requested too soon. If that is not +// enough to satisfy the allocation (i.e. big enough for a word_size +// allocation), increase by MaxMetaspaceExpansion. If that is still +// not enough, expand by the size of the allocation (word_size) plus +// some. +size_t MetaspaceGC::delta_capacity_until_GC(size_t word_size) { + size_t before_inc = MetaspaceGC::capacity_until_GC(); + size_t min_delta_words = MinMetaspaceExpansion / BytesPerWord; + size_t max_delta_words = MaxMetaspaceExpansion / BytesPerWord; + size_t page_size_words = os::vm_page_size() / BytesPerWord; + size_t size_delta_words = align_size_up(word_size, page_size_words); + size_t delta_words = MAX2(size_delta_words, min_delta_words); + if (delta_words > min_delta_words) { + // Don't want to hit the high water mark on the next + // allocation so make the delta greater than just enough + // for this allocation. + delta_words = MAX2(delta_words, max_delta_words); + if (delta_words > max_delta_words) { + // This allocation is large but the next ones are probably not + // so increase by the minimum. + delta_words = delta_words + min_delta_words; + } + } + return delta_words; +} + +bool MetaspaceGC::should_expand(VirtualSpaceList* vsl, size_t word_size) { + + // Class virtual space should always be expanded. Call GC for the other + // metadata virtual space. + if (vsl == Metaspace::class_space_list()) return true; + + // If the user wants a limit, impose one. + size_t max_metaspace_size_words = MaxMetaspaceSize / BytesPerWord; + size_t metaspace_size_words = MetaspaceSize / BytesPerWord; + if (!FLAG_IS_DEFAULT(MaxMetaspaceSize) && + vsl->capacity_words_sum() >= max_metaspace_size_words) { + return false; + } + + // If this is part of an allocation after a GC, expand + // unconditionally. + if(MetaspaceGC::expand_after_GC()) { + return true; + } + + // If the capacity is below the minimum capacity, allow the + // expansion. Also set the high-water-mark (capacity_until_GC) + // to that minimum capacity so that a GC will not be induced + // until that minimum capacity is exceeded. + if (vsl->capacity_words_sum() < metaspace_size_words || + capacity_until_GC() == 0) { + set_capacity_until_GC(metaspace_size_words); + return true; + } else { + if (vsl->capacity_words_sum() < capacity_until_GC()) { + return true; + } else { + if (TraceMetadataChunkAllocation && Verbose) { + gclog_or_tty->print_cr(" allocation request size " SIZE_FORMAT + " capacity_until_GC " SIZE_FORMAT + " capacity_words_sum " SIZE_FORMAT + " used_words_sum " SIZE_FORMAT + " free chunks " SIZE_FORMAT + " free chunks count %d", + word_size, + capacity_until_GC(), + vsl->capacity_words_sum(), + vsl->used_words_sum(), + vsl->chunk_manager()->free_chunks_total(), + vsl->chunk_manager()->free_chunks_count()); + } + return false; + } + } +} + +// Variables are in bytes + +void MetaspaceGC::compute_new_size() { + assert(_shrink_factor <= 100, "invalid shrink factor"); + uint current_shrink_factor = _shrink_factor; + _shrink_factor = 0; + + VirtualSpaceList *vsl = Metaspace::space_list(); + + size_t capacity_after_gc = vsl->capacity_bytes_sum(); + // Check to see if these two can be calculated without walking the CLDG + size_t used_after_gc = vsl->used_bytes_sum(); + size_t capacity_until_GC = vsl->capacity_bytes_sum(); + size_t free_after_gc = capacity_until_GC - used_after_gc; + + const double minimum_free_percentage = MinHeapFreeRatio / 100.0; + const double maximum_used_percentage = 1.0 - minimum_free_percentage; + + const double min_tmp = used_after_gc / maximum_used_percentage; + size_t minimum_desired_capacity = + (size_t)MIN2(min_tmp, double(max_uintx)); + // Don't shrink less than the initial generation size + minimum_desired_capacity = MAX2(minimum_desired_capacity, + MetaspaceSize); + + if (PrintGCDetails && Verbose) { + const double free_percentage = ((double)free_after_gc) / capacity_until_GC; + gclog_or_tty->print_cr("\nMetaspaceGC::compute_new_size: "); + gclog_or_tty->print_cr(" " + " minimum_free_percentage: %6.2f" + " maximum_used_percentage: %6.2f", + minimum_free_percentage, + maximum_used_percentage); + double d_free_after_gc = free_after_gc / (double) K; + gclog_or_tty->print_cr(" " + " free_after_gc : %6.1fK" + " used_after_gc : %6.1fK" + " capacity_after_gc : %6.1fK" + " metaspace HWM : %6.1fK", + free_after_gc / (double) K, + used_after_gc / (double) K, + capacity_after_gc / (double) K, + capacity_until_GC / (double) K); + gclog_or_tty->print_cr(" " + " free_percentage: %6.2f", + free_percentage); + } + + + if (capacity_until_GC < minimum_desired_capacity) { + // If we have less capacity below the metaspace HWM, then + // increment the HWM. + size_t expand_bytes = minimum_desired_capacity - capacity_until_GC; + // Don't expand unless it's significant + if (expand_bytes >= MinMetaspaceExpansion) { + size_t expand_words = expand_bytes / BytesPerWord; + MetaspaceGC::inc_capacity_until_GC(expand_words); + } + if (PrintGCDetails && Verbose) { + size_t new_capacity_until_GC = MetaspaceGC::capacity_until_GC_in_bytes(); + gclog_or_tty->print_cr(" expanding:" + " minimum_desired_capacity: %6.1fK" + " expand_words: %6.1fK" + " MinMetaspaceExpansion: %6.1fK" + " new metaspace HWM: %6.1fK", + minimum_desired_capacity / (double) K, + expand_bytes / (double) K, + MinMetaspaceExpansion / (double) K, + new_capacity_until_GC / (double) K); + } + return; + } + + // No expansion, now see if we want to shrink + size_t shrink_words = 0; + // We would never want to shrink more than this + size_t max_shrink_words = capacity_until_GC - minimum_desired_capacity; + assert(max_shrink_words >= 0, err_msg("max_shrink_words " SIZE_FORMAT, + max_shrink_words)); + + // Should shrinking be considered? + if (MaxHeapFreeRatio < 100) { + const double maximum_free_percentage = MaxHeapFreeRatio / 100.0; + const double minimum_used_percentage = 1.0 - maximum_free_percentage; + const double max_tmp = used_after_gc / minimum_used_percentage; + size_t maximum_desired_capacity = (size_t)MIN2(max_tmp, double(max_uintx)); + maximum_desired_capacity = MAX2(maximum_desired_capacity, + MetaspaceSize); + if (PrintGC && Verbose) { + gclog_or_tty->print_cr(" " + " maximum_free_percentage: %6.2f" + " minimum_used_percentage: %6.2f", + maximum_free_percentage, + minimum_used_percentage); + gclog_or_tty->print_cr(" " + " capacity_until_GC: %6.1fK" + " minimum_desired_capacity: %6.1fK" + " maximum_desired_capacity: %6.1fK", + capacity_until_GC / (double) K, + minimum_desired_capacity / (double) K, + maximum_desired_capacity / (double) K); + } + + assert(minimum_desired_capacity <= maximum_desired_capacity, + "sanity check"); + + if (capacity_until_GC > maximum_desired_capacity) { + // Capacity too large, compute shrinking size + shrink_words = capacity_until_GC - maximum_desired_capacity; + // We don't want shrink all the way back to initSize if people call + // System.gc(), because some programs do that between "phases" and then + // we'd just have to grow the heap up again for the next phase. So we + // damp the shrinking: 0% on the first call, 10% on the second call, 40% + // on the third call, and 100% by the fourth call. But if we recompute + // size without shrinking, it goes back to 0%. + shrink_words = shrink_words / 100 * current_shrink_factor; + assert(shrink_words <= max_shrink_words, + err_msg("invalid shrink size " SIZE_FORMAT " not <= " SIZE_FORMAT, + shrink_words, max_shrink_words)); + if (current_shrink_factor == 0) { + _shrink_factor = 10; + } else { + _shrink_factor = MIN2(current_shrink_factor * 4, (uint) 100); + } + if (PrintGCDetails && Verbose) { + gclog_or_tty->print_cr(" " + " shrinking:" + " initSize: %.1fK" + " maximum_desired_capacity: %.1fK", + MetaspaceSize / (double) K, + maximum_desired_capacity / (double) K); + gclog_or_tty->print_cr(" " + " shrink_words: %.1fK" + " current_shrink_factor: %d" + " new shrink factor: %d" + " MinMetaspaceExpansion: %.1fK", + shrink_words / (double) K, + current_shrink_factor, + _shrink_factor, + MinMetaspaceExpansion / (double) K); + } + } + } + + + // Don't shrink unless it's significant + if (shrink_words >= MinMetaspaceExpansion) { + VirtualSpaceNode* csp = vsl->current_virtual_space(); + size_t available_to_shrink = csp->capacity_words_in_vs() - + csp->used_words_in_vs(); + shrink_words = MIN2(shrink_words, available_to_shrink); + csp->shrink_by(shrink_words); + MetaspaceGC::dec_capacity_until_GC(shrink_words); + if (PrintGCDetails && Verbose) { + size_t new_capacity_until_GC = MetaspaceGC::capacity_until_GC_in_bytes(); + gclog_or_tty->print_cr(" metaspace HWM: %.1fK", new_capacity_until_GC / (double) K); + } + } + assert(vsl->used_bytes_sum() == used_after_gc && + used_after_gc <= vsl->capacity_bytes_sum(), + "sanity check"); + +} + +// Metadebug methods + +void Metadebug::deallocate_chunk_a_lot(SpaceManager* sm, + size_t chunk_word_size){ +#ifdef ASSERT + VirtualSpaceList* vsl = sm->vs_list(); + if (MetaDataDeallocateALot && + Metadebug::deallocate_chunk_a_lot_count() % MetaDataDeallocateALotInterval == 0 ) { + Metadebug::reset_deallocate_chunk_a_lot_count(); + for (uint i = 0; i < metadata_deallocate_a_lock_chunk; i++) { + Metachunk* dummy_chunk = vsl->current_virtual_space()->take_from_committed(chunk_word_size); + if (dummy_chunk == NULL) { + break; + } + vsl->chunk_manager()->chunk_freelist_deallocate(dummy_chunk); + + if (TraceMetadataChunkAllocation && Verbose) { + gclog_or_tty->print("Metadebug::deallocate_chunk_a_lot: %d) ", + sm->sum_count_in_chunks_in_use()); + dummy_chunk->print_on(gclog_or_tty); + gclog_or_tty->print_cr(" Free chunks total %d count %d", + vsl->chunk_manager()->free_chunks_total(), + vsl->chunk_manager()->free_chunks_count()); + } + } + } else { + Metadebug::inc_deallocate_chunk_a_lot_count(); + } +#endif +} + +void Metadebug::deallocate_block_a_lot(SpaceManager* sm, + size_t raw_word_size){ +#ifdef ASSERT + if (MetaDataDeallocateALot && + Metadebug::deallocate_block_a_lot_count() % MetaDataDeallocateALotInterval == 0 ) { + Metadebug::set_deallocate_block_a_lot_count(0); + for (uint i = 0; i < metadata_deallocate_a_lot_block; i++) { + Metablock* dummy_block = sm->allocate_work(raw_word_size); + if (dummy_block == 0) { + break; + } +#ifdef ASSERT + assert(dummy_block->word_size() == raw_word_size, "Block size is not set correctly"); +#endif + sm->deallocate(dummy_block->data()); + } + } else { + Metadebug::inc_deallocate_block_a_lot_count(); + } +#endif +} + +void Metadebug::init_allocation_fail_alot_count() { + if (MetadataAllocationFailALot) { + _allocation_fail_alot_count = + 1+(long)((double)MetadataAllocationFailALotInterval*os::random()/(max_jint+1.0)); + } +} + +#ifdef ASSERT +bool Metadebug::test_metadata_failure() { + if (MetadataAllocationFailALot && + Threads::is_vm_complete()) { + if (_allocation_fail_alot_count > 0) { + _allocation_fail_alot_count--; + } else { + if (TraceMetadataChunkAllocation && Verbose) { + gclog_or_tty->print_cr("Metadata allocation failing for " + "MetadataAllocationFailALot"); + } + init_allocation_fail_alot_count(); + return true; + } + } + return false; +} +#endif + +// ChunkList methods + +size_t ChunkList::sum_list_size() { + size_t result = 0; + Metachunk* cur = head(); + while (cur != NULL) { + result += cur->word_size(); + cur = cur->next(); + } + return result; +} + +size_t ChunkList::sum_list_count() { + size_t result = 0; + Metachunk* cur = head(); + while (cur != NULL) { + result++; + cur = cur->next(); + } + return result; +} + +size_t ChunkList::sum_list_capacity() { + size_t result = 0; + Metachunk* cur = head(); + while (cur != NULL) { + result += cur->capacity_word_size(); + cur = cur->next(); + } + return result; +} + +void ChunkList::add_at_head(Metachunk* head, Metachunk* tail) { + assert_lock_strong(SpaceManager::expand_lock()); + assert(tail->next() == NULL, "Not the tail"); + + if (TraceMetadataChunkAllocation && Verbose) { + tty->print("ChunkList::add_at_head: "); + Metachunk* cur = head; + while (cur != NULL) { + tty->print(PTR_FORMAT " (" SIZE_FORMAT ") ", cur, cur->word_size()); + cur = cur->next(); + } + tty->print_cr(""); + } + + if (tail != NULL) { + tail->set_next(_head); + } + set_head(head); +} + +void ChunkList::add_at_head(Metachunk* list) { + if (list == NULL) { + // Nothing to add + return; + } + assert_lock_strong(SpaceManager::expand_lock()); + Metachunk* head = list; + Metachunk* tail = list; + Metachunk* cur = head->next(); + // Search for the tail since it is not passed. + while (cur != NULL) { + tail = cur; + cur = cur->next(); + } + add_at_head(head, tail); +} + +// ChunkManager methods + +// Verification of _free_chunks_total and _free_chunks_count does not +// work with the CMS collector because its use of additional locks +// complicate the mutex deadlock detection but it can still be useful +// for detecting errors in the chunk accounting with other collectors. + +size_t ChunkManager::free_chunks_total() { +#ifdef ASSERT + if (!UseConcMarkSweepGC && !SpaceManager::expand_lock()->is_locked()) { + MutexLockerEx cl(SpaceManager::expand_lock(), + Mutex::_no_safepoint_check_flag); + locked_verify_free_chunks_total(); + } +#endif + return _free_chunks_total; +} + +size_t ChunkManager::free_chunks_total_in_bytes() { + return free_chunks_total() * BytesPerWord; +} + +size_t ChunkManager::free_chunks_count() { +#ifdef ASSERT + if (!UseConcMarkSweepGC && !SpaceManager::expand_lock()->is_locked()) { + MutexLockerEx cl(SpaceManager::expand_lock(), + Mutex::_no_safepoint_check_flag); + // This lock is only needed in debug because the verification + // of the _free_chunks_totals walks the list of free chunks + locked_verify_free_chunks_count(); + } +#endif + return _free_chunks_count; +} + +void ChunkManager::locked_verify_free_chunks_total() { + assert_lock_strong(SpaceManager::expand_lock()); + assert(sum_free_chunks() == _free_chunks_total, + err_msg("_free_chunks_total " SIZE_FORMAT " is not the" + " same as sum " SIZE_FORMAT, _free_chunks_total, + sum_free_chunks())); +} + +void ChunkManager::verify_free_chunks_total() { + MutexLockerEx cl(SpaceManager::expand_lock(), + Mutex::_no_safepoint_check_flag); + locked_verify_free_chunks_total(); +} + +void ChunkManager::locked_verify_free_chunks_count() { + assert_lock_strong(SpaceManager::expand_lock()); + assert(sum_free_chunks_count() == _free_chunks_count, + err_msg("_free_chunks_count " SIZE_FORMAT " is not the" + " same as sum " SIZE_FORMAT, _free_chunks_count, + sum_free_chunks_count())); +} + +void ChunkManager::verify_free_chunks_count() { +#ifdef ASSERT + MutexLockerEx cl(SpaceManager::expand_lock(), + Mutex::_no_safepoint_check_flag); + locked_verify_free_chunks_count(); +#endif +} + +void ChunkManager::verify() { +#ifdef ASSERT + if (!UseConcMarkSweepGC) { + MutexLockerEx cl(SpaceManager::expand_lock(), + Mutex::_no_safepoint_check_flag); + locked_verify_free_chunks_total(); + locked_verify_free_chunks_count(); + } +#endif +} + +void ChunkManager::locked_verify() { + locked_verify_free_chunks_total(); + locked_verify_free_chunks_count(); +} + +void ChunkManager::locked_print_free_chunks(outputStream* st) { + assert_lock_strong(SpaceManager::expand_lock()); + st->print_cr("Free chunk total 0x%x count 0x%x", + _free_chunks_total, _free_chunks_count); +} + +void ChunkManager::locked_print_sum_free_chunks(outputStream* st) { + assert_lock_strong(SpaceManager::expand_lock()); + st->print_cr("Sum free chunk total 0x%x count 0x%x", + sum_free_chunks(), sum_free_chunks_count()); +} +ChunkList* ChunkManager::free_chunks(ChunkIndex index) { + return &_free_chunks[index]; +} + + +// These methods that sum the free chunk lists are used in printing +// methods that are used in product builds. +size_t ChunkManager::sum_free_chunks() { + assert_lock_strong(SpaceManager::expand_lock()); + size_t result = 0; + for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + ChunkList* list = free_chunks(i); + + if (list == NULL) { + continue; + } + + result = result + list->sum_list_capacity(); + } + return result; +} + +size_t ChunkManager::sum_free_chunks_count() { + assert_lock_strong(SpaceManager::expand_lock()); + size_t count = 0; + for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + ChunkList* list = free_chunks(i); + if (list == NULL) { + continue; + } + count = count + list->sum_list_count(); + } + return count; +} + +ChunkList* ChunkManager::find_free_chunks_list(size_t word_size) { + switch (word_size) { + case SpaceManager::SmallChunk : + return &_free_chunks[0]; + case SpaceManager::MediumChunk : + return &_free_chunks[1]; + default: + assert(word_size > SpaceManager::MediumChunk, "List inconsistency"); + return &_free_chunks[2]; + } +} + +void ChunkManager::free_chunks_put(Metachunk* chunk) { + assert_lock_strong(SpaceManager::expand_lock()); + ChunkList* free_list = find_free_chunks_list(chunk->word_size()); + chunk->set_next(free_list->head()); + free_list->set_head(chunk); + // chunk is being returned to the chunk free list + inc_free_chunks_total(chunk->capacity_word_size()); + locked_verify(); +} + +void ChunkManager::chunk_freelist_deallocate(Metachunk* chunk) { + // The deallocation of a chunk originates in the freelist + // manangement code for a Metaspace and does not hold the + // lock. + assert(chunk != NULL, "Deallocating NULL"); + // MutexLockerEx fcl(SpaceManager::expand_lock(), Mutex::_no_safepoint_check_flag); + locked_verify(); + if (TraceMetadataChunkAllocation) { + tty->print_cr("ChunkManager::chunk_freelist_deallocate: chunk " + PTR_FORMAT " size " SIZE_FORMAT, + chunk, chunk->word_size()); + } + free_chunks_put(chunk); +} + +Metachunk* ChunkManager::free_chunks_get(size_t word_size) { + assert_lock_strong(SpaceManager::expand_lock()); + + locked_verify(); + ChunkList* free_list = find_free_chunks_list(word_size); + assert(free_list != NULL, "Sanity check"); + + Metachunk* chunk = free_list->head(); + debug_only(Metachunk* debug_head = chunk;) + + if (chunk == NULL) { + return NULL; + } + + Metachunk* prev_chunk = chunk; + if (chunk->word_size() == word_size) { + // Chunk is being removed from the chunks free list. + dec_free_chunks_total(chunk->capacity_word_size()); + // Remove the chunk as the head of the list. + free_list->set_head(chunk->next()); + chunk->set_next(NULL); + + if (TraceMetadataChunkAllocation && Verbose) { + tty->print_cr("ChunkManager::free_chunks_get: free_list " + PTR_FORMAT " head " PTR_FORMAT " size " SIZE_FORMAT, + free_list, chunk, chunk->word_size()); + } + } else { + assert(SpaceManager::is_humongous(word_size), + "Should only need to check humongous"); + // This code to find the best fit is just for purposes of + // investigating the loss due to fragmentation on a humongous + // chunk. It will be replace by a binaryTreeDictionary for + // the humongous chunks. + uint count = 0; + Metachunk* best_fit = NULL; + Metachunk* best_fit_prev = NULL; + while (chunk != NULL) { + count++; + if (chunk->word_size() < word_size) { + prev_chunk = chunk; + chunk = chunk->next(); + } else if (chunk->word_size() == word_size) { + break; + } else { + if (best_fit == NULL || + best_fit->word_size() > chunk->word_size()) { + best_fit_prev = prev_chunk; + best_fit = chunk; + } + prev_chunk = chunk; + chunk = chunk->next(); + } + } + if (chunk == NULL) { + prev_chunk = best_fit_prev; + chunk = best_fit; + } + if (chunk != NULL) { + if (TraceMetadataHumongousAllocation) { + size_t waste = chunk->word_size() - word_size; + tty->print_cr("Free list allocate humongous chunk size " SIZE_FORMAT + " for requested size " SIZE_FORMAT + " waste " SIZE_FORMAT + " found at " SIZE_FORMAT " of " SIZE_FORMAT, + chunk->word_size(), word_size, waste, + count, free_list->sum_list_count()); + } + // Chunk is being removed from the chunks free list. + dec_free_chunks_total(chunk->capacity_word_size()); + // Remove the chunk if it is at the head of the list. + if (chunk == free_list->head()) { + free_list->set_head(chunk->next()); + + if (TraceMetadataHumongousAllocation) { + tty->print_cr("ChunkManager::free_chunks_get: humongous free_list " + PTR_FORMAT " chunk " PTR_FORMAT " size " SIZE_FORMAT + " new head " PTR_FORMAT, + free_list, chunk, chunk->word_size(), + free_list->head()); + } + } else { + // Remove a chunk in the interior of the list + prev_chunk->set_next(chunk->next()); + + if (TraceMetadataHumongousAllocation) { + tty->print_cr("ChunkManager::free_chunks_get: humongous free_list " + PTR_FORMAT " chunk " PTR_FORMAT " size " SIZE_FORMAT + PTR_FORMAT " prev " PTR_FORMAT " next " PTR_FORMAT, + free_list, chunk, chunk->word_size(), + prev_chunk, chunk->next()); + } + } + chunk->set_next(NULL); + } else { + if (TraceMetadataHumongousAllocation) { + tty->print_cr("ChunkManager::free_chunks_get: New humongous chunk of size " + SIZE_FORMAT, + word_size); + } + } + } + locked_verify(); + return chunk; +} + +Metachunk* ChunkManager::chunk_freelist_allocate(size_t word_size) { + assert_lock_strong(SpaceManager::expand_lock()); + locked_verify(); + + // Take from the beginning of the list + Metachunk* chunk = free_chunks_get(word_size); + if (chunk == NULL) { + return NULL; + } + + assert(word_size <= chunk->word_size() || + SpaceManager::is_humongous(chunk->word_size()), + "Non-humongous variable sized chunk"); + if (TraceMetadataChunkAllocation) { + tty->print("ChunkManager::chunk_freelist_allocate: chunk " + PTR_FORMAT " size " SIZE_FORMAT " ", + chunk, chunk->word_size()); + locked_print_free_chunks(tty); + } + + return chunk; +} + +// SpaceManager methods + +size_t SpaceManager::sum_free_in_chunks_in_use() const { + MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); + size_t free = 0; + for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + Metachunk* chunk = chunks_in_use(i); + while (chunk != NULL) { + free += chunk->free_word_size(); + chunk = chunk->next(); + } + } + return free; +} + +size_t SpaceManager::sum_waste_in_chunks_in_use() const { + MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); + size_t result = 0; + for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + // Count the free space in all the chunk but not the + // current chunk from which allocations are still being done. + result += sum_waste_in_chunks_in_use(i); + } + return result; +} + +size_t SpaceManager::sum_waste_in_chunks_in_use(ChunkIndex index) const { + size_t result = 0; + size_t count = 0; + Metachunk* chunk = chunks_in_use(index); + // Count the free space in all the chunk but not the + // current chunk from which allocations are still being done. + if (chunk != NULL) { + while (chunk != NULL) { + if (chunk != current_chunk()) { + result += chunk->free_word_size(); + } + chunk = chunk->next(); + count++; + } + } + return result; +} + +size_t SpaceManager::sum_capacity_in_chunks_in_use() const { + MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); + size_t sum = 0; + for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + Metachunk* chunk = chunks_in_use(i); + while (chunk != NULL) { + // Just changed this sum += chunk->capacity_word_size(); + // sum += chunk->word_size() - Metachunk::overhead(); + sum += chunk->capacity_word_size(); + chunk = chunk->next(); + } + } + return sum; +} + +size_t SpaceManager::sum_count_in_chunks_in_use() { + size_t count = 0; + for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + count = count + sum_count_in_chunks_in_use(i); + } + return count; +} + +size_t SpaceManager::sum_count_in_chunks_in_use(ChunkIndex i) { + size_t count = 0; + Metachunk* chunk = chunks_in_use(i); + while (chunk != NULL) { + count++; + chunk = chunk->next(); + } + return count; +} + + +size_t SpaceManager::sum_used_in_chunks_in_use() const { + MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); + size_t used = 0; + for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + Metachunk* chunk = chunks_in_use(i); + while (chunk != NULL) { + used += chunk->used_word_size(); + chunk = chunk->next(); + } + } + return used; +} + +void SpaceManager::locked_print_chunks_in_use_on(outputStream* st) const { + + Metachunk* small_chunk = chunks_in_use(SmallIndex); + st->print_cr("SpaceManager: small chunk " PTR_FORMAT + " free " SIZE_FORMAT, + small_chunk, + small_chunk->free_word_size()); + + Metachunk* medium_chunk = chunks_in_use(MediumIndex); + st->print("medium chunk " PTR_FORMAT, medium_chunk); + Metachunk* tail = current_chunk(); + st->print_cr(" current chunk " PTR_FORMAT, tail); + + Metachunk* head = chunks_in_use(HumongousIndex); + st->print_cr("humongous chunk " PTR_FORMAT, head); + + vs_list()->chunk_manager()->locked_print_free_chunks(st); + vs_list()->chunk_manager()->locked_print_sum_free_chunks(st); +} + +size_t SpaceManager::calc_chunk_size(size_t word_size) { + + // Decide between a small chunk and a medium chunk. Up to + // _small_chunk_limit small chunks can be allocated but + // once a medium chunk has been allocated, no more small + // chunks will be allocated. + size_t chunk_word_size; + if (chunks_in_use(MediumIndex) == NULL && + (!has_small_chunk_limit() || + sum_count_in_chunks_in_use(SmallIndex) < _small_chunk_limit)) { + chunk_word_size = (size_t) SpaceManager::SmallChunk; + if (word_size + Metachunk::overhead() > SpaceManager::SmallChunk) { + chunk_word_size = MediumChunk; + } + } else { + chunk_word_size = MediumChunk; + } + + // Might still need a humongous chunk + chunk_word_size = + MAX2((size_t) chunk_word_size, word_size + Metachunk::overhead()); + + if (TraceMetadataHumongousAllocation && + SpaceManager::is_humongous(word_size)) { + gclog_or_tty->print_cr("Metadata humongous allocation:"); + gclog_or_tty->print_cr(" word_size " PTR_FORMAT, word_size); + gclog_or_tty->print_cr(" chunk_word_size " PTR_FORMAT, + chunk_word_size); + gclog_or_tty->print_cr(" block overhead " PTR_FORMAT + " chunk overhead " PTR_FORMAT, + Metablock::overhead(), + Metachunk::overhead()); + } + return chunk_word_size; +} + +Metablock* SpaceManager::grow_and_allocate(size_t word_size) { + assert(vs_list()->current_virtual_space() != NULL, + "Should have been set"); + assert(current_chunk() == NULL || + current_chunk()->allocate(word_size) == NULL, + "Don't need to expand"); + MutexLockerEx cl(SpaceManager::expand_lock(), Mutex::_no_safepoint_check_flag); + + if (TraceMetadataChunkAllocation && Verbose) { + gclog_or_tty->print_cr("SpaceManager::grow_and_allocate for " SIZE_FORMAT + " words " SIZE_FORMAT " space left", + word_size, current_chunk() != NULL ? + current_chunk()->free_word_size() : 0); + } + + // Get another chunk out of the virtual space + size_t grow_chunks_by_words = calc_chunk_size(word_size); + Metachunk* next = vs_list()->get_new_chunk(word_size, grow_chunks_by_words); + + // If a chunk was available, add it to the in-use chunk list + // and do an allocation from it. + if (next != NULL) { + Metadebug::deallocate_chunk_a_lot(this, grow_chunks_by_words); + // Add to this manager's list of chunks in use. + add_chunk(next, false); + return next->allocate(word_size); + } + return NULL; +} + +void SpaceManager::print_on(outputStream* st) const { + + for (ChunkIndex i = SmallIndex; + i < NumberOfFreeLists ; + i = next_chunk_index(i) ) { + st->print_cr(" chunks_in_use " PTR_FORMAT " chunk size " PTR_FORMAT, + chunks_in_use(i), + chunks_in_use(i) == NULL ? 0 : chunks_in_use(i)->word_size()); + } + st->print_cr(" waste: Small " SIZE_FORMAT " Medium " SIZE_FORMAT + " Humongous " SIZE_FORMAT, + sum_waste_in_chunks_in_use(SmallIndex), + sum_waste_in_chunks_in_use(MediumIndex), + sum_waste_in_chunks_in_use(HumongousIndex)); + // Nothing in them yet + // block_freelists()->print_on(st); +} + +SpaceManager::SpaceManager(Mutex* lock, VirtualSpaceList* vs_list) : + _vs_list(vs_list), + _allocation_total(0), + _lock(lock) { + Metadebug::init_allocation_fail_alot_count(); + for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + _chunks_in_use[i] = NULL; + } + _current_chunk = NULL; + if (TraceMetadataChunkAllocation && Verbose) { + gclog_or_tty->print_cr("SpaceManager(): " PTR_FORMAT, this); + } +} + +SpaceManager::~SpaceManager() { + MutexLockerEx fcl(SpaceManager::expand_lock(), + Mutex::_no_safepoint_check_flag); + + ChunkManager* chunk_manager = vs_list()->chunk_manager(); + + chunk_manager->locked_verify(); + + if (TraceMetadataChunkAllocation && Verbose) { + gclog_or_tty->print_cr("~SpaceManager(): " PTR_FORMAT, this); + locked_print_chunks_in_use_on(gclog_or_tty); + } + + // Have to update before the chunks_in_use lists are emptied + // below. + chunk_manager->inc_free_chunks_total(sum_capacity_in_chunks_in_use(), + sum_count_in_chunks_in_use()); + +#ifdef ASSERT + // Mangle freed memory. + mangle_freed_chunks(); +#endif // ASSERT + + // Add all the chunks in use by this space manager + // to the global list of free chunks. + + // Small chunks. There is one _current_chunk for each + // Metaspace. It could point to a small or medium chunk. + // Rather than determine which it is, follow the list of + // small chunks to add them to the free list + Metachunk* small_chunk = chunks_in_use(SmallIndex); + chunk_manager->free_small_chunks()->add_at_head(small_chunk); + set_chunks_in_use(SmallIndex, NULL); + + // After the small chunk are the medium chunks + Metachunk* medium_chunk = chunks_in_use(MediumIndex); + assert(medium_chunk == NULL || + medium_chunk->word_size() == MediumChunk, + "Chunk is on the wrong list"); + + if (medium_chunk != NULL) { + Metachunk* head = medium_chunk; + // If there is a medium chunk then the _current_chunk can only + // point to the last medium chunk. + Metachunk* tail = current_chunk(); + chunk_manager->free_medium_chunks()->add_at_head(head, tail); + set_chunks_in_use(MediumIndex, NULL); + } + + // Humongous chunks + // Humongous chunks are never the current chunk. + Metachunk* humongous_chunks = chunks_in_use(HumongousIndex); + + if (humongous_chunks != NULL) { + chunk_manager->free_humongous_chunks()->add_at_head(humongous_chunks); + set_chunks_in_use(HumongousIndex, NULL); + } + chunk_manager->locked_verify(); +} + +void SpaceManager::deallocate(MetaWord* p) { + assert_lock_strong(_lock); + ShouldNotReachHere(); // Where is this needed. +#ifdef DEALLOCATE_BLOCKS + Metablock* block = Metablock::metablock_from_data(p); + // This is expense but kept it until integration JJJ + assert(contains((address)block), "Block does not belong to this metaspace"); + block_freelists()->return_block(block, word_size); +#endif +} + +// Adds a chunk to the list of chunks in use. +void SpaceManager::add_chunk(Metachunk* new_chunk, bool make_current) { + + assert(new_chunk != NULL, "Should not be NULL"); + assert(new_chunk->next() == NULL, "Should not be on a list"); + + new_chunk->reset_empty(); + + // Find the correct list and and set the current + // chunk for that list. + switch (new_chunk->word_size()) { + case SpaceManager::SmallChunk : + if (chunks_in_use(SmallIndex) == NULL) { + // First chunk to add to the list + set_chunks_in_use(SmallIndex, new_chunk); + } else { + assert(current_chunk()->word_size() == SpaceManager::SmallChunk, + err_msg( "Incorrect mix of sizes in chunk list " + SIZE_FORMAT " new chunk " SIZE_FORMAT, + current_chunk()->word_size(), new_chunk->word_size())); + current_chunk()->set_next(new_chunk); + } + // Make current chunk + set_current_chunk(new_chunk); + break; + case SpaceManager::MediumChunk : + if (chunks_in_use(MediumIndex) == NULL) { + // About to add the first medium chunk so teminate the + // small chunk list. In general once medium chunks are + // being added, we're past the need for small chunks. + if (current_chunk() != NULL) { + // Only a small chunk or the initial chunk could be + // the current chunk if this is the first medium chunk. + assert(current_chunk()->word_size() == SpaceManager::SmallChunk || + chunks_in_use(SmallIndex) == NULL, + err_msg("Should be a small chunk or initial chunk, current chunk " + SIZE_FORMAT " new chunk " SIZE_FORMAT, + current_chunk()->word_size(), new_chunk->word_size())); + current_chunk()->set_next(NULL); + } + // First chunk to add to the list + set_chunks_in_use(MediumIndex, new_chunk); + + } else { + // As a minimum the first medium chunk added would + // have become the _current_chunk + // so the _current_chunk has to be non-NULL here + // (although not necessarily still the first medium chunk). + assert(current_chunk()->word_size() == SpaceManager::MediumChunk, + "A medium chunk should the current chunk"); + current_chunk()->set_next(new_chunk); + } + // Make current chunk + set_current_chunk(new_chunk); + break; + default: { + // For null class loader data and DumpSharedSpaces, the first chunk isn't + // small, so small will be null. Link this first chunk as the current + // chunk. + if (make_current) { + // Set as the current chunk but otherwise treat as a humongous chunk. + set_current_chunk(new_chunk); + } + // Link at head. The _current_chunk only points to a humongous chunk for + // the null class loader metaspace (class and data virtual space managers) + // any humongous chunks so will not point to the tail + // of the humongous chunks list. + new_chunk->set_next(chunks_in_use(HumongousIndex)); + set_chunks_in_use(HumongousIndex, new_chunk); + + assert(new_chunk->word_size() > MediumChunk, "List inconsistency"); + } + } + + assert(new_chunk->is_empty(), "Not ready for reuse"); + if (TraceMetadataChunkAllocation && Verbose) { + gclog_or_tty->print("SpaceManager::add_chunk: %d) ", + sum_count_in_chunks_in_use()); + new_chunk->print_on(gclog_or_tty); + vs_list()->chunk_manager()->locked_print_free_chunks(tty); + } +} + +MetaWord* SpaceManager::allocate(size_t word_size) { + MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); + + size_t block_overhead = Metablock::overhead(); + // If only the dictionary is going to be used (i.e., no + // indexed free list), then there is a minimum size requirement. + // MinChunkSize is a placeholder for the real minimum size JJJ + size_t byte_size_with_overhead = (word_size + block_overhead) * BytesPerWord; +#ifdef DEALLOCATE_BLOCKS + size_t raw_bytes_size = MAX2(ARENA_ALIGN(byte_size_with_overhead), + MinChunkSize * BytesPerWord); +#else + size_t raw_bytes_size = ARENA_ALIGN(byte_size_with_overhead); +#endif + size_t raw_word_size = raw_bytes_size / BytesPerWord; + assert(raw_word_size * BytesPerWord == raw_bytes_size, "Size problem"); + + BlockFreelist* fl = block_freelists(); + Metablock* block = NULL; + // Allocation from the dictionary is expensive in the sense that + // the dictionary has to be searched for a size. Don't allocate + // from the dictionary until it starts to get fat. Is this + // a reasonable policy? Maybe an skinny dictionary is fast enough + // for allocations. Do some profiling. JJJ + if (fl->totalSize() > allocation_from_dictionary_limit) { + block = fl->get_block(raw_word_size); + } + if (block == NULL) { + block = allocate_work(raw_word_size); + if (block == NULL) { + return NULL; + } + } + Metadebug::deallocate_block_a_lot(this, raw_word_size); + + // Push the allocation past the word containing the size and leader. +#ifdef ASSERT + MetaWord* result = block->data(); + return result; +#else + return (MetaWord*) block; +#endif +} + +// Returns the address of spaced allocated for "word_size". +// This methods does not know about blocks (Metablocks) +Metablock* SpaceManager::allocate_work(size_t word_size) { + assert_lock_strong(_lock); +#ifdef ASSERT + if (Metadebug::test_metadata_failure()) { + return NULL; + } +#endif + // Is there space in the current chunk? + Metablock* result = NULL; + + // For DumpSharedSpaces, only allocate out of the current chunk which is + // never null because we gave it the size we wanted. Caller reports out + // of memory if this returns null. + if (DumpSharedSpaces) { + assert(current_chunk() != NULL, "should never happen"); + inc_allocation_total(word_size); + return current_chunk()->allocate(word_size); // caller handles null result + } + if (current_chunk() != NULL) { + result = current_chunk()->allocate(word_size); + } + + if (result == NULL) { + result = grow_and_allocate(word_size); + } + if (result > 0) { + inc_allocation_total(word_size); + assert(result != (Metablock*) chunks_in_use(MediumIndex), "Head of the list is being allocated"); + assert(result->word_size() == word_size, "Size not set correctly"); + } + + return result; +} + +void SpaceManager::verify() { + // If there are blocks in the dictionary, then + // verfication of chunks does not work since + // being in the dictionary alters a chunk. + if (block_freelists()->totalSize() == 0) { + // Skip the small chunks because their next link points to + // medium chunks. This is because the small chunk is the + // current chunk (for allocations) until it is full and the + // the addition of the next chunk does not NULL the next + // like of the small chunk. + for (ChunkIndex i = MediumIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + Metachunk* curr = chunks_in_use(i); + while (curr != NULL) { + curr->verify(); + curr = curr->next(); + } + } + } +} + +#ifdef ASSERT +void SpaceManager::verify_allocation_total() { +#if 0 + // Verification is only guaranteed at a safepoint. + if (SafepointSynchronize::is_at_safepoint()) { + gclog_or_tty->print_cr("Chunk " PTR_FORMAT " allocation_total " SIZE_FORMAT + " sum_used_in_chunks_in_use " SIZE_FORMAT, + this, + allocation_total(), + sum_used_in_chunks_in_use()); + } + MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); + assert(allocation_total() == sum_used_in_chunks_in_use(), + err_msg("allocation total is not consistent %d vs %d", + allocation_total(), sum_used_in_chunks_in_use())); +#endif +} + +#endif + +void SpaceManager::dump(outputStream* const out) const { + size_t curr_total = 0; + size_t waste = 0; + uint i = 0; + size_t used = 0; + size_t capacity = 0; + + // Add up statistics for all chunks in this SpaceManager. + for (ChunkIndex index = SmallIndex; + index < NumberOfFreeLists; + index = next_chunk_index(index)) { + for (Metachunk* curr = chunks_in_use(index); + curr != NULL; + curr = curr->next()) { + out->print("%d) ", i++); + curr->print_on(out); + if (TraceMetadataChunkAllocation && Verbose) { + block_freelists()->print_on(out); + } + curr_total += curr->word_size(); + used += curr->used_word_size(); + capacity += curr->capacity_word_size(); + waste += curr->free_word_size() + curr->overhead();; + } + } + + size_t free = current_chunk()->free_word_size(); + // Free space isn't wasted. + waste -= free; + + out->print_cr("total of all chunks " SIZE_FORMAT " used " SIZE_FORMAT + " free " SIZE_FORMAT " capacity " SIZE_FORMAT + " waste " SIZE_FORMAT, curr_total, used, free, capacity, waste); +} + +#ifndef PRODUCT +void SpaceManager::mangle_freed_chunks() { + for (ChunkIndex index = SmallIndex; + index < NumberOfFreeLists; + index = next_chunk_index(index)) { + for (Metachunk* curr = chunks_in_use(index); + curr != NULL; + curr = curr->next()) { + // Try to detect incorrectly terminated small chunk + // list. + assert(index == MediumIndex || curr != chunks_in_use(MediumIndex), + err_msg("Mangling medium chunks in small chunks? " + "curr " PTR_FORMAT " medium list " PTR_FORMAT, + curr, chunks_in_use(MediumIndex))); + curr->mangle(); + } + } +} +#endif // PRODUCT + + +// MetaspaceAux + +size_t MetaspaceAux::used_in_bytes(Metaspace::MetadataType mdtype) { + size_t used = 0; +#ifdef ASSERT + size_t free = 0; + size_t capacity = 0; +#endif + ClassLoaderDataGraphMetaspaceIterator iter; + while (iter.repeat()) { + Metaspace* msp = iter.get_next(); + // Sum allocation_total for each metaspace + if (msp != NULL) { + used += msp->used_words(mdtype); +#ifdef ASSERT + free += msp->free_words(mdtype); + capacity += msp->capacity_words(mdtype); + assert(used + free == capacity, + err_msg("Accounting is wrong used " SIZE_FORMAT + " free " SIZE_FORMAT " capacity " SIZE_FORMAT, + used, free, capacity)); +#endif + } + } + return used * BytesPerWord; +} + +size_t MetaspaceAux::free_in_bytes(Metaspace::MetadataType mdtype) { + size_t free = 0; + ClassLoaderDataGraphMetaspaceIterator iter; + while (iter.repeat()) { + Metaspace* msp = iter.get_next(); + if (msp != NULL) { + free += msp->free_words(mdtype); + } + } + return free * BytesPerWord; +} + +// The total words available for metadata allocation. This +// uses Metaspace capacity_words() which is the total words +// in chunks allocated for a Metaspace. +size_t MetaspaceAux::capacity_in_bytes(Metaspace::MetadataType mdtype) { + size_t capacity = free_chunks_total(mdtype); + ClassLoaderDataGraphMetaspaceIterator iter; + while (iter.repeat()) { + Metaspace* msp = iter.get_next(); + if (msp != NULL) { + capacity += msp->capacity_words(mdtype); + } + } + return capacity * BytesPerWord; +} + +size_t MetaspaceAux::reserved_in_bytes(Metaspace::MetadataType mdtype) { + size_t reserved = (mdtype == Metaspace::ClassType) ? + Metaspace::class_space_list()->virtual_space_total() : + Metaspace::space_list()->virtual_space_total(); + return reserved * BytesPerWord; +} + +size_t MetaspaceAux::min_chunk_size() { return SpaceManager::MediumChunk; } + +size_t MetaspaceAux::free_chunks_total(Metaspace::MetadataType mdtype) { + ChunkManager* chunk = (mdtype == Metaspace::ClassType) ? + Metaspace::class_space_list()->chunk_manager() : + Metaspace::space_list()->chunk_manager(); + + chunk->verify_free_chunks_total(); + return chunk->free_chunks_total(); +} + +size_t MetaspaceAux::free_chunks_total_in_bytes(Metaspace::MetadataType mdtype) { + return free_chunks_total(mdtype) * BytesPerWord; +} + +void MetaspaceAux::print_metaspace_change(size_t prev_metadata_used) { + gclog_or_tty->print(", [Metaspace:"); + if (PrintGCDetails && Verbose) { + gclog_or_tty->print(" " SIZE_FORMAT + "->" SIZE_FORMAT + "(" SIZE_FORMAT "/" SIZE_FORMAT ")", + prev_metadata_used, + used_in_bytes(), + capacity_in_bytes(), + reserved_in_bytes()); + } else { + gclog_or_tty->print(" " SIZE_FORMAT "K" + "->" SIZE_FORMAT "K" + "(" SIZE_FORMAT "K/" SIZE_FORMAT "K)", + prev_metadata_used / K, + used_in_bytes()/ K, + capacity_in_bytes()/K, + reserved_in_bytes()/ K); + } + + gclog_or_tty->print("]"); +} + +// This is printed when PrintGCDetails +void MetaspaceAux::print_on(outputStream* out) { + Metaspace::MetadataType ct = Metaspace::ClassType; + Metaspace::MetadataType nct = Metaspace::NonClassType; + + out->print_cr(" Metaspace total " + SIZE_FORMAT "K, used " SIZE_FORMAT "K," + " reserved " SIZE_FORMAT "K", + capacity_in_bytes()/K, used_in_bytes()/K, reserved_in_bytes()/K); + out->print_cr(" data space " + SIZE_FORMAT "K, used " SIZE_FORMAT "K," + " reserved " SIZE_FORMAT "K", + capacity_in_bytes(nct)/K, used_in_bytes(nct)/K, reserved_in_bytes(nct)/K); + out->print_cr(" class space " + SIZE_FORMAT "K, used " SIZE_FORMAT "K," + " reserved " SIZE_FORMAT "K", + capacity_in_bytes(ct)/K, used_in_bytes(ct)/K, reserved_in_bytes(ct)/K); +} + +// Print information for class space and data space separately. +// This is almost the same as above. +void MetaspaceAux::print_on(outputStream* out, Metaspace::MetadataType mdtype) { + size_t free_chunks_capacity_bytes = free_chunks_total_in_bytes(mdtype); + size_t capacity_bytes = capacity_in_bytes(mdtype); + size_t used_bytes = used_in_bytes(mdtype); + size_t free_bytes = free_in_bytes(mdtype); + size_t used_and_free = used_bytes + free_bytes + + free_chunks_capacity_bytes; + out->print_cr(" Chunk accounting: used in chunks " SIZE_FORMAT + "K + unused in chunks " SIZE_FORMAT "K + " + " capacity in free chunks " SIZE_FORMAT "K = " SIZE_FORMAT + "K capacity in allocated chunks " SIZE_FORMAT "K", + used_bytes / K, + free_bytes / K, + free_chunks_capacity_bytes / K, + used_and_free / K, + capacity_bytes / K); + assert(used_and_free == capacity_bytes, "Accounting is wrong"); +} + +// Print total fragmentation for class and data metaspaces separately +void MetaspaceAux::print_waste(outputStream* out) { + + size_t small_waste = 0, medium_waste = 0, large_waste = 0; + size_t cls_small_waste = 0, cls_medium_waste = 0, cls_large_waste = 0; + + ClassLoaderDataGraphMetaspaceIterator iter; + while (iter.repeat()) { + Metaspace* msp = iter.get_next(); + if (msp != NULL) { + small_waste += msp->vsm()->sum_waste_in_chunks_in_use(SmallIndex); + medium_waste += msp->vsm()->sum_waste_in_chunks_in_use(MediumIndex); + large_waste += msp->vsm()->sum_waste_in_chunks_in_use(HumongousIndex); + + cls_small_waste += msp->class_vsm()->sum_waste_in_chunks_in_use(SmallIndex); + cls_medium_waste += msp->class_vsm()->sum_waste_in_chunks_in_use(MediumIndex); + cls_large_waste += msp->class_vsm()->sum_waste_in_chunks_in_use(HumongousIndex); + } + } + out->print_cr("Total fragmentation waste (words) doesn't count free space"); + out->print(" data: small " SIZE_FORMAT " medium " SIZE_FORMAT, + small_waste, medium_waste); + out->print_cr(" class: small " SIZE_FORMAT, cls_small_waste); +} + +// Dump global metaspace things from the end of ClassLoaderDataGraph +void MetaspaceAux::dump(outputStream* out) { + out->print_cr("All Metaspace:"); + out->print("data space: "); print_on(out, Metaspace::NonClassType); + out->print("class space: "); print_on(out, Metaspace::ClassType); + print_waste(out); +} + +// Metaspace methods + +size_t Metaspace::_first_chunk_word_size = 0; + +Metaspace::Metaspace(Mutex* lock, size_t word_size) { + initialize(lock, word_size); +} + +Metaspace::Metaspace(Mutex* lock) { + initialize(lock); +} + +Metaspace::~Metaspace() { + delete _vsm; + delete _class_vsm; +} + +VirtualSpaceList* Metaspace::_space_list = NULL; +VirtualSpaceList* Metaspace::_class_space_list = NULL; + +#define VIRTUALSPACEMULTIPLIER 2 + +void Metaspace::global_initialize() { + // Initialize the alignment for shared spaces. + int max_alignment = os::vm_page_size(); + MetaspaceShared::set_max_alignment(max_alignment); + + if (DumpSharedSpaces) { + SharedReadOnlySize = align_size_up(SharedReadOnlySize, max_alignment); + SharedReadWriteSize = align_size_up(SharedReadWriteSize, max_alignment); + SharedMiscDataSize = align_size_up(SharedMiscDataSize, max_alignment); + SharedMiscCodeSize = align_size_up(SharedMiscCodeSize, max_alignment); + + // Initialize with the sum of the shared space sizes. The read-only + // and read write metaspace chunks will be allocated out of this and the + // remainder is the misc code and data chunks. + size_t total = align_size_up(SharedReadOnlySize + SharedReadWriteSize + + SharedMiscDataSize + SharedMiscCodeSize, + os::vm_allocation_granularity()); + size_t word_size = total/wordSize; + _space_list = new VirtualSpaceList(word_size); + } else { + // If using shared space, open the file that contains the shared space + // and map in the memory before initializing the rest of metaspace (so + // the addresses don't conflict) + if (UseSharedSpaces) { + FileMapInfo* mapinfo = new FileMapInfo(); + memset(mapinfo, 0, sizeof(FileMapInfo)); + + // Open the shared archive file, read and validate the header. If + // initialization fails, shared spaces [UseSharedSpaces] are + // disabled and the file is closed. + // Map in spaces now also + if (mapinfo->initialize() && MetaspaceShared::map_shared_spaces(mapinfo)) { + FileMapInfo::set_current_info(mapinfo); + } else { + assert(!mapinfo->is_open() && !UseSharedSpaces, + "archive file not closed or shared spaces not disabled."); + } + } + + // Initialize this before initializing the VirtualSpaceList + _first_chunk_word_size = InitialBootClassLoaderMetaspaceSize / BytesPerWord; + // Arbitrarily set the initial virtual space to a multiple + // of the boot class loader size. + size_t word_size = VIRTUALSPACEMULTIPLIER * Metaspace::first_chunk_word_size(); + // Initialize the list of virtual spaces. + _space_list = new VirtualSpaceList(word_size); + } +} + +// For UseCompressedKlassPointers the class space is reserved as a piece of the +// Java heap because the compression algorithm is the same for each. The +// argument passed in is at the top of the compressed space +void Metaspace::initialize_class_space(ReservedSpace rs) { + // The reserved space size may be bigger because of alignment, esp with UseLargePages + assert(rs.size() >= ClassMetaspaceSize, err_msg("%d != %d", rs.size(), ClassMetaspaceSize)); + _class_space_list = new VirtualSpaceList(rs); +} + +// Class space probably needs a lot less than data space +const int class_space_divisor = 4; + +void Metaspace::initialize(Mutex* lock, size_t initial_size) { + // Use SmallChunk size if not specified, adjust class to smaller size if so. + size_t word_size; + size_t class_word_size; + if (initial_size == 0) { + word_size = (size_t) SpaceManager::SmallChunk; + class_word_size = word_size; + } else { + word_size = initial_size; + class_word_size = initial_size/class_space_divisor; + } + + assert(space_list() != NULL, + "Metadata VirtualSpaceList has not been initialized"); + + _vsm = new SpaceManager(lock, space_list()); + if (_vsm == NULL) { + return; + } + + assert(class_space_list() != NULL, + "Class VirtualSpaceList has not been initialized"); + + // Allocate SpaceManager for classes. + _class_vsm = new SpaceManager(lock, class_space_list()); + if (_class_vsm == NULL) { + return; + } + + MutexLockerEx cl(SpaceManager::expand_lock(), Mutex::_no_safepoint_check_flag); + + // Allocate chunk for metadata objects + Metachunk* new_chunk = + space_list()->current_virtual_space()->get_chunk_vs_with_expand(word_size); + assert(!DumpSharedSpaces || new_chunk != NULL, "should have enough space for both chunks"); + if (new_chunk != NULL) { + // Add to this manager's list of chunks in use and current_chunk(). + vsm()->add_chunk(new_chunk, true); + } + + // Allocate chunk for class metadata objects + Metachunk* class_chunk = + class_space_list()->current_virtual_space()->get_chunk_vs_with_expand(class_word_size); + if (class_chunk != NULL) { + class_vsm()->add_chunk(class_chunk, true); + } +} + + +MetaWord* Metaspace::allocate(size_t word_size, MetadataType mdtype) { + // DumpSharedSpaces doesn't use class metadata area (yet) + if (mdtype == ClassType && !DumpSharedSpaces) { + return class_vsm()->allocate(word_size); + } else { + return vsm()->allocate(word_size); + } +} + +// Space allocated in the Metaspace. This may +// be across several metadata virtual spaces. +char* Metaspace::bottom() const { + assert(DumpSharedSpaces, "only useful and valid for dumping shared spaces"); + return (char*)vsm()->current_chunk()->bottom(); +} + +size_t Metaspace::used_words(MetadataType mdtype) const { + // return vsm()->allocation_total(); + return mdtype == ClassType ? class_vsm()->sum_used_in_chunks_in_use() : + vsm()->sum_used_in_chunks_in_use(); // includes overhead! +} + +size_t Metaspace::free_words(MetadataType mdtype) const { + return mdtype == ClassType ? class_vsm()->sum_free_in_chunks_in_use() : + vsm()->sum_free_in_chunks_in_use(); +} + +// Space capacity in the Metaspace. It includes +// space in the list of chunks from which allocations +// have been made. Don't include space in the global freelist and +// in the space available in the dictionary which +// is already counted in some chunk. +size_t Metaspace::capacity_words(MetadataType mdtype) const { + return mdtype == ClassType ? class_vsm()->sum_capacity_in_chunks_in_use() : + vsm()->sum_capacity_in_chunks_in_use(); +} + +void Metaspace::deallocate(MetaWord* ptr, size_t word_size, bool is_class) { + if (SafepointSynchronize::is_at_safepoint()) { + assert(Thread::current()->is_VM_thread(), "should be the VM thread"); + // Don't take lock +#ifdef DEALLOCATE_BLOCKS + if (is_class) { + class_vsm()->deallocate(ptr); + } else { + vsm()->deallocate(ptr); + } +#else +#ifdef ASSERT + Copy::fill_to_words((HeapWord*)ptr, word_size, metadata_deallocate); +#endif +#endif + + } else { + MutexLocker ml(vsm()->lock()); + +#ifdef DEALLOCATE_BLOCKS + if (is_class) { + class_vsm()->deallocate(ptr); + } else { + vsm()->deallocate(ptr); + } +#else +#ifdef ASSERT + Copy::fill_to_words((HeapWord*)ptr, word_size, metadata_deallocate); +#endif +#endif + } +} + +MetaWord* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size, + bool read_only, MetadataType mdtype, TRAPS) { + if (HAS_PENDING_EXCEPTION) { + assert(false, "Should not allocate with exception pending"); + return NULL; // caller does a CHECK_NULL too + } + + // SSS: Should we align the allocations and make sure the sizes are aligned. + MetaWord* result = NULL; + + assert(loader_data != NULL, "Should never pass around a NULL loader_data. " + "ClassLoaderData::the_null_class_loader_data() should have been used."); + // Allocate in metaspaces without taking out a lock, because it deadlocks + // with the SymbolTable_lock. Dumping is single threaded for now. We'll have + // to revisit this for application class data sharing. + if (DumpSharedSpaces) { + if (read_only) { + result = loader_data->ro_metaspace()->allocate(word_size, NonClassType); + } else { + result = loader_data->rw_metaspace()->allocate(word_size, NonClassType); + } + if (result == NULL) { + report_out_of_shared_space(read_only ? SharedReadOnly : SharedReadWrite); + } + return result; + } + + result = loader_data->metaspace_non_null()->allocate(word_size, mdtype); + + if (result == NULL) { + // Try to clean out some memory and retry. + result = + Universe::heap()->collector_policy()->satisfy_failed_metadata_allocation( + loader_data, word_size, mdtype); + + // If result is still null, we are out of memory. + if (result == NULL) { + // -XX:+HeapDumpOnOutOfMemoryError and -XX:OnOutOfMemoryError support + report_java_out_of_memory("Metadata space"); + + if (JvmtiExport::should_post_resource_exhausted()) { + JvmtiExport::post_resource_exhausted( + JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR, + "Metadata space"); + } + THROW_OOP_0(Universe::out_of_memory_error_perm_gen()); + } + } + return result; +} + +void Metaspace::print_on(outputStream* out) const { + // Print both class virtual space counts and metaspace. + if (Verbose) { + vsm()->print_on(out); + class_vsm()->print_on(out); + } +} + +#ifndef PRODUCT +bool Metaspace::contains(const void * ptr) const { + if (MetaspaceShared::is_in_shared_space(ptr)) { + return true; + } + MutexLockerEx cl(SpaceManager::expand_lock(), Mutex::_no_safepoint_check_flag); + return space_list()->contains(ptr) || class_space_list()->contains(ptr); +} +#endif + +void Metaspace::verify() { + vsm()->verify(); + class_vsm()->verify(); +} + +void Metaspace::dump(outputStream* const out) const { + if (UseMallocOnly) { + // Just print usage for now + out->print_cr("usage %d", used_words(Metaspace::NonClassType)); + } + out->print_cr("\nVirtual space manager: " INTPTR_FORMAT, vsm()); + vsm()->dump(out); + out->print_cr("\nClass space manager: " INTPTR_FORMAT, class_vsm()); + class_vsm()->dump(out); +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/metaspace.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/memory/metaspace.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#ifndef SHARE_VM_MEMORY_METASPACE_HPP +#define SHARE_VM_MEMORY_METASPACE_HPP + +#include "memory/allocation.hpp" +#include "memory/memRegion.hpp" +#include "runtime/virtualspace.hpp" +#include "utilities/exceptions.hpp" + +// Metaspace +// +// Metaspaces are Arenas for the VM's metadata. +// They are allocated one per class loader object, and one for the null +// bootstrap class loader +// Eventually for bootstrap loader we'll have a read-only section and read-write +// to write for DumpSharedSpaces and read for UseSharedSpaces +// +// block X ---+ +-------------------+ +// | | Virtualspace | +// | | | +// | | | +// | |-------------------| +// | || Chunk | +// | || | +// | ||---------- | +// +------>||| block 0 | | +// ||---------- | +// ||| block 1 | | +// ||---------- | +// || | +// |-------------------| +// | | +// | | +// +-------------------+ +// + +class ClassLoaderData; +class MetaWord; +class Mutex; +class outputStream; +class FreeChunk; +template class FreeList; +template class BinaryTreeDictionary; +class SpaceManager; + +// Metaspaces each have a SpaceManager and allocations +// are done by the SpaceManager. Allocations are done +// out of the current Metachunk. When the current Metachunk +// is exhausted, the SpaceManager gets a new one from +// the current VirtualSpace. When the VirtualSpace is exhausted +// the SpaceManager gets a new one. The SpaceManager +// also manages freelists of available Chunks. +// +// Currently the space manager maintains the list of +// virtual spaces and the list of chunks in use. Its +// allocate() method returns a block for use as a +// quantum of metadata. + +class VirtualSpaceList; + +class Metaspace : public CHeapObj { + friend class VMStructs; + friend class SpaceManager; + friend class VM_CollectForMetadataAllocation; + friend class MetaspaceGC; + friend class MetaspaceAux; + + public: + enum MetadataType {ClassType, NonClassType}; + + private: + void initialize(Mutex* lock, size_t initial_size = 0); + + static size_t _first_chunk_word_size; + + SpaceManager* _vsm; + SpaceManager* vsm() const { return _vsm; } + + SpaceManager* _class_vsm; + SpaceManager* class_vsm() const { return _class_vsm; } + + MetaWord* allocate(size_t word_size, MetadataType mdtype); + + // Virtual Space lists for both classes and other metadata + static VirtualSpaceList* _space_list; + static VirtualSpaceList* _class_space_list; + + static VirtualSpaceList* space_list() { return _space_list; } + static VirtualSpaceList* class_space_list() { return _class_space_list; } + + public: + + Metaspace(Mutex* lock, size_t initial_size); + Metaspace(Mutex* lock); + ~Metaspace(); + + // Initialize globals for Metaspace + static void global_initialize(); + static void initialize_class_space(ReservedSpace rs); + + static size_t first_chunk_word_size() { return _first_chunk_word_size; } + + char* bottom() const; + size_t used_words(MetadataType mdtype) const; + size_t free_words(MetadataType mdtype) const; + size_t capacity_words(MetadataType mdtype) const; + size_t waste_words(MetadataType mdtype) const; + + static MetaWord* allocate(ClassLoaderData* loader_data, size_t size, + bool read_only, MetadataType mdtype, TRAPS); + + void deallocate(MetaWord* ptr, size_t byte_size, bool is_class); + +#ifndef PRODUCT + bool contains(const void *ptr) const; + bool contains_class(const void *ptr) const; +#endif + + void dump(outputStream* const out) const; + + void print_on(outputStream* st) const; + // Debugging support + void verify(); +}; + +class MetaspaceAux : AllStatic { + + // Statistics for class space and data space in metaspace. + static size_t used_in_bytes(Metaspace::MetadataType mdtype); + static size_t free_in_bytes(Metaspace::MetadataType mdtype); + static size_t capacity_in_bytes(Metaspace::MetadataType mdtype); + static size_t reserved_in_bytes(Metaspace::MetadataType mdtype); + + static size_t free_chunks_total(Metaspace::MetadataType mdtype); + static size_t free_chunks_total_in_bytes(Metaspace::MetadataType mdtype); + + public: + // Total of space allocated to metadata in all Metaspaces + static size_t used_in_bytes() { + return used_in_bytes(Metaspace::ClassType) + + used_in_bytes(Metaspace::NonClassType); + } + + // Total of available space in all Metaspaces + // Total of capacity allocated to all Metaspaces. This includes + // space in Metachunks not yet allocated and in the Metachunk + // freelist. + static size_t capacity_in_bytes() { + return capacity_in_bytes(Metaspace::ClassType) + + capacity_in_bytes(Metaspace::NonClassType); + } + + // Total space reserved in all Metaspaces + static size_t reserved_in_bytes() { + return reserved_in_bytes(Metaspace::ClassType) + + reserved_in_bytes(Metaspace::NonClassType); + } + + static size_t min_chunk_size(); + + // Print change in used metadata. + static void print_metaspace_change(size_t prev_metadata_used); + static void print_on(outputStream * out); + static void print_on(outputStream * out, Metaspace::MetadataType mdtype); + + static void print_waste(outputStream* out); + static void dump(outputStream* out); +}; + +// Metaspace are deallocated when their class loader are GC'ed. +// This class implements a policy for inducing GC's to recover +// Metaspaces. + +class MetaspaceGC : AllStatic { + + // The current high-water-mark for inducing a GC. When + // the capacity of all space in the virtual lists reaches this value, + // a GC is induced and the value is increased. This should be changed + // to the space actually used for allocations to avoid affects of + // fragmentation losses to partially used chunks. Size is in words. + static size_t _capacity_until_GC; + + // After a GC is done any allocation that fails should try to expand + // the capacity of the Metaspaces. This flag is set during attempts + // to allocate in the VMGCOperation that does the GC. + static bool _expand_after_GC; + + // For a CMS collection, signal that a concurrent collection should + // be started. + static bool _should_concurrent_collect; + + static uint _shrink_factor; + + static void set_capacity_until_GC(size_t v) { _capacity_until_GC = v; } + + static size_t shrink_factor() { return _shrink_factor; } + void set_shrink_factor(uint v) { _shrink_factor = v; } + + public: + + static size_t capacity_until_GC() { return _capacity_until_GC; } + static size_t capacity_until_GC_in_bytes() { return _capacity_until_GC * BytesPerWord; } + static void inc_capacity_until_GC(size_t v) { _capacity_until_GC += v; } + static void dec_capacity_until_GC(size_t v) { + _capacity_until_GC = _capacity_until_GC > v ? _capacity_until_GC - v : 0; + } + static bool expand_after_GC() { return _expand_after_GC; } + static void set_expand_after_GC(bool v) { _expand_after_GC = v; } + + static bool should_concurrent_collect() { return _should_concurrent_collect; } + static void set_should_concurrent_collect(bool v) { + _should_concurrent_collect = v; + } + + // The amount to increase the high-water-mark (_capacity_until_GC) + static size_t delta_capacity_until_GC(size_t word_size); + + // It is expected that this will be called when the current capacity + // has been used and a GC should be considered. + static bool should_expand(VirtualSpaceList* vsl, size_t word_size); + + // Calculate the new high-water mark at which to induce + // a GC. + static void compute_new_size(); +}; + +#endif // SHARE_VM_MEMORY_METASPACE_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/metaspaceCounters.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/memory/metaspaceCounters.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "memory/metaspaceCounters.hpp" +#include "memory/resourceArea.hpp" + +#define METASPACE_NAME "perm" + +MetaspaceCounters* MetaspaceCounters::_metaspace_counters = NULL; + +MetaspaceCounters::MetaspaceCounters() { + if (UsePerfData) { + size_t min_capacity = MetaspaceAux::min_chunk_size(); + size_t max_capacity = MetaspaceAux::reserved_in_bytes(); + size_t curr_capacity = MetaspaceAux::capacity_in_bytes(); + size_t used = MetaspaceAux::used_in_bytes(); + + initialize(min_capacity, max_capacity, curr_capacity, used); + } +} + +void MetaspaceCounters::initialize(size_t min_capacity, + size_t max_capacity, + size_t curr_capacity, + size_t used) { + + if (UsePerfData) { + EXCEPTION_MARK; + ResourceMark rm; + + // Create a name that will be recognized by jstat tools as + // the perm gen. Change this to a Metaspace name when the + // tools are fixed. + // name to recognize "sun.gc.generation.2.*" + + const char* name = METASPACE_NAME; + const int ordinal = 2; + const int spaces = 1; + + const char* cns = PerfDataManager::name_space("generation", ordinal); + + _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtClass); + strcpy(_name_space, cns); + + const char* cname = PerfDataManager::counter_name(_name_space, "name"); + PerfDataManager::create_string_constant(SUN_GC, cname, name, CHECK); + + // End of perm gen like name creation + + cname = PerfDataManager::counter_name(_name_space, "spaces"); + PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_None, + spaces, CHECK); + + cname = PerfDataManager::counter_name(_name_space, "minCapacity"); + PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_Bytes, + min_capacity, CHECK); + + cname = PerfDataManager::counter_name(_name_space, "maxCapacity"); + PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_Bytes, + max_capacity, CHECK); + + cname = PerfDataManager::counter_name(_name_space, "capacity"); + _current_size = + PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes, + curr_capacity, CHECK); + + // SpaceCounter like counters + // name to recognize "sun.gc.generation.2.space.0.*" + { + const int space_ordinal = 0; + const char* cns = PerfDataManager::name_space(_name_space, "space", + space_ordinal); + + char* space_name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtClass); + strcpy(space_name_space, cns); + + const char* cname = PerfDataManager::counter_name(space_name_space, "name"); + PerfDataManager::create_string_constant(SUN_GC, cname, name, CHECK); + + cname = PerfDataManager::counter_name(space_name_space, "maxCapacity"); + _max_capacity = PerfDataManager::create_variable(SUN_GC, cname, + PerfData::U_Bytes, + (jlong)max_capacity, CHECK); + + cname = PerfDataManager::counter_name(space_name_space, "capacity"); + _capacity = PerfDataManager::create_variable(SUN_GC, cname, + PerfData::U_Bytes, + curr_capacity, CHECK); + + cname = PerfDataManager::counter_name(space_name_space, "used"); + _used = PerfDataManager::create_variable(SUN_GC, + cname, + PerfData::U_Bytes, + used, + CHECK); + + cname = PerfDataManager::counter_name(space_name_space, "initCapacity"); + PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_Bytes, + min_capacity, CHECK); + } + } +} + +void MetaspaceCounters::update_capacity() { + assert(UsePerfData, "Should not be called unless being used"); + size_t capacity_in_bytes = MetaspaceAux::capacity_in_bytes(); + _capacity->set_value(capacity_in_bytes); +} + +void MetaspaceCounters::update_used() { + assert(UsePerfData, "Should not be called unless being used"); + size_t used_in_bytes = MetaspaceAux::used_in_bytes(); + _used->set_value(used_in_bytes); +} + +void MetaspaceCounters::update_max_capacity() { + assert(UsePerfData, "Should not be called unless being used"); + size_t reserved_in_bytes = MetaspaceAux::reserved_in_bytes(); + _max_capacity->set_value(reserved_in_bytes); +} + +void MetaspaceCounters::update_all() { + if (UsePerfData) { + update_used(); + update_capacity(); + update_max_capacity(); + _current_size->set_value(MetaspaceAux::reserved_in_bytes()); + } +} + +void MetaspaceCounters::initialize_performance_counters() { + if (UsePerfData) { + _metaspace_counters = new MetaspaceCounters(); + } +} + +void MetaspaceCounters::update_performance_counters() { + if (UsePerfData) { + _metaspace_counters->update_all(); + } +} + diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/metaspaceCounters.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/memory/metaspaceCounters.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_MEMORY_METASPACECOUNTERS_HPP +#define SHARE_VM_MEMORY_METASPACECOUNTERS_HPP + +#include "runtime/perfData.hpp" + +class MetaspaceCounters: public CHeapObj { + friend class VMStructs; + PerfVariable* _current_size; + PerfVariable* _capacity; + PerfVariable* _used; + PerfVariable* _max_capacity; + char* _name_space; + static MetaspaceCounters* _metaspace_counters; + void initialize(size_t min_capacity, + size_t max_capacity, + size_t curr_capacity, + size_t used); + public: + MetaspaceCounters(); + ~MetaspaceCounters(); + + void update_capacity(); + void update_used(); + void update_max_capacity(); + + void update_all(); + + static void initialize_performance_counters(); + static void update_performance_counters(); + +}; +#endif // SHARE_VM_MEMORY_METASPACECOUNTERS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/metaspaceShared.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/memory/metaspaceShared.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,844 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "classfile/dictionary.hpp" +#include "classfile/loaderConstraints.hpp" +#include "classfile/placeholders.hpp" +#include "classfile/symbolTable.hpp" +#include "classfile/systemDictionary.hpp" +#include "code/codeCache.hpp" +#include "memory/filemap.hpp" +#include "memory/gcLocker.hpp" +#include "memory/metaspace.hpp" +#include "memory/metaspaceShared.hpp" +#include "oops/objArrayOop.hpp" +#include "oops/oop.inline.hpp" +#include "runtime/signature.hpp" +#include "runtime/vm_operations.hpp" +#include "runtime/vmThread.hpp" +#include "utilities/hashtable.inline.hpp" + + +int MetaspaceShared::_max_alignment = 0; +int MetaspaceShared::max_alignment() { return _max_alignment; } +void MetaspaceShared::set_max_alignment(int alignment) { _max_alignment = alignment; } + +// Accessor functions to save shared space created for metadata, which has +// extra space allocated at the end for miscellaneous data and code. +ReservedSpace* MetaspaceShared::_shared_rs = NULL; +ReservedSpace* MetaspaceShared::shared_rs() { return _shared_rs; } +void MetaspaceShared::set_shared_rs(ReservedSpace* rs) { _shared_rs = rs; } + +// Read/write a data stream for restoring/preserving metadata pointers and +// miscellaneous data from/to the shared archive file. + +void MetaspaceShared::serialize(SerializeClosure* soc) { + int tag = 0; + soc->do_tag(--tag); + + assert(!UseCompressedOops, "UseCompressedOops doesn't work with shared archive"); + // Verify the sizes of various metadata in the system. + soc->do_tag(sizeof(Method)); + soc->do_tag(sizeof(ConstMethod)); + soc->do_tag(arrayOopDesc::base_offset_in_bytes(T_BYTE)); + soc->do_tag(sizeof(ConstantPool)); + soc->do_tag(sizeof(ConstantPoolCache)); + soc->do_tag(objArrayOopDesc::base_offset_in_bytes()); + soc->do_tag(typeArrayOopDesc::base_offset_in_bytes(T_BYTE)); + soc->do_tag(sizeof(Symbol)); + + // Dump/restore miscellaneous metadata. + Universe::serialize(soc, true); + soc->do_tag(--tag); + + // Dump/restore references to commonly used names and signatures. + vmSymbols::serialize(soc); + soc->do_tag(--tag); + + soc->do_tag(666); +} + + +// CDS code for dumping shared archive. + +// Global object for holding classes that have been loaded. Since this +// is run at a safepoint just before exit, this is the entire set of classes. +static GrowableArray* _global_klass_objects; +static void collect_classes(Klass* k) { + _global_klass_objects->append_if_missing(k); + if (k->oop_is_instance()) { + // Add in the array classes too + InstanceKlass* ik = InstanceKlass::cast(k); + ik->array_klasses_do(collect_classes); + } +} + +static void remove_unshareable_in_classes() { + for (int i = 0; i < _global_klass_objects->length(); i++) { + Klass* k = _global_klass_objects->at(i); + k->remove_unshareable_info(); + } +} + +// Walk all methods in the class list and assign a fingerprint. +// so that this part of the ConstMethod* is read only. +static void calculate_fingerprints() { + for (int i = 0; i < _global_klass_objects->length(); i++) { + Klass* k = _global_klass_objects->at(i); + if (k->oop_is_instance()) { + InstanceKlass* ik = InstanceKlass::cast(k); + for (int i = 0; i < ik->methods()->length(); i++) { + ResourceMark rm; + Method* m = ik->methods()->at(i); + (new Fingerprinter(m))->fingerprint(); + } + } + } +} + +// Patch C++ vtable pointer in metadata. + +// Klass and other metadata objects contain references to c++ vtables in the +// JVM library. +// Fix them to point to our constructed vtables. However, don't iterate +// across the space while doing this, as that causes the vtables to be +// patched, undoing our useful work. Instead, iterate to make a list, +// then use the list to do the fixing. +// +// Our constructed vtables: +// Dump time: +// 1. init_self_patching_vtbl_list: table of pointers to current virtual method addrs +// 2. generate_vtable_methods: create jump table, appended to above vtbl_list +// 3. patch_klass_vtables: for Klass list, patch the vtable entry in klass and +// associated metadata to point to jump table rather than to current vtbl +// Table layout: NOTE FIXED SIZE +// 1. vtbl pointers +// 2. #Klass X #virtual methods per Klass +// 1 entry for each, in the order: +// Klass1:method1 entry, Klass1:method2 entry, ... Klass1:method entry +// Klass2:method1 entry, Klass2:method2 entry, ... Klass2:method entry +// ... +// Klass:method1 entry, Klass:method2 entry, +// ... Klass:method entry +// Sample entry: (Sparc): +// save(sp, -256, sp) +// ba,pt common_code +// mov XXX, %L0 %L0 gets: Klass index <<8 + method index (note: max method index 255) +// +// Restore time: +// 1. initialize_shared_space: reserve space for table +// 2. init_self_patching_vtbl_list: update pointers to NEW virtual method addrs in text +// +// Execution time: +// First virtual method call for any object of these metadata types: +// 1. object->klass->klass_part +// 2. vtable entry for that klass_part points to the jump table entries +// 3. branches to common_code with %O0/klass_part, %L0: Klass index <<8 + method index +// 4. common_code: +// Get address of new vtbl pointer for this Klass from updated table +// Update new vtbl pointer in the Klass: future virtual calls go direct +// Jump to method, using new vtbl pointer and method index + + +static void* find_matching_vtbl_ptr(void** vtbl_list, void* new_vtable_start, void* obj) { + void* old_vtbl_ptr = *(void**)obj; + for (int i = 0; i < MetaspaceShared::vtbl_list_size; i++) { + if (vtbl_list[i] == old_vtbl_ptr) { + return (void**)new_vtable_start + i * MetaspaceShared::num_virtuals; + } + } + ShouldNotReachHere(); + return NULL; +} + +// Assumes the vtable is in first slot in object. +static void patch_klass_vtables(void** vtbl_list, void* new_vtable_start) { + int n = _global_klass_objects->length(); + for (int i = 0; i < n; i++) { + Klass* obj = _global_klass_objects->at(i); + // Note oop_is_instance() is a virtual call. After patching vtables + // all virtual calls on the dummy vtables will restore the original! + if (obj->oop_is_instance()) { + InstanceKlass* ik = InstanceKlass::cast(obj); + *(void**)ik = find_matching_vtbl_ptr(vtbl_list, new_vtable_start, ik); + ConstantPool* cp = ik->constants(); + *(void**)cp = find_matching_vtbl_ptr(vtbl_list, new_vtable_start, cp); + for (int j = 0; j < ik->methods()->length(); j++) { + Method* m = ik->methods()->at(j); + *(void**)m = find_matching_vtbl_ptr(vtbl_list, new_vtable_start, m); + } + } else { + // Array klasses + Klass* k = obj; + *(void**)k = find_matching_vtbl_ptr(vtbl_list, new_vtable_start, k); + } + } +} + +// Closure for serializing initialization data out to a data area to be +// written to the shared file. + +class WriteClosure : public SerializeClosure { +private: + intptr_t* top; + char* end; + + inline void check_space() { + if ((char*)top + sizeof(intptr_t) > end) { + report_out_of_shared_space(SharedMiscData); + } + } + +public: + WriteClosure(char* md_top, char* md_end) { + top = (intptr_t*)md_top; + end = md_end; + } + + char* get_top() { return (char*)top; } + + void do_ptr(void** p) { + check_space(); + *top = (intptr_t)*p; + ++top; + } + + void do_tag(int tag) { + check_space(); + *top = (intptr_t)tag; + ++top; + } + + void do_region(u_char* start, size_t size) { + if ((char*)top + size > end) { + report_out_of_shared_space(SharedMiscData); + } + assert((intptr_t)start % sizeof(intptr_t) == 0, "bad alignment"); + assert(size % sizeof(intptr_t) == 0, "bad size"); + do_tag((int)size); + while (size > 0) { + *top = *(intptr_t*)start; + ++top; + start += sizeof(intptr_t); + size -= sizeof(intptr_t); + } + } + + bool reading() const { return false; } +}; + + +// Populate the shared space. + +class VM_PopulateDumpSharedSpace: public VM_Operation { +private: + ClassLoaderData* _loader_data; + GrowableArray *_class_promote_order; + VirtualSpace _md_vs; + VirtualSpace _mc_vs; + +public: + VM_PopulateDumpSharedSpace(ClassLoaderData* loader_data, + GrowableArray *class_promote_order) : + _loader_data(loader_data) { + + // Split up and initialize the misc code and data spaces + ReservedSpace* shared_rs = MetaspaceShared::shared_rs(); + int metadata_size = SharedReadOnlySize+SharedReadWriteSize; + ReservedSpace shared_ro_rw = shared_rs->first_part(metadata_size); + ReservedSpace misc_section = shared_rs->last_part(metadata_size); + + // Now split into misc sections. + ReservedSpace md_rs = misc_section.first_part(SharedMiscDataSize); + ReservedSpace mc_rs = misc_section.last_part(SharedMiscDataSize); + _md_vs.initialize(md_rs, SharedMiscDataSize); + _mc_vs.initialize(mc_rs, SharedMiscCodeSize); + _class_promote_order = class_promote_order; + } + + VMOp_Type type() const { return VMOp_PopulateDumpSharedSpace; } + void doit(); // outline because gdb sucks +}; // class VM_PopulateDumpSharedSpace + + +void VM_PopulateDumpSharedSpace::doit() { + Thread* THREAD = VMThread::vm_thread(); + NOT_PRODUCT(SystemDictionary::verify();) + // The following guarantee is meant to ensure that no loader constraints + // exist yet, since the constraints table is not shared. This becomes + // more important now that we don't re-initialize vtables/itables for + // shared classes at runtime, where constraints were previously created. + guarantee(SystemDictionary::constraints()->number_of_entries() == 0, + "loader constraints are not saved"); + guarantee(SystemDictionary::placeholders()->number_of_entries() == 0, + "placeholders are not saved"); + // Revisit and implement this if we prelink method handle call sites: + guarantee(SystemDictionary::invoke_method_table() == NULL || + SystemDictionary::invoke_method_table()->number_of_entries() == 0, + "invoke method table is not saved"); + + // At this point, many classes have been loaded. + // Gather systemDictionary classes in a global array and do everything to + // that so we don't have to walk the SystemDictionary again. + _global_klass_objects = new GrowableArray(1000); + Universe::basic_type_classes_do(collect_classes); + SystemDictionary::classes_do(collect_classes); + + tty->print_cr("Number of classes %d", _global_klass_objects->length()); + + // Update all the fingerprints in the shared methods. + tty->print("Calculating fingerprints ... "); + calculate_fingerprints(); + tty->print_cr("done. "); + + // Remove all references outside the metadata + tty->print("Removing unshareable information ... "); + remove_unshareable_in_classes(); + tty->print_cr("done. "); + + // Set up the share data and shared code segments. + char* md_low = _md_vs.low(); + char* md_top = md_low; + char* md_end = _md_vs.high(); + char* mc_low = _mc_vs.low(); + char* mc_top = mc_low; + char* mc_end = _mc_vs.high(); + + // Reserve space for the list of Klass*s whose vtables are used + // for patching others as needed. + + void** vtbl_list = (void**)md_top; + int vtbl_list_size = MetaspaceShared::vtbl_list_size; + Universe::init_self_patching_vtbl_list(vtbl_list, vtbl_list_size); + + md_top += vtbl_list_size * sizeof(void*); + void* vtable = md_top; + + // Reserve space for a new dummy vtable for klass objects in the + // heap. Generate self-patching vtable entries. + + MetaspaceShared::generate_vtable_methods(vtbl_list, &vtable, + &md_top, md_end, + &mc_top, mc_end); + + // Reorder the system dictionary. (Moving the symbols affects + // how the hash table indices are calculated.) + // Not doing this either. + + SystemDictionary::reorder_dictionary(); + + NOT_PRODUCT(SystemDictionary::verify();) + + // Copy the the symbol table, and the system dictionary to the shared + // space in usable form. Copy the hastable + // buckets first [read-write], then copy the linked lists of entries + // [read-only]. + + SymbolTable::reverse(md_top); + NOT_PRODUCT(SymbolTable::verify()); + SymbolTable::copy_buckets(&md_top, md_end); + + SystemDictionary::reverse(); + SystemDictionary::copy_buckets(&md_top, md_end); + + ClassLoader::verify(); + ClassLoader::copy_package_info_buckets(&md_top, md_end); + ClassLoader::verify(); + + SymbolTable::copy_table(&md_top, md_end); + SystemDictionary::copy_table(&md_top, md_end); + ClassLoader::verify(); + ClassLoader::copy_package_info_table(&md_top, md_end); + ClassLoader::verify(); + + // Write the other data to the output array. + WriteClosure wc(md_top, md_end); + MetaspaceShared::serialize(&wc); + md_top = wc.get_top(); + + // Print shared spaces all the time + const char* fmt = "%s space: " PTR_FORMAT " out of " PTR_FORMAT " words allocated at " PTR_FORMAT "."; + Metaspace* ro_space = _loader_data->ro_metaspace(); + Metaspace* rw_space = _loader_data->rw_metaspace(); + tty->print_cr(fmt, "ro", ro_space->used_words(Metaspace::NonClassType), + ro_space->capacity_words(Metaspace::NonClassType), + ro_space->bottom()); + tty->print_cr(fmt, "rw", rw_space->used_words(Metaspace::NonClassType), + rw_space->capacity_words(Metaspace::NonClassType), + rw_space->bottom()); + tty->print_cr(fmt, "md", md_top - md_low, md_end-md_low, md_low); + tty->print_cr(fmt, "mc", mc_top - mc_low, mc_end-mc_low, mc_low); + + // Update the vtable pointers in all of the Klass objects in the + // heap. They should point to newly generated vtable. + patch_klass_vtables(vtbl_list, vtable); + + // dunno what this is for. + char* saved_vtbl = (char*)os::malloc(vtbl_list_size * sizeof(void*), mtClass); + memmove(saved_vtbl, vtbl_list, vtbl_list_size * sizeof(void*)); + memset(vtbl_list, 0, vtbl_list_size * sizeof(void*)); + + // Create and write the archive file that maps the shared spaces. + + FileMapInfo* mapinfo = new FileMapInfo(); + mapinfo->populate_header(MetaspaceShared::max_alignment()); + + // Pass 1 - update file offsets in header. + mapinfo->write_header(); + mapinfo->write_space(MetaspaceShared::ro, _loader_data->ro_metaspace(), true); + mapinfo->write_space(MetaspaceShared::rw, _loader_data->rw_metaspace(), false); + mapinfo->write_region(MetaspaceShared::md, _md_vs.low(), + pointer_delta(md_top, _md_vs.low(), sizeof(char)), + SharedMiscDataSize, + false, false); + mapinfo->write_region(MetaspaceShared::mc, _mc_vs.low(), + pointer_delta(mc_top, _mc_vs.low(), sizeof(char)), + SharedMiscCodeSize, + true, true); + + // Pass 2 - write data. + mapinfo->open_for_write(); + mapinfo->write_header(); + mapinfo->write_space(MetaspaceShared::ro, _loader_data->ro_metaspace(), true); + mapinfo->write_space(MetaspaceShared::rw, _loader_data->rw_metaspace(), false); + mapinfo->write_region(MetaspaceShared::md, _md_vs.low(), + pointer_delta(md_top, _md_vs.low(), sizeof(char)), + SharedMiscDataSize, + false, false); + mapinfo->write_region(MetaspaceShared::mc, _mc_vs.low(), + pointer_delta(mc_top, _mc_vs.low(), sizeof(char)), + SharedMiscCodeSize, + true, true); + mapinfo->close(); + + memmove(vtbl_list, saved_vtbl, vtbl_list_size * sizeof(void*)); +} + +static void link_shared_classes(Klass* obj, TRAPS) { + Klass* k = Klass::cast(obj); + if (k->oop_is_instance()) { + InstanceKlass* ik = (InstanceKlass*) k; + // Link the class to cause the bytecodes to be rewritten and the + // cpcache to be created. + if (ik->init_state() < InstanceKlass::linked) { + ik->link_class(THREAD); + guarantee(!HAS_PENDING_EXCEPTION, "exception in class rewriting"); + } + } +} + + +// Support for a simple checksum of the contents of the class list +// file to prevent trivial tampering. The algorithm matches that in +// the MakeClassList program used by the J2SE build process. +#define JSUM_SEED ((jlong)CONST64(0xcafebabebabecafe)) +static jlong +jsum(jlong start, const char *buf, const int len) +{ + jlong h = start; + char *p = (char *)buf, *e = p + len; + while (p < e) { + char c = *p++; + if (c <= ' ') { + /* Skip spaces and control characters */ + continue; + } + h = 31 * h + c; + } + return h; +} + +// Preload classes from a list, populate the shared spaces and dump to a +// file. +void MetaspaceShared::preload_and_dump(TRAPS) { + TraceTime timer("Dump Shared Spaces", TraceStartupTime); + ResourceMark rm; + + // Lock out GC - is it necessary? I don't think we care. + No_GC_Verifier no_gc; + + // Preload classes to be shared. + // Should use some os:: method rather than fopen() here. aB. + // Construct the path to the class list (in jre/lib) + // Walk up two directories from the location of the VM and + // optionally tack on "lib" (depending on platform) + char class_list_path[JVM_MAXPATHLEN]; + os::jvm_path(class_list_path, sizeof(class_list_path)); + for (int i = 0; i < 3; i++) { + char *end = strrchr(class_list_path, *os::file_separator()); + if (end != NULL) *end = '\0'; + } + int class_list_path_len = (int)strlen(class_list_path); + if (class_list_path_len >= 3) { + if (strcmp(class_list_path + class_list_path_len - 3, "lib") != 0) { + strcat(class_list_path, os::file_separator()); + strcat(class_list_path, "lib"); + } + } + strcat(class_list_path, os::file_separator()); + strcat(class_list_path, "classlist"); + + FILE* file = fopen(class_list_path, "r"); + if (file != NULL) { + jlong computed_jsum = JSUM_SEED; + jlong file_jsum = 0; + + char class_name[256]; + int class_count = 0; + GrowableArray* class_promote_order = new GrowableArray(); + + // sun.io.Converters + static const char obj_array_sig[] = "[[Ljava/lang/Object;"; + SymbolTable::new_permanent_symbol(obj_array_sig, THREAD); + + // java.util.HashMap + static const char map_entry_array_sig[] = "[Ljava/util/Map$Entry;"; + SymbolTable::new_permanent_symbol(map_entry_array_sig, THREAD); + + tty->print("Loading classes to share ... "); + while ((fgets(class_name, sizeof class_name, file)) != NULL) { + if (*class_name == '#') { + jint fsh, fsl; + if (sscanf(class_name, "# %8x%8x\n", &fsh, &fsl) == 2) { + file_jsum = ((jlong)(fsh) << 32) | (fsl & 0xffffffff); + } + + continue; + } + // Remove trailing newline + size_t name_len = strlen(class_name); + class_name[name_len-1] = '\0'; + + computed_jsum = jsum(computed_jsum, class_name, (const int)name_len - 1); + + // Got a class name - load it. + TempNewSymbol class_name_symbol = SymbolTable::new_permanent_symbol(class_name, THREAD); + guarantee(!HAS_PENDING_EXCEPTION, "Exception creating a symbol."); + Klass* klass = SystemDictionary::resolve_or_null(class_name_symbol, + THREAD); + guarantee(!HAS_PENDING_EXCEPTION, "Exception resolving a class."); + if (klass != NULL) { + if (PrintSharedSpaces && Verbose && WizardMode) { + tty->print_cr("Shared spaces preloaded: %s", class_name); + } + + + InstanceKlass* ik = InstanceKlass::cast(klass); + + // Should be class load order as per -XX:+TraceClassLoadingPreorder + class_promote_order->append(ik); + + // Link the class to cause the bytecodes to be rewritten and the + // cpcache to be created. The linking is done as soon as classes + // are loaded in order that the related data structures (klass and + // cpCache) are located together. + + if (ik->init_state() < InstanceKlass::linked) { + ik->link_class(THREAD); + guarantee(!(HAS_PENDING_EXCEPTION), "exception in class rewriting"); + } + + // TODO: Resolve klasses in constant pool + ik->constants()->resolve_class_constants(THREAD); + + class_count++; + } else { + if (PrintSharedSpaces && Verbose && WizardMode) { + tty->cr(); + tty->print_cr(" Preload failed: %s", class_name); + } + } + file_jsum = 0; // Checksum must be on last line of file + } + if (computed_jsum != file_jsum) { + tty->cr(); + tty->print_cr("Preload failed: checksum of class list was incorrect."); + exit(1); + } + + tty->print_cr("done. "); + + if (PrintSharedSpaces) { + tty->print_cr("Shared spaces: preloaded %d classes", class_count); + } + + // Rewrite and unlink classes. + tty->print("Rewriting and linking classes ... "); + + // Link any classes which got missed. (It's not quite clear why + // they got missed.) This iteration would be unsafe if we weren't + // single-threaded at this point; however we can't do it on the VM + // thread because it requires object allocation. + SystemDictionary::classes_do(link_shared_classes, CATCH); + tty->print_cr("done. "); + + // Create and dump the shared spaces. Everything so far is loaded + // with the null class loader. + ClassLoaderData* loader_data = ClassLoaderData::the_null_class_loader_data(); + VM_PopulateDumpSharedSpace op(loader_data, class_promote_order); + VMThread::execute(&op); + + } else { + char errmsg[JVM_MAXPATHLEN]; + os::lasterror(errmsg, JVM_MAXPATHLEN); + tty->print_cr("Loading classlist failed: %s", errmsg); + exit(1); + } + + // Since various initialization steps have been undone by this process, + // it is not reasonable to continue running a java process. + exit(0); +} + + +// Closure for serializing initialization data in from a data area +// (ptr_array) read from the shared file. + +class ReadClosure : public SerializeClosure { +private: + intptr_t** _ptr_array; + + inline intptr_t nextPtr() { + return *(*_ptr_array)++; + } + +public: + ReadClosure(intptr_t** ptr_array) { _ptr_array = ptr_array; } + + void do_ptr(void** p) { + assert(*p == NULL, "initializing previous initialized pointer."); + intptr_t obj = nextPtr(); + assert((intptr_t)obj >= 0 || (intptr_t)obj < -100, + "hit tag while initializing ptrs."); + *p = (void*)obj; + } + + void do_tag(int tag) { + int old_tag; + old_tag = (int)(intptr_t)nextPtr(); + // do_int(&old_tag); + assert(tag == old_tag, "old tag doesn't match"); + FileMapInfo::assert_mark(tag == old_tag); + } + + void do_region(u_char* start, size_t size) { + assert((intptr_t)start % sizeof(intptr_t) == 0, "bad alignment"); + assert(size % sizeof(intptr_t) == 0, "bad size"); + do_tag((int)size); + while (size > 0) { + *(intptr_t*)start = nextPtr(); + start += sizeof(intptr_t); + size -= sizeof(intptr_t); + } + } + + bool reading() const { return true; } +}; + + +// Save bounds of shared spaces mapped in. +static char* _ro_base = NULL; +static char* _rw_base = NULL; +static char* _md_base = NULL; +static char* _mc_base = NULL; + +// Return true if given address is in the mapped shared space. +bool MetaspaceShared::is_in_shared_space(const void* p) { + if (_ro_base == NULL || _rw_base == NULL) { + return false; + } else { + return ((p > _ro_base && p < (_ro_base + SharedReadOnlySize)) || + (p > _rw_base && p < (_rw_base + SharedReadWriteSize))); + } +} + +void MetaspaceShared::print_shared_spaces() { + gclog_or_tty->print_cr("Shared Spaces:"); + gclog_or_tty->print(" read-only " INTPTR_FORMAT "-" INTPTR_FORMAT, + _ro_base, _ro_base + SharedReadOnlySize); + gclog_or_tty->print(" read-write " INTPTR_FORMAT "-" INTPTR_FORMAT, + _rw_base, _rw_base + SharedReadWriteSize); + gclog_or_tty->cr(); + gclog_or_tty->print(" misc-data " INTPTR_FORMAT "-" INTPTR_FORMAT, + _md_base, _md_base + SharedMiscDataSize); + gclog_or_tty->print(" misc-code " INTPTR_FORMAT "-" INTPTR_FORMAT, + _mc_base, _mc_base + SharedMiscCodeSize); + gclog_or_tty->cr(); +} + + +// Map shared spaces at requested addresses and return if succeeded. +// Need to keep the bounds of the ro and rw space for the Metaspace::contains +// call, or is_in_shared_space. +bool MetaspaceShared::map_shared_spaces(FileMapInfo* mapinfo) { + size_t image_alignment = mapinfo->alignment(); + + // Map in the shared memory and then map the regions on top of it + ReservedSpace shared_rs = mapinfo->reserve_shared_memory(); + if (!shared_rs.is_reserved()) return false; + + // Split reserved memory into pieces (windows needs this) + ReservedSpace ro_rs = shared_rs.first_part(SharedReadOnlySize); + ReservedSpace tmp_rs1 = shared_rs.last_part(SharedReadOnlySize); + ReservedSpace rw_rs = tmp_rs1.first_part(SharedReadWriteSize); + ReservedSpace tmp_rs2 = tmp_rs1.last_part(SharedReadWriteSize); + ReservedSpace md_rs = tmp_rs2.first_part(SharedMiscDataSize); + ReservedSpace mc_rs = tmp_rs2.last_part(SharedMiscDataSize); + + // Map each shared region + if ((_ro_base = mapinfo->map_region(ro)) != NULL && + (_rw_base = mapinfo->map_region(rw)) != NULL && + (_md_base = mapinfo->map_region(md)) != NULL && + (_mc_base = mapinfo->map_region(mc)) != NULL && + (image_alignment == (size_t)max_alignment())) { + // Success (no need to do anything) + return true; + } else { + // If there was a failure in mapping any of the spaces, unmap the ones + // that succeeded + if (_ro_base != NULL) mapinfo->unmap_region(ro); + if (_rw_base != NULL) mapinfo->unmap_region(rw); + if (_md_base != NULL) mapinfo->unmap_region(md); + if (_mc_base != NULL) mapinfo->unmap_region(mc); + // Release the entire mapped region + shared_rs.release(); + // If -Xshare:on is specified, print out the error message and exit VM, + // otherwise, set UseSharedSpaces to false and continue. + if (RequireSharedSpaces) { + vm_exit_during_initialization("Unable to use shared archive.", NULL); + } else { + FLAG_SET_DEFAULT(UseSharedSpaces, false); + } + return false; + } +} + +// Read the miscellaneous data from the shared file, and +// serialize it out to its various destinations. + +void MetaspaceShared::initialize_shared_spaces() { + FileMapInfo *mapinfo = FileMapInfo::current_info(); + + char* buffer = mapinfo->region_base(md); + + // Skip over (reserve space for) a list of addresses of C++ vtables + // for Klass objects. They get filled in later. + + void** vtbl_list = (void**)buffer; + buffer += MetaspaceShared::vtbl_list_size * sizeof(void*); + Universe::init_self_patching_vtbl_list(vtbl_list, vtbl_list_size); + + // Skip over (reserve space for) dummy C++ vtables Klass objects. + // They are used as is. + + intptr_t vtable_size = *(intptr_t*)buffer; + buffer += sizeof(intptr_t); + buffer += vtable_size; + + // Create the symbol table using the bucket array at this spot in the + // misc data space. Since the symbol table is often modified, this + // region (of mapped pages) will be copy-on-write. + + int symbolTableLen = *(intptr_t*)buffer; + buffer += sizeof(intptr_t); + int number_of_entries = *(intptr_t*)buffer; + buffer += sizeof(intptr_t); + SymbolTable::create_table((HashtableBucket*)buffer, symbolTableLen, + number_of_entries); + buffer += symbolTableLen; + + // Create the shared dictionary using the bucket array at this spot in + // the misc data space. Since the shared dictionary table is never + // modified, this region (of mapped pages) will be (effectively, if + // not explicitly) read-only. + + int sharedDictionaryLen = *(intptr_t*)buffer; + buffer += sizeof(intptr_t); + number_of_entries = *(intptr_t*)buffer; + buffer += sizeof(intptr_t); + SystemDictionary::set_shared_dictionary((HashtableBucket*)buffer, + sharedDictionaryLen, + number_of_entries); + buffer += sharedDictionaryLen; + + // Create the package info table using the bucket array at this spot in + // the misc data space. Since the package info table is never + // modified, this region (of mapped pages) will be (effectively, if + // not explicitly) read-only. + + int pkgInfoLen = *(intptr_t*)buffer; + buffer += sizeof(intptr_t); + number_of_entries = *(intptr_t*)buffer; + buffer += sizeof(intptr_t); + ClassLoader::create_package_info_table((HashtableBucket*)buffer, pkgInfoLen, + number_of_entries); + buffer += pkgInfoLen; + ClassLoader::verify(); + + // The following data in the shared misc data region are the linked + // list elements (HashtableEntry objects) for the symbol table, string + // table, and shared dictionary. The heap objects refered to by the + // symbol table, string table, and shared dictionary are permanent and + // unmovable. Since new entries added to the string and symbol tables + // are always added at the beginning of the linked lists, THESE LINKED + // LIST ELEMENTS ARE READ-ONLY. + + int len = *(intptr_t*)buffer; // skip over symbol table entries + buffer += sizeof(intptr_t); + buffer += len; + + len = *(intptr_t*)buffer; // skip over shared dictionary entries + buffer += sizeof(intptr_t); + buffer += len; + + len = *(intptr_t*)buffer; // skip over package info table entries + buffer += sizeof(intptr_t); + buffer += len; + + len = *(intptr_t*)buffer; // skip over package info table char[] arrays. + buffer += sizeof(intptr_t); + buffer += len; + + intptr_t* array = (intptr_t*)buffer; + ReadClosure rc(&array); + serialize(&rc); + + // Close the mapinfo file + mapinfo->close(); +} + +// JVM/TI RedefineClasses() support: +bool MetaspaceShared::remap_shared_readonly_as_readwrite() { + assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); + + if (UseSharedSpaces) { + // remap the shared readonly space to shared readwrite, private + FileMapInfo* mapinfo = FileMapInfo::current_info(); + if (!mapinfo->remap_shared_readonly_as_readwrite()) { + return false; + } + } + return true; +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/metaspaceShared.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/memory/metaspaceShared.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#ifndef SHARE_VM_MEMORY_METASPACE_SHARED_HPP +#define SHARE_VM_MEMORY_METASPACE_SHARED_HPP + +#include "memory/allocation.hpp" +#include "memory/memRegion.hpp" +#include "runtime/virtualspace.hpp" +#include "utilities/exceptions.hpp" +#include "utilities/macros.hpp" + +class FileMapInfo; + +// Class Data Sharing Support +class MetaspaceShared : AllStatic { + + // CDS support + static ReservedSpace* _shared_rs; + static int _max_alignment; + + public: + enum { + vtbl_list_size = 17, // number of entries in the shared space vtable list. + num_virtuals = 200 // maximum number of virtual functions + // If virtual functions are added to Metadata, + // this number needs to be increased. Also, + // SharedMiscCodeSize will need to be increased. + }; + + enum { + ro = 0, // read-only shared space in the heap + rw = 1, // read-write shared space in the heap + md = 2, // miscellaneous data for initializing tables, etc. + mc = 3, // miscellaneous code - vtable replacement. + n_regions = 4 + }; + + static void set_max_alignment(int alignment) KERNEL_RETURN; + static int max_alignment() KERNEL_RETURN_(0); + + static void preload_and_dump(TRAPS) KERNEL_RETURN; + static ReservedSpace* shared_rs(); + static void set_shared_rs(ReservedSpace* rs) KERNEL_RETURN; + + static bool map_shared_spaces(FileMapInfo* mapinfo) KERNEL_RETURN_(false); + static void initialize_shared_spaces() KERNEL_RETURN; + + // Return true if given address is in the mapped shared space. + static bool is_in_shared_space(const void* p) KERNEL_RETURN_(false); + + static void generate_vtable_methods(void** vtbl_list, + void** vtable, + char** md_top, char* md_end, + char** mc_top, char* mc_end); + static void serialize(SerializeClosure* sc); + + // JVM/TI RedefineClasses() support: + // Remap the shared readonly space to shared readwrite, private if + // sharing is enabled. Simply returns true if sharing is not enabled + // or if the remapping has already been done by a prior call. + static bool remap_shared_readonly_as_readwrite() KERNEL_RETURN_(true); + + static void print_shared_spaces(); +}; +#endif // SHARE_VM_MEMORY_METASPACE_SHARED_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/modRefBarrierSet.hpp --- a/src/share/vm/memory/modRefBarrierSet.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/modRefBarrierSet.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,7 +51,6 @@ bool read_ref_needs_barrier(void* field) { return false; } bool read_prim_needs_barrier(HeapWord* field, size_t bytes) { return false; } - virtual bool write_ref_needs_barrier(void* field, oop new_val) = 0; bool write_prim_needs_barrier(HeapWord* field, size_t bytes, juint val1, juint val2) { return false; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/oopFactory.cpp --- a/src/share/vm/memory/oopFactory.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/oopFactory.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -31,17 +31,8 @@ #include "memory/oopFactory.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" -#include "oops/compiledICHolderKlass.hpp" -#include "oops/constMethodKlass.hpp" -#include "oops/constantPoolKlass.hpp" -#include "oops/cpCacheKlass.hpp" #include "oops/instanceKlass.hpp" -#include "oops/instanceKlassKlass.hpp" #include "oops/instanceOop.hpp" -#include "oops/klassKlass.hpp" -#include "oops/klassOop.hpp" -#include "oops/methodDataKlass.hpp" -#include "oops/methodKlass.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" @@ -55,135 +46,45 @@ return result; } -typeArrayOop oopFactory::new_permanent_charArray(int length, TRAPS) { - return typeArrayKlass::cast(Universe::charArrayKlassObj())->allocate_permanent(length, THREAD); -} - -typeArrayOop oopFactory::new_permanent_byteArray(int length, TRAPS) { - return typeArrayKlass::cast(Universe::byteArrayKlassObj())->allocate_permanent(length, THREAD); +typeArrayOop oopFactory::new_tenured_charArray(int length, TRAPS) { + return typeArrayKlass::cast(Universe::charArrayKlassObj())->allocate(length, THREAD); } - -typeArrayOop oopFactory::new_permanent_shortArray(int length, TRAPS) { - return typeArrayKlass::cast(Universe::shortArrayKlassObj())->allocate_permanent(length, THREAD); +typeArrayOop oopFactory::new_typeArray(BasicType type, int length, TRAPS) { + Klass* type_asKlassOop = Universe::typeArrayKlassObj(type); + typeArrayKlass* type_asArrayKlass = typeArrayKlass::cast(type_asKlassOop); + typeArrayOop result = type_asArrayKlass->allocate(length, THREAD); + return result; } - -typeArrayOop oopFactory::new_permanent_intArray(int length, TRAPS) { - return typeArrayKlass::cast(Universe::intArrayKlassObj())->allocate_permanent(length, THREAD); -} - - -typeArrayOop oopFactory::new_typeArray(BasicType type, int length, TRAPS) { - klassOop type_asKlassOop = Universe::typeArrayKlassObj(type); +// Create a Java array that points to metadata. +// As far as Java code is concerned, a metaData array is either an array of +// int or long depending on pointer size. Only a few things use this, like +// stack trace elements in Throwable. They cast Method* into this type. +// Note:can't point to symbols because there's no way to unreference count +// them when this object goes away. +typeArrayOop oopFactory::new_metaDataArray(int length, TRAPS) { + BasicType type = LP64_ONLY(T_LONG) NOT_LP64(T_INT); + Klass* type_asKlassOop = Universe::typeArrayKlassObj(type); typeArrayKlass* type_asArrayKlass = typeArrayKlass::cast(type_asKlassOop); typeArrayOop result = type_asArrayKlass->allocate_common(length, true, THREAD); return result; } typeArrayOop oopFactory::new_typeArray_nozero(BasicType type, int length, TRAPS) { - klassOop type_asKlassOop = Universe::typeArrayKlassObj(type); + Klass* type_asKlassOop = Universe::typeArrayKlassObj(type); typeArrayKlass* type_asArrayKlass = typeArrayKlass::cast(type_asKlassOop); typeArrayOop result = type_asArrayKlass->allocate_common(length, false, THREAD); return result; } -objArrayOop oopFactory::new_objArray(klassOop klass, int length, TRAPS) { +objArrayOop oopFactory::new_objArray(Klass* klass, int length, TRAPS) { assert(klass->is_klass(), "must be instance class"); - if (klass->klass_part()->oop_is_array()) { - return ((arrayKlass*)klass->klass_part())->allocate_arrayArray(1, length, THREAD); + if (klass->oop_is_array()) { + return ((arrayKlass*)klass)->allocate_arrayArray(1, length, THREAD); } else { - assert (klass->klass_part()->oop_is_instance(), "new object array with klass not an instanceKlass"); - return ((instanceKlass*)klass->klass_part())->allocate_objArray(1, length, THREAD); + assert (klass->oop_is_instance(), "new object array with klass not an InstanceKlass"); + return ((InstanceKlass*)klass)->allocate_objArray(1, length, THREAD); } } - -objArrayOop oopFactory::new_system_objArray(int length, TRAPS) { - int size = objArrayOopDesc::object_size(length); - KlassHandle klass (THREAD, Universe::systemObjArrayKlassObj()); - objArrayOop o = (objArrayOop) - Universe::heap()->permanent_array_allocate(klass, size, length, CHECK_NULL); - // initialization not needed, allocated cleared - return o; -} - - -constantPoolOop oopFactory::new_constantPool(int length, - bool is_conc_safe, - TRAPS) { - constantPoolKlass* ck = constantPoolKlass::cast(Universe::constantPoolKlassObj()); - return ck->allocate(length, is_conc_safe, CHECK_NULL); -} - - -constantPoolCacheOop oopFactory::new_constantPoolCache(int length, - TRAPS) { - constantPoolCacheKlass* ck = constantPoolCacheKlass::cast(Universe::constantPoolCacheKlassObj()); - return ck->allocate(length, CHECK_NULL); -} - - -klassOop oopFactory::new_instanceKlass(Symbol* name, int vtable_len, int itable_len, - int static_field_size, - unsigned int nonstatic_oop_map_count, - AccessFlags access_flags, - ReferenceType rt, - KlassHandle host_klass, TRAPS) { - instanceKlassKlass* ikk = instanceKlassKlass::cast(Universe::instanceKlassKlassObj()); - return ikk->allocate_instance_klass(name, vtable_len, itable_len, - static_field_size, nonstatic_oop_map_count, - access_flags, rt, host_klass, CHECK_NULL); -} - - -constMethodOop oopFactory::new_constMethod(int byte_code_size, - int compressed_line_number_size, - int localvariable_table_length, - int exception_table_length, - int checked_exceptions_length, - bool is_conc_safe, - TRAPS) { - klassOop cmkObj = Universe::constMethodKlassObj(); - constMethodKlass* cmk = constMethodKlass::cast(cmkObj); - return cmk->allocate(byte_code_size, compressed_line_number_size, - localvariable_table_length, exception_table_length, - checked_exceptions_length, is_conc_safe, - CHECK_NULL); -} - - -methodOop oopFactory::new_method(int byte_code_size, AccessFlags access_flags, - int compressed_line_number_size, - int localvariable_table_length, - int exception_table_length, - int checked_exceptions_length, - bool is_conc_safe, - TRAPS) { - methodKlass* mk = methodKlass::cast(Universe::methodKlassObj()); - assert(!access_flags.is_native() || byte_code_size == 0, - "native methods should not contain byte codes"); - constMethodOop cm = new_constMethod(byte_code_size, - compressed_line_number_size, - localvariable_table_length, - exception_table_length, - checked_exceptions_length, - is_conc_safe, CHECK_NULL); - constMethodHandle rw(THREAD, cm); - return mk->allocate(rw, access_flags, CHECK_NULL); -} - - -methodDataOop oopFactory::new_methodData(methodHandle method, TRAPS) { - methodDataKlass* mdk = methodDataKlass::cast(Universe::methodDataKlassObj()); - return mdk->allocate(method, CHECK_NULL); -} - - -compiledICHolderOop oopFactory::new_compiledICHolder(methodHandle method, KlassHandle klass, TRAPS) { - compiledICHolderKlass* ck = (compiledICHolderKlass*) Universe::compiledICHolderKlassObj()->klass_part(); - compiledICHolderOop c = ck->allocate(CHECK_NULL); - c->set_holder_method(method()); - c->set_holder_klass(klass()); - return c; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/oopFactory.hpp --- a/src/share/vm/memory/oopFactory.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/oopFactory.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -28,7 +28,6 @@ #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "memory/universe.hpp" -#include "oops/klassOop.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.hpp" #include "oops/typeArrayKlass.hpp" @@ -52,68 +51,20 @@ // create java.lang.Object[] static objArrayOop new_objectArray(int length, TRAPS) { + assert(Universe::objectArrayKlassObj() != NULL, "Too early?"); return objArrayKlass:: cast(Universe::objectArrayKlassObj())->allocate(length, CHECK_NULL); } static typeArrayOop new_charArray (const char* utf8_str, TRAPS); - static typeArrayOop new_permanent_charArray (int length, TRAPS); - static typeArrayOop new_permanent_byteArray (int length, TRAPS); // used for class file structures - static typeArrayOop new_permanent_shortArray(int length, TRAPS); // used for class file structures - static typeArrayOop new_permanent_intArray (int length, TRAPS); // used for class file structures + static typeArrayOop new_tenured_charArray(int length, TRAPS); static typeArrayOop new_typeArray(BasicType type, int length, TRAPS); static typeArrayOop new_typeArray_nozero(BasicType type, int length, TRAPS); - - // Constant pools - static constantPoolOop new_constantPool (int length, - bool is_conc_safe, - TRAPS); - static constantPoolCacheOop new_constantPoolCache(int length, - TRAPS); - - // Instance classes - static klassOop new_instanceKlass(Symbol* name, - int vtable_len, int itable_len, - int static_field_size, - unsigned int nonstatic_oop_map_count, - AccessFlags access_flags, - ReferenceType rt, - KlassHandle host_klass, TRAPS); - - // Methods -private: - static constMethodOop new_constMethod(int byte_code_size, - int compressed_line_number_size, - int localvariable_table_length, - int exception_table_length, - int checked_exceptions_length, - bool is_conc_safe, - TRAPS); -public: - // Set is_conc_safe for methods which cannot safely be - // processed by concurrent GC even after the return of - // the method. - static methodOop new_method(int byte_code_size, - AccessFlags access_flags, - int compressed_line_number_size, - int localvariable_table_length, - int exception_table_length, - int checked_exceptions_length, - bool is_conc_safe, - TRAPS); - - // Method Data containers - static methodDataOop new_methodData(methodHandle method, TRAPS); - - // System object arrays - static objArrayOop new_system_objArray(int length, TRAPS); + static typeArrayOop new_metaDataArray(int length, TRAPS); // Regular object arrays - static objArrayOop new_objArray(klassOop klass, int length, TRAPS); - - // For compiled ICs - static compiledICHolderOop new_compiledICHolder(methodHandle method, KlassHandle klass, TRAPS); + static objArrayOop new_objArray(Klass* klass, int length, TRAPS); }; #endif // SHARE_VM_MEMORY_OOPFACTORY_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/permGen.cpp --- a/src/share/vm/memory/permGen.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,151 +0,0 @@ -/* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "gc_implementation/shared/cSpaceCounters.hpp" -#include "gc_implementation/shared/vmGCOperations.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/blockOffsetTable.inline.hpp" -#include "memory/compactPermGen.hpp" -#include "memory/gcLocker.hpp" -#include "memory/gcLocker.inline.hpp" -#include "memory/genCollectedHeap.hpp" -#include "memory/generation.inline.hpp" -#include "memory/permGen.hpp" -#include "memory/universe.hpp" -#include "oops/oop.inline.hpp" -#include "runtime/java.hpp" -#include "runtime/vmThread.hpp" - -HeapWord* PermGen::request_expand_and_allocate(Generation* gen, size_t size, - GCCause::Cause prev_cause) { - if (gen->capacity() < _capacity_expansion_limit || - prev_cause != GCCause::_no_gc || UseG1GC) { // last disjunct is a temporary hack for G1 - return gen->expand_and_allocate(size, false); - } - // We have reached the limit of capacity expansion where - // we will not expand further until a GC is done; request denied. - return NULL; -} - -HeapWord* PermGen::mem_allocate_in_gen(size_t size, Generation* gen) { - GCCause::Cause next_cause = GCCause::_permanent_generation_full; - GCCause::Cause prev_cause = GCCause::_no_gc; - unsigned int gc_count_before, full_gc_count_before; - HeapWord* obj; - - for (;;) { - { - MutexLocker ml(Heap_lock); - if ((obj = gen->allocate(size, false)) != NULL) { - return obj; - } - // Attempt to expand and allocate the requested space: - // specific subtypes may use specific policy to either expand - // or not. The default policy (see above) is to expand until - // _capacity_expansion_limit, and no further unless a GC is done. - // Concurrent collectors may decide to kick off a concurrent - // collection under appropriate conditions. - obj = request_expand_and_allocate(gen, size, prev_cause); - - if (obj != NULL || prev_cause == GCCause::_last_ditch_collection) { - return obj; - } - if (GC_locker::is_active_and_needs_gc()) { - // If this thread is not in a jni critical section, we stall - // the requestor until the critical section has cleared and - // GC allowed. When the critical section clears, a GC is - // initiated by the last thread exiting the critical section; so - // we retry the allocation sequence from the beginning of the loop, - // rather than causing more, now probably unnecessary, GC attempts. - JavaThread* jthr = JavaThread::current(); - if (!jthr->in_critical()) { - MutexUnlocker mul(Heap_lock); - // Wait for JNI critical section to be exited - GC_locker::stall_until_clear(); - continue; - } else { - if (CheckJNICalls) { - fatal("Possible deadlock due to allocating while" - " in jni critical section"); - } - return NULL; - } - } - // Read the GC count while holding the Heap_lock - gc_count_before = SharedHeap::heap()->total_collections(); - full_gc_count_before = SharedHeap::heap()->total_full_collections(); - } - - // Give up heap lock above, VMThread::execute below gets it back - VM_GenCollectForPermanentAllocation op(size, gc_count_before, full_gc_count_before, - next_cause); - VMThread::execute(&op); - if (!op.prologue_succeeded() || op.gc_locked()) { - assert(op.result() == NULL, "must be NULL if gc_locked() is true"); - continue; // retry and/or stall as necessary - } - obj = op.result(); - assert(obj == NULL || SharedHeap::heap()->is_in_reserved(obj), - "result not in heap"); - if (obj != NULL) { - return obj; - } - prev_cause = next_cause; - next_cause = GCCause::_last_ditch_collection; - } -} - -CompactingPermGen::CompactingPermGen(ReservedSpace rs, - ReservedSpace shared_rs, - size_t initial_byte_size, - GenRemSet* remset, - PermanentGenerationSpec* perm_spec) -{ - CompactingPermGenGen* g = - new CompactingPermGenGen(rs, shared_rs, initial_byte_size, -1, remset, - NULL, perm_spec); - if (g == NULL) - vm_exit_during_initialization("Could not allocate a CompactingPermGen"); - _gen = g; - - g->initialize_performance_counters(); - - _capacity_expansion_limit = g->capacity() + MaxPermHeapExpansion; -} - -HeapWord* CompactingPermGen::mem_allocate(size_t size) { - return mem_allocate_in_gen(size, _gen); -} - -void CompactingPermGen::compute_new_size() { - size_t desired_capacity = align_size_up(_gen->used(), MinPermHeapExpansion); - if (desired_capacity < PermSize) { - desired_capacity = PermSize; - } - if (_gen->capacity() > desired_capacity) { - _gen->shrink(_gen->capacity() - desired_capacity); - } - set_capacity_expansion_limit(_gen->capacity() + MaxPermHeapExpansion); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/permGen.hpp --- a/src/share/vm/memory/permGen.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_MEMORY_PERMGEN_HPP -#define SHARE_VM_MEMORY_PERMGEN_HPP - -#include "gc_interface/gcCause.hpp" -#include "memory/generation.hpp" -#include "memory/iterator.hpp" -#include "runtime/handles.hpp" -#include "runtime/mutexLocker.hpp" -#include "runtime/virtualspace.hpp" - -// All heaps contains a "permanent generation," containing permanent -// (reflective) objects. This is like a regular generation in some ways, -// but unlike one in others, and so is split apart. - -class Generation; -class GenRemSet; -class CSpaceCounters; - -// PermGen models the part of the heap used to allocate class meta-data. - -class PermGen : public CHeapObj { - friend class VMStructs; - protected: - size_t _capacity_expansion_limit; // maximum expansion allowed without a - // full gc occurring - void set_capacity_expansion_limit(size_t limit) { - assert_locked_or_safepoint(Heap_lock); - _capacity_expansion_limit = limit; - } - - HeapWord* mem_allocate_in_gen(size_t size, Generation* gen); - // Along with mem_allocate_in_gen() above, implements policy for - // "scheduling" allocation/expansion/collection of the perm gen. - // The virtual method request_...() below can be overridden by - // subtypes that want to implement a different expansion/collection - // policy from the default provided. - virtual HeapWord* request_expand_and_allocate(Generation* gen, size_t size, - GCCause::Cause prev_cause); - - public: - enum Name { - MarkSweepCompact, MarkSweep, ConcurrentMarkSweep - }; - - // Permanent allocation (initialized) - virtual HeapWord* mem_allocate(size_t size) = 0; - - // Mark sweep support - virtual void compute_new_size() = 0; - - // Ideally, we would use MI (IMHO) but we'll do delegation instead. - virtual Generation* as_gen() const = 0; - - virtual void oop_iterate(OopClosure* cl) { - Generation* g = as_gen(); - assert(g != NULL, "as_gen() NULL"); - g->oop_iterate(cl); - } - - virtual void object_iterate(ObjectClosure* cl) { - Generation* g = as_gen(); - assert(g != NULL, "as_gen() NULL"); - g->object_iterate(cl); - } - - // Performance Counter support - virtual void update_counters() { - Generation* g = as_gen(); - assert(g != NULL, "as_gen() NULL"); - g->update_counters(); - } -}; - -#endif // SHARE_VM_MEMORY_PERMGEN_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/referenceProcessor.cpp --- a/src/share/vm/memory/referenceProcessor.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/referenceProcessor.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -541,7 +541,7 @@ !policy->should_clear_reference(iter.obj(), _soft_ref_timestamp_clock)) { if (TraceReferenceGC) { gclog_or_tty->print_cr("Dropping reference (" INTPTR_FORMAT ": %s" ") by policy", - iter.obj(), iter.obj()->blueprint()->internal_name()); + iter.obj(), iter.obj()->klass()->internal_name()); } // Remove Reference object from list iter.remove(); @@ -580,7 +580,7 @@ if (iter.is_referent_alive()) { if (TraceReferenceGC) { gclog_or_tty->print_cr("Dropping strongly reachable reference (" INTPTR_FORMAT ": %s)", - iter.obj(), iter.obj()->blueprint()->internal_name()); + iter.obj(), iter.obj()->klass()->internal_name()); } // The referent is reachable after all. // Remove Reference object from list. @@ -666,7 +666,7 @@ if (TraceReferenceGC) { gclog_or_tty->print_cr("Adding %sreference (" INTPTR_FORMAT ": %s) as pending", clear_referent ? "cleared " : "", - iter.obj(), iter.obj()->blueprint()->internal_name()); + iter.obj(), iter.obj()->klass()->internal_name()); } assert(iter.obj()->is_oop(UseConcMarkSweepGC), "Adding a bad reference"); iter.next(); @@ -1081,14 +1081,14 @@ if (TraceReferenceGC) { gclog_or_tty->print_cr("Discovered reference (mt) (" INTPTR_FORMAT ": %s)", - obj, obj->blueprint()->internal_name()); + obj, obj->klass()->internal_name()); } } else { // If retest was non NULL, another thread beat us to it: // The reference has already been discovered... if (TraceReferenceGC) { gclog_or_tty->print_cr("Already discovered reference (" INTPTR_FORMAT ": %s)", - obj, obj->blueprint()->internal_name()); + obj, obj->klass()->internal_name()); } } } @@ -1183,7 +1183,7 @@ // The reference has already been discovered... if (TraceReferenceGC) { gclog_or_tty->print_cr("Already discovered reference (" INTPTR_FORMAT ": %s)", - obj, obj->blueprint()->internal_name()); + obj, obj->klass()->internal_name()); } if (RefDiscoveryPolicy == ReferentBasedDiscovery) { // assumes that an object is not processed twice; @@ -1251,7 +1251,7 @@ if (TraceReferenceGC) { gclog_or_tty->print_cr("Discovered reference (" INTPTR_FORMAT ": %s)", - obj, obj->blueprint()->internal_name()); + obj, obj->klass()->internal_name()); } } assert(obj->is_oop(), "Discovered a bad reference"); @@ -1267,18 +1267,10 @@ BoolObjectClosure* is_alive, OopClosure* keep_alive, VoidClosure* complete_gc, - YieldClosure* yield, - bool should_unload_classes) { + YieldClosure* yield) { NOT_PRODUCT(verify_ok_to_handle_reflists()); -#ifdef ASSERT - bool must_remember_klasses = ClassUnloading && !UseConcMarkSweepGC || - CMSClassUnloadingEnabled && UseConcMarkSweepGC || - ExplicitGCInvokesConcurrentAndUnloadsClasses && - UseConcMarkSweepGC && should_unload_classes; - RememberKlassesChecker mx(must_remember_klasses); -#endif // Soft references { TraceTime tt("Preclean SoftReferences", PrintGCDetails && PrintReferenceGC, @@ -1357,7 +1349,7 @@ // active; we need to trace and mark its cohort. if (TraceReferenceGC) { gclog_or_tty->print_cr("Precleaning Reference (" INTPTR_FORMAT ": %s)", - iter.obj(), iter.obj()->blueprint()->internal_name()); + iter.obj(), iter.obj()->klass()->internal_name()); } // Remove Reference object from list iter.remove(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/referenceProcessor.hpp --- a/src/share/vm/memory/referenceProcessor.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/referenceProcessor.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -345,13 +345,11 @@ // The caller is responsible for taking care of potential // interference with concurrent operations on these lists // (or predicates involved) by other threads. Currently - // only used by the CMS collector. should_unload_classes is - // used to aid assertion checking when classes are collected. + // only used by the CMS collector. void preclean_discovered_references(BoolObjectClosure* is_alive, OopClosure* keep_alive, VoidClosure* complete_gc, - YieldClosure* yield, - bool should_unload_classes); + YieldClosure* yield); // Delete entries in the discovered lists that have // either a null referent or are not active. Such @@ -496,6 +494,7 @@ // Balance each of the discovered lists. void balance_all_queues(); + void verify_list(DiscoveredList& ref_list); // Discover a Reference object, using appropriate discovery criteria bool discover_reference(oop obj, ReferenceType rt); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/restore.cpp --- a/src/share/vm/memory/restore.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,210 +0,0 @@ -/* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/symbolTable.hpp" -#include "classfile/systemDictionary.hpp" -#include "memory/filemap.hpp" -#include "oops/oop.inline.hpp" -#include "utilities/hashtable.inline.hpp" - - -// Closure for serializing initialization data in from a data area -// (oop_array) read from the shared file. - -class ReadClosure : public SerializeOopClosure { -private: - oop** _oop_array; - - inline oop nextOop() { - return *(*_oop_array)++; - } - -public: - ReadClosure(oop** oop_array) { _oop_array = oop_array; } - - void do_oop(oop* p) { - assert(SharedSkipVerify || *p == NULL || *p == Universe::klassKlassObj(), - "initializing previously initialized oop."); - oop obj = nextOop(); - assert(SharedSkipVerify || (intptr_t)obj >= 0 || (intptr_t)obj < -100, - "hit tag while initializing oops."); - assert(SharedSkipVerify || obj->is_oop_or_null(), "invalid oop"); - *p = obj; - } - - void do_oop(narrowOop* p) { ShouldNotReachHere(); } - - void do_ptr(void** p) { - assert(*p == NULL, "initializing previous initialized pointer."); - void* obj = nextOop(); - assert((intptr_t)obj >= 0 || (intptr_t)obj < -100, - "hit tag while initializing ptrs."); - *p = obj; - } - - void do_ptr(HeapWord** p) { do_ptr((void **) p); } - - void do_int(int* p) { - *p = (int)(intptr_t)nextOop(); - } - - void do_size_t(size_t* p) { - // Assumes that size_t and pointers are the same size. - *p = (size_t)nextOop(); - } - - void do_tag(int tag) { - int old_tag; - do_int(&old_tag); - FileMapInfo::assert_mark(tag == old_tag); - } - - void do_region(u_char* start, size_t size) { - assert((intptr_t)start % sizeof(oop) == 0, "bad alignment"); - assert(size % sizeof(oop) == 0, "bad size"); - do_tag((int)size); - while (size > 0) { - *(oop*)start = nextOop(); - start += sizeof(oop); - size -= sizeof(oop); - } - } - - bool reading() const { return true; } -}; - - -// Read the oop and miscellaneous data from the shared file, and -// serialize it out to its various destinations. - -void CompactingPermGenGen::initialize_oops() { - FileMapInfo *mapinfo = FileMapInfo::current_info(); - - char* buffer = mapinfo->region_base(md); - - // Skip over (reserve space for) a list of addresses of C++ vtables - // for Klass objects. They get filled in later. - - void** vtbl_list = (void**)buffer; - buffer += vtbl_list_size * sizeof(void*); - Universe::init_self_patching_vtbl_list(vtbl_list, vtbl_list_size); - - // Skip over (reserve space for) dummy C++ vtables Klass objects. - // They are used as is. - - intptr_t vtable_size = *(intptr_t*)buffer; - buffer += sizeof(intptr_t); - buffer += vtable_size; - - // Skip the recorded symbols. - - intptr_t total_symbol_size = *(intptr_t*)buffer; - buffer += sizeof(intptr_t) * 2; - buffer += total_symbol_size; - - // Create the symbol table using the bucket array at this spot in the - // misc data space. Since the symbol table is often modified, this - // region (of mapped pages) will be copy-on-write. - - int symbolTableLen = *(intptr_t*)buffer; - buffer += sizeof(intptr_t); - int number_of_entries = *(intptr_t*)buffer; - buffer += sizeof(intptr_t); - SymbolTable::create_table((HashtableBucket*)buffer, symbolTableLen, - number_of_entries); - buffer += symbolTableLen; - - // Create the string table using the bucket array at this spot in the - // misc data space. Since the string table is often modified, this - // region (of mapped pages) will be copy-on-write. - - int stringTableLen = *(intptr_t*)buffer; - buffer += sizeof(intptr_t); - number_of_entries = *(intptr_t*)buffer; - buffer += sizeof(intptr_t); - StringTable::create_table((HashtableBucket*)buffer, stringTableLen, - number_of_entries); - buffer += stringTableLen; - - // Create the shared dictionary using the bucket array at this spot in - // the misc data space. Since the shared dictionary table is never - // modified, this region (of mapped pages) will be (effectively, if - // not explicitly) read-only. - - int sharedDictionaryLen = *(intptr_t*)buffer; - buffer += sizeof(intptr_t); - number_of_entries = *(intptr_t*)buffer; - buffer += sizeof(intptr_t); - SystemDictionary::set_shared_dictionary((HashtableBucket*)buffer, - sharedDictionaryLen, - number_of_entries); - buffer += sharedDictionaryLen; - - // Create the package info table using the bucket array at this spot in - // the misc data space. Since the package info table is never - // modified, this region (of mapped pages) will be (effectively, if - // not explicitly) read-only. - - int pkgInfoLen = *(intptr_t*)buffer; - buffer += sizeof(intptr_t); - number_of_entries = *(intptr_t*)buffer; - buffer += sizeof(intptr_t); - ClassLoader::create_package_info_table((HashtableBucket*)buffer, pkgInfoLen, - number_of_entries); - buffer += pkgInfoLen; - ClassLoader::verify(); - - // The following data in the shared misc data region are the linked - // list elements (HashtableEntry objects) for the symbol table, string - // table, and shared dictionary. The heap objects refered to by the - // symbol table, string table, and shared dictionary are permanent and - // unmovable. Since new entries added to the string and symbol tables - // are always added at the beginning of the linked lists, THESE LINKED - // LIST ELEMENTS ARE READ-ONLY. - - int len = *(intptr_t*)buffer; // skip over symbol table entries - buffer += sizeof(intptr_t); - buffer += len; - - len = *(intptr_t*)buffer; // skip over string table entries - buffer += sizeof(intptr_t); - buffer += len; - - len = *(intptr_t*)buffer; // skip over shared dictionary entries - buffer += sizeof(intptr_t); - buffer += len; - - len = *(intptr_t*)buffer; // skip over package info table entries - buffer += sizeof(intptr_t); - buffer += len; - - len = *(intptr_t*)buffer; // skip over package info table char[] arrays. - buffer += sizeof(intptr_t); - buffer += len; - - oop* oop_array = (oop*)buffer; - ReadClosure rc(&oop_array); - serialize_oops(&rc); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/serialize.cpp --- a/src/share/vm/memory/serialize.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/symbolTable.hpp" -#include "classfile/systemDictionary.hpp" -#include "code/codeCache.hpp" -#include "memory/classify.hpp" -#include "memory/compactingPermGenGen.hpp" -#include "oops/compiledICHolderOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/objArrayOop.hpp" -#include "oops/oop.inline.hpp" - - -// Serialize out the block offset shared array for the shared spaces. - -void CompactingPermGenGen::serialize_bts(SerializeOopClosure* soc) { - _ro_bts->serialize(soc, readonly_bottom, readonly_end); - _rw_bts->serialize(soc, readwrite_bottom, readwrite_end); -} - - -// Read/write a data stream for restoring/preserving oop pointers and -// miscellaneous data from/to the shared archive file. - -void CompactingPermGenGen::serialize_oops(SerializeOopClosure* soc) { - int tag = 0; - soc->do_tag(--tag); - - assert(!UseCompressedOops, "UseCompressedOops doesn't work with shared archive"); - // Verify the sizes of various oops in the system. - soc->do_tag(sizeof(oopDesc)); - soc->do_tag(sizeof(instanceOopDesc)); - soc->do_tag(sizeof(methodOopDesc)); - soc->do_tag(sizeof(constMethodOopDesc)); - soc->do_tag(sizeof(methodDataOopDesc)); - soc->do_tag(arrayOopDesc::base_offset_in_bytes(T_BYTE)); - soc->do_tag(sizeof(constantPoolOopDesc)); - soc->do_tag(sizeof(constantPoolCacheOopDesc)); - soc->do_tag(objArrayOopDesc::base_offset_in_bytes()); - soc->do_tag(typeArrayOopDesc::base_offset_in_bytes(T_BYTE)); - soc->do_tag(sizeof(Symbol)); - soc->do_tag(sizeof(klassOopDesc)); - soc->do_tag(sizeof(markOopDesc)); - soc->do_tag(sizeof(compiledICHolderOopDesc)); - - // Dump the block offset table entries. - GenCollectedHeap* gch = GenCollectedHeap::heap(); - CompactingPermGenGen* pg = (CompactingPermGenGen*)gch->perm_gen(); - pg->serialize_bts(soc); - soc->do_tag(--tag); - pg->ro_space()->serialize_block_offset_array_offsets(soc); - soc->do_tag(--tag); - pg->rw_space()->serialize_block_offset_array_offsets(soc); - soc->do_tag(--tag); - - // Special case - this oop needed in oop->is_oop() assertions. - soc->do_ptr((void**)&Universe::_klassKlassObj); - soc->do_tag(--tag); - - // Dump/restore miscellaneous oops. - Universe::oops_do(soc, true); - soc->do_tag(--tag); - CodeCache::oops_do(soc); - soc->do_tag(--tag); - - // Dump/restore references to commonly used names and signatures. - vmSymbols::serialize(soc); - soc->do_tag(--tag); - - soc->do_tag(666); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/sharedHeap.cpp --- a/src/share/vm/memory/sharedHeap.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/sharedHeap.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -55,7 +55,7 @@ SharedHeap::SharedHeap(CollectorPolicy* policy_) : CollectedHeap(), _collector_policy(policy_), - _perm_gen(NULL), _rem_set(NULL), + _rem_set(NULL), _strong_roots_parity(0), _process_strong_tasks(new SubTasksDone(SH_PS_NumElements)), _workers(NULL) @@ -100,15 +100,6 @@ _process_strong_tasks->set_n_threads(t); } -class AssertIsPermClosure: public OopClosure { -public: - virtual void do_oop(oop* p) { - assert((*p) == NULL || (*p)->is_perm(), "Referent should be perm."); - } - virtual void do_oop(narrowOop* p) { ShouldNotReachHere(); } -}; -static AssertIsPermClosure assert_is_perm_closure; - #ifdef ASSERT class AssertNonScavengableClosure: public OopClosure { public: @@ -143,12 +134,13 @@ } void SharedHeap::process_strong_roots(bool activate_scope, - bool collecting_perm_gen, + bool is_scavenging, ScanningOption so, OopClosure* roots, CodeBlobClosure* code_roots, - OopsInGenClosure* perm_blk) { + KlassClosure* klass_closure) { StrongRootsScope srs(this, activate_scope); + // General strong roots. assert(_strong_roots_parity != 0, "must have called prologue code"); // _n_termination for _process_strong_tasks should be set up stream @@ -157,8 +149,6 @@ // is executing in another GC worker. if (!_process_strong_tasks->is_task_claimed(SH_PS_Universe_oops_do)) { Universe::oops_do(roots); - // Consider perm-gen discovered lists to be strong. - perm_gen()->ref_processor()->weak_oops_do(roots); } // Global (strong) JNI handles if (!_process_strong_tasks->is_task_claimed(SH_PS_JNIHandles_oops_do)) @@ -181,41 +171,33 @@ if (!_process_strong_tasks->is_task_claimed(SH_PS_SystemDictionary_oops_do)) { if (so & SO_AllClasses) { SystemDictionary::oops_do(roots); + ClassLoaderDataGraph::oops_do(roots, klass_closure, !is_scavenging); } else if (so & SO_SystemClasses) { SystemDictionary::always_strong_oops_do(roots); + ClassLoaderDataGraph::always_strong_oops_do(roots, klass_closure, !is_scavenging); + } else { + ShouldNotReachHere2("We should always have selected either SO_AllClasses or SO_SystemClasses"); } } if (!_process_strong_tasks->is_task_claimed(SH_PS_StringTable_oops_do)) { - if (so & SO_Strings || (!collecting_perm_gen && !JavaObjectsInPerm)) { + if (so & SO_Strings) { StringTable::oops_do(roots); } - if (JavaObjectsInPerm) { - // Verify the string table contents are in the perm gen - NOT_PRODUCT(StringTable::oops_do(&assert_is_perm_closure)); - } } if (!_process_strong_tasks->is_task_claimed(SH_PS_CodeCache_oops_do)) { if (so & SO_CodeCache) { - // (Currently, CMSCollector uses this to do intermediate-strength collections.) - assert(collecting_perm_gen, "scanning all of code cache"); assert(code_roots != NULL, "must supply closure for code cache"); - if (code_roots != NULL) { + + if (is_scavenging) { + // We only visit parts of the CodeCache when scavenging. + CodeCache::scavenge_root_nmethods_do(code_roots); + } else { + // CMSCollector uses this to do intermediate-strength collections. + // We scan the entire code cache, since CodeCache::do_unloading is not called. CodeCache::blobs_do(code_roots); } - } else if (so & (SO_SystemClasses|SO_AllClasses)) { - if (!collecting_perm_gen) { - // If we are collecting from class statics, but we are not going to - // visit all of the CodeCache, collect from the non-perm roots if any. - // This makes the code cache function temporarily as a source of strong - // roots for oops, until the next major collection. - // - // If collecting_perm_gen is true, we require that this phase will call - // CodeCache::do_unloading. This will kill off nmethods with expired - // weak references, such as stale invokedynamic targets. - CodeCache::scavenge_root_nmethods_do(code_roots); - } } // Verify that the code cache contents are not subject to // movement by a scavenging collection. @@ -223,11 +205,6 @@ DEBUG_ONLY(CodeCache::asserted_non_scavengable_nmethods_do(&assert_code_is_non_scavengable)); } - if (!collecting_perm_gen) { - // All threads perform this; coordination is handled internally. - - rem_set()->younger_refs_iterate(perm_gen(), perm_blk); - } _process_strong_tasks->all_tasks_completed(); } @@ -238,33 +215,6 @@ }; static AlwaysTrueClosure always_true; -class SkipAdjustingSharedStrings: public OopClosure { - OopClosure* _clo; -public: - SkipAdjustingSharedStrings(OopClosure* clo) : _clo(clo) {} - - virtual void do_oop(oop* p) { - oop o = (*p); - if (!o->is_shared_readwrite()) { - _clo->do_oop(p); - } - } - virtual void do_oop(narrowOop* p) { ShouldNotReachHere(); } -}; - -// Unmarked shared Strings in the StringTable (which got there due to -// being in the constant pools of as-yet unloaded shared classes) were -// not marked and therefore did not have their mark words preserved. -// These entries are also deliberately not purged from the string -// table during unloading of unmarked strings. If an identity hash -// code was computed for any of these objects, it will not have been -// cleared to zero during the forwarding process or by the -// RecursiveAdjustSharedObjectClosure, and will be confused by the -// adjusting process as a forwarding pointer. We need to skip -// forwarding StringTable entries which contain unmarked shared -// Strings. Actually, since shared strings won't be moving, we can -// just skip adjusting any shared entries in the string table. - void SharedHeap::process_weak_roots(OopClosure* root_closure, CodeBlobClosure* code_roots, OopClosure* non_root_closure) { @@ -272,13 +222,8 @@ JNIHandles::weak_oops_do(&always_true, root_closure); CodeCache::blobs_do(code_roots); - if (UseSharedSpaces && !DumpSharedSpaces) { - SkipAdjustingSharedStrings skip_closure(root_closure); - StringTable::oops_do(&skip_closure); - } else { StringTable::oops_do(root_closure); } -} void SharedHeap::set_barrier_set(BarrierSet* bs) { _barrier_set = bs; @@ -290,9 +235,7 @@ ref_processing_init(); } -void SharedHeap::ref_processing_init() { - perm_gen()->ref_processor_init(); -} +void SharedHeap::ref_processing_init() {} // Some utilities. void SharedHeap::print_size_transition(outputStream* out, diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/sharedHeap.hpp --- a/src/share/vm/memory/sharedHeap.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/sharedHeap.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,14 +27,12 @@ #include "gc_interface/collectedHeap.hpp" #include "memory/generation.hpp" -#include "memory/permGen.hpp" // A "SharedHeap" is an implementation of a java heap for HotSpot. This // is an abstract class: there may be many different kinds of heaps. This // class defines the functions that a heap must implement, and contains // infrastructure common to all heaps. -class PermGen; class Generation; class BarrierSet; class GenRemSet; @@ -47,7 +45,7 @@ class WorkGang; class FlexibleWorkGang; class CollectorPolicy; -class KlassHandle; +class KlassClosure; // Note on use of FlexibleWorkGang's for GC. // There are three places where task completion is determined. @@ -73,14 +71,13 @@ // Example of using SubTasksDone and SequentialSubTasksDone // G1CollectedHeap::g1_process_strong_roots() calls // process_strong_roots(false, // no scoping; this is parallel code -// collecting_perm_gen, so, +// is_scavenging, so, // &buf_scan_non_heap_roots, -// &eager_scan_code_roots, -// &buf_scan_perm); +// &eager_scan_code_roots); // which delegates to SharedHeap::process_strong_roots() and uses // SubTasksDone* _process_strong_tasks to claim tasks. // process_strong_roots() calls -// rem_set()->younger_refs_iterate(perm_gen(), perm_blk); +// rem_set()->younger_refs_iterate() // to scan the card table and which eventually calls down into // CardTableModRefBS::par_non_clean_card_iterate_work(). This method // uses SequentialSubTasksDone* _pst to claim tasks. @@ -121,11 +118,6 @@ // set the static pointer "_sh" to that instance. static SharedHeap* _sh; - // All heaps contain a "permanent generation." This is some ways - // similar to a generation in a generational system, in other ways not. - // See the "PermGen" class. - PermGen* _perm_gen; - // and the Gen Remembered Set, at least one good enough to scan the perm // gen. GenRemSet* _rem_set; @@ -155,8 +147,6 @@ public: static SharedHeap* heap() { return _sh; } - CollectorPolicy *collector_policy() const { return _collector_policy; } - void set_barrier_set(BarrierSet* bs); SubTasksDone* process_strong_tasks() { return _process_strong_tasks; } @@ -166,24 +156,15 @@ // Initialization of ("weak") reference processing support virtual void ref_processing_init(); - void set_perm(PermGen* perm_gen) { _perm_gen = perm_gen; } - // This function returns the "GenRemSet" object that allows us to scan - // generations; at least the perm gen, possibly more in a fully - // generational heap. + // generations in a fully generational heap. GenRemSet* rem_set() { return _rem_set; } - // These function return the "permanent" generation, in which - // reflective objects are allocated and stored. Two versions, the second - // of which returns the view of the perm gen as a generation. - PermGen* perm() const { return _perm_gen; } - Generation* perm_gen() const { return _perm_gen->as_gen(); } - // Iteration functions. - void oop_iterate(OopClosure* cl) = 0; + void oop_iterate(ExtendedOopClosure* cl) = 0; // Same as above, restricted to a memory region. - virtual void oop_iterate(MemRegion mr, OopClosure* cl) = 0; + virtual void oop_iterate(MemRegion mr, ExtendedOopClosure* cl) = 0; // Iterate over all objects allocated since the last collection, calling // "cl->do_object" on each. The heap must have been initialized properly @@ -251,22 +232,18 @@ FlexibleWorkGang* workers() const { return _workers; } // Invoke the "do_oop" method the closure "roots" on all root locations. - // If "collecting_perm_gen" is false, then roots that may only contain - // references to permGen objects are not scanned; instead, in that case, - // the "perm_blk" closure is applied to all outgoing refs in the - // permanent generation. The "so" argument determines which of roots - // the closure is applied to: + // The "so" argument determines which roots the closure is applied to: // "SO_None" does none; // "SO_AllClasses" applies the closure to all entries in the SystemDictionary; // "SO_SystemClasses" to all the "system" classes and loaders; // "SO_Strings" applies the closure to all entries in StringTable; // "SO_CodeCache" applies the closure to all elements of the CodeCache. void process_strong_roots(bool activate_scope, - bool collecting_perm_gen, + bool is_scavenging, ScanningOption so, OopClosure* roots, CodeBlobClosure* code_roots, - OopsInGenClosure* perm_blk); + KlassClosure* klass_closure); // Apply "blk" to all the weak roots of the system. These include // JNI weak roots, the code cache, system dictionary, symbol table, @@ -296,46 +273,6 @@ // New methods from CollectedHeap // - size_t permanent_capacity() const { - assert(perm_gen(), "NULL perm gen"); - return perm_gen()->capacity(); - } - - size_t permanent_used() const { - assert(perm_gen(), "NULL perm gen"); - return perm_gen()->used(); - } - - bool is_in_permanent(const void *p) const { - assert(perm_gen(), "NULL perm gen"); - return perm_gen()->is_in_reserved(p); - } - - // Different from is_in_permanent in that is_in_permanent - // only checks if p is in the reserved area of the heap - // and this checks to see if it in the commited area. - // This is typically used by things like the forte stackwalker - // during verification of suspicious frame values. - bool is_permanent(const void *p) const { - assert(perm_gen(), "NULL perm gen"); - return perm_gen()->is_in(p); - } - - HeapWord* permanent_mem_allocate(size_t size) { - assert(perm_gen(), "NULL perm gen"); - return _perm_gen->mem_allocate(size); - } - - void permanent_oop_iterate(OopClosure* cl) { - assert(perm_gen(), "NULL perm gen"); - _perm_gen->oop_iterate(cl); - } - - void permanent_object_iterate(ObjectClosure* cl) { - assert(perm_gen(), "NULL perm gen"); - _perm_gen->object_iterate(cl); - } - // Some utilities. void print_size_transition(outputStream* out, size_t bytes_before, diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/space.cpp --- a/src/share/vm/memory/space.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/space.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -178,7 +178,7 @@ } } -DirtyCardToOopClosure* Space::new_dcto_cl(OopClosure* cl, +DirtyCardToOopClosure* Space::new_dcto_cl(ExtendedOopClosure* cl, CardTableModRefBS::PrecisionStyle precision, HeapWord* boundary) { return new DirtyCardToOopClosure(this, cl, precision, boundary); @@ -253,11 +253,11 @@ // (There are only two of these, rather than N, because the split is due // only to the introduction of the FilteringClosure, a local part of the // impl of this abstraction.) -ContiguousSpaceDCTOC__walk_mem_region_with_cl_DEFN(OopClosure) +ContiguousSpaceDCTOC__walk_mem_region_with_cl_DEFN(ExtendedOopClosure) ContiguousSpaceDCTOC__walk_mem_region_with_cl_DEFN(FilteringClosure) DirtyCardToOopClosure* -ContiguousSpace::new_dcto_cl(OopClosure* cl, +ContiguousSpace::new_dcto_cl(ExtendedOopClosure* cl, CardTableModRefBS::PrecisionStyle precision, HeapWord* boundary) { return new ContiguousSpaceDCTOC(this, cl, precision, boundary); @@ -548,7 +548,7 @@ } } -void Space::oop_iterate(OopClosure* blk) { +void Space::oop_iterate(ExtendedOopClosure* blk) { ObjectToOopClosure blk2(blk); object_iterate(&blk2); } @@ -679,7 +679,7 @@ #undef ContigSpace_PAR_OOP_ITERATE_DEFN #endif // SERIALGC -void ContiguousSpace::oop_iterate(OopClosure* blk) { +void ContiguousSpace::oop_iterate(ExtendedOopClosure* blk) { if (is_empty()) return; HeapWord* obj_addr = bottom(); HeapWord* t = top(); @@ -689,7 +689,7 @@ } } -void ContiguousSpace::oop_iterate(MemRegion mr, OopClosure* blk) { +void ContiguousSpace::oop_iterate(MemRegion mr, ExtendedOopClosure* blk) { if (is_empty()) { return; } @@ -1002,17 +1002,7 @@ guarantee(p == top(), "end of last object must match end of space"); } -void OffsetTableContigSpace::serialize_block_offset_array_offsets( - SerializeOopClosure* soc) { - _offsets.serialize(soc); -} - size_t TenuredSpace::allowed_dead_ratio() const { return MarkSweepDeadRatio; } - - -size_t ContigPermSpace::allowed_dead_ratio() const { - return PermMarkSweepDeadRatio; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/space.hpp --- a/src/share/vm/memory/space.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/space.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -65,7 +65,6 @@ // - OffsetTableContigSpace -- contiguous space with a block offset array // that allows "fast" block_start calls // - TenuredSpace -- (used for TenuredGeneration) -// - ContigPermSpace -- an offset table contiguous space for perm gen // Forward decls. class Space; @@ -79,9 +78,9 @@ class DirtyCardToOopClosure; // An oop closure that is circumscribed by a filtering memory region. -class SpaceMemRegionOopsIterClosure: public OopClosure { +class SpaceMemRegionOopsIterClosure: public ExtendedOopClosure { private: - OopClosure* _cl; + ExtendedOopClosure* _cl; MemRegion _mr; protected: template void do_oop_work(T* p) { @@ -90,10 +89,17 @@ } } public: - SpaceMemRegionOopsIterClosure(OopClosure* cl, MemRegion mr): + SpaceMemRegionOopsIterClosure(ExtendedOopClosure* cl, MemRegion mr): _cl(cl), _mr(mr) {} virtual void do_oop(oop* p); virtual void do_oop(narrowOop* p); + virtual bool do_metadata() { + // _cl is of type ExtendedOopClosure instead of OopClosure, so that we can check this. + assert(!_cl->do_metadata(), "I've checked all call paths, this shouldn't happen."); + return false; + } + virtual void do_klass(Klass* k) { ShouldNotReachHere(); } + virtual void do_class_loader_data(ClassLoaderData* cld) { ShouldNotReachHere(); } }; // A Space describes a heap area. Class Space is an abstract @@ -209,12 +215,12 @@ // Iterate over all the ref-containing fields of all objects in the // space, calling "cl.do_oop" on each. Fields in objects allocated by // applications of the closure are not included in the iteration. - virtual void oop_iterate(OopClosure* cl); + virtual void oop_iterate(ExtendedOopClosure* cl); // Same as above, restricted to the intersection of a memory region and // the space. Fields in objects allocated by applications of the closure // are not included in the iteration. - virtual void oop_iterate(MemRegion mr, OopClosure* cl) = 0; + virtual void oop_iterate(MemRegion mr, ExtendedOopClosure* cl) = 0; // Iterate over all objects in the space, calling "cl.do_object" on // each. Objects allocated by applications of the closure are not @@ -246,7 +252,7 @@ // overriden to return the appropriate type of closure // depending on the type of space in which the closure will // operate. ResourceArea allocated. - virtual DirtyCardToOopClosure* new_dcto_cl(OopClosure* cl, + virtual DirtyCardToOopClosure* new_dcto_cl(ExtendedOopClosure* cl, CardTableModRefBS::PrecisionStyle precision, HeapWord* boundary = NULL); @@ -321,7 +327,7 @@ class DirtyCardToOopClosure: public MemRegionClosureRO { protected: - OopClosure* _cl; + ExtendedOopClosure* _cl; Space* _sp; CardTableModRefBS::PrecisionStyle _precision; HeapWord* _boundary; // If non-NULL, process only non-NULL oops @@ -351,7 +357,7 @@ virtual void walk_mem_region(MemRegion mr, HeapWord* bottom, HeapWord* top); public: - DirtyCardToOopClosure(Space* sp, OopClosure* cl, + DirtyCardToOopClosure(Space* sp, ExtendedOopClosure* cl, CardTableModRefBS::PrecisionStyle precision, HeapWord* boundary) : _sp(sp), _cl(cl), _precision(precision), _boundary(boundary), @@ -394,8 +400,6 @@ class CompactibleSpace: public Space { friend class VMStructs; friend class CompactibleFreeListSpace; - friend class CompactingPermGenGen; - friend class CMSPermGenGen; private: HeapWord* _compaction_top; CompactibleSpace* _next_compaction_space; @@ -532,7 +536,7 @@ * Occasionally, we want to ensure a full compaction, which is determined \ * by the MarkSweepAlwaysCompactCount parameter. \ */ \ - int invocations = SharedHeap::heap()->perm_gen()->stat_record()->invocations;\ + int invocations = MarkSweep::total_invocations(); \ bool skip_dead = (MarkSweepAlwaysCompactCount < 1) \ ||((invocations % MarkSweepAlwaysCompactCount) != 0); \ \ @@ -562,7 +566,6 @@ if (block_is_obj(q) && oop(q)->is_gc_marked()) { \ /* prefetch beyond q */ \ Prefetch::write(q, interval); \ - /* size_t size = oop(q)->size(); changing this for cms for perm gen */\ size_t size = block_size(q); \ compact_top = cp->space->forward(oop(q), size, cp, compact_top); \ q += size; \ @@ -647,7 +650,7 @@ /* I originally tried to conjoin "block_start(q) == q" to the \ * assertion below, but that doesn't work, because you can't \ * accurately traverse previous objects to get to the current one \ - * after their pointers (including pointers into permGen) have been \ + * after their pointers have been \ * updated, until the actual compaction is done. dld, 4/00 */ \ assert(block_is_obj(q), \ "should be at block boundaries, and should be looking at objs"); \ @@ -871,8 +874,8 @@ } // Iteration - void oop_iterate(OopClosure* cl); - void oop_iterate(MemRegion mr, OopClosure* cl); + void oop_iterate(ExtendedOopClosure* cl); + void oop_iterate(MemRegion mr, ExtendedOopClosure* cl); void object_iterate(ObjectClosure* blk); // For contiguous spaces this method will iterate safely over objects // in the space (i.e., between bottom and top) when at a safepoint. @@ -892,6 +895,7 @@ _concurrent_iteration_safe_limit = new_limit; } + #ifndef SERIALGC // In support of parallel oop_iterate. #define ContigSpace_PAR_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ @@ -911,7 +915,7 @@ virtual size_t minimum_free_block_size() const { return 0; } // Override. - DirtyCardToOopClosure* new_dcto_cl(OopClosure* cl, + DirtyCardToOopClosure* new_dcto_cl(ExtendedOopClosure* cl, CardTableModRefBS::PrecisionStyle precision, HeapWord* boundary = NULL); @@ -981,13 +985,13 @@ // apparent. virtual void walk_mem_region_with_cl(MemRegion mr, HeapWord* bottom, HeapWord* top, - OopClosure* cl) = 0; + ExtendedOopClosure* cl) = 0; virtual void walk_mem_region_with_cl(MemRegion mr, HeapWord* bottom, HeapWord* top, FilteringClosure* cl) = 0; public: - Filtering_DCTOC(Space* sp, OopClosure* cl, + Filtering_DCTOC(Space* sp, ExtendedOopClosure* cl, CardTableModRefBS::PrecisionStyle precision, HeapWord* boundary) : DirtyCardToOopClosure(sp, cl, precision, boundary) {} @@ -1010,13 +1014,13 @@ virtual void walk_mem_region_with_cl(MemRegion mr, HeapWord* bottom, HeapWord* top, - OopClosure* cl); + ExtendedOopClosure* cl); virtual void walk_mem_region_with_cl(MemRegion mr, HeapWord* bottom, HeapWord* top, FilteringClosure* cl); public: - ContiguousSpaceDCTOC(ContiguousSpace* sp, OopClosure* cl, + ContiguousSpaceDCTOC(ContiguousSpace* sp, ExtendedOopClosure* cl, CardTableModRefBS::PrecisionStyle precision, HeapWord* boundary) : Filtering_DCTOC(sp, cl, precision, boundary) @@ -1076,7 +1080,7 @@ // A ContigSpace that Supports an efficient "block_start" operation via // a BlockOffsetArray (whose BlockOffsetSharedArray may be shared with // other spaces.) This is the abstract base class for old generation -// (tenured, perm) spaces. +// (tenured) spaces. class OffsetTableContigSpace: public ContiguousSpace { friend class VMStructs; @@ -1108,9 +1112,6 @@ // Debugging void verify() const; - - // Shared space support - void serialize_block_offset_array_offsets(SerializeOopClosure* soc); }; @@ -1127,19 +1128,4 @@ MemRegion mr) : OffsetTableContigSpace(sharedOffsetArray, mr) {} }; - - -// Class ContigPermSpace is used by CompactingPermGen - -class ContigPermSpace: public OffsetTableContigSpace { - friend class VMStructs; - protected: - // Mark sweep support - size_t allowed_dead_ratio() const; - public: - // Constructor - ContigPermSpace(BlockOffsetSharedArray* sharedOffsetArray, MemRegion mr) : - OffsetTableContigSpace(sharedOffsetArray, mr) {} -}; - #endif // SHARE_VM_MEMORY_SPACE_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/specialized_oop_closures.hpp --- a/src/share/vm/memory/specialized_oop_closures.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/specialized_oop_closures.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -54,6 +54,8 @@ class Par_PushOrMarkClosure; class CMSKeepAliveClosure; class CMSInnerParMarkAndPushClosure; +// Misc +class NoHeaderExtendedOopClosure; // This macro applies an argument macro to all OopClosures for which we // want specialized bodies of "oop_oop_iterate". The arguments to "f" are: @@ -87,6 +89,7 @@ #endif // SERIALGC #define SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(f) \ + f(NoHeaderExtendedOopClosure,_nv) \ SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_S(f) \ SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_P(f) @@ -111,7 +114,7 @@ // doesn't. #define ALL_OOP_OOP_ITERATE_CLOSURES_1(f) \ - f(OopClosure,_v) \ + f(ExtendedOopClosure,_v) \ SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_1(f) #define ALL_OOP_OOP_ITERATE_CLOSURES_2(f) \ @@ -131,7 +134,7 @@ f(Par_PushAndMarkClosure,_nv) #define ALL_PAR_OOP_ITERATE_CLOSURES(f) \ - f(OopClosure,_v) \ + f(ExtendedOopClosure,_v) \ SPECIALIZED_PAR_OOP_ITERATE_CLOSURES(f) #endif // SERIALGC @@ -195,7 +198,7 @@ class SpecializationStats { public: enum Kind { - ik, // instanceKlass + ik, // InstanceKlass irk, // instanceRefKlass oa, // objArrayKlass NUM_Kinds diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/universe.cpp --- a/src/share/vm/memory/universe.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/universe.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -24,6 +24,7 @@ #include "precompiled.hpp" #include "classfile/classLoader.hpp" +#include "classfile/classLoaderData.hpp" #include "classfile/javaClasses.hpp" #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" @@ -33,35 +34,23 @@ #include "gc_interface/collectedHeap.inline.hpp" #include "interpreter/interpreter.hpp" #include "memory/cardTableModRefBS.hpp" -#include "memory/filemap.hpp" #include "memory/gcLocker.inline.hpp" #include "memory/genCollectedHeap.hpp" #include "memory/genRemSet.hpp" #include "memory/generation.hpp" +#include "memory/metadataFactory.hpp" +#include "memory/metaspaceShared.hpp" #include "memory/oopFactory.hpp" -#include "memory/permGen.hpp" #include "memory/space.hpp" #include "memory/universe.hpp" #include "memory/universe.inline.hpp" -#include "oops/arrayKlassKlass.hpp" -#include "oops/compiledICHolderKlass.hpp" -#include "oops/constMethodKlass.hpp" -#include "oops/constantPoolKlass.hpp" -#include "oops/constantPoolOop.hpp" -#include "oops/cpCacheKlass.hpp" -#include "oops/cpCacheOop.hpp" +#include "oops/constantPool.hpp" +#include "oops/instanceClassLoaderKlass.hpp" #include "oops/instanceKlass.hpp" #include "oops/instanceMirrorKlass.hpp" -#include "oops/instanceKlassKlass.hpp" #include "oops/instanceRefKlass.hpp" -#include "oops/klassKlass.hpp" -#include "oops/klassOop.hpp" -#include "oops/methodDataKlass.hpp" -#include "oops/methodKlass.hpp" -#include "oops/objArrayKlassKlass.hpp" #include "oops/oop.inline.hpp" #include "oops/typeArrayKlass.hpp" -#include "oops/typeArrayKlassKlass.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" #include "runtime/aprofiler.hpp" #include "runtime/arguments.hpp" @@ -101,28 +90,16 @@ #endif // Known objects -klassOop Universe::_boolArrayKlassObj = NULL; -klassOop Universe::_byteArrayKlassObj = NULL; -klassOop Universe::_charArrayKlassObj = NULL; -klassOop Universe::_intArrayKlassObj = NULL; -klassOop Universe::_shortArrayKlassObj = NULL; -klassOop Universe::_longArrayKlassObj = NULL; -klassOop Universe::_singleArrayKlassObj = NULL; -klassOop Universe::_doubleArrayKlassObj = NULL; -klassOop Universe::_typeArrayKlassObjs[T_VOID+1] = { NULL /*, NULL...*/ }; -klassOop Universe::_objectArrayKlassObj = NULL; -klassOop Universe::_methodKlassObj = NULL; -klassOop Universe::_constMethodKlassObj = NULL; -klassOop Universe::_methodDataKlassObj = NULL; -klassOop Universe::_klassKlassObj = NULL; -klassOop Universe::_arrayKlassKlassObj = NULL; -klassOop Universe::_objArrayKlassKlassObj = NULL; -klassOop Universe::_typeArrayKlassKlassObj = NULL; -klassOop Universe::_instanceKlassKlassObj = NULL; -klassOop Universe::_constantPoolKlassObj = NULL; -klassOop Universe::_constantPoolCacheKlassObj = NULL; -klassOop Universe::_compiledICHolderKlassObj = NULL; -klassOop Universe::_systemObjArrayKlassObj = NULL; +Klass* Universe::_boolArrayKlassObj = NULL; +Klass* Universe::_byteArrayKlassObj = NULL; +Klass* Universe::_charArrayKlassObj = NULL; +Klass* Universe::_intArrayKlassObj = NULL; +Klass* Universe::_shortArrayKlassObj = NULL; +Klass* Universe::_longArrayKlassObj = NULL; +Klass* Universe::_singleArrayKlassObj = NULL; +Klass* Universe::_doubleArrayKlassObj = NULL; +Klass* Universe::_typeArrayKlassObjs[T_VOID+1] = { NULL /*, NULL...*/ }; +Klass* Universe::_objectArrayKlassObj = NULL; oop Universe::_int_mirror = NULL; oop Universe::_float_mirror = NULL; oop Universe::_double_mirror = NULL; @@ -135,16 +112,11 @@ oop Universe::_mirrors[T_VOID+1] = { NULL /*, NULL...*/ }; oop Universe::_main_thread_group = NULL; oop Universe::_system_thread_group = NULL; -typeArrayOop Universe::_the_empty_byte_array = NULL; -typeArrayOop Universe::_the_empty_short_array = NULL; -typeArrayOop Universe::_the_empty_int_array = NULL; -objArrayOop Universe::_the_empty_system_obj_array = NULL; objArrayOop Universe::_the_empty_class_klass_array = NULL; -objArrayOop Universe::_the_array_interfaces_array = NULL; +Array* Universe::_the_array_interfaces_array = NULL; oop Universe::_the_null_string = NULL; oop Universe::_the_min_jint_string = NULL; LatestMethodOopCache* Universe::_finalizer_register_cache = NULL; -LatestMethodOopCache* Universe::_loader_addClass_cache = NULL; ActiveMethodOopsCache* Universe::_reflect_invoke_cache = NULL; oop Universe::_out_of_memory_error_java_heap = NULL; oop Universe::_out_of_memory_error_perm_gen = NULL; @@ -157,12 +129,15 @@ oop Universe::_arithmetic_exception_instance = NULL; oop Universe::_virtual_machine_error_instance = NULL; oop Universe::_vm_exception = NULL; +Array* Universe::_the_empty_int_array = NULL; +Array* Universe::_the_empty_short_array = NULL; +Array* Universe::_the_empty_klass_array = NULL; +Array* Universe::_the_empty_method_array = NULL; // These variables are guarded by FullGCALot_lock. debug_only(objArrayOop Universe::_fullgc_alot_dummy_array = NULL;) debug_only(int Universe::_fullgc_alot_dummy_next = 0;) - // Heap int Universe::_verify_count = 0; @@ -178,7 +153,7 @@ NarrowOopStruct Universe::_narrow_oop = { NULL, 0, true }; -void Universe::basic_type_classes_do(void f(klassOop)) { +void Universe::basic_type_classes_do(void f(Klass*)) { f(boolArrayKlassObj()); f(byteArrayKlassObj()); f(charArrayKlassObj()); @@ -189,20 +164,6 @@ f(doubleArrayKlassObj()); } - -void Universe::system_classes_do(void f(klassOop)) { - f(methodKlassObj()); - f(constMethodKlassObj()); - f(methodDataKlassObj()); - f(klassKlassObj()); - f(arrayKlassKlassObj()); - f(objArrayKlassKlassObj()); - f(typeArrayKlassKlassObj()); - f(instanceKlassKlassObj()); - f(constantPoolKlassObj()); - f(systemObjArrayKlassObj()); -} - void Universe::oops_do(OopClosure* f, bool do_all) { f->do_oop((oop*) &_int_mirror); @@ -215,63 +176,19 @@ f->do_oop((oop*) &_short_mirror); f->do_oop((oop*) &_void_mirror); - // It's important to iterate over these guys even if they are null, - // since that's how shared heaps are restored. for (int i = T_BOOLEAN; i < T_VOID+1; i++) { f->do_oop((oop*) &_mirrors[i]); } assert(_mirrors[0] == NULL && _mirrors[T_BOOLEAN - 1] == NULL, "checking"); - // %%% Consider moving those "shared oops" over here with the others. - f->do_oop((oop*)&_boolArrayKlassObj); - f->do_oop((oop*)&_byteArrayKlassObj); - f->do_oop((oop*)&_charArrayKlassObj); - f->do_oop((oop*)&_intArrayKlassObj); - f->do_oop((oop*)&_shortArrayKlassObj); - f->do_oop((oop*)&_longArrayKlassObj); - f->do_oop((oop*)&_singleArrayKlassObj); - f->do_oop((oop*)&_doubleArrayKlassObj); - f->do_oop((oop*)&_objectArrayKlassObj); - { - for (int i = 0; i < T_VOID+1; i++) { - if (_typeArrayKlassObjs[i] != NULL) { - assert(i >= T_BOOLEAN, "checking"); - f->do_oop((oop*)&_typeArrayKlassObjs[i]); - } else if (do_all) { - f->do_oop((oop*)&_typeArrayKlassObjs[i]); - } - } - } - f->do_oop((oop*)&_methodKlassObj); - f->do_oop((oop*)&_constMethodKlassObj); - f->do_oop((oop*)&_methodDataKlassObj); - f->do_oop((oop*)&_klassKlassObj); - f->do_oop((oop*)&_arrayKlassKlassObj); - f->do_oop((oop*)&_objArrayKlassKlassObj); - f->do_oop((oop*)&_typeArrayKlassKlassObj); - f->do_oop((oop*)&_instanceKlassKlassObj); - f->do_oop((oop*)&_constantPoolKlassObj); - f->do_oop((oop*)&_constantPoolCacheKlassObj); - f->do_oop((oop*)&_compiledICHolderKlassObj); - f->do_oop((oop*)&_systemObjArrayKlassObj); - f->do_oop((oop*)&_the_empty_byte_array); - f->do_oop((oop*)&_the_empty_short_array); - f->do_oop((oop*)&_the_empty_int_array); - f->do_oop((oop*)&_the_empty_system_obj_array); f->do_oop((oop*)&_the_empty_class_klass_array); - f->do_oop((oop*)&_the_array_interfaces_array); f->do_oop((oop*)&_the_null_string); f->do_oop((oop*)&_the_min_jint_string); - _finalizer_register_cache->oops_do(f); - _loader_addClass_cache->oops_do(f); - _reflect_invoke_cache->oops_do(f); f->do_oop((oop*)&_out_of_memory_error_java_heap); f->do_oop((oop*)&_out_of_memory_error_perm_gen); f->do_oop((oop*)&_out_of_memory_error_array_size); f->do_oop((oop*)&_out_of_memory_error_gc_overhead_limit); - if (_preallocated_out_of_memory_error_array != (oop)NULL) { // NULL when DumpSharedSpaces f->do_oop((oop*)&_preallocated_out_of_memory_error_array); - } f->do_oop((oop*)&_null_ptr_exception_instance); f->do_oop((oop*)&_arithmetic_exception_instance); f->do_oop((oop*)&_virtual_machine_error_instance); @@ -281,6 +198,38 @@ debug_only(f->do_oop((oop*)&_fullgc_alot_dummy_array);) } +// Serialize metadata in and out of CDS archive, not oops. +void Universe::serialize(SerializeClosure* f, bool do_all) { + + f->do_ptr((void**)&_boolArrayKlassObj); + f->do_ptr((void**)&_byteArrayKlassObj); + f->do_ptr((void**)&_charArrayKlassObj); + f->do_ptr((void**)&_intArrayKlassObj); + f->do_ptr((void**)&_shortArrayKlassObj); + f->do_ptr((void**)&_longArrayKlassObj); + f->do_ptr((void**)&_singleArrayKlassObj); + f->do_ptr((void**)&_doubleArrayKlassObj); + f->do_ptr((void**)&_objectArrayKlassObj); + + { + for (int i = 0; i < T_VOID+1; i++) { + if (_typeArrayKlassObjs[i] != NULL) { + assert(i >= T_BOOLEAN, "checking"); + f->do_ptr((void**)&_typeArrayKlassObjs[i]); + } else if (do_all) { + f->do_ptr((void**)&_typeArrayKlassObjs[i]); + } + } + } + + f->do_ptr((void**)&_the_array_interfaces_array); + f->do_ptr((void**)&_the_empty_int_array); + f->do_ptr((void**)&_the_empty_short_array); + f->do_ptr((void**)&_the_empty_method_array); + f->do_ptr((void**)&_the_empty_klass_array); + _finalizer_register_cache->serialize(f); + _reflect_invoke_cache->serialize(f); +} void Universe::check_alignment(uintx size, uintx alignment, const char* name) { if (size < alignment || size % alignment != 0) { @@ -292,9 +241,20 @@ } } +void initialize_basic_type_klass(Klass* k, TRAPS) { + Klass* ok = SystemDictionary::Object_klass(); + if (UseSharedSpaces) { + assert(k->super() == ok, "u3"); + k->restore_unshareable_info(CHECK); + } else { + k->initialize_supers(ok, CHECK); + } + k->append_to_sibling_list(); +} void Universe::genesis(TRAPS) { ResourceMark rm; + { FlagSetting fs(_bootstrapping, true); { MutexLocker mc(Compile_lock); @@ -303,13 +263,6 @@ compute_base_vtable_size(); if (!UseSharedSpaces) { - _klassKlassObj = klassKlass::create_klass(CHECK); - _arrayKlassKlassObj = arrayKlassKlass::create_klass(CHECK); - - _objArrayKlassKlassObj = objArrayKlassKlass::create_klass(CHECK); - _instanceKlassKlassObj = instanceKlassKlass::create_klass(CHECK); - _typeArrayKlassKlassObj = typeArrayKlassKlass::create_klass(CHECK); - _boolArrayKlassObj = typeArrayKlass::create_klass(T_BOOLEAN, sizeof(jboolean), CHECK); _charArrayKlassObj = typeArrayKlass::create_klass(T_CHAR, sizeof(jchar), CHECK); _singleArrayKlassObj = typeArrayKlass::create_klass(T_FLOAT, sizeof(jfloat), CHECK); @@ -328,21 +281,13 @@ _typeArrayKlassObjs[T_INT] = _intArrayKlassObj; _typeArrayKlassObjs[T_LONG] = _longArrayKlassObj; - _methodKlassObj = methodKlass::create_klass(CHECK); - _constMethodKlassObj = constMethodKlass::create_klass(CHECK); - _methodDataKlassObj = methodDataKlass::create_klass(CHECK); - _constantPoolKlassObj = constantPoolKlass::create_klass(CHECK); - _constantPoolCacheKlassObj = constantPoolCacheKlass::create_klass(CHECK); + ClassLoaderData* null_cld = ClassLoaderData::the_null_class_loader_data(); - _compiledICHolderKlassObj = compiledICHolderKlass::create_klass(CHECK); - _systemObjArrayKlassObj = objArrayKlassKlass::cast(objArrayKlassKlassObj())->allocate_system_objArray_klass(CHECK); - - _the_empty_byte_array = oopFactory::new_permanent_byteArray(0, CHECK); - _the_empty_short_array = oopFactory::new_permanent_shortArray(0, CHECK); - _the_empty_int_array = oopFactory::new_permanent_intArray(0, CHECK); - _the_empty_system_obj_array = oopFactory::new_system_objArray(0, CHECK); - - _the_array_interfaces_array = oopFactory::new_system_objArray(2, CHECK); + _the_array_interfaces_array = MetadataFactory::new_array(null_cld, 2, NULL, CHECK); + _the_empty_int_array = MetadataFactory::new_array(null_cld, 0, CHECK); + _the_empty_short_array = MetadataFactory::new_array(null_cld, 0, CHECK); + _the_empty_method_array = MetadataFactory::new_array(null_cld, 0, CHECK); + _the_empty_klass_array = MetadataFactory::new_array(null_cld, 0, CHECK); } } @@ -350,83 +295,53 @@ SystemDictionary::initialize(CHECK); - klassOop ok = SystemDictionary::Object_klass(); + Klass* ok = SystemDictionary::Object_klass(); _the_null_string = StringTable::intern("null", CHECK); _the_min_jint_string = StringTable::intern("-2147483648", CHECK); if (UseSharedSpaces) { // Verify shared interfaces array. - assert(_the_array_interfaces_array->obj_at(0) == + assert(_the_array_interfaces_array->at(0) == SystemDictionary::Cloneable_klass(), "u3"); - assert(_the_array_interfaces_array->obj_at(1) == + assert(_the_array_interfaces_array->at(1) == SystemDictionary::Serializable_klass(), "u3"); - - // Verify element klass for system obj array klass - assert(objArrayKlass::cast(_systemObjArrayKlassObj)->element_klass() == ok, "u1"); - assert(objArrayKlass::cast(_systemObjArrayKlassObj)->bottom_klass() == ok, "u2"); - - // Verify super class for the classes created above - assert(Klass::cast(boolArrayKlassObj() )->super() == ok, "u3"); - assert(Klass::cast(charArrayKlassObj() )->super() == ok, "u3"); - assert(Klass::cast(singleArrayKlassObj() )->super() == ok, "u3"); - assert(Klass::cast(doubleArrayKlassObj() )->super() == ok, "u3"); - assert(Klass::cast(byteArrayKlassObj() )->super() == ok, "u3"); - assert(Klass::cast(shortArrayKlassObj() )->super() == ok, "u3"); - assert(Klass::cast(intArrayKlassObj() )->super() == ok, "u3"); - assert(Klass::cast(longArrayKlassObj() )->super() == ok, "u3"); - assert(Klass::cast(constantPoolKlassObj() )->super() == ok, "u3"); - assert(Klass::cast(systemObjArrayKlassObj())->super() == ok, "u3"); } else { // Set up shared interfaces array. (Do this before supers are set up.) - _the_array_interfaces_array->obj_at_put(0, SystemDictionary::Cloneable_klass()); - _the_array_interfaces_array->obj_at_put(1, SystemDictionary::Serializable_klass()); - - // Set element klass for system obj array klass - objArrayKlass::cast(_systemObjArrayKlassObj)->set_element_klass(ok); - objArrayKlass::cast(_systemObjArrayKlassObj)->set_bottom_klass(ok); - - // Set super class for the classes created above - Klass::cast(boolArrayKlassObj() )->initialize_supers(ok, CHECK); - Klass::cast(charArrayKlassObj() )->initialize_supers(ok, CHECK); - Klass::cast(singleArrayKlassObj() )->initialize_supers(ok, CHECK); - Klass::cast(doubleArrayKlassObj() )->initialize_supers(ok, CHECK); - Klass::cast(byteArrayKlassObj() )->initialize_supers(ok, CHECK); - Klass::cast(shortArrayKlassObj() )->initialize_supers(ok, CHECK); - Klass::cast(intArrayKlassObj() )->initialize_supers(ok, CHECK); - Klass::cast(longArrayKlassObj() )->initialize_supers(ok, CHECK); - Klass::cast(constantPoolKlassObj() )->initialize_supers(ok, CHECK); - Klass::cast(systemObjArrayKlassObj())->initialize_supers(ok, CHECK); - Klass::cast(boolArrayKlassObj() )->set_super(ok); - Klass::cast(charArrayKlassObj() )->set_super(ok); - Klass::cast(singleArrayKlassObj() )->set_super(ok); - Klass::cast(doubleArrayKlassObj() )->set_super(ok); - Klass::cast(byteArrayKlassObj() )->set_super(ok); - Klass::cast(shortArrayKlassObj() )->set_super(ok); - Klass::cast(intArrayKlassObj() )->set_super(ok); - Klass::cast(longArrayKlassObj() )->set_super(ok); - Klass::cast(constantPoolKlassObj() )->set_super(ok); - Klass::cast(systemObjArrayKlassObj())->set_super(ok); + _the_array_interfaces_array->at_put(0, SystemDictionary::Cloneable_klass()); + _the_array_interfaces_array->at_put(1, SystemDictionary::Serializable_klass()); } - Klass::cast(boolArrayKlassObj() )->append_to_sibling_list(); - Klass::cast(charArrayKlassObj() )->append_to_sibling_list(); - Klass::cast(singleArrayKlassObj() )->append_to_sibling_list(); - Klass::cast(doubleArrayKlassObj() )->append_to_sibling_list(); - Klass::cast(byteArrayKlassObj() )->append_to_sibling_list(); - Klass::cast(shortArrayKlassObj() )->append_to_sibling_list(); - Klass::cast(intArrayKlassObj() )->append_to_sibling_list(); - Klass::cast(longArrayKlassObj() )->append_to_sibling_list(); - Klass::cast(constantPoolKlassObj() )->append_to_sibling_list(); - Klass::cast(systemObjArrayKlassObj())->append_to_sibling_list(); + initialize_basic_type_klass(boolArrayKlassObj(), CHECK); + initialize_basic_type_klass(charArrayKlassObj(), CHECK); + initialize_basic_type_klass(singleArrayKlassObj(), CHECK); + initialize_basic_type_klass(doubleArrayKlassObj(), CHECK); + initialize_basic_type_klass(byteArrayKlassObj(), CHECK); + initialize_basic_type_klass(shortArrayKlassObj(), CHECK); + initialize_basic_type_klass(intArrayKlassObj(), CHECK); + initialize_basic_type_klass(longArrayKlassObj(), CHECK); } // end of core bootstrapping + // Maybe this could be lifted up now that object array can be initialized + // during the bootstrapping. + + // OLD // Initialize _objectArrayKlass after core bootstraping to make // sure the super class is set up properly for _objectArrayKlass. - _objectArrayKlassObj = instanceKlass:: + // --- + // NEW + // Since some of the old system object arrays have been converted to + // ordinary object arrays, _objectArrayKlass will be loaded when + // SystemDictionary::initialize(CHECK); is run. See the extra check + // for Object_klass_loaded in objArrayKlassKlass::allocate_objArray_klass_impl. + _objectArrayKlassObj = InstanceKlass:: cast(SystemDictionary::Object_klass())->array_klass(1, CHECK); + // OLD // Add the class to the class hierarchy manually to make sure that // its vtable is initialized after core bootstrapping is completed. + // --- + // New + // Have already been initialized. Klass::cast(_objectArrayKlassObj)->append_to_sibling_list(); // Compute is_jdk version flags. @@ -435,7 +350,7 @@ // Only 1.5 or later has the java.lang.management.MemoryUsage class. if (JDK_Version::is_partially_initialized()) { uint8_t jdk_version; - klassOop k = SystemDictionary::resolve_or_null( + Klass* k = SystemDictionary::resolve_or_null( vmSymbols::java_lang_management_MemoryUsage(), THREAD); CLEAR_PENDING_EXCEPTION; // ignore exceptions if (k == NULL) { @@ -479,17 +394,12 @@ } else { size = FullGCALotDummies * 2; } - objArrayOop naked_array = oopFactory::new_system_objArray(size, CHECK); + objArrayOop naked_array = oopFactory::new_objArray(SystemDictionary::Object_klass(), size, CHECK); objArrayHandle dummy_array(THREAD, naked_array); int i = 0; while (i < size) { - if (!UseConcMarkSweepGC) { // Allocate dummy in old generation - oop dummy = instanceKlass::cast(SystemDictionary::Object_klass())->allocate_instance(CHECK); - dummy_array->obj_at_put(i++, dummy); - } - // Allocate dummy in permanent generation - oop dummy = instanceKlass::cast(SystemDictionary::Object_klass())->allocate_permanent_instance(CHECK); + oop dummy = InstanceKlass::cast(SystemDictionary::Object_klass())->allocate_instance(CHECK); dummy_array->obj_at_put(i++, dummy); } { @@ -506,7 +416,11 @@ #endif } - +// CDS support for patching vtables in metadata in the shared archive. +// All types inherited from Metadata have vtables, but not types inherited +// from MetaspaceObj, because the latter does not have virtual functions. +// If the metadata type has a vtable, it cannot be shared in the read-only +// section of the CDS archive, because the vtable pointer is patched. static inline void* dereference(void* addr) { return *(void**)addr; } @@ -520,56 +434,17 @@ void Universe::init_self_patching_vtbl_list(void** list, int count) { int n = 0; - { klassKlass o; add_vtable(list, &n, &o, count); } - { arrayKlassKlass o; add_vtable(list, &n, &o, count); } - { objArrayKlassKlass o; add_vtable(list, &n, &o, count); } - { instanceKlassKlass o; add_vtable(list, &n, &o, count); } - { instanceKlass o; add_vtable(list, &n, &o, count); } + { InstanceKlass o; add_vtable(list, &n, &o, count); } + { instanceClassLoaderKlass o; add_vtable(list, &n, &o, count); } { instanceMirrorKlass o; add_vtable(list, &n, &o, count); } { instanceRefKlass o; add_vtable(list, &n, &o, count); } - { typeArrayKlassKlass o; add_vtable(list, &n, &o, count); } { typeArrayKlass o; add_vtable(list, &n, &o, count); } - { methodKlass o; add_vtable(list, &n, &o, count); } - { constMethodKlass o; add_vtable(list, &n, &o, count); } - { constantPoolKlass o; add_vtable(list, &n, &o, count); } - { constantPoolCacheKlass o; add_vtable(list, &n, &o, count); } { objArrayKlass o; add_vtable(list, &n, &o, count); } - { methodDataKlass o; add_vtable(list, &n, &o, count); } - { compiledICHolderKlass o; add_vtable(list, &n, &o, count); } -#ifndef PRODUCT - // In non-product builds CHeapObj is derived from AllocatedObj, - // so symbols in CDS archive should have their vtable pointer patched. - { Symbol o; add_vtable(list, &n, &o, count); } -#endif + { Method o; add_vtable(list, &n, &o, count); } + { ConstantPool o; add_vtable(list, &n, &o, count); } } - -class FixupMirrorClosure: public ObjectClosure { - public: - virtual void do_object(oop obj) { - if (obj->is_klass()) { - EXCEPTION_MARK; - KlassHandle k(THREAD, klassOop(obj)); - // We will never reach the CATCH below since Exceptions::_throw will cause - // the VM to exit if an exception is thrown during initialization - java_lang_Class::fixup_mirror(k, CATCH); - // This call unconditionally creates a new mirror for k, - // and links in k's component_mirror field if k is an array. - // If k is an objArray, k's element type must already have - // a mirror. In other words, this closure must process - // the component type of an objArray k before it processes k. - // This works because the permgen iterator presents arrays - // and their component types in order of creation. - } - } -}; - void Universe::initialize_basic_type_mirrors(TRAPS) { - if (UseSharedSpaces) { - assert(_int_mirror != NULL, "already loaded"); - assert(_void_mirror == _mirrors[T_VOID], "consistently loaded"); - } else { - assert(_int_mirror==NULL, "basic type mirrors already initialized"); _int_mirror = java_lang_Class::create_basic_type_mirror("int", T_INT, CHECK); @@ -599,9 +474,8 @@ _mirrors[T_LONG] = _long_mirror; _mirrors[T_SHORT] = _short_mirror; _mirrors[T_VOID] = _void_mirror; - //_mirrors[T_OBJECT] = instanceKlass::cast(_object_klass)->java_mirror(); - //_mirrors[T_ARRAY] = instanceKlass::cast(_object_klass)->java_mirror(); - } + //_mirrors[T_OBJECT] = InstanceKlass::cast(_object_klass)->java_mirror(); + //_mirrors[T_ARRAY] = InstanceKlass::cast(_object_klass)->java_mirror(); } void Universe::fixup_mirrors(TRAPS) { @@ -610,14 +484,22 @@ // walk over permanent objects created so far (mostly classes) and fixup their mirrors. Note // that the number of objects allocated at this point is very small. assert(SystemDictionary::Class_klass_loaded(), "java.lang.Class should be loaded"); - + HandleMark hm(THREAD); // Cache the start of the static fields instanceMirrorKlass::init_offset_of_static_fields(); - FixupMirrorClosure blk; - Universe::heap()->permanent_object_iterate(&blk); + GrowableArray * list = java_lang_Class::fixup_mirror_list(); + int list_length = list->length(); + for (int i = 0; i < list_length; i++) { + Klass* k = list->at(i); + assert(k->is_klass(), "List should only hold classes"); + EXCEPTION_MARK; + KlassHandle kh(THREAD, k); + java_lang_Class::fixup_mirror(kh, CATCH); } - + delete java_lang_Class::fixup_mirror_list(); + java_lang_Class::set_fixup_mirror_list(NULL); +} static bool has_run_finalizers_on_exit = false; @@ -650,20 +532,20 @@ // In case those ever change we use handles for oops void Universe::reinitialize_vtable_of(KlassHandle k_h, TRAPS) { // init vtable of k and all subclasses - Klass* ko = k_h()->klass_part(); + Klass* ko = k_h(); klassVtable* vt = ko->vtable(); if (vt) vt->initialize_vtable(false, CHECK); if (ko->oop_is_instance()) { - instanceKlass* ik = (instanceKlass*)ko; - for (KlassHandle s_h(THREAD, ik->subklass()); s_h() != NULL; s_h = (THREAD, s_h()->klass_part()->next_sibling())) { + InstanceKlass* ik = (InstanceKlass*)ko; + for (KlassHandle s_h(THREAD, ik->subklass()); s_h() != NULL; s_h = (THREAD, s_h()->next_sibling())) { reinitialize_vtable_of(s_h, CHECK); } } } -void initialize_itable_for_klass(klassOop k, TRAPS) { - instanceKlass::cast(k)->itable()->initialize_itable(false, CHECK); +void initialize_itable_for_klass(Klass* k, TRAPS) { + InstanceKlass::cast(k)->itable()->initialize_itable(false, CHECK); } @@ -758,49 +640,28 @@ GC_locker::lock(); // do not allow gc during bootstrapping JavaClasses::compute_hard_coded_offsets(); - // Get map info from shared archive file. - if (DumpSharedSpaces) - UseSharedSpaces = false; - - FileMapInfo* mapinfo = NULL; - if (UseSharedSpaces) { - mapinfo = NEW_C_HEAP_OBJ(FileMapInfo, mtInternal); - memset(mapinfo, 0, sizeof(FileMapInfo)); - - // Open the shared archive file, read and validate the header. If - // initialization files, shared spaces [UseSharedSpaces] are - // disabled and the file is closed. - - if (mapinfo->initialize()) { - FileMapInfo::set_current_info(mapinfo); - } else { - assert(!mapinfo->is_open() && !UseSharedSpaces, - "archive file not closed or shared spaces not disabled."); - } - } - jint status = Universe::initialize_heap(); if (status != JNI_OK) { return status; } - // We have a heap so create the methodOop caches before - // CompactingPermGenGen::initialize_oops() tries to populate them. + // Create memory for metadata. Must be after initializing heap for + // DumpSharedSpaces. + ClassLoaderData::init_null_class_loader_data(); + + // We have a heap so create the Method* caches before + // Metaspace::initialize_shared_spaces() tries to populate them. Universe::_finalizer_register_cache = new LatestMethodOopCache(); - Universe::_loader_addClass_cache = new LatestMethodOopCache(); Universe::_reflect_invoke_cache = new ActiveMethodOopsCache(); if (UseSharedSpaces) { - // Read the data structures supporting the shared spaces (shared // system dictionary, symbol table, etc.). After that, access to // the file (other than the mapped regions) is no longer needed, and // the file is closed. Closing the file does not affect the // currently mapped regions. - - CompactingPermGenGen::initialize_oops(); - mapinfo->close(); - + MetaspaceShared::initialize_shared_spaces(); + StringTable::create_table(); } else { SymbolTable::create_table(); StringTable::create_table(); @@ -992,6 +853,54 @@ return JNI_OK; } + +// Reserve the Java heap, which is now the same for all GCs. +ReservedSpace Universe::reserve_heap(size_t heap_size, size_t alignment) { + // Add in the class metaspace area so the classes in the headers can + // be compressed the same as instances. + size_t total_reserved = heap_size + ClassMetaspaceSize; + char* addr = Universe::preferred_heap_base(total_reserved, Universe::UnscaledNarrowOop); + + ReservedHeapSpace total_rs(total_reserved, alignment, UseLargePages, addr); + + if (UseCompressedOops) { + if (addr != NULL && !total_rs.is_reserved()) { + // Failed to reserve at specified address - the requested memory + // region is taken already, for example, by 'java' launcher. + // Try again to reserver heap higher. + addr = Universe::preferred_heap_base(total_reserved, Universe::ZeroBasedNarrowOop); + + ReservedHeapSpace total_rs0(total_reserved, alignment, + UseLargePages, addr); + + if (addr != NULL && !total_rs0.is_reserved()) { + // Failed to reserve at specified address again - give up. + addr = Universe::preferred_heap_base(total_reserved, Universe::HeapBasedNarrowOop); + assert(addr == NULL, ""); + + ReservedHeapSpace total_rs1(total_reserved, alignment, + UseLargePages, addr); + total_rs = total_rs1; + } else { + total_rs = total_rs0; + } + } + } + + if (!total_rs.is_reserved()) { + vm_exit_during_initialization(err_msg("Could not reserve enough space for object heap %d bytes", total_reserved)); + return total_rs; + } + + // Split the reserved space into main Java heap and a space for classes + // so that they can be compressed using the same algorithm as compressed oops + ReservedSpace heap_rs = total_rs.first_part(heap_size); + ReservedSpace class_rs = total_rs.last_part(heap_size, alignment); + Metaspace::initialize_class_space(class_rs); + return heap_rs; +} + + // It's the caller's repsonsibility to ensure glitch-freedom // (if required). void Universe::update_heap_info_at_gc() { @@ -1026,55 +935,56 @@ { ResourceMark rm; Interpreter::initialize(); // needed for interpreter entry points if (!UseSharedSpaces) { + HandleMark hm(THREAD); KlassHandle ok_h(THREAD, SystemDictionary::Object_klass()); Universe::reinitialize_vtable_of(ok_h, CHECK_false); Universe::reinitialize_itables(CHECK_false); } } - klassOop k; + HandleMark hm(THREAD); + Klass* k; instanceKlassHandle k_h; - if (!UseSharedSpaces) { // Setup preallocated empty java.lang.Class array Universe::_the_empty_class_klass_array = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_false); + // Setup preallocated OutOfMemoryError errors k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_OutOfMemoryError(), true, CHECK_false); k_h = instanceKlassHandle(THREAD, k); - Universe::_out_of_memory_error_java_heap = k_h->allocate_permanent_instance(CHECK_false); - Universe::_out_of_memory_error_perm_gen = k_h->allocate_permanent_instance(CHECK_false); - Universe::_out_of_memory_error_array_size = k_h->allocate_permanent_instance(CHECK_false); + Universe::_out_of_memory_error_java_heap = k_h->allocate_instance(CHECK_false); + Universe::_out_of_memory_error_perm_gen = k_h->allocate_instance(CHECK_false); + Universe::_out_of_memory_error_array_size = k_h->allocate_instance(CHECK_false); Universe::_out_of_memory_error_gc_overhead_limit = - k_h->allocate_permanent_instance(CHECK_false); + k_h->allocate_instance(CHECK_false); // Setup preallocated NullPointerException // (this is currently used for a cheap & dirty solution in compiler exception handling) k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_NullPointerException(), true, CHECK_false); - Universe::_null_ptr_exception_instance = instanceKlass::cast(k)->allocate_permanent_instance(CHECK_false); + Universe::_null_ptr_exception_instance = InstanceKlass::cast(k)->allocate_instance(CHECK_false); // Setup preallocated ArithmeticException // (this is currently used for a cheap & dirty solution in compiler exception handling) k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_ArithmeticException(), true, CHECK_false); - Universe::_arithmetic_exception_instance = instanceKlass::cast(k)->allocate_permanent_instance(CHECK_false); + Universe::_arithmetic_exception_instance = InstanceKlass::cast(k)->allocate_instance(CHECK_false); // Virtual Machine Error for when we get into a situation we can't resolve k = SystemDictionary::resolve_or_fail( vmSymbols::java_lang_VirtualMachineError(), true, CHECK_false); - bool linked = instanceKlass::cast(k)->link_class_or_fail(CHECK_false); + bool linked = InstanceKlass::cast(k)->link_class_or_fail(CHECK_false); if (!linked) { tty->print_cr("Unable to link/verify VirtualMachineError class"); return false; // initialization failed } Universe::_virtual_machine_error_instance = - instanceKlass::cast(k)->allocate_permanent_instance(CHECK_false); + InstanceKlass::cast(k)->allocate_instance(CHECK_false); - Universe::_vm_exception = instanceKlass::cast(k)->allocate_permanent_instance(CHECK_false); + Universe::_vm_exception = InstanceKlass::cast(k)->allocate_instance(CHECK_false); - } if (!DumpSharedSpaces) { // These are the only Java fields that are currently set during shared space dumping. // We prefer to not handle this generally, so we always reinitialize these detail messages. Handle msg = java_lang_String::create_from_str("Java heap space", CHECK_false); java_lang_Throwable::set_message(Universe::_out_of_memory_error_java_heap, msg()); - msg = java_lang_String::create_from_str("PermGen space", CHECK_false); + msg = java_lang_String::create_from_str("Metadata space", CHECK_false); java_lang_Throwable::set_message(Universe::_out_of_memory_error_perm_gen, msg()); msg = java_lang_String::create_from_str("Requested array size exceeds VM limit", CHECK_false); @@ -1088,13 +998,13 @@ // Setup the array of errors that have preallocated backtrace k = Universe::_out_of_memory_error_java_heap->klass(); - assert(k->klass_part()->name() == vmSymbols::java_lang_OutOfMemoryError(), "should be out of memory error"); + assert(k->name() == vmSymbols::java_lang_OutOfMemoryError(), "should be out of memory error"); k_h = instanceKlassHandle(THREAD, k); int len = (StackTraceInThrowable) ? (int)PreallocatedOutOfMemoryErrorCount : 0; Universe::_preallocated_out_of_memory_error_array = oopFactory::new_objArray(k_h(), len, CHECK_false); for (int i=0; iallocate_permanent_instance(CHECK_false); + oop err = k_h->allocate_instance(CHECK_false); Handle err_h = Handle(THREAD, err); java_lang_Throwable::allocate_backtrace(err_h, CHECK_false); Universe::preallocated_out_of_memory_errors()->obj_at_put(i, err_h()); @@ -1106,8 +1016,8 @@ // Setup static method for registering finalizers // The finalizer klass must be linked before looking up the method, in // case it needs to get rewritten. - instanceKlass::cast(SystemDictionary::Finalizer_klass())->link_class(CHECK_false); - methodOop m = instanceKlass::cast(SystemDictionary::Finalizer_klass())->find_method( + InstanceKlass::cast(SystemDictionary::Finalizer_klass())->link_class(CHECK_false); + Method* m = InstanceKlass::cast(SystemDictionary::Finalizer_klass())->find_method( vmSymbols::register_method_name(), vmSymbols::register_method_signature()); if (m == NULL || !m->is_static()) { @@ -1131,16 +1041,6 @@ } Universe::_reflect_invoke_cache->init(k_h(), m, CHECK_false); - // Setup method for registering loaded classes in class loader vector - instanceKlass::cast(SystemDictionary::ClassLoader_klass())->link_class(CHECK_false); - m = instanceKlass::cast(SystemDictionary::ClassLoader_klass())->find_method(vmSymbols::addClass_name(), vmSymbols::class_void_signature()); - if (m == NULL || m->is_static()) { - THROW_MSG_(vmSymbols::java_lang_NoSuchMethodException(), - "java.lang.ClassLoader.addClass", false); - } - Universe::_loader_addClass_cache->init( - SystemDictionary::ClassLoader_klass(), m, CHECK_false); - // The folowing is initializing converter functions for serialization in // JVM.cpp. If we clean up the StrictMath code above we may want to find // a better solution for this as well. @@ -1156,6 +1056,9 @@ // ("weak") refs processing infrastructure initialization Universe::heap()->post_initialize(); + // Initialize performance counters for metaspaces + MetaspaceCounters::initialize_performance_counters(); + GC_locker::unlock(); // allow gc after bootstrapping MemoryService::set_universe_heap(Universe::_collectedHeap); @@ -1204,14 +1107,14 @@ CallSiteDepChange changes(call_site(), method_handle()); // Compute the dependent nmethods that have a reference to a - // CallSite object. We use instanceKlass::mark_dependent_nmethod + // CallSite object. We use InstanceKlass::mark_dependent_nmethod // directly instead of CodeCache::mark_for_deoptimization because we // want dependents on the call site class only not all classes in // the ContextStream. int marked = 0; { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); - instanceKlass* call_site_klass = instanceKlass::cast(call_site->klass()); + InstanceKlass* call_site_klass = InstanceKlass::cast(call_site->klass()); marked = call_site_klass->mark_dependent_nmethods(changes); } if (marked > 0) { @@ -1363,6 +1266,10 @@ } if (!silent) gclog_or_tty->print("dict "); SystemDictionary::verify(); +#ifndef PRODUCT + if (!silent) gclog_or_tty->print("cldg "); + ClassLoaderDataGraph::verify(); +#endif if (!silent) gclog_or_tty->print("hand "); JNIHandles::verify(); if (!silent) gclog_or_tty->print("C-heap "); @@ -1433,62 +1340,10 @@ return _verify_oop_data[1]; } - -uintptr_t Universe::verify_klass_mask() { - /* $$$ - // A klass can never live in the new space. Since the new and old - // spaces can change size, we must settle for bounds-checking against - // the bottom of the world, plus the smallest possible new and old - // space sizes that may arise during execution. - size_t min_new_size = Universe::new_size(); // in bytes - size_t min_old_size = Universe::old_size(); // in bytes - calculate_verify_data(_verify_klass_data, - (HeapWord*)((uintptr_t)_new_gen->low_boundary + min_new_size + min_old_size), - _perm_gen->high_boundary); - */ - // Why doesn't the above just say that klass's always live in the perm - // gen? I'll see if that seems to work... - MemRegion permanent_reserved; - switch (Universe::heap()->kind()) { - default: - // ???: What if a CollectedHeap doesn't have a permanent generation? - ShouldNotReachHere(); - break; - case CollectedHeap::GenCollectedHeap: - case CollectedHeap::G1CollectedHeap: { - SharedHeap* sh = (SharedHeap*) Universe::heap(); - permanent_reserved = sh->perm_gen()->reserved(); - break; - } -#ifndef SERIALGC - case CollectedHeap::ParallelScavengeHeap: { - ParallelScavengeHeap* psh = (ParallelScavengeHeap*) Universe::heap(); - permanent_reserved = psh->perm_gen()->reserved(); - break; - } -#endif // SERIALGC - } - calculate_verify_data(_verify_klass_data, - permanent_reserved.start(), - permanent_reserved.end()); - - return _verify_klass_data[0]; -} - - - -uintptr_t Universe::verify_klass_bits() { - verify_klass_mask(); - return _verify_klass_data[1]; -} - - uintptr_t Universe::verify_mark_mask() { return markOopDesc::lock_mask_in_place; } - - uintptr_t Universe::verify_mark_bits() { intptr_t mask = verify_mark_mask(); intptr_t bits = (intptr_t)markOopDesc::prototype(); @@ -1503,12 +1358,10 @@ verify_oop_bits(); verify_mark_mask(); verify_mark_bits(); - verify_klass_mask(); - verify_klass_bits(); } -void CommonMethodOopCache::init(klassOop k, methodOop m, TRAPS) { +void CommonMethodOopCache::init(Klass* k, Method* m, TRAPS) { if (!UseSharedSpaces) { _klass = k; } @@ -1526,27 +1379,24 @@ ActiveMethodOopsCache::~ActiveMethodOopsCache() { if (_prev_methods != NULL) { - for (int i = _prev_methods->length() - 1; i >= 0; i--) { - jweak method_ref = _prev_methods->at(i); - if (method_ref != NULL) { - JNIHandles::destroy_weak_global(method_ref); - } - } delete _prev_methods; _prev_methods = NULL; } } -void ActiveMethodOopsCache::add_previous_version(const methodOop method) { +void ActiveMethodOopsCache::add_previous_version(Method* const method) { assert(Thread::current()->is_VM_thread(), "only VMThread can add previous versions"); + // Only append the previous method if it is executing on the stack. + if (method->on_stack()) { + if (_prev_methods == NULL) { // This is the first previous version so make some space. // Start with 2 elements under the assumption that the class // won't be redefined much. - _prev_methods = new (ResourceObj::C_HEAP, mtClass) GrowableArray(2, true); + _prev_methods = new (ResourceObj::C_HEAP, mtClass) GrowableArray(2, true); } // RC_TRACE macro has an embedded ResourceMark @@ -1555,42 +1405,35 @@ method->name()->as_C_string(), method->signature()->as_C_string(), _prev_methods->length())); - methodHandle method_h(method); - jweak method_ref = JNIHandles::make_weak_global(method_h); - _prev_methods->append(method_ref); + _prev_methods->append(method); + } + - // Using weak references allows previous versions of the cached - // method to be GC'ed when they are no longer needed. Since the - // caller is the VMThread and we are at a safepoint, this is a good - // time to clear out unused weak references. + // Since the caller is the VMThread and we are at a safepoint, this is a good + // time to clear out unused method references. + + if (_prev_methods == NULL) return; for (int i = _prev_methods->length() - 1; i >= 0; i--) { - jweak method_ref = _prev_methods->at(i); - assert(method_ref != NULL, "weak method ref was unexpectedly cleared"); - if (method_ref == NULL) { + Method* method = _prev_methods->at(i); + assert(method != NULL, "weak method ref was unexpectedly cleared"); + + if (!method->on_stack()) { + // This method isn't running anymore so remove it _prev_methods->remove_at(i); - // Since we are traversing the array backwards, we don't have to - // do anything special with the index. - continue; // robustness - } - - methodOop m = (methodOop)JNIHandles::resolve(method_ref); - if (m == NULL) { - // this method entry has been GC'ed so remove it - JNIHandles::destroy_weak_global(method_ref); - _prev_methods->remove_at(i); + MetadataFactory::free_metadata(method->method_holder()->class_loader_data(), method); } else { // RC_TRACE macro has an embedded ResourceMark RC_TRACE(0x00000400, ("add: %s(%s): previous cached method @%d is alive", - m->name()->as_C_string(), m->signature()->as_C_string(), i)); + method->name()->as_C_string(), method->signature()->as_C_string(), i)); } } } // end add_previous_version() -bool ActiveMethodOopsCache::is_same_method(const methodOop method) const { - instanceKlass* ik = instanceKlass::cast(klass()); - methodOop check_method = ik->method_with_idnum(method_idnum()); +bool ActiveMethodOopsCache::is_same_method(Method* const method) const { + InstanceKlass* ik = InstanceKlass::cast(klass()); + Method* check_method = ik->method_with_idnum(method_idnum()); assert(check_method != NULL, "sanity check"); if (check_method == method) { // done with the easy case @@ -1601,13 +1444,7 @@ // The cached method has been redefined at least once so search // the previous versions for a match. for (int i = 0; i < _prev_methods->length(); i++) { - jweak method_ref = _prev_methods->at(i); - assert(method_ref != NULL, "weak method ref was unexpectedly cleared"); - if (method_ref == NULL) { - continue; // robustness - } - - check_method = (methodOop)JNIHandles::resolve(method_ref); + check_method = _prev_methods->at(i); if (check_method == method) { // a previous version matches return true; @@ -1620,9 +1457,9 @@ } -methodOop LatestMethodOopCache::get_methodOop() { - instanceKlass* ik = instanceKlass::cast(klass()); - methodOop m = ik->method_with_idnum(method_idnum()); +Method* LatestMethodOopCache::get_Method() { + InstanceKlass* ik = InstanceKlass::cast(klass()); + Method* m = ik->method_with_idnum(method_idnum()); assert(m != NULL, "sanity check"); return m; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/memory/universe.hpp --- a/src/share/vm/memory/universe.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/memory/universe.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -26,6 +26,7 @@ #define SHARE_VM_MEMORY_UNIVERSE_HPP #include "runtime/handles.hpp" +#include "utilities/array.hpp" #include "utilities/growableArray.hpp" // Universe is a name space holding known system classes and objects in the VM. @@ -40,60 +41,68 @@ class DeferredObjAllocEvent; -// Common parts of a methodOop cache. This cache safely interacts with +// Common parts of a Method* cache. This cache safely interacts with // the RedefineClasses API. // class CommonMethodOopCache : public CHeapObj { - // We save the klassOop and the idnum of methodOop in order to get - // the current cached methodOop. + // We save the Klass* and the idnum of Method* in order to get + // the current cached Method*. private: - klassOop _klass; + Klass* _klass; int _method_idnum; public: CommonMethodOopCache() { _klass = NULL; _method_idnum = -1; } ~CommonMethodOopCache() { _klass = NULL; _method_idnum = -1; } - void init(klassOop k, methodOop m, TRAPS); - klassOop klass() const { return _klass; } + void init(Klass* k, Method* m, TRAPS); + Klass* klass() const { return _klass; } int method_idnum() const { return _method_idnum; } - // GC support - void oops_do(OopClosure* f) { f->do_oop((oop*)&_klass); } + // Enhanced Class Redefinition support + void classes_do(void f(Klass*)) { + f(_klass); + } + + // CDS support. Replace the klass in this with the archive version + // could use this for Enhanced Class Redefinition also. + void serialize(SerializeClosure* f) { + f->do_ptr((void**)&_klass); + } }; -// A helper class for caching a methodOop when the user of the cache -// cares about all versions of the methodOop. +// A helper class for caching a Method* when the user of the cache +// cares about all versions of the Method*. // class ActiveMethodOopsCache : public CommonMethodOopCache { // This subclass adds weak references to older versions of the - // methodOop and a query method for a methodOop. + // Method* and a query method for a Method*. private: - // If the cached methodOop has not been redefined, then + // If the cached Method* has not been redefined, then // _prev_methods will be NULL. If all of the previous // versions of the method have been collected, then // _prev_methods can have a length of zero. - GrowableArray* _prev_methods; + GrowableArray* _prev_methods; public: ActiveMethodOopsCache() { _prev_methods = NULL; } ~ActiveMethodOopsCache(); - void add_previous_version(const methodOop method); - bool is_same_method(const methodOop method) const; + void add_previous_version(Method* const method); + bool is_same_method(Method* const method) const; }; -// A helper class for caching a methodOop when the user of the cache -// only cares about the latest version of the methodOop. +// A helper class for caching a Method* when the user of the cache +// only cares about the latest version of the Method*. // class LatestMethodOopCache : public CommonMethodOopCache { - // This subclass adds a getter method for the latest methodOop. + // This subclass adds a getter method for the latest Method*. public: - methodOop get_methodOop(); + Method* get_Method(); }; // For UseCompressedOops. @@ -126,7 +135,6 @@ friend class Arguments; friend class SystemDictionary; friend class VMStructs; - friend class CompactingPermGenGen; friend class VM_PopulateDumpSharedSpace; friend jint universe_init(); @@ -135,30 +143,17 @@ private: // Known classes in the VM - static klassOop _boolArrayKlassObj; - static klassOop _byteArrayKlassObj; - static klassOop _charArrayKlassObj; - static klassOop _intArrayKlassObj; - static klassOop _shortArrayKlassObj; - static klassOop _longArrayKlassObj; - static klassOop _singleArrayKlassObj; - static klassOop _doubleArrayKlassObj; - static klassOop _typeArrayKlassObjs[T_VOID+1]; - - static klassOop _objectArrayKlassObj; + static Klass* _boolArrayKlassObj; + static Klass* _byteArrayKlassObj; + static Klass* _charArrayKlassObj; + static Klass* _intArrayKlassObj; + static Klass* _shortArrayKlassObj; + static Klass* _longArrayKlassObj; + static Klass* _singleArrayKlassObj; + static Klass* _doubleArrayKlassObj; + static Klass* _typeArrayKlassObjs[T_VOID+1]; - static klassOop _methodKlassObj; - static klassOop _constMethodKlassObj; - static klassOop _methodDataKlassObj; - static klassOop _klassKlassObj; - static klassOop _arrayKlassKlassObj; - static klassOop _objArrayKlassKlassObj; - static klassOop _typeArrayKlassKlassObj; - static klassOop _instanceKlassKlassObj; - static klassOop _constantPoolKlassObj; - static klassOop _constantPoolCacheKlassObj; - static klassOop _compiledICHolderKlassObj; - static klassOop _systemObjArrayKlassObj; + static Klass* _objectArrayKlassObj; // Known objects in the VM @@ -176,22 +171,23 @@ static oop _main_thread_group; // Reference to the main thread group object static oop _system_thread_group; // Reference to the system thread group object - static typeArrayOop _the_empty_byte_array; // Canonicalized byte array - static typeArrayOop _the_empty_short_array; // Canonicalized short array - static typeArrayOop _the_empty_int_array; // Canonicalized int array - static objArrayOop _the_empty_system_obj_array; // Canonicalized system obj array static objArrayOop _the_empty_class_klass_array; // Canonicalized obj array of type java.lang.Class - static objArrayOop _the_array_interfaces_array; // Canonicalized 2-array of cloneable & serializable klasses static oop _the_null_string; // A cache of "null" as a Java string static oop _the_min_jint_string; // A cache of "-2147483648" as a Java string static LatestMethodOopCache* _finalizer_register_cache; // static method for registering finalizable objects - static LatestMethodOopCache* _loader_addClass_cache; // method for registering loaded classes in class loader vector static ActiveMethodOopsCache* _reflect_invoke_cache; // method for security checks static oop _out_of_memory_error_java_heap; // preallocated error object (no backtrace) static oop _out_of_memory_error_perm_gen; // preallocated error object (no backtrace) static oop _out_of_memory_error_array_size;// preallocated error object (no backtrace) static oop _out_of_memory_error_gc_overhead_limit; // preallocated error object (no backtrace) + static Array* _the_empty_int_array; // Canonicalized int array + static Array* _the_empty_short_array; // Canonicalized short array + static Array* _the_empty_klass_array; // Canonicalized klass obj array + static Array* _the_empty_method_array; // Canonicalized method obj array + + static Array* _the_array_interfaces_array; + // array of preallocated error objects with backtrace static objArrayOop _preallocated_out_of_memory_error_array; @@ -250,6 +246,21 @@ return m; } + // Narrow Oop encoding mode: + // 0 - Use 32-bits oops without encoding when + // NarrowOopHeapBaseMin + heap_size < 4Gb + // 1 - Use zero based compressed oops with encoding when + // NarrowOopHeapBaseMin + heap_size < 32Gb + // 2 - Use compressed oops with heap base + encoding. + enum NARROW_OOP_MODE { + UnscaledNarrowOop = 0, + ZeroBasedNarrowOop = 1, + HeapBasedNarrowOop = 2 + }; + static char* preferred_heap_base(size_t heap_size, NARROW_OOP_MODE mode); + static void set_narrow_oop_base(address base) { _narrow_oop._base = base; } + static void set_narrow_oop_use_implicit_null_checks(bool use) { _narrow_oop._use_implicit_null_checks = use; } + // Debugging static int _verify_count; // number of verifies done // True during call to verify(). Should only be set/cleared in verify(). @@ -259,38 +270,25 @@ public: // Known classes in the VM - static klassOop boolArrayKlassObj() { return _boolArrayKlassObj; } - static klassOop byteArrayKlassObj() { return _byteArrayKlassObj; } - static klassOop charArrayKlassObj() { return _charArrayKlassObj; } - static klassOop intArrayKlassObj() { return _intArrayKlassObj; } - static klassOop shortArrayKlassObj() { return _shortArrayKlassObj; } - static klassOop longArrayKlassObj() { return _longArrayKlassObj; } - static klassOop singleArrayKlassObj() { return _singleArrayKlassObj; } - static klassOop doubleArrayKlassObj() { return _doubleArrayKlassObj; } + static Klass* boolArrayKlassObj() { return _boolArrayKlassObj; } + static Klass* byteArrayKlassObj() { return _byteArrayKlassObj; } + static Klass* charArrayKlassObj() { return _charArrayKlassObj; } + static Klass* intArrayKlassObj() { return _intArrayKlassObj; } + static Klass* shortArrayKlassObj() { return _shortArrayKlassObj; } + static Klass* longArrayKlassObj() { return _longArrayKlassObj; } + static Klass* singleArrayKlassObj() { return _singleArrayKlassObj; } + static Klass* doubleArrayKlassObj() { return _doubleArrayKlassObj; } - static klassOop objectArrayKlassObj() { + static Klass* objectArrayKlassObj() { return _objectArrayKlassObj; } - static klassOop typeArrayKlassObj(BasicType t) { + static Klass* typeArrayKlassObj(BasicType t) { assert((uint)t < T_VOID+1, err_msg("range check for type: %s", type2name(t))); assert(_typeArrayKlassObjs[t] != NULL, "domain check"); return _typeArrayKlassObjs[t]; } - static klassOop methodKlassObj() { return _methodKlassObj; } - static klassOop constMethodKlassObj() { return _constMethodKlassObj; } - static klassOop methodDataKlassObj() { return _methodDataKlassObj; } - static klassOop klassKlassObj() { return _klassKlassObj; } - static klassOop arrayKlassKlassObj() { return _arrayKlassKlassObj; } - static klassOop objArrayKlassKlassObj() { return _objArrayKlassKlassObj; } - static klassOop typeArrayKlassKlassObj() { return _typeArrayKlassKlassObj; } - static klassOop instanceKlassKlassObj() { return _instanceKlassKlassObj; } - static klassOop constantPoolKlassObj() { return _constantPoolKlassObj; } - static klassOop constantPoolCacheKlassObj() { return _constantPoolCacheKlassObj; } - static klassOop compiledICHolderKlassObj() { return _compiledICHolderKlassObj; } - static klassOop systemObjArrayKlassObj() { return _systemObjArrayKlassObj; } - // Known objects in the VM static oop int_mirror() { return check_mirror(_int_mirror); } static oop float_mirror() { return check_mirror(_float_mirror); } @@ -315,22 +313,22 @@ static oop system_thread_group() { return _system_thread_group; } static void set_system_thread_group(oop group) { _system_thread_group = group;} - static typeArrayOop the_empty_byte_array() { return _the_empty_byte_array; } - static typeArrayOop the_empty_short_array() { return _the_empty_short_array; } - static typeArrayOop the_empty_int_array() { return _the_empty_int_array; } - static objArrayOop the_empty_system_obj_array () { return _the_empty_system_obj_array; } static objArrayOop the_empty_class_klass_array () { return _the_empty_class_klass_array; } - static objArrayOop the_array_interfaces_array() { return _the_array_interfaces_array; } + static Array* the_array_interfaces_array() { return _the_array_interfaces_array; } static oop the_null_string() { return _the_null_string; } static oop the_min_jint_string() { return _the_min_jint_string; } - static methodOop finalizer_register_method() { return _finalizer_register_cache->get_methodOop(); } - static methodOop loader_addClass_method() { return _loader_addClass_cache->get_methodOop(); } + static Method* finalizer_register_method() { return _finalizer_register_cache->get_Method(); } static ActiveMethodOopsCache* reflect_invoke_cache() { return _reflect_invoke_cache; } static oop null_ptr_exception_instance() { return _null_ptr_exception_instance; } static oop arithmetic_exception_instance() { return _arithmetic_exception_instance; } static oop virtual_machine_error_instance() { return _virtual_machine_error_instance; } static oop vm_exception() { return _vm_exception; } + static Array* the_empty_int_array() { return _the_empty_int_array; } + static Array* the_empty_short_array() { return _the_empty_short_array; } + static Array* the_empty_method_array() { return _the_empty_method_array; } + static Array* the_empty_klass_array() { return _the_empty_klass_array; } + // OutOfMemoryError support. Returns an error with the required message. The returned error // may or may not have a backtrace. If error has a backtrace then the stack trace is already // filled in. @@ -340,15 +338,15 @@ static oop out_of_memory_error_gc_overhead_limit() { return gen_out_of_memory_error(_out_of_memory_error_gc_overhead_limit); } // Accessors needed for fast allocation - static klassOop* boolArrayKlassObj_addr() { return &_boolArrayKlassObj; } - static klassOop* byteArrayKlassObj_addr() { return &_byteArrayKlassObj; } - static klassOop* charArrayKlassObj_addr() { return &_charArrayKlassObj; } - static klassOop* intArrayKlassObj_addr() { return &_intArrayKlassObj; } - static klassOop* shortArrayKlassObj_addr() { return &_shortArrayKlassObj; } - static klassOop* longArrayKlassObj_addr() { return &_longArrayKlassObj; } - static klassOop* singleArrayKlassObj_addr() { return &_singleArrayKlassObj; } - static klassOop* doubleArrayKlassObj_addr() { return &_doubleArrayKlassObj; } - static klassOop* systemObjArrayKlassObj_addr() { return &_systemObjArrayKlassObj; } + static Klass** boolArrayKlassObj_addr() { return &_boolArrayKlassObj; } + static Klass** byteArrayKlassObj_addr() { return &_byteArrayKlassObj; } + static Klass** charArrayKlassObj_addr() { return &_charArrayKlassObj; } + static Klass** intArrayKlassObj_addr() { return &_intArrayKlassObj; } + static Klass** shortArrayKlassObj_addr() { return &_shortArrayKlassObj; } + static Klass** longArrayKlassObj_addr() { return &_longArrayKlassObj; } + static Klass** singleArrayKlassObj_addr() { return &_singleArrayKlassObj; } + static Klass** doubleArrayKlassObj_addr() { return &_doubleArrayKlassObj; } + static Klass** objectArrayKlassObj_addr() { return &_objectArrayKlassObj; } // The particular choice of collected heap. static CollectedHeap* heap() { return _collectedHeap; } @@ -358,22 +356,13 @@ static address narrow_oop_base() { return _narrow_oop._base; } static bool is_narrow_oop_base(void* addr) { return (narrow_oop_base() == (address)addr); } static int narrow_oop_shift() { return _narrow_oop._shift; } - static void set_narrow_oop_base(address base) { _narrow_oop._base = base; } + static bool narrow_oop_use_implicit_null_checks() { return _narrow_oop._use_implicit_null_checks; } + + // this is set in vm_version on sparc (and then reset in universe afaict) static void set_narrow_oop_shift(int shift) { _narrow_oop._shift = shift; } - static bool narrow_oop_use_implicit_null_checks() { return _narrow_oop._use_implicit_null_checks; } - static void set_narrow_oop_use_implicit_null_checks(bool use) { _narrow_oop._use_implicit_null_checks = use; } - // Narrow Oop encoding mode: - // 0 - Use 32-bits oops without encoding when - // NarrowOopHeapBaseMin + heap_size < 4Gb - // 1 - Use zero based compressed oops with encoding when - // NarrowOopHeapBaseMin + heap_size < 32Gb - // 2 - Use compressed oops with heap base + encoding. - enum NARROW_OOP_MODE { - UnscaledNarrowOop = 0, - ZeroBasedNarrowOop = 1, - HeapBasedNarrowOop = 2 - }; - static char* preferred_heap_base(size_t heap_size, NARROW_OOP_MODE mode); + + // Reserve Java heap and determine CompressedOops mode + static ReservedSpace reserve_heap(size_t heap_size, size_t alignment); // Historic gc information static size_t get_heap_capacity_at_last_gc() { return _heap_capacity_at_last_gc; } @@ -400,12 +389,12 @@ // as static fields of "Universe". static void oops_do(OopClosure* f, bool do_all = false); + // CDS support + static void serialize(SerializeClosure* f, bool do_all = false); + // Apply "f" to all klasses for basic types (classes not present in // SystemDictionary). - static void basic_type_classes_do(void f(klassOop)); - - // Apply "f" to all system klasses (classes not present in SystemDictionary). - static void system_classes_do(void f(klassOop)); + static void basic_type_classes_do(void f(Klass*)); // For sharing -- fill in a list of known vtable pointers. static void init_self_patching_vtbl_list(void** list, int count); @@ -438,8 +427,6 @@ static uintptr_t verify_oop_bits() PRODUCT_RETURN0; static uintptr_t verify_mark_bits() PRODUCT_RETURN0; static uintptr_t verify_mark_mask() PRODUCT_RETURN0; - static uintptr_t verify_klass_mask() PRODUCT_RETURN0; - static uintptr_t verify_klass_bits() PRODUCT_RETURN0; // Flushing and deoptimization static void flush_dependents_on(instanceKlassHandle dependee); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/annotations.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/annotations.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "classfile/classLoaderData.hpp" +#include "memory/metadataFactory.hpp" +#include "memory/oopFactory.hpp" +#include "oops/annotations.hpp" +#include "oops/instanceKlass.hpp" +#include "utilities/ostream.hpp" + +// Allocate annotations in metadata area +Annotations* Annotations::allocate(ClassLoaderData* loader_data, TRAPS) { + return new (loader_data, size(), true, THREAD) Annotations(); +} + +Annotations* Annotations::allocate(ClassLoaderData* loader_data, + Array* fa, + Array* ma, + Array* mpa, + Array* mda, TRAPS) { + return new (loader_data, size(), true, THREAD) Annotations(fa, ma, mpa, mda); +} + +// helper +static void free_contents(ClassLoaderData* loader_data, Array* p) { + if (p != NULL) { + for (int i = 0; i < p->length(); i++) { + MetadataFactory::free_array(loader_data, p->at(i)); + } + MetadataFactory::free_array(loader_data, p); + } +} + +void Annotations::deallocate_contents(ClassLoaderData* loader_data) { + if (class_annotations() != NULL) { + MetadataFactory::free_array(loader_data, class_annotations()); + } + free_contents(loader_data, fields_annotations()); + free_contents(loader_data, methods_annotations()); + free_contents(loader_data, methods_parameter_annotations()); + free_contents(loader_data, methods_default_annotations()); +} + +// Set the annotation at 'idnum' to 'anno'. +// We don't want to create or extend the array if 'anno' is NULL, since that is the +// default value. However, if the array exists and is long enough, we must set NULL values. +void Annotations::set_methods_annotations_of(instanceKlassHandle ik, + int idnum, AnnotationArray* anno, + Array** md_p, + TRAPS) { + Array* md = *md_p; + if (md != NULL && md->length() > idnum) { + md->at_put(idnum, anno); + } else if (anno != NULL) { + // create the array + int length = MAX2(idnum+1, (int)ik->idnum_allocated_count()); + md = MetadataFactory::new_array(ik->class_loader_data(), length, CHECK); + if (*md_p != NULL) { + // copy the existing entries + for (int index = 0; index < (*md_p)->length(); index++) { + md->at_put(index, (*md_p)->at(index)); + } + } + set_annotations(md, md_p); + md->at_put(idnum, anno); + } // if no array and idnum isn't included there is nothing to do +} + +// Keep created annotations in a global growable array (should be hashtable) +// need to add, search, delete when class is unloaded. +// Does it need a lock? yes. This sucks. + +// Copy annotations to JVM call or reflection to the java heap. +typeArrayOop Annotations::make_java_array(AnnotationArray* annotations, TRAPS) { + if (annotations != NULL) { + int length = annotations->length(); + typeArrayOop copy = oopFactory::new_byteArray(length, CHECK_NULL); + for (int i = 0; i< length; i++) { + copy->byte_at_put(i, annotations->at(i)); + } + return copy; + } else { + return NULL; + } +} + + +void Annotations::print_value_on(outputStream* st) const { + st->print("Anotations(" INTPTR_FORMAT ")", this); +} + +#define BULLET " - " + +#ifndef PRODUCT +void Annotations::print_on(outputStream* st) const { + st->print(BULLET"class_annotations "); class_annotations()->print_value_on(st); + st->print(BULLET"fields_annotations "); fields_annotations()->print_value_on(st); + st->print(BULLET"methods_annotations "); methods_annotations()->print_value_on(st); + st->print(BULLET"methods_parameter_annotations"); methods_parameter_annotations()->print_value_on(st); + st->print(BULLET"methods_default_annotations "); methods_default_annotations()->print_value_on(st); +} +#endif // PRODUCT diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/annotations.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/annotations.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_OOPS_ANNOTATIONS_HPP +#define SHARE_VM_OOPS_ANNOTATIONS_HPP + +#include "oops/metadata.hpp" +#include "runtime/handles.hpp" +#include "utilities/array.hpp" +#include "utilities/exceptions.hpp" +#include "utilities/globalDefinitions.hpp" + + +class ClassLoaderData; +class outputStream; + +typedef Array AnnotationArray; + +// Class to hold the various types of annotations. The only metadata that points +// to this is InstanceKlass. + +class Annotations: public MetaspaceObj { + + // Annotations for this class, or null if none. + AnnotationArray* _class_annotations; + // Annotation objects (byte arrays) for fields, or null if no annotations. + // Indices correspond to entries (not indices) in fields array. + Array* _fields_annotations; + // Annotation objects (byte arrays) for methods, or null if no annotations. + // Index is the idnum, which is initially the same as the methods array index. + Array* _methods_annotations; + // Annotation objects (byte arrays) for methods' parameters, or null if no + // such annotations. + // Index is the idnum, which is initially the same as the methods array index. + Array* _methods_parameter_annotations; + // Annotation objects (byte arrays) for methods' default values, or null if no + // such annotations. + // Index is the idnum, which is initially the same as the methods array index. + Array* _methods_default_annotations; + + // Constructor where some some values are known to not be null + Annotations(Array* fa, Array* ma, + Array* mpa, Array* mda) : + _class_annotations(NULL), + _fields_annotations(fa), + _methods_annotations(ma), + _methods_parameter_annotations(mpa), + _methods_default_annotations(mda) {} + + public: + // Allocate instance of this class + static Annotations* allocate(ClassLoaderData* loader_data, TRAPS); + static Annotations* allocate(ClassLoaderData* loader_data, + Array* fa, + Array* ma, + Array* mpa, + Array* mda, TRAPS); + void deallocate_contents(ClassLoaderData* loader_data); + DEBUG_ONLY(bool on_stack() { return false; }) // for template + static int size() { return sizeof(Annotations) / wordSize; } + + // Constructor to initialize to null + Annotations() : _class_annotations(NULL), _fields_annotations(NULL), + _methods_annotations(NULL), + _methods_parameter_annotations(NULL), + _methods_default_annotations(NULL) {} + + AnnotationArray* class_annotations() const { return _class_annotations; } + Array* fields_annotations() const { return _fields_annotations; } + Array* methods_annotations() const { return _methods_annotations; } + Array* methods_parameter_annotations() const { return _methods_parameter_annotations; } + Array* methods_default_annotations() const { return _methods_default_annotations; } + + void set_class_annotations(AnnotationArray* md) { _class_annotations = md; } + void set_fields_annotations(Array* md) { _fields_annotations = md; } + void set_methods_annotations(Array* md) { _methods_annotations = md; } + void set_methods_parameter_annotations(Array* md) { _methods_parameter_annotations = md; } + void set_methods_default_annotations(Array* md) { _methods_default_annotations = md; } + + // Redefine classes support + AnnotationArray* get_method_annotations_of(int idnum) + { return get_method_annotations_from(idnum, _methods_annotations); } + + AnnotationArray* get_method_parameter_annotations_of(int idnum) + { return get_method_annotations_from(idnum, _methods_parameter_annotations); } + AnnotationArray* get_method_default_annotations_of(int idnum) + { return get_method_annotations_from(idnum, _methods_default_annotations); } + + + void set_method_annotations_of(instanceKlassHandle ik, + int idnum, AnnotationArray* anno, TRAPS) { + set_methods_annotations_of(ik, idnum, anno, &_methods_annotations, THREAD); + } + + void set_method_parameter_annotations_of(instanceKlassHandle ik, + int idnum, AnnotationArray* anno, TRAPS) { + set_methods_annotations_of(ik, idnum, anno, &_methods_parameter_annotations, THREAD); + } + + void set_method_default_annotations_of(instanceKlassHandle ik, + int idnum, AnnotationArray* anno, TRAPS) { + set_methods_annotations_of(ik, idnum, anno, &_methods_default_annotations, THREAD); + } + + // Turn metadata annotations into a Java heap object (oop) + static typeArrayOop make_java_array(AnnotationArray* annotations, TRAPS); + + inline AnnotationArray* get_method_annotations_from(int idnum, Array* annos); + void set_annotations(Array* md, Array** md_p) { *md_p = md; } + + private: + void set_methods_annotations_of(instanceKlassHandle ik, + int idnum, AnnotationArray* anno, + Array** md_p, TRAPS); + + public: + const char* internal_name() const { return "{constant pool}"; } +#ifndef PRODUCT + void print_on(outputStream* st) const; +#endif + void print_value_on(outputStream* st) const; +}; + + +// For method with idnum get the method's Annotations +inline AnnotationArray* Annotations::get_method_annotations_from(int idnum, Array* annos) { + if (annos == NULL || annos->length() <= idnum) { + return NULL; + } + return annos->at(idnum); +} +#endif // SHARE_VM_OOPS_ANNOTATIONS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/arrayKlass.cpp --- a/src/share/vm/oops/arrayKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/arrayKlass.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -31,27 +31,27 @@ #include "memory/gcLocker.hpp" #include "memory/universe.inline.hpp" #include "oops/arrayKlass.hpp" -#include "oops/arrayKlassKlass.hpp" #include "oops/arrayOop.hpp" #include "oops/instanceKlass.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" -int arrayKlass::object_size(int header_size) const { +int arrayKlass::static_size(int header_size) { // size of an array klass object - assert(header_size <= instanceKlass::header_size(), "bad header size"); + assert(header_size <= InstanceKlass::header_size(), "bad header size"); // If this assert fails, see comments in base_create_array_klass. - header_size = instanceKlass::header_size(); + header_size = InstanceKlass::header_size(); + int vtable_len = Universe::base_vtable_size(); #ifdef _LP64 - int size = header_size + align_object_offset(vtable_length()); + int size = header_size + align_object_offset(vtable_len); #else - int size = header_size + vtable_length(); + int size = header_size + vtable_len; #endif return align_object_size(size); } -klassOop arrayKlass::java_super() const { +Klass* arrayKlass::java_super() const { if (super() == NULL) return NULL; // bootstrap case // Array klasses have primary supertypes which are not reported to Java. // Example super chain: String[][] -> Object[][] -> Object[] -> Object @@ -64,70 +64,48 @@ return NULL; } -methodOop arrayKlass::uncached_lookup_method(Symbol* name, Symbol* signature) const { +Method* arrayKlass::uncached_lookup_method(Symbol* name, Symbol* signature) const { // There are no methods in an array klass but the super class (Object) has some assert(super(), "super klass must be present"); return Klass::cast(super())->uncached_lookup_method(name, signature); } +arrayKlass::arrayKlass(Symbol* name) { + set_alloc_size(0); + set_name(name); -arrayKlassHandle arrayKlass::base_create_array_klass( -const Klass_vtbl& cplusplus_vtbl, int header_size, KlassHandle klass, TRAPS) { - // Allocation - // Note: because the Java vtable must start at the same offset in all klasses, - // we must insert filler fields into arrayKlass to make it the same size as instanceKlass. - // If this assert fails, add filler to instanceKlass to make it bigger. - assert(header_size <= instanceKlass::header_size(), - "array klasses must be same size as instanceKlass"); - header_size = instanceKlass::header_size(); + set_super(Universe::is_bootstrapping() ? (Klass*)NULL : SystemDictionary::Object_klass()); + set_layout_helper(Klass::_lh_neutral_value); + set_dimension(1); + set_higher_dimension(NULL); + set_lower_dimension(NULL); + set_component_mirror(NULL); // Arrays don't add any new methods, so their vtable is the same size as // the vtable of klass Object. int vtable_size = Universe::base_vtable_size(); - arrayKlassHandle k; - KlassHandle base_klass = Klass::base_create_klass(klass, - header_size + vtable_size, - cplusplus_vtbl, CHECK_(k)); - - // No safepoint should be possible until the handle's - // target below becomes parsable - No_Safepoint_Verifier no_safepoint; - k = arrayKlassHandle(THREAD, base_klass()); - - assert(!k()->is_parsable(), "not expecting parsability yet."); - k->set_super(Universe::is_bootstrapping() ? (klassOop)NULL : SystemDictionary::Object_klass()); - k->set_layout_helper(Klass::_lh_neutral_value); - k->set_dimension(1); - k->set_higher_dimension(NULL); - k->set_lower_dimension(NULL); - k->set_component_mirror(NULL); - k->set_vtable_length(vtable_size); - k->set_is_cloneable(); // All arrays are considered to be cloneable (See JLS 20.1.5) - - assert(k()->is_parsable(), "should be parsable here."); - // Make sure size calculation is right - assert(k()->size() == align_object_size(header_size + vtable_size), "wrong size for object"); - - return k; + set_vtable_length(vtable_size); + set_is_cloneable(); // All arrays are considered to be cloneable (See JLS 20.1.5) } // Initialization of vtables and mirror object is done separatly from base_create_array_klass, // since a GC can happen. At this point all instance variables of the arrayKlass must be setup. -void arrayKlass::complete_create_array_klass(arrayKlassHandle k, KlassHandle super_klass, TRAPS) { +void arrayKlass::complete_create_array_klass(arrayKlass* k, KlassHandle super_klass, TRAPS) { ResourceMark rm(THREAD); k->initialize_supers(super_klass(), CHECK); k->vtable()->initialize_vtable(false, CHECK); java_lang_Class::create_mirror(k, CHECK); } -objArrayOop arrayKlass::compute_secondary_supers(int num_extra_slots, TRAPS) { +GrowableArray* arrayKlass::compute_secondary_supers(int num_extra_slots) { // interfaces = { cloneable_klass, serializable_klass }; assert(num_extra_slots == 0, "sanity of primitive array type"); // Must share this for correct bootstrapping! - return Universe::the_array_interfaces_array(); + set_secondary_supers(Universe::the_array_interfaces_array()); + return NULL; } -bool arrayKlass::compute_is_subtype_of(klassOop k) { +bool arrayKlass::compute_is_subtype_of(Klass* k) { // An array is a subtype of Serializable, Clonable, and Object return k == SystemDictionary::Object_klass() || k == SystemDictionary::Cloneable_klass() @@ -136,13 +114,13 @@ inline intptr_t* arrayKlass::start_of_vtable() const { - // all vtables start at the same place, that's why we use instanceKlass::header_size here - return ((intptr_t*)as_klassOop()) + instanceKlass::header_size(); + // all vtables start at the same place, that's why we use InstanceKlass::header_size here + return ((intptr_t*)this) + InstanceKlass::header_size(); } klassVtable* arrayKlass::vtable() const { - KlassHandle kh(Thread::current(), as_klassOop()); + KlassHandle kh(Thread::current(), this); return new klassVtable(kh, start_of_vtable(), vtable_length() / vtableEntry::size()); } @@ -157,17 +135,25 @@ THROW_OOP_0(Universe::out_of_memory_error_array_size()); } int size = objArrayOopDesc::object_size(length); - klassOop k = array_klass(n+dimension(), CHECK_0); - arrayKlassHandle ak (THREAD, k); + Klass* k = array_klass(n+dimension(), CHECK_0); + arrayKlass* ak = arrayKlass::cast(k); objArrayOop o = (objArrayOop)CollectedHeap::array_allocate(ak, size, length, CHECK_0); // initialization to NULL not necessary, area already cleared return o; } +void arrayKlass::array_klasses_do(void f(Klass* k, TRAPS), TRAPS) { + Klass* k = this; + // Iterate over this array klass and all higher dimensions + while (k != NULL) { + f(k, CHECK); + k = arrayKlass::cast(k)->higher_dimension(); + } +} -void arrayKlass::array_klasses_do(void f(klassOop k)) { - klassOop k = as_klassOop(); +void arrayKlass::array_klasses_do(void f(Klass* k)) { + Klass* k = this; // Iterate over this array klass and all higher dimensions while (k != NULL) { f(k); @@ -176,10 +162,19 @@ } -void arrayKlass::with_array_klasses_do(void f(klassOop k)) { +void arrayKlass::with_array_klasses_do(void f(Klass* k)) { array_klasses_do(f); } + +// GC support + +void arrayKlass::oops_do(OopClosure* cl) { + Klass::oops_do(cl); + + cl->do_oop(adr_component_mirror()); +} + // JVM support jint arrayKlass::compute_modifier_flags(TRAPS) const { @@ -192,16 +187,48 @@ return JVMTI_CLASS_STATUS_ARRAY; } +void arrayKlass::remove_unshareable_info() { + Klass::remove_unshareable_info(); + // Clear the java mirror + set_component_mirror(NULL); +} + +void arrayKlass::restore_unshareable_info(TRAPS) { + Klass::restore_unshareable_info(CHECK); + // Klass recreates the component mirror also +} + // Printing +void arrayKlass::print_on(outputStream* st) const { + assert(is_klass(), "must be klass"); + Klass::print_on(st); +} + +void arrayKlass::print_value_on(outputStream* st) const { + assert(is_klass(), "must be klass"); + for(int index = 0; index < dimension(); index++) { + st->print("[]"); + } +} + void arrayKlass::oop_print_on(oop obj, outputStream* st) { assert(obj->is_array(), "must be array"); Klass::oop_print_on(obj, st); st->print_cr(" - length: %d", arrayOop(obj)->length()); } + // Verification +void arrayKlass::verify_on(outputStream* st) { + Klass::verify_on(st); + + if (component_mirror() != NULL) { + guarantee(component_mirror()->klass() != NULL, "should have a class"); + } +} + void arrayKlass::oop_verify_on(oop obj, outputStream* st) { guarantee(obj->is_array(), "must be array"); arrayOop a = arrayOop(obj); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/arrayKlass.hpp --- a/src/share/vm/oops/arrayKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/arrayKlass.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,8 +27,8 @@ #include "memory/universe.hpp" #include "oops/klass.hpp" -#include "oops/klassOop.hpp" -#include "oops/klassVtable.hpp" + +class klassVtable; // arrayKlass is the abstract baseclass for all array classes @@ -36,27 +36,34 @@ friend class VMStructs; private: int _dimension; // This is n'th-dimensional array. - volatile klassOop _higher_dimension; // Refers the (n+1)'th-dimensional array (if present). - volatile klassOop _lower_dimension; // Refers the (n-1)'th-dimensional array (if present). + Klass* volatile _higher_dimension; // Refers the (n+1)'th-dimensional array (if present). + Klass* volatile _lower_dimension; // Refers the (n-1)'th-dimensional array (if present). int _vtable_len; // size of vtable for this klass juint _alloc_size; // allocation profiling support oop _component_mirror; // component type, as a java/lang/Class + protected: + // Constructors + // The constructor with the Symbol argument does the real array + // initialization, the other is a dummy + arrayKlass(Symbol* name); + arrayKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for cds"); } + public: // Testing operation - bool oop_is_array() const { return true; } + bool oop_is_array_slow() const { return true; } // Instance variables int dimension() const { return _dimension; } void set_dimension(int dimension) { _dimension = dimension; } - klassOop higher_dimension() const { return _higher_dimension; } - void set_higher_dimension(klassOop k) { oop_store_without_check((oop*) &_higher_dimension, (oop) k); } - oop* adr_higher_dimension() { return (oop*)&this->_higher_dimension;} + Klass* higher_dimension() const { return _higher_dimension; } + void set_higher_dimension(Klass* k) { _higher_dimension = k; } + Klass** adr_higher_dimension() { return (Klass**)&this->_higher_dimension;} - klassOop lower_dimension() const { return _lower_dimension; } - void set_lower_dimension(klassOop k) { oop_store_without_check((oop*) &_lower_dimension, (oop) k); } - oop* adr_lower_dimension() { return (oop*)&this->_lower_dimension;} + Klass* lower_dimension() const { return _lower_dimension; } + void set_lower_dimension(Klass* k) { _lower_dimension = k; } + Klass** adr_lower_dimension() { return (Klass**)&this->_lower_dimension;} // Allocation profiling support juint alloc_size() const { return _alloc_size; } @@ -69,13 +76,13 @@ BasicType element_type() const { return layout_helper_element_type(layout_helper()); } oop component_mirror() const { return _component_mirror; } - void set_component_mirror(oop m) { oop_store((oop*) &_component_mirror, m); } + void set_component_mirror(oop m) { klass_oop_store(&_component_mirror, m); } oop* adr_component_mirror() { return (oop*)&this->_component_mirror;} // Compiler/Interpreter offset - static ByteSize component_mirror_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(arrayKlass, _component_mirror)); } + static ByteSize component_mirror_offset() { return in_ByteSize(offset_of(arrayKlass, _component_mirror)); } - virtual klassOop java_super() const;//{ return SystemDictionary::Object_klass(); } + virtual Klass* java_super() const;//{ return SystemDictionary::Object_klass(); } // Allocation // Sizes points to the first dimension of the array, subsequent dimensions @@ -84,23 +91,20 @@ objArrayOop allocate_arrayArray(int n, int length, TRAPS); // Lookup operations - methodOop uncached_lookup_method(Symbol* name, Symbol* signature) const; + Method* uncached_lookup_method(Symbol* name, Symbol* signature) const; - // Casting from klassOop - static arrayKlass* cast(klassOop k) { - Klass* kp = k->klass_part(); - assert(kp->null_vtbl() || kp->oop_is_array(), "cast to arrayKlass"); - return (arrayKlass*) kp; + // Casting from Klass* + static arrayKlass* cast(Klass* k) { + assert(k->oop_is_array(), "cast to arrayKlass"); + return (arrayKlass*) k; } - objArrayOop compute_secondary_supers(int num_extra_slots, TRAPS); - bool compute_is_subtype_of(klassOop k); + GrowableArray* compute_secondary_supers(int num_extra_slots); + bool compute_is_subtype_of(Klass* k); // Sizing - static int header_size() { return oopDesc::header_size() + sizeof(arrayKlass)/HeapWordSize; } - int object_size(int header_size) const; - - bool object_is_parsable() const { return _vtable_len > 0; } + static int header_size() { return sizeof(arrayKlass)/HeapWordSize; } + static int static_size(int header_size); // Java vtable klassVtable* vtable() const; // return new klassVtable @@ -112,16 +116,16 @@ public: // Iterators - void array_klasses_do(void f(klassOop k)); - void with_array_klasses_do(void f(klassOop k)); + void array_klasses_do(void f(Klass* k)); + void array_klasses_do(void f(Klass* k, TRAPS), TRAPS); + void with_array_klasses_do(void f(Klass* k)); - // Shared creation method - static arrayKlassHandle base_create_array_klass( - const Klass_vtbl& vtbl, - int header_size, KlassHandle klass, - TRAPS); + // GC support + virtual void oops_do(OopClosure* cl); + // Return a handle. - static void complete_create_array_klass(arrayKlassHandle k, KlassHandle super_klass, TRAPS); + static void complete_create_array_klass(arrayKlass* k, KlassHandle super_klass, TRAPS); + // jvm support jint compute_modifier_flags(TRAPS) const; @@ -129,10 +133,19 @@ // JVMTI support jint jvmti_class_status() const; + // CDS support - remove and restore oops from metadata. Oops are not shared. + virtual void remove_unshareable_info(); + virtual void restore_unshareable_info(TRAPS); + // Printing + void print_on(outputStream* st) const; + void print_value_on(outputStream* st) const; + void oop_print_on(oop obj, outputStream* st); // Verification + void verify_on(outputStream* st); + void oop_verify_on(oop obj, outputStream* st); }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/arrayKlassKlass.cpp --- a/src/share/vm/oops/arrayKlassKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,181 +0,0 @@ -/* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/javaClasses.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "oops/arrayKlassKlass.hpp" -#include "oops/oop.inline.hpp" -#include "runtime/handles.inline.hpp" -#ifndef SERIALGC -#include "gc_implementation/parNew/parOopClosures.inline.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" -#include "memory/cardTableRS.hpp" -#include "oops/oop.pcgc.inline.hpp" -#endif - - -klassOop arrayKlassKlass::create_klass(TRAPS) { - arrayKlassKlass o; - KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); - KlassHandle k = base_create_klass(h_this_klass, header_size(), o.vtbl_value(), CHECK_NULL); - // Make sure size calculation is right - assert(k()->size() == align_object_size(header_size()), "wrong size for object"); - java_lang_Class::create_mirror(k, CHECK_NULL); // Allocate mirror, make links - return k(); -} - -bool arrayKlassKlass::oop_is_parsable(oop obj) const { - assert(obj->is_klass(), "must be klass"); - arrayKlass* ak = arrayKlass::cast(klassOop(obj)); - return (!ak->null_vtbl()) && ak->object_is_parsable(); -} - -void arrayKlassKlass::oop_follow_contents(oop obj) { - assert(obj->is_klass(), "must be klass"); - arrayKlass* ak = arrayKlass::cast(klassOop(obj)); - MarkSweep::mark_and_push(ak->adr_component_mirror()); - MarkSweep::mark_and_push(ak->adr_lower_dimension()); - MarkSweep::mark_and_push(ak->adr_higher_dimension()); - { - HandleMark hm; - ak->vtable()->oop_follow_contents(); - } - klassKlass::oop_follow_contents(obj); -} - -#ifndef SERIALGC -void arrayKlassKlass::oop_follow_contents(ParCompactionManager* cm, - oop obj) { - assert(obj->is_klass(), "must be klass"); - arrayKlass* ak = arrayKlass::cast(klassOop(obj)); - PSParallelCompact::mark_and_push(cm, ak->adr_component_mirror()); - PSParallelCompact::mark_and_push(cm, ak->adr_lower_dimension()); - PSParallelCompact::mark_and_push(cm, ak->adr_higher_dimension()); - { - HandleMark hm; - ak->vtable()->oop_follow_contents(cm); - } - klassKlass::oop_follow_contents(cm, obj); -} -#endif // SERIALGC - - -int arrayKlassKlass::oop_adjust_pointers(oop obj) { - assert(obj->is_klass(), "must be klass"); - arrayKlass* ak = arrayKlass::cast(klassOop(obj)); - MarkSweep::adjust_pointer(ak->adr_component_mirror()); - MarkSweep::adjust_pointer(ak->adr_lower_dimension()); - MarkSweep::adjust_pointer(ak->adr_higher_dimension()); - { - HandleMark hm; - ak->vtable()->oop_adjust_pointers(); - } - return klassKlass::oop_adjust_pointers(obj); -} - - -int arrayKlassKlass::oop_oop_iterate(oop obj, OopClosure* blk) { - assert(obj->is_klass(), "must be klass"); - arrayKlass* ak = arrayKlass::cast(klassOop(obj)); - blk->do_oop(ak->adr_component_mirror()); - blk->do_oop(ak->adr_lower_dimension()); - blk->do_oop(ak->adr_higher_dimension()); - ak->vtable()->oop_oop_iterate(blk); - return klassKlass::oop_oop_iterate(obj, blk); -} - - -int arrayKlassKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { - assert(obj->is_klass(), "must be klass"); - arrayKlass* ak = arrayKlass::cast(klassOop(obj)); - oop* addr = ak->adr_component_mirror(); - if (mr.contains(addr)) blk->do_oop(addr); - addr = ak->adr_lower_dimension(); - if (mr.contains(addr)) blk->do_oop(addr); - addr = ak->adr_higher_dimension(); - if (mr.contains(addr)) blk->do_oop(addr); - ak->vtable()->oop_oop_iterate_m(blk, mr); - return klassKlass::oop_oop_iterate_m(obj, blk, mr); -} - -#ifndef SERIALGC -void arrayKlassKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { - assert(obj->blueprint()->oop_is_arrayKlass(),"must be an array klass"); - arrayKlass* ak = arrayKlass::cast(klassOop(obj)); - oop* p = ak->adr_component_mirror(); - if (PSScavenge::should_scavenge(p)) { - pm->claim_or_forward_depth(p); - } - klassKlass::oop_push_contents(pm, obj); -} - -int arrayKlassKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { - assert(obj->is_klass(), "must be klass"); - arrayKlass* ak = arrayKlass::cast(klassOop(obj)); - PSParallelCompact::adjust_pointer(ak->adr_component_mirror()); - PSParallelCompact::adjust_pointer(ak->adr_lower_dimension()); - PSParallelCompact::adjust_pointer(ak->adr_higher_dimension()); - { - HandleMark hm; - ak->vtable()->oop_update_pointers(cm); - } - return klassKlass::oop_update_pointers(cm, obj); -} -#endif // SERIALGC - -// Printing - -void arrayKlassKlass::oop_print_on(oop obj, outputStream* st) { - assert(obj->is_klass(), "must be klass"); - klassKlass::oop_print_on(obj, st); -} - -void arrayKlassKlass::oop_print_value_on(oop obj, outputStream* st) { - assert(obj->is_klass(), "must be klass"); - arrayKlass* ak = arrayKlass::cast(klassOop(obj)); - for(int index = 0; index < ak->dimension(); index++) { - st->print("[]"); - } -} - - -const char* arrayKlassKlass::internal_name() const { - return "{array class}"; -} - -void arrayKlassKlass::oop_verify_on(oop obj, outputStream* st) { - klassKlass::oop_verify_on(obj, st); - - arrayKlass* ak = arrayKlass::cast(klassOop(obj)); - if (!obj->partially_loaded()) { - if (ak->component_mirror() != NULL) - guarantee(ak->component_mirror()->klass(), "should have a class"); - if (ak->lower_dimension() != NULL) - guarantee(ak->lower_dimension()->klass(), "should have a class"); - if (ak->higher_dimension() != NULL) - guarantee(ak->higher_dimension()->klass(), "should have a class"); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/arrayKlassKlass.hpp --- a/src/share/vm/oops/arrayKlassKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_ARRAYKLASSKLASS_HPP -#define SHARE_VM_OOPS_ARRAYKLASSKLASS_HPP - -#include "oops/arrayKlass.hpp" -#include "oops/klassKlass.hpp" - -// arrayKlassKlass is the abstract baseclass for all array class classes - -class arrayKlassKlass : public klassKlass { - public: - // Testing - bool oop_is_arrayKlass() const { return true; } - - // Allocation - DEFINE_ALLOCATE_PERMANENT(arrayKlassKlass); - static klassOop create_klass(TRAPS); - - // Casting from klassOop - static arrayKlassKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_klass(), "cast to arrayKlassKlass"); - return (arrayKlassKlass*) k->klass_part(); - } - - // Sizing - static int header_size() { return oopDesc::header_size() + sizeof(arrayKlassKlass)/HeapWordSize; } - int object_size() const { return align_object_size(header_size()); } - - // Garbage collection - void oop_follow_contents(oop obj); - int oop_adjust_pointers(oop obj); - bool oop_is_parsable(oop obj) const; - - // Parallel Scavenge and Parallel Old - PARALLEL_GC_DECLS - - // Iterators - int oop_oop_iterate(oop obj, OopClosure* blk); - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr); - - // Printing - void oop_print_value_on(oop obj, outputStream* st); - void oop_print_on(oop obj, outputStream* st); - - // Verification - const char* internal_name() const; - void oop_verify_on(oop obj, outputStream* st); -}; - -#endif // SHARE_VM_OOPS_ARRAYKLASSKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/arrayOop.hpp --- a/src/share/vm/oops/arrayOop.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/arrayOop.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ // The layout of array Oops is: // // markOop -// klassOop // 32 bits if compressed but declared 64 in LP64. +// Klass* // 32 bits if compressed but declared 64 in LP64. // length // shares klass memory or allocated after declared fields. @@ -65,7 +65,7 @@ // declared nonstatic fields in arrayOopDesc if not compressed, otherwise // it occupies the second half of the _klass field in oopDesc. static int length_offset_in_bytes() { - return UseCompressedOops ? klass_gap_offset_in_bytes() : + return UseCompressedKlassPointers ? klass_gap_offset_in_bytes() : sizeof(arrayOopDesc); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/compiledICHolder.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/compiledICHolder.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,55 @@ +/* + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "oops/compiledICHolder.hpp" +#include "oops/klass.hpp" +#include "oops/method.hpp" +#include "oops/oop.inline2.hpp" + +volatile int CompiledICHolder::_live_count; +volatile int CompiledICHolder::_live_not_claimed_count; + + +// Printing + +void CompiledICHolder::print_on(outputStream* st) const { + st->print("%s", internal_name()); + st->print(" - method: "); holder_method()->print_value_on(st); st->cr(); + st->print(" - klass: "); holder_klass()->print_value_on(st); st->cr(); +} + +void CompiledICHolder::print_value_on(outputStream* st) const { + st->print("%s", internal_name()); +} + + +// Verification + +void CompiledICHolder::verify_on(outputStream* st) { + guarantee(holder_method()->is_metadata(), "should be in permspace"); + guarantee(holder_method()->is_method(), "should be method"); + guarantee(holder_klass()->is_metadata(), "should be in permspace"); + guarantee(holder_klass()->is_klass(), "should be klass"); +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/compiledICHolder.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/compiledICHolder.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,101 @@ +/* + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_OOPS_COMPILEDICHOLDEROOP_HPP +#define SHARE_VM_OOPS_COMPILEDICHOLDEROOP_HPP + +#include "oops/oop.hpp" + +// A CompiledICHolder* is a helper object for the inline cache implementation. +// It holds an intermediate value (method+klass pair) used when converting from +// compiled to an interpreted call. +// +// These are always allocated in the C heap and are freed during a +// safepoint by the ICBuffer logic. It's unsafe to free them earlier +// since they might be in use. +// + + +class CompiledICHolder : public CHeapObj { + friend class VMStructs; + private: + static volatile int _live_count; // allocated + static volatile int _live_not_claimed_count; // allocated but not yet in use so not + // reachable by iterating over nmethods + + Method* _holder_method; + Klass* _holder_klass; // to avoid name conflict with oopDesc::_klass + CompiledICHolder* _next; + + public: + // Constructor + CompiledICHolder(Method* method, Klass* klass) + : _holder_method(method), _holder_klass(klass) { +#ifdef ASSERT + Atomic::inc(&_live_count); + Atomic::inc(&_live_not_claimed_count); +#endif + } + + ~CompiledICHolder() { +#ifdef ASSERT + assert(_live_count > 0, "underflow"); + Atomic::dec(&_live_count); +#endif + } + + static int live_count() { return _live_count; } + static int live_not_claimed_count() { return _live_not_claimed_count; } + + // accessors + Method* holder_method() const { return _holder_method; } + Klass* holder_klass() const { return _holder_klass; } + + void set_holder_method(Method* m) { _holder_method = m; } + void set_holder_klass(Klass* k) { _holder_klass = k; } + + // interpreter support (offsets in bytes) + static int holder_method_offset() { return offset_of(CompiledICHolder, _holder_method); } + static int holder_klass_offset() { return offset_of(CompiledICHolder, _holder_klass); } + + CompiledICHolder* next() { return _next; } + void set_next(CompiledICHolder* n) { _next = n; } + + // Verify + void verify_on(outputStream* st); + + // Printing + void print_on(outputStream* st) const; + void print_value_on(outputStream* st) const; + + const char* internal_name() const { return "{compiledICHolder}"; } + + void claim() { +#ifdef ASSERT + Atomic::dec(&_live_not_claimed_count); +#endif + } +}; + +#endif // SHARE_VM_OOPS_COMPILEDICHOLDEROOP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/compiledICHolderKlass.cpp --- a/src/share/vm/oops/compiledICHolderKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,180 +0,0 @@ -/* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/javaClasses.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/permGen.hpp" -#include "memory/universe.inline.hpp" -#include "oops/compiledICHolderKlass.hpp" -#include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" -#include "runtime/handles.inline.hpp" -#ifndef SERIALGC -#include "oops/oop.pcgc.inline.hpp" -#endif - -klassOop compiledICHolderKlass::create_klass(TRAPS) { - compiledICHolderKlass o; - KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); - KlassHandle k = base_create_klass(h_this_klass, header_size(), o.vtbl_value(), CHECK_NULL); - // Make sure size calculation is right - assert(k()->size() == align_object_size(header_size()), "wrong size for object"); - java_lang_Class::create_mirror(k, CHECK_NULL); // Allocate mirror - return k(); -} - - -compiledICHolderOop compiledICHolderKlass::allocate(TRAPS) { - KlassHandle h_k(THREAD, as_klassOop()); - int size = compiledICHolderOopDesc::object_size(); - compiledICHolderOop c = (compiledICHolderOop) - CollectedHeap::permanent_obj_allocate(h_k, size, CHECK_NULL); - c->set_holder_method(NULL); - c->set_holder_klass(NULL); - return c; -} - - -int compiledICHolderKlass::oop_size(oop obj) const { - assert(obj->is_compiledICHolder(), "must be compiledICHolder"); - return compiledICHolderOop(obj)->object_size(); -} - -void compiledICHolderKlass::oop_follow_contents(oop obj) { - assert(obj->is_compiledICHolder(), "must be compiledICHolder"); - compiledICHolderOop c = compiledICHolderOop(obj); - - obj->follow_header(); - MarkSweep::mark_and_push(c->adr_holder_method()); - MarkSweep::mark_and_push(c->adr_holder_klass()); -} - -#ifndef SERIALGC -void compiledICHolderKlass::oop_follow_contents(ParCompactionManager* cm, - oop obj) { - assert(obj->is_compiledICHolder(), "must be compiledICHolder"); - compiledICHolderOop c = compiledICHolderOop(obj); - - obj->follow_header(cm); - PSParallelCompact::mark_and_push(cm, c->adr_holder_method()); - PSParallelCompact::mark_and_push(cm, c->adr_holder_klass()); -} -#endif // SERIALGC - - -int compiledICHolderKlass::oop_oop_iterate(oop obj, OopClosure* blk) { - assert(obj->is_compiledICHolder(), "must be compiledICHolder"); - compiledICHolderOop c = compiledICHolderOop(obj); - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = c->object_size(); - - obj->oop_iterate_header(blk); - blk->do_oop(c->adr_holder_method()); - blk->do_oop(c->adr_holder_klass()); - return size; -} - -int compiledICHolderKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, - MemRegion mr) { - assert(obj->is_compiledICHolder(), "must be compiledICHolder"); - compiledICHolderOop c = compiledICHolderOop(obj); - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = c->object_size(); - - obj->oop_iterate_header(blk, mr); - - oop* adr; - adr = c->adr_holder_method(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = c->adr_holder_klass(); - if (mr.contains(adr)) blk->do_oop(adr); - return size; -} - - -int compiledICHolderKlass::oop_adjust_pointers(oop obj) { - assert(obj->is_compiledICHolder(), "must be compiledICHolder"); - compiledICHolderOop c = compiledICHolderOop(obj); - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = c->object_size(); - - MarkSweep::adjust_pointer(c->adr_holder_method()); - MarkSweep::adjust_pointer(c->adr_holder_klass()); - obj->adjust_header(); - return size; -} - -#ifndef SERIALGC -void compiledICHolderKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { - assert(obj->is_compiledICHolder(), "must be compiledICHolder"); -} - -int compiledICHolderKlass::oop_update_pointers(ParCompactionManager* cm, - oop obj) { - assert(obj->is_compiledICHolder(), "must be compiledICHolder"); - compiledICHolderOop c = compiledICHolderOop(obj); - - PSParallelCompact::adjust_pointer(c->adr_holder_method()); - PSParallelCompact::adjust_pointer(c->adr_holder_klass()); - return c->object_size(); -} -#endif // SERIALGC - -// Printing - -void compiledICHolderKlass::oop_print_on(oop obj, outputStream* st) { - assert(obj->is_compiledICHolder(), "must be compiledICHolder"); - Klass::oop_print_on(obj, st); - compiledICHolderOop c = compiledICHolderOop(obj); - st->print(" - method: "); c->holder_method()->print_value_on(st); st->cr(); - st->print(" - klass: "); c->holder_klass()->print_value_on(st); st->cr(); -} - -void compiledICHolderKlass::oop_print_value_on(oop obj, outputStream* st) { - assert(obj->is_compiledICHolder(), "must be compiledICHolder"); - Klass::oop_print_value_on(obj, st); -} - -const char* compiledICHolderKlass::internal_name() const { - return "{compiledICHolder}"; -} - -// Verification - -void compiledICHolderKlass::oop_verify_on(oop obj, outputStream* st) { - Klass::oop_verify_on(obj, st); - guarantee(obj->is_compiledICHolder(), "must be compiledICHolder"); - compiledICHolderOop c = compiledICHolderOop(obj); - guarantee(c->is_perm(), "should be in permspace"); - guarantee(c->holder_method()->is_perm(), "should be in permspace"); - guarantee(c->holder_method()->is_method(), "should be method"); - guarantee(c->holder_klass()->is_perm(), "should be in permspace"); - guarantee(c->holder_klass()->is_klass(), "should be klass"); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/compiledICHolderKlass.hpp --- a/src/share/vm/oops/compiledICHolderKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,88 +0,0 @@ -/* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_COMPILEDICHOLDERKLASS_HPP -#define SHARE_VM_OOPS_COMPILEDICHOLDERKLASS_HPP - -#include "oops/compiledICHolderOop.hpp" -#include "oops/klass.hpp" -#include "oops/methodOop.hpp" - -class CMSIsAliveClosure; - -// a compiledICHolderKlass is the klass of a compiledICHolderOop - -class compiledICHolderKlass : public Klass { - friend class VMStructs; - private: - juint _alloc_size; // allocation profiling support - public: - // Testing - bool oop_is_compiledICHolder() const { return true; } - - // Allocation - DEFINE_ALLOCATE_PERMANENT(compiledICHolderKlass); - compiledICHolderOop allocate(TRAPS); - static klassOop create_klass(TRAPS); - - // Sizing - int oop_size(oop obj) const; - int klass_oop_size() const { return object_size(); } - - // Casting from klassOop - static compiledICHolderKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_compiledICHolder(), "cast to compiledICHolderKlass"); - return (compiledICHolderKlass*) k->klass_part(); - } - - // Sizing - static int header_size() { return oopDesc::header_size() + sizeof(compiledICHolderKlass)/HeapWordSize; } - int object_size() const { return align_object_size(header_size()); } - - // Garbage collection - void oop_follow_contents(oop obj); - int oop_adjust_pointers(oop obj); - - // Parallel Scavenge and Parallel Old - PARALLEL_GC_DECLS - - // Allocation profiling support - juint alloc_size() const { return _alloc_size; } - void set_alloc_size(juint n) { _alloc_size = n; } - - // Iterators - int oop_oop_iterate(oop obj, OopClosure* blk); - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr); - - // Printing - void oop_print_value_on(oop obj, outputStream* st); - void oop_print_on (oop obj, outputStream* st); - - // Verification - const char* internal_name() const; - void oop_verify_on(oop obj, outputStream* st); - -}; - -#endif // SHARE_VM_OOPS_COMPILEDICHOLDERKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/compiledICHolderOop.cpp --- a/src/share/vm/oops/compiledICHolderOop.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "oops/compiledICHolderOop.hpp" - -// <> diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/compiledICHolderOop.hpp --- a/src/share/vm/oops/compiledICHolderOop.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -/* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_COMPILEDICHOLDEROOP_HPP -#define SHARE_VM_OOPS_COMPILEDICHOLDEROOP_HPP - -#include "oops/oop.hpp" - -// A compiledICHolderOop is a helper object for the inline cache implementation. -// It holds an intermediate value (method+klass pair) used when converting from -// compiled to an interpreted call. -// -// compiledICHolderOops are always allocated permanent (to avoid traversing the -// codeCache during scavenge). - - -class compiledICHolderOopDesc : public oopDesc { - friend class VMStructs; - private: - methodOop _holder_method; - klassOop _holder_klass; // to avoid name conflict with oopDesc::_klass - public: - // accessors - methodOop holder_method() const { return _holder_method; } - klassOop holder_klass() const { return _holder_klass; } - - void set_holder_method(methodOop m) { oop_store_without_check((oop*)&_holder_method, (oop)m); } - void set_holder_klass(klassOop k) { oop_store_without_check((oop*)&_holder_klass, (oop)k); } - - static int header_size() { return sizeof(compiledICHolderOopDesc)/HeapWordSize; } - static int object_size() { return align_object_size(header_size()); } - - // interpreter support (offsets in bytes) - static int holder_method_offset() { return offset_of(compiledICHolderOopDesc, _holder_method); } - static int holder_klass_offset() { return offset_of(compiledICHolderOopDesc, _holder_klass); } - - // GC support - oop* adr_holder_method() const { return (oop*)&_holder_method; } - oop* adr_holder_klass() const { return (oop*)&_holder_klass; } -}; - -#endif // SHARE_VM_OOPS_COMPILEDICHOLDEROOP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/constMethod.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/constMethod.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,303 @@ +/* + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "interpreter/interpreter.hpp" +#include "memory/gcLocker.hpp" +#include "memory/metadataFactory.hpp" +#include "oops/constMethod.hpp" +#include "oops/method.hpp" + +// Static initialization +const u2 ConstMethod::MAX_IDNUM = 0xFFFE; +const u2 ConstMethod::UNSET_IDNUM = 0xFFFF; + +ConstMethod* ConstMethod::allocate(ClassLoaderData* loader_data, + int byte_code_size, + int compressed_line_number_size, + int localvariable_table_length, + int exception_table_length, + int checked_exceptions_length, + TRAPS) { + int size = ConstMethod::size(byte_code_size, + compressed_line_number_size, + localvariable_table_length, + exception_table_length, + checked_exceptions_length); + return new (loader_data, size, true, THREAD) ConstMethod( + byte_code_size, compressed_line_number_size, + localvariable_table_length, exception_table_length, + checked_exceptions_length, size); +} + +ConstMethod::ConstMethod(int byte_code_size, + int compressed_line_number_size, + int localvariable_table_length, + int exception_table_length, + int checked_exceptions_length, + int size) { + + No_Safepoint_Verifier no_safepoint; + set_interpreter_kind(Interpreter::invalid); + init_fingerprint(); + set_constants(NULL); + set_stackmap_data(NULL); + set_code_size(byte_code_size); + set_constMethod_size(size); + set_inlined_tables_length(checked_exceptions_length, + compressed_line_number_size, + localvariable_table_length, + exception_table_length); + assert(this->size() == size, "wrong size for object"); +} + + +// Deallocate metadata fields associated with ConstMethod* +void ConstMethod::deallocate_contents(ClassLoaderData* loader_data) { + set_interpreter_kind(Interpreter::invalid); + if (stackmap_data() != NULL) { + MetadataFactory::free_array(loader_data, stackmap_data()); + } + set_stackmap_data(NULL); +} + +// How big must this constMethodObject be? + +int ConstMethod::size(int code_size, + int compressed_line_number_size, + int local_variable_table_length, + int exception_table_length, + int checked_exceptions_length) { + int extra_bytes = code_size; + if (compressed_line_number_size > 0) { + extra_bytes += compressed_line_number_size; + } + if (checked_exceptions_length > 0) { + extra_bytes += sizeof(u2); + extra_bytes += checked_exceptions_length * sizeof(CheckedExceptionElement); + } + if (local_variable_table_length > 0) { + extra_bytes += sizeof(u2); + extra_bytes += + local_variable_table_length * sizeof(LocalVariableTableElement); + } + if (exception_table_length > 0) { + extra_bytes += sizeof(u2); + extra_bytes += exception_table_length * sizeof(ExceptionTableElement); + } + int extra_words = align_size_up(extra_bytes, BytesPerWord) / BytesPerWord; + return align_object_size(header_size() + extra_words); +} + +Method* ConstMethod::method() const { + return InstanceKlass::cast(_constants->pool_holder())->method_with_idnum( + _method_idnum); + } + +// linenumber table - note that length is unknown until decompression, +// see class CompressedLineNumberReadStream. + +u_char* ConstMethod::compressed_linenumber_table() const { + // Located immediately following the bytecodes. + assert(has_linenumber_table(), "called only if table is present"); + return code_end(); +} + +u2* ConstMethod::checked_exceptions_length_addr() const { + // Located at the end of the constMethod. + assert(has_checked_exceptions(), "called only if table is present"); + return last_u2_element(); +} + +u2* ConstMethod::exception_table_length_addr() const { + assert(has_exception_handler(), "called only if table is present"); + if (has_checked_exceptions()) { + // If checked_exception present, locate immediately before them. + return (u2*) checked_exceptions_start() - 1; + } else { + // Else, the exception table is at the end of the constMethod. + return last_u2_element(); + } +} + +u2* ConstMethod::localvariable_table_length_addr() const { + assert(has_localvariable_table(), "called only if table is present"); + if (has_exception_handler()) { + // If exception_table present, locate immediately before them. + return (u2*) exception_table_start() - 1; + } else { + if (has_checked_exceptions()) { + // If checked_exception present, locate immediately before them. + return (u2*) checked_exceptions_start() - 1; + } else { + // Else, the linenumber table is at the end of the constMethod. + return last_u2_element(); + } + } +} + + +// Update the flags to indicate the presence of these optional fields. +void ConstMethod::set_inlined_tables_length( + int checked_exceptions_len, + int compressed_line_number_size, + int localvariable_table_len, + int exception_table_len) { + // Must be done in the order below, otherwise length_addr accessors + // will not work. Only set bit in header if length is positive. + assert(_flags == 0, "Error"); + if (compressed_line_number_size > 0) { + _flags |= _has_linenumber_table; + } + if (checked_exceptions_len > 0) { + _flags |= _has_checked_exceptions; + *(checked_exceptions_length_addr()) = checked_exceptions_len; + } + if (exception_table_len > 0) { + _flags |= _has_exception_table; + *(exception_table_length_addr()) = exception_table_len; + } + if (localvariable_table_len > 0) { + _flags |= _has_localvariable_table; + *(localvariable_table_length_addr()) = localvariable_table_len; + } +} + + +int ConstMethod::checked_exceptions_length() const { + return has_checked_exceptions() ? *(checked_exceptions_length_addr()) : 0; +} + + +CheckedExceptionElement* ConstMethod::checked_exceptions_start() const { + u2* addr = checked_exceptions_length_addr(); + u2 length = *addr; + assert(length > 0, "should only be called if table is present"); + addr -= length * sizeof(CheckedExceptionElement) / sizeof(u2); + return (CheckedExceptionElement*) addr; +} + + +int ConstMethod::localvariable_table_length() const { + return has_localvariable_table() ? *(localvariable_table_length_addr()) : 0; +} + + +LocalVariableTableElement* ConstMethod::localvariable_table_start() const { + u2* addr = localvariable_table_length_addr(); + u2 length = *addr; + assert(length > 0, "should only be called if table is present"); + addr -= length * sizeof(LocalVariableTableElement) / sizeof(u2); + return (LocalVariableTableElement*) addr; +} + +int ConstMethod::exception_table_length() const { + return has_exception_handler() ? *(exception_table_length_addr()) : 0; +} + +ExceptionTableElement* ConstMethod::exception_table_start() const { + u2* addr = exception_table_length_addr(); + u2 length = *addr; + assert(length > 0, "should only be called if table is present"); + addr -= length * sizeof(ExceptionTableElement) / sizeof(u2); + return (ExceptionTableElement*)addr; +} + + +// Printing + +void ConstMethod::print_on(outputStream* st) const { + ResourceMark rm; + assert(is_constMethod(), "must be constMethod"); + st->print_cr(internal_name()); + st->print(" - method: " INTPTR_FORMAT " ", (address)method()); + method()->print_value_on(st); st->cr(); + if (has_stackmap_table()) { + st->print(" - stackmap data: "); + stackmap_data()->print_value_on(st); + st->cr(); + } +} + +// Short version of printing ConstMethod* - just print the name of the +// method it belongs to. +void ConstMethod::print_value_on(outputStream* st) const { + assert(is_constMethod(), "must be constMethod"); + st->print(" const part of method " ); + method()->print_value_on(st); +} + + +// Verification + +void ConstMethod::verify_on(outputStream* st) { + guarantee(is_constMethod(), "object must be constMethod"); + guarantee(is_metadata(), err_msg("Should be metadata " PTR_FORMAT, this)); + + // Verification can occur during oop construction before the method or + // other fields have been initialized. + guarantee(is_metadata(), err_msg("Should be metadata " PTR_FORMAT, this)); + guarantee(method()->is_method(), "should be method"); + + address m_end = (address)((oop*) this + size()); + address compressed_table_start = code_end(); + guarantee(compressed_table_start <= m_end, "invalid method layout"); + address compressed_table_end = compressed_table_start; + // Verify line number table + if (has_linenumber_table()) { + CompressedLineNumberReadStream stream(compressed_linenumber_table()); + while (stream.read_pair()) { + guarantee(stream.bci() >= 0 && stream.bci() <= code_size(), "invalid bci in line number table"); + } + compressed_table_end += stream.position(); + } + guarantee(compressed_table_end <= m_end, "invalid method layout"); + // Verify checked exceptions, exception table and local variable tables + if (has_checked_exceptions()) { + u2* addr = checked_exceptions_length_addr(); + guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); + } + if (has_exception_handler()) { + u2* addr = exception_table_length_addr(); + guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); + } + if (has_localvariable_table()) { + u2* addr = localvariable_table_length_addr(); + guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); + } + // Check compressed_table_end relative to uncompressed_table_start + u2* uncompressed_table_start; + if (has_localvariable_table()) { + uncompressed_table_start = (u2*) localvariable_table_start(); + } else if (has_exception_handler()) { + uncompressed_table_start = (u2*) exception_table_start(); + } else if (has_checked_exceptions()) { + uncompressed_table_start = (u2*) checked_exceptions_start(); + } else { + uncompressed_table_start = (u2*) m_end; + } + int gap = (intptr_t) uncompressed_table_start - (intptr_t) compressed_table_end; + int max_gap = align_object_size(1)*BytesPerWord; + guarantee(gap >= 0 && gap < max_gap, "invalid method layout"); +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/constMethod.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/constMethod.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,331 @@ +/* + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_OOPS_CONSTMETHODOOP_HPP +#define SHARE_VM_OOPS_CONSTMETHODOOP_HPP + +#include "oops/oop.hpp" + +// An ConstMethod* represents portions of a Java method which +// do not vary. +// +// Memory layout (each line represents a word). Note that most +// applications load thousands of methods, so keeping the size of this +// structure small has a big impact on footprint. +// +// |------------------------------------------------------| +// | header | +// | klass | +// |------------------------------------------------------| +// | fingerprint 1 | +// | fingerprint 2 | +// | constants (oop) | +// | stackmap_data (oop) | +// | constMethod_size | +// | interp_kind | flags | code_size | +// | name index | signature index | +// | method_idnum | generic_signature_index | +// |------------------------------------------------------| +// | | +// | byte codes | +// | | +// |------------------------------------------------------| +// | compressed linenumber table | +// | (see class CompressedLineNumberReadStream) | +// | (note that length is unknown until decompressed) | +// | (access flags bit tells whether table is present) | +// | (indexed from start of ConstMethod*) | +// | (elements not necessarily sorted!) | +// |------------------------------------------------------| +// | localvariable table elements + length (length last) | +// | (length is u2, elements are 6-tuples of u2) | +// | (see class LocalVariableTableElement) | +// | (access flags bit tells whether table is present) | +// | (indexed from end of ConstMethod*) | +// |------------------------------------------------------| +// | exception table + length (length last) | +// | (length is u2, elements are 4-tuples of u2) | +// | (see class ExceptionTableElement) | +// | (access flags bit tells whether table is present) | +// | (indexed from end of ConstMethod*) | +// |------------------------------------------------------| +// | checked exceptions elements + length (length last) | +// | (length is u2, elements are u2) | +// | (see class CheckedExceptionElement) | +// | (access flags bit tells whether table is present) | +// | (indexed from end of ConstMethod*) | +// |------------------------------------------------------| + + +// Utitily class decribing elements in checked exceptions table inlined in Method*. +class CheckedExceptionElement VALUE_OBJ_CLASS_SPEC { + public: + u2 class_cp_index; +}; + + +// Utitily class decribing elements in local variable table inlined in Method*. +class LocalVariableTableElement VALUE_OBJ_CLASS_SPEC { + public: + u2 start_bci; + u2 length; + u2 name_cp_index; + u2 descriptor_cp_index; + u2 signature_cp_index; + u2 slot; +}; + +// Utitily class describing elements in exception table +class ExceptionTableElement VALUE_OBJ_CLASS_SPEC { + public: + u2 start_pc; + u2 end_pc; + u2 handler_pc; + u2 catch_type_index; +}; + + +class ConstMethod : public MetaspaceObj { + friend class VMStructs; +private: + enum { + _has_linenumber_table = 1, + _has_checked_exceptions = 2, + _has_localvariable_table = 4, + _has_exception_table = 8 + }; + + // Bit vector of signature + // Callers interpret 0=not initialized yet and + // -1=too many args to fix, must parse the slow way. + // The real initial value is special to account for nonatomicity of 64 bit + // loads and stores. This value may updated and read without a lock by + // multiple threads, so is volatile. + volatile uint64_t _fingerprint; + + ConstantPool* _constants; // Constant pool + + // Raw stackmap data for the method + Array* _stackmap_data; + + int _constMethod_size; + jbyte _interpreter_kind; + jbyte _flags; + + // Size of Java bytecodes allocated immediately after Method*. + u2 _code_size; + u2 _name_index; // Method name (index in constant pool) + u2 _signature_index; // Method signature (index in constant pool) + u2 _method_idnum; // unique identification number for the method within the class + // initially corresponds to the index into the methods array. + // but this may change with redefinition + u2 _generic_signature_index; // Generic signature (index in constant pool, 0 if absent) + + + // Constructor + ConstMethod(int byte_code_size, + int compressed_line_number_size, + int localvariable_table_length, + int exception_table_length, + int checked_exceptions_length, + int size); +public: + static ConstMethod* allocate(ClassLoaderData* loader_data, + int byte_code_size, + int compressed_line_number_size, + int localvariable_table_length, + int exception_table_length, + int checked_exceptions_length, + TRAPS); + + bool is_constMethod() const { return true; } + + // Inlined tables + void set_inlined_tables_length(int checked_exceptions_len, + int compressed_line_number_size, + int localvariable_table_len, + int exception_table_len); + + bool has_linenumber_table() const + { return (_flags & _has_linenumber_table) != 0; } + + bool has_checked_exceptions() const + { return (_flags & _has_checked_exceptions) != 0; } + + bool has_localvariable_table() const + { return (_flags & _has_localvariable_table) != 0; } + + bool has_exception_handler() const + { return (_flags & _has_exception_table) != 0; } + + void set_interpreter_kind(int kind) { _interpreter_kind = kind; } + int interpreter_kind(void) const { return _interpreter_kind; } + + // constant pool + ConstantPool* constants() const { return _constants; } + void set_constants(ConstantPool* c) { _constants = c; } + + Method* method() const; + + // stackmap table data + Array* stackmap_data() const { return _stackmap_data; } + void set_stackmap_data(Array* sd) { _stackmap_data = sd; } + bool has_stackmap_table() const { return _stackmap_data != NULL; } + + void init_fingerprint() { + const uint64_t initval = CONST64(0x8000000000000000); + _fingerprint = initval; + } + + uint64_t fingerprint() const { + // Since reads aren't atomic for 64 bits, if any of the high or low order + // word is the initial value, return 0. See init_fingerprint for initval. + uint high_fp = (uint)(_fingerprint >> 32); + if ((int) _fingerprint == 0 || high_fp == 0x80000000) { + return 0L; + } else { + return _fingerprint; + } + } + + uint64_t set_fingerprint(uint64_t new_fingerprint) { +#ifdef ASSERT + // Assert only valid if complete/valid 64 bit _fingerprint value is read. + uint64_t oldfp = fingerprint(); +#endif // ASSERT + _fingerprint = new_fingerprint; + assert(oldfp == 0L || new_fingerprint == oldfp, + "fingerprint cannot change"); + assert(((new_fingerprint >> 32) != 0x80000000) && (int)new_fingerprint !=0, + "fingerprint should call init to set initial value"); + return new_fingerprint; + } + + // name + int name_index() const { return _name_index; } + void set_name_index(int index) { _name_index = index; } + + // signature + int signature_index() const { return _signature_index; } + void set_signature_index(int index) { _signature_index = index; } + + // generics support + int generic_signature_index() const { return _generic_signature_index; } + void set_generic_signature_index(int index) { _generic_signature_index = index; } + + // Sizing + static int header_size() { + return sizeof(ConstMethod)/HeapWordSize; + } + + // Size needed + static int size(int code_size, int compressed_line_number_size, + int local_variable_table_length, + int exception_table_length, + int checked_exceptions_length); + + int size() const { return _constMethod_size;} + void set_constMethod_size(int size) { _constMethod_size = size; } + + // code size + int code_size() const { return _code_size; } + void set_code_size(int size) { + assert(max_method_code_size < (1 << 16), + "u2 is too small to hold method code size in general"); + assert(0 <= size && size <= max_method_code_size, "invalid code size"); + _code_size = size; + } + + // linenumber table - note that length is unknown until decompression, + // see class CompressedLineNumberReadStream. + u_char* compressed_linenumber_table() const; // not preserved by gc + u2* checked_exceptions_length_addr() const; + u2* localvariable_table_length_addr() const; + u2* exception_table_length_addr() const; + + // checked exceptions + int checked_exceptions_length() const; + CheckedExceptionElement* checked_exceptions_start() const; + + // localvariable table + int localvariable_table_length() const; + LocalVariableTableElement* localvariable_table_start() const; + + // exception table + int exception_table_length() const; + ExceptionTableElement* exception_table_start() const; + + // byte codes + void set_code(address code) { + if (code_size() > 0) { + memcpy(code_base(), code, code_size()); + } + } + address code_base() const { return (address) (this+1); } + address code_end() const { return code_base() + code_size(); } + bool contains(address bcp) const { return code_base() <= bcp + && bcp < code_end(); } + // Offset to bytecodes + static ByteSize codes_offset() + { return in_ByteSize(sizeof(ConstMethod)); } + + static ByteSize constants_offset() + { return byte_offset_of(ConstMethod, _constants); } + + // Unique id for the method + static const u2 MAX_IDNUM; + static const u2 UNSET_IDNUM; + u2 method_idnum() const { return _method_idnum; } + void set_method_idnum(u2 idnum) { _method_idnum = idnum; } + + // Deallocation for RedefineClasses + void deallocate_contents(ClassLoaderData* loader_data); + bool is_klass() const { return false; } + DEBUG_ONLY(bool on_stack() { return false; }) + +private: + // Since the size of the compressed line number table is unknown, the + // offsets of the other variable sized sections are computed backwards + // from the end of the ConstMethod*. + + // First byte after ConstMethod* + address constMethod_end() const + { return (address)((oop*)this + _constMethod_size); } + + // Last short in ConstMethod* + u2* last_u2_element() const + { return (u2*)constMethod_end() - 1; } + + public: + // Printing + void print_on (outputStream* st) const; + void print_value_on(outputStream* st) const; + + const char* internal_name() const { return "{constMethod}"; } + + // Verify + void verify_on(outputStream* st); +}; + +#endif // SHARE_VM_OOPS_CONSTMETHODOOP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/constMethodKlass.cpp --- a/src/share/vm/oops/constMethodKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,284 +0,0 @@ -/* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "interpreter/interpreter.hpp" -#include "memory/gcLocker.hpp" -#include "memory/resourceArea.hpp" -#include "oops/constMethodKlass.hpp" -#include "oops/constMethodOop.hpp" -#include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" -#include "runtime/handles.inline.hpp" - - -klassOop constMethodKlass::create_klass(TRAPS) { - constMethodKlass o; - KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); - KlassHandle k = base_create_klass(h_this_klass, header_size(), - o.vtbl_value(), CHECK_NULL); - // Make sure size calculation is right - assert(k()->size() == align_object_size(header_size()), - "wrong size for object"); - //java_lang_Class::create_mirror(k, CHECK_NULL); // Allocate mirror - return k(); -} - - -int constMethodKlass::oop_size(oop obj) const { - assert(obj->is_constMethod(), "must be constMethod oop"); - return constMethodOop(obj)->object_size(); -} - -bool constMethodKlass::oop_is_parsable(oop obj) const { - assert(obj->is_constMethod(), "must be constMethod oop"); - return constMethodOop(obj)->object_is_parsable(); -} - -bool constMethodKlass::oop_is_conc_safe(oop obj) const { - assert(obj->is_constMethod(), "must be constMethod oop"); - return constMethodOop(obj)->is_conc_safe(); -} - -constMethodOop constMethodKlass::allocate(int byte_code_size, - int compressed_line_number_size, - int localvariable_table_length, - int exception_table_length, - int checked_exceptions_length, - bool is_conc_safe, - TRAPS) { - - int size = constMethodOopDesc::object_size(byte_code_size, - compressed_line_number_size, - localvariable_table_length, - exception_table_length, - checked_exceptions_length); - KlassHandle h_k(THREAD, as_klassOop()); - constMethodOop cm = (constMethodOop) - CollectedHeap::permanent_obj_allocate(h_k, size, CHECK_NULL); - assert(!cm->is_parsable(), "Not yet safely parsable"); - No_Safepoint_Verifier no_safepoint; - cm->set_interpreter_kind(Interpreter::invalid); - cm->init_fingerprint(); - cm->set_constants(NULL); - cm->set_stackmap_data(NULL); - cm->set_code_size(byte_code_size); - cm->set_constMethod_size(size); - cm->set_inlined_tables_length(checked_exceptions_length, - compressed_line_number_size, - localvariable_table_length, - exception_table_length); - assert(cm->size() == size, "wrong size for object"); - cm->set_is_conc_safe(is_conc_safe); - cm->set_partially_loaded(); - assert(cm->is_parsable(), "Is safely parsable by gc"); - return cm; -} - -void constMethodKlass::oop_follow_contents(oop obj) { - assert (obj->is_constMethod(), "object must be constMethod"); - constMethodOop cm = constMethodOop(obj); - MarkSweep::mark_and_push(cm->adr_constants()); - MarkSweep::mark_and_push(cm->adr_stackmap_data()); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constMethodKlassObj never moves. -} - -#ifndef SERIALGC -void constMethodKlass::oop_follow_contents(ParCompactionManager* cm, - oop obj) { - assert (obj->is_constMethod(), "object must be constMethod"); - constMethodOop cm_oop = constMethodOop(obj); - PSParallelCompact::mark_and_push(cm, cm_oop->adr_constants()); - PSParallelCompact::mark_and_push(cm, cm_oop->adr_stackmap_data()); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constMethodKlassObj never moves. -} -#endif // SERIALGC - -int constMethodKlass::oop_oop_iterate(oop obj, OopClosure* blk) { - assert (obj->is_constMethod(), "object must be constMethod"); - constMethodOop cm = constMethodOop(obj); - blk->do_oop(cm->adr_constants()); - blk->do_oop(cm->adr_stackmap_data()); - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = cm->object_size(); - return size; -} - - -int constMethodKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { - assert (obj->is_constMethod(), "object must be constMethod"); - constMethodOop cm = constMethodOop(obj); - oop* adr; - adr = cm->adr_constants(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = cm->adr_stackmap_data(); - if (mr.contains(adr)) blk->do_oop(adr); - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = cm->object_size(); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constMethodKlassObj never moves. - return size; -} - - -int constMethodKlass::oop_adjust_pointers(oop obj) { - assert(obj->is_constMethod(), "should be constMethod"); - constMethodOop cm = constMethodOop(obj); - MarkSweep::adjust_pointer(cm->adr_constants()); - MarkSweep::adjust_pointer(cm->adr_stackmap_data()); - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = cm->object_size(); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constMethodKlassObj never moves. - return size; -} - -#ifndef SERIALGC -void constMethodKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { - assert(obj->is_constMethod(), "should be constMethod"); -} - -int constMethodKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { - assert(obj->is_constMethod(), "should be constMethod"); - constMethodOop cm_oop = constMethodOop(obj); - oop* const beg_oop = cm_oop->oop_block_beg(); - oop* const end_oop = cm_oop->oop_block_end(); - for (oop* cur_oop = beg_oop; cur_oop < end_oop; ++cur_oop) { - PSParallelCompact::adjust_pointer(cur_oop); - } - return cm_oop->object_size(); -} -#endif // SERIALGC - -// Printing - -void constMethodKlass::oop_print_on(oop obj, outputStream* st) { - ResourceMark rm; - assert(obj->is_constMethod(), "must be constMethod"); - Klass::oop_print_on(obj, st); - constMethodOop m = constMethodOop(obj); - st->print(" - constants: " INTPTR_FORMAT " ", (address)m->constants()); - m->constants()->print_value_on(st); st->cr(); - if (m->has_stackmap_table()) { - st->print(" - stackmap data: "); - m->stackmap_data()->print_value_on(st); - st->cr(); - } -} - -// Short version of printing constMethodOop - just print the name of the -// method it belongs to. -void constMethodKlass::oop_print_value_on(oop obj, outputStream* st) { - assert(obj->is_constMethod(), "must be constMethod"); - constMethodOop m = constMethodOop(obj); - st->print(" const part of method " ); - m->method()->print_value_on(st); -} - -const char* constMethodKlass::internal_name() const { - return "{constMethod}"; -} - - -// Verification - -void constMethodKlass::oop_verify_on(oop obj, outputStream* st) { - Klass::oop_verify_on(obj, st); - guarantee(obj->is_constMethod(), "object must be constMethod"); - constMethodOop m = constMethodOop(obj); - guarantee(m->is_perm(), "should be in permspace"); - - // Verification can occur during oop construction before the method or - // other fields have been initialized. - if (!obj->partially_loaded()) { - guarantee(m->constants()->is_perm(), "should be in permspace"); - guarantee(m->constants()->is_constantPool(), "should be constant pool"); - typeArrayOop stackmap_data = m->stackmap_data(); - guarantee(stackmap_data == NULL || - stackmap_data->is_perm(), "should be in permspace"); - - address m_end = (address)((oop*) m + m->size()); - address compressed_table_start = m->code_end(); - guarantee(compressed_table_start <= m_end, "invalid method layout"); - address compressed_table_end = compressed_table_start; - // Verify line number table - if (m->has_linenumber_table()) { - CompressedLineNumberReadStream stream(m->compressed_linenumber_table()); - while (stream.read_pair()) { - guarantee(stream.bci() >= 0 && stream.bci() <= m->code_size(), "invalid bci in line number table"); - } - compressed_table_end += stream.position(); - } - guarantee(compressed_table_end <= m_end, "invalid method layout"); - // Verify checked exceptions, exception table and local variable tables - if (m->has_checked_exceptions()) { - u2* addr = m->checked_exceptions_length_addr(); - guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); - } - if (m->has_exception_handler()) { - u2* addr = m->exception_table_length_addr(); - guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); - } - if (m->has_localvariable_table()) { - u2* addr = m->localvariable_table_length_addr(); - guarantee(*addr > 0 && (address) addr >= compressed_table_end && (address) addr < m_end, "invalid method layout"); - } - // Check compressed_table_end relative to uncompressed_table_start - u2* uncompressed_table_start; - if (m->has_localvariable_table()) { - uncompressed_table_start = (u2*) m->localvariable_table_start(); - } else if (m->has_exception_handler()) { - uncompressed_table_start = (u2*) m->exception_table_start(); - } else if (m->has_checked_exceptions()) { - uncompressed_table_start = (u2*) m->checked_exceptions_start(); - } else { - uncompressed_table_start = (u2*) m_end; - } - int gap = (intptr_t) uncompressed_table_start - (intptr_t) compressed_table_end; - int max_gap = align_object_size(1)*BytesPerWord; - guarantee(gap >= 0 && gap < max_gap, "invalid method layout"); - } -} - -bool constMethodKlass::oop_partially_loaded(oop obj) const { - assert(obj->is_constMethod(), "object must be klass"); - constMethodOop m = constMethodOop(obj); - // check whether stackmap_data points to self (flag for partially loaded) - return m->stackmap_data() == (typeArrayOop)obj; -} - - -// The exception_table is the last field set when loading an object. -void constMethodKlass::oop_set_partially_loaded(oop obj) { - assert(obj->is_constMethod(), "object must be klass"); - constMethodOop m = constMethodOop(obj); - // Temporarily set stackmap_data to point to self - m->set_stackmap_data((typeArrayOop)obj); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/constMethodKlass.hpp --- a/src/share/vm/oops/constMethodKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_CONSTMETHODKLASS_HPP -#define SHARE_VM_OOPS_CONSTMETHODKLASS_HPP - -#include "oops/klass.hpp" -#include "oops/oop.hpp" -#include "runtime/orderAccess.hpp" - -// A constMethodKlass is the klass of a constMethodOop - -class constMethodKlass : public Klass { - friend class VMStructs; -private: - juint _alloc_size; // allocation profiling support -public: - // Testing - bool oop_is_constMethod() const { return true; } - virtual bool oop_is_parsable(oop obj) const; - virtual bool oop_is_conc_safe(oop obj) const; - - - // Allocation - DEFINE_ALLOCATE_PERMANENT(constMethodKlass); - constMethodOop allocate(int byte_code_size, int compressed_line_number_size, - int localvariable_table_length, - int exception_table_length, - int checked_exceptions_length, - bool is_conc_safe, - TRAPS); - static klassOop create_klass(TRAPS); - - // Sizing - int oop_size(oop obj) const; - int klass_oop_size() const { return object_size(); } - - // Casting from klassOop - static constMethodKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_constMethod(), "cast to constMethodKlass"); - return (constMethodKlass*) k->klass_part(); - } - - // Sizing - static int header_size() { - return oopDesc::header_size() + sizeof(constMethodKlass)/HeapWordSize; - } - int object_size() const { - return align_object_size(header_size()); - } - - // Garbage collection - void oop_follow_contents(oop obj); - int oop_adjust_pointers(oop obj); - - // Parallel Scavenge and Parallel Old - PARALLEL_GC_DECLS - - // Allocation profiling support - juint alloc_size() const { return _alloc_size; } - void set_alloc_size(juint n) { _alloc_size = n; } - - // Iterators - int oop_oop_iterate(oop obj, OopClosure* blk); - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr); - - // Printing - void oop_print_value_on(oop obj, outputStream* st); - void oop_print_on (oop obj, outputStream* st); - - // Verify operations - const char* internal_name() const; - void oop_verify_on(oop obj, outputStream* st); - bool oop_partially_loaded(oop obj) const; - void oop_set_partially_loaded(oop obj); -}; - -#endif // SHARE_VM_OOPS_CONSTMETHODKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/constMethodOop.cpp --- a/src/share/vm/oops/constMethodOop.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +0,0 @@ -/* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "oops/constMethodOop.hpp" -#include "oops/methodOop.hpp" - -// Static initialization -const u2 constMethodOopDesc::MAX_IDNUM = 0xFFFE; -const u2 constMethodOopDesc::UNSET_IDNUM = 0xFFFF; - -// How big must this constMethodObject be? - -int constMethodOopDesc::object_size(int code_size, - int compressed_line_number_size, - int local_variable_table_length, - int exception_table_length, - int checked_exceptions_length) { - int extra_bytes = code_size; - if (compressed_line_number_size > 0) { - extra_bytes += compressed_line_number_size; - } - if (checked_exceptions_length > 0) { - extra_bytes += sizeof(u2); - extra_bytes += checked_exceptions_length * sizeof(CheckedExceptionElement); - } - if (local_variable_table_length > 0) { - extra_bytes += sizeof(u2); - extra_bytes += - local_variable_table_length * sizeof(LocalVariableTableElement); - } - if (exception_table_length > 0) { - extra_bytes += sizeof(u2); - extra_bytes += exception_table_length * sizeof(ExceptionTableElement); - } - int extra_words = align_size_up(extra_bytes, BytesPerWord) / BytesPerWord; - return align_object_size(header_size() + extra_words); -} - -methodOop constMethodOopDesc::method() const { - return instanceKlass::cast(_constants->pool_holder())->method_with_idnum( - _method_idnum); - } - -// linenumber table - note that length is unknown until decompression, -// see class CompressedLineNumberReadStream. - -u_char* constMethodOopDesc::compressed_linenumber_table() const { - // Located immediately following the bytecodes. - assert(has_linenumber_table(), "called only if table is present"); - return code_end(); -} - -u2* constMethodOopDesc::checked_exceptions_length_addr() const { - // Located at the end of the constMethod. - assert(has_checked_exceptions(), "called only if table is present"); - return last_u2_element(); -} - -u2* constMethodOopDesc::exception_table_length_addr() const { - assert(has_exception_handler(), "called only if table is present"); - if (has_checked_exceptions()) { - // If checked_exception present, locate immediately before them. - return (u2*) checked_exceptions_start() - 1; - } else { - // Else, the exception table is at the end of the constMethod. - return last_u2_element(); - } -} - -u2* constMethodOopDesc::localvariable_table_length_addr() const { - assert(has_localvariable_table(), "called only if table is present"); - if (has_exception_handler()) { - // If exception_table present, locate immediately before them. - return (u2*) exception_table_start() - 1; - } else { - if (has_checked_exceptions()) { - // If checked_exception present, locate immediately before them. - return (u2*) checked_exceptions_start() - 1; - } else { - // Else, the linenumber table is at the end of the constMethod. - return last_u2_element(); - } - } -} - - -// Update the flags to indicate the presence of these optional fields. -void constMethodOopDesc::set_inlined_tables_length( - int checked_exceptions_len, - int compressed_line_number_size, - int localvariable_table_len, - int exception_table_len) { - // Must be done in the order below, otherwise length_addr accessors - // will not work. Only set bit in header if length is positive. - assert(_flags == 0, "Error"); - if (compressed_line_number_size > 0) { - _flags |= _has_linenumber_table; - } - if (checked_exceptions_len > 0) { - _flags |= _has_checked_exceptions; - *(checked_exceptions_length_addr()) = checked_exceptions_len; - } - if (exception_table_len > 0) { - _flags |= _has_exception_table; - *(exception_table_length_addr()) = exception_table_len; - } - if (localvariable_table_len > 0) { - _flags |= _has_localvariable_table; - *(localvariable_table_length_addr()) = localvariable_table_len; - } -} - - -int constMethodOopDesc::checked_exceptions_length() const { - return has_checked_exceptions() ? *(checked_exceptions_length_addr()) : 0; -} - - -CheckedExceptionElement* constMethodOopDesc::checked_exceptions_start() const { - u2* addr = checked_exceptions_length_addr(); - u2 length = *addr; - assert(length > 0, "should only be called if table is present"); - addr -= length * sizeof(CheckedExceptionElement) / sizeof(u2); - return (CheckedExceptionElement*) addr; -} - - -int constMethodOopDesc::localvariable_table_length() const { - return has_localvariable_table() ? *(localvariable_table_length_addr()) : 0; -} - - -LocalVariableTableElement* constMethodOopDesc::localvariable_table_start() const { - u2* addr = localvariable_table_length_addr(); - u2 length = *addr; - assert(length > 0, "should only be called if table is present"); - addr -= length * sizeof(LocalVariableTableElement) / sizeof(u2); - return (LocalVariableTableElement*) addr; -} - -int constMethodOopDesc::exception_table_length() const { - return has_exception_handler() ? *(exception_table_length_addr()) : 0; -} - -ExceptionTableElement* constMethodOopDesc::exception_table_start() const { - u2* addr = exception_table_length_addr(); - u2 length = *addr; - assert(length > 0, "should only be called if table is present"); - addr -= length * sizeof(ExceptionTableElement) / sizeof(u2); - return (ExceptionTableElement*)addr; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/constMethodOop.hpp --- a/src/share/vm/oops/constMethodOop.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,327 +0,0 @@ -/* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_CONSTMETHODOOP_HPP -#define SHARE_VM_OOPS_CONSTMETHODOOP_HPP - -#include "oops/oop.hpp" -#include "oops/typeArrayOop.hpp" - -// An constMethodOop represents portions of a Java method which -// do not vary. -// -// Memory layout (each line represents a word). Note that most -// applications load thousands of methods, so keeping the size of this -// structure small has a big impact on footprint. -// -// |------------------------------------------------------| -// | header | -// | klass | -// |------------------------------------------------------| -// | fingerprint 1 | -// | fingerprint 2 | -// | constants (oop) | -// | stackmap_data (oop) | -// | constMethod_size | -// | interp_kind | flags | code_size | -// | name index | signature index | -// | method_idnum | generic_signature_index | -// |------------------------------------------------------| -// | | -// | byte codes | -// | | -// |------------------------------------------------------| -// | compressed linenumber table | -// | (see class CompressedLineNumberReadStream) | -// | (note that length is unknown until decompressed) | -// | (access flags bit tells whether table is present) | -// | (indexed from start of constMethodOop) | -// | (elements not necessarily sorted!) | -// |------------------------------------------------------| -// | localvariable table elements + length (length last) | -// | (length is u2, elements are 6-tuples of u2) | -// | (see class LocalVariableTableElement) | -// | (access flags bit tells whether table is present) | -// | (indexed from end of constMethodOop) | -// |------------------------------------------------------| -// | exception table + length (length last) | -// | (length is u2, elements are 4-tuples of u2) | -// | (see class ExceptionTableElement) | -// | (access flags bit tells whether table is present) | -// | (indexed from end of constMethodOop) | -// |------------------------------------------------------| -// | checked exceptions elements + length (length last) | -// | (length is u2, elements are u2) | -// | (see class CheckedExceptionElement) | -// | (access flags bit tells whether table is present) | -// | (indexed from end of constMethodOop) | -// |------------------------------------------------------| - - -// Utitily class decribing elements in checked exceptions table inlined in methodOop. -class CheckedExceptionElement VALUE_OBJ_CLASS_SPEC { - public: - u2 class_cp_index; -}; - - -// Utitily class decribing elements in local variable table inlined in methodOop. -class LocalVariableTableElement VALUE_OBJ_CLASS_SPEC { - public: - u2 start_bci; - u2 length; - u2 name_cp_index; - u2 descriptor_cp_index; - u2 signature_cp_index; - u2 slot; -}; - - -// Utitily class describing elements in exception table -class ExceptionTableElement VALUE_OBJ_CLASS_SPEC { - public: - u2 start_pc; - u2 end_pc; - u2 handler_pc; - u2 catch_type_index; -}; - -class constMethodOopDesc : public oopDesc { - friend class constMethodKlass; - friend class VMStructs; -private: - enum { - _has_linenumber_table = 1, - _has_checked_exceptions = 2, - _has_localvariable_table = 4, - _has_exception_table = 8 - }; - - // Bit vector of signature - // Callers interpret 0=not initialized yet and - // -1=too many args to fix, must parse the slow way. - // The real initial value is special to account for nonatomicity of 64 bit - // loads and stores. This value may updated and read without a lock by - // multiple threads, so is volatile. - volatile uint64_t _fingerprint; - volatile bool _is_conc_safe; // if true, safe for concurrent GC processing - -public: - oop* oop_block_beg() const { return adr_constants(); } - oop* oop_block_end() const { return adr_stackmap_data() + 1; } - -private: - // - // The oop block. See comment in klass.hpp before making changes. - // - - constantPoolOop _constants; // Constant pool - - // Raw stackmap data for the method - typeArrayOop _stackmap_data; - - // - // End of the oop block. - // - - int _constMethod_size; - jbyte _interpreter_kind; - jbyte _flags; - - // Size of Java bytecodes allocated immediately after methodOop. - u2 _code_size; - u2 _name_index; // Method name (index in constant pool) - u2 _signature_index; // Method signature (index in constant pool) - u2 _method_idnum; // unique identification number for the method within the class - // initially corresponds to the index into the methods array. - // but this may change with redefinition - u2 _generic_signature_index; // Generic signature (index in constant pool, 0 if absent) - -public: - // Inlined tables - void set_inlined_tables_length(int checked_exceptions_len, - int compressed_line_number_size, - int localvariable_table_len, - int exception_table_len); - - bool has_linenumber_table() const - { return (_flags & _has_linenumber_table) != 0; } - - bool has_checked_exceptions() const - { return (_flags & _has_checked_exceptions) != 0; } - - bool has_localvariable_table() const - { return (_flags & _has_localvariable_table) != 0; } - - bool has_exception_handler() const - { return (_flags & _has_exception_table) != 0; } - - void set_interpreter_kind(int kind) { _interpreter_kind = kind; } - int interpreter_kind(void) const { return _interpreter_kind; } - - // constant pool - constantPoolOop constants() const { return _constants; } - void set_constants(constantPoolOop c) { - oop_store_without_check((oop*)&_constants, (oop)c); - } - - methodOop method() const; - - // stackmap table data - typeArrayOop stackmap_data() const { return _stackmap_data; } - void set_stackmap_data(typeArrayOop sd) { - oop_store_without_check((oop*)&_stackmap_data, (oop)sd); - } - bool has_stackmap_table() const { return _stackmap_data != NULL; } - - void init_fingerprint() { - const uint64_t initval = CONST64(0x8000000000000000); - _fingerprint = initval; - } - - uint64_t fingerprint() const { - // Since reads aren't atomic for 64 bits, if any of the high or low order - // word is the initial value, return 0. See init_fingerprint for initval. - uint high_fp = (uint)(_fingerprint >> 32); - if ((int) _fingerprint == 0 || high_fp == 0x80000000) { - return 0L; - } else { - return _fingerprint; - } - } - - uint64_t set_fingerprint(uint64_t new_fingerprint) { -#ifdef ASSERT - // Assert only valid if complete/valid 64 bit _fingerprint value is read. - uint64_t oldfp = fingerprint(); -#endif // ASSERT - _fingerprint = new_fingerprint; - assert(oldfp == 0L || new_fingerprint == oldfp, - "fingerprint cannot change"); - assert(((new_fingerprint >> 32) != 0x80000000) && (int)new_fingerprint !=0, - "fingerprint should call init to set initial value"); - return new_fingerprint; - } - - // name - int name_index() const { return _name_index; } - void set_name_index(int index) { _name_index = index; } - - // signature - int signature_index() const { return _signature_index; } - void set_signature_index(int index) { _signature_index = index; } - - // generics support - int generic_signature_index() const { return _generic_signature_index; } - void set_generic_signature_index(int index) { _generic_signature_index = index; } - - // Sizing - static int header_size() { - return sizeof(constMethodOopDesc)/HeapWordSize; - } - - // Object size needed - static int object_size(int code_size, int compressed_line_number_size, - int local_variable_table_length, - int exception_table_length, - int checked_exceptions_length); - - int object_size() const { return _constMethod_size; } - void set_constMethod_size(int size) { _constMethod_size = size; } - // Is object parsable by gc - bool object_is_parsable() { return object_size() > 0; } - - // code size - int code_size() const { return _code_size; } - void set_code_size(int size) { - assert(max_method_code_size < (1 << 16), - "u2 is too small to hold method code size in general"); - assert(0 <= size && size <= max_method_code_size, "invalid code size"); - _code_size = size; - } - - // linenumber table - note that length is unknown until decompression, - // see class CompressedLineNumberReadStream. - u_char* compressed_linenumber_table() const; // not preserved by gc - u2* checked_exceptions_length_addr() const; - u2* localvariable_table_length_addr() const; - u2* exception_table_length_addr() const; - - // checked exceptions - int checked_exceptions_length() const; - CheckedExceptionElement* checked_exceptions_start() const; - - // localvariable table - int localvariable_table_length() const; - LocalVariableTableElement* localvariable_table_start() const; - - // exception table - int exception_table_length() const; - ExceptionTableElement* exception_table_start() const; - - // byte codes - void set_code(address code) { - if (code_size() > 0) { - memcpy(code_base(), code, code_size()); - } - } - address code_base() const { return (address) (this+1); } - address code_end() const { return code_base() + code_size(); } - bool contains(address bcp) const { return code_base() <= bcp - && bcp < code_end(); } - // Offset to bytecodes - static ByteSize codes_offset() - { return in_ByteSize(sizeof(constMethodOopDesc)); } - - // interpreter support - static ByteSize constants_offset() - { return byte_offset_of(constMethodOopDesc, _constants); } - - // Garbage collection support - oop* adr_constants() const { return (oop*)&_constants; } - oop* adr_stackmap_data() const { return (oop*)&_stackmap_data; } - bool is_conc_safe() { return _is_conc_safe; } - void set_is_conc_safe(bool v) { _is_conc_safe = v; } - - // Unique id for the method - static const u2 MAX_IDNUM; - static const u2 UNSET_IDNUM; - u2 method_idnum() const { return _method_idnum; } - void set_method_idnum(u2 idnum) { _method_idnum = idnum; } - -private: - // Since the size of the compressed line number table is unknown, the - // offsets of the other variable sized sections are computed backwards - // from the end of the constMethodOop. - - // First byte after constMethodOop - address constMethod_end() const - { return (address)((oop*)this + _constMethod_size); } - - // Last short in constMethodOop - u2* last_u2_element() const - { return (u2*)constMethod_end() - 1; } -}; - -#endif // SHARE_VM_OOPS_CONSTMETHODOOP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/constantPool.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/constantPool.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,2009 @@ +/* + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "classfile/classLoaderData.hpp" +#include "classfile/javaClasses.hpp" +#include "classfile/symbolTable.hpp" +#include "classfile/systemDictionary.hpp" +#include "classfile/vmSymbols.hpp" +#include "interpreter/linkResolver.hpp" +#include "memory/metadataFactory.hpp" +#include "memory/oopFactory.hpp" +#include "oops/constantPool.hpp" +#include "oops/instanceKlass.hpp" +#include "oops/objArrayKlass.hpp" +#include "prims/jvmtiRedefineClasses.hpp" +#include "runtime/fieldType.hpp" +#include "runtime/init.hpp" +#include "runtime/javaCalls.hpp" +#include "runtime/signature.hpp" +#include "runtime/vframe.hpp" + +ConstantPool* ConstantPool::allocate(ClassLoaderData* loader_data, int length, TRAPS) { + // Tags are RW but comment below applies to tags also. + Array* tags = MetadataFactory::new_writeable_array(loader_data, length, 0, CHECK_NULL); + + int size = ConstantPool::size(length); + + // CDS considerations: + // Allocate read-write but may be able to move to read-only at dumping time + // if all the klasses are resolved. The only other field that is writable is + // the resolved_references array, which is recreated at startup time. + // But that could be moved to InstanceKlass (although a pain to access from + // assembly code). Maybe it could be moved to the cpCache which is RW. + return new (loader_data, size, false, THREAD) ConstantPool(tags); +} + +ConstantPool::ConstantPool(Array* tags) { + set_length(tags->length()); + set_tags(NULL); + set_cache(NULL); + set_reference_map(NULL); + set_resolved_references(NULL); + set_operands(NULL); + set_pool_holder(NULL); + set_flags(0); + // only set to non-zero if constant pool is merged by RedefineClasses + set_orig_length(0); + set_lock(new Monitor(Monitor::nonleaf + 2, "A constant pool lock")); + // all fields are initialized; needed for GC + set_on_stack(false); + + // initialize tag array + int length = tags->length(); + for (int index = 0; index < length; index++) { + tags->at_put(index, JVM_CONSTANT_Invalid); + } + set_tags(tags); +} + +void ConstantPool::deallocate_contents(ClassLoaderData* loader_data) { + MetadataFactory::free_metadata(loader_data, cache()); + set_cache(NULL); + MetadataFactory::free_array(loader_data, operands()); + set_operands(NULL); + + release_C_heap_structures(); + + // free tag array + MetadataFactory::free_array(loader_data, tags()); + set_tags(NULL); +} + +void ConstantPool::release_C_heap_structures() { + // walk constant pool and decrement symbol reference counts + unreference_symbols(); + + delete _lock; + set_lock(NULL); +} + +void ConstantPool::set_flag_at(FlagBit fb) { + const int MAX_STATE_CHANGES = 2; + for (int i = MAX_STATE_CHANGES + 10; i > 0; i--) { + int oflags = _flags; + int nflags = oflags | (1 << (int)fb); + if (Atomic::cmpxchg(nflags, &_flags, oflags) == oflags) + return; + } + assert(false, "failed to cmpxchg flags"); + _flags |= (1 << (int)fb); // better than nothing +} + +objArrayOop ConstantPool::resolved_references() const { + return (objArrayOop)JNIHandles::resolve(_resolved_references); +} + +// Create resolved_references array and mapping array for original cp indexes +// The ldc bytecode was rewritten to have the resolved reference array index so need a way +// to map it back for resolving and some unlikely miscellaneous uses. +// The objects created by invokedynamic are appended to this list. +void ConstantPool::initialize_resolved_references(ClassLoaderData* loader_data, + intStack reference_map, + int constant_pool_map_length, + TRAPS) { + // Initialized the resolved object cache. + int map_length = reference_map.length(); + if (map_length > 0) { + // Only need mapping back to constant pool entries. The map isn't used for + // invokedynamic resolved_reference entries. The constant pool cache index + // has the mapping back to both the constant pool and to the resolved + // reference index. + if (constant_pool_map_length > 0) { + Array* om = MetadataFactory::new_array(loader_data, map_length, CHECK); + + for (int i = 0; i < constant_pool_map_length; i++) { + int x = reference_map.at(i); + assert(x == (int)(jushort) x, "klass index is too big"); + om->at_put(i, (jushort)x); + } + set_reference_map(om); + } + + // Create Java array for holding resolved strings, methodHandles, + // methodTypes, invokedynamic and invokehandle appendix objects, etc. + objArrayOop stom = oopFactory::new_objArray(SystemDictionary::Object_klass(), map_length, CHECK); + Handle refs_handle (THREAD, (oop)stom); // must handleize. + set_resolved_references(loader_data->add_handle(refs_handle)); + } +} + +// CDS support. Create a new resolved_references array. +void ConstantPool::restore_unshareable_info(TRAPS) { + if (SystemDictionary::Object_klass_loaded()) { + // Recreate the object array and add to ClassLoaderData. + int map_length = resolved_reference_length(); + if (map_length > 0) { + objArrayOop stom = oopFactory::new_objArray(SystemDictionary::Object_klass(), map_length, CHECK); + Handle refs_handle (THREAD, (oop)stom); // must handleize. + + ClassLoaderData* loader_data = pool_holder()->class_loader_data(); + set_resolved_references(loader_data->add_handle(refs_handle)); + } + + // Also need to recreate the mutex. Make sure this matches the constructor + set_lock(new Monitor(Monitor::nonleaf + 2, "A constant pool lock")); + } +} + +void ConstantPool::remove_unshareable_info() { + // Resolved references are not in the shared archive. + // Save the length for restoration. It is not necessarily the same length + // as reference_map.length() if invokedynamic is saved. + set_resolved_reference_length( + resolved_references() != NULL ? resolved_references()->length() : 0); + set_resolved_references(NULL); + set_lock(NULL); +} + +int ConstantPool::cp_to_object_index(int cp_index) { + // this is harder don't do this so much. + for (int i = 0; i< reference_map()->length(); i++) { + if (reference_map()->at(i) == cp_index) return i; + // Zero entry is divider between constant pool indices for strings, + // method handles and method types. After that the index is a constant + // pool cache index for invokedynamic. Stop when zero (which can never + // be a constant pool index) + if (reference_map()->at(i) == 0) break; + } + // We might not find the index. + return _no_index_sentinel; +} + +Klass* ConstantPool::klass_at_impl(constantPoolHandle this_oop, int which, TRAPS) { + // A resolved constantPool entry will contain a Klass*, otherwise a Symbol*. + // It is not safe to rely on the tag bit's here, since we don't have a lock, and the entry and + // tag is not updated atomicly. + + CPSlot entry = this_oop->slot_at(which); + if (entry.is_resolved()) { + assert(entry.get_klass()->is_klass(), "must be"); + // Already resolved - return entry. + return entry.get_klass(); + } + + // Acquire lock on constant oop while doing update. After we get the lock, we check if another object + // already has updated the object + assert(THREAD->is_Java_thread(), "must be a Java thread"); + bool do_resolve = false; + bool in_error = false; + + // Create a handle for the mirror. This will preserve the resolved class + // until the loader_data is registered. + Handle mirror_handle; + + Symbol* name = NULL; + Handle loader; + { MonitorLockerEx ml(this_oop->lock()); + + if (this_oop->tag_at(which).is_unresolved_klass()) { + if (this_oop->tag_at(which).is_unresolved_klass_in_error()) { + in_error = true; + } else { + do_resolve = true; + name = this_oop->unresolved_klass_at(which); + loader = Handle(THREAD, InstanceKlass::cast(this_oop->pool_holder())->class_loader()); + } + } + } // unlocking constantPool + + + // The original attempt to resolve this constant pool entry failed so find the + // original error and throw it again (JVMS 5.4.3). + if (in_error) { + Symbol* error = SystemDictionary::find_resolution_error(this_oop, which); + guarantee(error != (Symbol*)NULL, "tag mismatch with resolution error table"); + ResourceMark rm; + // exception text will be the class name + const char* className = this_oop->unresolved_klass_at(which)->as_C_string(); + THROW_MSG_0(error, className); + } + + if (do_resolve) { + // this_oop must be unlocked during resolve_or_fail + oop protection_domain = Klass::cast(this_oop->pool_holder())->protection_domain(); + Handle h_prot (THREAD, protection_domain); + Klass* k_oop = SystemDictionary::resolve_or_fail(name, loader, h_prot, true, THREAD); + KlassHandle k; + if (!HAS_PENDING_EXCEPTION) { + k = KlassHandle(THREAD, k_oop); + // preserve the resolved klass. + mirror_handle = Handle(THREAD, k_oop->java_mirror()); + // Do access check for klasses + verify_constant_pool_resolve(this_oop, k, THREAD); + } + + // Failed to resolve class. We must record the errors so that subsequent attempts + // to resolve this constant pool entry fail with the same error (JVMS 5.4.3). + if (HAS_PENDING_EXCEPTION) { + ResourceMark rm; + Symbol* error = PENDING_EXCEPTION->klass()->name(); + + bool throw_orig_error = false; + { + MonitorLockerEx ml(this_oop->lock()); + + // some other thread has beaten us and has resolved the class. + if (this_oop->tag_at(which).is_klass()) { + CLEAR_PENDING_EXCEPTION; + entry = this_oop->resolved_klass_at(which); + return entry.get_klass(); + } + + if (!PENDING_EXCEPTION-> + is_a(SystemDictionary::LinkageError_klass())) { + // Just throw the exception and don't prevent these classes from + // being loaded due to virtual machine errors like StackOverflow + // and OutOfMemoryError, etc, or if the thread was hit by stop() + // Needs clarification to section 5.4.3 of the VM spec (see 6308271) + } + else if (!this_oop->tag_at(which).is_unresolved_klass_in_error()) { + SystemDictionary::add_resolution_error(this_oop, which, error); + this_oop->tag_at_put(which, JVM_CONSTANT_UnresolvedClassInError); + } else { + // some other thread has put the class in error state. + error = SystemDictionary::find_resolution_error(this_oop, which); + assert(error != NULL, "checking"); + throw_orig_error = true; + } + } // unlocked + + if (throw_orig_error) { + CLEAR_PENDING_EXCEPTION; + ResourceMark rm; + const char* className = this_oop->unresolved_klass_at(which)->as_C_string(); + THROW_MSG_0(error, className); + } + + return 0; + } + + if (TraceClassResolution && !k()->oop_is_array()) { + // skip resolving the constant pool so that this code get's + // called the next time some bytecodes refer to this class. + ResourceMark rm; + int line_number = -1; + const char * source_file = NULL; + if (JavaThread::current()->has_last_Java_frame()) { + // try to identify the method which called this function. + vframeStream vfst(JavaThread::current()); + if (!vfst.at_end()) { + line_number = vfst.method()->line_number_from_bci(vfst.bci()); + Symbol* s = InstanceKlass::cast(vfst.method()->method_holder())->source_file_name(); + if (s != NULL) { + source_file = s->as_C_string(); + } + } + } + if (k() != this_oop->pool_holder()) { + // only print something if the classes are different + if (source_file != NULL) { + tty->print("RESOLVE %s %s %s:%d\n", + InstanceKlass::cast(this_oop->pool_holder())->external_name(), + InstanceKlass::cast(k())->external_name(), source_file, line_number); + } else { + tty->print("RESOLVE %s %s\n", + InstanceKlass::cast(this_oop->pool_holder())->external_name(), + InstanceKlass::cast(k())->external_name()); + } + } + return k(); + } else { + MonitorLockerEx ml(this_oop->lock()); + // Only updated constant pool - if it is resolved. + do_resolve = this_oop->tag_at(which).is_unresolved_klass(); + if (do_resolve) { + ClassLoaderData* this_key = InstanceKlass::cast(this_oop->pool_holder())->class_loader_data(); + if (!this_key->is_the_null_class_loader_data()) { + this_key->record_dependency(k(), CHECK_NULL); // Can throw OOM + } + this_oop->klass_at_put(which, k()); + } + } + } + + entry = this_oop->resolved_klass_at(which); + assert(entry.is_resolved() && entry.get_klass()->is_klass(), "must be resolved at this point"); + return entry.get_klass(); +} + + +// Does not update ConstantPool* - to avoid any exception throwing. Used +// by compiler and exception handling. Also used to avoid classloads for +// instanceof operations. Returns NULL if the class has not been loaded or +// if the verification of constant pool failed +Klass* ConstantPool::klass_at_if_loaded(constantPoolHandle this_oop, int which) { + CPSlot entry = this_oop->slot_at(which); + if (entry.is_resolved()) { + assert(entry.get_klass()->is_klass(), "must be"); + return entry.get_klass(); + } else { + assert(entry.is_unresolved(), "must be either symbol or klass"); + Thread *thread = Thread::current(); + Symbol* name = entry.get_symbol(); + oop loader = InstanceKlass::cast(this_oop->pool_holder())->class_loader(); + oop protection_domain = Klass::cast(this_oop->pool_holder())->protection_domain(); + Handle h_prot (thread, protection_domain); + Handle h_loader (thread, loader); + Klass* k = SystemDictionary::find(name, h_loader, h_prot, thread); + + if (k != NULL) { + // Make sure that resolving is legal + EXCEPTION_MARK; + KlassHandle klass(THREAD, k); + // return NULL if verification fails + verify_constant_pool_resolve(this_oop, klass, THREAD); + if (HAS_PENDING_EXCEPTION) { + CLEAR_PENDING_EXCEPTION; + return NULL; + } + return klass(); + } else { + return k; + } + } +} + + +Klass* ConstantPool::klass_ref_at_if_loaded(constantPoolHandle this_oop, int which) { + return klass_at_if_loaded(this_oop, this_oop->klass_ref_index_at(which)); +} + + +// This is an interface for the compiler that allows accessing non-resolved entries +// in the constant pool - but still performs the validations tests. Must be used +// in a pre-parse of the compiler - to determine what it can do and not do. +// Note: We cannot update the ConstantPool from the vm_thread. +Klass* ConstantPool::klass_ref_at_if_loaded_check(constantPoolHandle this_oop, int index, TRAPS) { + int which = this_oop->klass_ref_index_at(index); + CPSlot entry = this_oop->slot_at(which); + if (entry.is_resolved()) { + assert(entry.get_klass()->is_klass(), "must be"); + return entry.get_klass(); + } else { + assert(entry.is_unresolved(), "must be either symbol or klass"); + Symbol* name = entry.get_symbol(); + oop loader = InstanceKlass::cast(this_oop->pool_holder())->class_loader(); + oop protection_domain = Klass::cast(this_oop->pool_holder())->protection_domain(); + Handle h_loader(THREAD, loader); + Handle h_prot (THREAD, protection_domain); + KlassHandle k(THREAD, SystemDictionary::find(name, h_loader, h_prot, THREAD)); + + // Do access check for klasses + if( k.not_null() ) verify_constant_pool_resolve(this_oop, k, CHECK_NULL); + return k(); + } +} + + +Method* ConstantPool::method_at_if_loaded(constantPoolHandle cpool, + int which) { + if (cpool->cache() == NULL) return NULL; // nothing to load yet + int cache_index = decode_cpcache_index(which, true); + if (!(cache_index >= 0 && cache_index < cpool->cache()->length())) { + // FIXME: should be an assert + if (PrintMiscellaneous && (Verbose||WizardMode)) { + tty->print_cr("bad operand %d in:", which); cpool->print(); + } + return NULL; + } + ConstantPoolCacheEntry* e = cpool->cache()->entry_at(cache_index); + return e->method_if_resolved(cpool); +} + + +bool ConstantPool::has_appendix_at_if_loaded(constantPoolHandle cpool, int which) { + if (cpool->cache() == NULL) return false; // nothing to load yet + int cache_index = decode_cpcache_index(which, true); + ConstantPoolCacheEntry* e = cpool->cache()->entry_at(cache_index); + return e->has_appendix(); +} + + +oop ConstantPool::appendix_at_if_loaded(constantPoolHandle cpool, int which) { + if (cpool->cache() == NULL) return NULL; // nothing to load yet + int cache_index = decode_cpcache_index(which, true); + ConstantPoolCacheEntry* e = cpool->cache()->entry_at(cache_index); + return e->appendix_if_resolved(cpool); +} + + +Symbol* ConstantPool::impl_name_ref_at(int which, bool uncached) { + int name_index = name_ref_index_at(impl_name_and_type_ref_index_at(which, uncached)); + return symbol_at(name_index); +} + + +Symbol* ConstantPool::impl_signature_ref_at(int which, bool uncached) { + int signature_index = signature_ref_index_at(impl_name_and_type_ref_index_at(which, uncached)); + return symbol_at(signature_index); +} + + +int ConstantPool::impl_name_and_type_ref_index_at(int which, bool uncached) { + int i = which; + if (!uncached && cache() != NULL) { + if (ConstantPool::is_invokedynamic_index(which)) { + // Invokedynamic index is index into resolved_references + int pool_index = invokedynamic_cp_cache_entry_at(which)->constant_pool_index(); + pool_index = invoke_dynamic_name_and_type_ref_index_at(pool_index); + assert(tag_at(pool_index).is_name_and_type(), ""); + return pool_index; + } + // change byte-ordering and go via cache + i = remap_instruction_operand_from_cache(which); + } else { + if (tag_at(which).is_invoke_dynamic()) { + int pool_index = invoke_dynamic_name_and_type_ref_index_at(which); + assert(tag_at(pool_index).is_name_and_type(), ""); + return pool_index; + } + } + assert(tag_at(i).is_field_or_method(), "Corrupted constant pool"); + assert(!tag_at(i).is_invoke_dynamic(), "Must be handled above"); + jint ref_index = *int_at_addr(i); + return extract_high_short_from_int(ref_index); +} + + +int ConstantPool::impl_klass_ref_index_at(int which, bool uncached) { + guarantee(!ConstantPool::is_invokedynamic_index(which), + "an invokedynamic instruction does not have a klass"); + int i = which; + if (!uncached && cache() != NULL) { + // change byte-ordering and go via cache + i = remap_instruction_operand_from_cache(which); + } + assert(tag_at(i).is_field_or_method(), "Corrupted constant pool"); + jint ref_index = *int_at_addr(i); + return extract_low_short_from_int(ref_index); +} + + + +int ConstantPool::remap_instruction_operand_from_cache(int operand) { + int cpc_index = operand; + DEBUG_ONLY(cpc_index -= CPCACHE_INDEX_TAG); + assert((int)(u2)cpc_index == cpc_index, "clean u2"); + int member_index = cache()->entry_at(cpc_index)->constant_pool_index(); + return member_index; +} + + +void ConstantPool::verify_constant_pool_resolve(constantPoolHandle this_oop, KlassHandle k, TRAPS) { + if (k->oop_is_instance() || k->oop_is_objArray()) { + instanceKlassHandle holder (THREAD, this_oop->pool_holder()); + Klass* elem_oop = k->oop_is_instance() ? k() : objArrayKlass::cast(k())->bottom_klass(); + KlassHandle element (THREAD, elem_oop); + + // The element type could be a typeArray - we only need the access check if it is + // an reference to another class + if (element->oop_is_instance()) { + LinkResolver::check_klass_accessability(holder, element, CHECK); + } + } +} + + +int ConstantPool::name_ref_index_at(int which_nt) { + jint ref_index = name_and_type_at(which_nt); + return extract_low_short_from_int(ref_index); +} + + +int ConstantPool::signature_ref_index_at(int which_nt) { + jint ref_index = name_and_type_at(which_nt); + return extract_high_short_from_int(ref_index); +} + + +Klass* ConstantPool::klass_ref_at(int which, TRAPS) { + return klass_at(klass_ref_index_at(which), CHECK_NULL); +} + + +Symbol* ConstantPool::klass_name_at(int which) { + assert(tag_at(which).is_unresolved_klass() || tag_at(which).is_klass(), + "Corrupted constant pool"); + // A resolved constantPool entry will contain a Klass*, otherwise a Symbol*. + // It is not safe to rely on the tag bit's here, since we don't have a lock, and the entry and + // tag is not updated atomicly. + CPSlot entry = slot_at(which); + if (entry.is_resolved()) { + // Already resolved - return entry's name. + assert(entry.get_klass()->is_klass(), "must be"); + return entry.get_klass()->name(); + } else { + assert(entry.is_unresolved(), "must be either symbol or klass"); + return entry.get_symbol(); + } +} + +Symbol* ConstantPool::klass_ref_at_noresolve(int which) { + jint ref_index = klass_ref_index_at(which); + return klass_at_noresolve(ref_index); +} + +Symbol* ConstantPool::uncached_klass_ref_at_noresolve(int which) { + jint ref_index = uncached_klass_ref_index_at(which); + return klass_at_noresolve(ref_index); +} + +char* ConstantPool::string_at_noresolve(int which) { + Symbol* s = unresolved_string_at(which); + if (s == NULL) { + return (char*)""; + } else { + return unresolved_string_at(which)->as_C_string(); + } +} + +BasicType ConstantPool::basic_type_for_signature_at(int which) { + return FieldType::basic_type(symbol_at(which)); +} + + +void ConstantPool::resolve_string_constants_impl(constantPoolHandle this_oop, TRAPS) { + for (int index = 1; index < this_oop->length(); index++) { // Index 0 is unused + if (this_oop->tag_at(index).is_string()) { + this_oop->string_at(index, CHECK); + } + } +} + +// Resolve all the classes in the constant pool. If they are all resolved, +// the constant pool is read-only. Enhancement: allocate cp entries to +// another metaspace, and copy to read-only or read-write space if this +// bit is set. +bool ConstantPool::resolve_class_constants(TRAPS) { + constantPoolHandle cp(THREAD, this); + for (int index = 1; index < length(); index++) { // Index 0 is unused + if (tag_at(index).is_unresolved_klass() && + klass_at_if_loaded(cp, index) == NULL) { + return false; + } + } + // set_preresolution(); or some bit for future use + return true; +} + +// If resolution for MethodHandle or MethodType fails, save the exception +// in the resolution error table, so that the same exception is thrown again. +void ConstantPool::save_and_throw_exception(constantPoolHandle this_oop, int which, + int tag, TRAPS) { + ResourceMark rm; + Symbol* error = PENDING_EXCEPTION->klass()->name(); + MonitorLockerEx ml(this_oop->lock()); // lock cpool to change tag. + + int error_tag = (tag == JVM_CONSTANT_MethodHandle) ? + JVM_CONSTANT_MethodHandleInError : JVM_CONSTANT_MethodTypeInError; + + if (!PENDING_EXCEPTION-> + is_a(SystemDictionary::LinkageError_klass())) { + // Just throw the exception and don't prevent these classes from + // being loaded due to virtual machine errors like StackOverflow + // and OutOfMemoryError, etc, or if the thread was hit by stop() + // Needs clarification to section 5.4.3 of the VM spec (see 6308271) + + } else if (this_oop->tag_at(which).value() != error_tag) { + SystemDictionary::add_resolution_error(this_oop, which, error); + this_oop->tag_at_put(which, error_tag); + } else { + // some other thread has put the class in error state. + error = SystemDictionary::find_resolution_error(this_oop, which); + assert(error != NULL, "checking"); + CLEAR_PENDING_EXCEPTION; + THROW_MSG(error, ""); + } +} + + +// Called to resolve constants in the constant pool and return an oop. +// Some constant pool entries cache their resolved oop. This is also +// called to create oops from constants to use in arguments for invokedynamic +oop ConstantPool::resolve_constant_at_impl(constantPoolHandle this_oop, int index, int cache_index, TRAPS) { + oop result_oop = NULL; + Handle throw_exception; + + if (cache_index == _possible_index_sentinel) { + // It is possible that this constant is one which is cached in the objects. + // We'll do a linear search. This should be OK because this usage is rare. + assert(index > 0, "valid index"); + cache_index = this_oop->cp_to_object_index(index); + } + assert(cache_index == _no_index_sentinel || cache_index >= 0, ""); + assert(index == _no_index_sentinel || index >= 0, ""); + + if (cache_index >= 0) { + result_oop = this_oop->resolved_references()->obj_at(cache_index); + if (result_oop != NULL) { + return result_oop; + // That was easy... + } + index = this_oop->object_to_cp_index(cache_index); + } + + jvalue prim_value; // temp used only in a few cases below + + int tag_value = this_oop->tag_at(index).value(); + + switch (tag_value) { + + case JVM_CONSTANT_UnresolvedClass: + case JVM_CONSTANT_UnresolvedClassInError: + case JVM_CONSTANT_Class: + { + assert(cache_index == _no_index_sentinel, "should not have been set"); + Klass* resolved = klass_at_impl(this_oop, index, CHECK_NULL); + // ldc wants the java mirror. + result_oop = resolved->java_mirror(); + break; + } + + case JVM_CONSTANT_String: + assert(cache_index != _no_index_sentinel, "should have been set"); + if (this_oop->is_pseudo_string_at(index)) { + result_oop = this_oop->pseudo_string_at(index, cache_index); + break; + } + result_oop = string_at_impl(this_oop, index, cache_index, CHECK_NULL); + break; + + case JVM_CONSTANT_Object: + result_oop = this_oop->object_at(index); + break; + + case JVM_CONSTANT_MethodHandleInError: + case JVM_CONSTANT_MethodTypeInError: + { + Symbol* error = SystemDictionary::find_resolution_error(this_oop, index); + guarantee(error != (Symbol*)NULL, "tag mismatch with resolution error table"); + ResourceMark rm; + THROW_MSG_0(error, ""); + break; + } + + case JVM_CONSTANT_MethodHandle: + { + int ref_kind = this_oop->method_handle_ref_kind_at(index); + int callee_index = this_oop->method_handle_klass_index_at(index); + Symbol* name = this_oop->method_handle_name_ref_at(index); + Symbol* signature = this_oop->method_handle_signature_ref_at(index); + if (PrintMiscellaneous) + tty->print_cr("resolve JVM_CONSTANT_MethodHandle:%d [%d/%d/%d] %s.%s", + ref_kind, index, this_oop->method_handle_index_at(index), + callee_index, name->as_C_string(), signature->as_C_string()); + KlassHandle callee; + { Klass* k = klass_at_impl(this_oop, callee_index, CHECK_NULL); + callee = KlassHandle(THREAD, k); + } + KlassHandle klass(THREAD, this_oop->pool_holder()); + Handle value = SystemDictionary::link_method_handle_constant(klass, ref_kind, + callee, name, signature, + THREAD); + result_oop = value(); + if (HAS_PENDING_EXCEPTION) { + save_and_throw_exception(this_oop, index, tag_value, CHECK_NULL); + } + break; + } + + case JVM_CONSTANT_MethodType: + { + Symbol* signature = this_oop->method_type_signature_at(index); + if (PrintMiscellaneous) + tty->print_cr("resolve JVM_CONSTANT_MethodType [%d/%d] %s", + index, this_oop->method_type_index_at(index), + signature->as_C_string()); + KlassHandle klass(THREAD, this_oop->pool_holder()); + Handle value = SystemDictionary::find_method_handle_type(signature, klass, THREAD); + result_oop = value(); + if (HAS_PENDING_EXCEPTION) { + save_and_throw_exception(this_oop, index, tag_value, CHECK_NULL); + } + break; + } + + case JVM_CONSTANT_Integer: + assert(cache_index == _no_index_sentinel, "should not have been set"); + prim_value.i = this_oop->int_at(index); + result_oop = java_lang_boxing_object::create(T_INT, &prim_value, CHECK_NULL); + break; + + case JVM_CONSTANT_Float: + assert(cache_index == _no_index_sentinel, "should not have been set"); + prim_value.f = this_oop->float_at(index); + result_oop = java_lang_boxing_object::create(T_FLOAT, &prim_value, CHECK_NULL); + break; + + case JVM_CONSTANT_Long: + assert(cache_index == _no_index_sentinel, "should not have been set"); + prim_value.j = this_oop->long_at(index); + result_oop = java_lang_boxing_object::create(T_LONG, &prim_value, CHECK_NULL); + break; + + case JVM_CONSTANT_Double: + assert(cache_index == _no_index_sentinel, "should not have been set"); + prim_value.d = this_oop->double_at(index); + result_oop = java_lang_boxing_object::create(T_DOUBLE, &prim_value, CHECK_NULL); + break; + + default: + DEBUG_ONLY( tty->print_cr("*** %p: tag at CP[%d/%d] = %d", + this_oop(), index, cache_index, tag_value) ); + assert(false, "unexpected constant tag"); + break; + } + + if (cache_index >= 0) { + // Cache the oop here also. + Handle result_handle(THREAD, result_oop); + MonitorLockerEx ml(this_oop->lock()); // don't know if we really need this + oop result = this_oop->resolved_references()->obj_at(cache_index); + // Benign race condition: resolved_references may already be filled in while we were trying to lock. + // The important thing here is that all threads pick up the same result. + // It doesn't matter which racing thread wins, as long as only one + // result is used by all threads, and all future queries. + // That result may be either a resolved constant or a failure exception. + if (result == NULL) { + this_oop->resolved_references()->obj_at_put(cache_index, result_handle()); + return result_handle(); + } else { + // Return the winning thread's result. This can be different than + // result_handle() for MethodHandles. + return result; + } + } else { + return result_oop; + } +} + +oop ConstantPool::uncached_string_at(int which, TRAPS) { + Symbol* sym = unresolved_string_at(which); + oop str = StringTable::intern(sym, CHECK_(NULL)); + assert(java_lang_String::is_instance(str), "must be string"); + return str; +} + + +oop ConstantPool::resolve_bootstrap_specifier_at_impl(constantPoolHandle this_oop, int index, TRAPS) { + assert(this_oop->tag_at(index).is_invoke_dynamic(), "Corrupted constant pool"); + + Handle bsm; + int argc; + { + // JVM_CONSTANT_InvokeDynamic is an ordered pair of [bootm, name&type], plus optional arguments + // The bootm, being a JVM_CONSTANT_MethodHandle, has its own cache entry. + // It is accompanied by the optional arguments. + int bsm_index = this_oop->invoke_dynamic_bootstrap_method_ref_index_at(index); + oop bsm_oop = this_oop->resolve_possibly_cached_constant_at(bsm_index, CHECK_NULL); + if (!java_lang_invoke_MethodHandle::is_instance(bsm_oop)) { + THROW_MSG_NULL(vmSymbols::java_lang_LinkageError(), "BSM not an MethodHandle"); + } + + // Extract the optional static arguments. + argc = this_oop->invoke_dynamic_argument_count_at(index); + if (argc == 0) return bsm_oop; + + bsm = Handle(THREAD, bsm_oop); + } + + objArrayHandle info; + { + objArrayOop info_oop = oopFactory::new_objArray(SystemDictionary::Object_klass(), 1+argc, CHECK_NULL); + info = objArrayHandle(THREAD, info_oop); + } + + info->obj_at_put(0, bsm()); + for (int i = 0; i < argc; i++) { + int arg_index = this_oop->invoke_dynamic_argument_index_at(index, i); + oop arg_oop = this_oop->resolve_possibly_cached_constant_at(arg_index, CHECK_NULL); + info->obj_at_put(1+i, arg_oop); + } + + return info(); +} + +oop ConstantPool::string_at_impl(constantPoolHandle this_oop, int which, int obj_index, TRAPS) { + // If the string has already been interned, this entry will be non-null + oop str = this_oop->resolved_references()->obj_at(obj_index); + if (str != NULL) return str; + + Symbol* sym = this_oop->unresolved_string_at(which); + str = StringTable::intern(sym, CHECK_(NULL)); + this_oop->string_at_put(which, obj_index, str); + assert(java_lang_String::is_instance(str), "must be string"); + return str; +} + + +bool ConstantPool::klass_name_at_matches(instanceKlassHandle k, + int which) { + // Names are interned, so we can compare Symbol*s directly + Symbol* cp_name = klass_name_at(which); + return (cp_name == k->name()); +} + + +// Iterate over symbols and decrement ones which are Symbol*s. +// This is done during GC so do not need to lock constantPool unless we +// have per-thread safepoints. +// Only decrement the UTF8 symbols. Unresolved classes and strings point to +// these symbols but didn't increment the reference count. +void ConstantPool::unreference_symbols() { + for (int index = 1; index < length(); index++) { // Index 0 is unused + constantTag tag = tag_at(index); + if (tag.is_symbol()) { + symbol_at(index)->decrement_refcount(); + } + } +} + + +// Compare this constant pool's entry at index1 to the constant pool +// cp2's entry at index2. +bool ConstantPool::compare_entry_to(int index1, constantPoolHandle cp2, + int index2, TRAPS) { + + jbyte t1 = tag_at(index1).value(); + jbyte t2 = cp2->tag_at(index2).value(); + + + // JVM_CONSTANT_UnresolvedClassInError is equal to JVM_CONSTANT_UnresolvedClass + // when comparing + if (t1 == JVM_CONSTANT_UnresolvedClassInError) { + t1 = JVM_CONSTANT_UnresolvedClass; + } + if (t2 == JVM_CONSTANT_UnresolvedClassInError) { + t2 = JVM_CONSTANT_UnresolvedClass; + } + + if (t1 != t2) { + // Not the same entry type so there is nothing else to check. Note + // that this style of checking will consider resolved/unresolved + // class pairs as different. + // From the ConstantPool* API point of view, this is correct + // behavior. See VM_RedefineClasses::merge_constant_pools() to see how this + // plays out in the context of ConstantPool* merging. + return false; + } + + switch (t1) { + case JVM_CONSTANT_Class: + { + Klass* k1 = klass_at(index1, CHECK_false); + Klass* k2 = cp2->klass_at(index2, CHECK_false); + if (k1 == k2) { + return true; + } + } break; + + case JVM_CONSTANT_ClassIndex: + { + int recur1 = klass_index_at(index1); + int recur2 = cp2->klass_index_at(index2); + bool match = compare_entry_to(recur1, cp2, recur2, CHECK_false); + if (match) { + return true; + } + } break; + + case JVM_CONSTANT_Double: + { + jdouble d1 = double_at(index1); + jdouble d2 = cp2->double_at(index2); + if (d1 == d2) { + return true; + } + } break; + + case JVM_CONSTANT_Fieldref: + case JVM_CONSTANT_InterfaceMethodref: + case JVM_CONSTANT_Methodref: + { + int recur1 = uncached_klass_ref_index_at(index1); + int recur2 = cp2->uncached_klass_ref_index_at(index2); + bool match = compare_entry_to(recur1, cp2, recur2, CHECK_false); + if (match) { + recur1 = uncached_name_and_type_ref_index_at(index1); + recur2 = cp2->uncached_name_and_type_ref_index_at(index2); + match = compare_entry_to(recur1, cp2, recur2, CHECK_false); + if (match) { + return true; + } + } + } break; + + case JVM_CONSTANT_Float: + { + jfloat f1 = float_at(index1); + jfloat f2 = cp2->float_at(index2); + if (f1 == f2) { + return true; + } + } break; + + case JVM_CONSTANT_Integer: + { + jint i1 = int_at(index1); + jint i2 = cp2->int_at(index2); + if (i1 == i2) { + return true; + } + } break; + + case JVM_CONSTANT_Long: + { + jlong l1 = long_at(index1); + jlong l2 = cp2->long_at(index2); + if (l1 == l2) { + return true; + } + } break; + + case JVM_CONSTANT_NameAndType: + { + int recur1 = name_ref_index_at(index1); + int recur2 = cp2->name_ref_index_at(index2); + bool match = compare_entry_to(recur1, cp2, recur2, CHECK_false); + if (match) { + recur1 = signature_ref_index_at(index1); + recur2 = cp2->signature_ref_index_at(index2); + match = compare_entry_to(recur1, cp2, recur2, CHECK_false); + if (match) { + return true; + } + } + } break; + + case JVM_CONSTANT_StringIndex: + { + int recur1 = string_index_at(index1); + int recur2 = cp2->string_index_at(index2); + bool match = compare_entry_to(recur1, cp2, recur2, CHECK_false); + if (match) { + return true; + } + } break; + + case JVM_CONSTANT_UnresolvedClass: + { + Symbol* k1 = unresolved_klass_at(index1); + Symbol* k2 = cp2->unresolved_klass_at(index2); + if (k1 == k2) { + return true; + } + } break; + + case JVM_CONSTANT_MethodType: + { + int k1 = method_type_index_at(index1); + int k2 = cp2->method_type_index_at(index2); + bool match = compare_entry_to(k1, cp2, k2, CHECK_false); + if (match) { + return true; + } + } break; + + case JVM_CONSTANT_MethodHandle: + { + int k1 = method_handle_ref_kind_at(index1); + int k2 = cp2->method_handle_ref_kind_at(index2); + if (k1 == k2) { + int i1 = method_handle_index_at(index1); + int i2 = cp2->method_handle_index_at(index2); + bool match = compare_entry_to(i1, cp2, i2, CHECK_false); + if (match) { + return true; + } + } + } break; + + case JVM_CONSTANT_InvokeDynamic: + { + int k1 = invoke_dynamic_bootstrap_method_ref_index_at(index1); + int k2 = cp2->invoke_dynamic_bootstrap_method_ref_index_at(index2); + bool match = compare_entry_to(k1, cp2, k2, CHECK_false); + if (!match) return false; + k1 = invoke_dynamic_name_and_type_ref_index_at(index1); + k2 = cp2->invoke_dynamic_name_and_type_ref_index_at(index2); + match = compare_entry_to(k1, cp2, k2, CHECK_false); + if (!match) return false; + int argc = invoke_dynamic_argument_count_at(index1); + if (argc == cp2->invoke_dynamic_argument_count_at(index2)) { + for (int j = 0; j < argc; j++) { + k1 = invoke_dynamic_argument_index_at(index1, j); + k2 = cp2->invoke_dynamic_argument_index_at(index2, j); + match = compare_entry_to(k1, cp2, k2, CHECK_false); + if (!match) return false; + } + return true; // got through loop; all elements equal + } + } break; + + case JVM_CONSTANT_String: + { + Symbol* s1 = unresolved_string_at(index1); + Symbol* s2 = cp2->unresolved_string_at(index2); + if (s1 == s2) { + return true; + } + } break; + + case JVM_CONSTANT_Utf8: + { + Symbol* s1 = symbol_at(index1); + Symbol* s2 = cp2->symbol_at(index2); + if (s1 == s2) { + return true; + } + } break; + + // Invalid is used as the tag for the second constant pool entry + // occupied by JVM_CONSTANT_Double or JVM_CONSTANT_Long. It should + // not be seen by itself. + case JVM_CONSTANT_Invalid: // fall through + + default: + ShouldNotReachHere(); + break; + } + + return false; +} // end compare_entry_to() + + +// Copy this constant pool's entries at start_i to end_i (inclusive) +// to the constant pool to_cp's entries starting at to_i. A total of +// (end_i - start_i) + 1 entries are copied. +void ConstantPool::copy_cp_to_impl(constantPoolHandle from_cp, int start_i, int end_i, + constantPoolHandle to_cp, int to_i, TRAPS) { + + int dest_i = to_i; // leave original alone for debug purposes + + for (int src_i = start_i; src_i <= end_i; /* see loop bottom */ ) { + copy_entry_to(from_cp, src_i, to_cp, dest_i, CHECK); + + switch (from_cp->tag_at(src_i).value()) { + case JVM_CONSTANT_Double: + case JVM_CONSTANT_Long: + // double and long take two constant pool entries + src_i += 2; + dest_i += 2; + break; + + default: + // all others take one constant pool entry + src_i++; + dest_i++; + break; + } + } + + int from_oplen = operand_array_length(from_cp->operands()); + int old_oplen = operand_array_length(to_cp->operands()); + if (from_oplen != 0) { + // append my operands to the target's operands array + if (old_oplen == 0) { + to_cp->set_operands(from_cp->operands()); // reuse; do not merge + } else { + int old_len = to_cp->operands()->length(); + int from_len = from_cp->operands()->length(); + int old_off = old_oplen * sizeof(u2); + int from_off = from_oplen * sizeof(u2); + // Use the metaspace for the destination constant pool + ClassLoaderData* loader_data = to_cp->pool_holder()->class_loader_data(); + Array* new_operands = MetadataFactory::new_array(loader_data, old_len + from_len, CHECK); + int fillp = 0, len = 0; + // first part of dest + Copy::conjoint_memory_atomic(to_cp->operands()->adr_at(0), + new_operands->adr_at(fillp), + (len = old_off) * sizeof(u2)); + fillp += len; + // first part of src + Copy::conjoint_memory_atomic(to_cp->operands()->adr_at(0), + new_operands->adr_at(fillp), + (len = from_off) * sizeof(u2)); + fillp += len; + // second part of dest + Copy::conjoint_memory_atomic(to_cp->operands()->adr_at(old_off), + new_operands->adr_at(fillp), + (len = old_len - old_off) * sizeof(u2)); + fillp += len; + // second part of src + Copy::conjoint_memory_atomic(to_cp->operands()->adr_at(from_off), + new_operands->adr_at(fillp), + (len = from_len - from_off) * sizeof(u2)); + fillp += len; + assert(fillp == new_operands->length(), ""); + + // Adjust indexes in the first part of the copied operands array. + for (int j = 0; j < from_oplen; j++) { + int offset = operand_offset_at(new_operands, old_oplen + j); + assert(offset == operand_offset_at(from_cp->operands(), j), "correct copy"); + offset += old_len; // every new tuple is preceded by old_len extra u2's + operand_offset_at_put(new_operands, old_oplen + j, offset); + } + + // replace target operands array with combined array + to_cp->set_operands(new_operands); + } + } + +} // end copy_cp_to() + + +// Copy this constant pool's entry at from_i to the constant pool +// to_cp's entry at to_i. +void ConstantPool::copy_entry_to(constantPoolHandle from_cp, int from_i, + constantPoolHandle to_cp, int to_i, + TRAPS) { + + int tag = from_cp->tag_at(from_i).value(); + switch (tag) { + case JVM_CONSTANT_Class: + { + Klass* k = from_cp->klass_at(from_i, CHECK); + to_cp->klass_at_put(to_i, k); + } break; + + case JVM_CONSTANT_ClassIndex: + { + jint ki = from_cp->klass_index_at(from_i); + to_cp->klass_index_at_put(to_i, ki); + } break; + + case JVM_CONSTANT_Double: + { + jdouble d = from_cp->double_at(from_i); + to_cp->double_at_put(to_i, d); + // double takes two constant pool entries so init second entry's tag + to_cp->tag_at_put(to_i + 1, JVM_CONSTANT_Invalid); + } break; + + case JVM_CONSTANT_Fieldref: + { + int class_index = from_cp->uncached_klass_ref_index_at(from_i); + int name_and_type_index = from_cp->uncached_name_and_type_ref_index_at(from_i); + to_cp->field_at_put(to_i, class_index, name_and_type_index); + } break; + + case JVM_CONSTANT_Float: + { + jfloat f = from_cp->float_at(from_i); + to_cp->float_at_put(to_i, f); + } break; + + case JVM_CONSTANT_Integer: + { + jint i = from_cp->int_at(from_i); + to_cp->int_at_put(to_i, i); + } break; + + case JVM_CONSTANT_InterfaceMethodref: + { + int class_index = from_cp->uncached_klass_ref_index_at(from_i); + int name_and_type_index = from_cp->uncached_name_and_type_ref_index_at(from_i); + to_cp->interface_method_at_put(to_i, class_index, name_and_type_index); + } break; + + case JVM_CONSTANT_Long: + { + jlong l = from_cp->long_at(from_i); + to_cp->long_at_put(to_i, l); + // long takes two constant pool entries so init second entry's tag + to_cp->tag_at_put(to_i + 1, JVM_CONSTANT_Invalid); + } break; + + case JVM_CONSTANT_Methodref: + { + int class_index = from_cp->uncached_klass_ref_index_at(from_i); + int name_and_type_index = from_cp->uncached_name_and_type_ref_index_at(from_i); + to_cp->method_at_put(to_i, class_index, name_and_type_index); + } break; + + case JVM_CONSTANT_NameAndType: + { + int name_ref_index = from_cp->name_ref_index_at(from_i); + int signature_ref_index = from_cp->signature_ref_index_at(from_i); + to_cp->name_and_type_at_put(to_i, name_ref_index, signature_ref_index); + } break; + + case JVM_CONSTANT_StringIndex: + { + jint si = from_cp->string_index_at(from_i); + to_cp->string_index_at_put(to_i, si); + } break; + + case JVM_CONSTANT_UnresolvedClass: + { + // Can be resolved after checking tag, so check the slot first. + CPSlot entry = from_cp->slot_at(from_i); + if (entry.is_resolved()) { + assert(entry.get_klass()->is_klass(), "must be"); + // Already resolved + to_cp->klass_at_put(to_i, entry.get_klass()); + } else { + to_cp->unresolved_klass_at_put(to_i, entry.get_symbol()); + } + } break; + + case JVM_CONSTANT_UnresolvedClassInError: + { + Symbol* k = from_cp->unresolved_klass_at(from_i); + to_cp->unresolved_klass_at_put(to_i, k); + to_cp->tag_at_put(to_i, JVM_CONSTANT_UnresolvedClassInError); + } break; + + + case JVM_CONSTANT_String: + { + Symbol* s = from_cp->unresolved_string_at(from_i); + to_cp->unresolved_string_at_put(to_i, s); + } break; + + case JVM_CONSTANT_Utf8: + { + Symbol* s = from_cp->symbol_at(from_i); + // Need to increase refcount, the old one will be thrown away and deferenced + s->increment_refcount(); + to_cp->symbol_at_put(to_i, s); + } break; + + case JVM_CONSTANT_MethodType: + { + jint k = from_cp->method_type_index_at(from_i); + to_cp->method_type_index_at_put(to_i, k); + } break; + + case JVM_CONSTANT_MethodHandle: + { + int k1 = from_cp->method_handle_ref_kind_at(from_i); + int k2 = from_cp->method_handle_index_at(from_i); + to_cp->method_handle_index_at_put(to_i, k1, k2); + } break; + + case JVM_CONSTANT_InvokeDynamic: + { + int k1 = from_cp->invoke_dynamic_bootstrap_specifier_index(from_i); + int k2 = from_cp->invoke_dynamic_name_and_type_ref_index_at(from_i); + k1 += operand_array_length(to_cp->operands()); // to_cp might already have operands + to_cp->invoke_dynamic_at_put(to_i, k1, k2); + } break; + + // Invalid is used as the tag for the second constant pool entry + // occupied by JVM_CONSTANT_Double or JVM_CONSTANT_Long. It should + // not be seen by itself. + case JVM_CONSTANT_Invalid: // fall through + + default: + { + ShouldNotReachHere(); + } break; + } +} // end copy_entry_to() + + +// Search constant pool search_cp for an entry that matches this +// constant pool's entry at pattern_i. Returns the index of a +// matching entry or zero (0) if there is no matching entry. +int ConstantPool::find_matching_entry(int pattern_i, + constantPoolHandle search_cp, TRAPS) { + + // index zero (0) is not used + for (int i = 1; i < search_cp->length(); i++) { + bool found = compare_entry_to(pattern_i, search_cp, i, CHECK_0); + if (found) { + return i; + } + } + + return 0; // entry not found; return unused index zero (0) +} // end find_matching_entry() + + +#ifndef PRODUCT + +const char* ConstantPool::printable_name_at(int which) { + + constantTag tag = tag_at(which); + + if (tag.is_string()) { + return string_at_noresolve(which); + } else if (tag.is_klass() || tag.is_unresolved_klass()) { + return klass_name_at(which)->as_C_string(); + } else if (tag.is_symbol()) { + return symbol_at(which)->as_C_string(); + } + return ""; +} + +#endif // PRODUCT + + +// JVMTI GetConstantPool support + +// For temporary use until code is stable. +#define DBG(code) + +static const char* WARN_MSG = "Must not be such entry!"; + +static void print_cpool_bytes(jint cnt, u1 *bytes) { + jint size = 0; + u2 idx1, idx2; + + for (jint idx = 1; idx < cnt; idx++) { + jint ent_size = 0; + u1 tag = *bytes++; + size++; // count tag + + printf("const #%03d, tag: %02d ", idx, tag); + switch(tag) { + case JVM_CONSTANT_Invalid: { + printf("Invalid"); + break; + } + case JVM_CONSTANT_Unicode: { + printf("Unicode %s", WARN_MSG); + break; + } + case JVM_CONSTANT_Utf8: { + u2 len = Bytes::get_Java_u2(bytes); + char str[128]; + if (len > 127) { + len = 127; + } + strncpy(str, (char *) (bytes+2), len); + str[len] = '\0'; + printf("Utf8 \"%s\"", str); + ent_size = 2 + len; + break; + } + case JVM_CONSTANT_Integer: { + u4 val = Bytes::get_Java_u4(bytes); + printf("int %d", *(int *) &val); + ent_size = 4; + break; + } + case JVM_CONSTANT_Float: { + u4 val = Bytes::get_Java_u4(bytes); + printf("float %5.3ff", *(float *) &val); + ent_size = 4; + break; + } + case JVM_CONSTANT_Long: { + u8 val = Bytes::get_Java_u8(bytes); + printf("long "INT64_FORMAT, (int64_t) *(jlong *) &val); + ent_size = 8; + idx++; // Long takes two cpool slots + break; + } + case JVM_CONSTANT_Double: { + u8 val = Bytes::get_Java_u8(bytes); + printf("double %5.3fd", *(jdouble *)&val); + ent_size = 8; + idx++; // Double takes two cpool slots + break; + } + case JVM_CONSTANT_Class: { + idx1 = Bytes::get_Java_u2(bytes); + printf("class #%03d", idx1); + ent_size = 2; + break; + } + case JVM_CONSTANT_String: { + idx1 = Bytes::get_Java_u2(bytes); + printf("String #%03d", idx1); + ent_size = 2; + break; + } + case JVM_CONSTANT_Fieldref: { + idx1 = Bytes::get_Java_u2(bytes); + idx2 = Bytes::get_Java_u2(bytes+2); + printf("Field #%03d, #%03d", (int) idx1, (int) idx2); + ent_size = 4; + break; + } + case JVM_CONSTANT_Methodref: { + idx1 = Bytes::get_Java_u2(bytes); + idx2 = Bytes::get_Java_u2(bytes+2); + printf("Method #%03d, #%03d", idx1, idx2); + ent_size = 4; + break; + } + case JVM_CONSTANT_InterfaceMethodref: { + idx1 = Bytes::get_Java_u2(bytes); + idx2 = Bytes::get_Java_u2(bytes+2); + printf("InterfMethod #%03d, #%03d", idx1, idx2); + ent_size = 4; + break; + } + case JVM_CONSTANT_NameAndType: { + idx1 = Bytes::get_Java_u2(bytes); + idx2 = Bytes::get_Java_u2(bytes+2); + printf("NameAndType #%03d, #%03d", idx1, idx2); + ent_size = 4; + break; + } + case JVM_CONSTANT_ClassIndex: { + printf("ClassIndex %s", WARN_MSG); + break; + } + case JVM_CONSTANT_UnresolvedClass: { + printf("UnresolvedClass: %s", WARN_MSG); + break; + } + case JVM_CONSTANT_UnresolvedClassInError: { + printf("UnresolvedClassInErr: %s", WARN_MSG); + break; + } + case JVM_CONSTANT_StringIndex: { + printf("StringIndex: %s", WARN_MSG); + break; + } + } + printf(";\n"); + bytes += ent_size; + size += ent_size; + } + printf("Cpool size: %d\n", size); + fflush(0); + return; +} /* end print_cpool_bytes */ + + +// Returns size of constant pool entry. +jint ConstantPool::cpool_entry_size(jint idx) { + switch(tag_at(idx).value()) { + case JVM_CONSTANT_Invalid: + case JVM_CONSTANT_Unicode: + return 1; + + case JVM_CONSTANT_Utf8: + return 3 + symbol_at(idx)->utf8_length(); + + case JVM_CONSTANT_Class: + case JVM_CONSTANT_String: + case JVM_CONSTANT_ClassIndex: + case JVM_CONSTANT_UnresolvedClass: + case JVM_CONSTANT_UnresolvedClassInError: + case JVM_CONSTANT_StringIndex: + case JVM_CONSTANT_MethodType: + return 3; + + case JVM_CONSTANT_MethodHandle: + return 4; //tag, ref_kind, ref_index + + case JVM_CONSTANT_Integer: + case JVM_CONSTANT_Float: + case JVM_CONSTANT_Fieldref: + case JVM_CONSTANT_Methodref: + case JVM_CONSTANT_InterfaceMethodref: + case JVM_CONSTANT_NameAndType: + return 5; + + case JVM_CONSTANT_InvokeDynamic: + // u1 tag, u2 bsm, u2 nt + return 5; + + case JVM_CONSTANT_Long: + case JVM_CONSTANT_Double: + return 9; + } + assert(false, "cpool_entry_size: Invalid constant pool entry tag"); + return 1; +} /* end cpool_entry_size */ + + +// SymbolHashMap is used to find a constant pool index from a string. +// This function fills in SymbolHashMaps, one for utf8s and one for +// class names, returns size of the cpool raw bytes. +jint ConstantPool::hash_entries_to(SymbolHashMap *symmap, + SymbolHashMap *classmap) { + jint size = 0; + + for (u2 idx = 1; idx < length(); idx++) { + u2 tag = tag_at(idx).value(); + size += cpool_entry_size(idx); + + switch(tag) { + case JVM_CONSTANT_Utf8: { + Symbol* sym = symbol_at(idx); + symmap->add_entry(sym, idx); + DBG(printf("adding symbol entry %s = %d\n", sym->as_utf8(), idx)); + break; + } + case JVM_CONSTANT_Class: + case JVM_CONSTANT_UnresolvedClass: + case JVM_CONSTANT_UnresolvedClassInError: { + Symbol* sym = klass_name_at(idx); + classmap->add_entry(sym, idx); + DBG(printf("adding class entry %s = %d\n", sym->as_utf8(), idx)); + break; + } + case JVM_CONSTANT_Long: + case JVM_CONSTANT_Double: { + idx++; // Both Long and Double take two cpool slots + break; + } + } + } + return size; +} /* end hash_utf8_entries_to */ + + +// Copy cpool bytes. +// Returns: +// 0, in case of OutOfMemoryError +// -1, in case of internal error +// > 0, count of the raw cpool bytes that have been copied +int ConstantPool::copy_cpool_bytes(int cpool_size, + SymbolHashMap* tbl, + unsigned char *bytes) { + u2 idx1, idx2; + jint size = 0; + jint cnt = length(); + unsigned char *start_bytes = bytes; + + for (jint idx = 1; idx < cnt; idx++) { + u1 tag = tag_at(idx).value(); + jint ent_size = cpool_entry_size(idx); + + assert(size + ent_size <= cpool_size, "Size mismatch"); + + *bytes = tag; + DBG(printf("#%03hd tag=%03hd, ", idx, tag)); + switch(tag) { + case JVM_CONSTANT_Invalid: { + DBG(printf("JVM_CONSTANT_Invalid")); + break; + } + case JVM_CONSTANT_Unicode: { + assert(false, "Wrong constant pool tag: JVM_CONSTANT_Unicode"); + DBG(printf("JVM_CONSTANT_Unicode")); + break; + } + case JVM_CONSTANT_Utf8: { + Symbol* sym = symbol_at(idx); + char* str = sym->as_utf8(); + // Warning! It's crashing on x86 with len = sym->utf8_length() + int len = (int) strlen(str); + Bytes::put_Java_u2((address) (bytes+1), (u2) len); + for (int i = 0; i < len; i++) { + bytes[3+i] = (u1) str[i]; + } + DBG(printf("JVM_CONSTANT_Utf8: %s ", str)); + break; + } + case JVM_CONSTANT_Integer: { + jint val = int_at(idx); + Bytes::put_Java_u4((address) (bytes+1), *(u4*)&val); + break; + } + case JVM_CONSTANT_Float: { + jfloat val = float_at(idx); + Bytes::put_Java_u4((address) (bytes+1), *(u4*)&val); + break; + } + case JVM_CONSTANT_Long: { + jlong val = long_at(idx); + Bytes::put_Java_u8((address) (bytes+1), *(u8*)&val); + idx++; // Long takes two cpool slots + break; + } + case JVM_CONSTANT_Double: { + jdouble val = double_at(idx); + Bytes::put_Java_u8((address) (bytes+1), *(u8*)&val); + idx++; // Double takes two cpool slots + break; + } + case JVM_CONSTANT_Class: + case JVM_CONSTANT_UnresolvedClass: + case JVM_CONSTANT_UnresolvedClassInError: { + *bytes = JVM_CONSTANT_Class; + Symbol* sym = klass_name_at(idx); + idx1 = tbl->symbol_to_value(sym); + assert(idx1 != 0, "Have not found a hashtable entry"); + Bytes::put_Java_u2((address) (bytes+1), idx1); + DBG(printf("JVM_CONSTANT_Class: idx=#%03hd, %s", idx1, sym->as_utf8())); + break; + } + case JVM_CONSTANT_String: { + *bytes = JVM_CONSTANT_String; + Symbol* sym = unresolved_string_at(idx); + idx1 = tbl->symbol_to_value(sym); + assert(idx1 != 0, "Have not found a hashtable entry"); + Bytes::put_Java_u2((address) (bytes+1), idx1); + DBG(char *str = sym->as_utf8()); + DBG(printf("JVM_CONSTANT_String: idx=#%03hd, %s", idx1, str)); + break; + } + case JVM_CONSTANT_Fieldref: + case JVM_CONSTANT_Methodref: + case JVM_CONSTANT_InterfaceMethodref: { + idx1 = uncached_klass_ref_index_at(idx); + idx2 = uncached_name_and_type_ref_index_at(idx); + Bytes::put_Java_u2((address) (bytes+1), idx1); + Bytes::put_Java_u2((address) (bytes+3), idx2); + DBG(printf("JVM_CONSTANT_Methodref: %hd %hd", idx1, idx2)); + break; + } + case JVM_CONSTANT_NameAndType: { + idx1 = name_ref_index_at(idx); + idx2 = signature_ref_index_at(idx); + Bytes::put_Java_u2((address) (bytes+1), idx1); + Bytes::put_Java_u2((address) (bytes+3), idx2); + DBG(printf("JVM_CONSTANT_NameAndType: %hd %hd", idx1, idx2)); + break; + } + case JVM_CONSTANT_ClassIndex: { + *bytes = JVM_CONSTANT_Class; + idx1 = klass_index_at(idx); + Bytes::put_Java_u2((address) (bytes+1), idx1); + DBG(printf("JVM_CONSTANT_ClassIndex: %hd", idx1)); + break; + } + case JVM_CONSTANT_StringIndex: { + *bytes = JVM_CONSTANT_String; + idx1 = string_index_at(idx); + Bytes::put_Java_u2((address) (bytes+1), idx1); + DBG(printf("JVM_CONSTANT_StringIndex: %hd", idx1)); + break; + } + case JVM_CONSTANT_MethodHandle: + case JVM_CONSTANT_MethodHandleInError: { + *bytes = JVM_CONSTANT_MethodHandle; + int kind = method_handle_ref_kind_at(idx); + idx1 = method_handle_index_at(idx); + *(bytes+1) = (unsigned char) kind; + Bytes::put_Java_u2((address) (bytes+2), idx1); + DBG(printf("JVM_CONSTANT_MethodHandle: %d %hd", kind, idx1)); + break; + } + case JVM_CONSTANT_MethodType: + case JVM_CONSTANT_MethodTypeInError: { + *bytes = JVM_CONSTANT_MethodType; + idx1 = method_type_index_at(idx); + Bytes::put_Java_u2((address) (bytes+1), idx1); + DBG(printf("JVM_CONSTANT_MethodType: %hd", idx1)); + break; + } + case JVM_CONSTANT_InvokeDynamic: { + *bytes = tag; + idx1 = extract_low_short_from_int(*int_at_addr(idx)); + idx2 = extract_high_short_from_int(*int_at_addr(idx)); + assert(idx2 == invoke_dynamic_name_and_type_ref_index_at(idx), "correct half of u4"); + Bytes::put_Java_u2((address) (bytes+1), idx1); + Bytes::put_Java_u2((address) (bytes+3), idx2); + DBG(printf("JVM_CONSTANT_InvokeDynamic: %hd %hd", idx1, idx2)); + break; + } + } + DBG(printf("\n")); + bytes += ent_size; + size += ent_size; + } + assert(size == cpool_size, "Size mismatch"); + + // Keep temorarily for debugging until it's stable. + DBG(print_cpool_bytes(cnt, start_bytes)); + return (int)(bytes - start_bytes); +} /* end copy_cpool_bytes */ + + +void ConstantPool::set_on_stack(const bool value) { + _on_stack = value; + if (value) MetadataOnStackMark::record(this); +} + +// JSR 292 support for patching constant pool oops after the class is linked and +// the oop array for resolved references are created. +// We can't do this during classfile parsing, which is how the other indexes are +// patched. The other patches are applied early for some error checking +// so only defer the pseudo_strings. +void ConstantPool::patch_resolved_references( + GrowableArray* cp_patches) { + assert(EnableInvokeDynamic, ""); + for (int index = 1; index < cp_patches->length(); index++) { // Index 0 is unused + Handle patch = cp_patches->at(index); + if (patch.not_null()) { + assert (tag_at(index).is_string(), "should only be string left"); + // Patching a string means pre-resolving it. + // The spelling in the constant pool is ignored. + // The constant reference may be any object whatever. + // If it is not a real interned string, the constant is referred + // to as a "pseudo-string", and must be presented to the CP + // explicitly, because it may require scavenging. + int obj_index = cp_to_object_index(index); + pseudo_string_at_put(index, obj_index, patch()); + DEBUG_ONLY(cp_patches->at_put(index, Handle());) + } + } +#ifdef ASSERT + // Ensure that all the patches have been used. + for (int index = 0; index < cp_patches->length(); index++) { + assert(cp_patches->at(index).is_null(), + err_msg("Unused constant pool patch at %d in class file %s", + index, + InstanceKlass::cast(pool_holder())->external_name())); + } +#endif // ASSERT +} + +#ifndef PRODUCT + +// CompileTheWorld support. Preload all classes loaded references in the passed in constantpool +void ConstantPool::preload_and_initialize_all_classes(ConstantPool* obj, TRAPS) { + guarantee(obj->is_constantPool(), "object must be constant pool"); + constantPoolHandle cp(THREAD, (ConstantPool*)obj); + guarantee(cp->pool_holder() != NULL, "must be fully loaded"); + + for (int i = 0; i< cp->length(); i++) { + if (cp->tag_at(i).is_unresolved_klass()) { + // This will force loading of the class + Klass* klass = cp->klass_at(i, CHECK); + if (klass->oop_is_instance()) { + // Force initialization of class + InstanceKlass::cast(klass)->initialize(CHECK); + } + } + } +} + +#endif + + +// Printing + +void ConstantPool::print_on(outputStream* st) const { + EXCEPTION_MARK; + assert(is_constantPool(), "must be constantPool"); + st->print_cr(internal_name()); + if (flags() != 0) { + st->print(" - flags: 0x%x", flags()); + if (has_pseudo_string()) st->print(" has_pseudo_string"); + if (has_invokedynamic()) st->print(" has_invokedynamic"); + if (has_preresolution()) st->print(" has_preresolution"); + st->cr(); + } + if (pool_holder() != NULL) { + st->print_cr(" - holder: " INTPTR_FORMAT, pool_holder()); + } + st->print_cr(" - cache: " INTPTR_FORMAT, cache()); + st->print_cr(" - resolved_references: " INTPTR_FORMAT, resolved_references()); + st->print_cr(" - reference_map: " INTPTR_FORMAT, reference_map()); + + for (int index = 1; index < length(); index++) { // Index 0 is unused + ((ConstantPool*)this)->print_entry_on(index, st); + switch (tag_at(index).value()) { + case JVM_CONSTANT_Long : + case JVM_CONSTANT_Double : + index++; // Skip entry following eigth-byte constant + } + + } + st->cr(); +} + +// Print one constant pool entry +void ConstantPool::print_entry_on(const int index, outputStream* st) { + EXCEPTION_MARK; + st->print(" - %3d : ", index); + tag_at(index).print_on(st); + st->print(" : "); + switch (tag_at(index).value()) { + case JVM_CONSTANT_Class : + { Klass* k = klass_at(index, CATCH); + k->print_value_on(st); + st->print(" {0x%lx}", (address)k); + } + break; + case JVM_CONSTANT_Fieldref : + case JVM_CONSTANT_Methodref : + case JVM_CONSTANT_InterfaceMethodref : + st->print("klass_index=%d", uncached_klass_ref_index_at(index)); + st->print(" name_and_type_index=%d", uncached_name_and_type_ref_index_at(index)); + break; + case JVM_CONSTANT_String : + unresolved_string_at(index)->print_value_on(st); + break; + case JVM_CONSTANT_Object : { + oop anObj = object_at(index); + anObj->print_value_on(st); + st->print(" {0x%lx}", (address)anObj); + } break; + case JVM_CONSTANT_Integer : + st->print("%d", int_at(index)); + break; + case JVM_CONSTANT_Float : + st->print("%f", float_at(index)); + break; + case JVM_CONSTANT_Long : + st->print_jlong(long_at(index)); + break; + case JVM_CONSTANT_Double : + st->print("%lf", double_at(index)); + break; + case JVM_CONSTANT_NameAndType : + st->print("name_index=%d", name_ref_index_at(index)); + st->print(" signature_index=%d", signature_ref_index_at(index)); + break; + case JVM_CONSTANT_Utf8 : + symbol_at(index)->print_value_on(st); + break; + case JVM_CONSTANT_UnresolvedClass : // fall-through + case JVM_CONSTANT_UnresolvedClassInError: { + // unresolved_klass_at requires lock or safe world. + CPSlot entry = slot_at(index); + if (entry.is_resolved()) { + entry.get_klass()->print_value_on(st); + } else { + entry.get_symbol()->print_value_on(st); + } + } + break; + case JVM_CONSTANT_MethodHandle : + case JVM_CONSTANT_MethodHandleInError : + st->print("ref_kind=%d", method_handle_ref_kind_at(index)); + st->print(" ref_index=%d", method_handle_index_at(index)); + break; + case JVM_CONSTANT_MethodType : + case JVM_CONSTANT_MethodTypeInError : + st->print("signature_index=%d", method_type_index_at(index)); + break; + case JVM_CONSTANT_InvokeDynamic : + { + st->print("bootstrap_method_index=%d", invoke_dynamic_bootstrap_method_ref_index_at(index)); + st->print(" name_and_type_index=%d", invoke_dynamic_name_and_type_ref_index_at(index)); + int argc = invoke_dynamic_argument_count_at(index); + if (argc > 0) { + for (int arg_i = 0; arg_i < argc; arg_i++) { + int arg = invoke_dynamic_argument_index_at(index, arg_i); + st->print((arg_i == 0 ? " arguments={%d" : ", %d"), arg); + } + st->print("}"); + } + } + break; + default: + ShouldNotReachHere(); + break; + } + st->cr(); +} + +void ConstantPool::print_value_on(outputStream* st) const { + assert(is_constantPool(), "must be constantPool"); + st->print("constant pool [%d]", length()); + if (has_pseudo_string()) st->print("/pseudo_string"); + if (has_invokedynamic()) st->print("/invokedynamic"); + if (has_preresolution()) st->print("/preresolution"); + if (operands() != NULL) st->print("/operands[%d]", operands()->length()); + print_address_on(st); + st->print(" for "); + pool_holder()->print_value_on(st); + if (pool_holder() != NULL) { + bool extra = (InstanceKlass::cast(pool_holder())->constants() != this); + if (extra) st->print(" (extra)"); + } + if (cache() != NULL) { + st->print(" cache=" PTR_FORMAT, cache()); + } +} + + +// Verification + +void ConstantPool::verify_on(outputStream* st) { + guarantee(is_constantPool(), "object must be constant pool"); + for (int i = 0; i< length(); i++) { + constantTag tag = tag_at(i); + CPSlot entry = slot_at(i); + if (tag.is_klass()) { + if (entry.is_resolved()) { + guarantee(entry.get_klass()->is_metadata(), "should be metadata"); + guarantee(entry.get_klass()->is_klass(), "should be klass"); + } + } else if (tag.is_unresolved_klass()) { + if (entry.is_resolved()) { + guarantee(entry.get_klass()->is_metadata(), "should be metadata"); + guarantee(entry.get_klass()->is_klass(), "should be klass"); + } + } else if (tag.is_symbol()) { + guarantee(entry.get_symbol()->refcount() != 0, "should have nonzero reference count"); + } else if (tag.is_string()) { + guarantee(entry.get_symbol()->refcount() != 0, "should have nonzero reference count"); + } + } + if (cache() != NULL) { + // Note: cache() can be NULL before a class is completely setup or + // in temporary constant pools used during constant pool merging + guarantee(cache()->is_metadata(), "should be metadata"); + guarantee(cache()->is_constantPoolCache(), "should be constant pool cache"); + } + if (pool_holder() != NULL) { + // Note: pool_holder() can be NULL in temporary constant pools + // used during constant pool merging + guarantee(pool_holder()->is_metadata(), "should be metadata"); + guarantee(pool_holder()->is_klass(), "should be klass"); + } +} + + +void SymbolHashMap::add_entry(Symbol* sym, u2 value) { + char *str = sym->as_utf8(); + unsigned int hash = compute_hash(str, sym->utf8_length()); + unsigned int index = hash % table_size(); + + // check if already in map + // we prefer the first entry since it is more likely to be what was used in + // the class file + for (SymbolHashMapEntry *en = bucket(index); en != NULL; en = en->next()) { + assert(en->symbol() != NULL, "SymbolHashMapEntry symbol is NULL"); + if (en->hash() == hash && en->symbol() == sym) { + return; // already there + } + } + + SymbolHashMapEntry* entry = new SymbolHashMapEntry(hash, sym, value); + entry->set_next(bucket(index)); + _buckets[index].set_entry(entry); + assert(entry->symbol() != NULL, "SymbolHashMapEntry symbol is NULL"); +} + +SymbolHashMapEntry* SymbolHashMap::find_entry(Symbol* sym) { + assert(sym != NULL, "SymbolHashMap::find_entry - symbol is NULL"); + char *str = sym->as_utf8(); + int len = sym->utf8_length(); + unsigned int hash = SymbolHashMap::compute_hash(str, len); + unsigned int index = hash % table_size(); + for (SymbolHashMapEntry *en = bucket(index); en != NULL; en = en->next()) { + assert(en->symbol() != NULL, "SymbolHashMapEntry symbol is NULL"); + if (en->hash() == hash && en->symbol() == sym) { + return en; + } + } + return NULL; +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/constantPool.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/constantPool.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,928 @@ +/* + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP +#define SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP + +#include "oops/arrayOop.hpp" +#include "oops/cpCache.hpp" +#include "oops/objArrayOop.hpp" +#include "oops/symbol.hpp" +#include "oops/typeArrayOop.hpp" +#include "runtime/handles.hpp" +#include "utilities/constantTag.hpp" +#ifdef TARGET_ARCH_x86 +# include "bytes_x86.hpp" +#endif +#ifdef TARGET_ARCH_sparc +# include "bytes_sparc.hpp" +#endif +#ifdef TARGET_ARCH_zero +# include "bytes_zero.hpp" +#endif +#ifdef TARGET_ARCH_arm +# include "bytes_arm.hpp" +#endif +#ifdef TARGET_ARCH_ppc +# include "bytes_ppc.hpp" +#endif + +// A constantPool is an array containing class constants as described in the +// class file. +// +// Most of the constant pool entries are written during class parsing, which +// is safe. For klass types, the constant pool entry is +// modified when the entry is resolved. If a klass constant pool +// entry is read without a lock, only the resolved state guarantees that +// the entry in the constant pool is a klass object and not a Symbol*. + +class SymbolHashMap; + +class CPSlot VALUE_OBJ_CLASS_SPEC { + intptr_t _ptr; + public: + CPSlot(intptr_t ptr): _ptr(ptr) {} + CPSlot(Klass* ptr): _ptr((intptr_t)ptr) {} + CPSlot(Symbol* ptr): _ptr((intptr_t)ptr | 1) {} + + intptr_t value() { return _ptr; } + bool is_resolved() { return (_ptr & 1) == 0; } + bool is_unresolved() { return (_ptr & 1) == 1; } + + Symbol* get_symbol() { + assert(is_unresolved(), "bad call"); + return (Symbol*)(_ptr & ~1); + } + Klass* get_klass() { + assert(is_resolved(), "bad call"); + return (Klass*)_ptr; + } +}; + +class ConstantPool : public Metadata { + friend class VMStructs; + friend class BytecodeInterpreter; // Directly extracts an oop in the pool for fast instanceof/checkcast + friend class Universe; // For null constructor + private: + Array* _tags; // the tag array describing the constant pool's contents + ConstantPoolCache* _cache; // the cache holding interpreter runtime information + Klass* _pool_holder; // the corresponding class + Array* _operands; // for variable-sized (InvokeDynamic) nodes, usually empty + + // Array of resolved objects from the constant pool and map from resolved + // object index to original constant pool index + jobject _resolved_references; + Array* _reference_map; + + int _flags; // a few header bits to describe contents for GC + int _length; // number of elements in the array + + bool _on_stack; // Redefined method still executing refers to this constant pool. + + union { + // set for CDS to restore resolved references + int _resolved_reference_length; + // only set to non-zero if constant pool is merged by RedefineClasses + int _orig_length; + } _saved; + + Monitor* _lock; + + void set_tags(Array* tags) { _tags = tags; } + void tag_at_put(int which, jbyte t) { tags()->at_put(which, t); } + void release_tag_at_put(int which, jbyte t) { tags()->release_at_put(which, t); } + + void set_operands(Array* operands) { _operands = operands; } + + enum FlagBit { + FB_has_invokedynamic = 1, + FB_has_pseudo_string = 2, + FB_has_preresolution = 3 + }; + + int flags() const { return _flags; } + void set_flags(int f) { _flags = f; } + bool flag_at(FlagBit fb) const { return (_flags & (1 << (int)fb)) != 0; } + void set_flag_at(FlagBit fb); + // no clear_flag_at function; they only increase + + private: + intptr_t* base() const { return (intptr_t*) (((char*) this) + sizeof(ConstantPool)); } + + CPSlot slot_at(int which) { + assert(is_within_bounds(which), "index out of bounds"); + // Uses volatile because the klass slot changes without a lock. + volatile intptr_t adr = (intptr_t)OrderAccess::load_ptr_acquire(obj_at_addr_raw(which)); + assert(adr != 0 || which == 0, "cp entry for klass should not be zero"); + return CPSlot(adr); + } + + void slot_at_put(int which, CPSlot s) const { + assert(is_within_bounds(which), "index out of bounds"); + assert(s.value() != 0, "Caught something"); + *(intptr_t*)&base()[which] = s.value(); + } + intptr_t* obj_at_addr_raw(int which) const { + assert(is_within_bounds(which), "index out of bounds"); + return (intptr_t*) &base()[which]; + } + + jint* int_at_addr(int which) const { + assert(is_within_bounds(which), "index out of bounds"); + return (jint*) &base()[which]; + } + + jlong* long_at_addr(int which) const { + assert(is_within_bounds(which), "index out of bounds"); + return (jlong*) &base()[which]; + } + + jfloat* float_at_addr(int which) const { + assert(is_within_bounds(which), "index out of bounds"); + return (jfloat*) &base()[which]; + } + + jdouble* double_at_addr(int which) const { + assert(is_within_bounds(which), "index out of bounds"); + return (jdouble*) &base()[which]; + } + + ConstantPool(Array* tags); + ConstantPool() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); } + public: + static ConstantPool* allocate(ClassLoaderData* loader_data, int length, TRAPS); + + bool is_constantPool() const volatile { return true; } + + Array* tags() const { return _tags; } + Array* operands() const { return _operands; } + + bool has_pseudo_string() const { return flag_at(FB_has_pseudo_string); } + bool has_invokedynamic() const { return flag_at(FB_has_invokedynamic); } + bool has_preresolution() const { return flag_at(FB_has_preresolution); } + void set_pseudo_string() { set_flag_at(FB_has_pseudo_string); } + void set_invokedynamic() { set_flag_at(FB_has_invokedynamic); } + void set_preresolution() { set_flag_at(FB_has_preresolution); } + + // Redefine classes support. If a method refering to this constant pool + // is on the executing stack, or as a handle in vm code, this constant pool + // can't be removed from the set of previous versions saved in the instance + // class. + bool on_stack() const { return _on_stack; } + void set_on_stack(const bool value); + + // Klass holding pool + Klass* pool_holder() const { return _pool_holder; } + void set_pool_holder(Klass* k) { _pool_holder = k; } + Klass** pool_holder_addr() { return &_pool_holder; } + + // Interpreter runtime support + ConstantPoolCache* cache() const { return _cache; } + void set_cache(ConstantPoolCache* cache){ _cache = cache; } + + // Create object cache in the constant pool + void initialize_resolved_references(ClassLoaderData* loader_data, + intStack reference_map, + int constant_pool_map_length, + TRAPS); + + // resolved strings, methodHandles and callsite objects from the constant pool + objArrayOop resolved_references() const; + // mapping resolved object array indexes to cp indexes and back. + int object_to_cp_index(int index) { return _reference_map->at(index); } + int cp_to_object_index(int index); + + // Invokedynamic indexes. + // They must look completely different from normal indexes. + // The main reason is that byte swapping is sometimes done on normal indexes. + // Finally, it is helpful for debugging to tell the two apart. + static bool is_invokedynamic_index(int i) { return (i < 0); } + static int decode_invokedynamic_index(int i) { assert(is_invokedynamic_index(i), ""); return ~i; } + static int encode_invokedynamic_index(int i) { assert(!is_invokedynamic_index(i), ""); return ~i; } + + + // The invokedynamic points at a CP cache entry. This entry points back + // at the original CP entry (CONSTANT_InvokeDynamic) and also (via f2) at an entry + // in the resolved_references array (which provides the appendix argument). + int invokedynamic_cp_cache_index(int index) const { + assert (is_invokedynamic_index(index), "should be a invokedynamic index"); + int cache_index = decode_invokedynamic_index(index); + return cache_index; + } + ConstantPoolCacheEntry* invokedynamic_cp_cache_entry_at(int index) const { + // decode index that invokedynamic points to. + int cp_cache_index = invokedynamic_cp_cache_index(index); + return cache()->entry_at(cp_cache_index); + } + + // Assembly code support + static int tags_offset_in_bytes() { return offset_of(ConstantPool, _tags); } + static int cache_offset_in_bytes() { return offset_of(ConstantPool, _cache); } + static int pool_holder_offset_in_bytes() { return offset_of(ConstantPool, _pool_holder); } + static int resolved_references_offset_in_bytes() { return offset_of(ConstantPool, _resolved_references); } + static int reference_map_offset_in_bytes() { return offset_of(ConstantPool, _reference_map); } + + // Storing constants + + void klass_at_put(int which, Klass* k) { + assert(k != NULL, "resolved class shouldn't be null"); + assert(is_within_bounds(which), "index out of bounds"); + OrderAccess::release_store_ptr((Klass* volatile *)obj_at_addr_raw(which), k); + // The interpreter assumes when the tag is stored, the klass is resolved + // and the Klass* is a klass rather than a Symbol*, so we need + // hardware store ordering here. + release_tag_at_put(which, JVM_CONSTANT_Class); + } + + // For temporary use while constructing constant pool + void klass_index_at_put(int which, int name_index) { + tag_at_put(which, JVM_CONSTANT_ClassIndex); + *int_at_addr(which) = name_index; + } + + // Temporary until actual use + void unresolved_klass_at_put(int which, Symbol* s) { + release_tag_at_put(which, JVM_CONSTANT_UnresolvedClass); + slot_at_put(which, s); + } + + void method_handle_index_at_put(int which, int ref_kind, int ref_index) { + tag_at_put(which, JVM_CONSTANT_MethodHandle); + *int_at_addr(which) = ((jint) ref_index<<16) | ref_kind; + } + + void method_type_index_at_put(int which, int ref_index) { + tag_at_put(which, JVM_CONSTANT_MethodType); + *int_at_addr(which) = ref_index; + } + + void invoke_dynamic_at_put(int which, int bootstrap_specifier_index, int name_and_type_index) { + tag_at_put(which, JVM_CONSTANT_InvokeDynamic); + *int_at_addr(which) = ((jint) name_and_type_index<<16) | bootstrap_specifier_index; + } + + void unresolved_string_at_put(int which, Symbol* s) { + release_tag_at_put(which, JVM_CONSTANT_String); + *symbol_at_addr(which) = s; + } + + void int_at_put(int which, jint i) { + tag_at_put(which, JVM_CONSTANT_Integer); + *int_at_addr(which) = i; + } + + void long_at_put(int which, jlong l) { + tag_at_put(which, JVM_CONSTANT_Long); + // *long_at_addr(which) = l; + Bytes::put_native_u8((address)long_at_addr(which), *((u8*) &l)); + } + + void float_at_put(int which, jfloat f) { + tag_at_put(which, JVM_CONSTANT_Float); + *float_at_addr(which) = f; + } + + void double_at_put(int which, jdouble d) { + tag_at_put(which, JVM_CONSTANT_Double); + // *double_at_addr(which) = d; + // u8 temp = *(u8*) &d; + Bytes::put_native_u8((address) double_at_addr(which), *((u8*) &d)); + } + + Symbol** symbol_at_addr(int which) const { + assert(is_within_bounds(which), "index out of bounds"); + return (Symbol**) &base()[which]; + } + + void symbol_at_put(int which, Symbol* s) { + assert(s->refcount() != 0, "should have nonzero refcount"); + tag_at_put(which, JVM_CONSTANT_Utf8); + *symbol_at_addr(which) = s; + } + + void string_at_put(int which, int obj_index, oop str) { + resolved_references()->obj_at_put(obj_index, str); + } + + void set_object_tag_at(int which) { + release_tag_at_put(which, JVM_CONSTANT_Object); + } + + void object_at_put(int which, oop obj) { + resolved_references()->obj_at_put(cp_to_object_index(which), obj); + } + + // For temporary use while constructing constant pool + void string_index_at_put(int which, int string_index) { + tag_at_put(which, JVM_CONSTANT_StringIndex); + *int_at_addr(which) = string_index; + } + + void field_at_put(int which, int class_index, int name_and_type_index) { + tag_at_put(which, JVM_CONSTANT_Fieldref); + *int_at_addr(which) = ((jint) name_and_type_index<<16) | class_index; + } + + void method_at_put(int which, int class_index, int name_and_type_index) { + tag_at_put(which, JVM_CONSTANT_Methodref); + *int_at_addr(which) = ((jint) name_and_type_index<<16) | class_index; + } + + void interface_method_at_put(int which, int class_index, int name_and_type_index) { + tag_at_put(which, JVM_CONSTANT_InterfaceMethodref); + *int_at_addr(which) = ((jint) name_and_type_index<<16) | class_index; // Not so nice + } + + void name_and_type_at_put(int which, int name_index, int signature_index) { + tag_at_put(which, JVM_CONSTANT_NameAndType); + *int_at_addr(which) = ((jint) signature_index<<16) | name_index; // Not so nice + } + + // Tag query + + constantTag tag_at(int which) const { return (constantTag)tags()->at_acquire(which); } + + // Fetching constants + + Klass* klass_at(int which, TRAPS) { + constantPoolHandle h_this(THREAD, this); + return klass_at_impl(h_this, which, CHECK_NULL); + } + + Symbol* klass_name_at(int which); // Returns the name, w/o resolving. + + Klass* resolved_klass_at(int which) { // Used by Compiler + guarantee(tag_at(which).is_klass(), "Corrupted constant pool"); + // Must do an acquire here in case another thread resolved the klass + // behind our back, lest we later load stale values thru the oop. + return CPSlot((Klass*)OrderAccess::load_ptr_acquire(obj_at_addr_raw(which))).get_klass(); + } + + // This method should only be used with a cpool lock or during parsing or gc + Symbol* unresolved_klass_at(int which) { // Temporary until actual use + Symbol* s = CPSlot((Symbol*)OrderAccess::load_ptr_acquire(obj_at_addr_raw(which))).get_symbol(); + // check that the klass is still unresolved. + assert(tag_at(which).is_unresolved_klass(), "Corrupted constant pool"); + return s; + } + + // RedefineClasses() API support: + Symbol* klass_at_noresolve(int which) { return klass_name_at(which); } + + jint int_at(int which) { + assert(tag_at(which).is_int(), "Corrupted constant pool"); + return *int_at_addr(which); + } + + jlong long_at(int which) { + assert(tag_at(which).is_long(), "Corrupted constant pool"); + // return *long_at_addr(which); + u8 tmp = Bytes::get_native_u8((address)&base()[which]); + return *((jlong*)&tmp); + } + + jfloat float_at(int which) { + assert(tag_at(which).is_float(), "Corrupted constant pool"); + return *float_at_addr(which); + } + + jdouble double_at(int which) { + assert(tag_at(which).is_double(), "Corrupted constant pool"); + u8 tmp = Bytes::get_native_u8((address)&base()[which]); + return *((jdouble*)&tmp); + } + + Symbol* symbol_at(int which) { + assert(tag_at(which).is_utf8(), "Corrupted constant pool"); + return *symbol_at_addr(which); + } + + oop string_at(int which, int obj_index, TRAPS) { + constantPoolHandle h_this(THREAD, this); + return string_at_impl(h_this, which, obj_index, THREAD); + } + oop string_at(int which, TRAPS) { + int obj_index = cp_to_object_index(which); + return string_at(which, obj_index, THREAD); + } + + // Version that can be used before string oop array is created. + oop uncached_string_at(int which, TRAPS); + + oop object_at(int which) { + assert(tag_at(which).is_object(), "Corrupted constant pool"); + int obj_index = cp_to_object_index(which); + return resolved_references()->obj_at(obj_index); + } + + // A "pseudo-string" is an non-string oop that has found is way into + // a String entry. + // Under EnableInvokeDynamic this can happen if the user patches a live + // object into a CONSTANT_String entry of an anonymous class. + // Method oops internally created for method handles may also + // use pseudo-strings to link themselves to related metaobjects. + + bool is_pseudo_string_at(int which) { + // A pseudo string is a string that doesn't have a symbol in the cpSlot + return unresolved_string_at(which) == NULL; + } + + oop pseudo_string_at(int which, int obj_index) { + assert(tag_at(which).is_string(), "Corrupted constant pool"); + assert(unresolved_string_at(which) == NULL, "shouldn't have symbol"); + oop s = resolved_references()->obj_at(obj_index); + return s; + } + + void pseudo_string_at_put(int which, int obj_index, oop x) { + assert(EnableInvokeDynamic, ""); + set_pseudo_string(); // mark header + assert(tag_at(which).is_string(), "Corrupted constant pool"); + string_at_put(which, obj_index, x); // this works just fine + } + + // only called when we are sure a string entry is already resolved (via an + // earlier string_at call. + oop resolved_string_at(int which) { + assert(tag_at(which).is_string(), "Corrupted constant pool"); + // Must do an acquire here in case another thread resolved the klass + // behind our back, lest we later load stale values thru the oop. + // we might want a volatile_obj_at in objArrayKlass. + int obj_index = cp_to_object_index(which); + return resolved_references()->obj_at(obj_index); + } + + Symbol* unresolved_string_at(int which) { + assert(tag_at(which).is_string(), "Corrupted constant pool"); + Symbol* s = *symbol_at_addr(which); + return s; + } + + // Returns an UTF8 for a CONSTANT_String entry at a given index. + // UTF8 char* representation was chosen to avoid conversion of + // java_lang_Strings at resolved entries into Symbol*s + // or vice versa. + // Caller is responsible for checking for pseudo-strings. + char* string_at_noresolve(int which); + + jint name_and_type_at(int which) { + assert(tag_at(which).is_name_and_type(), "Corrupted constant pool"); + return *int_at_addr(which); + } + + int method_handle_ref_kind_at(int which) { + assert(tag_at(which).is_method_handle(), "Corrupted constant pool"); + return extract_low_short_from_int(*int_at_addr(which)); // mask out unwanted ref_index bits + } + int method_handle_index_at(int which) { + assert(tag_at(which).is_method_handle(), "Corrupted constant pool"); + return extract_high_short_from_int(*int_at_addr(which)); // shift out unwanted ref_kind bits + } + int method_type_index_at(int which) { + assert(tag_at(which).is_method_type(), "Corrupted constant pool"); + return *int_at_addr(which); + } + // Derived queries: + Symbol* method_handle_name_ref_at(int which) { + int member = method_handle_index_at(which); + return impl_name_ref_at(member, true); + } + Symbol* method_handle_signature_ref_at(int which) { + int member = method_handle_index_at(which); + return impl_signature_ref_at(member, true); + } + int method_handle_klass_index_at(int which) { + int member = method_handle_index_at(which); + return impl_klass_ref_index_at(member, true); + } + Symbol* method_type_signature_at(int which) { + int sym = method_type_index_at(which); + return symbol_at(sym); + } + + int invoke_dynamic_name_and_type_ref_index_at(int which) { + assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool"); + return extract_high_short_from_int(*int_at_addr(which)); + } + int invoke_dynamic_bootstrap_specifier_index(int which) { + assert(tag_at(which).value() == JVM_CONSTANT_InvokeDynamic, "Corrupted constant pool"); + return extract_low_short_from_int(*int_at_addr(which)); + } + int invoke_dynamic_operand_base(int which) { + int bootstrap_specifier_index = invoke_dynamic_bootstrap_specifier_index(which); + return operand_offset_at(operands(), bootstrap_specifier_index); + } + // The first part of the operands array consists of an index into the second part. + // Extract a 32-bit index value from the first part. + static int operand_offset_at(Array* operands, int bootstrap_specifier_index) { + int n = (bootstrap_specifier_index * 2); + assert(n >= 0 && n+2 <= operands->length(), "oob"); + // The first 32-bit index points to the beginning of the second part + // of the operands array. Make sure this index is in the first part. + DEBUG_ONLY(int second_part = build_int_from_shorts(operands->at(0), + operands->at(1))); + assert(second_part == 0 || n+2 <= second_part, "oob (2)"); + int offset = build_int_from_shorts(operands->at(n+0), + operands->at(n+1)); + // The offset itself must point into the second part of the array. + assert(offset == 0 || offset >= second_part && offset <= operands->length(), "oob (3)"); + return offset; + } + static void operand_offset_at_put(Array* operands, int bootstrap_specifier_index, int offset) { + int n = bootstrap_specifier_index * 2; + assert(n >= 0 && n+2 <= operands->length(), "oob"); + operands->at_put(n+0, extract_low_short_from_int(offset)); + operands->at_put(n+1, extract_high_short_from_int(offset)); + } + static int operand_array_length(Array* operands) { + if (operands == NULL || operands->length() == 0) return 0; + int second_part = operand_offset_at(operands, 0); + return (second_part / 2); + } + +#ifdef ASSERT + // operand tuples fit together exactly, end to end + static int operand_limit_at(Array* operands, int bootstrap_specifier_index) { + int nextidx = bootstrap_specifier_index + 1; + if (nextidx == operand_array_length(operands)) + return operands->length(); + else + return operand_offset_at(operands, nextidx); + } + int invoke_dynamic_operand_limit(int which) { + int bootstrap_specifier_index = invoke_dynamic_bootstrap_specifier_index(which); + return operand_limit_at(operands(), bootstrap_specifier_index); + } +#endif //ASSERT + + // layout of InvokeDynamic bootstrap method specifier (in second part of operands array): + enum { + _indy_bsm_offset = 0, // CONSTANT_MethodHandle bsm + _indy_argc_offset = 1, // u2 argc + _indy_argv_offset = 2 // u2 argv[argc] + }; + int invoke_dynamic_bootstrap_method_ref_index_at(int which) { + assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool"); + int op_base = invoke_dynamic_operand_base(which); + return operands()->at(op_base + _indy_bsm_offset); + } + int invoke_dynamic_argument_count_at(int which) { + assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool"); + int op_base = invoke_dynamic_operand_base(which); + int argc = operands()->at(op_base + _indy_argc_offset); + DEBUG_ONLY(int end_offset = op_base + _indy_argv_offset + argc; + int next_offset = invoke_dynamic_operand_limit(which)); + assert(end_offset == next_offset, "matched ending"); + return argc; + } + int invoke_dynamic_argument_index_at(int which, int j) { + int op_base = invoke_dynamic_operand_base(which); + DEBUG_ONLY(int argc = operands()->at(op_base + _indy_argc_offset)); + assert((uint)j < (uint)argc, "oob"); + return operands()->at(op_base + _indy_argv_offset + j); + } + + // The following methods (name/signature/klass_ref_at, klass_ref_at_noresolve, + // name_and_type_ref_index_at) all expect to be passed indices obtained + // directly from the bytecode. + // If the indices are meant to refer to fields or methods, they are + // actually rewritten constant pool cache indices. + // The routine remap_instruction_operand_from_cache manages the adjustment + // of these values back to constant pool indices. + + // There are also "uncached" versions which do not adjust the operand index; see below. + + // FIXME: Consider renaming these with a prefix "cached_" to make the distinction clear. + // In a few cases (the verifier) there are uses before a cpcache has been built, + // which are handled by a dynamic check in remap_instruction_operand_from_cache. + // FIXME: Remove the dynamic check, and adjust all callers to specify the correct mode. + + // Lookup for entries consisting of (klass_index, name_and_type index) + Klass* klass_ref_at(int which, TRAPS); + Symbol* klass_ref_at_noresolve(int which); + Symbol* name_ref_at(int which) { return impl_name_ref_at(which, false); } + Symbol* signature_ref_at(int which) { return impl_signature_ref_at(which, false); } + + int klass_ref_index_at(int which) { return impl_klass_ref_index_at(which, false); } + int name_and_type_ref_index_at(int which) { return impl_name_and_type_ref_index_at(which, false); } + + // Lookup for entries consisting of (name_index, signature_index) + int name_ref_index_at(int which_nt); // == low-order jshort of name_and_type_at(which_nt) + int signature_ref_index_at(int which_nt); // == high-order jshort of name_and_type_at(which_nt) + + BasicType basic_type_for_signature_at(int which); + + // Resolve string constants (to prevent allocation during compilation) + void resolve_string_constants(TRAPS) { + constantPoolHandle h_this(THREAD, this); + resolve_string_constants_impl(h_this, CHECK); + } + + // CDS support + void remove_unshareable_info(); + void restore_unshareable_info(TRAPS); + bool resolve_class_constants(TRAPS); + + private: + enum { _no_index_sentinel = -1, _possible_index_sentinel = -2 }; + public: + + // Resolve late bound constants. + oop resolve_constant_at(int index, TRAPS) { + constantPoolHandle h_this(THREAD, this); + return resolve_constant_at_impl(h_this, index, _no_index_sentinel, THREAD); + } + + oop resolve_cached_constant_at(int cache_index, TRAPS) { + constantPoolHandle h_this(THREAD, this); + return resolve_constant_at_impl(h_this, _no_index_sentinel, cache_index, THREAD); + } + + oop resolve_possibly_cached_constant_at(int pool_index, TRAPS) { + constantPoolHandle h_this(THREAD, this); + return resolve_constant_at_impl(h_this, pool_index, _possible_index_sentinel, THREAD); + } + + oop resolve_bootstrap_specifier_at(int index, TRAPS) { + constantPoolHandle h_this(THREAD, this); + return resolve_bootstrap_specifier_at_impl(h_this, index, THREAD); + } + + // Klass name matches name at offset + bool klass_name_at_matches(instanceKlassHandle k, int which); + + // Sizing + int length() const { return _length; } + void set_length(int length) { _length = length; } + + // Tells whether index is within bounds. + bool is_within_bounds(int index) const { + return 0 <= index && index < length(); + } + + static int header_size() { return sizeof(ConstantPool)/HeapWordSize; } + static int size(int length) { return align_object_size(header_size() + length); } + int size() const { return size(length()); } + + friend class ClassFileParser; + friend class SystemDictionary; + + // Used by compiler to prevent classloading. + static Method* method_at_if_loaded (constantPoolHandle this_oop, int which); + static bool has_appendix_at_if_loaded (constantPoolHandle this_oop, int which); + static oop appendix_at_if_loaded (constantPoolHandle this_oop, int which); + static Klass* klass_at_if_loaded (constantPoolHandle this_oop, int which); + static Klass* klass_ref_at_if_loaded (constantPoolHandle this_oop, int which); + // Same as above - but does LinkResolving. + static Klass* klass_ref_at_if_loaded_check(constantPoolHandle this_oop, int which, TRAPS); + + // Routines currently used for annotations (only called by jvm.cpp) but which might be used in the + // future by other Java code. These take constant pool indices rather than + // constant pool cache indices as do the peer methods above. + Symbol* uncached_klass_ref_at_noresolve(int which); + Symbol* uncached_name_ref_at(int which) { return impl_name_ref_at(which, true); } + Symbol* uncached_signature_ref_at(int which) { return impl_signature_ref_at(which, true); } + int uncached_klass_ref_index_at(int which) { return impl_klass_ref_index_at(which, true); } + int uncached_name_and_type_ref_index_at(int which) { return impl_name_and_type_ref_index_at(which, true); } + + // Sharing + int pre_resolve_shared_klasses(TRAPS); + + // Debugging + const char* printable_name_at(int which) PRODUCT_RETURN0; + +#ifdef ASSERT + enum { CPCACHE_INDEX_TAG = 0x10000 }; // helps keep CP cache indices distinct from CP indices +#else + enum { CPCACHE_INDEX_TAG = 0 }; // in product mode, this zero value is a no-op +#endif //ASSERT + + static int decode_cpcache_index(int raw_index, bool invokedynamic_ok = false) { + if (invokedynamic_ok && is_invokedynamic_index(raw_index)) + return decode_invokedynamic_index(raw_index); + else + return raw_index - CPCACHE_INDEX_TAG; + } + + private: + + void set_resolved_references(jobject s) { _resolved_references = s; } + Array* reference_map() const { return _reference_map; } + void set_reference_map(Array* o) { _reference_map = o; } + + // patch JSR 292 resolved references after the class is linked. + void patch_resolved_references(GrowableArray* cp_patches); + + Symbol* impl_name_ref_at(int which, bool uncached); + Symbol* impl_signature_ref_at(int which, bool uncached); + int impl_klass_ref_index_at(int which, bool uncached); + int impl_name_and_type_ref_index_at(int which, bool uncached); + + int remap_instruction_operand_from_cache(int operand); // operand must be biased by CPCACHE_INDEX_TAG + + // Used while constructing constant pool (only by ClassFileParser) + jint klass_index_at(int which) { + assert(tag_at(which).is_klass_index(), "Corrupted constant pool"); + return *int_at_addr(which); + } + + jint string_index_at(int which) { + assert(tag_at(which).is_string_index(), "Corrupted constant pool"); + return *int_at_addr(which); + } + + // Performs the LinkResolver checks + static void verify_constant_pool_resolve(constantPoolHandle this_oop, KlassHandle klass, TRAPS); + + // Implementation of methods that needs an exposed 'this' pointer, in order to + // handle GC while executing the method + static Klass* klass_at_impl(constantPoolHandle this_oop, int which, TRAPS); + static oop string_at_impl(constantPoolHandle this_oop, int which, int obj_index, TRAPS); + + // Resolve string constants (to prevent allocation during compilation) + static void resolve_string_constants_impl(constantPoolHandle this_oop, TRAPS); + + static oop resolve_constant_at_impl(constantPoolHandle this_oop, int index, int cache_index, TRAPS); + static void save_and_throw_exception(constantPoolHandle this_oop, int which, int tag_value, TRAPS); + static oop resolve_bootstrap_specifier_at_impl(constantPoolHandle this_oop, int index, TRAPS); + + public: + // Merging ConstantPool* support: + bool compare_entry_to(int index1, constantPoolHandle cp2, int index2, TRAPS); + void copy_cp_to(int start_i, int end_i, constantPoolHandle to_cp, int to_i, TRAPS) { + constantPoolHandle h_this(THREAD, this); + copy_cp_to_impl(h_this, start_i, end_i, to_cp, to_i, THREAD); + } + static void copy_cp_to_impl(constantPoolHandle from_cp, int start_i, int end_i, constantPoolHandle to_cp, int to_i, TRAPS); + static void copy_entry_to(constantPoolHandle from_cp, int from_i, constantPoolHandle to_cp, int to_i, TRAPS); + int find_matching_entry(int pattern_i, constantPoolHandle search_cp, TRAPS); + int orig_length() const { return _saved._orig_length; } + void set_orig_length(int orig_length) { _saved._orig_length = orig_length; } + + void set_resolved_reference_length(int length) { _saved._resolved_reference_length = length; } + int resolved_reference_length() const { return _saved._resolved_reference_length; } + void set_lock(Monitor* lock) { _lock = lock; } + Monitor* lock() { return _lock; } + + // Decrease ref counts of symbols that are in the constant pool + // when the holder class is unloaded + void unreference_symbols(); + + // Deallocate constant pool for RedefineClasses + void deallocate_contents(ClassLoaderData* loader_data); + void release_C_heap_structures(); + + // JVMTI accesss - GetConstantPool, RetransformClasses, ... + friend class JvmtiConstantPoolReconstituter; + + private: + jint cpool_entry_size(jint idx); + jint hash_entries_to(SymbolHashMap *symmap, SymbolHashMap *classmap); + + // Copy cpool bytes into byte array. + // Returns: + // int > 0, count of the raw cpool bytes that have been copied + // 0, OutOfMemory error + // -1, Internal error + int copy_cpool_bytes(int cpool_size, + SymbolHashMap* tbl, + unsigned char *bytes); + + public: + // Verify + void verify_on(outputStream* st); + + // Printing + void print_on(outputStream* st) const; + void print_value_on(outputStream* st) const; + void print_entry_on(int index, outputStream* st); + + const char* internal_name() const { return "{constant pool}"; } + +#ifndef PRODUCT + // Compile the world support + static void preload_and_initialize_all_classes(ConstantPool* constant_pool, TRAPS); +#endif +}; + +class SymbolHashMapEntry : public CHeapObj { + private: + unsigned int _hash; // 32-bit hash for item + SymbolHashMapEntry* _next; // Next element in the linked list for this bucket + Symbol* _symbol; // 1-st part of the mapping: symbol => value + u2 _value; // 2-nd part of the mapping: symbol => value + + public: + unsigned int hash() const { return _hash; } + void set_hash(unsigned int hash) { _hash = hash; } + + SymbolHashMapEntry* next() const { return _next; } + void set_next(SymbolHashMapEntry* next) { _next = next; } + + Symbol* symbol() const { return _symbol; } + void set_symbol(Symbol* sym) { _symbol = sym; } + + u2 value() const { return _value; } + void set_value(u2 value) { _value = value; } + + SymbolHashMapEntry(unsigned int hash, Symbol* symbol, u2 value) + : _hash(hash), _symbol(symbol), _value(value), _next(NULL) {} + +}; // End SymbolHashMapEntry class + + +class SymbolHashMapBucket : public CHeapObj { + +private: + SymbolHashMapEntry* _entry; + +public: + SymbolHashMapEntry* entry() const { return _entry; } + void set_entry(SymbolHashMapEntry* entry) { _entry = entry; } + void clear() { _entry = NULL; } + +}; // End SymbolHashMapBucket class + + +class SymbolHashMap: public CHeapObj { + + private: + // Default number of entries in the table + enum SymbolHashMap_Constants { + _Def_HashMap_Size = 256 + }; + + int _table_size; + SymbolHashMapBucket* _buckets; + + void initialize_table(int table_size) { + _table_size = table_size; + _buckets = NEW_C_HEAP_ARRAY(SymbolHashMapBucket, table_size, mtSymbol); + for (int index = 0; index < table_size; index++) { + _buckets[index].clear(); + } + } + + public: + + int table_size() const { return _table_size; } + + SymbolHashMap() { initialize_table(_Def_HashMap_Size); } + SymbolHashMap(int table_size) { initialize_table(table_size); } + + // hash P(31) from Kernighan & Ritchie + static unsigned int compute_hash(const char* str, int len) { + unsigned int hash = 0; + while (len-- > 0) { + hash = 31*hash + (unsigned) *str; + str++; + } + return hash; + } + + SymbolHashMapEntry* bucket(int i) { + return _buckets[i].entry(); + } + + void add_entry(Symbol* sym, u2 value); + SymbolHashMapEntry* find_entry(Symbol* sym); + + u2 symbol_to_value(Symbol* sym) { + SymbolHashMapEntry *entry = find_entry(sym); + return (entry == NULL) ? 0 : entry->value(); + } + + ~SymbolHashMap() { + SymbolHashMapEntry* next; + for (int i = 0; i < _table_size; i++) { + for (SymbolHashMapEntry* cur = bucket(i); cur != NULL; cur = next) { + next = cur->next(); + delete(cur); + } + } + delete _buckets; + } +}; // End SymbolHashMap class + +#endif // SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/constantPoolKlass.cpp --- a/src/share/vm/oops/constantPoolKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,543 +0,0 @@ -/* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/javaClasses.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/oopFactory.hpp" -#include "memory/permGen.hpp" -#include "memory/universe.inline.hpp" -#include "oops/constantPoolKlass.hpp" -#include "oops/constantPoolOop.hpp" -#include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" -#include "oops/symbol.hpp" -#include "runtime/handles.inline.hpp" -#ifdef TARGET_OS_FAMILY_linux -# include "thread_linux.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_solaris -# include "thread_solaris.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_windows -# include "thread_windows.inline.hpp" -#endif -#ifdef TARGET_OS_FAMILY_bsd -# include "thread_bsd.inline.hpp" -#endif -#ifndef SERIALGC -#include "gc_implementation/parNew/parOopClosures.inline.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" -#include "memory/cardTableRS.hpp" -#include "oops/oop.pcgc.inline.hpp" -#endif - -constantPoolOop constantPoolKlass::allocate(int length, bool is_conc_safe, TRAPS) { - int size = constantPoolOopDesc::object_size(length); - KlassHandle klass (THREAD, as_klassOop()); - assert(klass()->is_oop(), "Can't be null, else handlizing of c below won't work"); - constantPoolHandle pool; - { - constantPoolOop c = - (constantPoolOop)CollectedHeap::permanent_obj_allocate(klass, size, CHECK_NULL); - assert(c->klass_or_null() != NULL, "Handlizing below won't work"); - pool = constantPoolHandle(THREAD, c); - } - - pool->set_length(length); - pool->set_tags(NULL); - pool->set_cache(NULL); - pool->set_operands(NULL); - pool->set_pool_holder(NULL); - pool->set_flags(0); - // only set to non-zero if constant pool is merged by RedefineClasses - pool->set_orig_length(0); - // if constant pool may change during RedefineClasses, it is created - // unsafe for GC concurrent processing. - pool->set_is_conc_safe(is_conc_safe); - // all fields are initialized; needed for GC - - // Note: because we may be in this "conc_unsafe" state when allocating - // t_oop below, which may in turn cause a GC, it is imperative that our - // size be correct, consistent and henceforth stable, at this stage. - assert(pool->is_oop() && pool->is_parsable(), "Else size() below is unreliable"); - assert(size == pool->size(), "size() is wrong"); - - // initialize tag array - typeArrayOop t_oop = oopFactory::new_permanent_byteArray(length, CHECK_NULL); - typeArrayHandle tags (THREAD, t_oop); - for (int index = 0; index < length; index++) { - tags()->byte_at_put(index, JVM_CONSTANT_Invalid); - } - pool->set_tags(tags()); - - // Check that our size was stable at its old value. - assert(size == pool->size(), "size() changed"); - return pool(); -} - -klassOop constantPoolKlass::create_klass(TRAPS) { - constantPoolKlass o; - KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); - KlassHandle k = base_create_klass(h_this_klass, header_size(), o.vtbl_value(), CHECK_NULL); - // Make sure size calculation is right - assert(k()->size() == align_object_size(header_size()), "wrong size for object"); - java_lang_Class::create_mirror(k, CHECK_NULL); // Allocate mirror - return k(); -} - -int constantPoolKlass::oop_size(oop obj) const { - assert(obj->is_constantPool(), "must be constantPool"); - return constantPoolOop(obj)->object_size(); -} - - -void constantPoolKlass::oop_follow_contents(oop obj) { - assert (obj->is_constantPool(), "obj must be constant pool"); - constantPoolOop cp = (constantPoolOop) obj; - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constantPoolKlassObj never moves. - - // If the tags array is null we are in the middle of allocating this constant pool - if (cp->tags() != NULL) { - // gc of constant pool contents - oop* base = (oop*)cp->base(); - for (int i = 0; i < cp->length(); i++) { - if (cp->is_pointer_entry(i)) { - if (*base != NULL) MarkSweep::mark_and_push(base); - } - base++; - } - // gc of constant pool instance variables - MarkSweep::mark_and_push(cp->tags_addr()); - MarkSweep::mark_and_push(cp->cache_addr()); - MarkSweep::mark_and_push(cp->operands_addr()); - MarkSweep::mark_and_push(cp->pool_holder_addr()); - } -} - -#ifndef SERIALGC -void constantPoolKlass::oop_follow_contents(ParCompactionManager* cm, - oop obj) { - assert (obj->is_constantPool(), "obj must be constant pool"); - constantPoolOop cp = (constantPoolOop) obj; - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constantPoolKlassObj never moves. - - // If the tags array is null we are in the middle of allocating this constant - // pool. - if (cp->tags() != NULL) { - // gc of constant pool contents - oop* base = (oop*)cp->base(); - for (int i = 0; i < cp->length(); i++) { - if (cp->is_pointer_entry(i)) { - if (*base != NULL) PSParallelCompact::mark_and_push(cm, base); - } - base++; - } - // gc of constant pool instance variables - PSParallelCompact::mark_and_push(cm, cp->tags_addr()); - PSParallelCompact::mark_and_push(cm, cp->cache_addr()); - PSParallelCompact::mark_and_push(cm, cp->operands_addr()); - PSParallelCompact::mark_and_push(cm, cp->pool_holder_addr()); - } -} -#endif // SERIALGC - - -int constantPoolKlass::oop_adjust_pointers(oop obj) { - assert (obj->is_constantPool(), "obj must be constant pool"); - constantPoolOop cp = (constantPoolOop) obj; - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = cp->object_size(); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constantPoolKlassObj never moves. - - // If the tags array is null we are in the middle of allocating this constant - // pool. - if (cp->tags() != NULL) { - oop* base = (oop*)cp->base(); - for (int i = 0; i< cp->length(); i++) { - if (cp->is_pointer_entry(i)) { - MarkSweep::adjust_pointer(base); - } - base++; - } - } - MarkSweep::adjust_pointer(cp->tags_addr()); - MarkSweep::adjust_pointer(cp->cache_addr()); - MarkSweep::adjust_pointer(cp->operands_addr()); - MarkSweep::adjust_pointer(cp->pool_holder_addr()); - return size; -} - - -int constantPoolKlass::oop_oop_iterate(oop obj, OopClosure* blk) { - assert (obj->is_constantPool(), "obj must be constant pool"); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constantPoolKlassObj never moves. - constantPoolOop cp = (constantPoolOop) obj; - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = cp->object_size(); - - // If the tags array is null we are in the middle of allocating this constant - // pool. - if (cp->tags() != NULL) { - oop* base = (oop*)cp->base(); - for (int i = 0; i < cp->length(); i++) { - if (cp->is_pointer_entry(i)) { - blk->do_oop(base); - } - base++; - } - } - blk->do_oop(cp->tags_addr()); - blk->do_oop(cp->cache_addr()); - blk->do_oop(cp->operands_addr()); - blk->do_oop(cp->pool_holder_addr()); - return size; -} - - -int constantPoolKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { - assert (obj->is_constantPool(), "obj must be constant pool"); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constantPoolKlassObj never moves. - constantPoolOop cp = (constantPoolOop) obj; - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = cp->object_size(); - - // If the tags array is null we are in the middle of allocating this constant - // pool. - if (cp->tags() != NULL) { - oop* base = (oop*)cp->base(); - for (int i = 0; i < cp->length(); i++) { - if (mr.contains(base)) { - if (cp->is_pointer_entry(i)) { - blk->do_oop(base); - } - } - base++; - } - } - oop* addr; - addr = cp->tags_addr(); - if (mr.contains(addr)) blk->do_oop(addr); - addr = cp->cache_addr(); - if (mr.contains(addr)) blk->do_oop(addr); - addr = cp->operands_addr(); - if (mr.contains(addr)) blk->do_oop(addr); - addr = cp->pool_holder_addr(); - if (mr.contains(addr)) blk->do_oop(addr); - return size; -} - -bool constantPoolKlass::oop_is_conc_safe(oop obj) const { - assert(obj->is_constantPool(), "must be constantPool"); - return constantPoolOop(obj)->is_conc_safe(); -} - -#ifndef SERIALGC -int constantPoolKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { - assert (obj->is_constantPool(), "obj must be constant pool"); - constantPoolOop cp = (constantPoolOop) obj; - - // If the tags array is null we are in the middle of allocating this constant - // pool. - if (cp->tags() != NULL) { - oop* base = (oop*)cp->base(); - for (int i = 0; i < cp->length(); ++i, ++base) { - if (cp->is_pointer_entry(i)) { - PSParallelCompact::adjust_pointer(base); - } - } - } - PSParallelCompact::adjust_pointer(cp->tags_addr()); - PSParallelCompact::adjust_pointer(cp->cache_addr()); - PSParallelCompact::adjust_pointer(cp->operands_addr()); - PSParallelCompact::adjust_pointer(cp->pool_holder_addr()); - return cp->object_size(); -} - -void constantPoolKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { - assert(obj->is_constantPool(), "should be constant pool"); - constantPoolOop cp = (constantPoolOop) obj; - if (cp->tags() != NULL) { - for (int i = 1; i < cp->length(); ++i) { - if (cp->is_pointer_entry(i)) { - oop* base = cp->obj_at_addr_raw(i); - if (PSScavenge::should_scavenge(base)) { - pm->claim_or_forward_depth(base); - } - } - } - } -} -#endif // SERIALGC - -// Printing - -void constantPoolKlass::oop_print_on(oop obj, outputStream* st) { - EXCEPTION_MARK; - oop anObj; - assert(obj->is_constantPool(), "must be constantPool"); - Klass::oop_print_on(obj, st); - constantPoolOop cp = constantPoolOop(obj); - if (cp->flags() != 0) { - st->print(" - flags: 0x%x", cp->flags()); - if (cp->has_pseudo_string()) st->print(" has_pseudo_string"); - if (cp->has_invokedynamic()) st->print(" has_invokedynamic"); - if (cp->has_preresolution()) st->print(" has_preresolution"); - st->cr(); - } - if (cp->pool_holder() != NULL) { - bool extra = (instanceKlass::cast(cp->pool_holder())->constants() != cp); - st->print_cr(" - holder: " INTPTR_FORMAT "%s", cp->pool_holder(), (extra? " (extra)" : "")); - } - st->print_cr(" - cache: " INTPTR_FORMAT, cp->cache()); - for (int index = 1; index < cp->length(); index++) { // Index 0 is unused - st->print(" - %3d : ", index); - cp->tag_at(index).print_on(st); - st->print(" : "); - switch (cp->tag_at(index).value()) { - case JVM_CONSTANT_Class : - { anObj = cp->klass_at(index, CATCH); - anObj->print_value_on(st); - st->print(" {0x%lx}", (address)anObj); - } - break; - case JVM_CONSTANT_Fieldref : - case JVM_CONSTANT_Methodref : - case JVM_CONSTANT_InterfaceMethodref : - st->print("klass_index=%d", cp->uncached_klass_ref_index_at(index)); - st->print(" name_and_type_index=%d", cp->uncached_name_and_type_ref_index_at(index)); - break; - case JVM_CONSTANT_UnresolvedString : - case JVM_CONSTANT_String : - if (cp->is_pseudo_string_at(index)) { - anObj = cp->pseudo_string_at(index); - } else { - anObj = cp->string_at(index, CATCH); - } - anObj->print_value_on(st); - st->print(" {0x%lx}", (address)anObj); - break; - case JVM_CONSTANT_Object : - anObj = cp->object_at(index); - anObj->print_value_on(st); - st->print(" {0x%lx}", (address)anObj); - break; - case JVM_CONSTANT_Integer : - st->print("%d", cp->int_at(index)); - break; - case JVM_CONSTANT_Float : - st->print("%f", cp->float_at(index)); - break; - case JVM_CONSTANT_Long : - st->print_jlong(cp->long_at(index)); - index++; // Skip entry following eigth-byte constant - break; - case JVM_CONSTANT_Double : - st->print("%lf", cp->double_at(index)); - index++; // Skip entry following eigth-byte constant - break; - case JVM_CONSTANT_NameAndType : - st->print("name_index=%d", cp->name_ref_index_at(index)); - st->print(" signature_index=%d", cp->signature_ref_index_at(index)); - break; - case JVM_CONSTANT_Utf8 : - cp->symbol_at(index)->print_value_on(st); - break; - case JVM_CONSTANT_UnresolvedClass : // fall-through - case JVM_CONSTANT_UnresolvedClassInError: { - // unresolved_klass_at requires lock or safe world. - CPSlot entry = cp->slot_at(index); - if (entry.is_oop()) { - entry.get_oop()->print_value_on(st); - } else { - entry.get_symbol()->print_value_on(st); - } - } - break; - case JVM_CONSTANT_MethodHandle : - st->print("ref_kind=%d", cp->method_handle_ref_kind_at(index)); - st->print(" ref_index=%d", cp->method_handle_index_at(index)); - break; - case JVM_CONSTANT_MethodType : - st->print("signature_index=%d", cp->method_type_index_at(index)); - break; - case JVM_CONSTANT_InvokeDynamic : - { - st->print("bootstrap_method_index=%d", cp->invoke_dynamic_bootstrap_method_ref_index_at(index)); - st->print(" name_and_type_index=%d", cp->invoke_dynamic_name_and_type_ref_index_at(index)); - int argc = cp->invoke_dynamic_argument_count_at(index); - if (argc > 0) { - for (int arg_i = 0; arg_i < argc; arg_i++) { - int arg = cp->invoke_dynamic_argument_index_at(index, arg_i); - st->print((arg_i == 0 ? " arguments={%d" : ", %d"), arg); - } - st->print("}"); - } - } - break; - default: - ShouldNotReachHere(); - break; - } - st->cr(); - } - st->cr(); -} - -void constantPoolKlass::oop_print_value_on(oop obj, outputStream* st) { - assert(obj->is_constantPool(), "must be constantPool"); - constantPoolOop cp = constantPoolOop(obj); - st->print("constant pool [%d]", cp->length()); - if (cp->has_pseudo_string()) st->print("/pseudo_string"); - if (cp->has_invokedynamic()) st->print("/invokedynamic"); - if (cp->has_preresolution()) st->print("/preresolution"); - if (cp->operands() != NULL) st->print("/operands[%d]", cp->operands()->length()); - cp->print_address_on(st); - st->print(" for "); - cp->pool_holder()->print_value_on(st); - if (cp->pool_holder() != NULL) { - bool extra = (instanceKlass::cast(cp->pool_holder())->constants() != cp); - if (extra) st->print(" (extra)"); - } - if (cp->cache() != NULL) { - st->print(" cache=" PTR_FORMAT, cp->cache()); - } -} - -const char* constantPoolKlass::internal_name() const { - return "{constant pool}"; -} - -// Verification - -void constantPoolKlass::oop_verify_on(oop obj, outputStream* st) { - Klass::oop_verify_on(obj, st); - guarantee(obj->is_constantPool(), "object must be constant pool"); - constantPoolOop cp = constantPoolOop(obj); - guarantee(cp->is_perm(), "should be in permspace"); - if (!cp->partially_loaded()) { - for (int i = 0; i< cp->length(); i++) { - constantTag tag = cp->tag_at(i); - CPSlot entry = cp->slot_at(i); - if (tag.is_klass()) { - if (entry.is_oop()) { - guarantee(entry.get_oop()->is_perm(), "should be in permspace"); - guarantee(entry.get_oop()->is_klass(), "should be klass"); - } - } else if (tag.is_unresolved_klass()) { - if (entry.is_oop()) { - guarantee(entry.get_oop()->is_perm(), "should be in permspace"); - guarantee(entry.get_oop()->is_klass(), "should be klass"); - } - } else if (tag.is_symbol()) { - guarantee(entry.get_symbol()->refcount() != 0, "should have nonzero reference count"); - } else if (tag.is_unresolved_string()) { - if (entry.is_oop()) { - guarantee(entry.get_oop()->is_perm(), "should be in permspace"); - guarantee(entry.get_oop()->is_instance(), "should be instance"); - } - else { - guarantee(entry.get_symbol()->refcount() != 0, "should have nonzero reference count"); - } - } else if (tag.is_string()) { - if (!cp->has_pseudo_string()) { - if (entry.is_oop()) { - guarantee(!JavaObjectsInPerm || entry.get_oop()->is_perm(), - "should be in permspace"); - guarantee(entry.get_oop()->is_instance(), "should be instance"); - } - } else { - // can be non-perm, can be non-instance (array) - } - } else if (tag.is_object()) { - assert(entry.get_oop()->is_oop(), "should be some valid oop"); - } else { - assert(!cp->is_pointer_entry(i), "unhandled oop type in constantPoolKlass::verify_on"); - } - } - guarantee(cp->tags()->is_perm(), "should be in permspace"); - guarantee(cp->tags()->is_typeArray(), "should be type array"); - if (cp->cache() != NULL) { - // Note: cache() can be NULL before a class is completely setup or - // in temporary constant pools used during constant pool merging - guarantee(cp->cache()->is_perm(), "should be in permspace"); - guarantee(cp->cache()->is_constantPoolCache(), "should be constant pool cache"); - } - if (cp->operands() != NULL) { - guarantee(cp->operands()->is_perm(), "should be in permspace"); - guarantee(cp->operands()->is_typeArray(), "should be type array"); - } - if (cp->pool_holder() != NULL) { - // Note: pool_holder() can be NULL in temporary constant pools - // used during constant pool merging - guarantee(cp->pool_holder()->is_perm(), "should be in permspace"); - guarantee(cp->pool_holder()->is_klass(), "should be klass"); - } - } -} - -bool constantPoolKlass::oop_partially_loaded(oop obj) const { - assert(obj->is_constantPool(), "object must be constant pool"); - constantPoolOop cp = constantPoolOop(obj); - return cp->tags() == NULL || cp->pool_holder() == (klassOop) cp; // Check whether pool holder points to self -} - - -void constantPoolKlass::oop_set_partially_loaded(oop obj) { - assert(obj->is_constantPool(), "object must be constant pool"); - constantPoolOop cp = constantPoolOop(obj); - assert(cp->pool_holder() == NULL, "just checking"); - cp->set_pool_holder((klassOop) cp); // Temporarily set pool holder to point to self -} - -#ifndef PRODUCT -// CompileTheWorld support. Preload all classes loaded references in the passed in constantpool -void constantPoolKlass::preload_and_initialize_all_classes(oop obj, TRAPS) { - guarantee(obj->is_constantPool(), "object must be constant pool"); - constantPoolHandle cp(THREAD, (constantPoolOop)obj); - guarantee(!cp->partially_loaded(), "must be fully loaded"); - - for (int i = 0; i< cp->length(); i++) { - if (cp->tag_at(i).is_unresolved_klass()) { - // This will force loading of the class - klassOop klass = cp->klass_at(i, CHECK); - if (klass->klass_part()->oop_is_instance()) { - // Force initialization of class - instanceKlass::cast(klass)->initialize(CHECK); - } - } - } -} - -#endif diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/constantPoolKlass.hpp --- a/src/share/vm/oops/constantPoolKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -/* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_CONSTANTPOOLKLASS_HPP -#define SHARE_VM_OOPS_CONSTANTPOOLKLASS_HPP - -#include "oops/arrayKlass.hpp" -#include "oops/instanceKlass.hpp" - -// A constantPoolKlass is the klass of a constantPoolOop - -class constantPoolKlass : public Klass { - juint _alloc_size; // allocation profiling support - public: - // Dispatched klass operations - bool oop_is_constantPool() const { return true; } - int oop_size(oop obj) const; - int klass_oop_size() const { return object_size(); } - - // Allocation - DEFINE_ALLOCATE_PERMANENT(constantPoolKlass); - constantPoolOop allocate(int length, bool is_conc_safe, TRAPS); - static klassOop create_klass(TRAPS); - - // Casting from klassOop - static constantPoolKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_constantPool(), "cast to constantPoolKlass"); - return (constantPoolKlass*) k->klass_part(); - } - - // Sizing - static int header_size() { return oopDesc::header_size() + sizeof(constantPoolKlass)/HeapWordSize; } - int object_size() const { return align_object_size(header_size()); } - - // Garbage collection - // Returns true is the object is safe for GC concurrent processing. - virtual bool oop_is_conc_safe(oop obj) const; - void oop_follow_contents(oop obj); - int oop_adjust_pointers(oop obj); - - // Parallel Scavenge and Parallel Old - PARALLEL_GC_DECLS - - // Iterators - int oop_oop_iterate(oop obj, OopClosure* blk); - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr); - - // Allocation profiling support - juint alloc_size() const { return _alloc_size; } - void set_alloc_size(juint n) { _alloc_size = n; } - - // Printing - void oop_print_value_on(oop obj, outputStream* st); - void oop_print_on(oop obj, outputStream* st); - - // Verification - const char* internal_name() const; - void oop_verify_on(oop obj, outputStream* st); - // tells whether obj is partially constructed (gc during class loading) - bool oop_partially_loaded(oop obj) const; - void oop_set_partially_loaded(oop obj); -#ifndef PRODUCT - // Compile the world support - static void preload_and_initialize_all_classes(oop constant_pool, TRAPS); -#endif -}; - -#endif // SHARE_VM_OOPS_CONSTANTPOOLKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/constantPoolOop.cpp --- a/src/share/vm/oops/constantPoolOop.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1814 +0,0 @@ -/* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/javaClasses.hpp" -#include "classfile/symbolTable.hpp" -#include "classfile/systemDictionary.hpp" -#include "classfile/vmSymbols.hpp" -#include "interpreter/linkResolver.hpp" -#include "memory/oopFactory.hpp" -#include "memory/universe.inline.hpp" -#include "oops/constantPoolOop.hpp" -#include "oops/instanceKlass.hpp" -#include "oops/objArrayKlass.hpp" -#include "oops/oop.inline.hpp" -#include "runtime/fieldType.hpp" -#include "runtime/init.hpp" -#include "runtime/signature.hpp" -#include "runtime/vframe.hpp" - -void constantPoolOopDesc::set_flag_at(FlagBit fb) { - const int MAX_STATE_CHANGES = 2; - for (int i = MAX_STATE_CHANGES + 10; i > 0; i--) { - int oflags = _flags; - int nflags = oflags | (1 << (int)fb); - if (Atomic::cmpxchg(nflags, &_flags, oflags) == oflags) - return; - } - assert(false, "failed to cmpxchg flags"); - _flags |= (1 << (int)fb); // better than nothing -} - -klassOop constantPoolOopDesc::klass_at_impl(constantPoolHandle this_oop, int which, TRAPS) { - // A resolved constantPool entry will contain a klassOop, otherwise a Symbol*. - // It is not safe to rely on the tag bit's here, since we don't have a lock, and the entry and - // tag is not updated atomicly. - CPSlot entry = this_oop->slot_at(which); - if (entry.is_oop()) { - assert(entry.get_oop()->is_klass(), "must be"); - // Already resolved - return entry. - return (klassOop)entry.get_oop(); - } - - // Acquire lock on constant oop while doing update. After we get the lock, we check if another object - // already has updated the object - assert(THREAD->is_Java_thread(), "must be a Java thread"); - bool do_resolve = false; - bool in_error = false; - - Symbol* name = NULL; - Handle loader; - { ObjectLocker ol(this_oop, THREAD); - - if (this_oop->tag_at(which).is_unresolved_klass()) { - if (this_oop->tag_at(which).is_unresolved_klass_in_error()) { - in_error = true; - } else { - do_resolve = true; - name = this_oop->unresolved_klass_at(which); - loader = Handle(THREAD, instanceKlass::cast(this_oop->pool_holder())->class_loader()); - } - } - } // unlocking constantPool - - - // The original attempt to resolve this constant pool entry failed so find the - // original error and throw it again (JVMS 5.4.3). - if (in_error) { - Symbol* error = SystemDictionary::find_resolution_error(this_oop, which); - guarantee(error != (Symbol*)NULL, "tag mismatch with resolution error table"); - ResourceMark rm; - // exception text will be the class name - const char* className = this_oop->unresolved_klass_at(which)->as_C_string(); - THROW_MSG_0(error, className); - } - - if (do_resolve) { - // this_oop must be unlocked during resolve_or_fail - oop protection_domain = Klass::cast(this_oop->pool_holder())->protection_domain(); - Handle h_prot (THREAD, protection_domain); - klassOop k_oop = SystemDictionary::resolve_or_fail(name, loader, h_prot, true, THREAD); - KlassHandle k; - if (!HAS_PENDING_EXCEPTION) { - k = KlassHandle(THREAD, k_oop); - // Do access check for klasses - verify_constant_pool_resolve(this_oop, k, THREAD); - } - - // Failed to resolve class. We must record the errors so that subsequent attempts - // to resolve this constant pool entry fail with the same error (JVMS 5.4.3). - if (HAS_PENDING_EXCEPTION) { - ResourceMark rm; - Symbol* error = PENDING_EXCEPTION->klass()->klass_part()->name(); - - bool throw_orig_error = false; - { - ObjectLocker ol (this_oop, THREAD); - - // some other thread has beaten us and has resolved the class. - if (this_oop->tag_at(which).is_klass()) { - CLEAR_PENDING_EXCEPTION; - entry = this_oop->resolved_klass_at(which); - return (klassOop)entry.get_oop(); - } - - if (!PENDING_EXCEPTION-> - is_a(SystemDictionary::LinkageError_klass())) { - // Just throw the exception and don't prevent these classes from - // being loaded due to virtual machine errors like StackOverflow - // and OutOfMemoryError, etc, or if the thread was hit by stop() - // Needs clarification to section 5.4.3 of the VM spec (see 6308271) - } - else if (!this_oop->tag_at(which).is_unresolved_klass_in_error()) { - SystemDictionary::add_resolution_error(this_oop, which, error); - this_oop->tag_at_put(which, JVM_CONSTANT_UnresolvedClassInError); - } else { - // some other thread has put the class in error state. - error = SystemDictionary::find_resolution_error(this_oop, which); - assert(error != NULL, "checking"); - throw_orig_error = true; - } - } // unlocked - - if (throw_orig_error) { - CLEAR_PENDING_EXCEPTION; - ResourceMark rm; - const char* className = this_oop->unresolved_klass_at(which)->as_C_string(); - THROW_MSG_0(error, className); - } - - return 0; - } - - if (TraceClassResolution && !k()->klass_part()->oop_is_array()) { - // skip resolving the constant pool so that this code get's - // called the next time some bytecodes refer to this class. - ResourceMark rm; - int line_number = -1; - const char * source_file = NULL; - if (JavaThread::current()->has_last_Java_frame()) { - // try to identify the method which called this function. - vframeStream vfst(JavaThread::current()); - if (!vfst.at_end()) { - line_number = vfst.method()->line_number_from_bci(vfst.bci()); - Symbol* s = instanceKlass::cast(vfst.method()->method_holder())->source_file_name(); - if (s != NULL) { - source_file = s->as_C_string(); - } - } - } - if (k() != this_oop->pool_holder()) { - // only print something if the classes are different - if (source_file != NULL) { - tty->print("RESOLVE %s %s %s:%d\n", - instanceKlass::cast(this_oop->pool_holder())->external_name(), - instanceKlass::cast(k())->external_name(), source_file, line_number); - } else { - tty->print("RESOLVE %s %s\n", - instanceKlass::cast(this_oop->pool_holder())->external_name(), - instanceKlass::cast(k())->external_name()); - } - } - return k(); - } else { - ObjectLocker ol (this_oop, THREAD); - // Only updated constant pool - if it is resolved. - do_resolve = this_oop->tag_at(which).is_unresolved_klass(); - if (do_resolve) { - this_oop->klass_at_put(which, k()); - } - } - } - - entry = this_oop->resolved_klass_at(which); - assert(entry.is_oop() && entry.get_oop()->is_klass(), "must be resolved at this point"); - return (klassOop)entry.get_oop(); -} - - -// Does not update constantPoolOop - to avoid any exception throwing. Used -// by compiler and exception handling. Also used to avoid classloads for -// instanceof operations. Returns NULL if the class has not been loaded or -// if the verification of constant pool failed -klassOop constantPoolOopDesc::klass_at_if_loaded(constantPoolHandle this_oop, int which) { - CPSlot entry = this_oop->slot_at(which); - if (entry.is_oop()) { - assert(entry.get_oop()->is_klass(), "must be"); - return (klassOop)entry.get_oop(); - } else { - assert(entry.is_metadata(), "must be either symbol or klass"); - Thread *thread = Thread::current(); - Symbol* name = entry.get_symbol(); - oop loader = instanceKlass::cast(this_oop->pool_holder())->class_loader(); - oop protection_domain = Klass::cast(this_oop->pool_holder())->protection_domain(); - Handle h_prot (thread, protection_domain); - Handle h_loader (thread, loader); - klassOop k = SystemDictionary::find(name, h_loader, h_prot, thread); - - if (k != NULL) { - // Make sure that resolving is legal - EXCEPTION_MARK; - KlassHandle klass(THREAD, k); - // return NULL if verification fails - verify_constant_pool_resolve(this_oop, klass, THREAD); - if (HAS_PENDING_EXCEPTION) { - CLEAR_PENDING_EXCEPTION; - return NULL; - } - return klass(); - } else { - return k; - } - } -} - - -klassOop constantPoolOopDesc::klass_ref_at_if_loaded(constantPoolHandle this_oop, int which) { - return klass_at_if_loaded(this_oop, this_oop->klass_ref_index_at(which)); -} - - -// This is an interface for the compiler that allows accessing non-resolved entries -// in the constant pool - but still performs the validations tests. Must be used -// in a pre-parse of the compiler - to determine what it can do and not do. -// Note: We cannot update the ConstantPool from the vm_thread. -klassOop constantPoolOopDesc::klass_ref_at_if_loaded_check(constantPoolHandle this_oop, int index, TRAPS) { - int which = this_oop->klass_ref_index_at(index); - CPSlot entry = this_oop->slot_at(which); - if (entry.is_oop()) { - assert(entry.get_oop()->is_klass(), "must be"); - return (klassOop)entry.get_oop(); - } else { - assert(entry.is_metadata(), "must be either symbol or klass"); - Symbol* name = entry.get_symbol(); - oop loader = instanceKlass::cast(this_oop->pool_holder())->class_loader(); - oop protection_domain = Klass::cast(this_oop->pool_holder())->protection_domain(); - Handle h_loader(THREAD, loader); - Handle h_prot (THREAD, protection_domain); - KlassHandle k(THREAD, SystemDictionary::find(name, h_loader, h_prot, THREAD)); - - // Do access check for klasses - if( k.not_null() ) verify_constant_pool_resolve(this_oop, k, CHECK_NULL); - return k(); - } -} - - -methodOop constantPoolOopDesc::method_at_if_loaded(constantPoolHandle cpool, - int which) { - assert(!constantPoolCacheOopDesc::is_secondary_index(which), "no indy instruction here"); - if (cpool->cache() == NULL) return NULL; // nothing to load yet - int cache_index = get_cpcache_index(which); - if (!(cache_index >= 0 && cache_index < cpool->cache()->length())) { - if (PrintMiscellaneous && (Verbose||WizardMode)) { - tty->print_cr("bad operand %d in:", which); cpool->print(); - } - return NULL; - } - ConstantPoolCacheEntry* e = cpool->cache()->entry_at(cache_index); - return e->method_if_resolved(cpool); -} - - -bool constantPoolOopDesc::has_appendix_at_if_loaded(constantPoolHandle cpool, int which) { - if (cpool->cache() == NULL) return false; // nothing to load yet - // XXX Is there a simpler way to get to the secondary entry? - ConstantPoolCacheEntry* e; - if (constantPoolCacheOopDesc::is_secondary_index(which)) { - e = cpool->cache()->secondary_entry_at(which); - } else { - int cache_index = get_cpcache_index(which); - if (!(cache_index >= 0 && cache_index < cpool->cache()->length())) { - if (PrintMiscellaneous && (Verbose||WizardMode)) { - tty->print_cr("bad operand %d in:", which); cpool->print(); - } - return false; - } - e = cpool->cache()->entry_at(cache_index); - } - return e->has_appendix(); -} - - -oop constantPoolOopDesc::appendix_at_if_loaded(constantPoolHandle cpool, int which) { - if (cpool->cache() == NULL) return NULL; // nothing to load yet - // XXX Is there a simpler way to get to the secondary entry? - ConstantPoolCacheEntry* e; - if (constantPoolCacheOopDesc::is_secondary_index(which)) { - e = cpool->cache()->secondary_entry_at(which); - } else { - int cache_index = get_cpcache_index(which); - if (!(cache_index >= 0 && cache_index < cpool->cache()->length())) { - if (PrintMiscellaneous && (Verbose||WizardMode)) { - tty->print_cr("bad operand %d in:", which); cpool->print(); - } - return NULL; - } - e = cpool->cache()->entry_at(cache_index); - } - if (!e->has_appendix()) { - return NULL; - } - return e->f1_as_instance(); -} - - -Symbol* constantPoolOopDesc::impl_name_ref_at(int which, bool uncached) { - int name_index = name_ref_index_at(impl_name_and_type_ref_index_at(which, uncached)); - return symbol_at(name_index); -} - - -Symbol* constantPoolOopDesc::impl_signature_ref_at(int which, bool uncached) { - int signature_index = signature_ref_index_at(impl_name_and_type_ref_index_at(which, uncached)); - return symbol_at(signature_index); -} - - -int constantPoolOopDesc::impl_name_and_type_ref_index_at(int which, bool uncached) { - int i = which; - if (!uncached && cache() != NULL) { - if (constantPoolCacheOopDesc::is_secondary_index(which)) { - // Invokedynamic index. - int pool_index = cache()->main_entry_at(which)->constant_pool_index(); - pool_index = invoke_dynamic_name_and_type_ref_index_at(pool_index); - assert(tag_at(pool_index).is_name_and_type(), ""); - return pool_index; - } - // change byte-ordering and go via cache - i = remap_instruction_operand_from_cache(which); - } else { - if (tag_at(which).is_invoke_dynamic()) { - int pool_index = invoke_dynamic_name_and_type_ref_index_at(which); - assert(tag_at(pool_index).is_name_and_type(), ""); - return pool_index; - } - } - assert(tag_at(i).is_field_or_method(), "Corrupted constant pool"); - assert(!tag_at(i).is_invoke_dynamic(), "Must be handled above"); - jint ref_index = *int_at_addr(i); - return extract_high_short_from_int(ref_index); -} - - -int constantPoolOopDesc::impl_klass_ref_index_at(int which, bool uncached) { - guarantee(!constantPoolCacheOopDesc::is_secondary_index(which), - "an invokedynamic instruction does not have a klass"); - int i = which; - if (!uncached && cache() != NULL) { - // change byte-ordering and go via cache - i = remap_instruction_operand_from_cache(which); - } - assert(tag_at(i).is_field_or_method(), "Corrupted constant pool"); - jint ref_index = *int_at_addr(i); - return extract_low_short_from_int(ref_index); -} - - - -int constantPoolOopDesc::remap_instruction_operand_from_cache(int operand) { - int cpc_index = operand; - DEBUG_ONLY(cpc_index -= CPCACHE_INDEX_TAG); - assert((int)(u2)cpc_index == cpc_index, "clean u2"); - int member_index = cache()->entry_at(cpc_index)->constant_pool_index(); - return member_index; -} - - -void constantPoolOopDesc::verify_constant_pool_resolve(constantPoolHandle this_oop, KlassHandle k, TRAPS) { - if (k->oop_is_instance() || k->oop_is_objArray()) { - instanceKlassHandle holder (THREAD, this_oop->pool_holder()); - klassOop elem_oop = k->oop_is_instance() ? k() : objArrayKlass::cast(k())->bottom_klass(); - KlassHandle element (THREAD, elem_oop); - - // The element type could be a typeArray - we only need the access check if it is - // an reference to another class - if (element->oop_is_instance()) { - LinkResolver::check_klass_accessability(holder, element, CHECK); - } - } -} - - -int constantPoolOopDesc::name_ref_index_at(int which_nt) { - jint ref_index = name_and_type_at(which_nt); - return extract_low_short_from_int(ref_index); -} - - -int constantPoolOopDesc::signature_ref_index_at(int which_nt) { - jint ref_index = name_and_type_at(which_nt); - return extract_high_short_from_int(ref_index); -} - - -klassOop constantPoolOopDesc::klass_ref_at(int which, TRAPS) { - return klass_at(klass_ref_index_at(which), CHECK_NULL); -} - - -Symbol* constantPoolOopDesc::klass_name_at(int which) { - assert(tag_at(which).is_unresolved_klass() || tag_at(which).is_klass(), - "Corrupted constant pool"); - // A resolved constantPool entry will contain a klassOop, otherwise a Symbol*. - // It is not safe to rely on the tag bit's here, since we don't have a lock, and the entry and - // tag is not updated atomicly. - CPSlot entry = slot_at(which); - if (entry.is_oop()) { - // Already resolved - return entry's name. - assert(entry.get_oop()->is_klass(), "must be"); - return klassOop(entry.get_oop())->klass_part()->name(); - } else { - assert(entry.is_metadata(), "must be either symbol or klass"); - return entry.get_symbol(); - } -} - -Symbol* constantPoolOopDesc::klass_ref_at_noresolve(int which) { - jint ref_index = klass_ref_index_at(which); - return klass_at_noresolve(ref_index); -} - -Symbol* constantPoolOopDesc::uncached_klass_ref_at_noresolve(int which) { - jint ref_index = uncached_klass_ref_index_at(which); - return klass_at_noresolve(ref_index); -} - -char* constantPoolOopDesc::string_at_noresolve(int which) { - // Test entry type in case string is resolved while in here. - CPSlot entry = slot_at(which); - if (entry.is_metadata()) { - return (entry.get_symbol())->as_C_string(); - } else if (java_lang_String::is_instance(entry.get_oop())) { - return java_lang_String::as_utf8_string(entry.get_oop()); - } else { - return (char*)""; - } -} - - -BasicType constantPoolOopDesc::basic_type_for_signature_at(int which) { - return FieldType::basic_type(symbol_at(which)); -} - - -void constantPoolOopDesc::resolve_string_constants_impl(constantPoolHandle this_oop, TRAPS) { - for (int index = 1; index < this_oop->length(); index++) { // Index 0 is unused - if (this_oop->tag_at(index).is_unresolved_string()) { - this_oop->string_at(index, CHECK); - } - } -} - -// A resolved constant value in the CP cache is represented as a non-null -// value. As a special case, this value can be a 'systemObjArray' -// which masks an exception object to throw. -// This allows a MethodHandle constant reference to throw a consistent -// exception every time, if it fails to resolve. -static oop decode_exception_from_f1(oop result_oop, TRAPS) { - if (result_oop->klass() != Universe::systemObjArrayKlassObj()) - return result_oop; - - // Special cases here: Masked null, saved exception. - objArrayOop sys_array = (objArrayOop) result_oop; - assert(sys_array->length() == 1, "bad system array"); - if (sys_array->length() == 1) { - THROW_OOP_(sys_array->obj_at(0), NULL); - } - return NULL; -} - -oop constantPoolOopDesc::resolve_constant_at_impl(constantPoolHandle this_oop, int index, int cache_index, TRAPS) { - oop result_oop = NULL; - Handle throw_exception; - - if (cache_index == _possible_index_sentinel) { - // It is possible that this constant is one which is cached in the CP cache. - // We'll do a linear search. This should be OK because this usage is rare. - assert(index > 0, "valid index"); - constantPoolCacheOop cache = this_oop()->cache(); - for (int i = 0, len = cache->length(); i < len; i++) { - ConstantPoolCacheEntry* cpc_entry = cache->entry_at(i); - if (!cpc_entry->is_secondary_entry() && cpc_entry->constant_pool_index() == index) { - // Switch the query to use this CPC entry. - cache_index = i; - index = _no_index_sentinel; - break; - } - } - if (cache_index == _possible_index_sentinel) - cache_index = _no_index_sentinel; // not found - } - assert(cache_index == _no_index_sentinel || cache_index >= 0, ""); - assert(index == _no_index_sentinel || index >= 0, ""); - - if (cache_index >= 0) { - assert(index == _no_index_sentinel, "only one kind of index at a time"); - ConstantPoolCacheEntry* cpc_entry = this_oop->cache()->entry_at(cache_index); - result_oop = cpc_entry->f1_as_instance(); - if (result_oop != NULL) { - return decode_exception_from_f1(result_oop, THREAD); - // That was easy... - } - index = cpc_entry->constant_pool_index(); - } - - jvalue prim_value; // temp used only in a few cases below - - int tag_value = this_oop->tag_at(index).value(); - switch (tag_value) { - - case JVM_CONSTANT_UnresolvedClass: - case JVM_CONSTANT_UnresolvedClassInError: - case JVM_CONSTANT_Class: - { - klassOop resolved = klass_at_impl(this_oop, index, CHECK_NULL); - // ldc wants the java mirror. - result_oop = resolved->java_mirror(); - break; - } - - case JVM_CONSTANT_String: - case JVM_CONSTANT_UnresolvedString: - if (this_oop->is_pseudo_string_at(index)) { - result_oop = this_oop->pseudo_string_at(index); - break; - } - result_oop = string_at_impl(this_oop, index, CHECK_NULL); - break; - - case JVM_CONSTANT_Object: - result_oop = this_oop->object_at(index); - break; - - case JVM_CONSTANT_MethodHandle: - { - int ref_kind = this_oop->method_handle_ref_kind_at(index); - int callee_index = this_oop->method_handle_klass_index_at(index); - Symbol* name = this_oop->method_handle_name_ref_at(index); - Symbol* signature = this_oop->method_handle_signature_ref_at(index); - if (PrintMiscellaneous) - tty->print_cr("resolve JVM_CONSTANT_MethodHandle:%d [%d/%d/%d] %s.%s", - ref_kind, index, this_oop->method_handle_index_at(index), - callee_index, name->as_C_string(), signature->as_C_string()); - KlassHandle callee; - { klassOop k = klass_at_impl(this_oop, callee_index, CHECK_NULL); - callee = KlassHandle(THREAD, k); - } - KlassHandle klass(THREAD, this_oop->pool_holder()); - Handle value = SystemDictionary::link_method_handle_constant(klass, ref_kind, - callee, name, signature, - THREAD); - if (HAS_PENDING_EXCEPTION) { - throw_exception = Handle(THREAD, PENDING_EXCEPTION); - CLEAR_PENDING_EXCEPTION; - break; - } - result_oop = value(); - assert(result_oop != NULL, ""); - break; - } - - case JVM_CONSTANT_MethodType: - { - Symbol* signature = this_oop->method_type_signature_at(index); - if (PrintMiscellaneous) - tty->print_cr("resolve JVM_CONSTANT_MethodType [%d/%d] %s", - index, this_oop->method_type_index_at(index), - signature->as_C_string()); - KlassHandle klass(THREAD, this_oop->pool_holder()); - Handle value = SystemDictionary::find_method_handle_type(signature, klass, THREAD); - if (HAS_PENDING_EXCEPTION) { - throw_exception = Handle(THREAD, PENDING_EXCEPTION); - CLEAR_PENDING_EXCEPTION; - break; - } - result_oop = value(); - assert(result_oop != NULL, ""); - break; - } - - case JVM_CONSTANT_Integer: - prim_value.i = this_oop->int_at(index); - result_oop = java_lang_boxing_object::create(T_INT, &prim_value, CHECK_NULL); - break; - - case JVM_CONSTANT_Float: - prim_value.f = this_oop->float_at(index); - result_oop = java_lang_boxing_object::create(T_FLOAT, &prim_value, CHECK_NULL); - break; - - case JVM_CONSTANT_Long: - prim_value.j = this_oop->long_at(index); - result_oop = java_lang_boxing_object::create(T_LONG, &prim_value, CHECK_NULL); - break; - - case JVM_CONSTANT_Double: - prim_value.d = this_oop->double_at(index); - result_oop = java_lang_boxing_object::create(T_DOUBLE, &prim_value, CHECK_NULL); - break; - - default: - DEBUG_ONLY( tty->print_cr("*** %p: tag at CP[%d/%d] = %d", - this_oop(), index, cache_index, tag_value) ); - assert(false, "unexpected constant tag"); - break; - } - - if (cache_index >= 0) { - // Cache the oop here also. - if (throw_exception.not_null()) { - objArrayOop sys_array = oopFactory::new_system_objArray(1, CHECK_NULL); - sys_array->obj_at_put(0, throw_exception()); - result_oop = sys_array; - throw_exception = Handle(); // be tidy - } - Handle result_handle(THREAD, result_oop); - result_oop = NULL; // safety - ObjectLocker ol(this_oop, THREAD); - ConstantPoolCacheEntry* cpc_entry = this_oop->cache()->entry_at(cache_index); - result_oop = cpc_entry->f1_as_instance(); - // Benign race condition: f1 may already be filled in while we were trying to lock. - // The important thing here is that all threads pick up the same result. - // It doesn't matter which racing thread wins, as long as only one - // result is used by all threads, and all future queries. - // That result may be either a resolved constant or a failure exception. - if (result_oop == NULL) { - result_oop = result_handle(); - cpc_entry->set_f1(result_oop); - } - return decode_exception_from_f1(result_oop, THREAD); - } else { - if (throw_exception.not_null()) { - THROW_HANDLE_(throw_exception, NULL); - } - return result_oop; - } -} - - -oop constantPoolOopDesc::resolve_bootstrap_specifier_at_impl(constantPoolHandle this_oop, int index, TRAPS) { - assert(this_oop->tag_at(index).is_invoke_dynamic(), "Corrupted constant pool"); - - Handle bsm; - int argc; - { - // JVM_CONSTANT_InvokeDynamic is an ordered pair of [bootm, name&type], plus optional arguments - // The bootm, being a JVM_CONSTANT_MethodHandle, has its own cache entry. - // It is accompanied by the optional arguments. - int bsm_index = this_oop->invoke_dynamic_bootstrap_method_ref_index_at(index); - oop bsm_oop = this_oop->resolve_possibly_cached_constant_at(bsm_index, CHECK_NULL); - if (!java_lang_invoke_MethodHandle::is_instance(bsm_oop)) { - THROW_MSG_NULL(vmSymbols::java_lang_LinkageError(), "BSM not an MethodHandle"); - } - - // Extract the optional static arguments. - argc = this_oop->invoke_dynamic_argument_count_at(index); - if (argc == 0) return bsm_oop; - - bsm = Handle(THREAD, bsm_oop); - } - - objArrayHandle info; - { - objArrayOop info_oop = oopFactory::new_objArray(SystemDictionary::Object_klass(), 1+argc, CHECK_NULL); - info = objArrayHandle(THREAD, info_oop); - } - - info->obj_at_put(0, bsm()); - for (int i = 0; i < argc; i++) { - int arg_index = this_oop->invoke_dynamic_argument_index_at(index, i); - oop arg_oop = this_oop->resolve_possibly_cached_constant_at(arg_index, CHECK_NULL); - info->obj_at_put(1+i, arg_oop); - } - - return info(); -} - -oop constantPoolOopDesc::string_at_impl(constantPoolHandle this_oop, int which, TRAPS) { - oop str = NULL; - CPSlot entry = this_oop->slot_at(which); - if (entry.is_metadata()) { - ObjectLocker ol(this_oop, THREAD); - if (this_oop->tag_at(which).is_unresolved_string()) { - // Intern string - Symbol* sym = this_oop->unresolved_string_at(which); - str = StringTable::intern(sym, CHECK_(constantPoolOop(NULL))); - this_oop->string_at_put(which, str); - } else { - // Another thread beat us and interned string, read string from constant pool - str = this_oop->resolved_string_at(which); - } - } else { - str = entry.get_oop(); - } - assert(java_lang_String::is_instance(str), "must be string"); - return str; -} - - -bool constantPoolOopDesc::is_pseudo_string_at(int which) { - CPSlot entry = slot_at(which); - if (entry.is_metadata()) - // Not yet resolved, but it will resolve to a string. - return false; - else if (java_lang_String::is_instance(entry.get_oop())) - return false; // actually, it might be a non-interned or non-perm string - else - // truly pseudo - return true; -} - - -bool constantPoolOopDesc::klass_name_at_matches(instanceKlassHandle k, - int which) { - // Names are interned, so we can compare Symbol*s directly - Symbol* cp_name = klass_name_at(which); - return (cp_name == k->name()); -} - - -int constantPoolOopDesc::pre_resolve_shared_klasses(TRAPS) { - ResourceMark rm; - int count = 0; - for (int index = 1; index < tags()->length(); index++) { // Index 0 is unused - if (tag_at(index).is_unresolved_string()) { - // Intern string - Symbol* sym = unresolved_string_at(index); - oop entry = StringTable::intern(sym, CHECK_(-1)); - string_at_put(index, entry); - } - } - return count; -} - -// Iterate over symbols and decrement ones which are Symbol*s. -// This is done during GC so do not need to lock constantPool unless we -// have per-thread safepoints. -// Only decrement the UTF8 symbols. Unresolved classes and strings point to -// these symbols but didn't increment the reference count. -void constantPoolOopDesc::unreference_symbols() { - for (int index = 1; index < length(); index++) { // Index 0 is unused - constantTag tag = tag_at(index); - if (tag.is_symbol()) { - symbol_at(index)->decrement_refcount(); - } - } -} - -// Iterate over symbols which are used as class, field, method names and -// signatures (in preparation for writing to the shared archive). - -void constantPoolOopDesc::shared_symbols_iterate(SymbolClosure* closure) { - for (int index = 1; index < length(); index++) { // Index 0 is unused - switch (tag_at(index).value()) { - - case JVM_CONSTANT_UnresolvedClass: - case JVM_CONSTANT_UnresolvedString: - case JVM_CONSTANT_Utf8: - assert(slot_at(index).is_metadata(), "must be symbol"); - closure->do_symbol(symbol_at_addr(index)); - break; - - case JVM_CONSTANT_NameAndType: - { - int i = *int_at_addr(index); - closure->do_symbol(symbol_at_addr((unsigned)i >> 16)); - closure->do_symbol(symbol_at_addr((unsigned)i & 0xffff)); - } - break; - - case JVM_CONSTANT_Class: - case JVM_CONSTANT_InterfaceMethodref: - case JVM_CONSTANT_Fieldref: - case JVM_CONSTANT_Methodref: - case JVM_CONSTANT_Integer: - case JVM_CONSTANT_Float: - // Do nothing! Not an oop. - // These constant types do not reference symbols at this point. - break; - - case JVM_CONSTANT_String: - // Do nothing! Not a symbol. - break; - - case JVM_CONSTANT_Long: - case JVM_CONSTANT_Double: - // Do nothing! Not an oop. (But takes two pool entries.) - ++index; - break; - - default: - ShouldNotReachHere(); - break; - } - } -} - - -// Iterate over the [one] tags array (in preparation for writing to the -// shared archive). - -void constantPoolOopDesc::shared_tags_iterate(OopClosure* closure) { - closure->do_oop(tags_addr()); - closure->do_oop(operands_addr()); -} - - -// Iterate over String objects (in preparation for writing to the shared -// archive). - -void constantPoolOopDesc::shared_strings_iterate(OopClosure* closure) { - for (int index = 1; index < length(); index++) { // Index 0 is unused - switch (tag_at(index).value()) { - - case JVM_CONSTANT_UnresolvedClass: - case JVM_CONSTANT_NameAndType: - // Do nothing! Not a String. - break; - - case JVM_CONSTANT_Class: - case JVM_CONSTANT_InterfaceMethodref: - case JVM_CONSTANT_Fieldref: - case JVM_CONSTANT_Methodref: - case JVM_CONSTANT_Integer: - case JVM_CONSTANT_Float: - // Do nothing! Not an oop. - // These constant types do not reference symbols at this point. - break; - - case JVM_CONSTANT_String: - closure->do_oop(obj_at_addr_raw(index)); - break; - - case JVM_CONSTANT_UnresolvedString: - case JVM_CONSTANT_Utf8: - // These constants are symbols, but unless these symbols are - // actually to be used for something, we don't want to mark them. - break; - - case JVM_CONSTANT_Long: - case JVM_CONSTANT_Double: - // Do nothing! Not an oop. (But takes two pool entries.) - ++index; - break; - - default: - ShouldNotReachHere(); - break; - } - } -} - - -// Compare this constant pool's entry at index1 to the constant pool -// cp2's entry at index2. -bool constantPoolOopDesc::compare_entry_to(int index1, constantPoolHandle cp2, - int index2, TRAPS) { - - jbyte t1 = tag_at(index1).value(); - jbyte t2 = cp2->tag_at(index2).value(); - - - // JVM_CONSTANT_UnresolvedClassInError is equal to JVM_CONSTANT_UnresolvedClass - // when comparing - if (t1 == JVM_CONSTANT_UnresolvedClassInError) { - t1 = JVM_CONSTANT_UnresolvedClass; - } - if (t2 == JVM_CONSTANT_UnresolvedClassInError) { - t2 = JVM_CONSTANT_UnresolvedClass; - } - - if (t1 != t2) { - // Not the same entry type so there is nothing else to check. Note - // that this style of checking will consider resolved/unresolved - // class pairs and resolved/unresolved string pairs as different. - // From the constantPoolOop API point of view, this is correct - // behavior. See constantPoolKlass::merge() to see how this plays - // out in the context of constantPoolOop merging. - return false; - } - - switch (t1) { - case JVM_CONSTANT_Class: - { - klassOop k1 = klass_at(index1, CHECK_false); - klassOop k2 = cp2->klass_at(index2, CHECK_false); - if (k1 == k2) { - return true; - } - } break; - - case JVM_CONSTANT_ClassIndex: - { - int recur1 = klass_index_at(index1); - int recur2 = cp2->klass_index_at(index2); - bool match = compare_entry_to(recur1, cp2, recur2, CHECK_false); - if (match) { - return true; - } - } break; - - case JVM_CONSTANT_Double: - { - jdouble d1 = double_at(index1); - jdouble d2 = cp2->double_at(index2); - if (d1 == d2) { - return true; - } - } break; - - case JVM_CONSTANT_Fieldref: - case JVM_CONSTANT_InterfaceMethodref: - case JVM_CONSTANT_Methodref: - { - int recur1 = uncached_klass_ref_index_at(index1); - int recur2 = cp2->uncached_klass_ref_index_at(index2); - bool match = compare_entry_to(recur1, cp2, recur2, CHECK_false); - if (match) { - recur1 = uncached_name_and_type_ref_index_at(index1); - recur2 = cp2->uncached_name_and_type_ref_index_at(index2); - match = compare_entry_to(recur1, cp2, recur2, CHECK_false); - if (match) { - return true; - } - } - } break; - - case JVM_CONSTANT_Float: - { - jfloat f1 = float_at(index1); - jfloat f2 = cp2->float_at(index2); - if (f1 == f2) { - return true; - } - } break; - - case JVM_CONSTANT_Integer: - { - jint i1 = int_at(index1); - jint i2 = cp2->int_at(index2); - if (i1 == i2) { - return true; - } - } break; - - case JVM_CONSTANT_Long: - { - jlong l1 = long_at(index1); - jlong l2 = cp2->long_at(index2); - if (l1 == l2) { - return true; - } - } break; - - case JVM_CONSTANT_NameAndType: - { - int recur1 = name_ref_index_at(index1); - int recur2 = cp2->name_ref_index_at(index2); - bool match = compare_entry_to(recur1, cp2, recur2, CHECK_false); - if (match) { - recur1 = signature_ref_index_at(index1); - recur2 = cp2->signature_ref_index_at(index2); - match = compare_entry_to(recur1, cp2, recur2, CHECK_false); - if (match) { - return true; - } - } - } break; - - case JVM_CONSTANT_String: - { - oop s1 = string_at(index1, CHECK_false); - oop s2 = cp2->string_at(index2, CHECK_false); - if (s1 == s2) { - return true; - } - } break; - - case JVM_CONSTANT_StringIndex: - { - int recur1 = string_index_at(index1); - int recur2 = cp2->string_index_at(index2); - bool match = compare_entry_to(recur1, cp2, recur2, CHECK_false); - if (match) { - return true; - } - } break; - - case JVM_CONSTANT_UnresolvedClass: - { - Symbol* k1 = unresolved_klass_at(index1); - Symbol* k2 = cp2->unresolved_klass_at(index2); - if (k1 == k2) { - return true; - } - } break; - - case JVM_CONSTANT_MethodType: - { - int k1 = method_type_index_at(index1); - int k2 = cp2->method_type_index_at(index2); - bool match = compare_entry_to(k1, cp2, k2, CHECK_false); - if (match) { - return true; - } - } break; - - case JVM_CONSTANT_MethodHandle: - { - int k1 = method_handle_ref_kind_at(index1); - int k2 = cp2->method_handle_ref_kind_at(index2); - if (k1 == k2) { - int i1 = method_handle_index_at(index1); - int i2 = cp2->method_handle_index_at(index2); - bool match = compare_entry_to(i1, cp2, i2, CHECK_false); - if (match) { - return true; - } - } - } break; - - case JVM_CONSTANT_InvokeDynamic: - { - int k1 = invoke_dynamic_bootstrap_method_ref_index_at(index1); - int k2 = cp2->invoke_dynamic_bootstrap_method_ref_index_at(index2); - bool match = compare_entry_to(k1, cp2, k2, CHECK_false); - if (!match) return false; - k1 = invoke_dynamic_name_and_type_ref_index_at(index1); - k2 = cp2->invoke_dynamic_name_and_type_ref_index_at(index2); - match = compare_entry_to(k1, cp2, k2, CHECK_false); - if (!match) return false; - int argc = invoke_dynamic_argument_count_at(index1); - if (argc == cp2->invoke_dynamic_argument_count_at(index2)) { - for (int j = 0; j < argc; j++) { - k1 = invoke_dynamic_argument_index_at(index1, j); - k2 = cp2->invoke_dynamic_argument_index_at(index2, j); - match = compare_entry_to(k1, cp2, k2, CHECK_false); - if (!match) return false; - } - return true; // got through loop; all elements equal - } - } break; - - case JVM_CONSTANT_UnresolvedString: - { - Symbol* s1 = unresolved_string_at(index1); - Symbol* s2 = cp2->unresolved_string_at(index2); - if (s1 == s2) { - return true; - } - } break; - - case JVM_CONSTANT_Utf8: - { - Symbol* s1 = symbol_at(index1); - Symbol* s2 = cp2->symbol_at(index2); - if (s1 == s2) { - return true; - } - } break; - - // Invalid is used as the tag for the second constant pool entry - // occupied by JVM_CONSTANT_Double or JVM_CONSTANT_Long. It should - // not be seen by itself. - case JVM_CONSTANT_Invalid: // fall through - - default: - ShouldNotReachHere(); - break; - } - - return false; -} // end compare_entry_to() - - -// Copy this constant pool's entries at start_i to end_i (inclusive) -// to the constant pool to_cp's entries starting at to_i. A total of -// (end_i - start_i) + 1 entries are copied. -void constantPoolOopDesc::copy_cp_to_impl(constantPoolHandle from_cp, int start_i, int end_i, - constantPoolHandle to_cp, int to_i, TRAPS) { - - int dest_i = to_i; // leave original alone for debug purposes - - for (int src_i = start_i; src_i <= end_i; /* see loop bottom */ ) { - copy_entry_to(from_cp, src_i, to_cp, dest_i, CHECK); - - switch (from_cp->tag_at(src_i).value()) { - case JVM_CONSTANT_Double: - case JVM_CONSTANT_Long: - // double and long take two constant pool entries - src_i += 2; - dest_i += 2; - break; - - default: - // all others take one constant pool entry - src_i++; - dest_i++; - break; - } - } - - int from_oplen = operand_array_length(from_cp->operands()); - int old_oplen = operand_array_length(to_cp->operands()); - if (from_oplen != 0) { - // append my operands to the target's operands array - if (old_oplen == 0) { - to_cp->set_operands(from_cp->operands()); // reuse; do not merge - } else { - int old_len = to_cp->operands()->length(); - int from_len = from_cp->operands()->length(); - int old_off = old_oplen * sizeof(u2); - int from_off = from_oplen * sizeof(u2); - typeArrayHandle new_operands = oopFactory::new_permanent_shortArray(old_len + from_len, CHECK); - int fillp = 0, len = 0; - // first part of dest - Copy::conjoint_memory_atomic(to_cp->operands()->short_at_addr(0), - new_operands->short_at_addr(fillp), - (len = old_off) * sizeof(u2)); - fillp += len; - // first part of src - Copy::conjoint_memory_atomic(to_cp->operands()->short_at_addr(0), - new_operands->short_at_addr(fillp), - (len = from_off) * sizeof(u2)); - fillp += len; - // second part of dest - Copy::conjoint_memory_atomic(to_cp->operands()->short_at_addr(old_off), - new_operands->short_at_addr(fillp), - (len = old_len - old_off) * sizeof(u2)); - fillp += len; - // second part of src - Copy::conjoint_memory_atomic(to_cp->operands()->short_at_addr(from_off), - new_operands->short_at_addr(fillp), - (len = from_len - from_off) * sizeof(u2)); - fillp += len; - assert(fillp == new_operands->length(), ""); - - // Adjust indexes in the first part of the copied operands array. - for (int j = 0; j < from_oplen; j++) { - int offset = operand_offset_at(new_operands(), old_oplen + j); - assert(offset == operand_offset_at(from_cp->operands(), j), "correct copy"); - offset += old_len; // every new tuple is preceded by old_len extra u2's - operand_offset_at_put(new_operands(), old_oplen + j, offset); - } - - // replace target operands array with combined array - to_cp->set_operands(new_operands()); - } - } - -} // end copy_cp_to() - - -// Copy this constant pool's entry at from_i to the constant pool -// to_cp's entry at to_i. -void constantPoolOopDesc::copy_entry_to(constantPoolHandle from_cp, int from_i, - constantPoolHandle to_cp, int to_i, - TRAPS) { - - int tag = from_cp->tag_at(from_i).value(); - switch (tag) { - case JVM_CONSTANT_Class: - { - klassOop k = from_cp->klass_at(from_i, CHECK); - to_cp->klass_at_put(to_i, k); - } break; - - case JVM_CONSTANT_ClassIndex: - { - jint ki = from_cp->klass_index_at(from_i); - to_cp->klass_index_at_put(to_i, ki); - } break; - - case JVM_CONSTANT_Double: - { - jdouble d = from_cp->double_at(from_i); - to_cp->double_at_put(to_i, d); - // double takes two constant pool entries so init second entry's tag - to_cp->tag_at_put(to_i + 1, JVM_CONSTANT_Invalid); - } break; - - case JVM_CONSTANT_Fieldref: - { - int class_index = from_cp->uncached_klass_ref_index_at(from_i); - int name_and_type_index = from_cp->uncached_name_and_type_ref_index_at(from_i); - to_cp->field_at_put(to_i, class_index, name_and_type_index); - } break; - - case JVM_CONSTANT_Float: - { - jfloat f = from_cp->float_at(from_i); - to_cp->float_at_put(to_i, f); - } break; - - case JVM_CONSTANT_Integer: - { - jint i = from_cp->int_at(from_i); - to_cp->int_at_put(to_i, i); - } break; - - case JVM_CONSTANT_InterfaceMethodref: - { - int class_index = from_cp->uncached_klass_ref_index_at(from_i); - int name_and_type_index = from_cp->uncached_name_and_type_ref_index_at(from_i); - to_cp->interface_method_at_put(to_i, class_index, name_and_type_index); - } break; - - case JVM_CONSTANT_Long: - { - jlong l = from_cp->long_at(from_i); - to_cp->long_at_put(to_i, l); - // long takes two constant pool entries so init second entry's tag - to_cp->tag_at_put(to_i + 1, JVM_CONSTANT_Invalid); - } break; - - case JVM_CONSTANT_Methodref: - { - int class_index = from_cp->uncached_klass_ref_index_at(from_i); - int name_and_type_index = from_cp->uncached_name_and_type_ref_index_at(from_i); - to_cp->method_at_put(to_i, class_index, name_and_type_index); - } break; - - case JVM_CONSTANT_NameAndType: - { - int name_ref_index = from_cp->name_ref_index_at(from_i); - int signature_ref_index = from_cp->signature_ref_index_at(from_i); - to_cp->name_and_type_at_put(to_i, name_ref_index, signature_ref_index); - } break; - - case JVM_CONSTANT_String: - { - oop s = from_cp->string_at(from_i, CHECK); - to_cp->string_at_put(to_i, s); - } break; - - case JVM_CONSTANT_StringIndex: - { - jint si = from_cp->string_index_at(from_i); - to_cp->string_index_at_put(to_i, si); - } break; - - case JVM_CONSTANT_UnresolvedClass: - { - // Can be resolved after checking tag, so check the slot first. - CPSlot entry = from_cp->slot_at(from_i); - if (entry.is_oop()) { - assert(entry.get_oop()->is_klass(), "must be"); - // Already resolved - to_cp->klass_at_put(to_i, (klassOop)entry.get_oop()); - } else { - to_cp->unresolved_klass_at_put(to_i, entry.get_symbol()); - } - } break; - - case JVM_CONSTANT_UnresolvedClassInError: - { - Symbol* k = from_cp->unresolved_klass_at(from_i); - to_cp->unresolved_klass_at_put(to_i, k); - to_cp->tag_at_put(to_i, JVM_CONSTANT_UnresolvedClassInError); - } break; - - - case JVM_CONSTANT_UnresolvedString: - { - // Can be resolved after checking tag, so check the slot first. - CPSlot entry = from_cp->slot_at(from_i); - if (entry.is_oop()) { - // Already resolved (either string or pseudo-string) - to_cp->string_at_put(to_i, entry.get_oop()); - } else { - to_cp->unresolved_string_at_put(to_i, entry.get_symbol()); - } - } break; - - case JVM_CONSTANT_Utf8: - { - Symbol* s = from_cp->symbol_at(from_i); - to_cp->symbol_at_put(to_i, s); - // This constantPool has the same lifetime as the original, so don't - // increase reference counts for the copy. - } break; - - case JVM_CONSTANT_MethodType: - { - jint k = from_cp->method_type_index_at(from_i); - to_cp->method_type_index_at_put(to_i, k); - } break; - - case JVM_CONSTANT_MethodHandle: - { - int k1 = from_cp->method_handle_ref_kind_at(from_i); - int k2 = from_cp->method_handle_index_at(from_i); - to_cp->method_handle_index_at_put(to_i, k1, k2); - } break; - - case JVM_CONSTANT_InvokeDynamic: - { - int k1 = from_cp->invoke_dynamic_bootstrap_specifier_index(from_i); - int k2 = from_cp->invoke_dynamic_name_and_type_ref_index_at(from_i); - k1 += operand_array_length(to_cp->operands()); // to_cp might already have operands - to_cp->invoke_dynamic_at_put(to_i, k1, k2); - } break; - - // Invalid is used as the tag for the second constant pool entry - // occupied by JVM_CONSTANT_Double or JVM_CONSTANT_Long. It should - // not be seen by itself. - case JVM_CONSTANT_Invalid: // fall through - - default: - { - ShouldNotReachHere(); - } break; - } -} // end copy_entry_to() - - -// Search constant pool search_cp for an entry that matches this -// constant pool's entry at pattern_i. Returns the index of a -// matching entry or zero (0) if there is no matching entry. -int constantPoolOopDesc::find_matching_entry(int pattern_i, - constantPoolHandle search_cp, TRAPS) { - - // index zero (0) is not used - for (int i = 1; i < search_cp->length(); i++) { - bool found = compare_entry_to(pattern_i, search_cp, i, CHECK_0); - if (found) { - return i; - } - } - - return 0; // entry not found; return unused index zero (0) -} // end find_matching_entry() - - -#ifndef PRODUCT - -const char* constantPoolOopDesc::printable_name_at(int which) { - - constantTag tag = tag_at(which); - - if (tag.is_unresolved_string() || tag.is_string()) { - return string_at_noresolve(which); - } else if (tag.is_klass() || tag.is_unresolved_klass()) { - return klass_name_at(which)->as_C_string(); - } else if (tag.is_symbol()) { - return symbol_at(which)->as_C_string(); - } - return ""; -} - -#endif // PRODUCT - - -// JVMTI GetConstantPool support - -// For temporary use until code is stable. -#define DBG(code) - -static const char* WARN_MSG = "Must not be such entry!"; - -static void print_cpool_bytes(jint cnt, u1 *bytes) { - jint size = 0; - u2 idx1, idx2; - - for (jint idx = 1; idx < cnt; idx++) { - jint ent_size = 0; - u1 tag = *bytes++; - size++; // count tag - - printf("const #%03d, tag: %02d ", idx, tag); - switch(tag) { - case JVM_CONSTANT_Invalid: { - printf("Invalid"); - break; - } - case JVM_CONSTANT_Unicode: { - printf("Unicode %s", WARN_MSG); - break; - } - case JVM_CONSTANT_Utf8: { - u2 len = Bytes::get_Java_u2(bytes); - char str[128]; - if (len > 127) { - len = 127; - } - strncpy(str, (char *) (bytes+2), len); - str[len] = '\0'; - printf("Utf8 \"%s\"", str); - ent_size = 2 + len; - break; - } - case JVM_CONSTANT_Integer: { - u4 val = Bytes::get_Java_u4(bytes); - printf("int %d", *(int *) &val); - ent_size = 4; - break; - } - case JVM_CONSTANT_Float: { - u4 val = Bytes::get_Java_u4(bytes); - printf("float %5.3ff", *(float *) &val); - ent_size = 4; - break; - } - case JVM_CONSTANT_Long: { - u8 val = Bytes::get_Java_u8(bytes); - printf("long "INT64_FORMAT, (int64_t) *(jlong *) &val); - ent_size = 8; - idx++; // Long takes two cpool slots - break; - } - case JVM_CONSTANT_Double: { - u8 val = Bytes::get_Java_u8(bytes); - printf("double %5.3fd", *(jdouble *)&val); - ent_size = 8; - idx++; // Double takes two cpool slots - break; - } - case JVM_CONSTANT_Class: { - idx1 = Bytes::get_Java_u2(bytes); - printf("class #%03d", idx1); - ent_size = 2; - break; - } - case JVM_CONSTANT_String: { - idx1 = Bytes::get_Java_u2(bytes); - printf("String #%03d", idx1); - ent_size = 2; - break; - } - case JVM_CONSTANT_Fieldref: { - idx1 = Bytes::get_Java_u2(bytes); - idx2 = Bytes::get_Java_u2(bytes+2); - printf("Field #%03d, #%03d", (int) idx1, (int) idx2); - ent_size = 4; - break; - } - case JVM_CONSTANT_Methodref: { - idx1 = Bytes::get_Java_u2(bytes); - idx2 = Bytes::get_Java_u2(bytes+2); - printf("Method #%03d, #%03d", idx1, idx2); - ent_size = 4; - break; - } - case JVM_CONSTANT_InterfaceMethodref: { - idx1 = Bytes::get_Java_u2(bytes); - idx2 = Bytes::get_Java_u2(bytes+2); - printf("InterfMethod #%03d, #%03d", idx1, idx2); - ent_size = 4; - break; - } - case JVM_CONSTANT_NameAndType: { - idx1 = Bytes::get_Java_u2(bytes); - idx2 = Bytes::get_Java_u2(bytes+2); - printf("NameAndType #%03d, #%03d", idx1, idx2); - ent_size = 4; - break; - } - case JVM_CONSTANT_ClassIndex: { - printf("ClassIndex %s", WARN_MSG); - break; - } - case JVM_CONSTANT_UnresolvedClass: { - printf("UnresolvedClass: %s", WARN_MSG); - break; - } - case JVM_CONSTANT_UnresolvedClassInError: { - printf("UnresolvedClassInErr: %s", WARN_MSG); - break; - } - case JVM_CONSTANT_StringIndex: { - printf("StringIndex: %s", WARN_MSG); - break; - } - case JVM_CONSTANT_UnresolvedString: { - printf("UnresolvedString: %s", WARN_MSG); - break; - } - } - printf(";\n"); - bytes += ent_size; - size += ent_size; - } - printf("Cpool size: %d\n", size); - fflush(0); - return; -} /* end print_cpool_bytes */ - - -// Returns size of constant pool entry. -jint constantPoolOopDesc::cpool_entry_size(jint idx) { - switch(tag_at(idx).value()) { - case JVM_CONSTANT_Invalid: - case JVM_CONSTANT_Unicode: - return 1; - - case JVM_CONSTANT_Utf8: - return 3 + symbol_at(idx)->utf8_length(); - - case JVM_CONSTANT_Class: - case JVM_CONSTANT_String: - case JVM_CONSTANT_ClassIndex: - case JVM_CONSTANT_UnresolvedClass: - case JVM_CONSTANT_UnresolvedClassInError: - case JVM_CONSTANT_StringIndex: - case JVM_CONSTANT_UnresolvedString: - case JVM_CONSTANT_MethodType: - return 3; - - case JVM_CONSTANT_MethodHandle: - return 4; //tag, ref_kind, ref_index - - case JVM_CONSTANT_Integer: - case JVM_CONSTANT_Float: - case JVM_CONSTANT_Fieldref: - case JVM_CONSTANT_Methodref: - case JVM_CONSTANT_InterfaceMethodref: - case JVM_CONSTANT_NameAndType: - return 5; - - case JVM_CONSTANT_InvokeDynamic: - // u1 tag, u2 bsm, u2 nt - return 5; - - case JVM_CONSTANT_Long: - case JVM_CONSTANT_Double: - return 9; - } - assert(false, "cpool_entry_size: Invalid constant pool entry tag"); - return 1; -} /* end cpool_entry_size */ - - -// SymbolHashMap is used to find a constant pool index from a string. -// This function fills in SymbolHashMaps, one for utf8s and one for -// class names, returns size of the cpool raw bytes. -jint constantPoolOopDesc::hash_entries_to(SymbolHashMap *symmap, - SymbolHashMap *classmap) { - jint size = 0; - - for (u2 idx = 1; idx < length(); idx++) { - u2 tag = tag_at(idx).value(); - size += cpool_entry_size(idx); - - switch(tag) { - case JVM_CONSTANT_Utf8: { - Symbol* sym = symbol_at(idx); - symmap->add_entry(sym, idx); - DBG(printf("adding symbol entry %s = %d\n", sym->as_utf8(), idx)); - break; - } - case JVM_CONSTANT_Class: - case JVM_CONSTANT_UnresolvedClass: - case JVM_CONSTANT_UnresolvedClassInError: { - Symbol* sym = klass_name_at(idx); - classmap->add_entry(sym, idx); - DBG(printf("adding class entry %s = %d\n", sym->as_utf8(), idx)); - break; - } - case JVM_CONSTANT_Long: - case JVM_CONSTANT_Double: { - idx++; // Both Long and Double take two cpool slots - break; - } - } - } - return size; -} /* end hash_utf8_entries_to */ - - -// Copy cpool bytes. -// Returns: -// 0, in case of OutOfMemoryError -// -1, in case of internal error -// > 0, count of the raw cpool bytes that have been copied -int constantPoolOopDesc::copy_cpool_bytes(int cpool_size, - SymbolHashMap* tbl, - unsigned char *bytes) { - u2 idx1, idx2; - jint size = 0; - jint cnt = length(); - unsigned char *start_bytes = bytes; - - for (jint idx = 1; idx < cnt; idx++) { - u1 tag = tag_at(idx).value(); - jint ent_size = cpool_entry_size(idx); - - assert(size + ent_size <= cpool_size, "Size mismatch"); - - *bytes = tag; - DBG(printf("#%03hd tag=%03hd, ", idx, tag)); - switch(tag) { - case JVM_CONSTANT_Invalid: { - DBG(printf("JVM_CONSTANT_Invalid")); - break; - } - case JVM_CONSTANT_Unicode: { - assert(false, "Wrong constant pool tag: JVM_CONSTANT_Unicode"); - DBG(printf("JVM_CONSTANT_Unicode")); - break; - } - case JVM_CONSTANT_Utf8: { - Symbol* sym = symbol_at(idx); - char* str = sym->as_utf8(); - // Warning! It's crashing on x86 with len = sym->utf8_length() - int len = (int) strlen(str); - Bytes::put_Java_u2((address) (bytes+1), (u2) len); - for (int i = 0; i < len; i++) { - bytes[3+i] = (u1) str[i]; - } - DBG(printf("JVM_CONSTANT_Utf8: %s ", str)); - break; - } - case JVM_CONSTANT_Integer: { - jint val = int_at(idx); - Bytes::put_Java_u4((address) (bytes+1), *(u4*)&val); - break; - } - case JVM_CONSTANT_Float: { - jfloat val = float_at(idx); - Bytes::put_Java_u4((address) (bytes+1), *(u4*)&val); - break; - } - case JVM_CONSTANT_Long: { - jlong val = long_at(idx); - Bytes::put_Java_u8((address) (bytes+1), *(u8*)&val); - idx++; // Long takes two cpool slots - break; - } - case JVM_CONSTANT_Double: { - jdouble val = double_at(idx); - Bytes::put_Java_u8((address) (bytes+1), *(u8*)&val); - idx++; // Double takes two cpool slots - break; - } - case JVM_CONSTANT_Class: - case JVM_CONSTANT_UnresolvedClass: - case JVM_CONSTANT_UnresolvedClassInError: { - *bytes = JVM_CONSTANT_Class; - Symbol* sym = klass_name_at(idx); - idx1 = tbl->symbol_to_value(sym); - assert(idx1 != 0, "Have not found a hashtable entry"); - Bytes::put_Java_u2((address) (bytes+1), idx1); - DBG(printf("JVM_CONSTANT_Class: idx=#%03hd, %s", idx1, sym->as_utf8())); - break; - } - case JVM_CONSTANT_String: { - unsigned int hash; - char *str = string_at_noresolve(idx); - TempNewSymbol sym = SymbolTable::lookup_only(str, (int) strlen(str), hash); - if (sym == NULL) { - // sym can be NULL if string refers to incorrectly encoded JVM_CONSTANT_Utf8 - // this can happen with JVM TI; see CR 6839599 for more details - oop string = *(obj_at_addr_raw(idx)); - assert(java_lang_String::is_instance(string),"Not a String"); - DBG(printf("Error #%03hd tag=%03hd\n", idx, tag)); - idx1 = 0; - for (int j = 0; j < tbl->table_size() && idx1 == 0; j++) { - for (SymbolHashMapEntry* cur = tbl->bucket(j); cur != NULL; cur = cur->next()) { - int length; - Symbol* s = cur->symbol(); - jchar* chars = s->as_unicode(length); - if (java_lang_String::equals(string, chars, length)) { - idx1 = cur->value(); - DBG(printf("Index found: %d\n",idx1)); - break; - } - } - } - } else { - idx1 = tbl->symbol_to_value(sym); - } - assert(idx1 != 0, "Have not found a hashtable entry"); - Bytes::put_Java_u2((address) (bytes+1), idx1); - DBG(printf("JVM_CONSTANT_String: idx=#%03hd, %s", idx1, str)); - break; - } - case JVM_CONSTANT_UnresolvedString: { - *bytes = JVM_CONSTANT_String; - Symbol* sym = unresolved_string_at(idx); - idx1 = tbl->symbol_to_value(sym); - assert(idx1 != 0, "Have not found a hashtable entry"); - Bytes::put_Java_u2((address) (bytes+1), idx1); - DBG(char *str = sym->as_utf8()); - DBG(printf("JVM_CONSTANT_UnresolvedString: idx=#%03hd, %s", idx1, str)); - break; - } - case JVM_CONSTANT_Fieldref: - case JVM_CONSTANT_Methodref: - case JVM_CONSTANT_InterfaceMethodref: { - idx1 = uncached_klass_ref_index_at(idx); - idx2 = uncached_name_and_type_ref_index_at(idx); - Bytes::put_Java_u2((address) (bytes+1), idx1); - Bytes::put_Java_u2((address) (bytes+3), idx2); - DBG(printf("JVM_CONSTANT_Methodref: %hd %hd", idx1, idx2)); - break; - } - case JVM_CONSTANT_NameAndType: { - idx1 = name_ref_index_at(idx); - idx2 = signature_ref_index_at(idx); - Bytes::put_Java_u2((address) (bytes+1), idx1); - Bytes::put_Java_u2((address) (bytes+3), idx2); - DBG(printf("JVM_CONSTANT_NameAndType: %hd %hd", idx1, idx2)); - break; - } - case JVM_CONSTANT_ClassIndex: { - *bytes = JVM_CONSTANT_Class; - idx1 = klass_index_at(idx); - Bytes::put_Java_u2((address) (bytes+1), idx1); - DBG(printf("JVM_CONSTANT_ClassIndex: %hd", idx1)); - break; - } - case JVM_CONSTANT_StringIndex: { - *bytes = JVM_CONSTANT_String; - idx1 = string_index_at(idx); - Bytes::put_Java_u2((address) (bytes+1), idx1); - DBG(printf("JVM_CONSTANT_StringIndex: %hd", idx1)); - break; - } - case JVM_CONSTANT_MethodHandle: { - *bytes = JVM_CONSTANT_MethodHandle; - int kind = method_handle_ref_kind_at(idx); - idx1 = method_handle_index_at(idx); - *(bytes+1) = (unsigned char) kind; - Bytes::put_Java_u2((address) (bytes+2), idx1); - DBG(printf("JVM_CONSTANT_MethodHandle: %d %hd", kind, idx1)); - break; - } - case JVM_CONSTANT_MethodType: { - *bytes = JVM_CONSTANT_MethodType; - idx1 = method_type_index_at(idx); - Bytes::put_Java_u2((address) (bytes+1), idx1); - DBG(printf("JVM_CONSTANT_MethodType: %hd", idx1)); - break; - } - case JVM_CONSTANT_InvokeDynamic: { - *bytes = tag; - idx1 = extract_low_short_from_int(*int_at_addr(idx)); - idx2 = extract_high_short_from_int(*int_at_addr(idx)); - assert(idx2 == invoke_dynamic_name_and_type_ref_index_at(idx), "correct half of u4"); - Bytes::put_Java_u2((address) (bytes+1), idx1); - Bytes::put_Java_u2((address) (bytes+3), idx2); - DBG(printf("JVM_CONSTANT_InvokeDynamic: %hd %hd", idx1, idx2)); - break; - } - } - DBG(printf("\n")); - bytes += ent_size; - size += ent_size; - } - assert(size == cpool_size, "Size mismatch"); - - // Keep temorarily for debugging until it's stable. - DBG(print_cpool_bytes(cnt, start_bytes)); - return (int)(bytes - start_bytes); -} /* end copy_cpool_bytes */ - - -void SymbolHashMap::add_entry(Symbol* sym, u2 value) { - char *str = sym->as_utf8(); - unsigned int hash = compute_hash(str, sym->utf8_length()); - unsigned int index = hash % table_size(); - - // check if already in map - // we prefer the first entry since it is more likely to be what was used in - // the class file - for (SymbolHashMapEntry *en = bucket(index); en != NULL; en = en->next()) { - assert(en->symbol() != NULL, "SymbolHashMapEntry symbol is NULL"); - if (en->hash() == hash && en->symbol() == sym) { - return; // already there - } - } - - SymbolHashMapEntry* entry = new SymbolHashMapEntry(hash, sym, value); - entry->set_next(bucket(index)); - _buckets[index].set_entry(entry); - assert(entry->symbol() != NULL, "SymbolHashMapEntry symbol is NULL"); -} - -SymbolHashMapEntry* SymbolHashMap::find_entry(Symbol* sym) { - assert(sym != NULL, "SymbolHashMap::find_entry - symbol is NULL"); - char *str = sym->as_utf8(); - int len = sym->utf8_length(); - unsigned int hash = SymbolHashMap::compute_hash(str, len); - unsigned int index = hash % table_size(); - for (SymbolHashMapEntry *en = bucket(index); en != NULL; en = en->next()) { - assert(en->symbol() != NULL, "SymbolHashMapEntry symbol is NULL"); - if (en->hash() == hash && en->symbol() == sym) { - return en; - } - } - return NULL; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/constantPoolOop.hpp --- a/src/share/vm/oops/constantPoolOop.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,875 +0,0 @@ -/* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP -#define SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP - -#include "oops/arrayOop.hpp" -#include "oops/cpCacheOop.hpp" -#include "oops/symbol.hpp" -#include "oops/typeArrayOop.hpp" -#include "utilities/constantTag.hpp" -#ifdef TARGET_ARCH_x86 -# include "bytes_x86.hpp" -#endif -#ifdef TARGET_ARCH_sparc -# include "bytes_sparc.hpp" -#endif -#ifdef TARGET_ARCH_zero -# include "bytes_zero.hpp" -#endif -#ifdef TARGET_ARCH_arm -# include "bytes_arm.hpp" -#endif -#ifdef TARGET_ARCH_ppc -# include "bytes_ppc.hpp" -#endif - -// A constantPool is an array containing class constants as described in the -// class file. -// -// Most of the constant pool entries are written during class parsing, which -// is safe. For klass and string types, the constant pool entry is -// modified when the entry is resolved. If a klass or string constant pool -// entry is read without a lock, only the resolved state guarantees that -// the entry in the constant pool is a klass or String object and -// not a Symbol*. - -class SymbolHashMap; - -class CPSlot VALUE_OBJ_CLASS_SPEC { - intptr_t _ptr; - public: - CPSlot(intptr_t ptr): _ptr(ptr) {} - CPSlot(void* ptr): _ptr((intptr_t)ptr) {} - CPSlot(oop ptr): _ptr((intptr_t)ptr) {} - CPSlot(Symbol* ptr): _ptr((intptr_t)ptr | 1) {} - - intptr_t value() { return _ptr; } - bool is_oop() { return (_ptr & 1) == 0; } - bool is_metadata() { return (_ptr & 1) == 1; } - - oop get_oop() { - assert(is_oop(), "bad call"); - return oop(_ptr); - } - Symbol* get_symbol() { - assert(is_metadata(), "bad call"); - return (Symbol*)(_ptr & ~1); - } -}; - -class constantPoolOopDesc : public oopDesc { - friend class VMStructs; - friend class BytecodeInterpreter; // Directly extracts an oop in the pool for fast instanceof/checkcast - private: - typeArrayOop _tags; // the tag array describing the constant pool's contents - constantPoolCacheOop _cache; // the cache holding interpreter runtime information - klassOop _pool_holder; // the corresponding class - typeArrayOop _operands; // for variable-sized (InvokeDynamic) nodes, usually empty - int _flags; // a few header bits to describe contents for GC - int _length; // number of elements in the array - volatile bool _is_conc_safe; // if true, safe for concurrent - // GC processing - // only set to non-zero if constant pool is merged by RedefineClasses - int _orig_length; - - void set_tags(typeArrayOop tags) { oop_store_without_check((oop*)&_tags, tags); } - void tag_at_put(int which, jbyte t) { tags()->byte_at_put(which, t); } - void release_tag_at_put(int which, jbyte t) { tags()->release_byte_at_put(which, t); } - - void set_operands(typeArrayOop operands) { oop_store_without_check((oop*)&_operands, operands); } - - enum FlagBit { - FB_has_invokedynamic = 1, - FB_has_pseudo_string = 2, - FB_has_preresolution = 3 - }; - - int flags() const { return _flags; } - void set_flags(int f) { _flags = f; } - bool flag_at(FlagBit fb) const { return (_flags & (1 << (int)fb)) != 0; } - void set_flag_at(FlagBit fb); - // no clear_flag_at function; they only increase - - private: - intptr_t* base() const { return (intptr_t*) (((char*) this) + sizeof(constantPoolOopDesc)); } - oop* tags_addr() { return (oop*)&_tags; } - oop* cache_addr() { return (oop*)&_cache; } - oop* operands_addr() { return (oop*)&_operands; } - - CPSlot slot_at(int which) { - assert(is_within_bounds(which), "index out of bounds"); - // There's a transitional value of zero when converting from - // Symbol->0->Klass for G1 when resolving classes and strings. - // wait for the value to be non-zero (this is temporary) - volatile intptr_t adr = (intptr_t)OrderAccess::load_ptr_acquire(obj_at_addr_raw(which)); - if (adr == 0 && which != 0) { - constantTag t = tag_at(which); - if (t.is_unresolved_klass() || t.is_klass() || - t.is_unresolved_string() || t.is_string()) { - while ((adr = (intptr_t)OrderAccess::load_ptr_acquire(obj_at_addr_raw(which))) == 0); - } - } - return CPSlot(adr); - } - - void slot_at_put(int which, CPSlot s) const { - assert(is_within_bounds(which), "index out of bounds"); - *(intptr_t*)&base()[which] = s.value(); - } - oop* obj_at_addr_raw(int which) const { - assert(is_within_bounds(which), "index out of bounds"); - return (oop*) &base()[which]; - } - - void obj_at_put_without_check(int which, oop o) { - assert(is_within_bounds(which), "index out of bounds"); - oop_store_without_check((volatile oop *)obj_at_addr_raw(which), o); - } - - void obj_at_put(int which, oop o) const { - assert(is_within_bounds(which), "index out of bounds"); - oop_store((volatile oop*)obj_at_addr_raw(which), o); - } - - jint* int_at_addr(int which) const { - assert(is_within_bounds(which), "index out of bounds"); - return (jint*) &base()[which]; - } - - jlong* long_at_addr(int which) const { - assert(is_within_bounds(which), "index out of bounds"); - return (jlong*) &base()[which]; - } - - jfloat* float_at_addr(int which) const { - assert(is_within_bounds(which), "index out of bounds"); - return (jfloat*) &base()[which]; - } - - jdouble* double_at_addr(int which) const { - assert(is_within_bounds(which), "index out of bounds"); - return (jdouble*) &base()[which]; - } - - public: - typeArrayOop tags() const { return _tags; } - typeArrayOop operands() const { return _operands; } - - bool has_pseudo_string() const { return flag_at(FB_has_pseudo_string); } - bool has_invokedynamic() const { return flag_at(FB_has_invokedynamic); } - bool has_preresolution() const { return flag_at(FB_has_preresolution); } - void set_pseudo_string() { set_flag_at(FB_has_pseudo_string); } - void set_invokedynamic() { set_flag_at(FB_has_invokedynamic); } - void set_preresolution() { set_flag_at(FB_has_preresolution); } - - // Klass holding pool - klassOop pool_holder() const { return _pool_holder; } - void set_pool_holder(klassOop k) { oop_store_without_check((oop*)&_pool_holder, (oop) k); } - oop* pool_holder_addr() { return (oop*)&_pool_holder; } - - // Interpreter runtime support - constantPoolCacheOop cache() const { return _cache; } - void set_cache(constantPoolCacheOop cache){ oop_store((oop*)&_cache, cache); } - - // Assembly code support - static int tags_offset_in_bytes() { return offset_of(constantPoolOopDesc, _tags); } - static int cache_offset_in_bytes() { return offset_of(constantPoolOopDesc, _cache); } - static int operands_offset_in_bytes() { return offset_of(constantPoolOopDesc, _operands); } - static int pool_holder_offset_in_bytes() { return offset_of(constantPoolOopDesc, _pool_holder); } - - // Storing constants - - void klass_at_put(int which, klassOop k) { - // Overwrite the old index with a GC friendly value so - // that if G1 looks during the transition during oop_store it won't - // assert the symbol is not an oop. - *obj_at_addr_raw(which) = NULL; - assert(k != NULL, "resolved class shouldn't be null"); - obj_at_put_without_check(which, k); - // The interpreter assumes when the tag is stored, the klass is resolved - // and the klassOop is a klass rather than a Symbol*, so we need - // hardware store ordering here. - release_tag_at_put(which, JVM_CONSTANT_Class); - if (UseConcMarkSweepGC) { - // In case the earlier card-mark was consumed by a concurrent - // marking thread before the tag was updated, redirty the card. - obj_at_put_without_check(which, k); - } - } - - // For temporary use while constructing constant pool - void klass_index_at_put(int which, int name_index) { - tag_at_put(which, JVM_CONSTANT_ClassIndex); - *int_at_addr(which) = name_index; - } - - // Temporary until actual use - void unresolved_klass_at_put(int which, Symbol* s) { - release_tag_at_put(which, JVM_CONSTANT_UnresolvedClass); - slot_at_put(which, s); - } - - void method_handle_index_at_put(int which, int ref_kind, int ref_index) { - tag_at_put(which, JVM_CONSTANT_MethodHandle); - *int_at_addr(which) = ((jint) ref_index<<16) | ref_kind; - } - - void method_type_index_at_put(int which, int ref_index) { - tag_at_put(which, JVM_CONSTANT_MethodType); - *int_at_addr(which) = ref_index; - } - - void invoke_dynamic_at_put(int which, int bootstrap_specifier_index, int name_and_type_index) { - tag_at_put(which, JVM_CONSTANT_InvokeDynamic); - *int_at_addr(which) = ((jint) name_and_type_index<<16) | bootstrap_specifier_index; - } - - // Temporary until actual use - void unresolved_string_at_put(int which, Symbol* s) { - release_tag_at_put(which, JVM_CONSTANT_UnresolvedString); - slot_at_put(which, s); - } - - void int_at_put(int which, jint i) { - tag_at_put(which, JVM_CONSTANT_Integer); - *int_at_addr(which) = i; - } - - void long_at_put(int which, jlong l) { - tag_at_put(which, JVM_CONSTANT_Long); - // *long_at_addr(which) = l; - Bytes::put_native_u8((address)long_at_addr(which), *((u8*) &l)); - } - - void float_at_put(int which, jfloat f) { - tag_at_put(which, JVM_CONSTANT_Float); - *float_at_addr(which) = f; - } - - void double_at_put(int which, jdouble d) { - tag_at_put(which, JVM_CONSTANT_Double); - // *double_at_addr(which) = d; - // u8 temp = *(u8*) &d; - Bytes::put_native_u8((address) double_at_addr(which), *((u8*) &d)); - } - - Symbol** symbol_at_addr(int which) const { - assert(is_within_bounds(which), "index out of bounds"); - return (Symbol**) &base()[which]; - } - - void symbol_at_put(int which, Symbol* s) { - assert(s->refcount() != 0, "should have nonzero refcount"); - tag_at_put(which, JVM_CONSTANT_Utf8); - slot_at_put(which, s); - } - - void string_at_put(int which, oop str) { - // Overwrite the old index with a GC friendly value so - // that if G1 looks during the transition during oop_store it won't - // assert the symbol is not an oop. - *obj_at_addr_raw(which) = NULL; - assert(str != NULL, "resolved string shouldn't be null"); - obj_at_put(which, str); - release_tag_at_put(which, JVM_CONSTANT_String); - if (UseConcMarkSweepGC) { - // In case the earlier card-mark was consumed by a concurrent - // marking thread before the tag was updated, redirty the card. - obj_at_put_without_check(which, str); - } - } - - void object_at_put(int which, oop str) { - obj_at_put(which, str); - release_tag_at_put(which, JVM_CONSTANT_Object); - if (UseConcMarkSweepGC) { - // In case the earlier card-mark was consumed by a concurrent - // marking thread before the tag was updated, redirty the card. - obj_at_put_without_check(which, str); - } - } - - // For temporary use while constructing constant pool - void string_index_at_put(int which, int string_index) { - tag_at_put(which, JVM_CONSTANT_StringIndex); - *int_at_addr(which) = string_index; - } - - void field_at_put(int which, int class_index, int name_and_type_index) { - tag_at_put(which, JVM_CONSTANT_Fieldref); - *int_at_addr(which) = ((jint) name_and_type_index<<16) | class_index; - } - - void method_at_put(int which, int class_index, int name_and_type_index) { - tag_at_put(which, JVM_CONSTANT_Methodref); - *int_at_addr(which) = ((jint) name_and_type_index<<16) | class_index; - } - - void interface_method_at_put(int which, int class_index, int name_and_type_index) { - tag_at_put(which, JVM_CONSTANT_InterfaceMethodref); - *int_at_addr(which) = ((jint) name_and_type_index<<16) | class_index; // Not so nice - } - - void name_and_type_at_put(int which, int name_index, int signature_index) { - tag_at_put(which, JVM_CONSTANT_NameAndType); - *int_at_addr(which) = ((jint) signature_index<<16) | name_index; // Not so nice - } - - // Tag query - - constantTag tag_at(int which) const { return (constantTag)tags()->byte_at_acquire(which); } - - // Whether the entry is a pointer that must be GC'd. - bool is_pointer_entry(int which) { - constantTag tag = tag_at(which); - return tag.is_klass() || - tag.is_string() || - tag.is_object(); - } - - // Whether the entry points to an object for ldc (resolved or not) - bool is_object_entry(int which) { - constantTag tag = tag_at(which); - return is_pointer_entry(which) || - tag.is_unresolved_klass() || - tag.is_unresolved_string() || - tag.is_symbol(); - } - - // Fetching constants - - klassOop klass_at(int which, TRAPS) { - constantPoolHandle h_this(THREAD, this); - return klass_at_impl(h_this, which, CHECK_NULL); - } - - Symbol* klass_name_at(int which); // Returns the name, w/o resolving. - - klassOop resolved_klass_at(int which) { // Used by Compiler - guarantee(tag_at(which).is_klass(), "Corrupted constant pool"); - // Must do an acquire here in case another thread resolved the klass - // behind our back, lest we later load stale values thru the oop. - return klassOop(CPSlot(OrderAccess::load_ptr_acquire(obj_at_addr_raw(which))).get_oop()); - } - - // This method should only be used with a cpool lock or during parsing or gc - Symbol* unresolved_klass_at(int which) { // Temporary until actual use - Symbol* s = CPSlot(OrderAccess::load_ptr_acquire(obj_at_addr_raw(which))).get_symbol(); - // check that the klass is still unresolved. - assert(tag_at(which).is_unresolved_klass(), "Corrupted constant pool"); - return s; - } - - // RedefineClasses() API support: - Symbol* klass_at_noresolve(int which) { return klass_name_at(which); } - - jint int_at(int which) { - assert(tag_at(which).is_int(), "Corrupted constant pool"); - return *int_at_addr(which); - } - - jlong long_at(int which) { - assert(tag_at(which).is_long(), "Corrupted constant pool"); - // return *long_at_addr(which); - u8 tmp = Bytes::get_native_u8((address)&base()[which]); - return *((jlong*)&tmp); - } - - jfloat float_at(int which) { - assert(tag_at(which).is_float(), "Corrupted constant pool"); - return *float_at_addr(which); - } - - jdouble double_at(int which) { - assert(tag_at(which).is_double(), "Corrupted constant pool"); - u8 tmp = Bytes::get_native_u8((address)&base()[which]); - return *((jdouble*)&tmp); - } - - Symbol* symbol_at(int which) { - assert(tag_at(which).is_utf8(), "Corrupted constant pool"); - return slot_at(which).get_symbol(); - } - - oop string_at(int which, TRAPS) { - constantPoolHandle h_this(THREAD, this); - return string_at_impl(h_this, which, CHECK_NULL); - } - - oop object_at(int which) { - assert(tag_at(which).is_object(), "Corrupted constant pool"); - return slot_at(which).get_oop(); - } - - // A "pseudo-string" is an non-string oop that has found is way into - // a String entry. - // Under EnableInvokeDynamic this can happen if the user patches a live - // object into a CONSTANT_String entry of an anonymous class. - // Method oops internally created for method handles may also - // use pseudo-strings to link themselves to related metaobjects. - - bool is_pseudo_string_at(int which); - - oop pseudo_string_at(int which) { - assert(tag_at(which).is_string(), "Corrupted constant pool"); - return slot_at(which).get_oop(); - } - - void pseudo_string_at_put(int which, oop x) { - assert(EnableInvokeDynamic, ""); - set_pseudo_string(); // mark header - assert(tag_at(which).is_string() || tag_at(which).is_unresolved_string(), "Corrupted constant pool"); - string_at_put(which, x); // this works just fine - } - - // only called when we are sure a string entry is already resolved (via an - // earlier string_at call. - oop resolved_string_at(int which) { - assert(tag_at(which).is_string(), "Corrupted constant pool"); - // Must do an acquire here in case another thread resolved the klass - // behind our back, lest we later load stale values thru the oop. - return CPSlot(OrderAccess::load_ptr_acquire(obj_at_addr_raw(which))).get_oop(); - } - - // This method should only be used with a cpool lock or during parsing or gc - Symbol* unresolved_string_at(int which) { // Temporary until actual use - Symbol* s = CPSlot(OrderAccess::load_ptr_acquire(obj_at_addr_raw(which))).get_symbol(); - // check that the string is still unresolved. - assert(tag_at(which).is_unresolved_string(), "Corrupted constant pool"); - return s; - } - - // Returns an UTF8 for a CONSTANT_String entry at a given index. - // UTF8 char* representation was chosen to avoid conversion of - // java_lang_Strings at resolved entries into Symbol*s - // or vice versa. - // Caller is responsible for checking for pseudo-strings. - char* string_at_noresolve(int which); - - jint name_and_type_at(int which) { - assert(tag_at(which).is_name_and_type(), "Corrupted constant pool"); - return *int_at_addr(which); - } - - int method_handle_ref_kind_at(int which) { - assert(tag_at(which).is_method_handle(), "Corrupted constant pool"); - return extract_low_short_from_int(*int_at_addr(which)); // mask out unwanted ref_index bits - } - int method_handle_index_at(int which) { - assert(tag_at(which).is_method_handle(), "Corrupted constant pool"); - return extract_high_short_from_int(*int_at_addr(which)); // shift out unwanted ref_kind bits - } - int method_type_index_at(int which) { - assert(tag_at(which).is_method_type(), "Corrupted constant pool"); - return *int_at_addr(which); - } - // Derived queries: - Symbol* method_handle_name_ref_at(int which) { - int member = method_handle_index_at(which); - return impl_name_ref_at(member, true); - } - Symbol* method_handle_signature_ref_at(int which) { - int member = method_handle_index_at(which); - return impl_signature_ref_at(member, true); - } - int method_handle_klass_index_at(int which) { - int member = method_handle_index_at(which); - return impl_klass_ref_index_at(member, true); - } - Symbol* method_type_signature_at(int which) { - int sym = method_type_index_at(which); - return symbol_at(sym); - } - - int invoke_dynamic_name_and_type_ref_index_at(int which) { - assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool"); - return extract_high_short_from_int(*int_at_addr(which)); - } - int invoke_dynamic_bootstrap_specifier_index(int which) { - assert(tag_at(which).value() == JVM_CONSTANT_InvokeDynamic, "Corrupted constant pool"); - return extract_low_short_from_int(*int_at_addr(which)); - } - int invoke_dynamic_operand_base(int which) { - int bootstrap_specifier_index = invoke_dynamic_bootstrap_specifier_index(which); - return operand_offset_at(operands(), bootstrap_specifier_index); - } - // The first part of the operands array consists of an index into the second part. - // Extract a 32-bit index value from the first part. - static int operand_offset_at(typeArrayOop operands, int bootstrap_specifier_index) { - int n = (bootstrap_specifier_index * 2); - assert(n >= 0 && n+2 <= operands->length(), "oob"); - // The first 32-bit index points to the beginning of the second part - // of the operands array. Make sure this index is in the first part. - DEBUG_ONLY(int second_part = build_int_from_shorts(operands->short_at(0), - operands->short_at(1))); - assert(second_part == 0 || n+2 <= second_part, "oob (2)"); - int offset = build_int_from_shorts(operands->short_at(n+0), - operands->short_at(n+1)); - // The offset itself must point into the second part of the array. - assert(offset == 0 || offset >= second_part && offset <= operands->length(), "oob (3)"); - return offset; - } - static void operand_offset_at_put(typeArrayOop operands, int bootstrap_specifier_index, int offset) { - int n = bootstrap_specifier_index * 2; - assert(n >= 0 && n+2 <= operands->length(), "oob"); - operands->short_at_put(n+0, extract_low_short_from_int(offset)); - operands->short_at_put(n+1, extract_high_short_from_int(offset)); - } - static int operand_array_length(typeArrayOop operands) { - if (operands == NULL || operands->length() == 0) return 0; - int second_part = operand_offset_at(operands, 0); - return (second_part / 2); - } - -#ifdef ASSERT - // operand tuples fit together exactly, end to end - static int operand_limit_at(typeArrayOop operands, int bootstrap_specifier_index) { - int nextidx = bootstrap_specifier_index + 1; - if (nextidx == operand_array_length(operands)) - return operands->length(); - else - return operand_offset_at(operands, nextidx); - } - int invoke_dynamic_operand_limit(int which) { - int bootstrap_specifier_index = invoke_dynamic_bootstrap_specifier_index(which); - return operand_limit_at(operands(), bootstrap_specifier_index); - } -#endif //ASSERT - - // layout of InvokeDynamic bootstrap method specifier (in second part of operands array): - enum { - _indy_bsm_offset = 0, // CONSTANT_MethodHandle bsm - _indy_argc_offset = 1, // u2 argc - _indy_argv_offset = 2 // u2 argv[argc] - }; - int invoke_dynamic_bootstrap_method_ref_index_at(int which) { - assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool"); - int op_base = invoke_dynamic_operand_base(which); - return operands()->short_at(op_base + _indy_bsm_offset); - } - int invoke_dynamic_argument_count_at(int which) { - assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool"); - int op_base = invoke_dynamic_operand_base(which); - int argc = operands()->short_at(op_base + _indy_argc_offset); - DEBUG_ONLY(int end_offset = op_base + _indy_argv_offset + argc; - int next_offset = invoke_dynamic_operand_limit(which)); - assert(end_offset == next_offset, "matched ending"); - return argc; - } - int invoke_dynamic_argument_index_at(int which, int j) { - int op_base = invoke_dynamic_operand_base(which); - DEBUG_ONLY(int argc = operands()->short_at(op_base + _indy_argc_offset)); - assert((uint)j < (uint)argc, "oob"); - return operands()->short_at(op_base + _indy_argv_offset + j); - } - - // The following methods (name/signature/klass_ref_at, klass_ref_at_noresolve, - // name_and_type_ref_index_at) all expect to be passed indices obtained - // directly from the bytecode. - // If the indices are meant to refer to fields or methods, they are - // actually rewritten constant pool cache indices. - // The routine remap_instruction_operand_from_cache manages the adjustment - // of these values back to constant pool indices. - - // There are also "uncached" versions which do not adjust the operand index; see below. - - // FIXME: Consider renaming these with a prefix "cached_" to make the distinction clear. - // In a few cases (the verifier) there are uses before a cpcache has been built, - // which are handled by a dynamic check in remap_instruction_operand_from_cache. - // FIXME: Remove the dynamic check, and adjust all callers to specify the correct mode. - - // Lookup for entries consisting of (klass_index, name_and_type index) - klassOop klass_ref_at(int which, TRAPS); - Symbol* klass_ref_at_noresolve(int which); - Symbol* name_ref_at(int which) { return impl_name_ref_at(which, false); } - Symbol* signature_ref_at(int which) { return impl_signature_ref_at(which, false); } - - int klass_ref_index_at(int which) { return impl_klass_ref_index_at(which, false); } - int name_and_type_ref_index_at(int which) { return impl_name_and_type_ref_index_at(which, false); } - - // Lookup for entries consisting of (name_index, signature_index) - int name_ref_index_at(int which_nt); // == low-order jshort of name_and_type_at(which_nt) - int signature_ref_index_at(int which_nt); // == high-order jshort of name_and_type_at(which_nt) - - BasicType basic_type_for_signature_at(int which); - - // Resolve string constants (to prevent allocation during compilation) - void resolve_string_constants(TRAPS) { - constantPoolHandle h_this(THREAD, this); - resolve_string_constants_impl(h_this, CHECK); - } - - private: - enum { _no_index_sentinel = -1, _possible_index_sentinel = -2 }; - public: - - // Resolve late bound constants. - oop resolve_constant_at(int index, TRAPS) { - constantPoolHandle h_this(THREAD, this); - return resolve_constant_at_impl(h_this, index, _no_index_sentinel, THREAD); - } - - oop resolve_cached_constant_at(int cache_index, TRAPS) { - constantPoolHandle h_this(THREAD, this); - return resolve_constant_at_impl(h_this, _no_index_sentinel, cache_index, THREAD); - } - - oop resolve_possibly_cached_constant_at(int pool_index, TRAPS) { - constantPoolHandle h_this(THREAD, this); - return resolve_constant_at_impl(h_this, pool_index, _possible_index_sentinel, THREAD); - } - - oop resolve_bootstrap_specifier_at(int index, TRAPS) { - constantPoolHandle h_this(THREAD, this); - return resolve_bootstrap_specifier_at_impl(h_this, index, THREAD); - } - - // Klass name matches name at offset - bool klass_name_at_matches(instanceKlassHandle k, int which); - - // Sizing - int length() const { return _length; } - void set_length(int length) { _length = length; } - - // Tells whether index is within bounds. - bool is_within_bounds(int index) const { - return 0 <= index && index < length(); - } - - static int header_size() { return sizeof(constantPoolOopDesc)/HeapWordSize; } - static int object_size(int length) { return align_object_size(header_size() + length); } - int object_size() { return object_size(length()); } - - bool is_conc_safe() { return _is_conc_safe; } - void set_is_conc_safe(bool v) { _is_conc_safe = v; } - - friend class constantPoolKlass; - friend class ClassFileParser; - friend class SystemDictionary; - - // Used by compiler to prevent classloading. - static methodOop method_at_if_loaded (constantPoolHandle this_oop, int which); - static bool has_appendix_at_if_loaded (constantPoolHandle this_oop, int which); - static oop appendix_at_if_loaded (constantPoolHandle this_oop, int which); - static klassOop klass_at_if_loaded (constantPoolHandle this_oop, int which); - static klassOop klass_ref_at_if_loaded (constantPoolHandle this_oop, int which); - // Same as above - but does LinkResolving. - static klassOop klass_ref_at_if_loaded_check(constantPoolHandle this_oop, int which, TRAPS); - - // Routines currently used for annotations (only called by jvm.cpp) but which might be used in the - // future by other Java code. These take constant pool indices rather than - // constant pool cache indices as do the peer methods above. - Symbol* uncached_klass_ref_at_noresolve(int which); - Symbol* uncached_name_ref_at(int which) { return impl_name_ref_at(which, true); } - Symbol* uncached_signature_ref_at(int which) { return impl_signature_ref_at(which, true); } - int uncached_klass_ref_index_at(int which) { return impl_klass_ref_index_at(which, true); } - int uncached_name_and_type_ref_index_at(int which) { return impl_name_and_type_ref_index_at(which, true); } - - // Sharing - int pre_resolve_shared_klasses(TRAPS); - void shared_symbols_iterate(SymbolClosure* closure0); - void shared_tags_iterate(OopClosure* closure0); - void shared_strings_iterate(OopClosure* closure0); - - // Debugging - const char* printable_name_at(int which) PRODUCT_RETURN0; - -#ifdef ASSERT - enum { CPCACHE_INDEX_TAG = 0x10000 }; // helps keep CP cache indices distinct from CP indices -#else - enum { CPCACHE_INDEX_TAG = 0 }; // in product mode, this zero value is a no-op -#endif //ASSERT - - static int get_cpcache_index(int index) { return index - CPCACHE_INDEX_TAG; } - - private: - - Symbol* impl_name_ref_at(int which, bool uncached); - Symbol* impl_signature_ref_at(int which, bool uncached); - int impl_klass_ref_index_at(int which, bool uncached); - int impl_name_and_type_ref_index_at(int which, bool uncached); - - int remap_instruction_operand_from_cache(int operand); // operand must be biased by CPCACHE_INDEX_TAG - - // Used while constructing constant pool (only by ClassFileParser) - jint klass_index_at(int which) { - assert(tag_at(which).is_klass_index(), "Corrupted constant pool"); - return *int_at_addr(which); - } - - jint string_index_at(int which) { - assert(tag_at(which).is_string_index(), "Corrupted constant pool"); - return *int_at_addr(which); - } - - // Performs the LinkResolver checks - static void verify_constant_pool_resolve(constantPoolHandle this_oop, KlassHandle klass, TRAPS); - - // Implementation of methods that needs an exposed 'this' pointer, in order to - // handle GC while executing the method - static klassOop klass_at_impl(constantPoolHandle this_oop, int which, TRAPS); - static oop string_at_impl(constantPoolHandle this_oop, int which, TRAPS); - - // Resolve string constants (to prevent allocation during compilation) - static void resolve_string_constants_impl(constantPoolHandle this_oop, TRAPS); - - static oop resolve_constant_at_impl(constantPoolHandle this_oop, int index, int cache_index, TRAPS); - static oop resolve_bootstrap_specifier_at_impl(constantPoolHandle this_oop, int index, TRAPS); - - public: - // Merging constantPoolOop support: - bool compare_entry_to(int index1, constantPoolHandle cp2, int index2, TRAPS); - void copy_cp_to(int start_i, int end_i, constantPoolHandle to_cp, int to_i, TRAPS) { - constantPoolHandle h_this(THREAD, this); - copy_cp_to_impl(h_this, start_i, end_i, to_cp, to_i, THREAD); - } - static void copy_cp_to_impl(constantPoolHandle from_cp, int start_i, int end_i, constantPoolHandle to_cp, int to_i, TRAPS); - static void copy_entry_to(constantPoolHandle from_cp, int from_i, constantPoolHandle to_cp, int to_i, TRAPS); - int find_matching_entry(int pattern_i, constantPoolHandle search_cp, TRAPS); - int orig_length() const { return _orig_length; } - void set_orig_length(int orig_length) { _orig_length = orig_length; } - - // Decrease ref counts of symbols that are in the constant pool - // when the holder class is unloaded - void unreference_symbols(); - - // JVMTI accesss - GetConstantPool, RetransformClasses, ... - friend class JvmtiConstantPoolReconstituter; - - private: - jint cpool_entry_size(jint idx); - jint hash_entries_to(SymbolHashMap *symmap, SymbolHashMap *classmap); - - // Copy cpool bytes into byte array. - // Returns: - // int > 0, count of the raw cpool bytes that have been copied - // 0, OutOfMemory error - // -1, Internal error - int copy_cpool_bytes(int cpool_size, - SymbolHashMap* tbl, - unsigned char *bytes); -}; - -class SymbolHashMapEntry : public CHeapObj { - private: - unsigned int _hash; // 32-bit hash for item - SymbolHashMapEntry* _next; // Next element in the linked list for this bucket - Symbol* _symbol; // 1-st part of the mapping: symbol => value - u2 _value; // 2-nd part of the mapping: symbol => value - - public: - unsigned int hash() const { return _hash; } - void set_hash(unsigned int hash) { _hash = hash; } - - SymbolHashMapEntry* next() const { return _next; } - void set_next(SymbolHashMapEntry* next) { _next = next; } - - Symbol* symbol() const { return _symbol; } - void set_symbol(Symbol* sym) { _symbol = sym; } - - u2 value() const { return _value; } - void set_value(u2 value) { _value = value; } - - SymbolHashMapEntry(unsigned int hash, Symbol* symbol, u2 value) - : _hash(hash), _symbol(symbol), _value(value), _next(NULL) {} - -}; // End SymbolHashMapEntry class - - -class SymbolHashMapBucket : public CHeapObj { - -private: - SymbolHashMapEntry* _entry; - -public: - SymbolHashMapEntry* entry() const { return _entry; } - void set_entry(SymbolHashMapEntry* entry) { _entry = entry; } - void clear() { _entry = NULL; } - -}; // End SymbolHashMapBucket class - - -class SymbolHashMap: public CHeapObj { - - private: - // Default number of entries in the table - enum SymbolHashMap_Constants { - _Def_HashMap_Size = 256 - }; - - int _table_size; - SymbolHashMapBucket* _buckets; - - void initialize_table(int table_size) { - _table_size = table_size; - _buckets = NEW_C_HEAP_ARRAY(SymbolHashMapBucket, table_size, mtSymbol); - for (int index = 0; index < table_size; index++) { - _buckets[index].clear(); - } - } - - public: - - int table_size() const { return _table_size; } - - SymbolHashMap() { initialize_table(_Def_HashMap_Size); } - SymbolHashMap(int table_size) { initialize_table(table_size); } - - // hash P(31) from Kernighan & Ritchie - static unsigned int compute_hash(const char* str, int len) { - unsigned int hash = 0; - while (len-- > 0) { - hash = 31*hash + (unsigned) *str; - str++; - } - return hash; - } - - SymbolHashMapEntry* bucket(int i) { - return _buckets[i].entry(); - } - - void add_entry(Symbol* sym, u2 value); - SymbolHashMapEntry* find_entry(Symbol* sym); - - u2 symbol_to_value(Symbol* sym) { - SymbolHashMapEntry *entry = find_entry(sym); - return (entry == NULL) ? 0 : entry->value(); - } - - ~SymbolHashMap() { - SymbolHashMapEntry* next; - for (int i = 0; i < _table_size; i++) { - for (SymbolHashMapEntry* cur = bucket(i); cur != NULL; cur = next) { - next = cur->next(); - delete(cur); - } - } - delete _buckets; - } -}; // End SymbolHashMap class - -#endif // SHARE_VM_OOPS_CONSTANTPOOLOOP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/cpCache.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/cpCache.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,604 @@ +/* + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "gc_implementation/shared/markSweep.inline.hpp" +#include "interpreter/interpreter.hpp" +#include "interpreter/rewriter.hpp" +#include "memory/universe.inline.hpp" +#include "oops/cpCache.hpp" +#include "oops/objArrayOop.hpp" +#include "oops/oop.inline.hpp" +#include "prims/jvmtiRedefineClassesTrace.hpp" +#include "prims/methodHandles.hpp" +#include "runtime/handles.inline.hpp" +#ifndef SERIALGC +# include "gc_implementation/parallelScavenge/psPromotionManager.hpp" +#endif + + +// Implememtation of ConstantPoolCacheEntry + +void ConstantPoolCacheEntry::initialize_entry(int index) { + assert(0 < index && index < 0x10000, "sanity check"); + _indices = index; + assert(constant_pool_index() == index, ""); +} + +int ConstantPoolCacheEntry::make_flags(TosState state, + int option_bits, + int field_index_or_method_params) { + assert(state < number_of_states, "Invalid state in make_flags"); + int f = ((int)state << tos_state_shift) | option_bits | field_index_or_method_params; + // Preserve existing flag bit values + // The low bits are a field offset, or else the method parameter size. +#ifdef ASSERT + TosState old_state = flag_state(); + assert(old_state == (TosState)0 || old_state == state, + "inconsistent cpCache flags state"); +#endif + return (_flags | f) ; +} + +void ConstantPoolCacheEntry::set_bytecode_1(Bytecodes::Code code) { +#ifdef ASSERT + // Read once. + volatile Bytecodes::Code c = bytecode_1(); + assert(c == 0 || c == code || code == 0, "update must be consistent"); +#endif + // Need to flush pending stores here before bytecode is written. + OrderAccess::release_store_ptr(&_indices, _indices | ((u_char)code << bytecode_1_shift)); +} + +void ConstantPoolCacheEntry::set_bytecode_2(Bytecodes::Code code) { +#ifdef ASSERT + // Read once. + volatile Bytecodes::Code c = bytecode_2(); + assert(c == 0 || c == code || code == 0, "update must be consistent"); +#endif + // Need to flush pending stores here before bytecode is written. + OrderAccess::release_store_ptr(&_indices, _indices | ((u_char)code << bytecode_2_shift)); +} + +// Sets f1, ordering with previous writes. +void ConstantPoolCacheEntry::release_set_f1(Metadata* f1) { + assert(f1 != NULL, ""); + OrderAccess::release_store_ptr((HeapWord*) &_f1, f1); +} + +// Sets flags, but only if the value was previously zero. +bool ConstantPoolCacheEntry::init_flags_atomic(intptr_t flags) { + intptr_t result = Atomic::cmpxchg_ptr(flags, &_flags, 0); + return (result == 0); +} + +// Note that concurrent update of both bytecodes can leave one of them +// reset to zero. This is harmless; the interpreter will simply re-resolve +// the damaged entry. More seriously, the memory synchronization is needed +// to flush other fields (f1, f2) completely to memory before the bytecodes +// are updated, lest other processors see a non-zero bytecode but zero f1/f2. +void ConstantPoolCacheEntry::set_field(Bytecodes::Code get_code, + Bytecodes::Code put_code, + KlassHandle field_holder, + int field_index, + int field_offset, + TosState field_type, + bool is_final, + bool is_volatile, + Klass* root_klass) { + set_f1(field_holder()); + set_f2(field_offset); + assert((field_index & field_index_mask) == field_index, + "field index does not fit in low flag bits"); + set_field_flags(field_type, + ((is_volatile ? 1 : 0) << is_volatile_shift) | + ((is_final ? 1 : 0) << is_final_shift), + field_index); + set_bytecode_1(get_code); + set_bytecode_2(put_code); + NOT_PRODUCT(verify(tty)); +} + +void ConstantPoolCacheEntry::set_parameter_size(int value) { + // This routine is called only in corner cases where the CPCE is not yet initialized. + // See AbstractInterpreter::deopt_continue_after_entry. + assert(_flags == 0 || parameter_size() == 0 || parameter_size() == value, + err_msg("size must not change: parameter_size=%d, value=%d", parameter_size(), value)); + // Setting the parameter size by itself is only safe if the + // current value of _flags is 0, otherwise another thread may have + // updated it and we don't want to overwrite that value. Don't + // bother trying to update it once it's nonzero but always make + // sure that the final parameter size agrees with what was passed. + if (_flags == 0) { + Atomic::cmpxchg_ptr((value & parameter_size_mask), &_flags, 0); + } + guarantee(parameter_size() == value, + err_msg("size must not change: parameter_size=%d, value=%d", parameter_size(), value)); +} + +void ConstantPoolCacheEntry::set_method(Bytecodes::Code invoke_code, + methodHandle method, + int vtable_index) { + assert(method->interpreter_entry() != NULL, "should have been set at this point"); + assert(!method->is_obsolete(), "attempt to write obsolete method to cpCache"); + + int byte_no = -1; + bool change_to_virtual = false; + + switch (invoke_code) { + case Bytecodes::_invokeinterface: + // We get here from InterpreterRuntime::resolve_invoke when an invokeinterface + // instruction somehow links to a non-interface method (in Object). + // In that case, the method has no itable index and must be invoked as a virtual. + // Set a flag to keep track of this corner case. + change_to_virtual = true; + + // ...and fall through as if we were handling invokevirtual: + case Bytecodes::_invokevirtual: + { + if (method->can_be_statically_bound()) { + // set_f2_as_vfinal_method checks if is_vfinal flag is true. + set_method_flags(as_TosState(method->result_type()), + ( 1 << is_vfinal_shift) | + ((method->is_final_method() ? 1 : 0) << is_final_shift) | + ((change_to_virtual ? 1 : 0) << is_forced_virtual_shift), + method()->size_of_parameters()); + set_f2_as_vfinal_method(method()); + } else { + assert(vtable_index >= 0, "valid index"); + assert(!method->is_final_method(), "sanity"); + set_method_flags(as_TosState(method->result_type()), + ((change_to_virtual ? 1 : 0) << is_forced_virtual_shift), + method()->size_of_parameters()); + set_f2(vtable_index); + } + byte_no = 2; + break; + } + + case Bytecodes::_invokespecial: + case Bytecodes::_invokestatic: + // Note: Read and preserve the value of the is_vfinal flag on any + // invokevirtual bytecode shared with this constant pool cache entry. + // It is cheap and safe to consult is_vfinal() at all times. + // Once is_vfinal is set, it must stay that way, lest we get a dangling oop. + set_method_flags(as_TosState(method->result_type()), + ((is_vfinal() ? 1 : 0) << is_vfinal_shift) | + ((method->is_final_method() ? 1 : 0) << is_final_shift), + method()->size_of_parameters()); + set_f1(method()); + byte_no = 1; + break; + default: + ShouldNotReachHere(); + break; + } + + // Note: byte_no also appears in TemplateTable::resolve. + if (byte_no == 1) { + assert(invoke_code != Bytecodes::_invokevirtual && + invoke_code != Bytecodes::_invokeinterface, ""); + set_bytecode_1(invoke_code); + } else if (byte_no == 2) { + if (change_to_virtual) { + assert(invoke_code == Bytecodes::_invokeinterface, ""); + // NOTE: THIS IS A HACK - BE VERY CAREFUL!!! + // + // Workaround for the case where we encounter an invokeinterface, but we + // should really have an _invokevirtual since the resolved method is a + // virtual method in java.lang.Object. This is a corner case in the spec + // but is presumably legal. javac does not generate this code. + // + // We set bytecode_1() to _invokeinterface, because that is the + // bytecode # used by the interpreter to see if it is resolved. + // We set bytecode_2() to _invokevirtual. + // See also interpreterRuntime.cpp. (8/25/2000) + // Only set resolved for the invokeinterface case if method is public. + // Otherwise, the method needs to be reresolved with caller for each + // interface call. + if (method->is_public()) set_bytecode_1(invoke_code); + } else { + assert(invoke_code == Bytecodes::_invokevirtual, ""); + } + // set up for invokevirtual, even if linking for invokeinterface also: + set_bytecode_2(Bytecodes::_invokevirtual); + } else { + ShouldNotReachHere(); + } + NOT_PRODUCT(verify(tty)); +} + + +void ConstantPoolCacheEntry::set_interface_call(methodHandle method, int index) { + Klass* interf = method->method_holder(); + assert(InstanceKlass::cast(interf)->is_interface(), "must be an interface"); + assert(!method->is_final_method(), "interfaces do not have final methods; cannot link to one here"); + set_f1(interf); + set_f2(index); + set_method_flags(as_TosState(method->result_type()), + 0, // no option bits + method()->size_of_parameters()); + set_bytecode_1(Bytecodes::_invokeinterface); +} + + +void ConstantPoolCacheEntry::set_method_handle(methodHandle adapter, Handle appendix, + objArrayHandle resolved_references) { + set_method_handle_common(Bytecodes::_invokehandle, adapter, appendix, resolved_references); +} + +void ConstantPoolCacheEntry::set_dynamic_call(methodHandle adapter, Handle appendix, + objArrayHandle resolved_references) { + set_method_handle_common(Bytecodes::_invokedynamic, adapter, appendix, resolved_references); +} + +void ConstantPoolCacheEntry::set_method_handle_common(Bytecodes::Code invoke_code, + methodHandle adapter, + Handle appendix, + objArrayHandle resolved_references) { + // NOTE: This CPCE can be the subject of data races. + // There are three words to update: flags, refs[f2], f1 (in that order). + // Writers must store all other values before f1. + // Readers must test f1 first for non-null before reading other fields. + // Competing writers must acquire exclusive access on the first + // write, to flags, using a compare/exchange. + // A losing writer to flags must spin until the winner writes f1, + // so that when he returns, he can use the linked cache entry. + + bool has_appendix = appendix.not_null(); + + // Write the flags. + bool owner = + init_method_flags_atomic(as_TosState(adapter->result_type()), + ((has_appendix ? 1 : 0) << has_appendix_shift) | + ( 1 << is_final_shift), + adapter->size_of_parameters()); + if (!owner) { + // Somebody else is working on the same CPCE. Let them proceed. + while (is_f1_null()) { + // Pause momentarily on a low-level lock, to allow racing thread to win. + MutexLockerEx mu(Patching_lock, Mutex::_no_safepoint_check_flag); + os::yield(); + } + return; + } + + if (TraceInvokeDynamic) { + tty->print_cr("set_method_handle bc=%d appendix="PTR_FORMAT"%s method="PTR_FORMAT" ", + invoke_code, + (intptr_t)appendix(), (has_appendix ? "" : " (unused)"), + (intptr_t)adapter()); + adapter->print(); + if (has_appendix) appendix()->print(); + } + + // Method handle invokes and invokedynamic sites use both cp cache words. + // refs[f2], if not null, contains a value passed as a trailing argument to the adapter. + // In the general case, this could be the call site's MethodType, + // for use with java.lang.Invokers.checkExactType, or else a CallSite object. + // f1 contains the adapter method which manages the actual call. + // In the general case, this is a compiled LambdaForm. + // (The Java code is free to optimize these calls by binding other + // sorts of methods and appendices to call sites.) + // JVM-level linking is via f1, as if for invokespecial, and signatures are erased. + // The appendix argument (if any) is added to the signature, and is counted in the parameter_size bits. + // Even with the appendix, the method will never take more than 255 parameter slots. + // + // This means that given a call site like (List)mh.invoke("foo"), + // the f1 method has signature '(Ljl/Object;Ljl/invoke/MethodType;)Ljl/Object;', + // not '(Ljava/lang/String;)Ljava/util/List;'. + // The fact that String and List are involved is encoded in the MethodType in refs[f2]. + // This allows us to create fewer method oops, while keeping type safety. + // + + if (has_appendix) { + int ref_index = f2_as_index(); + assert(ref_index >= 0 && ref_index < resolved_references->length(), "oob"); + assert(resolved_references->obj_at(ref_index) == NULL, "init just once"); + resolved_references->obj_at_put(ref_index, appendix()); + } + + release_set_f1(adapter()); // This must be the last one to set (see NOTE above)! + + // The interpreter assembly code does not check byte_2, + // but it is used by is_resolved, method_if_resolved, etc. + set_bytecode_1(invoke_code); + NOT_PRODUCT(verify(tty)); + if (TraceInvokeDynamic) { + this->print(tty, 0); + } +} + +Method* ConstantPoolCacheEntry::method_if_resolved(constantPoolHandle cpool) { + // Decode the action of set_method and set_interface_call + Bytecodes::Code invoke_code = bytecode_1(); + if (invoke_code != (Bytecodes::Code)0) { + Metadata* f1 = (Metadata*)_f1; + if (f1 != NULL) { + switch (invoke_code) { + case Bytecodes::_invokeinterface: + assert(f1->is_klass(), ""); + return klassItable::method_for_itable_index((Klass*)f1, f2_as_index()); + case Bytecodes::_invokestatic: + case Bytecodes::_invokespecial: + assert(!has_appendix(), ""); + case Bytecodes::_invokehandle: + case Bytecodes::_invokedynamic: + assert(f1->is_method(), ""); + return (Method*)f1; + } + } + } + invoke_code = bytecode_2(); + if (invoke_code != (Bytecodes::Code)0) { + switch (invoke_code) { + case Bytecodes::_invokevirtual: + if (is_vfinal()) { + // invokevirtual + Method* m = f2_as_vfinal_method(); + assert(m->is_method(), ""); + return m; + } else { + int holder_index = cpool->uncached_klass_ref_index_at(constant_pool_index()); + if (cpool->tag_at(holder_index).is_klass()) { + Klass* klass = cpool->resolved_klass_at(holder_index); + if (!Klass::cast(klass)->oop_is_instance()) + klass = SystemDictionary::Object_klass(); + return InstanceKlass::cast(klass)->method_at_vtable(f2_as_index()); + } + } + break; + } + } + return NULL; +} + + +oop ConstantPoolCacheEntry::appendix_if_resolved(constantPoolHandle cpool) { + if (is_f1_null() || !has_appendix()) + return NULL; + int ref_index = f2_as_index(); + objArrayOop resolved_references = cpool->resolved_references(); + return resolved_references->obj_at(ref_index); +} + + +// RedefineClasses() API support: +// If this constantPoolCacheEntry refers to old_method then update it +// to refer to new_method. +bool ConstantPoolCacheEntry::adjust_method_entry(Method* old_method, + Method* new_method, bool * trace_name_printed) { + + if (is_vfinal()) { + // virtual and final so _f2 contains method ptr instead of vtable index + if (f2_as_vfinal_method() == old_method) { + // match old_method so need an update + // NOTE: can't use set_f2_as_vfinal_method as it asserts on different values + _f2 = (intptr_t)new_method; + if (RC_TRACE_IN_RANGE(0x00100000, 0x00400000)) { + if (!(*trace_name_printed)) { + // RC_TRACE_MESG macro has an embedded ResourceMark + RC_TRACE_MESG(("adjust: name=%s", + Klass::cast(old_method->method_holder())->external_name())); + *trace_name_printed = true; + } + // RC_TRACE macro has an embedded ResourceMark + RC_TRACE(0x00400000, ("cpc vf-entry update: %s(%s)", + new_method->name()->as_C_string(), + new_method->signature()->as_C_string())); + } + + return true; + } + + // f1() is not used with virtual entries so bail out + return false; + } + + if (_f1 == NULL) { + // NULL f1() means this is a virtual entry so bail out + // We are assuming that the vtable index does not need change. + return false; + } + + if (_f1 == old_method) { + _f1 = new_method; + if (RC_TRACE_IN_RANGE(0x00100000, 0x00400000)) { + if (!(*trace_name_printed)) { + // RC_TRACE_MESG macro has an embedded ResourceMark + RC_TRACE_MESG(("adjust: name=%s", + Klass::cast(old_method->method_holder())->external_name())); + *trace_name_printed = true; + } + // RC_TRACE macro has an embedded ResourceMark + RC_TRACE(0x00400000, ("cpc entry update: %s(%s)", + new_method->name()->as_C_string(), + new_method->signature()->as_C_string())); + } + + return true; + } + + return false; +} + +#ifndef PRODUCT +bool ConstantPoolCacheEntry::check_no_old_entries() { + if (is_vfinal()) { + Metadata* f2 = (Metadata*)_f2; + return (f2->is_valid() && f2->is_method() && !((Method*)f2)->is_old()); + } else { + return (_f1 == NULL || (_f1->is_valid() && _f1->is_method() && !((Method*)_f1)->is_old())); + } +} +#endif + +bool ConstantPoolCacheEntry::is_interesting_method_entry(Klass* k) { + if (!is_method_entry()) { + // not a method entry so not interesting by default + return false; + } + + Method* m = NULL; + if (is_vfinal()) { + // virtual and final so _f2 contains method ptr instead of vtable index + m = f2_as_vfinal_method(); + } else if (is_f1_null()) { + // NULL _f1 means this is a virtual entry so also not interesting + return false; + } else { + if (!(_f1->is_method())) { + // _f1 can also contain a Klass* for an interface + return false; + } + m = f1_as_method(); + } + + assert(m != NULL && m->is_method(), "sanity check"); + if (m == NULL || !m->is_method() || (k != NULL && m->method_holder() != k)) { + // robustness for above sanity checks or method is not in + // the interesting class + return false; + } + + // the method is in the interesting class so the entry is interesting + return true; +} + +void ConstantPoolCacheEntry::print(outputStream* st, int index) const { + // print separator + if (index == 0) st->print_cr(" -------------"); + // print entry + st->print("%3d ("PTR_FORMAT") ", index, (intptr_t)this); + st->print_cr("[%02x|%02x|%5d]", bytecode_2(), bytecode_1(), constant_pool_index()); + st->print_cr(" [ "PTR_FORMAT"]", (intptr_t)_f1); + st->print_cr(" [ "PTR_FORMAT"]", (intptr_t)_f2); + st->print_cr(" [ "PTR_FORMAT"]", (intptr_t)_flags); + st->print_cr(" -------------"); +} + +void ConstantPoolCacheEntry::verify(outputStream* st) const { + // not implemented yet +} + +// Implementation of ConstantPoolCache + +ConstantPoolCache* ConstantPoolCache::allocate(ClassLoaderData* loader_data, int length, TRAPS) { + int size = ConstantPoolCache::size(length); + + return new (loader_data, size, false, THREAD) ConstantPoolCache(length); +} + +void ConstantPoolCache::initialize(intArray& inverse_index_map, intArray& invokedynamic_references_map) { + assert(inverse_index_map.length() == length(), "inverse index map must have same length as cache"); + for (int i = 0; i < length(); i++) { + ConstantPoolCacheEntry* e = entry_at(i); + int original_index = inverse_index_map[i]; + e->initialize_entry(original_index); + assert(entry_at(i) == e, "sanity"); + } + for (int ref = 0; ref < invokedynamic_references_map.length(); ref++) { + int cpci = invokedynamic_references_map[ref]; + if (cpci >= 0) + entry_at(cpci)->initialize_resolved_reference_index(ref); + } +} + +// RedefineClasses() API support: +// If any entry of this constantPoolCache points to any of +// old_methods, replace it with the corresponding new_method. +void ConstantPoolCache::adjust_method_entries(Method** old_methods, Method** new_methods, + int methods_length, bool * trace_name_printed) { + + if (methods_length == 0) { + // nothing to do if there are no methods + return; + } + + // get shorthand for the interesting class + Klass* old_holder = old_methods[0]->method_holder(); + + for (int i = 0; i < length(); i++) { + if (!entry_at(i)->is_interesting_method_entry(old_holder)) { + // skip uninteresting methods + continue; + } + + // The constantPoolCache contains entries for several different + // things, but we only care about methods. In fact, we only care + // about methods in the same class as the one that contains the + // old_methods. At this point, we have an interesting entry. + + for (int j = 0; j < methods_length; j++) { + Method* old_method = old_methods[j]; + Method* new_method = new_methods[j]; + + if (entry_at(i)->adjust_method_entry(old_method, new_method, + trace_name_printed)) { + // current old_method matched this entry and we updated it so + // break out and get to the next interesting entry if there one + break; + } + } + } +} + +#ifndef PRODUCT +bool ConstantPoolCache::check_no_old_entries() { + for (int i = 1; i < length(); i++) { + if (entry_at(i)->is_interesting_method_entry(NULL) && + !entry_at(i)->check_no_old_entries()) { + return false; + } + } + return true; +} +#endif // PRODUCT + + +// Printing + +void ConstantPoolCache::print_on(outputStream* st) const { + assert(is_constantPoolCache(), "obj must be constant pool cache"); + st->print_cr(internal_name()); + // print constant pool cache entries + for (int i = 0; i < length(); i++) entry_at(i)->print(st, i); +} + +void ConstantPoolCache::print_value_on(outputStream* st) const { + assert(is_constantPoolCache(), "obj must be constant pool cache"); + st->print("cache [%d]", length()); + print_address_on(st); + st->print(" for "); + constant_pool()->print_value_on(st); +} + + +// Verification + +void ConstantPoolCache::verify_on(outputStream* st) { + guarantee(is_constantPoolCache(), "obj must be constant pool cache"); + // print constant pool cache entries + for (int i = 0; i < length(); i++) entry_at(i)->verify(st); +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/cpCache.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/cpCache.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,439 @@ +/* + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_OOPS_CPCACHEOOP_HPP +#define SHARE_VM_OOPS_CPCACHEOOP_HPP + +#include "interpreter/bytecodes.hpp" +#include "memory/allocation.hpp" +#include "utilities/array.hpp" + +class PSPromotionManager; + +// A ConstantPoolCacheEntry describes an individual entry of the constant +// pool cache. There's 2 principal kinds of entries: field entries for in- +// stance & static field access, and method entries for invokes. Some of +// the entry layout is shared and looks as follows: +// +// bit number |31 0| +// bit length |-8--|-8--|---16----| +// -------------------------------- +// _indices [ b2 | b1 | index ] index = constant_pool_index +// _f1 [ entry specific ] metadata ptr (method or klass) +// _f2 [ entry specific ] vtable or res_ref index, or vfinal method ptr +// _flags [tos|0|F=1|0|0|f|v|0 |00000|field_index] (for field entries) +// bit length [ 4 |1| 1 |1|1|1|1|1 |--5--|----16-----] +// _flags [tos|0|F=0|A|I|f|0|vf|00000|00000|psize] (for method entries) +// bit length [ 4 |1| 1 |1|1|1|1|1 |--5--|--8--|--8--] + +// -------------------------------- +// +// with: +// index = original constant pool index +// b1 = bytecode 1 +// b2 = bytecode 2 +// psize = parameters size (method entries only) +// field_index = index into field information in holder InstanceKlass +// The index max is 0xffff (max number of fields in constant pool) +// and is multiplied by (InstanceKlass::next_offset) when accessing. +// tos = TosState +// F = the entry is for a field (or F=0 for a method) +// A = call site has an appendix argument (loaded from resolved references) +// I = interface call is forced virtual (must use a vtable index or vfinal) +// f = field or method is final +// v = field is volatile +// vf = virtual but final (method entries only: is_vfinal()) +// +// The flags after TosState have the following interpretation: +// bit 27: 0 for fields, 1 for methods +// f flag true if field is marked final +// v flag true if field is volatile (only for fields) +// f2 flag true if f2 contains an oop (e.g., virtual final method) +// fv flag true if invokeinterface used for method in class Object +// +// The flags 31, 30, 29, 28 together build a 4 bit number 0 to 8 with the +// following mapping to the TosState states: +// +// btos: 0 +// ctos: 1 +// stos: 2 +// itos: 3 +// ltos: 4 +// ftos: 5 +// dtos: 6 +// atos: 7 +// vtos: 8 +// +// Entry specific: field entries: +// _indices = get (b1 section) and put (b2 section) bytecodes, original constant pool index +// _f1 = field holder (as a java.lang.Class, not a Klass*) +// _f2 = field offset in bytes +// _flags = field type information, original FieldInfo index in field holder +// (field_index section) +// +// Entry specific: method entries: +// _indices = invoke code for f1 (b1 section), invoke code for f2 (b2 section), +// original constant pool index +// _f1 = Method* for non-virtual calls, unused by virtual calls. +// for interface calls, which are essentially virtual but need a klass, +// contains Klass* for the corresponding interface. +// for invokedynamic, f1 contains a site-specific CallSite object (as an appendix) +// for invokehandle, f1 contains a site-specific MethodType object (as an appendix) +// (upcoming metadata changes will move the appendix to a separate array) +// _f2 = vtable/itable index (or final Method*) for virtual calls only, +// unused by non-virtual. The is_vfinal flag indicates this is a +// method pointer for a final method, not an index. +// _flags = method type info (t section), +// virtual final bit (vfinal), +// parameter size (psize section) +// +// Note: invokevirtual & invokespecial bytecodes can share the same constant +// pool entry and thus the same constant pool cache entry. All invoke +// bytecodes but invokevirtual use only _f1 and the corresponding b1 +// bytecode, while invokevirtual uses only _f2 and the corresponding +// b2 bytecode. The value of _flags is shared for both types of entries. +// +// The fields are volatile so that they are stored in the order written in the +// source code. The _indices field with the bytecode must be written last. + +class ConstantPoolCacheEntry VALUE_OBJ_CLASS_SPEC { + friend class VMStructs; + friend class constantPoolCacheKlass; + friend class ConstantPool; + friend class InterpreterRuntime; + + private: + volatile intx _indices; // constant pool index & rewrite bytecodes + volatile Metadata* _f1; // entry specific metadata field + volatile intx _f2; // entry specific int/metadata field + volatile intx _flags; // flags + + + void set_bytecode_1(Bytecodes::Code code); + void set_bytecode_2(Bytecodes::Code code); + void set_f1(Metadata* f1) { + Metadata* existing_f1 = (Metadata*)_f1; // read once + assert(existing_f1 == NULL || existing_f1 == f1, "illegal field change"); + _f1 = f1; + } + void release_set_f1(Metadata* f1); + void set_f2(intx f2) { assert(_f2 == 0 || _f2 == f2, "illegal field change"); _f2 = f2; } + void set_f2_as_vfinal_method(Method* f2) { assert(_f2 == 0 || _f2 == (intptr_t) f2, "illegal field change"); assert(is_vfinal(), "flags must be set"); _f2 = (intptr_t) f2; } + int make_flags(TosState state, int option_bits, int field_index_or_method_params); + void set_flags(intx flags) { _flags = flags; } + bool init_flags_atomic(intx flags); + void set_field_flags(TosState field_type, int option_bits, int field_index) { + assert((field_index & field_index_mask) == field_index, "field_index in range"); + set_flags(make_flags(field_type, option_bits | (1 << is_field_entry_shift), field_index)); + } + void set_method_flags(TosState return_type, int option_bits, int method_params) { + assert((method_params & parameter_size_mask) == method_params, "method_params in range"); + set_flags(make_flags(return_type, option_bits, method_params)); + } + bool init_method_flags_atomic(TosState return_type, int option_bits, int method_params) { + assert((method_params & parameter_size_mask) == method_params, "method_params in range"); + return init_flags_atomic(make_flags(return_type, option_bits, method_params)); + } + + public: + // specific bit definitions for the flags field: + // (Note: the interpreter must use these definitions to access the CP cache.) + enum { + // high order bits are the TosState corresponding to field type or method return type + tos_state_bits = 4, + tos_state_mask = right_n_bits(tos_state_bits), + tos_state_shift = BitsPerInt - tos_state_bits, // see verify_tos_state_shift below + // misc. option bits; can be any bit position in [16..27] + is_field_entry_shift = 26, // (F) is it a field or a method? + has_appendix_shift = 25, // (A) does the call site have an appendix argument? + is_forced_virtual_shift = 24, // (I) is the interface reference forced to virtual mode? + is_final_shift = 23, // (f) is the field or method final? + is_volatile_shift = 22, // (v) is the field volatile? + is_vfinal_shift = 21, // (vf) did the call resolve to a final method? + // low order bits give field index (for FieldInfo) or method parameter size: + field_index_bits = 16, + field_index_mask = right_n_bits(field_index_bits), + parameter_size_bits = 8, // subset of field_index_mask, range is 0..255 + parameter_size_mask = right_n_bits(parameter_size_bits), + option_bits_mask = ~(((-1) << tos_state_shift) | (field_index_mask | parameter_size_mask)) + }; + + // specific bit definitions for the indices field: + enum { + cp_index_bits = 2*BitsPerByte, + cp_index_mask = right_n_bits(cp_index_bits), + bytecode_1_shift = cp_index_bits, + bytecode_1_mask = right_n_bits(BitsPerByte), // == (u1)0xFF + bytecode_2_shift = cp_index_bits + BitsPerByte, + bytecode_2_mask = right_n_bits(BitsPerByte) // == (u1)0xFF + }; + + + // Initialization + void initialize_entry(int original_index); // initialize primary entry + void initialize_resolved_reference_index(int ref_index) { + assert(_f2 == 0, "set once"); // note: ref_index might be zero also + _f2 = ref_index; + } + + void set_field( // sets entry to resolved field state + Bytecodes::Code get_code, // the bytecode used for reading the field + Bytecodes::Code put_code, // the bytecode used for writing the field + KlassHandle field_holder, // the object/klass holding the field + int orig_field_index, // the original field index in the field holder + int field_offset, // the field offset in words in the field holder + TosState field_type, // the (machine) field type + bool is_final, // the field is final + bool is_volatile, // the field is volatile + Klass* root_klass // needed by the GC to dirty the klass + ); + + void set_method( // sets entry to resolved method entry + Bytecodes::Code invoke_code, // the bytecode used for invoking the method + methodHandle method, // the method/prototype if any (NULL, otherwise) + int vtable_index // the vtable index if any, else negative + ); + + void set_interface_call( + methodHandle method, // Resolved method + int index // Method index into interface + ); + + void set_method_handle( + methodHandle method, // adapter for invokeExact, etc. + Handle appendix, // stored in refs[f2]; could be a java.lang.invoke.MethodType + objArrayHandle resolved_references + ); + + void set_dynamic_call( + methodHandle method, // adapter for this call site + Handle appendix, // stored in refs[f2]; could be a java.lang.invoke.CallSite + objArrayHandle resolved_references + ); + + // Common code for invokedynamic and MH invocations. + + // The "appendix" is an optional call-site-specific parameter which is + // pushed by the JVM at the end of the argument list. This argument may + // be a MethodType for the MH.invokes and a CallSite for an invokedynamic + // instruction. However, its exact type and use depends on the Java upcall, + // which simply returns a compiled LambdaForm along with any reference + // that LambdaForm needs to complete the call. If the upcall returns a + // null appendix, the argument is not passed at all. + // + // The appendix is *not* represented in the signature of the symbolic + // reference for the call site, but (if present) it *is* represented in + // the Method* bound to the site. This means that static and dynamic + // resolution logic needs to make slightly different assessments about the + // number and types of arguments. + void set_method_handle_common( + Bytecodes::Code invoke_code, // _invokehandle or _invokedynamic + methodHandle adapter, // invoker method (f1) + Handle appendix, // appendix such as CallSite, MethodType, etc. (refs[f2]) + objArrayHandle resolved_references + ); + + Method* method_if_resolved(constantPoolHandle cpool); + oop appendix_if_resolved(constantPoolHandle cpool); + + void set_parameter_size(int value); + + // Which bytecode number (1 or 2) in the index field is valid for this bytecode? + // Returns -1 if neither is valid. + static int bytecode_number(Bytecodes::Code code) { + switch (code) { + case Bytecodes::_getstatic : // fall through + case Bytecodes::_getfield : // fall through + case Bytecodes::_invokespecial : // fall through + case Bytecodes::_invokestatic : // fall through + case Bytecodes::_invokeinterface : return 1; + case Bytecodes::_putstatic : // fall through + case Bytecodes::_putfield : // fall through + case Bytecodes::_invokehandle : // fall through + case Bytecodes::_invokedynamic : // fall through + case Bytecodes::_invokevirtual : return 2; + default : break; + } + return -1; + } + + // Has this bytecode been resolved? Only valid for invokes and get/put field/static. + bool is_resolved(Bytecodes::Code code) const { + switch (bytecode_number(code)) { + case 1: return (bytecode_1() == code); + case 2: return (bytecode_2() == code); + } + return false; // default: not resolved + } + + // Accessors + int indices() const { return _indices; } + int constant_pool_index() const { return (indices() & cp_index_mask); } + Bytecodes::Code bytecode_1() const { return Bytecodes::cast((indices() >> bytecode_1_shift) & bytecode_1_mask); } + Bytecodes::Code bytecode_2() const { return Bytecodes::cast((indices() >> bytecode_2_shift) & bytecode_2_mask); } + Method* f1_as_method() const { Metadata* f1 = (Metadata*)_f1; assert(f1 == NULL || f1->is_method(), ""); return (Method*)f1; } + Klass* f1_as_klass() const { Metadata* f1 = (Metadata*)_f1; assert(f1 == NULL || f1->is_klass(), ""); return (Klass*)f1; } + bool is_f1_null() const { Metadata* f1 = (Metadata*)_f1; return f1 == NULL; } // classifies a CPC entry as unbound + int f2_as_index() const { assert(!is_vfinal(), ""); return (int) _f2; } + Method* f2_as_vfinal_method() const { assert(is_vfinal(), ""); return (Method*)_f2; } + int field_index() const { assert(is_field_entry(), ""); return (_flags & field_index_mask); } + int parameter_size() const { assert(is_method_entry(), ""); return (_flags & parameter_size_mask); } + bool is_volatile() const { return (_flags & (1 << is_volatile_shift)) != 0; } + bool is_final() const { return (_flags & (1 << is_final_shift)) != 0; } + bool is_forced_virtual() const { return (_flags & (1 << is_forced_virtual_shift)) != 0; } + bool is_vfinal() const { return (_flags & (1 << is_vfinal_shift)) != 0; } + bool has_appendix() const { return (_flags & (1 << has_appendix_shift)) != 0; } + bool is_method_entry() const { return (_flags & (1 << is_field_entry_shift)) == 0; } + bool is_field_entry() const { return (_flags & (1 << is_field_entry_shift)) != 0; } + bool is_byte() const { return flag_state() == btos; } + bool is_char() const { return flag_state() == ctos; } + bool is_short() const { return flag_state() == stos; } + bool is_int() const { return flag_state() == itos; } + bool is_long() const { return flag_state() == ltos; } + bool is_float() const { return flag_state() == ftos; } + bool is_double() const { return flag_state() == dtos; } + bool is_object() const { return flag_state() == atos; } + TosState flag_state() const { assert((uint)number_of_states <= (uint)tos_state_mask+1, ""); + return (TosState)((_flags >> tos_state_shift) & tos_state_mask); } + + // Code generation support + static WordSize size() { return in_WordSize(sizeof(ConstantPoolCacheEntry) / HeapWordSize); } + static ByteSize size_in_bytes() { return in_ByteSize(sizeof(ConstantPoolCacheEntry)); } + static ByteSize indices_offset() { return byte_offset_of(ConstantPoolCacheEntry, _indices); } + static ByteSize f1_offset() { return byte_offset_of(ConstantPoolCacheEntry, _f1); } + static ByteSize f2_offset() { return byte_offset_of(ConstantPoolCacheEntry, _f2); } + static ByteSize flags_offset() { return byte_offset_of(ConstantPoolCacheEntry, _flags); } + + // RedefineClasses() API support: + // If this constantPoolCacheEntry refers to old_method then update it + // to refer to new_method. + // trace_name_printed is set to true if the current call has + // printed the klass name so that other routines in the adjust_* + // group don't print the klass name. + bool adjust_method_entry(Method* old_method, Method* new_method, + bool * trace_name_printed); + NOT_PRODUCT(bool check_no_old_entries();) + bool is_interesting_method_entry(Klass* k); + + // Debugging & Printing + void print (outputStream* st, int index) const; + void verify(outputStream* st) const; + + static void verify_tos_state_shift() { + // When shifting flags as a 32-bit int, make sure we don't need an extra mask for tos_state: + assert((((u4)-1 >> tos_state_shift) & ~tos_state_mask) == 0, "no need for tos_state mask"); + } +}; + + +// A constant pool cache is a runtime data structure set aside to a constant pool. The cache +// holds interpreter runtime information for all field access and invoke bytecodes. The cache +// is created and initialized before a class is actively used (i.e., initialized), the indivi- +// dual cache entries are filled at resolution (i.e., "link") time (see also: rewriter.*). + +class ConstantPoolCache: public MetaspaceObj { + friend class VMStructs; + friend class MetadataFactory; + private: + int _length; + ConstantPool* _constant_pool; // the corresponding constant pool + + // Sizing + debug_only(friend class ClassVerifier;) + + // Constructor + ConstantPoolCache(int length) : _length(length), _constant_pool(NULL) { + for (int i = 0; i < length; i++) { + assert(entry_at(i)->is_f1_null(), "Failed to clear?"); + } + } + + public: + static ConstantPoolCache* allocate(ClassLoaderData* loader_data, int length, TRAPS); + bool is_constantPoolCache() const { return true; } + + int length() const { return _length; } + private: + void set_length(int length) { _length = length; } + + static int header_size() { return sizeof(ConstantPoolCache) / HeapWordSize; } + static int size(int length) { return align_object_size(header_size() + length * in_words(ConstantPoolCacheEntry::size())); } + public: + int size() const { return size(length()); } + private: + + // Helpers + ConstantPool** constant_pool_addr() { return &_constant_pool; } + ConstantPoolCacheEntry* base() const { return (ConstantPoolCacheEntry*)((address)this + in_bytes(base_offset())); } + + friend class constantPoolCacheKlass; + friend class ConstantPoolCacheEntry; + + public: + // Initialization + void initialize(intArray& inverse_index_map, intArray& invokedynamic_references_map); + + // Accessors + void set_constant_pool(ConstantPool* pool) { _constant_pool = pool; } + ConstantPool* constant_pool() const { return _constant_pool; } + // Fetches the entry at the given index. + // In either case the index must not be encoded or byte-swapped in any way. + ConstantPoolCacheEntry* entry_at(int i) const { + assert(0 <= i && i < length(), "index out of bounds"); + return base() + i; + } + + // Code generation + static ByteSize base_offset() { return in_ByteSize(sizeof(ConstantPoolCache)); } + static ByteSize entry_offset(int raw_index) { + int index = raw_index; + return (base_offset() + ConstantPoolCacheEntry::size_in_bytes() * index); + } + + // RedefineClasses() API support: + // If any entry of this constantPoolCache points to any of + // old_methods, replace it with the corresponding new_method. + // trace_name_printed is set to true if the current call has + // printed the klass name so that other routines in the adjust_* + // group don't print the klass name. + void adjust_method_entries(Method** old_methods, Method** new_methods, + int methods_length, bool * trace_name_printed); + NOT_PRODUCT(bool check_no_old_entries();) + + // Deallocate - no fields to deallocate + DEBUG_ONLY(bool on_stack() { return false; }) + void deallocate_contents(ClassLoaderData* data) {} + bool is_klass() const { return false; } + + // Printing + void print_on(outputStream* st) const; + void print_value_on(outputStream* st) const; + + const char* internal_name() const { return "{constant pool cache}"; } + + // Verify + void verify_on(outputStream* st); +}; + +#endif // SHARE_VM_OOPS_CPCACHEOOP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/cpCacheKlass.cpp --- a/src/share/vm/oops/cpCacheKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,236 +0,0 @@ -/* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/javaClasses.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "interpreter/bytecodes.hpp" -#include "memory/genOopClosures.inline.hpp" -#include "memory/permGen.hpp" -#include "oops/constantPoolOop.hpp" -#include "oops/cpCacheKlass.hpp" -#include "oops/oop.inline.hpp" -#include "runtime/handles.inline.hpp" -#ifndef SERIALGC -#include "gc_implementation/parNew/parOopClosures.inline.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" -#include "memory/cardTableRS.hpp" -#include "oops/oop.pcgc.inline.hpp" -#endif - - -int constantPoolCacheKlass::oop_size(oop obj) const { - assert(obj->is_constantPoolCache(), "must be constantPool"); - return constantPoolCacheOop(obj)->object_size(); -} - - -constantPoolCacheOop constantPoolCacheKlass::allocate(int length, - TRAPS) { - // allocate memory - int size = constantPoolCacheOopDesc::object_size(length); - - KlassHandle klass (THREAD, as_klassOop()); - - // Commented out below is the original code. The code from - // permanent_obj_allocate() was in-lined so that we could - // set the _length field, necessary to correctly compute its - // size(), before setting its klass word further below. - // constantPoolCacheOop cache = (constantPoolCacheOop) - // CollectedHeap::permanent_obj_allocate(klass, size, CHECK_NULL); - - oop obj = CollectedHeap::permanent_obj_allocate_no_klass_install(klass, size, CHECK_NULL); -#ifndef PRODUCT - const size_t hs = oopDesc::header_size(); - Universe::heap()->check_for_bad_heap_word_value(((HeapWord*) obj)+hs, size-hs); -#endif - constantPoolCacheOop cache = (constantPoolCacheOop) obj; - assert(!UseConcMarkSweepGC || obj->klass_or_null() == NULL, - "klass should be NULL here when using CMS"); - cache->set_length(length); // should become visible before klass is set below. - cache->set_constant_pool(NULL); - - OrderAccess::storestore(); - obj->set_klass(klass()); - assert(cache->size() == size, "Incorrect cache->size()"); - return cache; -} - -klassOop constantPoolCacheKlass::create_klass(TRAPS) { - constantPoolCacheKlass o; - KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); - KlassHandle k = base_create_klass(h_this_klass, header_size(), o.vtbl_value(), CHECK_NULL); - // Make sure size calculation is right - assert(k()->size() == align_object_size(header_size()), "wrong size for object"); - java_lang_Class::create_mirror(k, CHECK_NULL); // Allocate mirror - return k(); -} - - -void constantPoolCacheKlass::oop_follow_contents(oop obj) { - assert(obj->is_constantPoolCache(), "obj must be constant pool cache"); - constantPoolCacheOop cache = (constantPoolCacheOop)obj; - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constantPoolCacheKlassObj never moves. - // gc of constant pool cache instance variables - MarkSweep::mark_and_push((oop*)cache->constant_pool_addr()); - // gc of constant pool cache entries - int i = cache->length(); - while (i-- > 0) cache->entry_at(i)->follow_contents(); -} - -#ifndef SERIALGC -void constantPoolCacheKlass::oop_follow_contents(ParCompactionManager* cm, - oop obj) { - assert(obj->is_constantPoolCache(), "obj must be constant pool cache"); - constantPoolCacheOop cache = (constantPoolCacheOop)obj; - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constantPoolCacheKlassObj never moves. - // gc of constant pool cache instance variables - PSParallelCompact::mark_and_push(cm, (oop*)cache->constant_pool_addr()); - // gc of constant pool cache entries - int i = cache->length(); - while (i-- > 0) cache->entry_at(i)->follow_contents(cm); -} -#endif // SERIALGC - - -int constantPoolCacheKlass::oop_oop_iterate(oop obj, OopClosure* blk) { - assert(obj->is_constantPoolCache(), "obj must be constant pool cache"); - constantPoolCacheOop cache = (constantPoolCacheOop)obj; - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = cache->object_size(); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constantPoolCacheKlassObj never moves. - // iteration over constant pool cache instance variables - blk->do_oop((oop*)cache->constant_pool_addr()); - // iteration over constant pool cache entries - for (int i = 0; i < cache->length(); i++) cache->entry_at(i)->oop_iterate(blk); - return size; -} - - -int constantPoolCacheKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { - assert(obj->is_constantPoolCache(), "obj must be constant pool cache"); - constantPoolCacheOop cache = (constantPoolCacheOop)obj; - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = cache->object_size(); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constantPoolCacheKlassObj never moves. - // iteration over constant pool cache instance variables - oop* addr = (oop*)cache->constant_pool_addr(); - if (mr.contains(addr)) blk->do_oop(addr); - // iteration over constant pool cache entries - for (int i = 0; i < cache->length(); i++) cache->entry_at(i)->oop_iterate_m(blk, mr); - return size; -} - -int constantPoolCacheKlass::oop_adjust_pointers(oop obj) { - assert(obj->is_constantPoolCache(), "obj must be constant pool cache"); - constantPoolCacheOop cache = (constantPoolCacheOop)obj; - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = cache->object_size(); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::constantPoolCacheKlassObj never moves. - // Iteration over constant pool cache instance variables - MarkSweep::adjust_pointer((oop*)cache->constant_pool_addr()); - // iteration over constant pool cache entries - for (int i = 0; i < cache->length(); i++) - cache->entry_at(i)->adjust_pointers(); - return size; -} - -#ifndef SERIALGC -void constantPoolCacheKlass::oop_push_contents(PSPromotionManager* pm, - oop obj) { - assert(obj->is_constantPoolCache(), "should be constant pool"); - if (ScavengeRootsInCode) { - constantPoolCacheOop cache = (constantPoolCacheOop)obj; - // during a scavenge, it is safe to inspect my pool, since it is perm - constantPoolOop pool = cache->constant_pool(); - assert(pool->is_constantPool(), "should be constant pool"); - for (int i = 0; i < cache->length(); i++) { - ConstantPoolCacheEntry* e = cache->entry_at(i); - oop* p = (oop*)&e->_f1; - if (PSScavenge::should_scavenge(p)) - pm->claim_or_forward_depth(p); - assert(!(e->is_vfinal() && PSScavenge::should_scavenge((oop*)&e->_f2)), - "no live oops here"); - } - } -} - -int -constantPoolCacheKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { - assert(obj->is_constantPoolCache(), "obj must be constant pool cache"); - constantPoolCacheOop cache = (constantPoolCacheOop)obj; - - // Iteration over constant pool cache instance variables - PSParallelCompact::adjust_pointer((oop*)cache->constant_pool_addr()); - - // iteration over constant pool cache entries - for (int i = 0; i < cache->length(); ++i) { - cache->entry_at(i)->update_pointers(); - } - - return cache->object_size(); -} -#endif // SERIALGC - -void constantPoolCacheKlass::oop_print_on(oop obj, outputStream* st) { - assert(obj->is_constantPoolCache(), "obj must be constant pool cache"); - constantPoolCacheOop cache = (constantPoolCacheOop)obj; - // super print - Klass::oop_print_on(obj, st); - // print constant pool cache entries - for (int i = 0; i < cache->length(); i++) cache->entry_at(i)->print(st, i); -} - -void constantPoolCacheKlass::oop_print_value_on(oop obj, outputStream* st) { - assert(obj->is_constantPoolCache(), "obj must be constant pool cache"); - constantPoolCacheOop cache = (constantPoolCacheOop)obj; - st->print("cache [%d]", cache->length()); - cache->print_address_on(st); - st->print(" for "); - cache->constant_pool()->print_value_on(st); -} - -void constantPoolCacheKlass::oop_verify_on(oop obj, outputStream* st) { - guarantee(obj->is_constantPoolCache(), "obj must be constant pool cache"); - constantPoolCacheOop cache = (constantPoolCacheOop)obj; - // super verify - Klass::oop_verify_on(obj, st); - // print constant pool cache entries - for (int i = 0; i < cache->length(); i++) cache->entry_at(i)->verify(st); -} - - -const char* constantPoolCacheKlass::internal_name() const { - return "{constant pool cache}"; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/cpCacheKlass.hpp --- a/src/share/vm/oops/cpCacheKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_CPCACHEKLASS_HPP -#define SHARE_VM_OOPS_CPCACHEKLASS_HPP - -#include "oops/arrayKlass.hpp" -#include "oops/cpCacheOop.hpp" -#include "oops/instanceKlass.hpp" - -class constantPoolCacheKlass: public Klass { - juint _alloc_size; // allocation profiling support - public: - // Dispatched klass operations - bool oop_is_constantPoolCache() const { return true; } - int oop_size(oop obj) const; - int klass_oop_size() const { return object_size(); } - - // Allocation - DEFINE_ALLOCATE_PERMANENT(constantPoolCacheKlass); - constantPoolCacheOop allocate(int length, TRAPS); - static klassOop create_klass(TRAPS); - - // Casting from klassOop - static constantPoolCacheKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_constantPoolCache(), "cast to constantPoolCacheKlass"); - return (constantPoolCacheKlass*)k->klass_part(); - } - - // Sizing - static int header_size() { return oopDesc::header_size() + sizeof(constantPoolCacheKlass)/HeapWordSize; } - int object_size() const { return align_object_size(header_size()); } - - // Garbage collection - void oop_follow_contents(oop obj); - int oop_adjust_pointers(oop obj); - - // Parallel Scavenge and Parallel Old - PARALLEL_GC_DECLS - - // Iterators - int oop_oop_iterate(oop obj, OopClosure* blk); - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr); - - // Allocation profiling support - juint alloc_size() const { return _alloc_size; } - void set_alloc_size(juint n) { _alloc_size = n; } - - // Printing - void oop_print_value_on(oop obj, outputStream* st); - void oop_print_on(oop obj, outputStream* st); - - // Verification - const char* internal_name() const; - void oop_verify_on(oop obj, outputStream* st); -}; - -#endif // SHARE_VM_OOPS_CPCACHEKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/cpCacheOop.cpp --- a/src/share/vm/oops/cpCacheOop.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,645 +0,0 @@ -/* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "interpreter/interpreter.hpp" -#include "interpreter/rewriter.hpp" -#include "memory/universe.inline.hpp" -#include "oops/cpCacheOop.hpp" -#include "oops/objArrayOop.hpp" -#include "oops/oop.inline.hpp" -#include "prims/jvmtiRedefineClassesTrace.hpp" -#include "prims/methodHandles.hpp" -#include "runtime/handles.inline.hpp" - - -// Implememtation of ConstantPoolCacheEntry - -void ConstantPoolCacheEntry::initialize_entry(int index) { - assert(0 < index && index < 0x10000, "sanity check"); - _indices = index; - assert(constant_pool_index() == index, ""); -} - -void ConstantPoolCacheEntry::initialize_secondary_entry(int main_index) { - assert(0 <= main_index && main_index < 0x10000, "sanity check"); - _indices = (main_index << main_cp_index_bits); - assert(main_entry_index() == main_index, ""); -} - -int ConstantPoolCacheEntry::make_flags(TosState state, - int option_bits, - int field_index_or_method_params) { - assert(state < number_of_states, "Invalid state in make_flags"); - int f = ((int)state << tos_state_shift) | option_bits | field_index_or_method_params; - // Preserve existing flag bit values - // The low bits are a field offset, or else the method parameter size. -#ifdef ASSERT - TosState old_state = flag_state(); - assert(old_state == (TosState)0 || old_state == state, - "inconsistent cpCache flags state"); -#endif - return (_flags | f) ; -} - -void ConstantPoolCacheEntry::set_bytecode_1(Bytecodes::Code code) { - assert(!is_secondary_entry(), "must not overwrite main_entry_index"); -#ifdef ASSERT - // Read once. - volatile Bytecodes::Code c = bytecode_1(); - assert(c == 0 || c == code || code == 0, "update must be consistent"); -#endif - // Need to flush pending stores here before bytecode is written. - OrderAccess::release_store_ptr(&_indices, _indices | ((u_char)code << bytecode_1_shift)); -} - -void ConstantPoolCacheEntry::set_bytecode_2(Bytecodes::Code code) { - assert(!is_secondary_entry(), "must not overwrite main_entry_index"); -#ifdef ASSERT - // Read once. - volatile Bytecodes::Code c = bytecode_2(); - assert(c == 0 || c == code || code == 0, "update must be consistent"); -#endif - // Need to flush pending stores here before bytecode is written. - OrderAccess::release_store_ptr(&_indices, _indices | ((u_char)code << bytecode_2_shift)); -} - -// Sets f1, ordering with previous writes. -void ConstantPoolCacheEntry::release_set_f1(oop f1) { - // Use barriers as in oop_store - assert(f1 != NULL, ""); - oop* f1_addr = (oop*) &_f1; - update_barrier_set_pre(f1_addr, f1); - OrderAccess::release_store_ptr((intptr_t*)f1_addr, f1); - update_barrier_set((void*) f1_addr, f1); -} - -// Sets flags, but only if the value was previously zero. -bool ConstantPoolCacheEntry::init_flags_atomic(intptr_t flags) { - intptr_t result = Atomic::cmpxchg_ptr(flags, &_flags, 0); - return (result == 0); -} - -#ifdef ASSERT -// It is possible to have two different dummy methodOops created -// when the resolve code for invoke interface executes concurrently -// Hence the assertion below is weakened a bit for the invokeinterface -// case. -bool ConstantPoolCacheEntry::same_methodOop(oop cur_f1, oop f1) { - return (cur_f1 == f1 || ((methodOop)cur_f1)->name() == - ((methodOop)f1)->name() || ((methodOop)cur_f1)->signature() == - ((methodOop)f1)->signature()); -} -#endif - -// Note that concurrent update of both bytecodes can leave one of them -// reset to zero. This is harmless; the interpreter will simply re-resolve -// the damaged entry. More seriously, the memory synchronization is needed -// to flush other fields (f1, f2) completely to memory before the bytecodes -// are updated, lest other processors see a non-zero bytecode but zero f1/f2. -void ConstantPoolCacheEntry::set_field(Bytecodes::Code get_code, - Bytecodes::Code put_code, - KlassHandle field_holder, - int field_index, - int field_offset, - TosState field_type, - bool is_final, - bool is_volatile) { - set_f1(field_holder()->java_mirror()); - set_f2(field_offset); - assert((field_index & field_index_mask) == field_index, - "field index does not fit in low flag bits"); - set_field_flags(field_type, - ((is_volatile ? 1 : 0) << is_volatile_shift) | - ((is_final ? 1 : 0) << is_final_shift), - field_index); - set_bytecode_1(get_code); - set_bytecode_2(put_code); - NOT_PRODUCT(verify(tty)); -} - -void ConstantPoolCacheEntry::set_parameter_size(int value) { - // This routine is called only in corner cases where the CPCE is not yet initialized. - // See AbstractInterpreter::deopt_continue_after_entry. - assert(_flags == 0 || parameter_size() == 0 || parameter_size() == value, - err_msg("size must not change: parameter_size=%d, value=%d", parameter_size(), value)); - // Setting the parameter size by itself is only safe if the - // current value of _flags is 0, otherwise another thread may have - // updated it and we don't want to overwrite that value. Don't - // bother trying to update it once it's nonzero but always make - // sure that the final parameter size agrees with what was passed. - if (_flags == 0) { - Atomic::cmpxchg_ptr((value & parameter_size_mask), &_flags, 0); - } - guarantee(parameter_size() == value, - err_msg("size must not change: parameter_size=%d, value=%d", parameter_size(), value)); -} - -void ConstantPoolCacheEntry::set_method(Bytecodes::Code invoke_code, - methodHandle method, - int vtable_index) { - assert(!is_secondary_entry(), ""); - assert(method->interpreter_entry() != NULL, "should have been set at this point"); - assert(!method->is_obsolete(), "attempt to write obsolete method to cpCache"); - - int byte_no = -1; - bool change_to_virtual = false; - - switch (invoke_code) { - case Bytecodes::_invokeinterface: - // We get here from InterpreterRuntime::resolve_invoke when an invokeinterface - // instruction somehow links to a non-interface method (in Object). - // In that case, the method has no itable index and must be invoked as a virtual. - // Set a flag to keep track of this corner case. - change_to_virtual = true; - - // ...and fall through as if we were handling invokevirtual: - case Bytecodes::_invokevirtual: - { - if (method->can_be_statically_bound()) { - // set_f2_as_vfinal_method checks if is_vfinal flag is true. - set_method_flags(as_TosState(method->result_type()), - ( 1 << is_vfinal_shift) | - ((method->is_final_method() ? 1 : 0) << is_final_shift) | - ((change_to_virtual ? 1 : 0) << is_forced_virtual_shift), - method()->size_of_parameters()); - set_f2_as_vfinal_method(method()); - } else { - assert(vtable_index >= 0, "valid index"); - assert(!method->is_final_method(), "sanity"); - set_method_flags(as_TosState(method->result_type()), - ((change_to_virtual ? 1 : 0) << is_forced_virtual_shift), - method()->size_of_parameters()); - set_f2(vtable_index); - } - byte_no = 2; - break; - } - - case Bytecodes::_invokespecial: - case Bytecodes::_invokestatic: - // Note: Read and preserve the value of the is_vfinal flag on any - // invokevirtual bytecode shared with this constant pool cache entry. - // It is cheap and safe to consult is_vfinal() at all times. - // Once is_vfinal is set, it must stay that way, lest we get a dangling oop. - set_method_flags(as_TosState(method->result_type()), - ((is_vfinal() ? 1 : 0) << is_vfinal_shift) | - ((method->is_final_method() ? 1 : 0) << is_final_shift), - method()->size_of_parameters()); - set_f1(method()); - byte_no = 1; - break; - default: - ShouldNotReachHere(); - break; - } - - // Note: byte_no also appears in TemplateTable::resolve. - if (byte_no == 1) { - assert(invoke_code != Bytecodes::_invokevirtual && - invoke_code != Bytecodes::_invokeinterface, ""); - set_bytecode_1(invoke_code); - } else if (byte_no == 2) { - if (change_to_virtual) { - assert(invoke_code == Bytecodes::_invokeinterface, ""); - // NOTE: THIS IS A HACK - BE VERY CAREFUL!!! - // - // Workaround for the case where we encounter an invokeinterface, but we - // should really have an _invokevirtual since the resolved method is a - // virtual method in java.lang.Object. This is a corner case in the spec - // but is presumably legal. javac does not generate this code. - // - // We set bytecode_1() to _invokeinterface, because that is the - // bytecode # used by the interpreter to see if it is resolved. - // We set bytecode_2() to _invokevirtual. - // See also interpreterRuntime.cpp. (8/25/2000) - // Only set resolved for the invokeinterface case if method is public. - // Otherwise, the method needs to be reresolved with caller for each - // interface call. - if (method->is_public()) set_bytecode_1(invoke_code); - } else { - assert(invoke_code == Bytecodes::_invokevirtual, ""); - } - // set up for invokevirtual, even if linking for invokeinterface also: - set_bytecode_2(Bytecodes::_invokevirtual); - } else { - ShouldNotReachHere(); - } - NOT_PRODUCT(verify(tty)); -} - - -void ConstantPoolCacheEntry::set_interface_call(methodHandle method, int index) { - assert(!is_secondary_entry(), ""); - klassOop interf = method->method_holder(); - assert(instanceKlass::cast(interf)->is_interface(), "must be an interface"); - assert(!method->is_final_method(), "interfaces do not have final methods; cannot link to one here"); - set_f1(interf); - set_f2(index); - set_method_flags(as_TosState(method->result_type()), - 0, // no option bits - method()->size_of_parameters()); - set_bytecode_1(Bytecodes::_invokeinterface); -} - - -void ConstantPoolCacheEntry::set_method_handle(methodHandle adapter, Handle appendix) { - assert(!is_secondary_entry(), ""); - set_method_handle_common(Bytecodes::_invokehandle, adapter, appendix); -} - -void ConstantPoolCacheEntry::set_dynamic_call(methodHandle adapter, Handle appendix) { - assert(is_secondary_entry(), ""); - set_method_handle_common(Bytecodes::_invokedynamic, adapter, appendix); -} - -void ConstantPoolCacheEntry::set_method_handle_common(Bytecodes::Code invoke_code, methodHandle adapter, Handle appendix) { - // NOTE: This CPCE can be the subject of data races. - // There are three words to update: flags, f2, f1 (in that order). - // Writers must store all other values before f1. - // Readers must test f1 first for non-null before reading other fields. - // Competing writers must acquire exclusive access on the first - // write, to flags, using a compare/exchange. - // A losing writer must spin until the winner writes f1, - // so that when he returns, he can use the linked cache entry. - - bool has_appendix = appendix.not_null(); - if (!has_appendix) { - // The extra argument is not used, but we need a non-null value to signify linkage state. - // Set it to something benign that will never leak memory. - appendix = Universe::void_mirror(); - } - - bool owner = - init_method_flags_atomic(as_TosState(adapter->result_type()), - ((has_appendix ? 1 : 0) << has_appendix_shift) | - ( 1 << is_vfinal_shift) | - ( 1 << is_final_shift), - adapter->size_of_parameters()); - if (!owner) { - while (is_f1_null()) { - // Pause momentarily on a low-level lock, to allow racing thread to win. - MutexLockerEx mu(Patching_lock, Mutex::_no_safepoint_check_flag); - os::yield(); - } - return; - } - - if (TraceInvokeDynamic) { - tty->print_cr("set_method_handle bc=%d appendix="PTR_FORMAT"%s method="PTR_FORMAT" ", - invoke_code, - (intptr_t)appendix(), (has_appendix ? "" : " (unused)"), - (intptr_t)adapter()); - adapter->print(); - if (has_appendix) appendix()->print(); - } - - // Method handle invokes and invokedynamic sites use both cp cache words. - // f1, if not null, contains a value passed as a trailing argument to the adapter. - // In the general case, this could be the call site's MethodType, - // for use with java.lang.Invokers.checkExactType, or else a CallSite object. - // f2 contains the adapter method which manages the actual call. - // In the general case, this is a compiled LambdaForm. - // (The Java code is free to optimize these calls by binding other - // sorts of methods and appendices to call sites.) - // JVM-level linking is via f2, as if for invokevfinal, and signatures are erased. - // The appendix argument (if any) is added to the signature, and is counted in the parameter_size bits. - // In principle this means that the method (with appendix) could take up to 256 parameter slots. - // - // This means that given a call site like (List)mh.invoke("foo"), - // the f2 method has signature '(Ljl/Object;Ljl/invoke/MethodType;)Ljl/Object;', - // not '(Ljava/lang/String;)Ljava/util/List;'. - // The fact that String and List are involved is encoded in the MethodType in f1. - // This allows us to create fewer method oops, while keeping type safety. - // - set_f2_as_vfinal_method(adapter()); - assert(appendix.not_null(), "needed for linkage state"); - release_set_f1(appendix()); // This must be the last one to set (see NOTE above)! - if (!is_secondary_entry()) { - // The interpreter assembly code does not check byte_2, - // but it is used by is_resolved, method_if_resolved, etc. - set_bytecode_2(invoke_code); - } - NOT_PRODUCT(verify(tty)); - if (TraceInvokeDynamic) { - this->print(tty, 0); - } -} - -methodOop ConstantPoolCacheEntry::method_if_resolved(constantPoolHandle cpool) { - if (is_secondary_entry()) { - if (!is_f1_null()) - return f2_as_vfinal_method(); - return NULL; - } - // Decode the action of set_method and set_interface_call - Bytecodes::Code invoke_code = bytecode_1(); - if (invoke_code != (Bytecodes::Code)0) { - oop f1 = _f1; - if (f1 != NULL) { - switch (invoke_code) { - case Bytecodes::_invokeinterface: - assert(f1->is_klass(), ""); - return klassItable::method_for_itable_index(klassOop(f1), f2_as_index()); - case Bytecodes::_invokestatic: - case Bytecodes::_invokespecial: - assert(!has_appendix(), ""); - assert(f1->is_method(), ""); - return methodOop(f1); - } - } - } - invoke_code = bytecode_2(); - if (invoke_code != (Bytecodes::Code)0) { - switch (invoke_code) { - case Bytecodes::_invokevirtual: - if (is_vfinal()) { - // invokevirtual - methodOop m = f2_as_vfinal_method(); - assert(m->is_method(), ""); - return m; - } else { - int holder_index = cpool->uncached_klass_ref_index_at(constant_pool_index()); - if (cpool->tag_at(holder_index).is_klass()) { - klassOop klass = cpool->resolved_klass_at(holder_index); - if (!Klass::cast(klass)->oop_is_instance()) - klass = SystemDictionary::Object_klass(); - return instanceKlass::cast(klass)->method_at_vtable(f2_as_index()); - } - } - break; - case Bytecodes::_invokehandle: - case Bytecodes::_invokedynamic: - return f2_as_vfinal_method(); - } - } - return NULL; -} - - -class LocalOopClosure: public OopClosure { - private: - void (*_f)(oop*); - - public: - LocalOopClosure(void f(oop*)) { _f = f; } - virtual void do_oop(oop* o) { _f(o); } - virtual void do_oop(narrowOop *o) { ShouldNotReachHere(); } -}; - - -void ConstantPoolCacheEntry::oops_do(void f(oop*)) { - LocalOopClosure blk(f); - oop_iterate(&blk); -} - - -void ConstantPoolCacheEntry::oop_iterate(OopClosure* blk) { - assert(in_words(size()) == 4, "check code below - may need adjustment"); - // field[1] is always oop or NULL - blk->do_oop((oop*)&_f1); - if (is_vfinal()) { - blk->do_oop((oop*)&_f2); - } -} - - -void ConstantPoolCacheEntry::oop_iterate_m(OopClosure* blk, MemRegion mr) { - assert(in_words(size()) == 4, "check code below - may need adjustment"); - // field[1] is always oop or NULL - if (mr.contains((oop *)&_f1)) blk->do_oop((oop*)&_f1); - if (is_vfinal()) { - if (mr.contains((oop *)&_f2)) blk->do_oop((oop*)&_f2); - } -} - - -void ConstantPoolCacheEntry::follow_contents() { - assert(in_words(size()) == 4, "check code below - may need adjustment"); - // field[1] is always oop or NULL - MarkSweep::mark_and_push((oop*)&_f1); - if (is_vfinal()) { - MarkSweep::mark_and_push((oop*)&_f2); - } -} - -#ifndef SERIALGC -void ConstantPoolCacheEntry::follow_contents(ParCompactionManager* cm) { - assert(in_words(size()) == 4, "check code below - may need adjustment"); - // field[1] is always oop or NULL - PSParallelCompact::mark_and_push(cm, (oop*)&_f1); - if (is_vfinal()) { - PSParallelCompact::mark_and_push(cm, (oop*)&_f2); - } -} -#endif // SERIALGC - -void ConstantPoolCacheEntry::adjust_pointers() { - assert(in_words(size()) == 4, "check code below - may need adjustment"); - // field[1] is always oop or NULL - MarkSweep::adjust_pointer((oop*)&_f1); - if (is_vfinal()) { - MarkSweep::adjust_pointer((oop*)&_f2); - } -} - -#ifndef SERIALGC -void ConstantPoolCacheEntry::update_pointers() { - assert(in_words(size()) == 4, "check code below - may need adjustment"); - // field[1] is always oop or NULL - PSParallelCompact::adjust_pointer((oop*)&_f1); - if (is_vfinal()) { - PSParallelCompact::adjust_pointer((oop*)&_f2); - } -} -#endif // SERIALGC - -// RedefineClasses() API support: -// If this constantPoolCacheEntry refers to old_method then update it -// to refer to new_method. -bool ConstantPoolCacheEntry::adjust_method_entry(methodOop old_method, - methodOop new_method, bool * trace_name_printed) { - - if (is_vfinal()) { - // virtual and final so _f2 contains method ptr instead of vtable index - if (f2_as_vfinal_method() == old_method) { - // match old_method so need an update - // NOTE: can't use set_f2_as_vfinal_method as it asserts on different values - _f2 = (intptr_t)new_method; - if (RC_TRACE_IN_RANGE(0x00100000, 0x00400000)) { - if (!(*trace_name_printed)) { - // RC_TRACE_MESG macro has an embedded ResourceMark - RC_TRACE_MESG(("adjust: name=%s", - Klass::cast(old_method->method_holder())->external_name())); - *trace_name_printed = true; - } - // RC_TRACE macro has an embedded ResourceMark - RC_TRACE(0x00400000, ("cpc vf-entry update: %s(%s)", - new_method->name()->as_C_string(), - new_method->signature()->as_C_string())); - } - - return true; - } - - // f1() is not used with virtual entries so bail out - return false; - } - - if ((oop)_f1 == NULL) { - // NULL f1() means this is a virtual entry so bail out - // We are assuming that the vtable index does not need change. - return false; - } - - if ((oop)_f1 == old_method) { - _f1 = new_method; - if (RC_TRACE_IN_RANGE(0x00100000, 0x00400000)) { - if (!(*trace_name_printed)) { - // RC_TRACE_MESG macro has an embedded ResourceMark - RC_TRACE_MESG(("adjust: name=%s", - Klass::cast(old_method->method_holder())->external_name())); - *trace_name_printed = true; - } - // RC_TRACE macro has an embedded ResourceMark - RC_TRACE(0x00400000, ("cpc entry update: %s(%s)", - new_method->name()->as_C_string(), - new_method->signature()->as_C_string())); - } - - return true; - } - - return false; -} - -bool ConstantPoolCacheEntry::is_interesting_method_entry(klassOop k) { - if (!is_method_entry()) { - // not a method entry so not interesting by default - return false; - } - - methodOop m = NULL; - if (is_vfinal()) { - // virtual and final so _f2 contains method ptr instead of vtable index - m = f2_as_vfinal_method(); - } else if (is_f1_null()) { - // NULL _f1 means this is a virtual entry so also not interesting - return false; - } else { - oop f1 = _f1; // _f1 is volatile - if (!f1->is_method()) { - // _f1 can also contain a klassOop for an interface - return false; - } - m = f1_as_method(); - } - - assert(m != NULL && m->is_method(), "sanity check"); - if (m == NULL || !m->is_method() || m->method_holder() != k) { - // robustness for above sanity checks or method is not in - // the interesting class - return false; - } - - // the method is in the interesting class so the entry is interesting - return true; -} - -void ConstantPoolCacheEntry::print(outputStream* st, int index) const { - // print separator - if (index == 0) st->print_cr(" -------------"); - // print entry - st->print("%3d ("PTR_FORMAT") ", index, (intptr_t)this); - if (is_secondary_entry()) - st->print_cr("[%5d|secondary]", main_entry_index()); - else - st->print_cr("[%02x|%02x|%5d]", bytecode_2(), bytecode_1(), constant_pool_index()); - st->print_cr(" [ "PTR_FORMAT"]", (intptr_t)(oop)_f1); - st->print_cr(" [ "PTR_FORMAT"]", (intptr_t)_f2); - st->print_cr(" [ "PTR_FORMAT"]", (intptr_t)_flags); - st->print_cr(" -------------"); -} - -void ConstantPoolCacheEntry::verify(outputStream* st) const { - // not implemented yet -} - -// Implementation of ConstantPoolCache - -void constantPoolCacheOopDesc::initialize(intArray& inverse_index_map) { - assert(inverse_index_map.length() == length(), "inverse index map must have same length as cache"); - for (int i = 0; i < length(); i++) { - ConstantPoolCacheEntry* e = entry_at(i); - int original_index = inverse_index_map[i]; - if ((original_index & Rewriter::_secondary_entry_tag) != 0) { - int main_index = (original_index - Rewriter::_secondary_entry_tag); - assert(!entry_at(main_index)->is_secondary_entry(), "valid main index"); - e->initialize_secondary_entry(main_index); - } else { - e->initialize_entry(original_index); - } - assert(entry_at(i) == e, "sanity"); - } -} - -// RedefineClasses() API support: -// If any entry of this constantPoolCache points to any of -// old_methods, replace it with the corresponding new_method. -void constantPoolCacheOopDesc::adjust_method_entries(methodOop* old_methods, methodOop* new_methods, - int methods_length, bool * trace_name_printed) { - - if (methods_length == 0) { - // nothing to do if there are no methods - return; - } - - // get shorthand for the interesting class - klassOop old_holder = old_methods[0]->method_holder(); - - for (int i = 0; i < length(); i++) { - if (!entry_at(i)->is_interesting_method_entry(old_holder)) { - // skip uninteresting methods - continue; - } - - // The constantPoolCache contains entries for several different - // things, but we only care about methods. In fact, we only care - // about methods in the same class as the one that contains the - // old_methods. At this point, we have an interesting entry. - - for (int j = 0; j < methods_length; j++) { - methodOop old_method = old_methods[j]; - methodOop new_method = new_methods[j]; - - if (entry_at(i)->adjust_method_entry(old_method, new_method, - trace_name_printed)) { - // current old_method matched this entry and we updated it so - // break out and get to the next interesting entry if there one - break; - } - } - } -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/cpCacheOop.hpp --- a/src/share/vm/oops/cpCacheOop.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,464 +0,0 @@ -/* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_CPCACHEOOP_HPP -#define SHARE_VM_OOPS_CPCACHEOOP_HPP - -#include "interpreter/bytecodes.hpp" -#include "memory/allocation.hpp" -#include "oops/arrayOop.hpp" -#include "utilities/array.hpp" - -// A ConstantPoolCacheEntry describes an individual entry of the constant -// pool cache. There's 2 principal kinds of entries: field entries for in- -// stance & static field access, and method entries for invokes. Some of -// the entry layout is shared and looks as follows: -// -// bit number |31 0| -// bit length |-8--|-8--|---16----| -// -------------------------------- -// _indices [ b2 | b1 | index ] index = constant_pool_index (!= 0, normal entries only) -// _indices [ index | 00000 ] index = main_entry_index (secondary entries only) -// _f1 [ entry specific ] method, klass, or oop (MethodType or CallSite) -// _f2 [ entry specific ] vtable index or vfinal method -// _flags [tos|0|00|00|00|f|v|f2|unused|field_index] (for field entries) -// bit length [ 4 |1|1 |1 | 1|1|1| 1|---5--|----16-----] -// _flags [tos|M|vf|fv|ea|f|0|f2|unused|00000|psize] (for method entries) -// bit length [ 4 |1|1 |1 | 1|1|1| 1|---5--|--8--|--8--] - -// -------------------------------- -// -// with: -// index = original constant pool index -// b1 = bytecode 1 -// b2 = bytecode 2 -// psize = parameters size (method entries only) -// field_index = index into field information in holder instanceKlass -// The index max is 0xffff (max number of fields in constant pool) -// and is multiplied by (instanceKlass::next_offset) when accessing. -// t = TosState (see below) -// f = field is marked final (see below) -// f2 = virtual but final (method entries only: is_vfinal()) -// v = field is volatile (see below) -// m = invokeinterface used for method in class Object (see below) -// h = RedefineClasses/Hotswap bit (see below) -// -// The flags after TosState have the following interpretation: -// bit 27: 0 for fields, 1 for methods -// f flag true if field is marked final -// v flag true if field is volatile (only for fields) -// f2 flag true if f2 contains an oop (e.g., virtual final method) -// fv flag true if invokeinterface used for method in class Object -// -// The flags 31, 30, 29, 28 together build a 4 bit number 0 to 8 with the -// following mapping to the TosState states: -// -// btos: 0 -// ctos: 1 -// stos: 2 -// itos: 3 -// ltos: 4 -// ftos: 5 -// dtos: 6 -// atos: 7 -// vtos: 8 -// -// Entry specific: field entries: -// _indices = get (b1 section) and put (b2 section) bytecodes, original constant pool index -// _f1 = field holder (as a java.lang.Class, not a klassOop) -// _f2 = field offset in bytes -// _flags = field type information, original FieldInfo index in field holder -// (field_index section) -// -// Entry specific: method entries: -// _indices = invoke code for f1 (b1 section), invoke code for f2 (b2 section), -// original constant pool index -// _f1 = methodOop for non-virtual calls, unused by virtual calls. -// for interface calls, which are essentially virtual but need a klass, -// contains klassOop for the corresponding interface. -// for invokedynamic, f1 contains a site-specific CallSite object (as an appendix) -// for invokehandle, f1 contains a site-specific MethodType object (as an appendix) -// (upcoming metadata changes will move the appendix to a separate array) -// _f2 = vtable/itable index (or final methodOop) for virtual calls only, -// unused by non-virtual. The is_vfinal flag indicates this is a -// method pointer for a final method, not an index. -// _flags = method type info (t section), -// virtual final bit (vfinal), -// parameter size (psize section) -// -// Note: invokevirtual & invokespecial bytecodes can share the same constant -// pool entry and thus the same constant pool cache entry. All invoke -// bytecodes but invokevirtual use only _f1 and the corresponding b1 -// bytecode, while invokevirtual uses only _f2 and the corresponding -// b2 bytecode. The value of _flags is shared for both types of entries. -// -// The fields are volatile so that they are stored in the order written in the -// source code. The _indices field with the bytecode must be written last. - -class ConstantPoolCacheEntry VALUE_OBJ_CLASS_SPEC { - friend class VMStructs; - friend class constantPoolCacheKlass; - friend class constantPoolOopDesc; //resolve_constant_at_impl => set_f1 - - private: - volatile intx _indices; // constant pool index & rewrite bytecodes - volatile oop _f1; // entry specific oop field - volatile intx _f2; // entry specific int/oop field - volatile intx _flags; // flags - - -#ifdef ASSERT - bool same_methodOop(oop cur_f1, oop f1); -#endif - - void set_bytecode_1(Bytecodes::Code code); - void set_bytecode_2(Bytecodes::Code code); - void set_f1(oop f1) { - oop existing_f1 = _f1; // read once - assert(existing_f1 == NULL || existing_f1 == f1, "illegal field change"); - oop_store(&_f1, f1); - } - void release_set_f1(oop f1); - void set_f2(intx f2) { assert(_f2 == 0 || _f2 == f2, "illegal field change"); _f2 = f2; } - void set_f2_as_vfinal_method(methodOop f2) { assert(_f2 == 0 || _f2 == (intptr_t) f2, "illegal field change"); assert(is_vfinal(), "flags must be set"); _f2 = (intptr_t) f2; } - int make_flags(TosState state, int option_bits, int field_index_or_method_params); - void set_flags(intx flags) { _flags = flags; } - bool init_flags_atomic(intx flags); - void set_field_flags(TosState field_type, int option_bits, int field_index) { - assert((field_index & field_index_mask) == field_index, "field_index in range"); - set_flags(make_flags(field_type, option_bits | (1 << is_field_entry_shift), field_index)); - } - void set_method_flags(TosState return_type, int option_bits, int method_params) { - assert((method_params & parameter_size_mask) == method_params, "method_params in range"); - set_flags(make_flags(return_type, option_bits, method_params)); - } - bool init_method_flags_atomic(TosState return_type, int option_bits, int method_params) { - assert((method_params & parameter_size_mask) == method_params, "method_params in range"); - return init_flags_atomic(make_flags(return_type, option_bits, method_params)); - } - - public: - // specific bit definitions for the flags field: - // (Note: the interpreter must use these definitions to access the CP cache.) - enum { - // high order bits are the TosState corresponding to field type or method return type - tos_state_bits = 4, - tos_state_mask = right_n_bits(tos_state_bits), - tos_state_shift = BitsPerInt - tos_state_bits, // see verify_tos_state_shift below - // misc. option bits; can be any bit position in [16..27] - is_vfinal_shift = 21, - is_volatile_shift = 22, - is_final_shift = 23, - has_appendix_shift = 24, - is_forced_virtual_shift = 25, - is_field_entry_shift = 26, - // low order bits give field index (for FieldInfo) or method parameter size: - field_index_bits = 16, - field_index_mask = right_n_bits(field_index_bits), - parameter_size_bits = 8, // subset of field_index_mask, range is 0..255 - parameter_size_mask = right_n_bits(parameter_size_bits), - option_bits_mask = ~(((-1) << tos_state_shift) | (field_index_mask | parameter_size_mask)) - }; - - // specific bit definitions for the indices field: - enum { - main_cp_index_bits = 2*BitsPerByte, - main_cp_index_mask = right_n_bits(main_cp_index_bits), - bytecode_1_shift = main_cp_index_bits, - bytecode_1_mask = right_n_bits(BitsPerByte), // == (u1)0xFF - bytecode_2_shift = main_cp_index_bits + BitsPerByte, - bytecode_2_mask = right_n_bits(BitsPerByte), // == (u1)0xFF - // the secondary cp index overlaps with bytecodes 1 and 2: - secondary_cp_index_shift = bytecode_1_shift, - secondary_cp_index_bits = BitsPerInt - main_cp_index_bits - }; - - - // Initialization - void initialize_entry(int original_index); // initialize primary entry - void initialize_secondary_entry(int main_index); // initialize secondary entry - - void set_field( // sets entry to resolved field state - Bytecodes::Code get_code, // the bytecode used for reading the field - Bytecodes::Code put_code, // the bytecode used for writing the field - KlassHandle field_holder, // the object/klass holding the field - int orig_field_index, // the original field index in the field holder - int field_offset, // the field offset in words in the field holder - TosState field_type, // the (machine) field type - bool is_final, // the field is final - bool is_volatile // the field is volatile - ); - - void set_method( // sets entry to resolved method entry - Bytecodes::Code invoke_code, // the bytecode used for invoking the method - methodHandle method, // the method/prototype if any (NULL, otherwise) - int vtable_index // the vtable index if any, else negative - ); - - void set_interface_call( - methodHandle method, // Resolved method - int index // Method index into interface - ); - - void set_method_handle( - methodHandle method, // adapter for invokeExact, etc. - Handle appendix // stored in f1; could be a java.lang.invoke.MethodType - ); - - void set_dynamic_call( - methodHandle method, // adapter for this call site - Handle appendix // stored in f1; could be a java.lang.invoke.CallSite - ); - - // Common code for invokedynamic and MH invocations. - - // The "appendix" is an optional call-site-specific parameter which is - // pushed by the JVM at the end of the argument list. This argument may - // be a MethodType for the MH.invokes and a CallSite for an invokedynamic - // instruction. However, its exact type and use depends on the Java upcall, - // which simply returns a compiled LambdaForm along with any reference - // that LambdaForm needs to complete the call. If the upcall returns a - // null appendix, the argument is not passed at all. - // - // The appendix is *not* represented in the signature of the symbolic - // reference for the call site, but (if present) it *is* represented in - // the methodOop bound to the site. This means that static and dynamic - // resolution logic needs to make slightly different assessments about the - // number and types of arguments. - void set_method_handle_common( - Bytecodes::Code invoke_code, // _invokehandle or _invokedynamic - methodHandle adapter, // invoker method (f2) - Handle appendix // appendix such as CallSite, MethodType, etc. (f1) - ); - - methodOop method_if_resolved(constantPoolHandle cpool); - - void set_parameter_size(int value); - - // Which bytecode number (1 or 2) in the index field is valid for this bytecode? - // Returns -1 if neither is valid. - static int bytecode_number(Bytecodes::Code code) { - switch (code) { - case Bytecodes::_getstatic : // fall through - case Bytecodes::_getfield : // fall through - case Bytecodes::_invokespecial : // fall through - case Bytecodes::_invokestatic : // fall through - case Bytecodes::_invokeinterface : return 1; - case Bytecodes::_putstatic : // fall through - case Bytecodes::_putfield : // fall through - case Bytecodes::_invokehandle : // fall through - case Bytecodes::_invokedynamic : // fall through - case Bytecodes::_invokevirtual : return 2; - default : break; - } - return -1; - } - - // Has this bytecode been resolved? Only valid for invokes and get/put field/static. - bool is_resolved(Bytecodes::Code code) const { - switch (bytecode_number(code)) { - case 1: return (bytecode_1() == code); - case 2: return (bytecode_2() == code); - } - return false; // default: not resolved - } - - // Accessors - bool is_secondary_entry() const { return (_indices & main_cp_index_mask) == 0; } - int main_entry_index() const { assert(is_secondary_entry(), "must be secondary entry"); - return ((uintx)_indices >> secondary_cp_index_shift); } - int primary_entry_indices() const { assert(!is_secondary_entry(), "must be main entry"); - return _indices; } - int constant_pool_index() const { return (primary_entry_indices() & main_cp_index_mask); } - Bytecodes::Code bytecode_1() const { return Bytecodes::cast((primary_entry_indices() >> bytecode_1_shift) - & bytecode_1_mask); } - Bytecodes::Code bytecode_2() const { return Bytecodes::cast((primary_entry_indices() >> bytecode_2_shift) - & bytecode_2_mask); } - methodOop f1_as_method() const { oop f1 = _f1; assert(f1 == NULL || f1->is_method(), ""); return methodOop(f1); } - klassOop f1_as_klass() const { oop f1 = _f1; assert(f1 == NULL || f1->is_klass(), ""); return klassOop(f1); } - oop f1_as_klass_mirror() const { oop f1 = f1_as_instance(); return f1; } // i.e., return a java_mirror - oop f1_as_instance() const { oop f1 = _f1; assert(f1 == NULL || f1->is_instance() || f1->is_array(), ""); return f1; } - oop f1_appendix() const { assert(has_appendix(), ""); return f1_as_instance(); } - bool is_f1_null() const { oop f1 = _f1; return f1 == NULL; } // classifies a CPC entry as unbound - int f2_as_index() const { assert(!is_vfinal(), ""); return (int) _f2; } - methodOop f2_as_vfinal_method() const { assert(is_vfinal(), ""); return methodOop(_f2); } - int field_index() const { assert(is_field_entry(), ""); return (_flags & field_index_mask); } - int parameter_size() const { assert(is_method_entry(), ""); return (_flags & parameter_size_mask); } - bool is_volatile() const { return (_flags & (1 << is_volatile_shift)) != 0; } - bool is_final() const { return (_flags & (1 << is_final_shift)) != 0; } - bool has_appendix() const { return (_flags & (1 << has_appendix_shift)) != 0; } - bool is_forced_virtual() const { return (_flags & (1 << is_forced_virtual_shift)) != 0; } - bool is_vfinal() const { return (_flags & (1 << is_vfinal_shift)) != 0; } - bool is_method_entry() const { return (_flags & (1 << is_field_entry_shift)) == 0; } - bool is_field_entry() const { return (_flags & (1 << is_field_entry_shift)) != 0; } - bool is_byte() const { return flag_state() == btos; } - bool is_char() const { return flag_state() == ctos; } - bool is_short() const { return flag_state() == stos; } - bool is_int() const { return flag_state() == itos; } - bool is_long() const { return flag_state() == ltos; } - bool is_float() const { return flag_state() == ftos; } - bool is_double() const { return flag_state() == dtos; } - bool is_object() const { return flag_state() == atos; } - TosState flag_state() const { assert((uint)number_of_states <= (uint)tos_state_mask+1, ""); - return (TosState)((_flags >> tos_state_shift) & tos_state_mask); } - - // Code generation support - static WordSize size() { return in_WordSize(sizeof(ConstantPoolCacheEntry) / HeapWordSize); } - static ByteSize size_in_bytes() { return in_ByteSize(sizeof(ConstantPoolCacheEntry)); } - static ByteSize indices_offset() { return byte_offset_of(ConstantPoolCacheEntry, _indices); } - static ByteSize f1_offset() { return byte_offset_of(ConstantPoolCacheEntry, _f1); } - static ByteSize f2_offset() { return byte_offset_of(ConstantPoolCacheEntry, _f2); } - static ByteSize flags_offset() { return byte_offset_of(ConstantPoolCacheEntry, _flags); } - - // GC Support - void oops_do(void f(oop*)); - void oop_iterate(OopClosure* blk); - void oop_iterate_m(OopClosure* blk, MemRegion mr); - void follow_contents(); - void adjust_pointers(); - -#ifndef SERIALGC - // Parallel Old - void follow_contents(ParCompactionManager* cm); -#endif // SERIALGC - - void update_pointers(); - - // RedefineClasses() API support: - // If this constantPoolCacheEntry refers to old_method then update it - // to refer to new_method. - // trace_name_printed is set to true if the current call has - // printed the klass name so that other routines in the adjust_* - // group don't print the klass name. - bool adjust_method_entry(methodOop old_method, methodOop new_method, - bool * trace_name_printed); - bool is_interesting_method_entry(klassOop k); - - // Debugging & Printing - void print (outputStream* st, int index) const; - void verify(outputStream* st) const; - - static void verify_tos_state_shift() { - // When shifting flags as a 32-bit int, make sure we don't need an extra mask for tos_state: - assert((((u4)-1 >> tos_state_shift) & ~tos_state_mask) == 0, "no need for tos_state mask"); - } -}; - - -// A constant pool cache is a runtime data structure set aside to a constant pool. The cache -// holds interpreter runtime information for all field access and invoke bytecodes. The cache -// is created and initialized before a class is actively used (i.e., initialized), the indivi- -// dual cache entries are filled at resolution (i.e., "link") time (see also: rewriter.*). - -class constantPoolCacheOopDesc: public oopDesc { - friend class VMStructs; - private: - int _length; - constantPoolOop _constant_pool; // the corresponding constant pool - - // Sizing - debug_only(friend class ClassVerifier;) - public: - int length() const { return _length; } - private: - void set_length(int length) { _length = length; } - - static int header_size() { return sizeof(constantPoolCacheOopDesc) / HeapWordSize; } - static int object_size(int length) { return align_object_size(header_size() + length * in_words(ConstantPoolCacheEntry::size())); } - int object_size() { return object_size(length()); } - - // Helpers - constantPoolOop* constant_pool_addr() { return &_constant_pool; } - ConstantPoolCacheEntry* base() const { return (ConstantPoolCacheEntry*)((address)this + in_bytes(base_offset())); } - - friend class constantPoolCacheKlass; - friend class ConstantPoolCacheEntry; - - public: - // Initialization - void initialize(intArray& inverse_index_map); - - // Secondary indexes. - // They must look completely different from normal indexes. - // The main reason is that byte swapping is sometimes done on normal indexes. - // Also, some of the CP accessors do different things for secondary indexes. - // Finally, it is helpful for debugging to tell the two apart. - static bool is_secondary_index(int i) { return (i < 0); } - static int decode_secondary_index(int i) { assert(is_secondary_index(i), ""); return ~i; } - static int encode_secondary_index(int i) { assert(!is_secondary_index(i), ""); return ~i; } - - // Accessors - void set_constant_pool(constantPoolOop pool) { oop_store_without_check((oop*)&_constant_pool, (oop)pool); } - constantPoolOop constant_pool() const { return _constant_pool; } - // Fetches the entry at the given index. - // The entry may be either primary or secondary. - // In either case the index must not be encoded or byte-swapped in any way. - ConstantPoolCacheEntry* entry_at(int i) const { - assert(0 <= i && i < length(), "index out of bounds"); - return base() + i; - } - // Fetches the secondary entry referred to by index. - // The index may be a secondary index, and must not be byte-swapped. - ConstantPoolCacheEntry* secondary_entry_at(int i) const { - int raw_index = i; - if (is_secondary_index(i)) { // correct these on the fly - raw_index = decode_secondary_index(i); - } - assert(entry_at(raw_index)->is_secondary_entry(), "not a secondary entry"); - return entry_at(raw_index); - } - // Given a primary or secondary index, fetch the corresponding primary entry. - // Indirect through the secondary entry, if the index is encoded as a secondary index. - // The index must not be byte-swapped. - ConstantPoolCacheEntry* main_entry_at(int i) const { - int primary_index = i; - if (is_secondary_index(i)) { - // run through an extra level of indirection: - int raw_index = decode_secondary_index(i); - primary_index = entry_at(raw_index)->main_entry_index(); - } - assert(!entry_at(primary_index)->is_secondary_entry(), "only one level of indirection"); - return entry_at(primary_index); - } - - // Code generation - static ByteSize base_offset() { return in_ByteSize(sizeof(constantPoolCacheOopDesc)); } - static ByteSize entry_offset(int raw_index) { - int index = raw_index; - if (is_secondary_index(raw_index)) - index = decode_secondary_index(raw_index); - return (base_offset() + ConstantPoolCacheEntry::size_in_bytes() * index); - } - - // RedefineClasses() API support: - // If any entry of this constantPoolCache points to any of - // old_methods, replace it with the corresponding new_method. - // trace_name_printed is set to true if the current call has - // printed the klass name so that other routines in the adjust_* - // group don't print the klass name. - void adjust_method_entries(methodOop* old_methods, methodOop* new_methods, - int methods_length, bool * trace_name_printed); -}; - -#endif // SHARE_VM_OOPS_CPCACHEOOP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/fieldInfo.hpp --- a/src/share/vm/oops/fieldInfo.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/fieldInfo.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,14 +25,15 @@ #ifndef SHARE_VM_OOPS_FIELDINFO_HPP #define SHARE_VM_OOPS_FIELDINFO_HPP +#include "oops/constantPool.hpp" #include "oops/typeArrayOop.hpp" #include "classfile/vmSymbols.hpp" // This class represents the field information contained in the fields -// array of an instanceKlass. Currently it's laid on top an array of +// array of an InstanceKlass. Currently it's laid on top an array of // Java shorts but in the future it could simply be used as a real // array type. FieldInfo generally shouldn't be used directly. -// Fields should be queried either through instanceKlass or through +// Fields should be queried either through InstanceKlass or through // the various FieldStreams. class FieldInfo VALUE_OBJ_CLASS_SPEC { friend class fieldDescriptor; @@ -65,8 +66,8 @@ u2 initval_index() const { return _shorts[initval_index_offset]; } public: - static FieldInfo* from_field_array(typeArrayOop fields, int index) { - return ((FieldInfo*)fields->short_at_addr(index * field_slots)); + static FieldInfo* from_field_array(Array* fields, int index) { + return ((FieldInfo*)fields->adr_at(index * field_slots)); } static FieldInfo* from_field_array(u2* fields, int index) { return ((FieldInfo*)(fields + index * field_slots)); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/fieldStreams.hpp --- a/src/share/vm/oops/fieldStreams.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/fieldStreams.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,13 +38,13 @@ // cases. class FieldStreamBase : public StackObj { protected: - typeArrayHandle _fields; + Array* _fields; constantPoolHandle _constants; int _index; int _limit; int _generic_signature_slot; - FieldInfo* field() const { return FieldInfo::from_field_array(_fields(), _index); } + FieldInfo* field() const { return FieldInfo::from_field_array(_fields, _index); } int init_generic_signature_start_slot() { int length = _fields->length(); @@ -55,7 +55,7 @@ /* Scan from 0 to the current _index. Count the number of generic signature slots for field[0] to field[_index - 1]. */ for (int i = 0; i < _index; i++) { - fi = FieldInfo::from_field_array(_fields(), i); + fi = FieldInfo::from_field_array(_fields, i); flags.set_flags(fi->access_flags()); if (flags.field_has_generic_signature()) { length --; @@ -64,7 +64,7 @@ } /* Scan from the current _index. */ for (int i = _index; i*FieldInfo::field_slots < length; i++) { - fi = FieldInfo::from_field_array(_fields(), i); + fi = FieldInfo::from_field_array(_fields, i); flags.set_flags(fi->access_flags()); if (flags.field_has_generic_signature()) { length --; @@ -76,7 +76,7 @@ return num_fields; } - FieldStreamBase(typeArrayHandle fields, constantPoolHandle constants, int start, int limit) { + FieldStreamBase(Array* fields, constantPoolHandle constants, int start, int limit) { _fields = fields; _constants = constants; _index = start; @@ -88,7 +88,7 @@ } } - FieldStreamBase(typeArrayHandle fields, constantPoolHandle constants) { + FieldStreamBase(Array* fields, constantPoolHandle constants) { _fields = fields; _constants = constants; _index = 0; @@ -96,7 +96,7 @@ } public: - FieldStreamBase(instanceKlass* klass) { + FieldStreamBase(InstanceKlass* klass) { _fields = klass->fields(); _constants = klass->constants(); _index = 0; @@ -149,7 +149,7 @@ Symbol* generic_signature() const { if (access_flags().field_has_generic_signature()) { assert(_generic_signature_slot < _fields->length(), "out of bounds"); - int index = _fields->short_at(_generic_signature_slot); + int index = _fields->at(_generic_signature_slot); return _constants->symbol_at(index); } else { return NULL; @@ -168,7 +168,6 @@ // Iterate over only the internal fields class JavaFieldStream : public FieldStreamBase { public: - JavaFieldStream(instanceKlass* k): FieldStreamBase(k->fields(), k->constants(), 0, k->java_fields_count()) {} JavaFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants(), 0, k->java_fields_count()) {} int name_index() const { @@ -191,7 +190,7 @@ assert(!field()->is_internal(), "regular only"); if (access_flags().field_has_generic_signature()) { assert(_generic_signature_slot < _fields->length(), "out of bounds"); - return _fields->short_at(_generic_signature_slot); + return _fields->at(_generic_signature_slot); } else { return 0; } @@ -200,7 +199,7 @@ assert(!field()->is_internal(), "regular only"); if (access_flags().field_has_generic_signature()) { assert(_generic_signature_slot < _fields->length(), "out of bounds"); - _fields->short_at_put(_generic_signature_slot, index); + _fields->at_put(_generic_signature_slot, index); } } int initval_index() const { @@ -217,15 +216,15 @@ // Iterate over only the internal fields class InternalFieldStream : public FieldStreamBase { public: - InternalFieldStream(instanceKlass* k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), 0) {} + InternalFieldStream(InstanceKlass* k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), 0) {} InternalFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), 0) {} }; class AllFieldStream : public FieldStreamBase { public: - AllFieldStream(typeArrayHandle fields, constantPoolHandle constants): FieldStreamBase(fields, constants) {} - AllFieldStream(instanceKlass* k): FieldStreamBase(k->fields(), k->constants()) {} + AllFieldStream(Array* fields, constantPoolHandle constants): FieldStreamBase(fields, constants) {} + AllFieldStream(InstanceKlass* k): FieldStreamBase(k->fields(), k->constants()) {} AllFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants()) {} }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/generateOopMap.cpp --- a/src/share/vm/oops/generateOopMap.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/generateOopMap.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1272,7 +1272,7 @@ case Bytecodes::_invokedynamic: case Bytecodes::_invokeinterface: int idx = currentBC->has_index_u4() ? currentBC->get_index_u4() : currentBC->get_index_u2_cpcache(); - constantPoolOop cp = method()->constants(); + ConstantPool* cp = method()->constants(); int nameAndTypeIdx = cp->name_and_type_ref_index_at(idx); int signatureIdx = cp->signature_ref_index_at(nameAndTypeIdx); Symbol* signature = cp->symbol_at(signatureIdx); @@ -1304,7 +1304,7 @@ case Bytecodes::_invokedynamic: case Bytecodes::_invokeinterface: int idx = currentBC->has_index_u4() ? currentBC->get_index_u4() : currentBC->get_index_u2_cpcache(); - constantPoolOop cp = method()->constants(); + ConstantPool* cp = method()->constants(); int nameAndTypeIdx = cp->name_and_type_ref_index_at(idx); int signatureIdx = cp->signature_ref_index_at(nameAndTypeIdx); Symbol* signature = cp->symbol_at(signatureIdx); @@ -1846,14 +1846,22 @@ void GenerateOopMap::do_ldc(int bci) { Bytecode_loadconstant ldc(method(), bci); - constantPoolOop cp = method()->constants(); + ConstantPool* cp = method()->constants(); + constantTag tag = cp->tag_at(ldc.pool_index()); // idx is index in resolved_references BasicType bt = ldc.result_type(); - CellTypeState cts = (bt == T_OBJECT) ? CellTypeState::make_line_ref(bci) : valCTS; - // Make sure bt==T_OBJECT is the same as old code (is_pointer_entry). - // Note that CONSTANT_MethodHandle entries are u2 index pairs, not pointer-entries, - // and they are processed by _fast_aldc and the CP cache. - assert((ldc.has_cache_index() || cp->is_object_entry(ldc.pool_index())) - ? (bt == T_OBJECT) : true, "expected object type"); + CellTypeState cts; + if (tag.is_klass() || + tag.is_unresolved_klass() || + tag.is_string() || + tag.is_object() || + tag.is_method_handle() || + tag.is_method_type()) { + assert(bt == T_OBJECT, "Guard is incorrect"); + cts = CellTypeState::make_line_ref(bci); + } else { + assert(bt != T_OBJECT, "Guard is incorrect"); + cts = valCTS; + } ppush1(cts); } @@ -1889,7 +1897,7 @@ void GenerateOopMap::do_field(int is_get, int is_static, int idx, int bci) { // Dig up signature for field in constant pool - constantPoolOop cp = method()->constants(); + ConstantPool* cp = method()->constants(); int nameAndTypeIdx = cp->name_and_type_ref_index_at(idx); int signatureIdx = cp->signature_ref_index_at(nameAndTypeIdx); Symbol* signature = cp->symbol_at(signatureIdx); @@ -1919,7 +1927,7 @@ void GenerateOopMap::do_method(int is_static, int is_interface, int idx, int bci) { // Dig up signature for field in constant pool - constantPoolOop cp = _method->constants(); + ConstantPool* cp = _method->constants(); Symbol* signature = cp->signature_ref_at(idx); // Parse method signature @@ -2302,7 +2310,9 @@ BytecodeStream bcs(_method); startOver = false; - while( bcs.next() >=0 && !startOver && !_got_error) { + while( !startOver && !_got_error && + // test bcs in case method changed and it became invalid + bcs.next() >=0) { startOver = rewrite_refval_conflict_inst(&bcs, from, to); } } while (startOver && !_got_error); @@ -2383,7 +2393,7 @@ bcp = _method->bcp_from(bcs->bci()); } - // Patch either directly in methodOop or in temp. buffer + // Patch either directly in Method* or in temp. buffer if (newIlen == 1) { assert(varNo < 4, "varNo too large"); *bcp = bc0 + varNo; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/generateOopMap.hpp --- a/src/share/vm/oops/generateOopMap.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/generateOopMap.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,12 +28,11 @@ #include "interpreter/bytecodeStream.hpp" #include "memory/allocation.inline.hpp" #include "memory/universe.inline.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oopsHierarchy.hpp" #include "runtime/signature.hpp" // Forward definition -class MethodOopMap; class GenerateOopMap; class BasicBlock; class CellTypeState; @@ -286,7 +285,7 @@ // // GenerateOopMap // -// Main class used to compute the pointer-maps in a MethodOop +// Main class used to compute the pointer-maps in a Method // class GenerateOopMap VALUE_OBJ_CLASS_SPEC { protected: @@ -471,7 +470,7 @@ // Query int max_locals() const { return _max_locals; } - methodOop method() const { return _method(); } + Method* method() const { return _method(); } methodHandle method_as_handle() const { return _method; } bool did_rewriting() { return _did_rewriting; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/instanceClassLoaderKlass.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/instanceClassLoaderKlass.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "classfile/javaClasses.hpp" +#include "classfile/systemDictionary.hpp" +#include "gc_implementation/shared/markSweep.inline.hpp" +#include "gc_interface/collectedHeap.inline.hpp" +#include "memory/genOopClosures.inline.hpp" +#include "memory/oopFactory.hpp" +#include "oops/instanceKlass.hpp" +#include "oops/instanceClassLoaderKlass.hpp" +#include "oops/instanceMirrorKlass.hpp" +#include "oops/instanceOop.hpp" +#include "oops/oop.inline.hpp" +#include "oops/symbol.hpp" +#include "runtime/handles.inline.hpp" +#ifndef SERIALGC +#include "gc_implementation/parNew/parOopClosures.inline.hpp" +#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" +#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" +#include "oops/oop.pcgc.inline.hpp" +#endif + +#define if_do_metadata_checked(closure, nv_suffix) \ + /* Make sure the non-virtual and the virtual versions match. */ \ + assert(closure->do_metadata##nv_suffix() == closure->do_metadata(), \ + "Inconsistency in do_metadata"); \ + if (closure->do_metadata##nv_suffix()) + +// Macro to define instanceClassLoaderKlass::oop_oop_iterate for virtual/nonvirtual for +// all closures. Macros calling macros above for each oop size. +// Since ClassLoader objects have only a pointer to the loader_data, they are not +// compressed nor does the pointer move. + +#define InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix)\ + \ +int instanceClassLoaderKlass:: \ +oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) { \ + /* Get size before changing pointers */ \ + SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\ + int size = InstanceKlass::oop_oop_iterate##nv_suffix(obj, closure); \ + \ + if_do_metadata_checked(closure, nv_suffix) { \ + ClassLoaderData* cld = java_lang_ClassLoader::loader_data(obj); \ + /* cld can be null if we have a non-registered class loader. */ \ + if (cld != NULL) { \ + closure->do_class_loader_data(cld); \ + } \ + } \ + \ + return size; \ +} + +#ifndef SERIALGC +#define InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN(OopClosureType, nv_suffix) \ + \ +int instanceClassLoaderKlass:: \ +oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) { \ + /* Get size before changing pointers */ \ + SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\ + int size = InstanceKlass::oop_oop_iterate_backwards##nv_suffix(obj, closure); \ + return size; \ +} +#endif // !SERIALGC + + +#define InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN_m(OopClosureType, nv_suffix) \ + \ +int instanceClassLoaderKlass:: \ +oop_oop_iterate##nv_suffix##_m(oop obj, \ + OopClosureType* closure, \ + MemRegion mr) { \ + SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\ + \ + int size = InstanceKlass::oop_oop_iterate##nv_suffix##_m(obj, closure, mr); \ + \ + if_do_metadata_checked(closure, nv_suffix) { \ + if (mr.contains(obj)) { \ + ClassLoaderData* cld = java_lang_ClassLoader::loader_data(obj); \ + /* cld can be null if we have a non-registered class loader. */ \ + if (cld != NULL) { \ + closure->do_class_loader_data(cld); \ + } \ + } \ + } \ + \ + return size; \ +} + +ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN) +ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN) +#ifndef SERIALGC +ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN) +ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN) +#endif // SERIALGC +ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN_m) +ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DEFN_m) + +void instanceClassLoaderKlass::oop_follow_contents(oop obj) { + InstanceKlass::oop_follow_contents(obj); + ClassLoaderData * const loader_data = java_lang_ClassLoader::loader_data(obj); + + // We must NULL check here, since the class loader + // can be found before the loader data has been set up. + if(loader_data != NULL) { + MarkSweep::follow_class_loader(loader_data); + } +} + +#ifndef SERIALGC +void instanceClassLoaderKlass::oop_follow_contents(ParCompactionManager* cm, + oop obj) { + InstanceKlass::oop_follow_contents(cm, obj); + ClassLoaderData * const loader_data = java_lang_ClassLoader::loader_data(obj); + if (loader_data != NULL) { + PSParallelCompact::follow_class_loader(cm, loader_data); + } +} + +void instanceClassLoaderKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { + InstanceKlass::oop_push_contents(pm, obj); + + // This is called by the young collector. It will already have taken care of + // all class loader data. So, we don't have to follow the class loader -> + // class loader data link. +} + +int instanceClassLoaderKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { + InstanceKlass::oop_update_pointers(cm, obj); + ClassLoaderData * const loader_data = java_lang_ClassLoader::loader_data(obj); + if (loader_data != NULL) { + PSParallelCompact::adjust_class_loader(cm, loader_data); + } + return size_helper(); +} +#endif // SERIALGC + diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/instanceClassLoaderKlass.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/instanceClassLoaderKlass.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_OOPS_INSTANCECLASSLOADERKLASS_HPP +#define SHARE_VM_OOPS_INSTANCECLASSLOADERKLASS_HPP + +#include "oops/instanceKlass.hpp" + +// An instanceClassLoaderKlass is a specialization of the InstanceKlass. It does +// not add any field. It is added to walk the dependencies for the class loader +// key that this class loader points to. This is how the loader_data graph is +// walked and dependant class loaders are kept alive. I thought we walked +// the list later? + +class instanceClassLoaderKlass: public InstanceKlass { + friend class VMStructs; + friend class InstanceKlass; + + // Constructor + instanceClassLoaderKlass(int vtable_len, int itable_len, int static_field_size, int nonstatic_oop_map_size, ReferenceType rt, AccessFlags access_flags, bool is_anonymous) + : InstanceKlass(vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt, access_flags, is_anonymous) {} + +public: + virtual bool oop_is_instanceClassLoader() const { return true; } + + instanceClassLoaderKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); } + + // Iterators + int oop_oop_iterate(oop obj, ExtendedOopClosure* blk) { + return oop_oop_iterate_v(obj, blk); + } + int oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) { + return oop_oop_iterate_v_m(obj, blk, mr); + } + +#define InstanceClassLoaderKlass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ + int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* blk); \ + int oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* blk, MemRegion mr); + + ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DECL) + ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DECL) + +#ifndef SERIALGC +#define InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DECL(OopClosureType, nv_suffix) \ + int oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* blk); + + ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DECL) + ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DECL) +#endif // !SERIALGC + + // Garbage collection + void oop_follow_contents(oop obj); + + // Parallel Scavenge and Parallel Old + PARALLEL_GC_DECLS +}; + +#endif // SHARE_VM_OOPS_INSTANCECLASSLOADERKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/instanceKlass.cpp --- a/src/share/vm/oops/instanceKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/instanceKlass.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -34,14 +34,15 @@ #include "interpreter/rewriter.hpp" #include "jvmtifiles/jvmti.h" #include "memory/genOopClosures.inline.hpp" +#include "memory/metadataFactory.hpp" #include "memory/oopFactory.hpp" -#include "memory/permGen.hpp" #include "oops/fieldStreams.hpp" +#include "oops/instanceClassLoaderKlass.hpp" #include "oops/instanceKlass.hpp" #include "oops/instanceMirrorKlass.hpp" #include "oops/instanceOop.hpp" -#include "oops/methodOop.hpp" -#include "oops/objArrayKlassKlass.hpp" +#include "oops/klass.inline.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "oops/symbol.hpp" #include "prims/jvmtiExport.hpp" @@ -65,11 +66,13 @@ # include "thread_bsd.inline.hpp" #endif #ifndef SERIALGC +#include "gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp" #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #include "gc_implementation/g1/g1OopClosures.inline.hpp" #include "gc_implementation/g1/g1RemSet.inline.hpp" #include "gc_implementation/g1/heapRegionSeq.inline.hpp" #include "gc_implementation/parNew/parOopClosures.inline.hpp" +#include "gc_implementation/parallelScavenge/parallelScavengeHeap.inline.hpp" #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" #include "oops/oop.pcgc.inline.hpp" @@ -168,19 +171,242 @@ #endif // ndef DTRACE_ENABLED -bool instanceKlass::should_be_initialized() const { +Klass* InstanceKlass::allocate_instance_klass(ClassLoaderData* loader_data, + int vtable_len, + int itable_len, + int static_field_size, + int nonstatic_oop_map_size, + ReferenceType rt, + AccessFlags access_flags, + Symbol* name, + Klass* super_klass, + KlassHandle host_klass, + TRAPS) { + + int size = InstanceKlass::size(vtable_len, itable_len, nonstatic_oop_map_size, + access_flags.is_interface(), + !host_klass.is_null()); + + // Allocation + InstanceKlass* ik; + if (rt == REF_NONE) { + if (name == vmSymbols::java_lang_Class()) { + ik = new (loader_data, size, THREAD) instanceMirrorKlass( + vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt, + access_flags, !host_klass.is_null()); + } else if (name == vmSymbols::java_lang_ClassLoader() || + (SystemDictionary::ClassLoader_klass_loaded() && + super_klass != NULL && + super_klass->is_subtype_of(SystemDictionary::ClassLoader_klass()))) { + ik = new (loader_data, size, THREAD) instanceClassLoaderKlass( + vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt, + access_flags, !host_klass.is_null()); + } else { + // normal class + ik = new (loader_data, size, THREAD) InstanceKlass( + vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt, + access_flags, !host_klass.is_null()); + } + } else { + // reference klass + ik = new (loader_data, size, THREAD) instanceRefKlass( + vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt, + access_flags, !host_klass.is_null()); + } + + return ik; +} + +InstanceKlass::InstanceKlass(int vtable_len, + int itable_len, + int static_field_size, + int nonstatic_oop_map_size, + ReferenceType rt, + AccessFlags access_flags, + bool is_anonymous) { + No_Safepoint_Verifier no_safepoint; // until k becomes parsable + + int size = InstanceKlass::size(vtable_len, itable_len, nonstatic_oop_map_size, + access_flags.is_interface(), is_anonymous); + + // The sizes of these these three variables are used for determining the + // size of the instanceKlassOop. It is critical that these are set to the right + // sizes before the first GC, i.e., when we allocate the mirror. + this->set_vtable_length(vtable_len); + this->set_itable_length(itable_len); + this->set_static_field_size(static_field_size); + this->set_nonstatic_oop_map_size(nonstatic_oop_map_size); + this->set_access_flags(access_flags); + this->set_is_anonymous(is_anonymous); + assert(this->size() == size, "wrong size for object"); + + this->set_array_klasses(NULL); + this->set_methods(NULL); + this->set_method_ordering(NULL); + this->set_local_interfaces(NULL); + this->set_transitive_interfaces(NULL); + this->init_implementor(); + this->set_fields(NULL, 0); + this->set_constants(NULL); + this->set_class_loader_data(NULL); + this->set_protection_domain(NULL); + this->set_signers(NULL); + this->set_source_file_name(NULL); + this->set_source_debug_extension(NULL, 0); + this->set_array_name(NULL); + this->set_inner_classes(NULL); + this->set_static_oop_field_count(0); + this->set_nonstatic_field_size(0); + this->set_is_marked_dependent(false); + this->set_init_state(InstanceKlass::allocated); + this->set_init_thread(NULL); + this->set_init_lock(NULL); + this->set_reference_type(rt); + this->set_oop_map_cache(NULL); + this->set_jni_ids(NULL); + this->set_osr_nmethods_head(NULL); + this->set_breakpoints(NULL); + this->init_previous_versions(); + this->set_generic_signature(NULL); + this->release_set_methods_jmethod_ids(NULL); + this->release_set_methods_cached_itable_indices(NULL); + this->set_annotations(NULL); + this->set_jvmti_cached_class_field_map(NULL); + this->set_initial_method_idnum(0); + + // initialize the non-header words to zero + intptr_t* p = (intptr_t*)this; + for (int index = InstanceKlass::header_size(); index < size; index++) { + p[index] = NULL_WORD; + } + + // Set temporary value until parseClassFile updates it with the real instance + // size. + this->set_layout_helper(Klass::instance_layout_helper(0, true)); +} + + +// This function deallocates the metadata and C heap pointers that the +// InstanceKlass points to. +void InstanceKlass::deallocate_contents(ClassLoaderData* loader_data) { + + // Orphan the mirror first, CMS thinks it's still live. + java_lang_Class::set_klass(java_mirror(), NULL); + + // Need to take this class off the class loader data list. + loader_data->remove_class(this); + + // The array_klass for this class is created later, after error handling. + // For class redefinition, we keep the original class so this scratch class + // doesn't have an array class. Either way, assert that there is nothing + // to deallocate. + assert(array_klasses() == NULL, "array classes shouldn't be created for this class yet"); + + // Release C heap allocated data that this might point to, which includes + // reference counting symbol names. + release_C_heap_structures(); + + Array* ms = methods(); + if (ms != Universe::the_empty_method_array()) { + for (int i = 0; i <= methods()->length() -1 ; i++) { + Method* method = methods()->at(i); + // Only want to delete methods that are not executing for RedefineClasses. + // The previous version will point to them so they're not totally dangling + assert (!method->on_stack(), "shouldn't be called with methods on stack"); + MetadataFactory::free_metadata(loader_data, method); + } + MetadataFactory::free_array(loader_data, methods()); + } + set_methods(NULL); + + if (method_ordering() != Universe::the_empty_int_array()) { + MetadataFactory::free_array(loader_data, method_ordering()); + } + set_method_ordering(NULL); + + // This array is in Klass, but remove it with the InstanceKlass since + // this place would be the only caller and it can share memory with transitive + // interfaces. + if (secondary_supers() != Universe::the_empty_klass_array() && + secondary_supers() != transitive_interfaces()) { + MetadataFactory::free_array(loader_data, secondary_supers()); + } + set_secondary_supers(NULL); + + // Only deallocate transitive interfaces if not empty, same as super class + // or same as local interfaces. See code in parseClassFile. + Array* ti = transitive_interfaces(); + if (ti != Universe::the_empty_klass_array() && ti != local_interfaces()) { + // check that the interfaces don't come from super class + Array* sti = (super() == NULL) ? NULL : + InstanceKlass::cast(super())->transitive_interfaces(); + if (ti != sti) { + MetadataFactory::free_array(loader_data, ti); + } + } + set_transitive_interfaces(NULL); + + // local interfaces can be empty + Array* li = local_interfaces(); + if (li != Universe::the_empty_klass_array()) { + MetadataFactory::free_array(loader_data, li); + } + set_local_interfaces(NULL); + + MetadataFactory::free_array(loader_data, fields()); + set_fields(NULL, 0); + + // If a method from a redefined class is using this constant pool, don't + // delete it, yet. The new class's previous version will point to this. + assert (!constants()->on_stack(), "shouldn't be called if anything is onstack"); + MetadataFactory::free_metadata(loader_data, constants()); + set_constants(NULL); + + if (inner_classes() != Universe::the_empty_short_array()) { + MetadataFactory::free_array(loader_data, inner_classes()); + } + set_inner_classes(NULL); + + // Null out Java heap objects, although these won't be walked to keep + // alive once this InstanceKlass is deallocated. + set_protection_domain(NULL); + set_signers(NULL); + set_init_lock(NULL); + set_annotations(NULL); +} + +volatile oop InstanceKlass::init_lock() const { + volatile oop lock = _init_lock; // read once + assert((oop)lock != NULL || !is_not_initialized(), // initialized or in_error state + "only fully initialized state can have a null lock"); + return lock; +} + +// Set the initialization lock to null so the object can be GC'ed. Any racing +// threads to get this lock will see a null lock and will not lock. +// That's okay because they all check for initialized state after getting +// the lock and return. +void InstanceKlass::fence_and_clear_init_lock() { + // make sure previous stores are all done, notably the init_state. + OrderAccess::storestore(); + klass_oop_store(&_init_lock, NULL); + assert(!is_not_initialized(), "class must be initialized now"); +} + + +bool InstanceKlass::should_be_initialized() const { return !is_initialized(); } -klassVtable* instanceKlass::vtable() const { - return new klassVtable(as_klassOop(), start_of_vtable(), vtable_length() / vtableEntry::size()); +klassVtable* InstanceKlass::vtable() const { + return new klassVtable(this, start_of_vtable(), vtable_length() / vtableEntry::size()); } -klassItable* instanceKlass::itable() const { - return new klassItable(as_klassOop()); +klassItable* InstanceKlass::itable() const { + return new klassItable(instanceKlassHandle(this)); } -void instanceKlass::eager_initialize(Thread *thread) { +void InstanceKlass::eager_initialize(Thread *thread) { if (!EagerInitialization) return; if (this->is_not_initialized()) { @@ -188,22 +414,23 @@ if (this->class_initializer() != NULL) return; // abort if it is java.lang.Object (initialization is handled in genesis) - klassOop super = this->super(); + Klass* super = this->super(); if (super == NULL) return; // abort if the super class should be initialized - if (!instanceKlass::cast(super)->is_initialized()) return; + if (!InstanceKlass::cast(super)->is_initialized()) return; // call body to expose the this pointer - instanceKlassHandle this_oop(thread, this->as_klassOop()); + instanceKlassHandle this_oop(thread, this); eager_initialize_impl(this_oop); } } -void instanceKlass::eager_initialize_impl(instanceKlassHandle this_oop) { +void InstanceKlass::eager_initialize_impl(instanceKlassHandle this_oop) { EXCEPTION_MARK; - ObjectLocker ol(this_oop, THREAD); + volatile oop init_lock = this_oop->init_lock(); + ObjectLocker ol(init_lock, THREAD, init_lock != NULL); // abort if someone beat us to the initialization if (!this_oop->is_not_initialized()) return; // note: not equivalent to is_initialized() @@ -222,6 +449,7 @@ } else { // linking successfull, mark class as initialized this_oop->set_init_state (fully_initialized); + this_oop->fence_and_clear_init_lock(); // trace if (TraceClassInitialization) { ResourceMark rm(THREAD); @@ -234,10 +462,10 @@ // See "The Virtual Machine Specification" section 2.16.5 for a detailed explanation of the class initialization // process. The step comments refers to the procedure described in that section. // Note: implementation moved to static method to expose the this pointer. -void instanceKlass::initialize(TRAPS) { +void InstanceKlass::initialize(TRAPS) { if (this->should_be_initialized()) { HandleMark hm(THREAD); - instanceKlassHandle this_oop(THREAD, this->as_klassOop()); + instanceKlassHandle this_oop(THREAD, this); initialize_impl(this_oop, CHECK); // Note: at this point the class may be initialized // OR it may be in the state of being initialized @@ -248,7 +476,7 @@ } -bool instanceKlass::verify_code( +bool InstanceKlass::verify_code( instanceKlassHandle this_oop, bool throw_verifyerror, TRAPS) { // 1) Verify the bytecodes Verifier::Mode mode = @@ -260,31 +488,33 @@ // Used exclusively by the shared spaces dump mechanism to prevent // classes mapped into the shared regions in new VMs from appearing linked. -void instanceKlass::unlink_class() { +void InstanceKlass::unlink_class() { assert(is_linked(), "must be linked"); _init_state = loaded; } -void instanceKlass::link_class(TRAPS) { +void InstanceKlass::link_class(TRAPS) { assert(is_loaded(), "must be loaded"); if (!is_linked()) { - instanceKlassHandle this_oop(THREAD, this->as_klassOop()); + HandleMark hm(THREAD); + instanceKlassHandle this_oop(THREAD, this); link_class_impl(this_oop, true, CHECK); } } // Called to verify that a class can link during initialization, without // throwing a VerifyError. -bool instanceKlass::link_class_or_fail(TRAPS) { +bool InstanceKlass::link_class_or_fail(TRAPS) { assert(is_loaded(), "must be loaded"); if (!is_linked()) { - instanceKlassHandle this_oop(THREAD, this->as_klassOop()); + HandleMark hm(THREAD); + instanceKlassHandle this_oop(THREAD, this); link_class_impl(this_oop, false, CHECK_false); } return is_linked(); } -bool instanceKlass::link_class_impl( +bool InstanceKlass::link_class_impl( instanceKlassHandle this_oop, bool throw_verifyerror, TRAPS) { // check for error state if (this_oop->is_in_error_state()) { @@ -321,11 +551,11 @@ } // link all interfaces implemented by this class before linking this class - objArrayHandle interfaces (THREAD, this_oop->local_interfaces()); + Array* interfaces = this_oop->local_interfaces(); int num_interfaces = interfaces->length(); for (int index = 0; index < num_interfaces; index++) { HandleMark hm(THREAD); - instanceKlassHandle ih(THREAD, klassOop(interfaces->obj_at(index))); + instanceKlassHandle ih(THREAD, interfaces->at(index)); link_class_impl(ih, throw_verifyerror, CHECK_false); } @@ -345,10 +575,12 @@ // verification & rewriting { - ObjectLocker ol(this_oop, THREAD); + volatile oop init_lock = this_oop->init_lock(); + ObjectLocker ol(init_lock, THREAD, init_lock != NULL); // rewritten will have been set if loader constraint error found // on an earlier link attempt // don't verify or rewrite if already rewritten + if (!this_oop->is_linked()) { if (!this_oop->is_rewritten()) { { @@ -382,7 +614,7 @@ // Initialize the vtable and interface table after // methods have been rewritten since rewrite may - // fabricate new methodOops. + // fabricate new Method*s. // also does loader constraint checking if (!this_oop()->is_shared()) { ResourceMark rm(THREAD); @@ -412,9 +644,9 @@ // Rewrite the byte codes of all of the methods of a class. // The rewriter must be called exactly once. Rewriting must happen after // verification but before the first method of the class is executed. -void instanceKlass::rewrite_class(TRAPS) { +void InstanceKlass::rewrite_class(TRAPS) { assert(is_loaded(), "must be loaded"); - instanceKlassHandle this_oop(THREAD, this->as_klassOop()); + instanceKlassHandle this_oop(THREAD, this); if (this_oop->is_rewritten()) { assert(this_oop()->is_shared(), "rewriting an unshared class?"); return; @@ -426,25 +658,27 @@ // Now relocate and link method entry points after class is rewritten. // This is outside is_rewritten flag. In case of an exception, it can be // executed more than once. -void instanceKlass::relocate_and_link_methods(TRAPS) { +void InstanceKlass::relocate_and_link_methods(TRAPS) { assert(is_loaded(), "must be loaded"); - instanceKlassHandle this_oop(THREAD, this->as_klassOop()); + instanceKlassHandle this_oop(THREAD, this); Rewriter::relocate_and_link(this_oop, CHECK); } -void instanceKlass::initialize_impl(instanceKlassHandle this_oop, TRAPS) { +void InstanceKlass::initialize_impl(instanceKlassHandle this_oop, TRAPS) { // Make sure klass is linked (verified) before initialization // A class could already be verified, since it has been reflected upon. this_oop->link_class(CHECK); - DTRACE_CLASSINIT_PROBE(required, instanceKlass::cast(this_oop()), -1); + DTRACE_CLASSINIT_PROBE(required, InstanceKlass::cast(this_oop()), -1); bool wait = false; // refer to the JVM book page 47 for description of steps // Step 1 - { ObjectLocker ol(this_oop, THREAD); + { + volatile oop init_lock = this_oop->init_lock(); + ObjectLocker ol(init_lock, THREAD, init_lock != NULL); Thread *self = THREAD; // it's passed the current thread @@ -459,19 +693,19 @@ // Step 3 if (this_oop->is_being_initialized() && this_oop->is_reentrant_initialization(self)) { - DTRACE_CLASSINIT_PROBE_WAIT(recursive, instanceKlass::cast(this_oop()), -1,wait); + DTRACE_CLASSINIT_PROBE_WAIT(recursive, InstanceKlass::cast(this_oop()), -1,wait); return; } // Step 4 if (this_oop->is_initialized()) { - DTRACE_CLASSINIT_PROBE_WAIT(concurrent, instanceKlass::cast(this_oop()), -1,wait); + DTRACE_CLASSINIT_PROBE_WAIT(concurrent, InstanceKlass::cast(this_oop()), -1,wait); return; } // Step 5 if (this_oop->is_in_error_state()) { - DTRACE_CLASSINIT_PROBE_WAIT(erroneous, instanceKlass::cast(this_oop()), -1,wait); + DTRACE_CLASSINIT_PROBE_WAIT(erroneous, InstanceKlass::cast(this_oop()), -1,wait); ResourceMark rm(THREAD); const char* desc = "Could not initialize class "; const char* className = this_oop->external_name(); @@ -492,7 +726,7 @@ } // Step 7 - klassOop super_klass = this_oop->super(); + Klass* super_klass = this_oop->super(); if (super_klass != NULL && !this_oop->is_interface() && Klass::cast(super_klass)->should_be_initialized()) { Klass::cast(super_klass)->initialize(THREAD); @@ -504,7 +738,7 @@ this_oop->set_initialization_state_and_notify(initialization_error, THREAD); // Locks object, set state, and notify all waiting threads CLEAR_PENDING_EXCEPTION; // ignore any exception thrown, superclass initialization error is thrown below } - DTRACE_CLASSINIT_PROBE_WAIT(super__failed, instanceKlass::cast(this_oop()), -1,wait); + DTRACE_CLASSINIT_PROBE_WAIT(super__failed, InstanceKlass::cast(this_oop()), -1,wait); THROW_OOP(e()); } } @@ -513,7 +747,7 @@ { assert(THREAD->is_Java_thread(), "non-JavaThread in initialize_impl"); JavaThread* jt = (JavaThread*)THREAD; - DTRACE_CLASSINIT_PROBE_WAIT(clinit, instanceKlass::cast(this_oop()), -1,wait); + DTRACE_CLASSINIT_PROBE_WAIT(clinit, InstanceKlass::cast(this_oop()), -1,wait); // Timer includes any side effects of class initialization (resolution, // etc), but not recursive entry into call_class_initializer(). PerfClassTraceTime timer(ClassLoader::perf_class_init_time(), @@ -541,7 +775,7 @@ this_oop->set_initialization_state_and_notify(initialization_error, THREAD); CLEAR_PENDING_EXCEPTION; // ignore any exception thrown, class initialization error is thrown below } - DTRACE_CLASSINIT_PROBE_WAIT(error, instanceKlass::cast(this_oop()), -1,wait); + DTRACE_CLASSINIT_PROBE_WAIT(error, InstanceKlass::cast(this_oop()), -1,wait); if (e->is_a(SystemDictionary::Error_klass())) { THROW_OOP(e()); } else { @@ -551,108 +785,116 @@ &args); } } - DTRACE_CLASSINIT_PROBE_WAIT(end, instanceKlass::cast(this_oop()), -1,wait); + DTRACE_CLASSINIT_PROBE_WAIT(end, InstanceKlass::cast(this_oop()), -1,wait); } // Note: implementation moved to static method to expose the this pointer. -void instanceKlass::set_initialization_state_and_notify(ClassState state, TRAPS) { - instanceKlassHandle kh(THREAD, this->as_klassOop()); +void InstanceKlass::set_initialization_state_and_notify(ClassState state, TRAPS) { + instanceKlassHandle kh(THREAD, this); set_initialization_state_and_notify_impl(kh, state, CHECK); } -void instanceKlass::set_initialization_state_and_notify_impl(instanceKlassHandle this_oop, ClassState state, TRAPS) { - ObjectLocker ol(this_oop, THREAD); +void InstanceKlass::set_initialization_state_and_notify_impl(instanceKlassHandle this_oop, ClassState state, TRAPS) { + volatile oop init_lock = this_oop->init_lock(); + ObjectLocker ol(init_lock, THREAD, init_lock != NULL); this_oop->set_init_state(state); + this_oop->fence_and_clear_init_lock(); ol.notify_all(CHECK); } // The embedded _implementor field can only record one implementor. // When there are more than one implementors, the _implementor field -// is set to the interface klassOop itself. Following are the possible +// is set to the interface Klass* itself. Following are the possible // values for the _implementor field: // NULL - no implementor -// implementor klassOop - one implementor +// implementor Klass* - one implementor // self - more than one implementor // // The _implementor field only exists for interfaces. -void instanceKlass::add_implementor(klassOop k) { +void InstanceKlass::add_implementor(Klass* k) { assert(Compile_lock->owned_by_self(), ""); assert(is_interface(), "not interface"); // Filter out my subinterfaces. // (Note: Interfaces are never on the subklass list.) - if (instanceKlass::cast(k)->is_interface()) return; + if (InstanceKlass::cast(k)->is_interface()) return; // Filter out subclasses whose supers already implement me. // (Note: CHA must walk subclasses of direct implementors // in order to locate indirect implementors.) - klassOop sk = instanceKlass::cast(k)->super(); - if (sk != NULL && instanceKlass::cast(sk)->implements_interface(as_klassOop())) + Klass* sk = InstanceKlass::cast(k)->super(); + if (sk != NULL && InstanceKlass::cast(sk)->implements_interface(this)) // We only need to check one immediate superclass, since the // implements_interface query looks at transitive_interfaces. // Any supers of the super have the same (or fewer) transitive_interfaces. return; - klassOop ik = implementor(); + Klass* ik = implementor(); if (ik == NULL) { set_implementor(k); - } else if (ik != this->as_klassOop()) { + } else if (ik != this) { // There is already an implementor. Use itself as an indicator of // more than one implementors. - set_implementor(this->as_klassOop()); + set_implementor(this); } // The implementor also implements the transitive_interfaces for (int index = 0; index < local_interfaces()->length(); index++) { - instanceKlass::cast(klassOop(local_interfaces()->obj_at(index)))->add_implementor(k); + InstanceKlass::cast(local_interfaces()->at(index))->add_implementor(k); } } -void instanceKlass::init_implementor() { +void InstanceKlass::init_implementor() { if (is_interface()) { set_implementor(NULL); } } -void instanceKlass::process_interfaces(Thread *thread) { +void InstanceKlass::process_interfaces(Thread *thread) { // link this class into the implementors list of every interface it implements - KlassHandle this_as_oop (thread, this->as_klassOop()); + Klass* this_as_klass_oop = this; for (int i = local_interfaces()->length() - 1; i >= 0; i--) { - assert(local_interfaces()->obj_at(i)->is_klass(), "must be a klass"); - instanceKlass* interf = instanceKlass::cast(klassOop(local_interfaces()->obj_at(i))); + assert(local_interfaces()->at(i)->is_klass(), "must be a klass"); + InstanceKlass* interf = InstanceKlass::cast(local_interfaces()->at(i)); assert(interf->is_interface(), "expected interface"); - interf->add_implementor(this_as_oop()); + interf->add_implementor(this_as_klass_oop); } } -bool instanceKlass::can_be_primary_super_slow() const { +bool InstanceKlass::can_be_primary_super_slow() const { if (is_interface()) return false; else return Klass::can_be_primary_super_slow(); } -objArrayOop instanceKlass::compute_secondary_supers(int num_extra_slots, TRAPS) { +GrowableArray* InstanceKlass::compute_secondary_supers(int num_extra_slots) { // The secondaries are the implemented interfaces. - instanceKlass* ik = instanceKlass::cast(as_klassOop()); - objArrayHandle interfaces (THREAD, ik->transitive_interfaces()); + InstanceKlass* ik = InstanceKlass::cast(this); + Array* interfaces = ik->transitive_interfaces(); int num_secondaries = num_extra_slots + interfaces->length(); if (num_secondaries == 0) { - return Universe::the_empty_system_obj_array(); + // Must share this for correct bootstrapping! + set_secondary_supers(Universe::the_empty_klass_array()); + return NULL; } else if (num_extra_slots == 0) { - return interfaces(); + // The secondary super list is exactly the same as the transitive interfaces. + // Redefine classes has to be careful not to delete this! + set_secondary_supers(interfaces); + return NULL; } else { - // a mix of both - objArrayOop secondaries = oopFactory::new_system_objArray(num_secondaries, CHECK_NULL); + // Copy transitive interfaces to a temporary growable array to be constructed + // into the secondary super list with extra slots. + GrowableArray* secondaries = new GrowableArray(interfaces->length()); for (int i = 0; i < interfaces->length(); i++) { - secondaries->obj_at_put(num_extra_slots+i, interfaces->obj_at(i)); + secondaries->push(interfaces->at(i)); } return secondaries; } } -bool instanceKlass::compute_is_subtype_of(klassOop k) { +bool InstanceKlass::compute_is_subtype_of(Klass* k) { if (Klass::cast(k)->is_interface()) { return implements_interface(k); } else { @@ -660,18 +902,18 @@ } } -bool instanceKlass::implements_interface(klassOop k) const { - if (as_klassOop() == k) return true; +bool InstanceKlass::implements_interface(Klass* k) const { + if (this == k) return true; assert(Klass::cast(k)->is_interface(), "should be an interface class"); for (int i = 0; i < transitive_interfaces()->length(); i++) { - if (transitive_interfaces()->obj_at(i) == k) { + if (transitive_interfaces()->at(i) == k) { return true; } } return false; } -objArrayOop instanceKlass::allocate_objArray(int n, int length, TRAPS) { +objArrayOop InstanceKlass::allocate_objArray(int n, int length, TRAPS) { if (length < 0) THROW_0(vmSymbols::java_lang_NegativeArraySizeException()); if (length > arrayOopDesc::max_array_length(T_OBJECT)) { report_java_out_of_memory("Requested array size exceeds VM limit"); @@ -679,14 +921,14 @@ THROW_OOP_0(Universe::out_of_memory_error_array_size()); } int size = objArrayOopDesc::object_size(length); - klassOop ak = array_klass(n, CHECK_NULL); + Klass* ak = array_klass(n, CHECK_NULL); KlassHandle h_ak (THREAD, ak); objArrayOop o = (objArrayOop)CollectedHeap::array_allocate(h_ak, size, length, CHECK_NULL); return o; } -instanceOop instanceKlass::register_finalizer(instanceOop i, TRAPS) { +instanceOop InstanceKlass::register_finalizer(instanceOop i, TRAPS) { if (TraceFinalizerRegistration) { tty->print("Registered "); i->print_value_on(tty); @@ -701,12 +943,11 @@ return h_i(); } -instanceOop instanceKlass::allocate_instance(TRAPS) { - assert(!oop_is_instanceMirror(), "wrong allocation path"); +instanceOop InstanceKlass::allocate_instance(TRAPS) { bool has_finalizer_flag = has_finalizer(); // Query before possible GC int size = size_helper(); // Query before forming handle. - KlassHandle h_k(THREAD, as_klassOop()); + KlassHandle h_k(THREAD, this); instanceOop i; @@ -717,39 +958,25 @@ return i; } -instanceOop instanceKlass::allocate_permanent_instance(TRAPS) { - // Finalizer registration occurs in the Object. constructor - // and constructors normally aren't run when allocating perm - // instances so simply disallow finalizable perm objects. This can - // be relaxed if a need for it is found. - assert(!has_finalizer(), "perm objects not allowed to have finalizers"); - assert(!oop_is_instanceMirror(), "wrong allocation path"); - int size = size_helper(); // Query before forming handle. - KlassHandle h_k(THREAD, as_klassOop()); - instanceOop i = (instanceOop) - CollectedHeap::permanent_obj_allocate(h_k, size, CHECK_NULL); - return i; -} - -void instanceKlass::check_valid_for_instantiation(bool throwError, TRAPS) { +void InstanceKlass::check_valid_for_instantiation(bool throwError, TRAPS) { if (is_interface() || is_abstract()) { ResourceMark rm(THREAD); THROW_MSG(throwError ? vmSymbols::java_lang_InstantiationError() : vmSymbols::java_lang_InstantiationException(), external_name()); } - if (as_klassOop() == SystemDictionary::Class_klass()) { + if (this == SystemDictionary::Class_klass()) { ResourceMark rm(THREAD); THROW_MSG(throwError ? vmSymbols::java_lang_IllegalAccessError() : vmSymbols::java_lang_IllegalAccessException(), external_name()); } } -klassOop instanceKlass::array_klass_impl(bool or_null, int n, TRAPS) { - instanceKlassHandle this_oop(THREAD, as_klassOop()); +Klass* InstanceKlass::array_klass_impl(bool or_null, int n, TRAPS) { + instanceKlassHandle this_oop(THREAD, this); return array_klass_impl(this_oop, or_null, n, THREAD); } -klassOop instanceKlass::array_klass_impl(instanceKlassHandle this_oop, bool or_null, int n, TRAPS) { +Klass* InstanceKlass::array_klass_impl(instanceKlassHandle this_oop, bool or_null, int n, TRAPS) { if (this_oop->array_klasses() == NULL) { if (or_null) return NULL; @@ -762,35 +989,32 @@ // Check if update has already taken place if (this_oop->array_klasses() == NULL) { - objArrayKlassKlass* oakk = - (objArrayKlassKlass*)Universe::objArrayKlassKlassObj()->klass_part(); - - klassOop k = oakk->allocate_objArray_klass(1, this_oop, CHECK_NULL); + Klass* k = objArrayKlass::allocate_objArray_klass(this_oop->class_loader_data(), 1, this_oop, CHECK_NULL); this_oop->set_array_klasses(k); } } } // _this will always be set at this point - objArrayKlass* oak = (objArrayKlass*)this_oop->array_klasses()->klass_part(); + objArrayKlass* oak = (objArrayKlass*)this_oop->array_klasses(); if (or_null) { return oak->array_klass_or_null(n); } return oak->array_klass(n, CHECK_NULL); } -klassOop instanceKlass::array_klass_impl(bool or_null, TRAPS) { +Klass* InstanceKlass::array_klass_impl(bool or_null, TRAPS) { return array_klass_impl(or_null, 1, THREAD); } -void instanceKlass::call_class_initializer(TRAPS) { - instanceKlassHandle ik (THREAD, as_klassOop()); +void InstanceKlass::call_class_initializer(TRAPS) { + instanceKlassHandle ik (THREAD, this); call_class_initializer_impl(ik, THREAD); } static int call_class_initializer_impl_counter = 0; // for debugging -methodOop instanceKlass::class_initializer() { - methodOop clinit = find_method( +Method* InstanceKlass::class_initializer() { + Method* clinit = find_method( vmSymbols::class_initializer_name(), vmSymbols::void_method_signature()); if (clinit != NULL && clinit->has_valid_initializer_flags()) { return clinit; @@ -798,7 +1022,7 @@ return NULL; } -void instanceKlass::call_class_initializer_impl(instanceKlassHandle this_oop, TRAPS) { +void InstanceKlass::call_class_initializer_impl(instanceKlassHandle this_oop, TRAPS) { methodHandle h_method(THREAD, this_oop->class_initializer()); assert(!this_oop->is_initialized(), "we cannot initialize twice"); if (TraceClassInitialization) { @@ -814,7 +1038,7 @@ } -void instanceKlass::mask_for(methodHandle method, int bci, +void InstanceKlass::mask_for(methodHandle method, int bci, InterpreterOopMap* entry_for) { // Dirty read, then double-check under a lock. if (_oop_map_cache == NULL) { @@ -830,12 +1054,12 @@ } -bool instanceKlass::find_local_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const { - for (JavaFieldStream fs(as_klassOop()); !fs.done(); fs.next()) { +bool InstanceKlass::find_local_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const { + for (JavaFieldStream fs(this); !fs.done(); fs.next()) { Symbol* f_name = fs.name(); Symbol* f_sig = fs.signature(); if (f_name == name && f_sig == sig) { - fd->initialize(as_klassOop(), fs.index()); + fd->initialize(const_cast(this), fs.index()); return true; } } @@ -843,32 +1067,18 @@ } -void instanceKlass::shared_symbols_iterate(SymbolClosure* closure) { - Klass::shared_symbols_iterate(closure); - closure->do_symbol(&_generic_signature); - closure->do_symbol(&_source_file_name); - - for (JavaFieldStream fs(this); !fs.done(); fs.next()) { - int name_index = fs.name_index(); - closure->do_symbol(constants()->symbol_at_addr(name_index)); - int sig_index = fs.signature_index(); - closure->do_symbol(constants()->symbol_at_addr(sig_index)); - } -} - - -klassOop instanceKlass::find_interface_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const { +Klass* InstanceKlass::find_interface_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const { const int n = local_interfaces()->length(); for (int i = 0; i < n; i++) { - klassOop intf1 = klassOop(local_interfaces()->obj_at(i)); + Klass* intf1 = local_interfaces()->at(i); assert(Klass::cast(intf1)->is_interface(), "just checking type"); // search for field in current interface - if (instanceKlass::cast(intf1)->find_local_field(name, sig, fd)) { + if (InstanceKlass::cast(intf1)->find_local_field(name, sig, fd)) { assert(fd->is_static(), "interface field must be static"); return intf1; } // search for field in direct superinterfaces - klassOop intf2 = instanceKlass::cast(intf1)->find_interface_field(name, sig, fd); + Klass* intf2 = InstanceKlass::cast(intf1)->find_interface_field(name, sig, fd); if (intf2 != NULL) return intf2; } // otherwise field lookup fails @@ -876,49 +1086,49 @@ } -klassOop instanceKlass::find_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const { +Klass* InstanceKlass::find_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const { // search order according to newest JVM spec (5.4.3.2, p.167). // 1) search for field in current klass if (find_local_field(name, sig, fd)) { - return as_klassOop(); + return const_cast(this); } // 2) search for field recursively in direct superinterfaces - { klassOop intf = find_interface_field(name, sig, fd); + { Klass* intf = find_interface_field(name, sig, fd); if (intf != NULL) return intf; } // 3) apply field lookup recursively if superclass exists - { klassOop supr = super(); - if (supr != NULL) return instanceKlass::cast(supr)->find_field(name, sig, fd); + { Klass* supr = super(); + if (supr != NULL) return InstanceKlass::cast(supr)->find_field(name, sig, fd); } // 4) otherwise field lookup fails return NULL; } -klassOop instanceKlass::find_field(Symbol* name, Symbol* sig, bool is_static, fieldDescriptor* fd) const { +Klass* InstanceKlass::find_field(Symbol* name, Symbol* sig, bool is_static, fieldDescriptor* fd) const { // search order according to newest JVM spec (5.4.3.2, p.167). // 1) search for field in current klass if (find_local_field(name, sig, fd)) { - if (fd->is_static() == is_static) return as_klassOop(); + if (fd->is_static() == is_static) return const_cast(this); } // 2) search for field recursively in direct superinterfaces if (is_static) { - klassOop intf = find_interface_field(name, sig, fd); + Klass* intf = find_interface_field(name, sig, fd); if (intf != NULL) return intf; } // 3) apply field lookup recursively if superclass exists - { klassOop supr = super(); - if (supr != NULL) return instanceKlass::cast(supr)->find_field(name, sig, is_static, fd); + { Klass* supr = super(); + if (supr != NULL) return InstanceKlass::cast(supr)->find_field(name, sig, is_static, fd); } // 4) otherwise field lookup fails return NULL; } -bool instanceKlass::find_local_field_from_offset(int offset, bool is_static, fieldDescriptor* fd) const { - for (JavaFieldStream fs(as_klassOop()); !fs.done(); fs.next()) { +bool InstanceKlass::find_local_field_from_offset(int offset, bool is_static, fieldDescriptor* fd) const { + for (JavaFieldStream fs(this); !fs.done(); fs.next()) { if (fs.offset() == offset) { - fd->initialize(as_klassOop(), fs.index()); + fd->initialize(const_cast(this), fs.index()); if (fd->is_static() == is_static) return true; } } @@ -926,10 +1136,10 @@ } -bool instanceKlass::find_field_from_offset(int offset, bool is_static, fieldDescriptor* fd) const { - klassOop klass = as_klassOop(); +bool InstanceKlass::find_field_from_offset(int offset, bool is_static, fieldDescriptor* fd) const { + Klass* klass = const_cast(this); while (klass != NULL) { - if (instanceKlass::cast(klass)->find_local_field_from_offset(offset, is_static, fd)) { + if (InstanceKlass::cast(klass)->find_local_field_from_offset(offset, is_static, fd)) { return true; } klass = Klass::cast(klass)->super(); @@ -938,34 +1148,34 @@ } -void instanceKlass::methods_do(void f(methodOop method)) { +void InstanceKlass::methods_do(void f(Method* method)) { int len = methods()->length(); for (int index = 0; index < len; index++) { - methodOop m = methodOop(methods()->obj_at(index)); + Method* m = methods()->at(index); assert(m->is_method(), "must be method"); f(m); } } -void instanceKlass::do_local_static_fields(FieldClosure* cl) { +void InstanceKlass::do_local_static_fields(FieldClosure* cl) { for (JavaFieldStream fs(this); !fs.done(); fs.next()) { if (fs.access_flags().is_static()) { fieldDescriptor fd; - fd.initialize(as_klassOop(), fs.index()); + fd.initialize(this, fs.index()); cl->do_field(&fd); } } } -void instanceKlass::do_local_static_fields(void f(fieldDescriptor*, TRAPS), TRAPS) { - instanceKlassHandle h_this(THREAD, as_klassOop()); +void InstanceKlass::do_local_static_fields(void f(fieldDescriptor*, TRAPS), TRAPS) { + instanceKlassHandle h_this(THREAD, this); do_local_static_fields_impl(h_this, f, CHECK); } -void instanceKlass::do_local_static_fields_impl(instanceKlassHandle this_oop, void f(fieldDescriptor* fd, TRAPS), TRAPS) { +void InstanceKlass::do_local_static_fields_impl(instanceKlassHandle this_oop, void f(fieldDescriptor* fd, TRAPS), TRAPS) { for (JavaFieldStream fs(this_oop()); !fs.done(); fs.next()) { if (fs.access_flags().is_static()) { fieldDescriptor fd; @@ -980,8 +1190,8 @@ return a[0] - b[0]; } -void instanceKlass::do_nonstatic_fields(FieldClosure* cl) { - instanceKlass* super = superklass(); +void InstanceKlass::do_nonstatic_fields(FieldClosure* cl) { + InstanceKlass* super = superklass(); if (super != NULL) { super->do_nonstatic_fields(cl); } @@ -991,7 +1201,7 @@ int* fields_sorted = NEW_C_HEAP_ARRAY(int, 2*(length+1), mtClass); int j = 0; for (int i = 0; i < length; i += 1) { - fd.initialize(as_klassOop(), i); + fd.initialize(this, i); if (!fd.is_static()) { fields_sorted[j + 0] = fd.offset(); fields_sorted[j + 1] = i; @@ -1003,7 +1213,7 @@ // _sort_Fn is defined in growableArray.hpp. qsort(fields_sorted, length/2, 2*sizeof(int), (_sort_Fn)compare_fields_by_offset); for (int i = 0; i < length; i += 2) { - fd.initialize(as_klassOop(), fields_sorted[i + 1]); + fd.initialize(this, fields_sorted[i + 1]); assert(!fd.is_static() && fd.offset() == fields_sorted[i], "only nonstatic fields"); cl->do_field(&fd); } @@ -1012,22 +1222,27 @@ } -void instanceKlass::array_klasses_do(void f(klassOop k)) { +void InstanceKlass::array_klasses_do(void f(Klass* k, TRAPS), TRAPS) { + if (array_klasses() != NULL) + arrayKlass::cast(array_klasses())->array_klasses_do(f, THREAD); +} + +void InstanceKlass::array_klasses_do(void f(Klass* k)) { if (array_klasses() != NULL) arrayKlass::cast(array_klasses())->array_klasses_do(f); } -void instanceKlass::with_array_klasses_do(void f(klassOop k)) { - f(as_klassOop()); +void InstanceKlass::with_array_klasses_do(void f(Klass* k)) { + f(this); array_klasses_do(f); } #ifdef ASSERT -static int linear_search(objArrayOop methods, Symbol* name, Symbol* signature) { +static int linear_search(Array* methods, Symbol* name, Symbol* signature) { int len = methods->length(); for (int index = 0; index < len; index++) { - methodOop m = (methodOop)(methods->obj_at(index)); + Method* m = methods->at(index); assert(m->is_method(), "must be method"); if (m->signature() == signature && m->name() == name) { return index; @@ -1037,18 +1252,18 @@ } #endif -methodOop instanceKlass::find_method(Symbol* name, Symbol* signature) const { - return instanceKlass::find_method(methods(), name, signature); +Method* InstanceKlass::find_method(Symbol* name, Symbol* signature) const { + return InstanceKlass::find_method(methods(), name, signature); } -methodOop instanceKlass::find_method(objArrayOop methods, Symbol* name, Symbol* signature) { +Method* InstanceKlass::find_method(Array* methods, Symbol* name, Symbol* signature) { int len = methods->length(); // methods are sorted, so do binary search int l = 0; int h = len - 1; while (l <= h) { int mid = (l + h) >> 1; - methodOop m = (methodOop)methods->obj_at(mid); + Method* m = methods->at(mid); assert(m->is_method(), "must be method"); int res = m->name()->fast_compare(name); if (res == 0) { @@ -1058,14 +1273,14 @@ // search downwards through overloaded methods int i; for (i = mid - 1; i >= l; i--) { - methodOop m = (methodOop)methods->obj_at(i); + Method* m = methods->at(i); assert(m->is_method(), "must be method"); if (m->name() != name) break; if (m->signature() == signature) return m; } // search upwards for (i = mid + 1; i <= h; i++) { - methodOop m = (methodOop)methods->obj_at(i); + Method* m = methods->at(i); assert(m->is_method(), "must be method"); if (m->name() != name) break; if (m->signature() == signature) return m; @@ -1089,25 +1304,25 @@ return NULL; } -methodOop instanceKlass::uncached_lookup_method(Symbol* name, Symbol* signature) const { - klassOop klass = as_klassOop(); +Method* InstanceKlass::uncached_lookup_method(Symbol* name, Symbol* signature) const { + Klass* klass = const_cast(this); while (klass != NULL) { - methodOop method = instanceKlass::cast(klass)->find_method(name, signature); + Method* method = InstanceKlass::cast(klass)->find_method(name, signature); if (method != NULL) return method; - klass = instanceKlass::cast(klass)->super(); + klass = InstanceKlass::cast(klass)->super(); } return NULL; } // lookup a method in all the interfaces that this class implements -methodOop instanceKlass::lookup_method_in_all_interfaces(Symbol* name, +Method* InstanceKlass::lookup_method_in_all_interfaces(Symbol* name, Symbol* signature) const { - objArrayOop all_ifs = instanceKlass::cast(as_klassOop())->transitive_interfaces(); + Array* all_ifs = transitive_interfaces(); int num_ifs = all_ifs->length(); - instanceKlass *ik = NULL; + InstanceKlass *ik = NULL; for (int i = 0; i < num_ifs; i++) { - ik = instanceKlass::cast(klassOop(all_ifs->obj_at(i))); - methodOop m = ik->lookup_method(name, signature); + ik = InstanceKlass::cast(all_ifs->at(i)); + Method* m = ik->lookup_method(name, signature); if (m != NULL) { return m; } @@ -1116,13 +1331,13 @@ } /* jni_id_for_impl for jfieldIds only */ -JNIid* instanceKlass::jni_id_for_impl(instanceKlassHandle this_oop, int offset) { +JNIid* InstanceKlass::jni_id_for_impl(instanceKlassHandle this_oop, int offset) { MutexLocker ml(JfieldIdCreation_lock); // Retry lookup after we got the lock JNIid* probe = this_oop->jni_ids() == NULL ? NULL : this_oop->jni_ids()->find(offset); if (probe == NULL) { // Slow case, allocate new static field identifier - probe = new JNIid(this_oop->as_klassOop(), offset, this_oop->jni_ids()); + probe = new JNIid(this_oop(), offset, this_oop->jni_ids()); this_oop->set_jni_ids(probe); } return probe; @@ -1130,16 +1345,16 @@ /* jni_id_for for jfieldIds only */ -JNIid* instanceKlass::jni_id_for(int offset) { +JNIid* InstanceKlass::jni_id_for(int offset) { JNIid* probe = jni_ids() == NULL ? NULL : jni_ids()->find(offset); if (probe == NULL) { - probe = jni_id_for_impl(this->as_klassOop(), offset); + probe = jni_id_for_impl(this, offset); } return probe; } -u2 instanceKlass::enclosing_method_data(int offset) { - typeArrayOop inner_class_list = inner_classes(); +u2 InstanceKlass::enclosing_method_data(int offset) { + Array* inner_class_list = inner_classes(); if (inner_class_list == NULL) { return 0; } @@ -1148,23 +1363,21 @@ return 0; } else { int index = length - enclosing_method_attribute_size; - typeArrayHandle inner_class_list_h(inner_class_list); assert(offset < enclosing_method_attribute_size, "invalid offset"); - return inner_class_list_h->ushort_at(index + offset); + return inner_class_list->at(index + offset); } } -void instanceKlass::set_enclosing_method_indices(u2 class_index, +void InstanceKlass::set_enclosing_method_indices(u2 class_index, u2 method_index) { - typeArrayOop inner_class_list = inner_classes(); + Array* inner_class_list = inner_classes(); assert (inner_class_list != NULL, "_inner_classes list is not set up"); int length = inner_class_list->length(); if (length % inner_class_next_offset == enclosing_method_attribute_size) { int index = length - enclosing_method_attribute_size; - typeArrayHandle inner_class_list_h(inner_class_list); - inner_class_list_h->ushort_at_put( + inner_class_list->at_put( index + enclosing_method_class_index_offset, class_index); - inner_class_list_h->ushort_at_put( + inner_class_list->at_put( index + enclosing_method_method_index_offset, method_index); } } @@ -1174,7 +1387,7 @@ // locking has to be done very carefully to avoid deadlocks // and/or other cache consistency problems. // -jmethodID instanceKlass::get_jmethod_id(instanceKlassHandle ik_h, methodHandle method_h) { +jmethodID InstanceKlass::get_jmethod_id(instanceKlassHandle ik_h, methodHandle method_h) { size_t idnum = (size_t)method_h->method_idnum(); jmethodID* jmeths = ik_h->methods_jmethod_ids_acquire(); size_t length = 0; @@ -1245,14 +1458,13 @@ jmethodID new_id = NULL; if (method_h->is_old() && !method_h->is_obsolete()) { // The method passed in is old (but not obsolete), we need to use the current version - methodOop current_method = ik_h->method_with_idnum((int)idnum); + Method* current_method = ik_h->method_with_idnum((int)idnum); assert(current_method != NULL, "old and but not obsolete, so should exist"); - methodHandle current_method_h(current_method == NULL? method_h() : current_method); - new_id = JNIHandles::make_jmethod_id(current_method_h); + new_id = Method::make_jmethod_id(ik_h->class_loader_data(), current_method); } else { // It is the current version of the method or an obsolete method, // use the version passed in - new_id = JNIHandles::make_jmethod_id(method_h); + new_id = Method::make_jmethod_id(ik_h->class_loader_data(), method_h()); } if (Threads::number_of_threads() == 0 || @@ -1273,7 +1485,7 @@ } // free up the new ID since it wasn't needed if (to_dealloc_id != NULL) { - JNIHandles::destroy_jmethod_id(to_dealloc_id); + Method::destroy_jmethod_id(ik_h->class_loader_data(), to_dealloc_id); } } return id; @@ -1285,7 +1497,7 @@ // that causes the caller to go to a safepoint or we can deadlock with // the VMThread or have cache consistency issues. // -jmethodID instanceKlass::get_jmethod_id_fetch_or_update( +jmethodID InstanceKlass::get_jmethod_id_fetch_or_update( instanceKlassHandle ik_h, size_t idnum, jmethodID new_id, jmethodID* new_jmeths, jmethodID* to_dealloc_id_p, jmethodID** to_dealloc_jmeths_p) { @@ -1337,7 +1549,7 @@ // Common code to get the jmethodID cache length and the jmethodID // value at index idnum if there is one. // -void instanceKlass::get_jmethod_id_length_value(jmethodID* cache, +void InstanceKlass::get_jmethod_id_length_value(jmethodID* cache, size_t idnum, size_t *length_p, jmethodID* id_p) { assert(cache != NULL, "sanity check"); assert(length_p != NULL, "sanity check"); @@ -1354,7 +1566,7 @@ // Lookup a jmethodID, NULL if not found. Do no blocking, no allocations, no handles -jmethodID instanceKlass::jmethod_id_or_null(methodOop method) { +jmethodID InstanceKlass::jmethod_id_or_null(Method* method) { size_t idnum = (size_t)method->method_idnum(); jmethodID* jmeths = methods_jmethod_ids_acquire(); size_t length; // length assigned as debugging crumb @@ -1368,7 +1580,7 @@ // Cache an itable index -void instanceKlass::set_cached_itable_index(size_t idnum, int index) { +void InstanceKlass::set_cached_itable_index(size_t idnum, int index) { int* indices = methods_cached_itable_indices_acquire(); int* to_dealloc_indices = NULL; @@ -1438,7 +1650,7 @@ // Retrieve a cached itable index -int instanceKlass::cached_itable_index(size_t idnum) { +int InstanceKlass::cached_itable_index(size_t idnum) { int* indices = methods_cached_itable_indices_acquire(); if (indices != NULL && ((size_t)indices[0]) > idnum) { // indices exist and are long enough, retrieve possible cached @@ -1453,7 +1665,7 @@ // are dependent on the changes that were passed in and mark them for // deoptimization. Returns the number of nmethods found. // -int instanceKlass::mark_dependent_nmethods(DepChange& changes) { +int InstanceKlass::mark_dependent_nmethods(DepChange& changes) { assert_locked_or_safepoint(CodeCache_lock); int found = 0; nmethodBucket* b = _dependencies; @@ -1485,7 +1697,7 @@ // so a count is kept for each bucket to guarantee that creation and // deletion of dependencies is consistent. // -void instanceKlass::add_dependent_nmethod(nmethod* nm) { +void InstanceKlass::add_dependent_nmethod(nmethod* nm) { assert_locked_or_safepoint(CodeCache_lock); nmethodBucket* b = _dependencies; nmethodBucket* last = NULL; @@ -1506,7 +1718,7 @@ // find a corresponding bucket otherwise there's a bug in the // recording of dependecies. // -void instanceKlass::remove_dependent_nmethod(nmethod* nm) { +void InstanceKlass::remove_dependent_nmethod(nmethod* nm) { assert_locked_or_safepoint(CodeCache_lock); nmethodBucket* b = _dependencies; nmethodBucket* last = NULL; @@ -1534,7 +1746,7 @@ #ifndef PRODUCT -void instanceKlass::print_dependent_nmethods(bool verbose) { +void InstanceKlass::print_dependent_nmethods(bool verbose) { nmethodBucket* b = _dependencies; int idx = 0; while (b != NULL) { @@ -1553,7 +1765,7 @@ } -bool instanceKlass::is_dependent_nmethod(nmethod* nm) { +bool InstanceKlass::is_dependent_nmethod(nmethod* nm) { nmethodBucket* b = _dependencies; while (b != NULL) { if (nm == b->get_nmethod()) { @@ -1566,6 +1778,18 @@ #endif //PRODUCT +// Garbage collection + +void InstanceKlass::oops_do(OopClosure* cl) { + Klass::oops_do(cl); + + cl->do_oop(adr_protection_domain()); + cl->do_oop(adr_signers()); + cl->do_oop(adr_init_lock()); + + // Don't walk the arrays since they are walked from the ClassLoaderData objects. +} + #ifdef ASSERT template void assert_is_in(T *p) { T heap_oop = oopDesc::load_heap_oop(p); @@ -1578,7 +1802,8 @@ T heap_oop = oopDesc::load_heap_oop(p); if (!oopDesc::is_null(heap_oop)) { oop o = oopDesc::decode_heap_oop_not_null(heap_oop); - assert(Universe::heap()->is_in_closed_subset(o), "should be in closed"); + assert(Universe::heap()->is_in_closed_subset(o), + err_msg("should be in closed *p " INTPTR_FORMAT " " INTPTR_FORMAT, (address)p, (address)o)); } } template void assert_is_in_reserved(T *p) { @@ -1732,9 +1957,9 @@ } \ } -void instanceKlass::oop_follow_contents(oop obj) { +void InstanceKlass::oop_follow_contents(oop obj) { assert(obj != NULL, "can't follow the content of NULL object"); - obj->follow_header(); + MarkSweep::follow_klass(obj->klass()); InstanceKlass_OOP_MAP_ITERATE( \ obj, \ MarkSweep::mark_and_push(p), \ @@ -1742,10 +1967,12 @@ } #ifndef SERIALGC -void instanceKlass::oop_follow_contents(ParCompactionManager* cm, +void InstanceKlass::oop_follow_contents(ParCompactionManager* cm, oop obj) { assert(obj != NULL, "can't follow the content of NULL object"); - obj->follow_header(cm); + PSParallelCompact::follow_klass(cm, obj->klass()); + // Only mark the header and let the scan of the meta-data mark + // everything else. InstanceKlass_OOP_MAP_ITERATE( \ obj, \ PSParallelCompact::mark_and_push(cm, p), \ @@ -1753,16 +1980,22 @@ } #endif // SERIALGC -// closure's do_header() method dicates whether the given closure should be +// closure's do_metadata() method dictates whether the given closure should be // applied to the klass ptr in the object header. +#define if_do_metadata_checked(closure, nv_suffix) \ + /* Make sure the non-virtual and the virtual versions match. */ \ + assert(closure->do_metadata##nv_suffix() == closure->do_metadata(), \ + "Inconsistency in do_metadata"); \ + if (closure->do_metadata##nv_suffix()) + #define InstanceKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ \ -int instanceKlass::oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) { \ +int InstanceKlass::oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) { \ SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::ik);\ /* header */ \ - if (closure->do_header()) { \ - obj->oop_iterate_header(closure); \ + if_do_metadata_checked(closure, nv_suffix) { \ + closure->do_klass##nv_suffix(obj->klass()); \ } \ InstanceKlass_OOP_MAP_ITERATE( \ obj, \ @@ -1776,12 +2009,12 @@ #ifndef SERIALGC #define InstanceKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN(OopClosureType, nv_suffix) \ \ -int instanceKlass::oop_oop_iterate_backwards##nv_suffix(oop obj, \ +int InstanceKlass::oop_oop_iterate_backwards##nv_suffix(oop obj, \ OopClosureType* closure) { \ SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::ik); \ /* header */ \ - if (closure->do_header()) { \ - obj->oop_iterate_header(closure); \ + if_do_metadata_checked(closure, nv_suffix) { \ + closure->do_klass##nv_suffix(obj->klass()); \ } \ /* instance variables */ \ InstanceKlass_OOP_MAP_REVERSE_ITERATE( \ @@ -1795,12 +2028,14 @@ #define InstanceKlass_OOP_OOP_ITERATE_DEFN_m(OopClosureType, nv_suffix) \ \ -int instanceKlass::oop_oop_iterate##nv_suffix##_m(oop obj, \ +int InstanceKlass::oop_oop_iterate##nv_suffix##_m(oop obj, \ OopClosureType* closure, \ MemRegion mr) { \ SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::ik);\ - if (closure->do_header()) { \ - obj->oop_iterate_header(closure, mr); \ + if_do_metadata_checked(closure, nv_suffix) { \ + if (mr.contains(obj)) { \ + closure->do_klass##nv_suffix(obj->klass()); \ + } \ } \ InstanceKlass_BOUNDED_OOP_MAP_ITERATE( \ obj, mr.start(), mr.end(), \ @@ -1818,18 +2053,18 @@ ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN) #endif // !SERIALGC -int instanceKlass::oop_adjust_pointers(oop obj) { +int InstanceKlass::oop_adjust_pointers(oop obj) { int size = size_helper(); InstanceKlass_OOP_MAP_ITERATE( \ obj, \ MarkSweep::adjust_pointer(p), \ assert_is_in) - obj->adjust_header(); + MarkSweep::adjust_klass(obj->klass()); return size; } #ifndef SERIALGC -void instanceKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { +void InstanceKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { InstanceKlass_OOP_MAP_REVERSE_ITERATE( \ obj, \ if (PSScavenge::should_scavenge(p)) { \ @@ -1838,51 +2073,128 @@ assert_nothing ) } -int instanceKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { +int InstanceKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { + int size = size_helper(); InstanceKlass_OOP_MAP_ITERATE( \ obj, \ PSParallelCompact::adjust_pointer(p), \ - assert_nothing) - return size_helper(); + assert_is_in) + obj->update_header(cm); + return size; } #endif // SERIALGC -// This klass is alive but the implementor link is not followed/updated. -// Subklass and sibling links are handled by Klass::follow_weak_klass_links - -void instanceKlass::follow_weak_klass_links( - BoolObjectClosure* is_alive, OopClosure* keep_alive) { - assert(is_alive->do_object_b(as_klassOop()), "this oop should be live"); - +void InstanceKlass::clean_implementors_list(BoolObjectClosure* is_alive) { + assert(is_loader_alive(is_alive), "this klass should be live"); if (is_interface()) { if (ClassUnloading) { - klassOop impl = implementor(); + Klass* impl = implementor(); if (impl != NULL) { - if (!is_alive->do_object_b(impl)) { + if (!impl->is_loader_alive(is_alive)) { // remove this guy *adr_implementor() = NULL; } } - } else { - assert(adr_implementor() != NULL, "just checking"); - keep_alive->do_oop(adr_implementor()); + } + } +} + +void InstanceKlass::clean_method_data(BoolObjectClosure* is_alive) { +#ifdef COMPILER2 + // Currently only used by C2. + for (int m = 0; m < methods()->length(); m++) { + MethodData* mdo = methods()->at(m)->method_data(); + if (mdo != NULL) { + for (ProfileData* data = mdo->first_data(); + mdo->is_valid(data); + data = mdo->next_data(data)) { + data->clean_weak_klass_links(is_alive); + } } } - - Klass::follow_weak_klass_links(is_alive, keep_alive); +#else +#ifdef ASSERT + // Verify that we haven't started to use MDOs for C1. + for (int m = 0; m < methods()->length(); m++) { + MethodData* mdo = methods()->at(m)->method_data(); + assert(mdo == NULL, "Didn't expect C1 to use MDOs"); + } +#endif // ASSERT +#endif // !COMPILER2 +} + + +static void remove_unshareable_in_class(Klass* k) { + // remove klass's unshareable info + k->remove_unshareable_info(); +} + +void InstanceKlass::remove_unshareable_info() { + Klass::remove_unshareable_info(); + // Unlink the class + if (is_linked()) { + unlink_class(); + } + init_implementor(); + + constants()->remove_unshareable_info(); + + for (int i = 0; i < methods()->length(); i++) { + Method* m = methods()->at(i); + m->remove_unshareable_info(); + } + + // Need to reinstate when reading back the class. + set_init_lock(NULL); + + // do array classes also. + array_klasses_do(remove_unshareable_in_class); } -void instanceKlass::remove_unshareable_info() { - Klass::remove_unshareable_info(); - init_implementor(); +void restore_unshareable_in_class(Klass* k, TRAPS) { + k->restore_unshareable_info(CHECK); } -static void clear_all_breakpoints(methodOop m) { +void InstanceKlass::restore_unshareable_info(TRAPS) { + Klass::restore_unshareable_info(CHECK); + instanceKlassHandle ik(THREAD, this); + + Array* methods = ik->methods(); + int num_methods = methods->length(); + for (int index2 = 0; index2 < num_methods; ++index2) { + methodHandle m(THREAD, methods->at(index2)); + m()->link_method(m, CHECK); + } + if (JvmtiExport::has_redefined_a_class()) { + // Reinitialize vtable because RedefineClasses may have changed some + // entries in this vtable for super classes so the CDS vtable might + // point to old or obsolete entries. RedefineClasses doesn't fix up + // vtables in the shared system dictionary, only the main one. + // It also redefines the itable too so fix that too. + ResourceMark rm(THREAD); + ik->vtable()->initialize_vtable(false, CHECK); + ik->itable()->initialize_itable(false, CHECK); + } + + // Allocate a simple java object for a lock. + // This needs to be a java object because during class initialization + // it can be held across a java call. + typeArrayOop r = oopFactory::new_typeArray(T_INT, 0, CHECK); + Handle h(THREAD, (oop)r); + ik->set_init_lock(h()); + + // restore constant pool resolved references + ik->constants()->restore_unshareable_info(CHECK); + + ik->array_klasses_do(restore_unshareable_in_class, CHECK); +} + +static void clear_all_breakpoints(Method* m) { m->clear_all_breakpoints(); } -void instanceKlass::release_C_heap_structures() { +void InstanceKlass::release_C_heap_structures() { // Deallocate oop map cache if (_oop_map_cache != NULL) { delete _oop_map_cache; @@ -1943,18 +2255,15 @@ // class can't be referenced anymore). if (_array_name != NULL) _array_name->decrement_refcount(); if (_source_file_name != NULL) _source_file_name->decrement_refcount(); - // walk constant pool and decrement symbol reference counts - _constants->unreference_symbols(); - if (_source_debug_extension != NULL) FREE_C_HEAP_ARRAY(char, _source_debug_extension, mtClass); } -void instanceKlass::set_source_file_name(Symbol* n) { +void InstanceKlass::set_source_file_name(Symbol* n) { _source_file_name = n; if (_source_file_name != NULL) _source_file_name->increment_refcount(); } -void instanceKlass::set_source_debug_extension(char* array, int length) { +void InstanceKlass::set_source_debug_extension(char* array, int length) { if (array == NULL) { _source_debug_extension = NULL; } else { @@ -1972,12 +2281,12 @@ } } -address instanceKlass::static_field_addr(int offset) { +address InstanceKlass::static_field_addr(int offset) { return (address)(offset + instanceMirrorKlass::offset_of_static_fields() + (intptr_t)java_mirror()); } -const char* instanceKlass::signature_name() const { +const char* InstanceKlass::signature_name() const { const char* src = (const char*) (name()->as_C_string()); const int src_length = (int)strlen(src); char* dest = NEW_RESOURCE_ARRAY(char, src_length + 3); @@ -1993,9 +2302,9 @@ } // different verisons of is_same_class_package -bool instanceKlass::is_same_class_package(klassOop class2) { - klassOop class1 = as_klassOop(); - oop classloader1 = instanceKlass::cast(class1)->class_loader(); +bool InstanceKlass::is_same_class_package(Klass* class2) { + Klass* class1 = this; + oop classloader1 = InstanceKlass::cast(class1)->class_loader(); Symbol* classname1 = Klass::cast(class1)->name(); if (Klass::cast(class2)->oop_is_objArray()) { @@ -2003,29 +2312,29 @@ } oop classloader2; if (Klass::cast(class2)->oop_is_instance()) { - classloader2 = instanceKlass::cast(class2)->class_loader(); + classloader2 = InstanceKlass::cast(class2)->class_loader(); } else { assert(Klass::cast(class2)->oop_is_typeArray(), "should be type array"); classloader2 = NULL; } Symbol* classname2 = Klass::cast(class2)->name(); - return instanceKlass::is_same_class_package(classloader1, classname1, + return InstanceKlass::is_same_class_package(classloader1, classname1, classloader2, classname2); } -bool instanceKlass::is_same_class_package(oop classloader2, Symbol* classname2) { - klassOop class1 = as_klassOop(); - oop classloader1 = instanceKlass::cast(class1)->class_loader(); +bool InstanceKlass::is_same_class_package(oop classloader2, Symbol* classname2) { + Klass* class1 = this; + oop classloader1 = InstanceKlass::cast(class1)->class_loader(); Symbol* classname1 = Klass::cast(class1)->name(); - return instanceKlass::is_same_class_package(classloader1, classname1, + return InstanceKlass::is_same_class_package(classloader1, classname1, classloader2, classname2); } // return true if two classes are in the same package, classloader // and classname information is enough to determine a class's package -bool instanceKlass::is_same_class_package(oop class_loader1, Symbol* class_name1, +bool InstanceKlass::is_same_class_package(oop class_loader1, Symbol* class_name1, oop class_loader2, Symbol* class_name2) { if (class_loader1 != class_loader2) { return false; @@ -2080,9 +2389,9 @@ // Returns true iff super_method can be overridden by a method in targetclassname // See JSL 3rd edition 8.4.6.1 // Assumes name-signature match -// "this" is instanceKlass of super_method which must exist -// note that the instanceKlass of the method in the targetclassname has not always been created yet -bool instanceKlass::is_override(methodHandle super_method, Handle targetclassloader, Symbol* targetclassname, TRAPS) { +// "this" is InstanceKlass of super_method which must exist +// note that the InstanceKlass of the method in the targetclassname has not always been created yet +bool InstanceKlass::is_override(methodHandle super_method, Handle targetclassloader, Symbol* targetclassname, TRAPS) { // Private methods can not be overridden if (super_method->is_private()) { return false; @@ -2098,16 +2407,16 @@ } /* defined for now in jvm.cpp, for historical reasons *-- -klassOop instanceKlass::compute_enclosing_class_impl(instanceKlassHandle self, +Klass* InstanceKlass::compute_enclosing_class_impl(instanceKlassHandle self, Symbol*& simple_name_result, TRAPS) { ... } */ // tell if two classes have the same enclosing class (at package level) -bool instanceKlass::is_same_package_member_impl(instanceKlassHandle class1, - klassOop class2_oop, TRAPS) { - if (class2_oop == class1->as_klassOop()) return true; +bool InstanceKlass::is_same_package_member_impl(instanceKlassHandle class1, + Klass* class2_oop, TRAPS) { + if (class2_oop == class1()) return true; if (!Klass::cast(class2_oop)->oop_is_instance()) return false; instanceKlassHandle class2(THREAD, class2_oop); @@ -2123,7 +2432,7 @@ // Eventually, the walks will terminate as outer1 stops // at the top-level class around the original class. bool ignore_inner_is_member; - klassOop next = outer1->compute_enclosing_class(&ignore_inner_is_member, + Klass* next = outer1->compute_enclosing_class(&ignore_inner_is_member, CHECK_false); if (next == NULL) break; if (next == class2()) return true; @@ -2134,7 +2443,7 @@ instanceKlassHandle outer2 = class2; for (;;) { bool ignore_inner_is_member; - klassOop next = outer2->compute_enclosing_class(&ignore_inner_is_member, + Klass* next = outer2->compute_enclosing_class(&ignore_inner_is_member, CHECK_false); if (next == NULL) break; // Might as well check the new outer against all available values. @@ -2149,12 +2458,11 @@ } -jint instanceKlass::compute_modifier_flags(TRAPS) const { - klassOop k = as_klassOop(); +jint InstanceKlass::compute_modifier_flags(TRAPS) const { jint access = access_flags().as_int(); // But check if it happens to be member class. - instanceKlassHandle ik(THREAD, k); + instanceKlassHandle ik(THREAD, this); InnerClassesIterator iter(ik); for (; !iter.done(); iter.next()) { int ioff = iter.inner_class_info_index(); @@ -2175,7 +2483,7 @@ return (access & (~JVM_ACC_SUPER)) & JVM_ACC_WRITTEN_FLAGS; } -jint instanceKlass::jvmti_class_status() const { +jint InstanceKlass::jvmti_class_status() const { jint result = 0; if (is_linked()) { @@ -2192,7 +2500,7 @@ return result; } -methodOop instanceKlass::method_at_itable(klassOop holder, int index, TRAPS) { +Method* InstanceKlass::method_at_itable(Klass* holder, int index, TRAPS) { itableOffsetEntry* ioe = (itableOffsetEntry*)start_of_itable(); int method_table_offset_in_words = ioe->offset()/wordSize; int nof_interfaces = (method_table_offset_in_words - itable_offset_in_words()) @@ -2202,23 +2510,23 @@ // If the interface isn't implemented by the receiver class, // the VM should throw IncompatibleClassChangeError. if (cnt >= nof_interfaces) { - THROW_0(vmSymbols::java_lang_IncompatibleClassChangeError()); + THROW_NULL(vmSymbols::java_lang_IncompatibleClassChangeError()); } - klassOop ik = ioe->interface_klass(); + Klass* ik = ioe->interface_klass(); if (ik == holder) break; } - itableMethodEntry* ime = ioe->first_method_entry(as_klassOop()); - methodOop m = ime[index].method(); + itableMethodEntry* ime = ioe->first_method_entry(this); + Method* m = ime[index].method(); if (m == NULL) { - THROW_0(vmSymbols::java_lang_AbstractMethodError()); + THROW_NULL(vmSymbols::java_lang_AbstractMethodError()); } return m; } // On-stack replacement stuff -void instanceKlass::add_osr_nmethod(nmethod* n) { +void InstanceKlass::add_osr_nmethod(nmethod* n) { // only one compilation can be active NEEDS_CLEANUP // This is a short non-blocking critical region, so the no safepoint check is ok. @@ -2228,7 +2536,7 @@ set_osr_nmethods_head(n); // Raise the highest osr level if necessary if (TieredCompilation) { - methodOop m = n->method(); + Method* m = n->method(); m->set_highest_osr_comp_level(MAX2(m->highest_osr_comp_level(), n->comp_level())); } // Remember to unlock again @@ -2246,14 +2554,14 @@ } -void instanceKlass::remove_osr_nmethod(nmethod* n) { +void InstanceKlass::remove_osr_nmethod(nmethod* n) { // This is a short non-blocking critical region, so the no safepoint check is ok. OsrList_lock->lock_without_safepoint_check(); assert(n->is_osr_method(), "wrong kind of nmethod"); nmethod* last = NULL; nmethod* cur = osr_nmethods_head(); int max_level = CompLevel_none; // Find the max comp level excluding n - methodOop m = n->method(); + Method* m = n->method(); // Search for match while(cur != NULL && cur != n) { if (TieredCompilation) { @@ -2287,7 +2595,7 @@ OsrList_lock->unlock(); } -nmethod* instanceKlass::lookup_osr_nmethod(const methodOop m, int bci, int comp_level, bool match_level) const { +nmethod* InstanceKlass::lookup_osr_nmethod(Method* const m, int bci, int comp_level, bool match_level) const { // This is a short non-blocking critical region, so the no safepoint check is ok. OsrList_lock->lock_without_safepoint_check(); nmethod* osr = osr_nmethods_head(); @@ -2329,12 +2637,135 @@ } // ----------------------------------------------------------------------------------------------------- +// Printing + #ifndef PRODUCT -// Printing - #define BULLET " - " +static const char* state_names[] = { + "allocated", "loaded", "linked", "being_initialized", "fully_initialized", "initialization_error" +}; + +void InstanceKlass::print_on(outputStream* st) const { + assert(is_klass(), "must be klass"); + Klass::print_on(st); + + st->print(BULLET"instance size: %d", size_helper()); st->cr(); + st->print(BULLET"klass size: %d", size()); st->cr(); + st->print(BULLET"access: "); access_flags().print_on(st); st->cr(); + st->print(BULLET"state: "); st->print_cr(state_names[_init_state]); + st->print(BULLET"name: "); name()->print_value_on(st); st->cr(); + st->print(BULLET"super: "); super()->print_value_on_maybe_null(st); st->cr(); + st->print(BULLET"sub: "); + Klass* sub = subklass(); + int n; + for (n = 0; sub != NULL; n++, sub = sub->next_sibling()) { + if (n < MaxSubklassPrintSize) { + sub->print_value_on(st); + st->print(" "); + } + } + if (n >= MaxSubklassPrintSize) st->print("(%d more klasses...)", n - MaxSubklassPrintSize); + st->cr(); + + if (is_interface()) { + st->print_cr(BULLET"nof implementors: %d", nof_implementors()); + if (nof_implementors() == 1) { + st->print_cr(BULLET"implementor: "); + st->print(" "); + implementor()->print_value_on(st); + st->cr(); + } + } + + st->print(BULLET"arrays: "); array_klasses()->print_value_on_maybe_null(st); st->cr(); + st->print(BULLET"methods: "); methods()->print_value_on(st); st->cr(); + if (Verbose) { + Array* method_array = methods(); + for(int i = 0; i < method_array->length(); i++) { + st->print("%d : ", i); method_array->at(i)->print_value(); st->cr(); + } + } + st->print(BULLET"method ordering: "); method_ordering()->print_value_on(st); st->cr(); + st->print(BULLET"local interfaces: "); local_interfaces()->print_value_on(st); st->cr(); + st->print(BULLET"trans. interfaces: "); transitive_interfaces()->print_value_on(st); st->cr(); + st->print(BULLET"constants: "); constants()->print_value_on(st); st->cr(); + if (class_loader_data() != NULL) { + st->print(BULLET"class loader data: "); + class_loader_data()->print_value_on(st); + st->cr(); + } + st->print(BULLET"protection domain: "); ((InstanceKlass*)this)->protection_domain()->print_value_on(st); st->cr(); + st->print(BULLET"host class: "); host_klass()->print_value_on_maybe_null(st); st->cr(); + st->print(BULLET"signers: "); signers()->print_value_on(st); st->cr(); + st->print(BULLET"init_lock: "); ((oop)init_lock())->print_value_on(st); st->cr(); + if (source_file_name() != NULL) { + st->print(BULLET"source file: "); + source_file_name()->print_value_on(st); + st->cr(); + } + if (source_debug_extension() != NULL) { + st->print(BULLET"source debug extension: "); + st->print("%s", source_debug_extension()); + st->cr(); + } + st->print(BULLET"annotations: "); annotations()->print_value_on(st); st->cr(); + { + ResourceMark rm; + // PreviousVersionInfo objects returned via PreviousVersionWalker + // contain a GrowableArray of handles. We have to clean up the + // GrowableArray _after_ the PreviousVersionWalker destructor + // has destroyed the handles. + { + bool have_pv = false; + PreviousVersionWalker pvw((InstanceKlass*)this); + for (PreviousVersionInfo * pv_info = pvw.next_previous_version(); + pv_info != NULL; pv_info = pvw.next_previous_version()) { + if (!have_pv) + st->print(BULLET"previous version: "); + have_pv = true; + pv_info->prev_constant_pool_handle()()->print_value_on(st); + } + if (have_pv) st->cr(); + } // pvw is cleaned up + } // rm is cleaned up + + if (generic_signature() != NULL) { + st->print(BULLET"generic signature: "); + generic_signature()->print_value_on(st); + st->cr(); + } + st->print(BULLET"inner classes: "); inner_classes()->print_value_on(st); st->cr(); + st->print(BULLET"java mirror: "); java_mirror()->print_value_on(st); st->cr(); + st->print(BULLET"vtable length %d (start addr: " INTPTR_FORMAT ")", vtable_length(), start_of_vtable()); st->cr(); + st->print(BULLET"itable length %d (start addr: " INTPTR_FORMAT ")", itable_length(), start_of_itable()); st->cr(); + st->print_cr(BULLET"---- static fields (%d words):", static_field_size()); + FieldPrinter print_static_field(st); + ((InstanceKlass*)this)->do_local_static_fields(&print_static_field); + st->print_cr(BULLET"---- non-static fields (%d words):", nonstatic_field_size()); + FieldPrinter print_nonstatic_field(st); + ((InstanceKlass*)this)->do_nonstatic_fields(&print_nonstatic_field); + + st->print(BULLET"non-static oop maps: "); + OopMapBlock* map = start_of_nonstatic_oop_maps(); + OopMapBlock* end_map = map + nonstatic_oop_map_count(); + while (map < end_map) { + st->print("%d-%d ", map->offset(), map->offset() + heapOopSize*(map->count() - 1)); + map++; + } + st->cr(); +} + +#endif //PRODUCT + +void InstanceKlass::print_value_on(outputStream* st) const { + assert(is_klass(), "must be klass"); + name()->print_value_on(st); +} + +#ifndef PRODUCT + void FieldPrinter::do_field(fieldDescriptor* fd) { _st->print(BULLET); if (_obj == NULL) { @@ -2347,10 +2778,10 @@ } -void instanceKlass::oop_print_on(oop obj, outputStream* st) { +void InstanceKlass::oop_print_on(oop obj, outputStream* st) { Klass::oop_print_on(obj, st); - if (as_klassOop() == SystemDictionary::String_klass()) { + if (this == SystemDictionary::String_klass()) { typeArrayOop value = java_lang_String::value(obj); juint offset = java_lang_String::offset(obj); juint length = java_lang_String::length(obj); @@ -2370,29 +2801,29 @@ FieldPrinter print_field(st, obj); do_nonstatic_fields(&print_field); - if (as_klassOop() == SystemDictionary::Class_klass()) { + if (this == SystemDictionary::Class_klass()) { st->print(BULLET"signature: "); java_lang_Class::print_signature(obj, st); st->cr(); - klassOop mirrored_klass = java_lang_Class::as_klassOop(obj); + Klass* mirrored_klass = java_lang_Class::as_Klass(obj); st->print(BULLET"fake entry for mirror: "); - mirrored_klass->print_value_on(st); + mirrored_klass->print_value_on_maybe_null(st); st->cr(); st->print(BULLET"fake entry resolved_constructor: "); - methodOop ctor = java_lang_Class::resolved_constructor(obj); - ctor->print_value_on(st); - klassOop array_klass = java_lang_Class::array_klass(obj); + Method* ctor = java_lang_Class::resolved_constructor(obj); + ctor->print_value_on_maybe_null(st); + Klass* array_klass = java_lang_Class::array_klass(obj); st->cr(); st->print(BULLET"fake entry for array: "); - array_klass->print_value_on(st); + array_klass->print_value_on_maybe_null(st); st->cr(); st->print_cr(BULLET"fake entry for oop_size: %d", java_lang_Class::oop_size(obj)); st->print_cr(BULLET"fake entry for static_oop_field_count: %d", java_lang_Class::static_oop_field_count(obj)); - klassOop real_klass = java_lang_Class::as_klassOop(obj); - if (real_klass != NULL && real_klass->klass_part()->oop_is_instance()) { - instanceKlass::cast(real_klass)->do_local_static_fields(&print_field); + Klass* real_klass = java_lang_Class::as_Klass(obj); + if (real_klass != NULL && real_klass->oop_is_instance()) { + InstanceKlass::cast(real_klass)->do_local_static_fields(&print_field); } - } else if (as_klassOop() == SystemDictionary::MethodType_klass()) { + } else if (this == SystemDictionary::MethodType_klass()) { st->print(BULLET"signature: "); java_lang_invoke_MethodType::print_signature(obj, st); st->cr(); @@ -2401,11 +2832,11 @@ #endif //PRODUCT -void instanceKlass::oop_print_value_on(oop obj, outputStream* st) { +void InstanceKlass::oop_print_value_on(oop obj, outputStream* st) { st->print("a "); name()->print_value_on(st); obj->print_address_on(st); - if (as_klassOop() == SystemDictionary::String_klass() + if (this == SystemDictionary::String_klass() && java_lang_String::value(obj) != NULL) { ResourceMark rm; int len = java_lang_String::length(obj); @@ -2414,8 +2845,8 @@ st->print(" = \"%s\"", str); if (len > plen) st->print("...[%d]", len); - } else if (as_klassOop() == SystemDictionary::Class_klass()) { - klassOop k = java_lang_Class::as_klassOop(obj); + } else if (this == SystemDictionary::Class_klass()) { + Klass* k = java_lang_Class::as_Klass(obj); st->print(" = "); if (k != NULL) { k->print_value_on(st); @@ -2423,20 +2854,20 @@ const char* tname = type2name(java_lang_Class::primitive_type(obj)); st->print("%s", tname ? tname : "type?"); } - } else if (as_klassOop() == SystemDictionary::MethodType_klass()) { + } else if (this == SystemDictionary::MethodType_klass()) { st->print(" = "); java_lang_invoke_MethodType::print_signature(obj, st); } else if (java_lang_boxing_object::is_instance(obj)) { st->print(" = "); java_lang_boxing_object::print(obj, st); - } else if (as_klassOop() == SystemDictionary::LambdaForm_klass()) { + } else if (this == SystemDictionary::LambdaForm_klass()) { oop vmentry = java_lang_invoke_LambdaForm::vmentry(obj); if (vmentry != NULL) { st->print(" => "); vmentry->print_value_on(st); } - } else if (as_klassOop() == SystemDictionary::MemberName_klass()) { - oop vmtarget = java_lang_invoke_MemberName::vmtarget(obj); + } else if (this == SystemDictionary::MemberName_klass()) { + Metadata* vmtarget = java_lang_invoke_MemberName::vmtarget(obj); if (vmtarget != NULL) { st->print(" = "); vmtarget->print_value_on(st); @@ -2448,7 +2879,7 @@ } } -const char* instanceKlass::internal_name() const { +const char* InstanceKlass::internal_name() const { return external_name(); } @@ -2457,7 +2888,6 @@ class VerifyFieldClosure: public OopClosure { protected: template void do_oop_work(T* p) { - guarantee(Universe::heap()->is_in_closed_subset(p), "should be in heap"); oop obj = oopDesc::load_decode_heap_oop(p); if (!obj->is_oop_or_null()) { tty->print_cr("Failed: " PTR_FORMAT " -> " PTR_FORMAT, p, (address)obj); @@ -2470,17 +2900,151 @@ virtual void do_oop(narrowOop* p) { VerifyFieldClosure::do_oop_work(p); } }; -void instanceKlass::oop_verify_on(oop obj, outputStream* st) { +void InstanceKlass::verify_on(outputStream* st) { + Klass::verify_on(st); + Thread *thread = Thread::current(); + +#ifndef PRODUCT + // Avoid redundant verifies + if (_verify_count == Universe::verify_count()) return; + _verify_count = Universe::verify_count(); +#endif + // Verify that klass is present in SystemDictionary + if (is_loaded() && !is_anonymous()) { + Symbol* h_name = name(); + SystemDictionary::verify_obj_klass_present(h_name, class_loader_data()); + } + + // Verify static fields + VerifyFieldClosure blk; + + // Verify vtables + if (is_linked()) { + ResourceMark rm(thread); + // $$$ This used to be done only for m/s collections. Doing it + // always seemed a valid generalization. (DLD -- 6/00) + vtable()->verify(st); + } + + // Verify first subklass + if (subklass_oop() != NULL) { + guarantee(subklass_oop()->is_metadata(), "should be in metaspace"); + guarantee(subklass_oop()->is_klass(), "should be klass"); + } + + // Verify siblings + Klass* super = this->super(); + Klass* sib = next_sibling(); + if (sib != NULL) { + if (sib == this) { + fatal(err_msg("subclass points to itself " PTR_FORMAT, sib)); + } + + guarantee(sib->is_metadata(), "should be in metaspace"); + guarantee(sib->is_klass(), "should be klass"); + guarantee(sib->super() == super, "siblings should have same superklass"); + } + + // Verify implementor fields + Klass* im = implementor(); + if (im != NULL) { + guarantee(is_interface(), "only interfaces should have implementor set"); + guarantee(im->is_klass(), "should be klass"); + guarantee(!Klass::cast(im)->is_interface() || im == this, + "implementors cannot be interfaces"); + } + + // Verify local interfaces + if (local_interfaces()) { + Array* local_interfaces = this->local_interfaces(); + for (int j = 0; j < local_interfaces->length(); j++) { + Klass* e = local_interfaces->at(j); + guarantee(e->is_klass() && Klass::cast(e)->is_interface(), "invalid local interface"); + } + } + + // Verify transitive interfaces + if (transitive_interfaces() != NULL) { + Array* transitive_interfaces = this->transitive_interfaces(); + for (int j = 0; j < transitive_interfaces->length(); j++) { + Klass* e = transitive_interfaces->at(j); + guarantee(e->is_klass() && Klass::cast(e)->is_interface(), "invalid transitive interface"); + } + } + + // Verify methods + if (methods() != NULL) { + Array* methods = this->methods(); + for (int j = 0; j < methods->length(); j++) { + guarantee(methods->at(j)->is_metadata(), "should be in metaspace"); + guarantee(methods->at(j)->is_method(), "non-method in methods array"); + } + for (int j = 0; j < methods->length() - 1; j++) { + Method* m1 = methods->at(j); + Method* m2 = methods->at(j + 1); + guarantee(m1->name()->fast_compare(m2->name()) <= 0, "methods not sorted correctly"); + } + } + + // Verify method ordering + if (method_ordering() != NULL) { + Array* method_ordering = this->method_ordering(); + int length = method_ordering->length(); + if (JvmtiExport::can_maintain_original_method_order() || + (UseSharedSpaces && length != 0)) { + guarantee(length == methods()->length(), "invalid method ordering length"); + jlong sum = 0; + for (int j = 0; j < length; j++) { + int original_index = method_ordering->at(j); + guarantee(original_index >= 0, "invalid method ordering index"); + guarantee(original_index < length, "invalid method ordering index"); + sum += original_index; + } + // Verify sum of indices 0,1,...,length-1 + guarantee(sum == ((jlong)length*(length-1))/2, "invalid method ordering sum"); + } else { + guarantee(length == 0, "invalid method ordering length"); + } + } + + // Verify JNI static field identifiers + if (jni_ids() != NULL) { + jni_ids()->verify(this); + } + + // Verify other fields + if (array_klasses() != NULL) { + guarantee(array_klasses()->is_metadata(), "should be in metaspace"); + guarantee(array_klasses()->is_klass(), "should be klass"); + } + if (constants() != NULL) { + guarantee(constants()->is_metadata(), "should be in metaspace"); + guarantee(constants()->is_constantPool(), "should be constant pool"); + } + if (protection_domain() != NULL) { + guarantee(protection_domain()->is_oop(), "should be oop"); + } + if (host_klass() != NULL) { + guarantee(host_klass()->is_metadata(), "should be in metaspace"); + guarantee(host_klass()->is_klass(), "should be klass"); + } + if (signers() != NULL) { + guarantee(signers()->is_objArray(), "should be obj array"); + } +} + +void InstanceKlass::oop_verify_on(oop obj, outputStream* st) { Klass::oop_verify_on(obj, st); VerifyFieldClosure blk; - oop_oop_iterate(obj, &blk); + obj->oop_iterate_no_header(&blk); } + // JNIid class for jfieldIDs only // Note to reviewers: // These JNI functions are just moved over to column 1 and not changed // in the compressed oops workspace. -JNIid::JNIid(klassOop holder, int offset, JNIid* next) { +JNIid::JNIid(Klass* holder, int offset, JNIid* next) { _holder = holder; _offset = offset; _next = next; @@ -2497,12 +3061,6 @@ return NULL; } -void JNIid::oops_do(OopClosure* f) { - for (JNIid* cur = this; cur != NULL; cur = cur->next()) { - f->do_oop(cur->holder_addr()); - } -} - void JNIid::deallocate(JNIid* current) { while (current != NULL) { JNIid* next = current->next(); @@ -2512,10 +3070,10 @@ } -void JNIid::verify(klassOop holder) { +void JNIid::verify(Klass* holder) { int first_field_offset = instanceMirrorKlass::offset_of_static_fields(); int end_field_offset; - end_field_offset = first_field_offset + (instanceKlass::cast(holder)->static_field_size() * wordSize); + end_field_offset = first_field_offset + (InstanceKlass::cast(holder)->static_field_size() * wordSize); JNIid* current = this; while (current != NULL) { @@ -2532,8 +3090,8 @@ #ifdef ASSERT -void instanceKlass::set_init_state(ClassState state) { - bool good_state = as_klassOop()->is_shared() ? (_init_state <= state) +void InstanceKlass::set_init_state(ClassState state) { + bool good_state = is_shared() ? (_init_state <= state) : (_init_state < state); assert(good_state || state == allocated, "illegal state transition"); _init_state = (u1)state; @@ -2543,14 +3101,105 @@ // RedefineClasses() support for previous versions: -// Add an information node that contains weak references to the +// Purge previous versions +static void purge_previous_versions_internal(InstanceKlass* ik, int emcp_method_count) { + if (ik->previous_versions() != NULL) { + // This klass has previous versions so see what we can cleanup + // while it is safe to do so. + + int deleted_count = 0; // leave debugging breadcrumbs + int live_count = 0; + ClassLoaderData* loader_data = ik->class_loader_data() == NULL ? + ClassLoaderData::the_null_class_loader_data() : + ik->class_loader_data(); + + // RC_TRACE macro has an embedded ResourceMark + RC_TRACE(0x00000200, ("purge: %s: previous version length=%d", + ik->external_name(), ik->previous_versions()->length())); + + for (int i = ik->previous_versions()->length() - 1; i >= 0; i--) { + // check the previous versions array + PreviousVersionNode * pv_node = ik->previous_versions()->at(i); + ConstantPool* cp_ref = pv_node->prev_constant_pool(); + assert(cp_ref != NULL, "cp ref was unexpectedly cleared"); + + ConstantPool* pvcp = cp_ref; + if (!pvcp->on_stack()) { + // If the constant pool isn't on stack, none of the methods + // are executing. Delete all the methods, the constant pool and + // and this previous version node. + GrowableArray* method_refs = pv_node->prev_EMCP_methods(); + if (method_refs != NULL) { + for (int j = method_refs->length() - 1; j >= 0; j--) { + Method* method = method_refs->at(j); + assert(method != NULL, "method ref was unexpectedly cleared"); + method_refs->remove_at(j); + // method will be freed with associated class. + } + } + // Remove the constant pool + delete pv_node; + // Since we are traversing the array backwards, we don't have to + // do anything special with the index. + ik->previous_versions()->remove_at(i); + deleted_count++; + continue; + } else { + RC_TRACE(0x00000200, ("purge: previous version @%d is alive", i)); + assert(pvcp->pool_holder() != NULL, "Constant pool with no holder"); + guarantee (!loader_data->is_unloading(), "unloaded classes can't be on the stack"); + live_count++; + } + + // At least one method is live in this previous version, clean out + // the others or mark them as obsolete. + GrowableArray* method_refs = pv_node->prev_EMCP_methods(); + if (method_refs != NULL) { + RC_TRACE(0x00000200, ("purge: previous methods length=%d", + method_refs->length())); + for (int j = method_refs->length() - 1; j >= 0; j--) { + Method* method = method_refs->at(j); + assert(method != NULL, "method ref was unexpectedly cleared"); + + // Remove the emcp method if it's not executing + // If it's been made obsolete by a redefinition of a non-emcp + // method, mark it as obsolete but leave it to clean up later. + if (!method->on_stack()) { + method_refs->remove_at(j); + } else if (emcp_method_count == 0) { + method->set_is_obsolete(); + } else { + // RC_TRACE macro has an embedded ResourceMark + RC_TRACE(0x00000200, + ("purge: %s(%s): prev method @%d in version @%d is alive", + method->name()->as_C_string(), + method->signature()->as_C_string(), j, i)); + } + } + } + } + assert(ik->previous_versions()->length() == live_count, "sanity check"); + RC_TRACE(0x00000200, + ("purge: previous version stats: live=%d, deleted=%d", live_count, + deleted_count)); + } +} + +// External interface for use during class unloading. +void InstanceKlass::purge_previous_versions(InstanceKlass* ik) { + // Call with >0 emcp methods since they are not currently being redefined. + purge_previous_versions_internal(ik, 1); +} + + +// Potentially add an information node that contains pointers to the // interesting parts of the previous version of the_class. -// This is also where we clean out any unused weak references. +// This is also where we clean out any unused references. // Note that while we delete nodes from the _previous_versions // array, we never delete the array itself until the klass is // unloaded. The has_been_redefined() query depends on that fact. // -void instanceKlass::add_previous_version(instanceKlassHandle ikh, +void InstanceKlass::add_previous_version(instanceKlassHandle ikh, BitMap* emcp_methods, int emcp_method_count) { assert(Thread::current()->is_VM_thread(), "only VMThread can add previous versions"); @@ -2563,155 +3212,81 @@ GrowableArray(2, true); } + ConstantPool* cp_ref = ikh->constants(); + // RC_TRACE macro has an embedded ResourceMark - RC_TRACE(0x00000100, ("adding previous version ref for %s @%d, EMCP_cnt=%d", - ikh->external_name(), _previous_versions->length(), emcp_method_count)); - constantPoolHandle cp_h(ikh->constants()); - jobject cp_ref; - if (cp_h->is_shared()) { - // a shared ConstantPool requires a regular reference; a weak - // reference would be collectible - cp_ref = JNIHandles::make_global(cp_h); - } else { - cp_ref = JNIHandles::make_weak_global(cp_h); - } + RC_TRACE(0x00000400, ("adding previous version ref for %s @%d, EMCP_cnt=%d " + "on_stack=%d", + ikh->external_name(), _previous_versions->length(), emcp_method_count, + cp_ref->on_stack())); + + // If the constant pool for this previous version of the class + // is not marked as being on the stack, then none of the methods + // in this previous version of the class are on the stack so + // we don't need to create a new PreviousVersionNode. However, + // we still need to examine older previous versions below. + Array* old_methods = ikh->methods(); + + if (cp_ref->on_stack()) { PreviousVersionNode * pv_node = NULL; - objArrayOop old_methods = ikh->methods(); - if (emcp_method_count == 0) { - // non-shared ConstantPool gets a weak reference - pv_node = new PreviousVersionNode(cp_ref, !cp_h->is_shared(), NULL); + // non-shared ConstantPool gets a reference + pv_node = new PreviousVersionNode(cp_ref, !cp_ref->is_shared(), NULL); RC_TRACE(0x00000400, - ("add: all methods are obsolete; flushing any EMCP weak refs")); + ("add: all methods are obsolete; flushing any EMCP refs")); } else { int local_count = 0; - GrowableArray* method_refs = new (ResourceObj::C_HEAP, mtClass) - GrowableArray(emcp_method_count, true); + GrowableArray* method_refs = new (ResourceObj::C_HEAP, mtClass) + GrowableArray(emcp_method_count, true); for (int i = 0; i < old_methods->length(); i++) { if (emcp_methods->at(i)) { - // this old method is EMCP so save a weak ref - methodOop old_method = (methodOop) old_methods->obj_at(i); - methodHandle old_method_h(old_method); - jweak method_ref = JNIHandles::make_weak_global(old_method_h); - method_refs->append(method_ref); + // this old method is EMCP. Save it only if it's on the stack + Method* old_method = old_methods->at(i); + if (old_method->on_stack()) { + method_refs->append(old_method); + } if (++local_count >= emcp_method_count) { // no more EMCP methods so bail out now break; } } } - // non-shared ConstantPool gets a weak reference - pv_node = new PreviousVersionNode(cp_ref, !cp_h->is_shared(), method_refs); - } - + // non-shared ConstantPool gets a reference + pv_node = new PreviousVersionNode(cp_ref, !cp_ref->is_shared(), method_refs); + } + // append new previous version. _previous_versions->append(pv_node); - - // Using weak references allows the interesting parts of previous - // classes to be GC'ed when they are no longer needed. Since the - // caller is the VMThread and we are at a safepoint, this is a good - // time to clear out unused weak references. + } + + // Since the caller is the VMThread and we are at a safepoint, this + // is a good time to clear out unused references. RC_TRACE(0x00000400, ("add: previous version length=%d", _previous_versions->length())); - // skip the last entry since we just added it - for (int i = _previous_versions->length() - 2; i >= 0; i--) { - // check the previous versions array for a GC'ed weak refs - pv_node = _previous_versions->at(i); - cp_ref = pv_node->prev_constant_pool(); - assert(cp_ref != NULL, "cp ref was unexpectedly cleared"); - if (cp_ref == NULL) { - delete pv_node; - _previous_versions->remove_at(i); - // Since we are traversing the array backwards, we don't have to - // do anything special with the index. - continue; // robustness - } - - constantPoolOop cp = (constantPoolOop)JNIHandles::resolve(cp_ref); - if (cp == NULL) { - // this entry has been GC'ed so remove it - delete pv_node; - _previous_versions->remove_at(i); - // Since we are traversing the array backwards, we don't have to - // do anything special with the index. - continue; - } else { - RC_TRACE(0x00000400, ("add: previous version @%d is alive", i)); - } - - GrowableArray* method_refs = pv_node->prev_EMCP_methods(); - if (method_refs != NULL) { - RC_TRACE(0x00000400, ("add: previous methods length=%d", - method_refs->length())); - for (int j = method_refs->length() - 1; j >= 0; j--) { - jweak method_ref = method_refs->at(j); - assert(method_ref != NULL, "weak method ref was unexpectedly cleared"); - if (method_ref == NULL) { - method_refs->remove_at(j); - // Since we are traversing the array backwards, we don't have to - // do anything special with the index. - continue; // robustness - } - - methodOop method = (methodOop)JNIHandles::resolve(method_ref); - if (method == NULL || emcp_method_count == 0) { - // This method entry has been GC'ed or the current - // RedefineClasses() call has made all methods obsolete - // so remove it. - JNIHandles::destroy_weak_global(method_ref); - method_refs->remove_at(j); - } else { - // RC_TRACE macro has an embedded ResourceMark - RC_TRACE(0x00000400, - ("add: %s(%s): previous method @%d in version @%d is alive", - method->name()->as_C_string(), method->signature()->as_C_string(), - j, i)); - } - } - } - } + // Purge previous versions not executing on the stack + purge_previous_versions_internal(this, emcp_method_count); int obsolete_method_count = old_methods->length() - emcp_method_count; if (emcp_method_count != 0 && obsolete_method_count != 0 && - _previous_versions->length() > 1) { - // We have a mix of obsolete and EMCP methods. If there is more - // than the previous version that we just added, then we have to + _previous_versions->length() > 0) { + // We have a mix of obsolete and EMCP methods so we have to // clear out any matching EMCP method entries the hard way. int local_count = 0; for (int i = 0; i < old_methods->length(); i++) { if (!emcp_methods->at(i)) { // only obsolete methods are interesting - methodOop old_method = (methodOop) old_methods->obj_at(i); + Method* old_method = old_methods->at(i); Symbol* m_name = old_method->name(); Symbol* m_signature = old_method->signature(); - // skip the last entry since we just added it - for (int j = _previous_versions->length() - 2; j >= 0; j--) { - // check the previous versions array for a GC'ed weak refs - pv_node = _previous_versions->at(j); - cp_ref = pv_node->prev_constant_pool(); - assert(cp_ref != NULL, "cp ref was unexpectedly cleared"); - if (cp_ref == NULL) { - delete pv_node; - _previous_versions->remove_at(j); - // Since we are traversing the array backwards, we don't have to - // do anything special with the index. - continue; // robustness - } - - constantPoolOop cp = (constantPoolOop)JNIHandles::resolve(cp_ref); - if (cp == NULL) { - // this entry has been GC'ed so remove it - delete pv_node; - _previous_versions->remove_at(j); - // Since we are traversing the array backwards, we don't have to - // do anything special with the index. - continue; - } - - GrowableArray* method_refs = pv_node->prev_EMCP_methods(); + // we might not have added the last entry + for (int j = _previous_versions->length() - 1; j >= 0; j--) { + // check the previous versions array for non executing obsolete methods + PreviousVersionNode * pv_node = _previous_versions->at(j); + + GrowableArray* method_refs = pv_node->prev_EMCP_methods(); if (method_refs == NULL) { // We have run into a PreviousVersion generation where // all methods were made obsolete during that generation's @@ -2726,36 +3301,21 @@ } for (int k = method_refs->length() - 1; k >= 0; k--) { - jweak method_ref = method_refs->at(k); - assert(method_ref != NULL, - "weak method ref was unexpectedly cleared"); - if (method_ref == NULL) { - method_refs->remove_at(k); - // Since we are traversing the array backwards, we don't - // have to do anything special with the index. - continue; // robustness - } - - methodOop method = (methodOop)JNIHandles::resolve(method_ref); - if (method == NULL) { - // this method entry has been GC'ed so skip it - JNIHandles::destroy_weak_global(method_ref); - method_refs->remove_at(k); - continue; - } - - if (method->name() == m_name && + Method* method = method_refs->at(k); + + if (!method->is_obsolete() && + method->name() == m_name && method->signature() == m_signature) { // The current RedefineClasses() call has made all EMCP // versions of this method obsolete so mark it as obsolete - // and remove the weak ref. + // and remove the reference. RC_TRACE(0x00000400, ("add: %s(%s): flush obsolete method @%d in version @%d", m_name->as_C_string(), m_signature->as_C_string(), k, j)); method->set_is_obsolete(); - JNIHandles::destroy_weak_global(method_ref); - method_refs->remove_at(k); + // Leave obsolete methods on the previous version list to + // clean up later. break; } } @@ -2763,9 +3323,9 @@ // The previous loop may not find a matching EMCP method, but // that doesn't mean that we can optimize and not go any // further back in the PreviousVersion generations. The EMCP - // method for this generation could have already been GC'ed, + // method for this generation could have already been deleted, // but there still may be an older EMCP method that has not - // been GC'ed. + // been deleted. } if (++local_count >= obsolete_method_count) { @@ -2778,46 +3338,20 @@ } // end add_previous_version() -// Determine if instanceKlass has a previous version. -bool instanceKlass::has_previous_version() const { - if (_previous_versions == NULL) { - // no previous versions array so answer is easy - return false; - } - - for (int i = _previous_versions->length() - 1; i >= 0; i--) { - // Check the previous versions array for an info node that hasn't - // been GC'ed - PreviousVersionNode * pv_node = _previous_versions->at(i); - - jobject cp_ref = pv_node->prev_constant_pool(); - assert(cp_ref != NULL, "cp reference was unexpectedly cleared"); - if (cp_ref == NULL) { - continue; // robustness - } - - constantPoolOop cp = (constantPoolOop)JNIHandles::resolve(cp_ref); - if (cp != NULL) { - // we have at least one previous version - return true; - } - - // We don't have to check the method refs. If the constant pool has - // been GC'ed then so have the methods. - } - - // all of the underlying nodes' info has been GC'ed - return false; +// Determine if InstanceKlass has a previous version. +bool InstanceKlass::has_previous_version() const { + return (_previous_versions != NULL && _previous_versions->length() > 0); } // end has_previous_version() -methodOop instanceKlass::method_with_idnum(int idnum) { - methodOop m = NULL; + +Method* InstanceKlass::method_with_idnum(int idnum) { + Method* m = NULL; if (idnum < methods()->length()) { - m = (methodOop) methods()->obj_at(idnum); + m = methods()->at(idnum); } if (m == NULL || m->method_idnum() != idnum) { for (int index = 0; index < methods()->length(); ++index) { - m = (methodOop) methods()->obj_at(index); + m = methods()->at(index); if (m->method_idnum() == idnum) { return m; } @@ -2827,32 +3361,10 @@ } -// Set the annotation at 'idnum' to 'anno'. -// We don't want to create or extend the array if 'anno' is NULL, since that is the -// default value. However, if the array exists and is long enough, we must set NULL values. -void instanceKlass::set_methods_annotations_of(int idnum, typeArrayOop anno, objArrayOop* md_p) { - objArrayOop md = *md_p; - if (md != NULL && md->length() > idnum) { - md->obj_at_put(idnum, anno); - } else if (anno != NULL) { - // create the array - int length = MAX2(idnum+1, (int)_idnum_allocated_count); - md = oopFactory::new_system_objArray(length, Thread::current()); - if (*md_p != NULL) { - // copy the existing entries - for (int index = 0; index < (*md_p)->length(); index++) { - md->obj_at_put(index, (*md_p)->obj_at(index)); - } - } - set_annotations(md, md_p); - md->obj_at_put(idnum, anno); - } // if no array and idnum isn't included there is nothing to do -} - // Construct a PreviousVersionNode entry for the array hung off -// the instanceKlass. -PreviousVersionNode::PreviousVersionNode(jobject prev_constant_pool, - bool prev_cp_is_weak, GrowableArray* prev_EMCP_methods) { +// the InstanceKlass. +PreviousVersionNode::PreviousVersionNode(ConstantPool* prev_constant_pool, + bool prev_cp_is_weak, GrowableArray* prev_EMCP_methods) { _prev_constant_pool = prev_constant_pool; _prev_cp_is_weak = prev_cp_is_weak; @@ -2863,20 +3375,10 @@ // Destroy a PreviousVersionNode PreviousVersionNode::~PreviousVersionNode() { if (_prev_constant_pool != NULL) { - if (_prev_cp_is_weak) { - JNIHandles::destroy_weak_global(_prev_constant_pool); - } else { - JNIHandles::destroy_global(_prev_constant_pool); - } + _prev_constant_pool = NULL; } if (_prev_EMCP_methods != NULL) { - for (int i = _prev_EMCP_methods->length() - 1; i >= 0; i--) { - jweak method_ref = _prev_EMCP_methods->at(i); - if (method_ref != NULL) { - JNIHandles::destroy_weak_global(method_ref); - } - } delete _prev_EMCP_methods; } } @@ -2887,25 +3389,18 @@ _prev_constant_pool_handle = constantPoolHandle(); // NULL handle _prev_EMCP_method_handles = NULL; - jobject cp_ref = pv_node->prev_constant_pool(); - assert(cp_ref != NULL, "constant pool ref was unexpectedly cleared"); - if (cp_ref == NULL) { + ConstantPool* cp = pv_node->prev_constant_pool(); + assert(cp != NULL, "constant pool ref was unexpectedly cleared"); + if (cp == NULL) { return; // robustness } - constantPoolOop cp = (constantPoolOop)JNIHandles::resolve(cp_ref); - if (cp == NULL) { - // Weak reference has been GC'ed. Since the constant pool has been - // GC'ed, the methods have also been GC'ed. - return; - } - - // make the constantPoolOop safe to return + // make the ConstantPool* safe to return _prev_constant_pool_handle = constantPoolHandle(cp); - GrowableArray* method_refs = pv_node->prev_EMCP_methods(); + GrowableArray* method_refs = pv_node->prev_EMCP_methods(); if (method_refs == NULL) { - // the instanceKlass did not have any EMCP methods + // the InstanceKlass did not have any EMCP methods return; } @@ -2913,19 +3408,12 @@ int n_methods = method_refs->length(); for (int i = 0; i < n_methods; i++) { - jweak method_ref = method_refs->at(i); - assert(method_ref != NULL, "weak method ref was unexpectedly cleared"); - if (method_ref == NULL) { + Method* method = method_refs->at(i); + assert (method != NULL, "method has been cleared"); + if (method == NULL) { continue; // robustness } - - methodOop method = (methodOop)JNIHandles::resolve(method_ref); - if (method == NULL) { - // this entry has been GC'ed so skip it - continue; - } - - // make the methodOop safe to return + // make the Method* safe to return _prev_EMCP_method_handles->append(methodHandle(method)); } } @@ -2939,7 +3427,7 @@ // Construct a helper for walking the previous versions array -PreviousVersionWalker::PreviousVersionWalker(instanceKlass *ik) { +PreviousVersionWalker::PreviousVersionWalker(InstanceKlass *ik) { _previous_versions = ik->previous_versions(); _current_index = 0; // _hm needs no initialization @@ -2981,21 +3469,13 @@ PreviousVersionInfo(pv_node); constantPoolHandle cp_h = pv_info->prev_constant_pool_handle(); - if (cp_h.is_null()) { - delete pv_info; - - // The underlying node's info has been GC'ed so try the next one. - // We don't have to check the methods. If the constant pool has - // GC'ed then so have the methods. - continue; - } - - // Found a node with non GC'ed info so return it. The caller will - // need to delete pv_info when they are done with it. + assert (!cp_h.is_null(), "null cp found in previous version"); + + // The caller will need to delete pv_info when they are done with it. _current_p = pv_info; return pv_info; } - // all of the underlying nodes' info has been GC'ed + // all of the underlying nodes' info has been deleted return NULL; } // end next_previous_version() diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/instanceKlass.hpp --- a/src/share/vm/oops/instanceKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/instanceKlass.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -25,24 +25,21 @@ #ifndef SHARE_VM_OOPS_INSTANCEKLASS_HPP #define SHARE_VM_OOPS_INSTANCEKLASS_HPP -#include "oops/constMethodOop.hpp" -#include "oops/constantPoolOop.hpp" +#include "classfile/classLoaderData.hpp" +#include "oops/annotations.hpp" +#include "oops/constMethod.hpp" #include "oops/fieldInfo.hpp" #include "oops/instanceOop.hpp" -#include "oops/klassOop.hpp" #include "oops/klassVtable.hpp" -#include "oops/objArrayOop.hpp" #include "runtime/handles.hpp" #include "runtime/os.hpp" #include "utilities/accessFlags.hpp" #include "utilities/bitMap.inline.hpp" -// An instanceKlass is the VM level representation of a Java class. +// An InstanceKlass is the VM level representation of a Java class. // It contains all information needed for at class at execution runtime. -// instanceKlass layout: -// [header ] klassOop -// [klass pointer ] klassOop +// InstanceKlass layout: // [C++ vtbl pointer ] Klass // [subtype cache ] Klass // [instance size ] Klass @@ -133,13 +130,37 @@ uint _count; }; -class instanceKlass: public Klass { +class InstanceKlass: public Klass { friend class VMStructs; + friend class ClassFileParser; + + protected: + // Constructor + InstanceKlass(int vtable_len, + int itable_len, + int static_field_size, + int nonstatic_oop_map_size, + ReferenceType rt, + AccessFlags access_flags, + bool is_anonymous); public: + static Klass* allocate_instance_klass(ClassLoaderData* loader_data, + int vtable_len, + int itable_len, + int static_field_size, + int nonstatic_oop_map_size, + ReferenceType rt, + AccessFlags access_flags, + Symbol* name, + Klass* super_klass, + KlassHandle host_klass, + TRAPS); + + InstanceKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); } + // See "The Java Virtual Machine Specification" section 2.16.2-5 for a detailed description // of the class loading & initialization procedure, and the use of the states. enum ClassState { - unparsable_by_gc = 0, // object is not yet parsable by gc. Value of _init_state at object allocation. allocated, // allocated (but not yet linked) loaded, // loaded and inserted in class hierarchy (but not linked yet) linked, // successfully linked/verified (but not initialized yet) @@ -148,48 +169,22 @@ initialization_error // error happened during initialization }; - public: - oop* oop_block_beg() const { return adr_array_klasses(); } - oop* oop_block_end() const { return adr_methods_default_annotations() + 1; } - protected: - // - // The oop block. See comment in klass.hpp before making changes. - // - - // Array classes holding elements of this class. - klassOop _array_klasses; - // Method array. - objArrayOop _methods; - // Int array containing the original order of method in the class file (for - // JVMTI). - typeArrayOop _method_ordering; - // Interface (klassOops) this class declares locally to implement. - objArrayOop _local_interfaces; - // Interface (klassOops) this class implements transitively. - objArrayOop _transitive_interfaces; - // Instance and static variable information, starts with 6-tuples of shorts - // [access, name index, sig index, initval index, low_offset, high_offset] - // for all fields, followed by the generic signature data at the end of - // the array. Only fields with generic signature attributes have the generic - // signature data set in the array. The fields array looks like following: - // - // f1: [access, name index, sig index, initial value index, low_offset, high_offset] - // f2: [access, name index, sig index, initial value index, low_offset, high_offset] - // ... - // fn: [access, name index, sig index, initial value index, low_offset, high_offset] - // [generic signature index] - // [generic signature index] - // ... - typeArrayOop _fields; - // Constant pool for this class. - constantPoolOop _constants; - // Class loader used to load this class, NULL if VM loader used. - oop _class_loader; // Protection domain. oop _protection_domain; // Class signers. objArrayOop _signers; + // Initialization lock. Must be one per class and it has to be a VM internal + // object so java code cannot lock it (like the mirror) + // It has to be an object not a Mutex because it's held through java calls. + volatile oop _init_lock; + + // Annotations for this class + Annotations* _annotations; + // Array classes holding elements of this class. + Klass* _array_klasses; + // Constant pool for this class. + ConstantPool* _constants; // The InnerClasses attribute and EnclosingMethod attribute. The // _inner_classes is an array of shorts. If the class has InnerClasses // attribute, then the _inner_classes array begins with 4-tuples of shorts @@ -201,27 +196,7 @@ // number_of_inner_classes * 4. If the class has both InnerClasses // and EnclosingMethod attributes the _inner_classes array length is // number_of_inner_classes * 4 + enclosing_method_attribute_size. - typeArrayOop _inner_classes; - // Annotations for this class, or null if none. - typeArrayOop _class_annotations; - // Annotation objects (byte arrays) for fields, or null if no annotations. - // Indices correspond to entries (not indices) in fields array. - objArrayOop _fields_annotations; - // Annotation objects (byte arrays) for methods, or null if no annotations. - // Index is the idnum, which is initially the same as the methods array index. - objArrayOop _methods_annotations; - // Annotation objects (byte arrays) for methods' parameters, or null if no - // such annotations. - // Index is the idnum, which is initially the same as the methods array index. - objArrayOop _methods_parameter_annotations; - // Annotation objects (byte arrays) for methods' default values, or null if no - // such annotations. - // Index is the idnum, which is initially the same as the methods array index. - objArrayOop _methods_default_annotations; - - // - // End of the oop block. - // + Array* _inner_classes; // Name of source file containing this klass, NULL if not specified. Symbol* _source_file_name; @@ -262,15 +237,37 @@ int* _methods_cached_itable_indices; // itable_index cache for JNI invoke corresponding to methods idnum, or NULL nmethodBucket* _dependencies; // list of dependent nmethods nmethod* _osr_nmethods_head; // Head of list of on-stack replacement nmethods for this class - BreakpointInfo* _breakpoints; // bpt lists, managed by methodOop + BreakpointInfo* _breakpoints; // bpt lists, managed by Method* // Array of interesting part(s) of the previous version(s) of this - // instanceKlass. See PreviousVersionWalker below. + // InstanceKlass. See PreviousVersionWalker below. GrowableArray* _previous_versions; // JVMTI fields can be moved to their own structure - see 6315920 unsigned char * _cached_class_file_bytes; // JVMTI: cached class file, before retransformable agent modified it in CFLH jint _cached_class_file_len; // JVMTI: length of above JvmtiCachedClassFieldMap* _jvmti_cached_class_field_map; // JVMTI: used during heap iteration volatile u2 _idnum_allocated_count; // JNI/JVMTI: increments with the addition of methods, old ids don't change + // Method array. + Array* _methods; + // Interface (Klass*s) this class declares locally to implement. + Array* _local_interfaces; + // Interface (Klass*s) this class implements transitively. + Array* _transitive_interfaces; + // Int array containing the original order of method in the class file (for JVMTI). + Array* _method_ordering; + // Instance and static variable information, starts with 6-tuples of shorts + // [access, name index, sig index, initval index, low_offset, high_offset] + // for all fields, followed by the generic signature data at the end of + // the array. Only fields with generic signature attributes have the generic + // signature data set in the array. The fields array looks like following: + // + // f1: [access, name index, sig index, initial value index, low_offset, high_offset] + // f2: [access, name index, sig index, initial value index, low_offset, high_offset] + // ... + // fn: [access, name index, sig index, initial value index, low_offset, high_offset] + // [generic signature index] + // [generic signature index] + // ... + Array* _fields; // Class states are defined as ClassState (see above). // Place the _init_state here to utilize the unused 2-byte after @@ -288,7 +285,7 @@ // iterface. The possible values of the implementor fall into following // three cases: // NULL: no implementor. - // A klassOop that's not itself: one implementor. + // A Klass* that's not itself: one implementor. // Itsef: more than one implementors. // embedded host klass follows here // The embedded host klass only exists in an anonymous class for @@ -299,7 +296,6 @@ // have this embedded field. // - friend class instanceKlassKlass; friend class SystemDictionary; public: @@ -333,23 +329,27 @@ void set_itable_length(int len) { _itable_len = len; } // array klasses - klassOop array_klasses() const { return _array_klasses; } - void set_array_klasses(klassOop k) { oop_store_without_check((oop*) &_array_klasses, (oop) k); } + Klass* array_klasses() const { return _array_klasses; } + void set_array_klasses(Klass* k) { _array_klasses = k; } // methods - objArrayOop methods() const { return _methods; } - void set_methods(objArrayOop a) { oop_store_without_check((oop*) &_methods, (oop) a); } - methodOop method_with_idnum(int idnum); + Array* methods() const { return _methods; } + void set_methods(Array* a) { _methods = a; } + Method* method_with_idnum(int idnum); // method ordering - typeArrayOop method_ordering() const { return _method_ordering; } - void set_method_ordering(typeArrayOop m) { oop_store_without_check((oop*) &_method_ordering, (oop) m); } + Array* method_ordering() const { return _method_ordering; } + void set_method_ordering(Array* m) { _method_ordering = m; } // interfaces - objArrayOop local_interfaces() const { return _local_interfaces; } - void set_local_interfaces(objArrayOop a) { oop_store_without_check((oop*) &_local_interfaces, (oop) a); } - objArrayOop transitive_interfaces() const { return _transitive_interfaces; } - void set_transitive_interfaces(objArrayOop a) { oop_store_without_check((oop*) &_transitive_interfaces, (oop) a); } + Array* local_interfaces() const { return _local_interfaces; } + void set_local_interfaces(Array* a) { + guarantee(_local_interfaces == NULL || a == NULL, "Just checking"); + _local_interfaces = a; } + Array* transitive_interfaces() const { return _transitive_interfaces; } + void set_transitive_interfaces(Array* a) { + guarantee(_transitive_interfaces == NULL || a == NULL, "Just checking"); + _transitive_interfaces = a; } private: friend class fieldDescriptor; @@ -364,16 +364,17 @@ // Number of Java declared fields int java_fields_count() const { return (int)_java_fields_count; } - typeArrayOop fields() const { return _fields; } + Array* fields() const { return _fields; } - void set_fields(typeArrayOop f, u2 java_fields_count) { - oop_store_without_check((oop*) &_fields, (oop) f); + void set_fields(Array* f, u2 java_fields_count) { + guarantee(_fields == NULL || f == NULL, "Just checking"); + _fields = f; _java_fields_count = java_fields_count; } // inner classes - typeArrayOop inner_classes() const { return _inner_classes; } - void set_inner_classes(typeArrayOop f) { oop_store_without_check((oop*) &_inner_classes, (oop) f); } + Array* inner_classes() const { return _inner_classes; } + void set_inner_classes(Array* f) { _inner_classes = f; } enum InnerClassAttributeOffset { // From http://mirror.eng/products/jdk/1.1/docs/guide/innerclasses/spec/innerclasses.doc10.html#18814 @@ -394,25 +395,25 @@ bool is_override(methodHandle super_method, Handle targetclassloader, Symbol* targetclassname, TRAPS); // package - bool is_same_class_package(klassOop class2); + bool is_same_class_package(Klass* class2); bool is_same_class_package(oop classloader2, Symbol* classname2); static bool is_same_class_package(oop class_loader1, Symbol* class_name1, oop class_loader2, Symbol* class_name2); // find an enclosing class (defined where original code was, in jvm.cpp!) - klassOop compute_enclosing_class(bool* inner_is_member, TRAPS) { - instanceKlassHandle self(THREAD, this->as_klassOop()); + Klass* compute_enclosing_class(bool* inner_is_member, TRAPS) { + instanceKlassHandle self(THREAD, this); return compute_enclosing_class_impl(self, inner_is_member, THREAD); } - static klassOop compute_enclosing_class_impl(instanceKlassHandle self, + static Klass* compute_enclosing_class_impl(instanceKlassHandle self, bool* inner_is_member, TRAPS); // tell if two classes have the same enclosing class (at package level) - bool is_same_package_member(klassOop class2, TRAPS) { - instanceKlassHandle self(THREAD, this->as_klassOop()); + bool is_same_package_member(Klass* class2, TRAPS) { + instanceKlassHandle self(THREAD, this); return is_same_package_member_impl(self, class2, THREAD); } static bool is_same_package_member_impl(instanceKlassHandle self, - klassOop class2, TRAPS); + Klass* class2, TRAPS); // initialization state bool is_loaded() const { return _init_state >= loaded; } @@ -449,7 +450,7 @@ void unlink_class(); void rewrite_class(TRAPS); void relocate_and_link_methods(TRAPS); - methodOop class_initializer(); + Method* class_initializer(); // set the class to initialized if no static initializer is present void eager_initialize(Thread *thread); @@ -461,16 +462,16 @@ _reference_type = (u1)t; } - static ByteSize reference_type_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(instanceKlass, _reference_type)); } + static ByteSize reference_type_offset() { return in_ByteSize(offset_of(InstanceKlass, _reference_type)); } // find local field, returns true if found bool find_local_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const; // find field in direct superinterfaces, returns the interface in which the field is defined - klassOop find_interface_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const; + Klass* find_interface_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const; // find field according to JVM spec 5.4.3.2, returns the klass in which the field is defined - klassOop find_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const; + Klass* find_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const; // find instance or static fields according to JVM spec 5.4.3.2, returns the klass in which the field is defined - klassOop find_field(Symbol* name, Symbol* sig, bool is_static, fieldDescriptor* fd) const; + Klass* find_field(Symbol* name, Symbol* sig, bool is_static, fieldDescriptor* fd) const; // find a non-static or static field given its offset within the class. bool contains_field_offset(int offset) { @@ -481,42 +482,38 @@ bool find_field_from_offset(int offset, bool is_static, fieldDescriptor* fd) const; // find a local method (returns NULL if not found) - methodOop find_method(Symbol* name, Symbol* signature) const; - static methodOop find_method(objArrayOop methods, Symbol* name, Symbol* signature); + Method* find_method(Symbol* name, Symbol* signature) const; + static Method* find_method(Array* methods, Symbol* name, Symbol* signature); // lookup operation (returns NULL if not found) - methodOop uncached_lookup_method(Symbol* name, Symbol* signature) const; + Method* uncached_lookup_method(Symbol* name, Symbol* signature) const; // lookup a method in all the interfaces that this class implements // (returns NULL if not found) - methodOop lookup_method_in_all_interfaces(Symbol* name, Symbol* signature) const; + Method* lookup_method_in_all_interfaces(Symbol* name, Symbol* signature) const; // constant pool - constantPoolOop constants() const { return _constants; } - void set_constants(constantPoolOop c) { oop_store_without_check((oop*) &_constants, (oop) c); } - - // class loader - oop class_loader() const { return _class_loader; } - void set_class_loader(oop l) { oop_store((oop*) &_class_loader, l); } + ConstantPool* constants() const { return _constants; } + void set_constants(ConstantPool* c) { _constants = c; } // protection domain oop protection_domain() { return _protection_domain; } - void set_protection_domain(oop pd) { oop_store((oop*) &_protection_domain, pd); } + void set_protection_domain(oop pd) { klass_oop_store(&_protection_domain, pd); } // host class - oop host_klass() const { - oop* hk = adr_host_klass(); + Klass* host_klass() const { + Klass** hk = (Klass**)adr_host_klass(); if (hk == NULL) { return NULL; } else { return *hk; } } - void set_host_klass(oop host) { + void set_host_klass(Klass* host) { assert(is_anonymous(), "not anonymous"); - oop* addr = adr_host_klass(); + Klass** addr = (Klass**)adr_host_klass(); assert(addr != NULL, "no reversed space"); - oop_store(addr, host); + *addr = host; } bool is_anonymous() const { return (_misc_flags & _misc_is_anonymous) != 0; @@ -531,7 +528,7 @@ // signers objArrayOop signers() const { return _signers; } - void set_signers(objArrayOop s) { oop_store((oop*) &_signers, oop(s)); } + void set_signers(objArrayOop s) { klass_oop_store((oop*)&_signers, s); } // source file name Symbol* source_file_name() const { return _source_file_name; } @@ -578,6 +575,8 @@ return _previous_versions; } + static void purge_previous_versions(InstanceKlass* ik); + // JVMTI: Support for caching a class file before it is modified by an agent that can do retransformation void set_cached_class_file(unsigned char *class_file_bytes, jint class_file_len) { _cached_class_file_len = class_file_len; @@ -593,7 +592,7 @@ return _jvmti_cached_class_field_map; } - // for adding methods, constMethodOopDesc::UNSET_IDNUM means no more ids available + // for adding methods, ConstMethod::UNSET_IDNUM means no more ids available inline u2 next_method_idnum(); void set_initial_method_idnum(u2 value) { _idnum_allocated_count = value; } @@ -620,40 +619,26 @@ jmethodID** to_dealloc_jmeths_p); static void get_jmethod_id_length_value(jmethodID* cache, size_t idnum, size_t *length_p, jmethodID* id_p); - jmethodID jmethod_id_or_null(methodOop method); + jmethodID jmethod_id_or_null(Method* method); // cached itable index support void set_cached_itable_index(size_t idnum, int index); int cached_itable_index(size_t idnum); // annotations support - typeArrayOop class_annotations() const { return _class_annotations; } - objArrayOop fields_annotations() const { return _fields_annotations; } - objArrayOop methods_annotations() const { return _methods_annotations; } - objArrayOop methods_parameter_annotations() const { return _methods_parameter_annotations; } - objArrayOop methods_default_annotations() const { return _methods_default_annotations; } - void set_class_annotations(typeArrayOop md) { oop_store_without_check((oop*)&_class_annotations, (oop)md); } - void set_fields_annotations(objArrayOop md) { set_annotations(md, &_fields_annotations); } - void set_methods_annotations(objArrayOop md) { set_annotations(md, &_methods_annotations); } - void set_methods_parameter_annotations(objArrayOop md) { set_annotations(md, &_methods_parameter_annotations); } - void set_methods_default_annotations(objArrayOop md) { set_annotations(md, &_methods_default_annotations); } - typeArrayOop get_method_annotations_of(int idnum) - { return get_method_annotations_from(idnum, _methods_annotations); } - typeArrayOop get_method_parameter_annotations_of(int idnum) - { return get_method_annotations_from(idnum, _methods_parameter_annotations); } - typeArrayOop get_method_default_annotations_of(int idnum) - { return get_method_annotations_from(idnum, _methods_default_annotations); } - void set_method_annotations_of(int idnum, typeArrayOop anno) - { set_methods_annotations_of(idnum, anno, &_methods_annotations); } - void set_method_parameter_annotations_of(int idnum, typeArrayOop anno) - { set_methods_annotations_of(idnum, anno, &_methods_parameter_annotations); } - void set_method_default_annotations_of(int idnum, typeArrayOop anno) - { set_methods_annotations_of(idnum, anno, &_methods_default_annotations); } + Annotations* annotations() const { return _annotations; } + void set_annotations(Annotations* anno) { _annotations = anno; } + AnnotationArray* class_annotations() const { + if (annotations() == NULL) return NULL; + return annotations()->class_annotations(); + } + Array* fields_annotations() const { + if (annotations() == NULL) return NULL; + return annotations()->fields_annotations(); + } // allocation - DEFINE_ALLOCATE_PERMANENT(instanceKlass); instanceOop allocate_instance(TRAPS); - instanceOop allocate_permanent_instance(TRAPS); // additional member function to return a handle instanceHandle allocate_instance_handle(TRAPS) { return instanceHandle(THREAD, allocate_instance(THREAD)); } @@ -690,24 +675,24 @@ void set_osr_nmethods_head(nmethod* h) { _osr_nmethods_head = h; }; void add_osr_nmethod(nmethod* n); void remove_osr_nmethod(nmethod* n); - nmethod* lookup_osr_nmethod(const methodOop m, int bci, int level, bool match_level) const; + nmethod* lookup_osr_nmethod(Method* const m, int bci, int level, bool match_level) const; - // Breakpoint support (see methods on methodOop for details) + // Breakpoint support (see methods on Method* for details) BreakpointInfo* breakpoints() const { return _breakpoints; }; void set_breakpoints(BreakpointInfo* bps) { _breakpoints = bps; }; // support for stub routines - static ByteSize init_state_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(instanceKlass, _init_state)); } + static ByteSize init_state_offset() { return in_ByteSize(offset_of(InstanceKlass, _init_state)); } TRACE_DEFINE_OFFSET; - static ByteSize init_thread_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(instanceKlass, _init_thread)); } + static ByteSize init_thread_offset() { return in_ByteSize(offset_of(InstanceKlass, _init_thread)); } // subclass/subinterface checks - bool implements_interface(klassOop k) const; + bool implements_interface(Klass* k) const; // Access to the implementor of an interface. - klassOop implementor() const + Klass* implementor() const { - klassOop* k = (klassOop*)adr_implementor(); + Klass** k = adr_implementor(); if (k == NULL) { return NULL; } else { @@ -715,24 +700,24 @@ } } - void set_implementor(klassOop k) { + void set_implementor(Klass* k) { assert(is_interface(), "not interface"); - oop* addr = adr_implementor(); - oop_store_without_check(addr, k); + Klass** addr = adr_implementor(); + *addr = k; } int nof_implementors() const { - klassOop k = implementor(); + Klass* k = implementor(); if (k == NULL) { return 0; - } else if (k != this->as_klassOop()) { + } else if (k != this) { return 1; } else { return 2; } } - void add_implementor(klassOop k); // k is a new class that implements this interface + void add_implementor(Klass* k); // k is a new class that implements this interface void init_implementor(); // initialize // link this class into the implementors list of every interface it implements @@ -740,12 +725,11 @@ // virtual operations from Klass bool is_leaf_class() const { return _subklass == NULL; } - objArrayOop compute_secondary_supers(int num_extra_slots, TRAPS); - bool compute_is_subtype_of(klassOop k); + GrowableArray* compute_secondary_supers(int num_extra_slots); + bool compute_is_subtype_of(Klass* k); bool can_be_primary_super_slow() const; - klassOop java_super() const { return super(); } + Klass* java_super() const { return super(); } int oop_size(oop obj) const { return size_helper(); } - int klass_oop_size() const { return object_size(); } bool oop_is_instance_slow() const { return true; } // Iterators @@ -753,39 +737,46 @@ void do_nonstatic_fields(FieldClosure* cl); // including inherited fields void do_local_static_fields(void f(fieldDescriptor*, TRAPS), TRAPS); - void methods_do(void f(methodOop method)); - void array_klasses_do(void f(klassOop k)); - void with_array_klasses_do(void f(klassOop k)); + void methods_do(void f(Method* method)); + void array_klasses_do(void f(Klass* k)); + void array_klasses_do(void f(Klass* k, TRAPS), TRAPS); + void with_array_klasses_do(void f(Klass* k)); bool super_types_do(SuperTypeClosure* blk); - // Casting from klassOop - static instanceKlass* cast(klassOop k) { + // Casting from Klass* + static InstanceKlass* cast(Klass* k) { assert(k->is_klass(), "must be"); - Klass* kp = k->klass_part(); - assert(kp->null_vtbl() || kp->oop_is_instance_slow(), "cast to instanceKlass"); - return (instanceKlass*) kp; + assert(k->oop_is_instance(), "cast to InstanceKlass"); + return (InstanceKlass*) k; } // Sizing (in words) - static int header_size() { return align_object_offset(oopDesc::header_size() + sizeof(instanceKlass)/HeapWordSize); } + static int header_size() { return align_object_offset(sizeof(InstanceKlass)/HeapWordSize); } + static int size(int vtable_length, int itable_length, + int nonstatic_oop_map_size, + bool is_interface, bool is_anonymous) { + return align_object_size(header_size() + + align_object_offset(vtable_length) + + align_object_offset(itable_length) + + ((is_interface || is_anonymous) ? + align_object_offset(nonstatic_oop_map_size) : + nonstatic_oop_map_size) + + (is_interface ? (int)sizeof(Klass*)/HeapWordSize : 0) + + (is_anonymous ? (int)sizeof(Klass*)/HeapWordSize : 0)); + } + int size() const { return size(vtable_length(), + itable_length(), + nonstatic_oop_map_size(), + is_interface(), + is_anonymous()); + } - int object_size() const - { - return object_size(align_object_offset(vtable_length()) + - align_object_offset(itable_length()) + - ((is_interface() || is_anonymous()) ? - align_object_offset(nonstatic_oop_map_size()) : - nonstatic_oop_map_size()) + - (is_interface() ? (int)sizeof(klassOop)/HeapWordSize : 0) + - (is_anonymous() ? (int)sizeof(klassOop)/HeapWordSize : 0)); - } static int vtable_start_offset() { return header_size(); } - static int vtable_length_offset() { return oopDesc::header_size() + offset_of(instanceKlass, _vtable_len) / HeapWordSize; } - static int object_size(int extra) { return align_object_size(header_size() + extra); } + static int vtable_length_offset() { return offset_of(InstanceKlass, _vtable_len) / HeapWordSize; } - intptr_t* start_of_vtable() const { return ((intptr_t*)as_klassOop()) + vtable_start_offset(); } + intptr_t* start_of_vtable() const { return ((intptr_t*)this) + vtable_start_offset(); } intptr_t* start_of_itable() const { return start_of_vtable() + align_object_offset(vtable_length()); } - int itable_offset_in_words() const { return start_of_itable() - (intptr_t*)as_klassOop(); } + int itable_offset_in_words() const { return start_of_itable() - (intptr_t*)this; } intptr_t* end_of_itable() const { return start_of_itable() + itable_length(); } @@ -795,22 +786,22 @@ return (OopMapBlock*)(start_of_itable() + align_object_offset(itable_length())); } - oop* adr_implementor() const { + Klass** adr_implementor() const { if (is_interface()) { - return (oop*)(start_of_nonstatic_oop_maps() + + return (Klass**)(start_of_nonstatic_oop_maps() + nonstatic_oop_map_count()); } else { return NULL; } }; - oop* adr_host_klass() const { + Klass** adr_host_klass() const { if (is_anonymous()) { - oop* adr_impl = adr_implementor(); + Klass** adr_impl = adr_implementor(); if (adr_impl != NULL) { return adr_impl + 1; } else { - return (oop*)(start_of_nonstatic_oop_maps() + + return (Klass**)(start_of_nonstatic_oop_maps() + nonstatic_oop_map_count()); } } else { @@ -839,18 +830,27 @@ // Java vtable/itable klassVtable* vtable() const; // return new klassVtable wrapper - inline methodOop method_at_vtable(int index); + inline Method* method_at_vtable(int index); klassItable* itable() const; // return new klassItable wrapper - methodOop method_at_itable(klassOop holder, int index, TRAPS); + Method* method_at_itable(Klass* holder, int index, TRAPS); // Garbage collection + virtual void oops_do(OopClosure* cl); + void oop_follow_contents(oop obj); int oop_adjust_pointers(oop obj); - bool object_is_parsable() const { return _init_state != unparsable_by_gc; } - // Value of _init_state must be zero (unparsable_by_gc) when klass field is set. + + void clean_implementors_list(BoolObjectClosure* is_alive); + void clean_method_data(BoolObjectClosure* is_alive); - void follow_weak_klass_links( - BoolObjectClosure* is_alive, OopClosure* keep_alive); + // Explicit metaspace deallocation of fields + // For RedefineClasses, we need to deallocate instanceKlasses + void deallocate_contents(ClassLoaderData* loader_data); + + // The constant pool is on stack if any of the methods are executing or + // referenced by handles. + bool on_stack() const { return _constants->on_stack(); } + void release_C_heap_structures(); // Parallel Scavenge and Parallel Old @@ -860,11 +860,11 @@ const char* signature_name() const; // Iterators - int oop_oop_iterate(oop obj, OopClosure* blk) { + int oop_oop_iterate(oop obj, ExtendedOopClosure* blk) { return oop_oop_iterate_v(obj, blk); } - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { + int oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) { return oop_oop_iterate_v_m(obj, blk, mr); } @@ -884,6 +884,7 @@ ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceKlass_OOP_OOP_ITERATE_BACKWARDS_DECL) #endif // !SERIALGC + u2 idnum_allocated_count() const { return _idnum_allocated_count; } private: // initialization state #ifdef ASSERT @@ -894,7 +895,6 @@ void set_rewritten() { _misc_flags |= _misc_rewritten; } void set_init_thread(Thread *thread) { _init_thread = thread; } - u2 idnum_allocated_count() const { return _idnum_allocated_count; } // The RedefineClasses() API can cause new method idnums to be needed // which will cause the caches to grow. Safety requires different // cache management logic if the caches can grow instead of just @@ -910,29 +910,15 @@ void release_set_methods_cached_itable_indices(int* indices) { OrderAccess::release_store_ptr(&_methods_cached_itable_indices, indices); } - inline typeArrayOop get_method_annotations_from(int idnum, objArrayOop annos); - void set_annotations(objArrayOop md, objArrayOop* md_p) { oop_store_without_check((oop*)md_p, (oop)md); } - void set_methods_annotations_of(int idnum, typeArrayOop anno, objArrayOop* md_p); + // Lock during initialization + volatile oop init_lock() const; + void set_init_lock(oop value) { klass_oop_store(&_init_lock, value); } + void fence_and_clear_init_lock(); // after fully_initialized // Offsets for memory management - oop* adr_array_klasses() const { return (oop*)&this->_array_klasses;} - oop* adr_methods() const { return (oop*)&this->_methods;} - oop* adr_method_ordering() const { return (oop*)&this->_method_ordering;} - oop* adr_local_interfaces() const { return (oop*)&this->_local_interfaces;} - oop* adr_transitive_interfaces() const { return (oop*)&this->_transitive_interfaces;} - oop* adr_fields() const { return (oop*)&this->_fields;} - oop* adr_constants() const { return (oop*)&this->_constants;} - oop* adr_class_loader() const { return (oop*)&this->_class_loader;} oop* adr_protection_domain() const { return (oop*)&this->_protection_domain;} oop* adr_signers() const { return (oop*)&this->_signers;} - oop* adr_inner_classes() const { return (oop*)&this->_inner_classes;} - oop* adr_methods_jmethod_ids() const { return (oop*)&this->_methods_jmethod_ids;} - oop* adr_methods_cached_itable_indices() const { return (oop*)&this->_methods_cached_itable_indices;} - oop* adr_class_annotations() const { return (oop*)&this->_class_annotations;} - oop* adr_fields_annotations() const { return (oop*)&this->_fields_annotations;} - oop* adr_methods_annotations() const { return (oop*)&this->_methods_annotations;} - oop* adr_methods_parameter_annotations() const { return (oop*)&this->_methods_parameter_annotations;} - oop* adr_methods_default_annotations() const { return (oop*)&this->_methods_default_annotations;} + oop* adr_init_lock() const { return (oop*)&this->_init_lock;} // Static methods that are used to implement member methods where an exposed this pointer // is needed due to possible GCs @@ -942,21 +928,21 @@ static void eager_initialize_impl (instanceKlassHandle this_oop); static void set_initialization_state_and_notify_impl (instanceKlassHandle this_oop, ClassState state, TRAPS); static void call_class_initializer_impl (instanceKlassHandle this_oop, TRAPS); - static klassOop array_klass_impl (instanceKlassHandle this_oop, bool or_null, int n, TRAPS); + static Klass* array_klass_impl (instanceKlassHandle this_oop, bool or_null, int n, TRAPS); static void do_local_static_fields_impl (instanceKlassHandle this_oop, void f(fieldDescriptor* fd, TRAPS), TRAPS); /* jni_id_for_impl for jfieldID only */ static JNIid* jni_id_for_impl (instanceKlassHandle this_oop, int offset); // Returns the array class for the n'th dimension - klassOop array_klass_impl(bool or_null, int n, TRAPS); + Klass* array_klass_impl(bool or_null, int n, TRAPS); // Returns the array class with this class as element type - klassOop array_klass_impl(bool or_null, TRAPS); + Klass* array_klass_impl(bool or_null, TRAPS); public: - // sharing support + // CDS support - remove and restore oops from metadata. Oops are not shared. virtual void remove_unshareable_info(); - virtual void shared_symbols_iterate(SymbolClosure* closure); + virtual void restore_unshareable_info(TRAPS); // jvm support jint compute_modifier_flags(TRAPS) const; @@ -967,7 +953,13 @@ public: // Printing +#ifndef PRODUCT + void print_on(outputStream* st) const; +#endif + void print_value_on(outputStream* st) const; + void oop_print_value_on(oop obj, outputStream* st); + #ifndef PRODUCT void oop_print_on (oop obj, outputStream* st); @@ -975,12 +967,15 @@ bool is_dependent_nmethod(nmethod* nm); #endif + const char* internal_name() const; + // Verification - const char* internal_name() const; + void verify_on(outputStream* st); + void oop_verify_on(oop obj, outputStream* st); }; -inline methodOop instanceKlass::method_at_vtable(int index) { +inline Method* InstanceKlass::method_at_vtable(int index) { #ifndef PRODUCT assert(index >= 0, "valid vtable index"); if (DebugVtables) { @@ -991,18 +986,11 @@ return ve[index].method(); } -inline typeArrayOop instanceKlass::get_method_annotations_from(int idnum, objArrayOop annos) { - if (annos == NULL || annos->length() <= idnum) { - return NULL; - } - return typeArrayOop(annos->obj_at(idnum)); -} - // for adding methods // UNSET_IDNUM return means no more ids available -inline u2 instanceKlass::next_method_idnum() { - if (_idnum_allocated_count == constMethodOopDesc::MAX_IDNUM) { - return constMethodOopDesc::UNSET_IDNUM; // no more ids available +inline u2 InstanceKlass::next_method_idnum() { + if (_idnum_allocated_count == ConstMethod::MAX_IDNUM) { + return ConstMethod::UNSET_IDNUM; // no more ids available } else { return _idnum_allocated_count++; } @@ -1013,7 +1001,7 @@ class JNIid: public CHeapObj { friend class VMStructs; private: - klassOop _holder; + Klass* _holder; JNIid* _next; int _offset; #ifdef ASSERT @@ -1022,45 +1010,42 @@ public: // Accessors - klassOop holder() const { return _holder; } + Klass* holder() const { return _holder; } int offset() const { return _offset; } JNIid* next() { return _next; } // Constructor - JNIid(klassOop holder, int offset, JNIid* next); + JNIid(Klass* holder, int offset, JNIid* next); // Identifier lookup JNIid* find(int offset); bool find_local_field(fieldDescriptor* fd) { - return instanceKlass::cast(holder())->find_local_field_from_offset(offset(), true, fd); + return InstanceKlass::cast(holder())->find_local_field_from_offset(offset(), true, fd); } - // Garbage collection support - oop* holder_addr() { return (oop*)&_holder; } - void oops_do(OopClosure* f); static void deallocate(JNIid* id); // Debugging #ifdef ASSERT bool is_static_field_id() const { return _is_static_field_id; } void set_is_static_field_id() { _is_static_field_id = true; } #endif - void verify(klassOop holder); + void verify(Klass* holder); }; // If breakpoints are more numerous than just JVMTI breakpoints, // consider compressing this data structure. -// It is currently a simple linked list defined in methodOop.hpp. +// It is currently a simple linked list defined in method.hpp. class BreakpointInfo; // A collection point for interesting information about the previous -// version(s) of an instanceKlass. This class uses weak references to +// version(s) of an InstanceKlass. This class uses weak references to // the information so that the information may be collected as needed // by the system. If the information is shared, then a regular // reference must be used because a weak reference would be seen as // collectible. A GrowableArray of PreviousVersionNodes is attached -// to the instanceKlass as needed. See PreviousVersionWalker below. +// to the InstanceKlass as needed. See PreviousVersionWalker below. class PreviousVersionNode : public CHeapObj { private: // A shared ConstantPool is never collected so we'll always have @@ -1068,23 +1053,23 @@ // have a weak reference to a non-shared ConstantPool until all // of the methods (EMCP or obsolete) have been collected; the // non-shared ConstantPool becomes collectible at that point. - jobject _prev_constant_pool; // regular or weak reference + ConstantPool* _prev_constant_pool; // regular or weak reference bool _prev_cp_is_weak; // true if not a shared ConstantPool - // If the previous version of the instanceKlass doesn't have any + // If the previous version of the InstanceKlass doesn't have any // EMCP methods, then _prev_EMCP_methods will be NULL. If all the // EMCP methods have been collected, then _prev_EMCP_methods can // have a length of zero. - GrowableArray* _prev_EMCP_methods; + GrowableArray* _prev_EMCP_methods; public: - PreviousVersionNode(jobject prev_constant_pool, bool prev_cp_is_weak, - GrowableArray* prev_EMCP_methods); + PreviousVersionNode(ConstantPool* prev_constant_pool, bool prev_cp_is_weak, + GrowableArray* prev_EMCP_methods); ~PreviousVersionNode(); - jobject prev_constant_pool() const { + ConstantPool* prev_constant_pool() const { return _prev_constant_pool; } - GrowableArray* prev_EMCP_methods() const { + GrowableArray* prev_EMCP_methods() const { return _prev_EMCP_methods; } }; @@ -1094,7 +1079,7 @@ class PreviousVersionInfo : public ResourceObj { private: constantPoolHandle _prev_constant_pool_handle; - // If the previous version of the instanceKlass doesn't have any + // If the previous version of the InstanceKlass doesn't have any // EMCP methods, then _prev_EMCP_methods will be NULL. Since the // methods cannot be collected while we hold a handle, // _prev_EMCP_methods should never have a length of zero. @@ -1137,7 +1122,7 @@ PreviousVersionInfo * _current_p; public: - PreviousVersionWalker(instanceKlass *ik); + PreviousVersionWalker(InstanceKlass *ik); ~PreviousVersionWalker(); // Return the interesting information for the next previous version @@ -1178,10 +1163,10 @@ }; // An iterator that's used to access the inner classes indices in the -// instanceKlass::_inner_classes array. +// InstanceKlass::_inner_classes array. class InnerClassesIterator : public StackObj { private: - typeArrayHandle _inner_classes; + Array* _inner_classes; int _length; int _idx; public: @@ -1195,12 +1180,12 @@ // attribute data, or it should be // n*inner_class_next_offset+enclosing_method_attribute_size // if it also contains the EnclosingMethod data. - assert((_length % instanceKlass::inner_class_next_offset == 0 || - _length % instanceKlass::inner_class_next_offset == instanceKlass::enclosing_method_attribute_size), + assert((_length % InstanceKlass::inner_class_next_offset == 0 || + _length % InstanceKlass::inner_class_next_offset == InstanceKlass::enclosing_method_attribute_size), "just checking"); // Remove the enclosing_method portion if exists. - if (_length % instanceKlass::inner_class_next_offset == instanceKlass::enclosing_method_attribute_size) { - _length -= instanceKlass::enclosing_method_attribute_size; + if (_length % InstanceKlass::inner_class_next_offset == InstanceKlass::enclosing_method_attribute_size) { + _length -= InstanceKlass::enclosing_method_attribute_size; } } else { _length = 0; @@ -1213,7 +1198,7 @@ } void next() { - _idx += instanceKlass::inner_class_next_offset; + _idx += InstanceKlass::inner_class_next_offset; } bool done() const { @@ -1221,38 +1206,38 @@ } u2 inner_class_info_index() const { - return _inner_classes->ushort_at( - _idx + instanceKlass::inner_class_inner_class_info_offset); + return _inner_classes->at( + _idx + InstanceKlass::inner_class_inner_class_info_offset); } void set_inner_class_info_index(u2 index) { - _inner_classes->ushort_at_put( - _idx + instanceKlass::inner_class_inner_class_info_offset, index); + _inner_classes->at_put( + _idx + InstanceKlass::inner_class_inner_class_info_offset, index); } u2 outer_class_info_index() const { - return _inner_classes->ushort_at( - _idx + instanceKlass::inner_class_outer_class_info_offset); + return _inner_classes->at( + _idx + InstanceKlass::inner_class_outer_class_info_offset); } void set_outer_class_info_index(u2 index) { - _inner_classes->ushort_at_put( - _idx + instanceKlass::inner_class_outer_class_info_offset, index); + _inner_classes->at_put( + _idx + InstanceKlass::inner_class_outer_class_info_offset, index); } u2 inner_name_index() const { - return _inner_classes->ushort_at( - _idx + instanceKlass::inner_class_inner_name_offset); + return _inner_classes->at( + _idx + InstanceKlass::inner_class_inner_name_offset); } void set_inner_name_index(u2 index) { - _inner_classes->ushort_at_put( - _idx + instanceKlass::inner_class_inner_name_offset, index); + _inner_classes->at_put( + _idx + InstanceKlass::inner_class_inner_name_offset, index); } u2 inner_access_flags() const { - return _inner_classes->ushort_at( - _idx + instanceKlass::inner_class_access_flags_offset); + return _inner_classes->at( + _idx + InstanceKlass::inner_class_access_flags_offset); } }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/instanceKlassKlass.cpp --- a/src/share/vm/oops/instanceKlassKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,790 +0,0 @@ -/* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/javaClasses.hpp" -#include "classfile/systemDictionary.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "interpreter/oopMapCache.hpp" -#include "memory/gcLocker.hpp" -#include "oops/constantPoolOop.hpp" -#include "oops/instanceKlass.hpp" -#include "oops/instanceMirrorKlass.hpp" -#include "oops/instanceKlassKlass.hpp" -#include "oops/instanceRefKlass.hpp" -#include "oops/objArrayKlassKlass.hpp" -#include "oops/objArrayOop.hpp" -#include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" -#include "oops/symbol.hpp" -#include "oops/typeArrayOop.hpp" -#include "prims/jvmtiExport.hpp" -#include "runtime/fieldDescriptor.hpp" -#ifndef SERIALGC -#include "gc_implementation/parNew/parOopClosures.inline.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" -#include "memory/cardTableRS.hpp" -#include "oops/oop.pcgc.inline.hpp" -#endif - -klassOop instanceKlassKlass::create_klass(TRAPS) { - instanceKlassKlass o; - KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); - KlassHandle k = base_create_klass(h_this_klass, header_size(), o.vtbl_value(), CHECK_NULL); - // Make sure size calculation is right - assert(k()->size() == align_object_size(header_size()), "wrong size for object"); - java_lang_Class::create_mirror(k, CHECK_NULL); // Allocate mirror - return k(); -} - -int instanceKlassKlass::oop_size(oop obj) const { - assert(obj->is_klass(), "must be klass"); - return instanceKlass::cast(klassOop(obj))->object_size(); -} - -bool instanceKlassKlass::oop_is_parsable(oop obj) const { - assert(obj->is_klass(), "must be klass"); - instanceKlass* ik = instanceKlass::cast(klassOop(obj)); - return (!ik->null_vtbl()) && ik->object_is_parsable(); -} - -void instanceKlassKlass::iterate_c_heap_oops(instanceKlass* ik, - OopClosure* closure) { - if (ik->oop_map_cache() != NULL) { - ik->oop_map_cache()->oop_iterate(closure); - } - - if (ik->jni_ids() != NULL) { - ik->jni_ids()->oops_do(closure); - } -} - -void instanceKlassKlass::oop_follow_contents(oop obj) { - assert(obj->is_klass(),"must be a klass"); - assert(klassOop(obj)->klass_part()->oop_is_instance_slow(), "must be instance klass"); - - instanceKlass* ik = instanceKlass::cast(klassOop(obj)); - { - HandleMark hm; - ik->vtable()->oop_follow_contents(); - ik->itable()->oop_follow_contents(); - } - - MarkSweep::mark_and_push(ik->adr_array_klasses()); - MarkSweep::mark_and_push(ik->adr_methods()); - MarkSweep::mark_and_push(ik->adr_method_ordering()); - MarkSweep::mark_and_push(ik->adr_local_interfaces()); - MarkSweep::mark_and_push(ik->adr_transitive_interfaces()); - MarkSweep::mark_and_push(ik->adr_fields()); - MarkSweep::mark_and_push(ik->adr_constants()); - MarkSweep::mark_and_push(ik->adr_class_loader()); - MarkSweep::mark_and_push(ik->adr_inner_classes()); - MarkSweep::mark_and_push(ik->adr_protection_domain()); - if (ik->adr_host_klass() != NULL) { - MarkSweep::mark_and_push(ik->adr_host_klass()); - } - MarkSweep::mark_and_push(ik->adr_signers()); - MarkSweep::mark_and_push(ik->adr_class_annotations()); - MarkSweep::mark_and_push(ik->adr_fields_annotations()); - MarkSweep::mark_and_push(ik->adr_methods_annotations()); - MarkSweep::mark_and_push(ik->adr_methods_parameter_annotations()); - MarkSweep::mark_and_push(ik->adr_methods_default_annotations()); - - // We do not follow adr_implementor() here. It is followed later - // in instanceKlass::follow_weak_klass_links() - - klassKlass::oop_follow_contents(obj); - - iterate_c_heap_oops(ik, &MarkSweep::mark_and_push_closure); -} - -#ifndef SERIALGC -void instanceKlassKlass::oop_follow_contents(ParCompactionManager* cm, - oop obj) { - assert(obj->is_klass(),"must be a klass"); - assert(klassOop(obj)->klass_part()->oop_is_instance_slow(), "must be instance klass"); - - instanceKlass* ik = instanceKlass::cast(klassOop(obj)); - ik->vtable()->oop_follow_contents(cm); - ik->itable()->oop_follow_contents(cm); - - PSParallelCompact::mark_and_push(cm, ik->adr_array_klasses()); - PSParallelCompact::mark_and_push(cm, ik->adr_methods()); - PSParallelCompact::mark_and_push(cm, ik->adr_method_ordering()); - PSParallelCompact::mark_and_push(cm, ik->adr_local_interfaces()); - PSParallelCompact::mark_and_push(cm, ik->adr_transitive_interfaces()); - PSParallelCompact::mark_and_push(cm, ik->adr_fields()); - PSParallelCompact::mark_and_push(cm, ik->adr_constants()); - PSParallelCompact::mark_and_push(cm, ik->adr_class_loader()); - PSParallelCompact::mark_and_push(cm, ik->adr_inner_classes()); - PSParallelCompact::mark_and_push(cm, ik->adr_protection_domain()); - if (ik->adr_host_klass() != NULL) { - PSParallelCompact::mark_and_push(cm, ik->adr_host_klass()); - } - PSParallelCompact::mark_and_push(cm, ik->adr_signers()); - PSParallelCompact::mark_and_push(cm, ik->adr_class_annotations()); - PSParallelCompact::mark_and_push(cm, ik->adr_fields_annotations()); - PSParallelCompact::mark_and_push(cm, ik->adr_methods_annotations()); - PSParallelCompact::mark_and_push(cm, ik->adr_methods_parameter_annotations()); - PSParallelCompact::mark_and_push(cm, ik->adr_methods_default_annotations()); - - // We do not follow adr_implementor() here. It is followed later - // in instanceKlass::follow_weak_klass_links() - - klassKlass::oop_follow_contents(cm, obj); - - PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); - iterate_c_heap_oops(ik, &mark_and_push_closure); -} -#endif // SERIALGC - -int instanceKlassKlass::oop_oop_iterate(oop obj, OopClosure* blk) { - assert(obj->is_klass(),"must be a klass"); - assert(klassOop(obj)->klass_part()->oop_is_instance_slow(), "must be instance klass"); - instanceKlass* ik = instanceKlass::cast(klassOop(obj)); - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = ik->object_size(); - - ik->vtable()->oop_oop_iterate(blk); - ik->itable()->oop_oop_iterate(blk); - - blk->do_oop(ik->adr_array_klasses()); - blk->do_oop(ik->adr_methods()); - blk->do_oop(ik->adr_method_ordering()); - blk->do_oop(ik->adr_local_interfaces()); - blk->do_oop(ik->adr_transitive_interfaces()); - blk->do_oop(ik->adr_fields()); - blk->do_oop(ik->adr_constants()); - blk->do_oop(ik->adr_class_loader()); - blk->do_oop(ik->adr_protection_domain()); - if (ik->adr_host_klass() != NULL) { - blk->do_oop(ik->adr_host_klass()); - } - blk->do_oop(ik->adr_signers()); - blk->do_oop(ik->adr_inner_classes()); - if (ik->adr_implementor() != NULL) { - blk->do_oop(ik->adr_implementor()); - } - blk->do_oop(ik->adr_class_annotations()); - blk->do_oop(ik->adr_fields_annotations()); - blk->do_oop(ik->adr_methods_annotations()); - blk->do_oop(ik->adr_methods_parameter_annotations()); - blk->do_oop(ik->adr_methods_default_annotations()); - - klassKlass::oop_oop_iterate(obj, blk); - - if(ik->oop_map_cache() != NULL) ik->oop_map_cache()->oop_iterate(blk); - return size; -} - -int instanceKlassKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, - MemRegion mr) { - assert(obj->is_klass(),"must be a klass"); - assert(klassOop(obj)->klass_part()->oop_is_instance_slow(), "must be instance klass"); - instanceKlass* ik = instanceKlass::cast(klassOop(obj)); - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = ik->object_size(); - - ik->vtable()->oop_oop_iterate_m(blk, mr); - ik->itable()->oop_oop_iterate_m(blk, mr); - - oop* adr; - adr = ik->adr_array_klasses(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_methods(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_method_ordering(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_local_interfaces(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_transitive_interfaces(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_fields(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_constants(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_class_loader(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_protection_domain(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_host_klass(); - if (adr != NULL && mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_signers(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_inner_classes(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_implementor(); - if (adr != NULL && mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_class_annotations(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_fields_annotations(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_methods_annotations(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_methods_parameter_annotations(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = ik->adr_methods_default_annotations(); - if (mr.contains(adr)) blk->do_oop(adr); - - klassKlass::oop_oop_iterate_m(obj, blk, mr); - - if(ik->oop_map_cache() != NULL) ik->oop_map_cache()->oop_iterate(blk, mr); - return size; -} - -int instanceKlassKlass::oop_adjust_pointers(oop obj) { - assert(obj->is_klass(),"must be a klass"); - assert(klassOop(obj)->klass_part()->oop_is_instance_slow(), "must be instance klass"); - - instanceKlass* ik = instanceKlass::cast(klassOop(obj)); - ik->vtable()->oop_adjust_pointers(); - ik->itable()->oop_adjust_pointers(); - - MarkSweep::adjust_pointer(ik->adr_array_klasses()); - MarkSweep::adjust_pointer(ik->adr_methods()); - MarkSweep::adjust_pointer(ik->adr_method_ordering()); - MarkSweep::adjust_pointer(ik->adr_local_interfaces()); - MarkSweep::adjust_pointer(ik->adr_transitive_interfaces()); - MarkSweep::adjust_pointer(ik->adr_fields()); - MarkSweep::adjust_pointer(ik->adr_constants()); - MarkSweep::adjust_pointer(ik->adr_class_loader()); - MarkSweep::adjust_pointer(ik->adr_protection_domain()); - if (ik->adr_host_klass() != NULL) { - MarkSweep::adjust_pointer(ik->adr_host_klass()); - } - MarkSweep::adjust_pointer(ik->adr_signers()); - MarkSweep::adjust_pointer(ik->adr_inner_classes()); - if (ik->adr_implementor() != NULL) { - MarkSweep::adjust_pointer(ik->adr_implementor()); - } - MarkSweep::adjust_pointer(ik->adr_class_annotations()); - MarkSweep::adjust_pointer(ik->adr_fields_annotations()); - MarkSweep::adjust_pointer(ik->adr_methods_annotations()); - MarkSweep::adjust_pointer(ik->adr_methods_parameter_annotations()); - MarkSweep::adjust_pointer(ik->adr_methods_default_annotations()); - - iterate_c_heap_oops(ik, &MarkSweep::adjust_root_pointer_closure); - - return klassKlass::oop_adjust_pointers(obj); -} - -#ifndef SERIALGC -void instanceKlassKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { - instanceKlass* ik = instanceKlass::cast(klassOop(obj)); - - oop* loader_addr = ik->adr_class_loader(); - if (PSScavenge::should_scavenge(loader_addr)) { - pm->claim_or_forward_depth(loader_addr); - } - - oop* pd_addr = ik->adr_protection_domain(); - if (PSScavenge::should_scavenge(pd_addr)) { - pm->claim_or_forward_depth(pd_addr); - } - - oop* hk_addr = ik->adr_host_klass(); - if (hk_addr != NULL && PSScavenge::should_scavenge(hk_addr)) { - pm->claim_or_forward_depth(hk_addr); - } - - oop* sg_addr = ik->adr_signers(); - if (PSScavenge::should_scavenge(sg_addr)) { - pm->claim_or_forward_depth(sg_addr); - } - - klassKlass::oop_push_contents(pm, obj); -} - -int instanceKlassKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { - assert(obj->is_klass(),"must be a klass"); - assert(klassOop(obj)->klass_part()->oop_is_instance_slow(), - "must be instance klass"); - - instanceKlass* ik = instanceKlass::cast(klassOop(obj)); - ik->vtable()->oop_update_pointers(cm); - ik->itable()->oop_update_pointers(cm); - - oop* const beg_oop = ik->oop_block_beg(); - oop* const end_oop = ik->oop_block_end(); - for (oop* cur_oop = beg_oop; cur_oop < end_oop; ++cur_oop) { - PSParallelCompact::adjust_pointer(cur_oop); - } - // embedded oops - if (ik->adr_implementor() != NULL) { - PSParallelCompact::adjust_pointer(ik->adr_implementor()); - } - if (ik->adr_host_klass() != NULL) { - PSParallelCompact::adjust_pointer(ik->adr_host_klass()); - } - - OopClosure* closure = PSParallelCompact::adjust_root_pointer_closure(); - iterate_c_heap_oops(ik, closure); - - klassKlass::oop_update_pointers(cm, obj); - return ik->object_size(); -} - -#endif // SERIALGC - -klassOop -instanceKlassKlass::allocate_instance_klass(Symbol* name, int vtable_len, int itable_len, - int static_field_size, - unsigned nonstatic_oop_map_count, - AccessFlags access_flags, - ReferenceType rt, - KlassHandle host_klass, TRAPS) { - - const int nonstatic_oop_map_size = - instanceKlass::nonstatic_oop_map_size(nonstatic_oop_map_count); - int size = align_object_offset(vtable_len) + align_object_offset(itable_len); - if (access_flags.is_interface() || !host_klass.is_null()) { - size += align_object_offset(nonstatic_oop_map_size); - } else { - size += nonstatic_oop_map_size; - } - if (access_flags.is_interface()) { - size += (int)sizeof(klassOop)/HeapWordSize; - } - if (!host_klass.is_null()) { - size += (int)sizeof(klassOop)/HeapWordSize; - } - size = instanceKlass::object_size(size); - - // Allocation - KlassHandle h_this_klass(THREAD, as_klassOop()); - KlassHandle k; - if (rt == REF_NONE) { - if (name != vmSymbols::java_lang_Class()) { - // regular klass - instanceKlass o; - k = base_create_klass(h_this_klass, size, o.vtbl_value(), CHECK_NULL); - } else { - // Class - instanceMirrorKlass o; - k = base_create_klass(h_this_klass, size, o.vtbl_value(), CHECK_NULL); - } - } else { - // reference klass - instanceRefKlass o; - k = base_create_klass(h_this_klass, size, o.vtbl_value(), CHECK_NULL); - } - { - No_Safepoint_Verifier no_safepoint; // until k becomes parsable - instanceKlass* ik = (instanceKlass*) k()->klass_part(); - assert(!k()->is_parsable(), "not expecting parsability yet."); - - // The sizes of these these three variables are used for determining the - // size of the instanceKlassOop. It is critical that these are set to the right - // sizes before the first GC, i.e., when we allocate the mirror. - ik->set_vtable_length(vtable_len); - ik->set_itable_length(itable_len); - ik->set_static_field_size(static_field_size); - ik->set_nonstatic_oop_map_size(nonstatic_oop_map_size); - ik->set_access_flags(access_flags); - ik->set_is_anonymous(!host_klass.is_null()); - assert(k()->size() == size, "wrong size for object"); - - ik->set_array_klasses(NULL); - ik->set_methods(NULL); - ik->set_method_ordering(NULL); - ik->set_local_interfaces(NULL); - ik->set_transitive_interfaces(NULL); - ik->init_implementor(); - ik->set_fields(NULL, 0); - ik->set_constants(NULL); - ik->set_class_loader(NULL); - ik->set_protection_domain(NULL); - ik->set_signers(NULL); - ik->set_source_file_name(NULL); - ik->set_source_debug_extension(NULL, 0); - ik->set_array_name(NULL); - ik->set_inner_classes(NULL); - ik->set_static_oop_field_count(0); - ik->set_nonstatic_field_size(0); - ik->set_is_marked_dependent(false); - ik->set_init_state(instanceKlass::allocated); - ik->set_init_thread(NULL); - ik->set_reference_type(rt); - ik->set_oop_map_cache(NULL); - ik->set_jni_ids(NULL); - ik->set_osr_nmethods_head(NULL); - ik->set_breakpoints(NULL); - ik->init_previous_versions(); - ik->set_generic_signature(NULL); - ik->release_set_methods_jmethod_ids(NULL); - ik->release_set_methods_cached_itable_indices(NULL); - ik->set_class_annotations(NULL); - ik->set_fields_annotations(NULL); - ik->set_methods_annotations(NULL); - ik->set_methods_parameter_annotations(NULL); - ik->set_methods_default_annotations(NULL); - ik->set_jvmti_cached_class_field_map(NULL); - ik->set_initial_method_idnum(0); - assert(k()->is_parsable(), "should be parsable here."); - - // initialize the non-header words to zero - intptr_t* p = (intptr_t*)k(); - for (int index = instanceKlass::header_size(); index < size; index++) { - p[index] = NULL_WORD; - } - - // To get verify to work - must be set to partial loaded before first GC point. - k()->set_partially_loaded(); - } - return k(); -} - - - -#ifndef PRODUCT - -// Printing - -#define BULLET " - " - -static const char* state_names[] = { - "unparseable_by_gc", "allocated", "loaded", "linked", "being_initialized", "fully_initialized", "initialization_error" -}; - - -void instanceKlassKlass::oop_print_on(oop obj, outputStream* st) { - assert(obj->is_klass(), "must be klass"); - instanceKlass* ik = instanceKlass::cast(klassOop(obj)); - klassKlass::oop_print_on(obj, st); - - st->print(BULLET"instance size: %d", ik->size_helper()); st->cr(); - st->print(BULLET"klass size: %d", ik->object_size()); st->cr(); - st->print(BULLET"access: "); ik->access_flags().print_on(st); st->cr(); - st->print(BULLET"state: "); st->print_cr(state_names[ik->_init_state]); - st->print(BULLET"name: "); ik->name()->print_value_on(st); st->cr(); - st->print(BULLET"super: "); ik->super()->print_value_on(st); st->cr(); - st->print(BULLET"sub: "); - Klass* sub = ik->subklass(); - int n; - for (n = 0; sub != NULL; n++, sub = sub->next_sibling()) { - if (n < MaxSubklassPrintSize) { - sub->as_klassOop()->print_value_on(st); - st->print(" "); - } - } - if (n >= MaxSubklassPrintSize) st->print("(%d more klasses...)", n - MaxSubklassPrintSize); - st->cr(); - - if (ik->is_interface()) { - st->print_cr(BULLET"nof implementors: %d", ik->nof_implementors()); - if (ik->nof_implementors() == 1) { - st->print_cr(BULLET"implementor: "); - st->print(" "); - ik->implementor()->print_value_on(st); - st->cr(); - } - } - - st->print(BULLET"arrays: "); ik->array_klasses()->print_value_on(st); st->cr(); - st->print(BULLET"methods: "); ik->methods()->print_value_on(st); st->cr(); - if (Verbose) { - objArrayOop methods = ik->methods(); - for(int i = 0; i < methods->length(); i++) { - tty->print("%d : ", i); methods->obj_at(i)->print_value(); tty->cr(); - } - } - st->print(BULLET"method ordering: "); ik->method_ordering()->print_value_on(st); st->cr(); - st->print(BULLET"local interfaces: "); ik->local_interfaces()->print_value_on(st); st->cr(); - st->print(BULLET"trans. interfaces: "); ik->transitive_interfaces()->print_value_on(st); st->cr(); - st->print(BULLET"constants: "); ik->constants()->print_value_on(st); st->cr(); - st->print(BULLET"class loader: "); ik->class_loader()->print_value_on(st); st->cr(); - st->print(BULLET"protection domain: "); ik->protection_domain()->print_value_on(st); st->cr(); - if (ik->host_klass() != NULL) { - st->print(BULLET"host class: "); ik->host_klass()->print_value_on(st); st->cr(); - } - st->print(BULLET"signers: "); ik->signers()->print_value_on(st); st->cr(); - if (ik->source_file_name() != NULL) { - st->print(BULLET"source file: "); - ik->source_file_name()->print_value_on(st); - st->cr(); - } - if (ik->source_debug_extension() != NULL) { - st->print(BULLET"source debug extension: "); - st->print_cr("%s", ik->source_debug_extension()); - st->cr(); - } - - { - ResourceMark rm; - // PreviousVersionInfo objects returned via PreviousVersionWalker - // contain a GrowableArray of handles. We have to clean up the - // GrowableArray _after_ the PreviousVersionWalker destructor - // has destroyed the handles. - { - bool have_pv = false; - PreviousVersionWalker pvw(ik); - for (PreviousVersionInfo * pv_info = pvw.next_previous_version(); - pv_info != NULL; pv_info = pvw.next_previous_version()) { - if (!have_pv) - st->print(BULLET"previous version: "); - have_pv = true; - pv_info->prev_constant_pool_handle()()->print_value_on(st); - } - if (have_pv) st->cr(); - } // pvw is cleaned up - } // rm is cleaned up - - if (ik->generic_signature() != NULL) { - st->print(BULLET"generic signature: "); - ik->generic_signature()->print_value_on(st); - st->cr(); - } - st->print(BULLET"inner classes: "); ik->inner_classes()->print_value_on(st); st->cr(); - st->print(BULLET"java mirror: "); ik->java_mirror()->print_value_on(st); st->cr(); - st->print(BULLET"vtable length %d (start addr: " INTPTR_FORMAT ")", ik->vtable_length(), ik->start_of_vtable()); st->cr(); - st->print(BULLET"itable length %d (start addr: " INTPTR_FORMAT ")", ik->itable_length(), ik->start_of_itable()); st->cr(); - st->print_cr(BULLET"---- static fields (%d words):", ik->static_field_size()); - FieldPrinter print_static_field(st); - ik->do_local_static_fields(&print_static_field); - st->print_cr(BULLET"---- non-static fields (%d words):", ik->nonstatic_field_size()); - FieldPrinter print_nonstatic_field(st); - ik->do_nonstatic_fields(&print_nonstatic_field); - - st->print(BULLET"non-static oop maps: "); - OopMapBlock* map = ik->start_of_nonstatic_oop_maps(); - OopMapBlock* end_map = map + ik->nonstatic_oop_map_count(); - while (map < end_map) { - st->print("%d-%d ", map->offset(), map->offset() + heapOopSize*(map->count() - 1)); - map++; - } - st->cr(); -} - -#endif //PRODUCT - -void instanceKlassKlass::oop_print_value_on(oop obj, outputStream* st) { - assert(obj->is_klass(), "must be klass"); - instanceKlass* ik = instanceKlass::cast(klassOop(obj)); - ik->name()->print_value_on(st); -} - -const char* instanceKlassKlass::internal_name() const { - return "{instance class}"; -} - -// Verification - -class VerifyFieldClosure: public OopClosure { - protected: - template void do_oop_work(T* p) { - guarantee(Universe::heap()->is_in(p), "should be in heap"); - oop obj = oopDesc::load_decode_heap_oop(p); - guarantee(obj->is_oop_or_null(), "should be in heap"); - } - public: - virtual void do_oop(oop* p) { VerifyFieldClosure::do_oop_work(p); } - virtual void do_oop(narrowOop* p) { VerifyFieldClosure::do_oop_work(p); } -}; - -void instanceKlassKlass::oop_verify_on(oop obj, outputStream* st) { - klassKlass::oop_verify_on(obj, st); - if (!obj->partially_loaded()) { - Thread *thread = Thread::current(); - instanceKlass* ik = instanceKlass::cast(klassOop(obj)); - -#ifndef PRODUCT - // Avoid redundant verifies - if (ik->_verify_count == Universe::verify_count()) return; - ik->_verify_count = Universe::verify_count(); -#endif - // Verify that klass is present in SystemDictionary - if (ik->is_loaded() && !ik->is_anonymous()) { - Symbol* h_name = ik->name(); - Handle h_loader (thread, ik->class_loader()); - Handle h_obj(thread, obj); - SystemDictionary::verify_obj_klass_present(h_obj, h_name, h_loader); - } - - // Verify static fields - VerifyFieldClosure blk; - - // Verify vtables - if (ik->is_linked()) { - ResourceMark rm(thread); - // $$$ This used to be done only for m/s collections. Doing it - // always seemed a valid generalization. (DLD -- 6/00) - ik->vtable()->verify(st); - } - - // Verify oop map cache - if (ik->oop_map_cache() != NULL) { - ik->oop_map_cache()->verify(); - } - - // Verify first subklass - if (ik->subklass_oop() != NULL) { - guarantee(ik->subklass_oop()->is_perm(), "should be in permspace"); - guarantee(ik->subklass_oop()->is_klass(), "should be klass"); - } - - // Verify siblings - klassOop super = ik->super(); - Klass* sib = ik->next_sibling(); - int sib_count = 0; - while (sib != NULL) { - if (sib == ik) { - fatal(err_msg("subclass cycle of length %d", sib_count)); - } - if (sib_count >= 100000) { - fatal(err_msg("suspiciously long subclass list %d", sib_count)); - } - guarantee(sib->as_klassOop()->is_klass(), "should be klass"); - guarantee(sib->as_klassOop()->is_perm(), "should be in permspace"); - guarantee(sib->super() == super, "siblings should have same superklass"); - sib = sib->next_sibling(); - } - - // Verify implementor fields - klassOop im = ik->implementor(); - if (im != NULL) { - guarantee(ik->is_interface(), "only interfaces should have implementor set"); - guarantee(im->is_perm(), "should be in permspace"); - guarantee(im->is_klass(), "should be klass"); - guarantee(!Klass::cast(klassOop(im))->is_interface() || im == ik->as_klassOop(), "implementors cannot be interfaces"); - } - - // Verify local interfaces - objArrayOop local_interfaces = ik->local_interfaces(); - guarantee(local_interfaces->is_perm(), "should be in permspace"); - guarantee(local_interfaces->is_objArray(), "should be obj array"); - int j; - for (j = 0; j < local_interfaces->length(); j++) { - oop e = local_interfaces->obj_at(j); - guarantee(e->is_klass() && Klass::cast(klassOop(e))->is_interface(), "invalid local interface"); - } - - // Verify transitive interfaces - objArrayOop transitive_interfaces = ik->transitive_interfaces(); - guarantee(transitive_interfaces->is_perm(), "should be in permspace"); - guarantee(transitive_interfaces->is_objArray(), "should be obj array"); - for (j = 0; j < transitive_interfaces->length(); j++) { - oop e = transitive_interfaces->obj_at(j); - guarantee(e->is_klass() && Klass::cast(klassOop(e))->is_interface(), "invalid transitive interface"); - } - - // Verify methods - objArrayOop methods = ik->methods(); - guarantee(methods->is_perm(), "should be in permspace"); - guarantee(methods->is_objArray(), "should be obj array"); - for (j = 0; j < methods->length(); j++) { - guarantee(methods->obj_at(j)->is_method(), "non-method in methods array"); - } - for (j = 0; j < methods->length() - 1; j++) { - methodOop m1 = methodOop(methods->obj_at(j)); - methodOop m2 = methodOop(methods->obj_at(j + 1)); - guarantee(m1->name()->fast_compare(m2->name()) <= 0, "methods not sorted correctly"); - } - - // Verify method ordering - typeArrayOop method_ordering = ik->method_ordering(); - guarantee(method_ordering->is_perm(), "should be in permspace"); - guarantee(method_ordering->is_typeArray(), "should be type array"); - int length = method_ordering->length(); - if (JvmtiExport::can_maintain_original_method_order() || - (UseSharedSpaces && length != 0)) { - guarantee(length == methods->length(), "invalid method ordering length"); - jlong sum = 0; - for (j = 0; j < length; j++) { - int original_index = method_ordering->int_at(j); - guarantee(original_index >= 0 && original_index < length, "invalid method ordering index"); - sum += original_index; - } - // Verify sum of indices 0,1,...,length-1 - guarantee(sum == ((jlong)length*(length-1))/2, "invalid method ordering sum"); - } else { - guarantee(length == 0, "invalid method ordering length"); - } - - // Verify JNI static field identifiers - if (ik->jni_ids() != NULL) { - ik->jni_ids()->verify(ik->as_klassOop()); - } - - // Verify other fields - if (ik->array_klasses() != NULL) { - guarantee(ik->array_klasses()->is_perm(), "should be in permspace"); - guarantee(ik->array_klasses()->is_klass(), "should be klass"); - } - guarantee(ik->fields()->is_perm(), "should be in permspace"); - guarantee(ik->fields()->is_typeArray(), "should be type array"); - guarantee(ik->constants()->is_perm(), "should be in permspace"); - guarantee(ik->constants()->is_constantPool(), "should be constant pool"); - guarantee(ik->inner_classes()->is_perm(), "should be in permspace"); - guarantee(ik->inner_classes()->is_typeArray(), "should be type array"); - if (ik->protection_domain() != NULL) { - guarantee(ik->protection_domain()->is_oop(), "should be oop"); - } - if (ik->host_klass() != NULL) { - guarantee(ik->host_klass()->is_oop(), "should be oop"); - } - if (ik->signers() != NULL) { - guarantee(ik->signers()->is_objArray(), "should be obj array"); - } - if (ik->class_annotations() != NULL) { - guarantee(ik->class_annotations()->is_typeArray(), "should be type array"); - } - if (ik->fields_annotations() != NULL) { - guarantee(ik->fields_annotations()->is_objArray(), "should be obj array"); - } - if (ik->methods_annotations() != NULL) { - guarantee(ik->methods_annotations()->is_objArray(), "should be obj array"); - } - if (ik->methods_parameter_annotations() != NULL) { - guarantee(ik->methods_parameter_annotations()->is_objArray(), "should be obj array"); - } - if (ik->methods_default_annotations() != NULL) { - guarantee(ik->methods_default_annotations()->is_objArray(), "should be obj array"); - } - } -} - - -bool instanceKlassKlass::oop_partially_loaded(oop obj) const { - assert(obj->is_klass(), "object must be klass"); - instanceKlass* ik = instanceKlass::cast(klassOop(obj)); - assert(ik->oop_is_instance(), "object must be instanceKlass"); - return ik->transitive_interfaces() == (objArrayOop) obj; // Check whether transitive_interfaces points to self -} - - -// The transitive_interfaces is the last field set when loading an object. -void instanceKlassKlass::oop_set_partially_loaded(oop obj) { - assert(obj->is_klass(), "object must be klass"); - instanceKlass* ik = instanceKlass::cast(klassOop(obj)); - // Set the layout helper to a place-holder value, until fuller initialization. - // (This allows asserts in oop_is_instance to succeed.) - ik->set_layout_helper(Klass::instance_layout_helper(0, true)); - assert(ik->oop_is_instance(), "object must be instanceKlass"); - assert(ik->transitive_interfaces() == NULL, "just checking"); - ik->set_transitive_interfaces((objArrayOop) obj); // Temporarily set transitive_interfaces to point to self -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/instanceKlassKlass.hpp --- a/src/share/vm/oops/instanceKlassKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_INSTANCEKLASSKLASS_HPP -#define SHARE_VM_OOPS_INSTANCEKLASSKLASS_HPP - -#include "oops/klassKlass.hpp" - -// An instanceKlassKlass is the klass of an instanceKlass - -class instanceKlassKlass : public klassKlass { - public: - // Dispatched operation - bool oop_is_klass() const { return true; } - bool oop_is_instanceKlass() const { return true; } - - int oop_size(oop obj) const; - int klass_oop_size() const { return object_size(); } - - // Allocation - DEFINE_ALLOCATE_PERMANENT(instanceKlassKlass); - static klassOop create_klass(TRAPS); - klassOop allocate_instance_klass(Symbol* name, - int vtable_len, - int itable_len, - int static_field_size, - unsigned int nonstatic_oop_map_count, - AccessFlags access_flags, - ReferenceType rt, - KlassHandle host_klass, - TRAPS); - - // Casting from klassOop - static instanceKlassKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_klass(), "cast to instanceKlassKlass"); - return (instanceKlassKlass*) k->klass_part(); - } - - // Sizing - static int header_size() { return oopDesc::header_size() + sizeof(instanceKlassKlass)/HeapWordSize; } - int object_size() const { return align_object_size(header_size()); } - - // Garbage collection - void oop_follow_contents(oop obj); - int oop_adjust_pointers(oop obj); - bool oop_is_parsable(oop obj) const; - - // Parallel Scavenge and Parallel Old - PARALLEL_GC_DECLS - - // Iterators - int oop_oop_iterate(oop obj, OopClosure* blk); - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr); - -private: - // Apply closure to the InstanceKlass oops that are outside the java heap. - inline void iterate_c_heap_oops(instanceKlass* ik, OopClosure* closure); - - public: - // Printing - void oop_print_value_on(oop obj, outputStream* st); -#ifndef PRODUCT - void oop_print_on(oop obj, outputStream* st); -#endif - - // Verification - const char* internal_name() const; - void oop_verify_on(oop obj, outputStream* st); - // tells whether obj is partially constructed (gc during class loading) - bool oop_partially_loaded(oop obj) const; - void oop_set_partially_loaded(oop obj); -}; - -#endif // SHARE_VM_OOPS_INSTANCEKLASSKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/instanceMirrorKlass.cpp --- a/src/share/vm/oops/instanceMirrorKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/instanceMirrorKlass.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,6 @@ #include "gc_interface/collectedHeap.inline.hpp" #include "memory/genOopClosures.inline.hpp" #include "memory/oopFactory.hpp" -#include "memory/permGen.hpp" #include "oops/instanceKlass.hpp" #include "oops/instanceMirrorKlass.hpp" #include "oops/instanceOop.hpp" @@ -37,6 +36,7 @@ #include "oops/symbol.hpp" #include "runtime/handles.inline.hpp" #ifndef SERIALGC +#include "gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp" #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #include "gc_implementation/g1/g1OopClosures.inline.hpp" #include "gc_implementation/g1/g1RemSet.inline.hpp" @@ -149,7 +149,19 @@ void instanceMirrorKlass::oop_follow_contents(oop obj) { - instanceKlass::oop_follow_contents(obj); + InstanceKlass::oop_follow_contents(obj); + + // Follow the klass field in the mirror. + Klass* klass = java_lang_Class::as_Klass(obj); + if (klass != NULL) { + MarkSweep::follow_klass(klass); + } else { + // If klass is NULL then this a mirror for a primitive type. + // We don't have to follow them, since they are handled as strong + // roots in Universe::oops_do. + assert(java_lang_Class::is_primitive(obj), "Sanity check"); + } + InstanceMirrorKlass_OOP_ITERATE( \ start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj), \ MarkSweep::mark_and_push(p), \ @@ -159,7 +171,19 @@ #ifndef SERIALGC void instanceMirrorKlass::oop_follow_contents(ParCompactionManager* cm, oop obj) { - instanceKlass::oop_follow_contents(cm, obj); + InstanceKlass::oop_follow_contents(cm, obj); + + // Follow the klass field in the mirror. + Klass* klass = java_lang_Class::as_Klass(obj); + if (klass != NULL) { + PSParallelCompact::follow_klass(cm, klass); + } else { + // If klass is NULL then this a mirror for a primitive type. + // We don't have to follow them, since they are handled as strong + // roots in Universe::oops_do. + assert(java_lang_Class::is_primitive(obj), "Sanity check"); + } + InstanceMirrorKlass_OOP_ITERATE( \ start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj), \ PSParallelCompact::mark_and_push(cm, p), \ @@ -169,7 +193,19 @@ int instanceMirrorKlass::oop_adjust_pointers(oop obj) { int size = oop_size(obj); - instanceKlass::oop_adjust_pointers(obj); + InstanceKlass::oop_adjust_pointers(obj); + + // Follow the klass field in the mirror. + Klass* klass = java_lang_Class::as_Klass(obj); + if (klass != NULL) { + MarkSweep::adjust_klass(klass); + } else { + // If klass is NULL then this a mirror for a primitive type. + // We don't have to follow them, since they are handled as strong + // roots in Universe::oops_do. + assert(java_lang_Class::is_primitive(obj), "Sanity check"); + } + InstanceMirrorKlass_OOP_ITERATE( \ start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj), \ MarkSweep::adjust_pointer(p), \ @@ -193,6 +229,12 @@ return oop_size(obj); \ +#define if_do_metadata_checked(closure, nv_suffix) \ + /* Make sure the non-virtual and the virtual versions match. */ \ + assert(closure->do_metadata##nv_suffix() == closure->do_metadata(), \ + "Inconsistency in do_metadata"); \ + if (closure->do_metadata##nv_suffix()) + // Macro to define instanceMirrorKlass::oop_oop_iterate for virtual/nonvirtual for // all closures. Macros calling macros above for each oop size. @@ -203,7 +245,15 @@ /* Get size before changing pointers */ \ SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk); \ \ - instanceKlass::oop_oop_iterate##nv_suffix(obj, closure); \ + InstanceKlass::oop_oop_iterate##nv_suffix(obj, closure); \ + \ + if_do_metadata_checked(closure, nv_suffix) { \ + Klass* klass = java_lang_Class::as_Klass(obj); \ + /* We'll get NULL for primitive mirrors. */ \ + if (klass != NULL) { \ + closure->do_klass##nv_suffix(klass); \ + } \ + } \ \ if (UseCompressedOops) { \ InstanceMirrorKlass_SPECIALIZED_OOP_ITERATE_DEFN(narrowOop, nv_suffix); \ @@ -220,7 +270,7 @@ /* Get size before changing pointers */ \ SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk); \ \ - instanceKlass::oop_oop_iterate_backwards##nv_suffix(obj, closure); \ + InstanceKlass::oop_oop_iterate_backwards##nv_suffix(obj, closure); \ \ if (UseCompressedOops) { \ InstanceMirrorKlass_SPECIALIZED_OOP_ITERATE_DEFN(narrowOop, nv_suffix); \ @@ -239,7 +289,18 @@ MemRegion mr) { \ SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk); \ \ - instanceKlass::oop_oop_iterate##nv_suffix##_m(obj, closure, mr); \ + InstanceKlass::oop_oop_iterate##nv_suffix##_m(obj, closure, mr); \ + \ + if_do_metadata_checked(closure, nv_suffix) { \ + if (mr.contains(obj)) { \ + Klass* klass = java_lang_Class::as_Klass(obj); \ + /* We'll get NULL for primitive mirrors. */ \ + if (klass != NULL) { \ + closure->do_klass##nv_suffix(klass); \ + } \ + } \ + } \ + \ if (UseCompressedOops) { \ InstanceMirrorKlass_BOUNDED_SPECIALIZED_OOP_ITERATE(narrowOop, nv_suffix, mr); \ } else { \ @@ -258,7 +319,11 @@ #ifndef SERIALGC void instanceMirrorKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { - instanceKlass::oop_push_contents(pm, obj); + // Note that we don't have to follow the mirror -> klass pointer, since all + // klasses that are dirty will be scavenged when we iterate over the + // ClassLoaderData objects. + + InstanceKlass::oop_push_contents(pm, obj); InstanceMirrorKlass_OOP_ITERATE( \ start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj),\ if (PSScavenge::should_scavenge(p)) { \ @@ -268,18 +333,31 @@ } int instanceMirrorKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { - instanceKlass::oop_update_pointers(cm, obj); + int size = oop_size(obj); + InstanceKlass::oop_update_pointers(cm, obj); + + // Follow the klass field in the mirror. + Klass* klass = java_lang_Class::as_Klass(obj); + if (klass != NULL) { + PSParallelCompact::adjust_klass(cm, klass); + } else { + // If klass is NULL then this a mirror for a primitive type. + // We don't have to follow them, since they are handled as strong + // roots in Universe::oops_do. + assert(java_lang_Class::is_primitive(obj), "Sanity check"); + } + InstanceMirrorKlass_OOP_ITERATE( \ start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj),\ PSParallelCompact::adjust_pointer(p), \ assert_nothing) - return oop_size(obj); + return size; } #endif // SERIALGC int instanceMirrorKlass::instance_size(KlassHandle k) { if (k() != NULL && k->oop_is_instance()) { - return align_object_size(size_helper() + instanceKlass::cast(k())->static_field_size()); + return align_object_size(size_helper() + InstanceKlass::cast(k())->static_field_size()); } return size_helper(); } @@ -287,7 +365,7 @@ instanceOop instanceMirrorKlass::allocate_instance(KlassHandle k, TRAPS) { // Query before forming handle. int size = instance_size(k); - KlassHandle h_k(THREAD, as_klassOop()); + KlassHandle h_k(THREAD, this); instanceOop i = (instanceOop) CollectedHeap::Class_obj_allocate(h_k, size, k, CHECK_NULL); return i; } @@ -297,9 +375,9 @@ } int instanceMirrorKlass::compute_static_oop_field_count(oop obj) { - klassOop k = java_lang_Class::as_klassOop(obj); - if (k != NULL && k->klass_part()->oop_is_instance()) { - return instanceKlass::cast(k)->static_oop_field_count(); + Klass* k = java_lang_Class::as_Klass(obj); + if (k != NULL && k->oop_is_instance()) { + return InstanceKlass::cast(k)->static_oop_field_count(); } return 0; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/instanceMirrorKlass.hpp --- a/src/share/vm/oops/instanceMirrorKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/instanceMirrorKlass.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,9 +25,11 @@ #ifndef SHARE_VM_OOPS_INSTANCEMIRRORKLASS_HPP #define SHARE_VM_OOPS_INSTANCEMIRRORKLASS_HPP +#include "classfile/systemDictionary.hpp" #include "oops/instanceKlass.hpp" +#include "runtime/handles.hpp" -// An instanceMirrorKlass is a specialized instanceKlass for +// An instanceMirrorKlass is a specialized InstanceKlass for // java.lang.Class instances. These instances are special because // they contain the static fields of the class in addition to the // normal fields of Class. This means they are variable sized @@ -35,20 +37,26 @@ // iteration of their oops. -class instanceMirrorKlass: public instanceKlass { +class instanceMirrorKlass: public InstanceKlass { friend class VMStructs; + friend class InstanceKlass; private: static int _offset_of_static_fields; + // Constructor + instanceMirrorKlass(int vtable_len, int itable_len, int static_field_size, int nonstatic_oop_map_size, ReferenceType rt, AccessFlags access_flags, bool is_anonymous) + : InstanceKlass(vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt, access_flags, is_anonymous) {} + public: + instanceMirrorKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); } // Type testing bool oop_is_instanceMirror() const { return true; } - // Casting from klassOop - static instanceMirrorKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_instanceMirror(), "cast to instanceMirrorKlass"); - return (instanceMirrorKlass*) k->klass_part(); + // Casting from Klass* + static instanceMirrorKlass* cast(Klass* k) { + assert(k->oop_is_instanceMirror(), "cast to instanceMirrorKlass"); + return (instanceMirrorKlass*) k; } // Returns the size of the instance including the extra static fields. @@ -76,7 +84,6 @@ int instance_size(KlassHandle k); // allocation - DEFINE_ALLOCATE_PERMANENT(instanceMirrorKlass); instanceOop allocate_instance(KlassHandle k, TRAPS); // Garbage collection @@ -86,10 +93,10 @@ // Parallel Scavenge and Parallel Old PARALLEL_GC_DECLS - int oop_oop_iterate(oop obj, OopClosure* blk) { + int oop_oop_iterate(oop obj, ExtendedOopClosure* blk) { return oop_oop_iterate_v(obj, blk); } - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { + int oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) { return oop_oop_iterate_v_m(obj, blk, mr); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/instanceOop.hpp --- a/src/share/vm/oops/instanceOop.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/instanceOop.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ // If compressed, the offset of the fields of the instance may not be aligned. static int base_offset_in_bytes() { - return UseCompressedOops ? + return UseCompressedKlassPointers ? klass_gap_offset_in_bytes() : sizeof(instanceOopDesc); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/instanceRefKlass.cpp --- a/src/share/vm/oops/instanceRefKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/instanceRefKlass.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -58,7 +58,7 @@ if (!referent->is_gc_marked() && MarkSweep::ref_processor()->discover_reference(obj, ref->reference_type())) { // reference was discovered, referent will be traversed later - ref->instanceKlass::oop_follow_contents(obj); + ref->InstanceKlass::oop_follow_contents(obj); debug_only( if(TraceReferenceGC && PrintGCDetails) { gclog_or_tty->print_cr(" Non NULL enqueued " INTPTR_FORMAT, obj); @@ -109,7 +109,7 @@ } ) MarkSweep::mark_and_push(next_addr); - ref->instanceKlass::oop_follow_contents(obj); + ref->InstanceKlass::oop_follow_contents(obj); } void instanceRefKlass::oop_follow_contents(oop obj) { @@ -138,7 +138,7 @@ PSParallelCompact::ref_processor()-> discover_reference(obj, ref->reference_type())) { // reference already enqueued, referent will be traversed later - ref->instanceKlass::oop_follow_contents(cm, obj); + ref->InstanceKlass::oop_follow_contents(cm, obj); debug_only( if(TraceReferenceGC && PrintGCDetails) { gclog_or_tty->print_cr(" Non NULL enqueued " INTPTR_FORMAT, obj); @@ -183,7 +183,7 @@ #endif } PSParallelCompact::mark_and_push(cm, next_addr); - ref->instanceKlass::oop_follow_contents(cm, obj); + ref->InstanceKlass::oop_follow_contents(cm, obj); } void instanceRefKlass::oop_follow_contents(ParCompactionManager* cm, @@ -231,7 +231,7 @@ int instanceRefKlass::oop_adjust_pointers(oop obj) { int size = size_helper(); - instanceKlass::oop_adjust_pointers(obj); + InstanceKlass::oop_adjust_pointers(obj); if (UseCompressedOops) { specialized_oop_adjust_pointers(this, obj); @@ -308,7 +308,7 @@ /* Get size before changing pointers */ \ SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\ \ - int size = instanceKlass::oop_oop_iterate##nv_suffix(obj, closure); \ + int size = InstanceKlass::oop_oop_iterate##nv_suffix(obj, closure); \ \ if (UseCompressedOops) { \ InstanceRefKlass_SPECIALIZED_OOP_ITERATE(narrowOop, nv_suffix, contains); \ @@ -325,7 +325,7 @@ /* Get size before changing pointers */ \ SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\ \ - int size = instanceKlass::oop_oop_iterate_backwards##nv_suffix(obj, closure); \ + int size = InstanceKlass::oop_oop_iterate_backwards##nv_suffix(obj, closure); \ \ if (UseCompressedOops) { \ InstanceRefKlass_SPECIALIZED_OOP_ITERATE(narrowOop, nv_suffix, contains); \ @@ -344,7 +344,7 @@ MemRegion mr) { \ SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);\ \ - int size = instanceKlass::oop_oop_iterate##nv_suffix##_m(obj, closure, mr); \ + int size = InstanceKlass::oop_oop_iterate##nv_suffix##_m(obj, closure, mr); \ if (UseCompressedOops) { \ InstanceRefKlass_SPECIALIZED_OOP_ITERATE(narrowOop, nv_suffix, mr.contains); \ } else { \ @@ -370,7 +370,7 @@ ReferenceProcessor* rp = PSScavenge::reference_processor(); if (rp->discover_reference(obj, ref->reference_type())) { // reference already enqueued, referent and next will be traversed later - ref->instanceKlass::oop_push_contents(pm, obj); + ref->InstanceKlass::oop_push_contents(pm, obj); return; } else { // treat referent as normal oop @@ -411,7 +411,7 @@ if (PSScavenge::should_scavenge(next_addr)) { pm->claim_or_forward_depth(next_addr); } - ref->instanceKlass::oop_push_contents(pm, obj); + ref->InstanceKlass::oop_push_contents(pm, obj); } void instanceRefKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { @@ -436,7 +436,7 @@ } int instanceRefKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { - instanceKlass::oop_update_pointers(cm, obj); + InstanceKlass::oop_update_pointers(cm, obj); if (UseCompressedOops) { specialized_oop_update_pointers(this, cm, obj); } else { @@ -446,13 +446,13 @@ } #endif // SERIALGC -void instanceRefKlass::update_nonstatic_oop_maps(klassOop k) { +void instanceRefKlass::update_nonstatic_oop_maps(Klass* k) { // Clear the nonstatic oop-map entries corresponding to referent // and nextPending field. They are treated specially by the // garbage collector. // The discovered field is used only by the garbage collector // and is also treated specially. - instanceKlass* ik = instanceKlass::cast(k); + InstanceKlass* ik = InstanceKlass::cast(k); // Check that we have the right class debug_only(static bool first_time = true); @@ -486,7 +486,7 @@ // Verification void instanceRefKlass::oop_verify_on(oop obj, outputStream* st) { - instanceKlass::oop_verify_on(obj, st); + InstanceKlass::oop_verify_on(obj, st); // Verify referent field oop referent = java_lang_ref_Reference::referent(obj); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/instanceRefKlass.hpp --- a/src/share/vm/oops/instanceRefKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/instanceRefKlass.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ #include "oops/instanceKlass.hpp" -// An instanceRefKlass is a specialized instanceKlass for Java +// An instanceRefKlass is a specialized InstanceKlass for Java // classes that are subclasses of java/lang/ref/Reference. // // These classes are used to implement soft/weak/final/phantom @@ -44,20 +44,24 @@ // and the pending list lock object in the same class is notified. -class instanceRefKlass: public instanceKlass { +class instanceRefKlass: public InstanceKlass { + friend class InstanceKlass; + + // Constructor + instanceRefKlass(int vtable_len, int itable_len, int static_field_size, int nonstatic_oop_map_size, ReferenceType rt, AccessFlags access_flags, bool is_anonymous) + : InstanceKlass(vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt, access_flags, is_anonymous) {} + public: + instanceRefKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); } // Type testing bool oop_is_instanceRef() const { return true; } - // Casting from klassOop - static instanceRefKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_instanceRef(), "cast to instanceRefKlass"); - return (instanceRefKlass*) k->klass_part(); + // Casting from Klass* + static instanceRefKlass* cast(Klass* k) { + assert(k->oop_is_instanceRef(), "cast to instanceRefKlass"); + return (instanceRefKlass*) k; } - // allocation - DEFINE_ALLOCATE_PERMANENT(instanceRefKlass); - // Garbage collection int oop_adjust_pointers(oop obj); void oop_follow_contents(oop obj); @@ -65,10 +69,10 @@ // Parallel Scavenge and Parallel Old PARALLEL_GC_DECLS - int oop_oop_iterate(oop obj, OopClosure* blk) { + int oop_oop_iterate(oop obj, ExtendedOopClosure* blk) { return oop_oop_iterate_v(obj, blk); } - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { + int oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) { return oop_oop_iterate_v_m(obj, blk, mr); } @@ -93,7 +97,7 @@ // Update non-static oop maps so 'referent', 'nextPending' and // 'discovered' will look like non-oops - static void update_nonstatic_oop_maps(klassOop k); + static void update_nonstatic_oop_maps(Klass* k); public: // Verification diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/klass.cpp --- a/src/share/vm/oops/klass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/klass.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -23,29 +23,36 @@ */ #include "precompiled.hpp" +#include "classfile/javaClasses.hpp" +#include "classfile/dictionary.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" +#include "gc_implementation/shared/markSweep.inline.hpp" #include "gc_interface/collectedHeap.inline.hpp" +#include "memory/metadataFactory.hpp" #include "memory/oopFactory.hpp" #include "memory/resourceArea.hpp" #include "oops/instanceKlass.hpp" #include "oops/klass.inline.hpp" -#include "oops/klassOop.hpp" -#include "oops/oop.inline.hpp" #include "oops/oop.inline2.hpp" #include "runtime/atomic.hpp" +#include "utilities/stack.hpp" +#ifndef SERIALGC +#include "gc_implementation/parallelScavenge/psParallelCompact.hpp" +#include "gc_implementation/parallelScavenge/psPromotionManager.hpp" +#include "gc_implementation/parallelScavenge/psScavenge.hpp" +#endif void Klass::set_name(Symbol* n) { _name = n; if (_name != NULL) _name->increment_refcount(); } -bool Klass::is_subclass_of(klassOop k) const { +bool Klass::is_subclass_of(Klass* k) const { // Run up the super chain and check - klassOop t = as_klassOop(); + if (this == k) return true; - if (t == k) return true; - t = Klass::cast(t)->super(); + Klass* t = const_cast(this)->super(); while (t != NULL) { if (t == k) return true; @@ -54,17 +61,17 @@ return false; } -bool Klass::search_secondary_supers(klassOop k) const { +bool Klass::search_secondary_supers(Klass* k) const { // Put some extra logic here out-of-line, before the search proper. // This cuts down the size of the inline method. // This is necessary, since I am never in my own secondary_super list. - if (this->as_klassOop() == k) + if (this == k) return true; // Scan the array-of-objects for a match int cnt = secondary_supers()->length(); for (int i = 0; i < cnt; i++) { - if (secondary_supers()->obj_at(i) == k) { + if (secondary_supers()->at(i) == k) { ((Klass*)this)->set_secondary_super_cache(k); return true; } @@ -89,10 +96,10 @@ Klass *Klass::LCA( Klass *k2 ) { Klass *k1 = this; while( 1 ) { - if( k1->is_subtype_of(k2->as_klassOop()) ) return k2; - if( k2->is_subtype_of(k1->as_klassOop()) ) return k1; - k1 = k1->super()->klass_part(); - k2 = k2->super()->klass_part(); + if( k1->is_subtype_of(k2) ) return k2; + if( k2->is_subtype_of(k1) ) return k1; + k1 = k1->super(); + k2 = k2->super(); } } @@ -113,13 +120,13 @@ ShouldNotReachHere(); } -bool Klass::compute_is_subtype_of(klassOop k) { +bool Klass::compute_is_subtype_of(Klass* k) { assert(k->is_klass(), "argument must be a class"); return is_subclass_of(k); } -methodOop Klass::uncached_lookup_method(Symbol* name, Symbol* signature) const { +Method* Klass::uncached_lookup_method(Symbol* name, Symbol* signature) const { #ifdef ASSERT tty->print_cr("Error: uncached_lookup_method called on a klass oop." " Likely error: reflection method does not correctly" @@ -129,67 +136,45 @@ return NULL; } -klassOop Klass::base_create_klass_oop(KlassHandle& klass, int size, - const Klass_vtbl& vtbl, TRAPS) { - size = align_object_size(size); - // allocate and initialize vtable - Klass* kl = (Klass*) vtbl.allocate_permanent(klass, size, CHECK_NULL); - klassOop k = kl->as_klassOop(); +void* Klass::operator new(size_t size, ClassLoaderData* loader_data, size_t word_size, TRAPS) { + return Metaspace::allocate(loader_data, word_size, /*read_only*/false, + Metaspace::ClassType, CHECK_NULL); +} + +Klass::Klass() { + Klass* k = this; { // Preinitialize supertype information. // A later call to initialize_supers() may update these settings: - kl->set_super(NULL); + set_super(NULL); for (juint i = 0; i < Klass::primary_super_limit(); i++) { - kl->_primary_supers[i] = NULL; + _primary_supers[i] = NULL; } - kl->set_secondary_supers(NULL); - oop_store_without_check((oop*) &kl->_primary_supers[0], k); - kl->set_super_check_offset(in_bytes(primary_supers_offset())); + set_secondary_supers(NULL); + _primary_supers[0] = k; + set_super_check_offset(in_bytes(primary_supers_offset())); } - kl->set_java_mirror(NULL); - kl->set_modifier_flags(0); - kl->set_layout_helper(Klass::_lh_neutral_value); - kl->set_name(NULL); + set_java_mirror(NULL); + set_modifier_flags(0); + set_layout_helper(Klass::_lh_neutral_value); + set_name(NULL); AccessFlags af; af.set_flags(0); - kl->set_access_flags(af); - kl->set_subklass(NULL); - kl->set_next_sibling(NULL); - kl->set_alloc_count(0); - kl->set_alloc_size(0); - TRACE_SET_KLASS_TRACE_ID(kl, 0); - - kl->set_prototype_header(markOopDesc::prototype()); - kl->set_biased_lock_revocation_count(0); - kl->set_last_biased_lock_bulk_revocation_time(0); - - return k; -} + set_access_flags(af); + set_subklass(NULL); + set_next_sibling(NULL); + set_next_link(NULL); + set_alloc_count(0); + TRACE_SET_KLASS_TRACE_ID(this, 0); -KlassHandle Klass::base_create_klass(KlassHandle& klass, int size, - const Klass_vtbl& vtbl, TRAPS) { - klassOop ek = base_create_klass_oop(klass, size, vtbl, THREAD); - return KlassHandle(THREAD, ek); -} - -void Klass_vtbl::post_new_init_klass(KlassHandle& klass, - klassOop new_klass) const { - assert(!new_klass->klass_part()->null_vtbl(), "Not a complete klass"); - CollectedHeap::post_allocation_install_obj_klass(klass, new_klass); -} + set_prototype_header(markOopDesc::prototype()); + set_biased_lock_revocation_count(0); + set_last_biased_lock_bulk_revocation_time(0); -void* Klass_vtbl::operator new(size_t ignored, KlassHandle& klass, - int size, TRAPS) { - // The vtable pointer is installed during the execution of - // constructors in the call to permanent_obj_allocate(). Delay - // the installation of the klass pointer into the new klass "k" - // until after the vtable pointer has been installed (i.e., until - // after the return of permanent_obj_allocate(). - klassOop k = - (klassOop) CollectedHeap::permanent_obj_allocate_no_klass_install(klass, - size, CHECK_NULL); - return k->klass_part(); + // The klass doesn't have any references at this point. + clear_modified_oops(); + clear_accumulated_modified_oops(); } jint Klass::array_layout_helper(BasicType etype) { @@ -202,7 +187,7 @@ int lh = array_layout_helper(tag, hsize, etype, exact_log2(esize)); assert(lh < (int)_lh_neutral_value, "must look like an array layout"); - assert(layout_helper_is_javaArray(lh), "correct kind"); + assert(layout_helper_is_array(lh), "correct kind"); assert(layout_helper_is_objArray(lh) == isobj, "correct kind"); assert(layout_helper_is_typeArray(lh) == !isobj, "correct kind"); assert(layout_helper_header_size(lh) == hsize, "correct decode"); @@ -215,13 +200,13 @@ bool Klass::can_be_primary_super_slow() const { if (super() == NULL) return true; - else if (super()->klass_part()->super_depth() >= primary_super_limit()-1) + else if (super()->super_depth() >= primary_super_limit()-1) return false; else return true; } -void Klass::initialize_supers(klassOop k, TRAPS) { +void Klass::initialize_supers(Klass* k, TRAPS) { if (FastSuperclassLimit == 0) { // None of the other machinery matters. set_super(k); @@ -229,35 +214,35 @@ } if (k == NULL) { set_super(NULL); - oop_store_without_check((oop*) &_primary_supers[0], (oop) this->as_klassOop()); + _primary_supers[0] = this; assert(super_depth() == 0, "Object must already be initialized properly"); } else if (k != super() || k == SystemDictionary::Object_klass()) { assert(super() == NULL || super() == SystemDictionary::Object_klass(), "initialize this only once to a non-trivial value"); set_super(k); - Klass* sup = k->klass_part(); + Klass* sup = k; int sup_depth = sup->super_depth(); juint my_depth = MIN2(sup_depth + 1, (int)primary_super_limit()); if (!can_be_primary_super_slow()) my_depth = primary_super_limit(); for (juint i = 0; i < my_depth; i++) { - oop_store_without_check((oop*) &_primary_supers[i], (oop) sup->_primary_supers[i]); + _primary_supers[i] = sup->_primary_supers[i]; } - klassOop *super_check_cell; + Klass* *super_check_cell; if (my_depth < primary_super_limit()) { - oop_store_without_check((oop*) &_primary_supers[my_depth], (oop) this->as_klassOop()); + _primary_supers[my_depth] = this; super_check_cell = &_primary_supers[my_depth]; } else { // Overflow of the primary_supers array forces me to be secondary. super_check_cell = &_secondary_super_cache; } - set_super_check_offset((address)super_check_cell - (address) this->as_klassOop()); + set_super_check_offset((address)super_check_cell - (address) this); #ifdef ASSERT { juint j = super_depth(); assert(j == my_depth, "computed accessor gets right answer"); - klassOop t = as_klassOop(); + Klass* t = this; while (!Klass::cast(t)->can_be_primary_super()) { t = Klass::cast(t)->super(); j = Klass::cast(t)->super_depth(); @@ -282,18 +267,23 @@ // Secondaries can occasionally be on the super chain, // if the inline "_primary_supers" array overflows. int extras = 0; - klassOop p; - for (p = super(); !(p == NULL || p->klass_part()->can_be_primary_super()); p = p->klass_part()->super()) { + Klass* p; + for (p = super(); !(p == NULL || p->can_be_primary_super()); p = p->super()) { ++extras; } - // Compute the "real" non-extra secondaries. - objArrayOop secondary_oops = compute_secondary_supers(extras, CHECK); - objArrayHandle secondaries (THREAD, secondary_oops); + ResourceMark rm(THREAD); // need to reclaim GrowableArrays allocated below - // Store the extra secondaries in the first array positions: - int fillp = extras; - for (p = this_kh->super(); !(p == NULL || p->klass_part()->can_be_primary_super()); p = p->klass_part()->super()) { + // Compute the "real" non-extra secondaries. + GrowableArray* secondaries = compute_secondary_supers(extras); + if (secondaries == NULL) { + // secondary_supers set by compute_secondary_supers + return; + } + + GrowableArray* primaries = new GrowableArray(extras); + + for (p = this_kh->super(); !(p == NULL || p->can_be_primary_super()); p = p->super()) { int i; // Scan for overflow primaries being duplicates of 2nd'arys // This happens frequently for very deeply nested arrays: the @@ -303,39 +293,42 @@ // secondary list already contains some primary overflows, they // (with the extra level of array-ness) will collide with the // normal primary superclass overflows. - for( i = extras; i < secondaries->length(); i++ ) - if( secondaries->obj_at(i) == p ) + for( i = 0; i < secondaries->length(); i++ ) { + if( secondaries->at(i) == p ) break; + } if( i < secondaries->length() ) continue; // It's a dup, don't put it in - secondaries->obj_at_put(--fillp, p); + primaries->push(p); } - // See if we had some dup's, so the array has holes in it. - if( fillp > 0 ) { - // Pack the array. Drop the old secondaries array on the floor - // and let GC reclaim it. - objArrayOop s2 = oopFactory::new_system_objArray(secondaries->length() - fillp, CHECK); - for( int i = 0; i < s2->length(); i++ ) - s2->obj_at_put( i, secondaries->obj_at(i+fillp) ); - secondaries = objArrayHandle(THREAD, s2); + // Combine the two arrays into a metadata object to pack the array. + // The primaries are added in the reverse order, then the secondaries. + int new_length = primaries->length() + secondaries->length(); + Array* s2 = MetadataFactory::new_array( + class_loader_data(), new_length, CHECK); + int fill_p = primaries->length(); + for (int j = 0; j < fill_p; j++) { + s2->at_put(j, primaries->pop()); // add primaries in reverse order. + } + for( int j = 0; j < secondaries->length(); j++ ) { + s2->at_put(j+fill_p, secondaries->at(j)); // add secondaries on the end. } #ifdef ASSERT - if (secondaries() != Universe::the_array_interfaces_array()) { // We must not copy any NULL placeholders left over from bootstrap. - for (int j = 0; j < secondaries->length(); j++) { - assert(secondaries->obj_at(j) != NULL, "correct bootstrapping order"); - } + for (int j = 0; j < s2->length(); j++) { + assert(s2->at(j) != NULL, "correct bootstrapping order"); } #endif - this_kh->set_secondary_supers(secondaries()); + this_kh->set_secondary_supers(s2); } } -objArrayOop Klass::compute_secondary_supers(int num_extra_slots, TRAPS) { +GrowableArray* Klass::compute_secondary_supers(int num_extra_slots) { assert(num_extra_slots == 0, "override for complex klasses"); - return Universe::the_empty_system_obj_array(); + set_secondary_supers(Universe::the_empty_klass_array()); + return NULL; } @@ -343,48 +336,48 @@ return _subklass == NULL ? NULL : Klass::cast(_subklass); } -instanceKlass* Klass::superklass() const { - assert(super() == NULL || super()->klass_part()->oop_is_instance(), "must be instance klass"); - return _super == NULL ? NULL : instanceKlass::cast(_super); +InstanceKlass* Klass::superklass() const { + assert(super() == NULL || super()->oop_is_instance(), "must be instance klass"); + return _super == NULL ? NULL : InstanceKlass::cast(_super); } Klass* Klass::next_sibling() const { return _next_sibling == NULL ? NULL : Klass::cast(_next_sibling); } -void Klass::set_subklass(klassOop s) { - assert(s != as_klassOop(), "sanity check"); - oop_store_without_check((oop*)&_subklass, s); +void Klass::set_subklass(Klass* s) { + assert(s != this, "sanity check"); + _subklass = s; } -void Klass::set_next_sibling(klassOop s) { - assert(s != as_klassOop(), "sanity check"); - oop_store_without_check((oop*)&_next_sibling, s); +void Klass::set_next_sibling(Klass* s) { + assert(s != this, "sanity check"); + _next_sibling = s; } void Klass::append_to_sibling_list() { - debug_only(if (!SharedSkipVerify) as_klassOop()->verify();) + debug_only(if (!SharedSkipVerify) verify();) // add ourselves to superklass' subklass list - instanceKlass* super = superklass(); + InstanceKlass* super = superklass(); if (super == NULL) return; // special case: class Object assert(SharedSkipVerify || (!super->is_interface() // interfaces cannot be supers && (super->superklass() == NULL || !is_interface())), "an interface can only be a subklass of Object"); - klassOop prev_first_subklass = super->subklass_oop(); + Klass* prev_first_subklass = super->subklass_oop(); if (prev_first_subklass != NULL) { // set our sibling to be the superklass' previous first subklass set_next_sibling(prev_first_subklass); } // make ourselves the superklass' first subklass - super->set_subklass(as_klassOop()); - debug_only(if (!SharedSkipVerify) as_klassOop()->verify();) + super->set_subklass(this); + debug_only(if (!SharedSkipVerify) verify();) } void Klass::remove_from_sibling_list() { // remove receiver from sibling list - instanceKlass* super = superklass(); - assert(super != NULL || as_klassOop() == SystemDictionary::Object_klass(), "should have super"); + InstanceKlass* super = superklass(); + assert(super != NULL || this == SystemDictionary::Object_klass(), "should have super"); if (super == NULL) return; // special case: class Object if (super->subklass() == this) { // first subklass @@ -398,80 +391,131 @@ } } -void Klass::follow_weak_klass_links( BoolObjectClosure* is_alive, OopClosure* keep_alive) { - // This klass is alive but the subklass and siblings are not followed/updated. - // We update the subklass link and the subklass' sibling links here. - // Our own sibling link will be updated by our superclass (which must be alive - // since we are). - assert(is_alive->do_object_b(as_klassOop()), "just checking, this should be live"); - if (ClassUnloading) { - klassOop sub = subklass_oop(); - if (sub != NULL && !is_alive->do_object_b(sub)) { - // first subklass not alive, find first one alive - do { +bool Klass::is_loader_alive(BoolObjectClosure* is_alive) { + assert(is_metadata(), "p is not meta-data"); + assert(ClassLoaderDataGraph::contains((address)this), "is in the metaspace"); + // The class is alive iff the class loader is alive. + oop loader = class_loader(); + return (loader == NULL) || is_alive->do_object_b(loader); +} + +void Klass::clean_weak_klass_links(BoolObjectClosure* is_alive) { + if (!ClassUnloading) { + return; + } + + Klass* root = SystemDictionary::Object_klass(); + Stack stack; + + stack.push(root); + while (!stack.is_empty()) { + Klass* current = stack.pop(); + + assert(current->is_loader_alive(is_alive), "just checking, this should be live"); + + // Find and set the first alive subklass + Klass* sub = current->subklass_oop(); + while (sub != NULL && !sub->is_loader_alive(is_alive)) { #ifndef PRODUCT if (TraceClassUnloading && WizardMode) { ResourceMark rm; - tty->print_cr("[Unlinking class (subclass) %s]", sub->klass_part()->external_name()); + tty->print_cr("[Unlinking class (subclass) %s]", sub->external_name()); } #endif - sub = sub->klass_part()->next_sibling_oop(); - } while (sub != NULL && !is_alive->do_object_b(sub)); - set_subklass(sub); + sub = sub->next_sibling_oop(); } - // now update the subklass' sibling list - while (sub != NULL) { - klassOop next = sub->klass_part()->next_sibling_oop(); - if (next != NULL && !is_alive->do_object_b(next)) { - // first sibling not alive, find first one alive - do { -#ifndef PRODUCT + current->set_subklass(sub); + if (sub != NULL) { + stack.push(sub); + } + + // Find and set the first alive sibling + Klass* sibling = current->next_sibling_oop(); + while (sibling != NULL && !sibling->is_loader_alive(is_alive)) { if (TraceClassUnloading && WizardMode) { ResourceMark rm; - tty->print_cr("[Unlinking class (sibling) %s]", next->klass_part()->external_name()); + tty->print_cr("[Unlinking class (sibling) %s]", sibling->external_name()); } -#endif - next = next->klass_part()->next_sibling_oop(); - } while (next != NULL && !is_alive->do_object_b(next)); - sub->klass_part()->set_next_sibling(next); + sibling = sibling->next_sibling_oop(); } - sub = next; + current->set_next_sibling(sibling); + if (sibling != NULL) { + stack.push(sibling); +} + + // Clean the implementors list and method data. + if (current->oop_is_instance()) { + InstanceKlass* ik = InstanceKlass::cast(current); + ik->clean_implementors_list(is_alive); + ik->clean_method_data(is_alive); } - } else { - // Always follow subklass and sibling link. This will prevent any klasses from - // being unloaded (all classes are transitively linked from java.lang.Object). - keep_alive->do_oop(adr_subklass()); - keep_alive->do_oop(adr_next_sibling()); } } +void Klass::klass_update_barrier_set(oop v) { + record_modified_oops(); +} + +void Klass::klass_update_barrier_set_pre(void* p, oop v) { + // This barrier used by G1, where it's used remember the old oop values, + // so that we don't forget any objects that were live at the snapshot at + // the beginning. This function is only used when we write oops into + // Klasses. Since the Klasses are used as roots in G1, we don't have to + // do anything here. +} + +void Klass::klass_oop_store(oop* p, oop v) { + assert(!Universe::heap()->is_in_reserved((void*)p), "Should store pointer into metadata"); + assert(v == NULL || Universe::heap()->is_in_reserved((void*)v), "Should store pointer to an object"); + + // do the store + if (always_do_update_barrier) { + klass_oop_store((volatile oop*)p, v); + } else { + klass_update_barrier_set_pre((void*)p, v); + *p = v; + klass_update_barrier_set(v); + } +} + +void Klass::klass_oop_store(volatile oop* p, oop v) { + assert(!Universe::heap()->is_in_reserved((void*)p), "Should store pointer into metadata"); + assert(v == NULL || Universe::heap()->is_in_reserved((void*)v), "Should store pointer to an object"); + + klass_update_barrier_set_pre((void*)p, v); + OrderAccess::release_store_ptr(p, v); + klass_update_barrier_set(v); +} + +void Klass::oops_do(OopClosure* cl) { + cl->do_oop(&_java_mirror); +} void Klass::remove_unshareable_info() { - if (oop_is_instance()) { - instanceKlass* ik = (instanceKlass*)this; - if (ik->is_linked()) { - ik->unlink_class(); - } - } - // Clear the Java vtable if the oop has one. - // The vtable isn't shareable because it's in the wrong order wrt the methods - // once the method names get moved and resorted. - klassVtable* vt = vtable(); - if (vt != NULL) { - assert(oop_is_instance() || oop_is_array(), "nothing else has vtable"); - vt->clear_vtable(); - } set_subklass(NULL); set_next_sibling(NULL); + // Clear the java mirror + set_java_mirror(NULL); + set_next_link(NULL); + + // Null out class_loader_data because we don't share that yet. + set_class_loader_data(NULL); } +void Klass::restore_unshareable_info(TRAPS) { + ClassLoaderData* loader_data = ClassLoaderData::the_null_class_loader_data(); + // Restore class_loader_data to the null class loader data + set_class_loader_data(loader_data); -void Klass::shared_symbols_iterate(SymbolClosure* closure) { - closure->do_symbol(&_name); + // Add to null class loader list first before creating the mirror + // (same order as class file parsing) + loader_data->add_class(this); + + // Recreate the class mirror + java_lang_Class::create_mirror(this, CHECK); } - -klassOop Klass::array_klass_or_null(int rank) { +Klass* Klass::array_klass_or_null(int rank) { EXCEPTION_MARK; // No exception can be thrown by array_klass_impl when called with or_null == true. // (In anycase, the execption mark will fail if it do so) @@ -479,7 +523,7 @@ } -klassOop Klass::array_klass_or_null() { +Klass* Klass::array_klass_or_null() { EXCEPTION_MARK; // No exception can be thrown by array_klass_impl when called with or_null == true. // (In anycase, the execption mark will fail if it do so) @@ -487,26 +531,28 @@ } -klassOop Klass::array_klass_impl(bool or_null, int rank, TRAPS) { - fatal("array_klass should be dispatched to instanceKlass, objArrayKlass or typeArrayKlass"); +Klass* Klass::array_klass_impl(bool or_null, int rank, TRAPS) { + fatal("array_klass should be dispatched to InstanceKlass, objArrayKlass or typeArrayKlass"); return NULL; } -klassOop Klass::array_klass_impl(bool or_null, TRAPS) { - fatal("array_klass should be dispatched to instanceKlass, objArrayKlass or typeArrayKlass"); +Klass* Klass::array_klass_impl(bool or_null, TRAPS) { + fatal("array_klass should be dispatched to InstanceKlass, objArrayKlass or typeArrayKlass"); return NULL; } -void Klass::with_array_klasses_do(void f(klassOop k)) { - f(as_klassOop()); +void Klass::with_array_klasses_do(void f(Klass* k)) { + f(this); } +oop Klass::class_loader() const { return class_loader_data()->class_loader(); } + const char* Klass::external_name() const { if (oop_is_instance()) { - instanceKlass* ik = (instanceKlass*) this; + InstanceKlass* ik = (InstanceKlass*) this; if (ik->is_anonymous()) { assert(EnableInvokeDynamic, ""); intptr_t hash = ik->java_mirror()->identity_hash(); @@ -547,8 +593,17 @@ return 0; } + // Printing +void Klass::print_on(outputStream* st) const { + ResourceMark rm; + // print title + st->print("%s", internal_name()); + print_address_on(st); + st->cr(); +} + void Klass::oop_print_on(oop obj, outputStream* st) { ResourceMark rm; // print title @@ -573,21 +628,52 @@ obj->print_address_on(st); } + // Verification +void Klass::verify_on(outputStream* st) { + guarantee(!Universe::heap()->is_in_reserved(this), "Shouldn't be"); + guarantee(this->is_metadata(), "should be in metaspace"); + + assert(ClassLoaderDataGraph::contains((address)this), "Should be"); + + guarantee(this->is_klass(),"should be klass"); + + if (super() != NULL) { + guarantee(super()->is_metadata(), "should be in metaspace"); + guarantee(super()->is_klass(), "should be klass"); + } + if (secondary_super_cache() != NULL) { + Klass* ko = secondary_super_cache(); + guarantee(ko->is_metadata(), "should be in metaspace"); + guarantee(ko->is_klass(), "should be klass"); + } + for ( uint i = 0; i < primary_super_limit(); i++ ) { + Klass* ko = _primary_supers[i]; + if (ko != NULL) { + guarantee(ko->is_metadata(), "should be in metaspace"); + guarantee(ko->is_klass(), "should be klass"); + } + } + + if (java_mirror() != NULL) { + guarantee(java_mirror()->is_oop(), "should be instance"); + } +} + void Klass::oop_verify_on(oop obj, outputStream* st) { guarantee(obj->is_oop(), "should be oop"); - guarantee(obj->klass()->is_perm(), "should be in permspace"); + guarantee(obj->klass()->is_metadata(), "should not be in Java heap"); guarantee(obj->klass()->is_klass(), "klass field is not a klass"); } #ifndef PRODUCT void Klass::verify_vtable_index(int i) { - assert(oop_is_instance() || oop_is_array(), "only instanceKlass and arrayKlass have vtables"); if (oop_is_instance()) { - assert(i>=0 && i<((instanceKlass*)this)->vtable_length()/vtableEntry::size(), "index out of bounds"); + assert(i>=0 && i<((InstanceKlass*)this)->vtable_length()/vtableEntry::size(), "index out of bounds"); } else { + assert(oop_is_array(), "Must be"); assert(i>=0 && i<((arrayKlass*)this)->vtable_length()/vtableEntry::size(), "index out of bounds"); } } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/klass.hpp --- a/src/share/vm/oops/klass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/klass.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -29,8 +29,8 @@ #include "memory/iterator.hpp" #include "memory/memRegion.hpp" #include "memory/specialized_oop_closures.hpp" -#include "oops/klassOop.hpp" #include "oops/klassPS.hpp" +#include "oops/metadata.hpp" #include "oops/oop.hpp" #include "runtime/orderAccess.hpp" #include "trace/traceMacros.hpp" @@ -41,12 +41,11 @@ #include "gc_implementation/parNew/parOopClosures.hpp" #endif -// A Klass is the part of the klassOop that provides: +// +// A Klass provides: // 1: language level class object (method dictionary etc.) // 2: provide vm dispatch behavior for the object -// Both functions are combined into one C++ class. The toplevel class "Klass" -// implements purpose 1 whereas all subclasses provide extra virtual functions -// for purpose 2. +// Both functions are combined into one C++ class. // One reason for the oop/klass dichotomy in the implementation is // that we don't want a C++ vtbl pointer in every object. Thus, @@ -57,11 +56,10 @@ // ALL FUNCTIONS IMPLEMENTING THIS DISPATCH ARE PREFIXED WITH "oop_"! // Klass layout: -// [header ] klassOop -// [klass pointer ] klassOop -// [C++ vtbl ptr ] (contained in Klass_vtbl) +// [C++ vtbl ptr ] (contained in Metadata) // [layout_helper ] // [super_check_offset ] for fast subtype checks +// [name ] // [secondary_super_cache] for fast subtype checks // [secondary_supers ] array of 2ndary supertypes // [primary_supers 0] @@ -71,9 +69,10 @@ // [primary_supers 7] // [java_mirror ] // [super ] -// [name ] -// [first subklass] +// [subklass ] first subclass // [next_sibling ] link to chain additional subklasses +// [next_link ] +// [class_loader_data] // [modifier_flags] // [access_flags ] // [verify_count ] - not in product @@ -81,97 +80,19 @@ // [last_biased_lock_bulk_revocation_time] (64 bits) // [prototype_header] // [biased_lock_revocation_count] +// [_modified_oops] +// [_accumulated_modified_oops] // [trace_id] // Forward declarations. +template class Array; +template class GrowableArray; +class ClassLoaderData; class klassVtable; -class KlassHandle; -class OrderAccess; - -// Holder (or cage) for the C++ vtable of each kind of Klass. -// We want to tightly constrain the location of the C++ vtable in the overall layout. -class Klass_vtbl { - protected: - // The following virtual exists only to force creation of a C++ vtable, - // so that this class truly is the location of the vtable of all Klasses. - virtual void unused_initial_virtual() { } +class ParCompactionManager; - public: - // The following virtual makes Klass_vtbl play a second role as a - // factory protocol for subclasses of Klass ("sub-Klasses"). - // Here's how it works.... - // - // This VM uses metaobjects as factories for their instances. - // - // In order to initialize the C++ vtable of a new instance, its - // metaobject is forced to use the C++ placed new operator to - // allocate the instance. In a typical C++-based system, each - // sub-class would have its own factory routine which - // directly uses the placed new operator on the desired class, - // and then calls the appropriate chain of C++ constructors. - // - // However, this system uses shared code to performs the first - // allocation and initialization steps for all sub-Klasses. - // (See base_create_klass() and base_create_array_klass().) - // This does not factor neatly into a hierarchy of C++ constructors. - // Each caller of these shared "base_create" routines knows - // exactly which sub-Klass it is creating, but the shared routine - // does not, even though it must perform the actual allocation. - // - // Therefore, the caller of the shared "base_create" must wrap - // the specific placed new call in a virtual function which - // performs the actual allocation and vtable set-up. That - // virtual function is here, Klass_vtbl::allocate_permanent. - // - // The arguments to Universe::allocate_permanent() are passed - // straight through the placed new operator, which in turn - // obtains them directly from this virtual call. - // - // This virtual is called on a temporary "example instance" of the - // sub-Klass being instantiated, a C++ auto variable. The "real" - // instance created by this virtual is on the VM heap, where it is - // equipped with a klassOopDesc header. - // - // It is merely an accident of implementation that we use "example - // instances", but that is why the virtual function which implements - // each sub-Klass factory happens to be defined by the same sub-Klass - // for which it creates instances. - // - // The vtbl_value() call (see below) is used to strip away the - // accidental Klass-ness from an "example instance" and present it as - // a factory. Think of each factory object as a mere container of the - // C++ vtable for the desired sub-Klass. Since C++ does not allow - // direct references to vtables, the factory must also be delegated - // the task of allocating the instance, but the essential point is - // that the factory knows how to initialize the C++ vtable with the - // right pointer value. All other common initializations are handled - // by the shared "base_create" subroutines. - // - virtual void* allocate_permanent(KlassHandle& klass, int size, TRAPS) const = 0; - void post_new_init_klass(KlassHandle& klass, klassOop obj) const; - - // Every subclass on which vtbl_value is called must include this macro. - // Delay the installation of the klassKlass pointer until after the - // the vtable for a new klass has been installed (after the call to new()). -#define DEFINE_ALLOCATE_PERMANENT(thisKlass) \ - void* allocate_permanent(KlassHandle& klass_klass, int size, TRAPS) const { \ - void* result = new(klass_klass, size, THREAD) thisKlass(); \ - if (HAS_PENDING_EXCEPTION) return NULL; \ - klassOop new_klass = ((Klass*) result)->as_klassOop(); \ - OrderAccess::storestore(); \ - post_new_init_klass(klass_klass, new_klass); \ - return result; \ - } - - bool null_vtbl() { return *(intptr_t*)this == 0; } - - protected: - void* operator new(size_t ignored, KlassHandle& klass, int size, TRAPS); -}; - - -class Klass : public Klass_vtbl { +class Klass : public Metadata { friend class VMStructs; protected: // note: put frequently-used fields together at start of klass structure @@ -202,7 +123,7 @@ // Note that the array-kind tag looks like 0x00 for instance klasses, // since their length in bytes is always less than 24Mb. // - // Final note: This comes first, immediately after Klass_vtbl, + // Final note: This comes first, immediately after C++ vtable, // because it is frequently queried. jint _layout_helper; @@ -218,37 +139,27 @@ // [Ljava/lang/String;, etc. Set to zero for all other kinds of classes. Symbol* _name; - public: - oop* oop_block_beg() const { return adr_secondary_super_cache(); } - oop* oop_block_end() const { return adr_next_sibling() + 1; } - - protected: - // - // The oop block. All oop fields must be declared here and only oop fields - // may be declared here. In addition, the first and last fields in this block - // must remain first and last, unless oop_block_beg() and/or oop_block_end() - // are updated. Grouping the oop fields in a single block simplifies oop - // iteration. - // - // Cache of last observed secondary supertype - klassOop _secondary_super_cache; + Klass* _secondary_super_cache; // Array of all secondary supertypes - objArrayOop _secondary_supers; + Array* _secondary_supers; // Ordered list of all primary supertypes - klassOop _primary_supers[_primary_super_limit]; + Klass* _primary_supers[_primary_super_limit]; // java/lang/Class instance mirroring this class oop _java_mirror; // Superclass - klassOop _super; + Klass* _super; // First subclass (NULL if none); _subklass->next_sibling() is next one - klassOop _subklass; + Klass* _subklass; // Sibling link (or NULL); links all subklasses of a klass - klassOop _next_sibling; + Klass* _next_sibling; - // - // End of the oop block. - // + // All klasses loaded by a class loader are chained through these links + Klass* _next_link; + + // The VM's representation of the ClassLoader used to load this class. + // Provide access the corresponding instance java.lang.ClassLoader. + ClassLoaderData* _class_loader_data; jint _modifier_flags; // Processed access flags, for use by Class.getModifiers. AccessFlags _access_flags; // Access flags. The class/interface distinction is stored here. @@ -257,7 +168,7 @@ int _verify_count; // to avoid redundant verifies #endif - juint _alloc_count; // allocation profiling support - update klass_size_in_bytes() if moved/deleted + juint _alloc_count; // allocation profiling support // Biased locking implementation and statistics // (the 64-bit chunk goes first, to avoid some fragmentation) @@ -266,50 +177,49 @@ jint _biased_lock_revocation_count; TRACE_DEFINE_KLASS_TRACE_ID; - public: + + // Remembered sets support for the oops in the klasses. + jbyte _modified_oops; // Card Table Equivalent (YC/CMS support) + jbyte _accumulated_modified_oops; // Mod Union Equivalent (CMS support) - // returns the enclosing klassOop - klassOop as_klassOop() const { - // see klassOop.hpp for layout. - return (klassOop) (((char*) this) - sizeof(klassOopDesc)); - } + // Constructor + Klass(); + + void* operator new(size_t size, ClassLoaderData* loader_data, size_t word_size, TRAPS); public: - // Allocation - const Klass_vtbl& vtbl_value() const { return *this; } // used only on "example instances" - static KlassHandle base_create_klass(KlassHandle& klass, int size, const Klass_vtbl& vtbl, TRAPS); - static klassOop base_create_klass_oop(KlassHandle& klass, int size, const Klass_vtbl& vtbl, TRAPS); + bool is_klass() const volatile { return true; } // super - klassOop super() const { return _super; } - void set_super(klassOop k) { oop_store_without_check((oop*) &_super, (oop) k); } + Klass* super() const { return _super; } + void set_super(Klass* k) { _super = k; } // initializes _super link, _primary_supers & _secondary_supers arrays - void initialize_supers(klassOop k, TRAPS); - void initialize_supers_impl1(klassOop k); - void initialize_supers_impl2(klassOop k); + void initialize_supers(Klass* k, TRAPS); + void initialize_supers_impl1(Klass* k); + void initialize_supers_impl2(Klass* k); // klass-specific helper for initializing _secondary_supers - virtual objArrayOop compute_secondary_supers(int num_extra_slots, TRAPS); + virtual GrowableArray* compute_secondary_supers(int num_extra_slots); // java_super is the Java-level super type as specified by Class.getSuperClass. - virtual klassOop java_super() const { return NULL; } + virtual Klass* java_super() const { return NULL; } juint super_check_offset() const { return _super_check_offset; } void set_super_check_offset(juint o) { _super_check_offset = o; } - klassOop secondary_super_cache() const { return _secondary_super_cache; } - void set_secondary_super_cache(klassOop k) { oop_store_without_check((oop*) &_secondary_super_cache, (oop) k); } + Klass* secondary_super_cache() const { return _secondary_super_cache; } + void set_secondary_super_cache(Klass* k) { _secondary_super_cache = k; } - objArrayOop secondary_supers() const { return _secondary_supers; } - void set_secondary_supers(objArrayOop k) { oop_store_without_check((oop*) &_secondary_supers, (oop) k); } + Array* secondary_supers() const { return _secondary_supers; } + void set_secondary_supers(Array* k) { _secondary_supers = k; } // Return the element of the _super chain of the given depth. // If there is no such element, return either NULL or this. - klassOop primary_super_of_depth(juint i) const { + Klass* primary_super_of_depth(juint i) const { assert(i < primary_super_limit(), "oob"); - klassOop super = _primary_supers[i]; - assert(super == NULL || super->klass_part()->super_depth() == i, "correct display"); + Klass* super = _primary_supers[i]; + assert(super == NULL || super->super_depth() == i, "correct display"); return super; } @@ -326,16 +236,20 @@ if (!can_be_primary_super()) { return primary_super_limit(); } else { - juint d = (super_check_offset() - in_bytes(primary_supers_offset())) / sizeof(klassOop); + juint d = (super_check_offset() - in_bytes(primary_supers_offset())) / sizeof(Klass*); assert(d < primary_super_limit(), "oob"); - assert(_primary_supers[d] == as_klassOop(), "proper init"); + assert(_primary_supers[d] == this, "proper init"); return d; } } + // store an oop into a field of a Klass + void klass_oop_store(oop* p, oop v); + void klass_oop_store(volatile oop* p, oop v); + // java mirror oop java_mirror() const { return _java_mirror; } - void set_java_mirror(oop m) { oop_store((oop*) &_java_mirror, m); } + void set_java_mirror(oop m) { klass_oop_store(&_java_mirror, m); } // modifier flags jint modifier_flags() const { return _modifier_flags; } @@ -346,27 +260,38 @@ void set_layout_helper(int lh) { _layout_helper = lh; } // Note: for instances layout_helper() may include padding. - // Use instanceKlass::contains_field_offset to classify field offsets. + // Use InstanceKlass::contains_field_offset to classify field offsets. // sub/superklass links - instanceKlass* superklass() const; + InstanceKlass* superklass() const; Klass* subklass() const; Klass* next_sibling() const; void append_to_sibling_list(); // add newly created receiver to superklass' subklass list void remove_from_sibling_list(); // remove receiver from sibling list - protected: // internal accessors - klassOop subklass_oop() const { return _subklass; } - klassOop next_sibling_oop() const { return _next_sibling; } - void set_subklass(klassOop s); - void set_next_sibling(klassOop s); + + void set_next_link(Klass* k) { _next_link = k; } + Klass* next_link() const { return _next_link; } // The next klass defined by the class loader. + + // class loader data + ClassLoaderData* class_loader_data() const { return _class_loader_data; } + void set_class_loader_data(ClassLoaderData* loader_data) { _class_loader_data = loader_data; } - oop* adr_super() const { return (oop*)&_super; } - oop* adr_primary_supers() const { return (oop*)&_primary_supers[0]; } - oop* adr_secondary_super_cache() const { return (oop*)&_secondary_super_cache; } - oop* adr_secondary_supers()const { return (oop*)&_secondary_supers; } - oop* adr_java_mirror() const { return (oop*)&_java_mirror; } - oop* adr_subklass() const { return (oop*)&_subklass; } - oop* adr_next_sibling() const { return (oop*)&_next_sibling; } + // The Klasses are not placed in the Heap, so the Card Table or + // the Mod Union Table can't be used to mark when klasses have modified oops. + // The CT and MUT bits saves this information for the individual Klasses. + void record_modified_oops() { _modified_oops = 1; } + void clear_modified_oops() { _modified_oops = 0; } + bool has_modified_oops() { return _modified_oops == 1; } + + void accumulate_modified_oops() { if (has_modified_oops()) _accumulated_modified_oops = 1; } + void clear_accumulated_modified_oops() { _accumulated_modified_oops = 0; } + bool has_accumulated_modified_oops() { return _accumulated_modified_oops == 1; } + + protected: // internal accessors + Klass* subklass_oop() const { return _subklass; } + Klass* next_sibling_oop() const { return _next_sibling; } + void set_subklass(Klass* s); + void set_next_sibling(Klass* s); public: // Allocation profiling support @@ -376,15 +301,15 @@ virtual void set_alloc_size(juint n) = 0; // Compiler support - static ByteSize super_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(Klass, _super)); } - static ByteSize super_check_offset_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(Klass, _super_check_offset)); } - static ByteSize primary_supers_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(Klass, _primary_supers)); } - static ByteSize secondary_super_cache_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(Klass, _secondary_super_cache)); } - static ByteSize secondary_supers_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(Klass, _secondary_supers)); } - static ByteSize java_mirror_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(Klass, _java_mirror)); } - static ByteSize modifier_flags_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(Klass, _modifier_flags)); } - static ByteSize layout_helper_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(Klass, _layout_helper)); } - static ByteSize access_flags_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(Klass, _access_flags)); } + static ByteSize super_offset() { return in_ByteSize(offset_of(Klass, _super)); } + static ByteSize super_check_offset_offset() { return in_ByteSize(offset_of(Klass, _super_check_offset)); } + static ByteSize primary_supers_offset() { return in_ByteSize(offset_of(Klass, _primary_supers)); } + static ByteSize secondary_super_cache_offset() { return in_ByteSize(offset_of(Klass, _secondary_super_cache)); } + static ByteSize secondary_supers_offset() { return in_ByteSize(offset_of(Klass, _secondary_supers)); } + static ByteSize java_mirror_offset() { return in_ByteSize(offset_of(Klass, _java_mirror)); } + static ByteSize modifier_flags_offset() { return in_ByteSize(offset_of(Klass, _modifier_flags)); } + static ByteSize layout_helper_offset() { return in_ByteSize(offset_of(Klass, _layout_helper)); } + static ByteSize access_flags_offset() { return in_ByteSize(offset_of(Klass, _access_flags)); } // Unpacking layout_helper: enum { @@ -413,7 +338,7 @@ static bool layout_helper_is_instance(jint lh) { return (jint)lh > (jint)_lh_neutral_value; } - static bool layout_helper_is_javaArray(jint lh) { + static bool layout_helper_is_array(jint lh) { return (jint)lh < (jint)_lh_neutral_value; } static bool layout_helper_is_typeArray(jint lh) { @@ -473,14 +398,12 @@ // vtables virtual klassVtable* vtable() const { return NULL; } - static int klass_size_in_bytes() { return offset_of(Klass, _alloc_count) + sizeof(juint); } // all "visible" fields - // subclass check - bool is_subclass_of(klassOop k) const; + bool is_subclass_of(Klass* k) const; // subtype check: true if is_subclass_of, or if k is interface and receiver implements it - bool is_subtype_of(klassOop k) const { - juint off = k->klass_part()->super_check_offset(); - klassOop sup = *(klassOop*)( (address)as_klassOop() + off ); + bool is_subtype_of(Klass* k) const { + juint off = k->super_check_offset(); + Klass* sup = *(Klass**)( (address)this + off ); const juint secondary_offset = in_bytes(secondary_super_cache_offset()); if (sup == k) { return true; @@ -490,7 +413,7 @@ return search_secondary_supers(k); } } - bool search_secondary_supers(klassOop k) const; + bool search_secondary_supers(Klass* k) const; // Find LCA in class hierarchy Klass *LCA( Klass *k ); @@ -500,9 +423,9 @@ virtual void check_valid_for_instantiation(bool throwError, TRAPS); // Casting - static Klass* cast(klassOop k) { + static Klass* cast(Klass* k) { assert(k->is_klass(), "cast to Klass"); - return k->klass_part(); + return k; } // array copying @@ -514,37 +437,39 @@ virtual void initialize(TRAPS); // lookup operation for MethodLookupCache friend class MethodLookupCache; - virtual methodOop uncached_lookup_method(Symbol* name, Symbol* signature) const; + virtual Method* uncached_lookup_method(Symbol* name, Symbol* signature) const; public: - methodOop lookup_method(Symbol* name, Symbol* signature) const { + Method* lookup_method(Symbol* name, Symbol* signature) const { return uncached_lookup_method(name, signature); } // array class with specific rank - klassOop array_klass(int rank, TRAPS) { return array_klass_impl(false, rank, THREAD); } + Klass* array_klass(int rank, TRAPS) { return array_klass_impl(false, rank, THREAD); } // array class with this klass as element type - klassOop array_klass(TRAPS) { return array_klass_impl(false, THREAD); } + Klass* array_klass(TRAPS) { return array_klass_impl(false, THREAD); } // These will return NULL instead of allocating on the heap: // NB: these can block for a mutex, like other functions with TRAPS arg. - klassOop array_klass_or_null(int rank); - klassOop array_klass_or_null(); + Klass* array_klass_or_null(int rank); + Klass* array_klass_or_null(); virtual oop protection_domain() { return NULL; } - virtual oop class_loader() const { return NULL; } + + oop class_loader() const; protected: - virtual klassOop array_klass_impl(bool or_null, int rank, TRAPS); - virtual klassOop array_klass_impl(bool or_null, TRAPS); + virtual Klass* array_klass_impl(bool or_null, int rank, TRAPS); + virtual Klass* array_klass_impl(bool or_null, TRAPS); public: + // CDS support - remove and restore oops from metadata. Oops are not shared. virtual void remove_unshareable_info(); - virtual void shared_symbols_iterate(SymbolClosure* closure); + virtual void restore_unshareable_info(TRAPS); protected: // computes the subtype relationship - virtual bool compute_is_subtype_of(klassOop k); + virtual bool compute_is_subtype_of(Klass* k); public: // subclass accessor (here for convenience; undefined for non-klass objects) virtual bool is_leaf_class() const { fatal("not a class"); return false; } @@ -555,8 +480,8 @@ // actual oop size of obj in memory virtual int oop_size(oop obj) const = 0; - // actual oop size of this klass in memory - virtual int klass_oop_size() const = 0; + // Size of klass in word size. + virtual int size() const = 0; // Returns the Java name for a class (Resource allocated) // For arrays, this returns the name of the element with a leading '['. @@ -577,32 +502,17 @@ // Parallel Scavenge and Parallel Old PARALLEL_GC_DECLS_PV + // type testing operations + protected: + virtual bool oop_is_instance_slow() const { return false; } + virtual bool oop_is_array_slow() const { return false; } + virtual bool oop_is_objArray_slow() const { return false; } + virtual bool oop_is_typeArray_slow() const { return false; } public: - // type testing operations - virtual bool oop_is_instance_slow() const { return false; } virtual bool oop_is_instanceMirror() const { return false; } virtual bool oop_is_instanceRef() const { return false; } - virtual bool oop_is_array() const { return false; } - virtual bool oop_is_objArray_slow() const { return false; } - virtual bool oop_is_klass() const { return false; } - virtual bool oop_is_thread() const { return false; } - virtual bool oop_is_method() const { return false; } - virtual bool oop_is_constMethod() const { return false; } - virtual bool oop_is_methodData() const { return false; } - virtual bool oop_is_constantPool() const { return false; } - virtual bool oop_is_constantPoolCache() const { return false; } - virtual bool oop_is_typeArray_slow() const { return false; } - virtual bool oop_is_arrayKlass() const { return false; } - virtual bool oop_is_objArrayKlass() const { return false; } - virtual bool oop_is_typeArrayKlass() const { return false; } - virtual bool oop_is_compiledICHolder() const { return false; } - virtual bool oop_is_instanceKlass() const { return false; } - bool oop_is_javaArray_slow() const { - return oop_is_objArray_slow() || oop_is_typeArray_slow(); - } - - // Fast non-virtual versions, used by oop.inline.hpp and elsewhere: + // Fast non-virtual versions #ifndef ASSERT #define assert_same_query(xval, xcheck) xval #else @@ -616,9 +526,9 @@ inline bool oop_is_instance() const { return assert_same_query( layout_helper_is_instance(layout_helper()), oop_is_instance_slow()); } - inline bool oop_is_javaArray() const { return assert_same_query( - layout_helper_is_javaArray(layout_helper()), - oop_is_javaArray_slow()); } + inline bool oop_is_array() const { return assert_same_query( + layout_helper_is_array(layout_helper()), + oop_is_array_slow()); } inline bool oop_is_objArray() const { return assert_same_query( layout_helper_is_objArray(layout_helper()), oop_is_objArray_slow()); } @@ -627,20 +537,6 @@ oop_is_typeArray_slow()); } #undef assert_same_query - // Unless overridden, oop is parsable if it has a klass pointer. - // Parsability of an object is object specific. - virtual bool oop_is_parsable(oop obj) const { return true; } - - // Unless overridden, oop is safe for concurrent GC processing - // after its allocation is complete. The exception to - // this is the case where objects are changed after allocation. - // Class redefinition is one of the known exceptions. During - // class redefinition, an allocated class can changed in order - // order to create a merged class (the combiniation of the - // old class definition that has to be perserved and the new class - // definition which is being created. - virtual bool oop_is_conc_safe(oop obj) const { return true; } - // Access flags AccessFlags access_flags() const { return _access_flags; } void set_access_flags(AccessFlags flags) { _access_flags = flags; } @@ -677,7 +573,7 @@ // are potential problems in setting the bias pattern for // JVM-internal oops. inline void set_prototype_header(markOop header); - static ByteSize prototype_header_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(Klass, _prototype_header)); } + static ByteSize prototype_header_offset() { return in_ByteSize(offset_of(Klass, _prototype_header)); } int biased_lock_revocation_count() const { return (int) _biased_lock_revocation_count; } // Atomically increments biased_lock_revocation_count and returns updated value @@ -689,8 +585,14 @@ TRACE_DEFINE_KLASS_METHODS; // garbage collection support - virtual void follow_weak_klass_links( - BoolObjectClosure* is_alive, OopClosure* keep_alive); + virtual void oops_do(OopClosure* cl); + + // Checks if the class loader is alive. + // Iff the class loader is alive the Klass is considered alive. + // The is_alive closure passed in depends on the Garbage Collector used. + bool is_loader_alive(BoolObjectClosure* is_alive); + + static void clean_weak_klass_links(BoolObjectClosure* is_alive); // Prefetch within oop iterators. This is a macro because we // can't guarantee that the compiler will inline it. In 64-bit @@ -723,15 +625,15 @@ } // iterators - virtual int oop_oop_iterate(oop obj, OopClosure* blk) = 0; - virtual int oop_oop_iterate_v(oop obj, OopClosure* blk) { + virtual int oop_oop_iterate(oop obj, ExtendedOopClosure* blk) = 0; + virtual int oop_oop_iterate_v(oop obj, ExtendedOopClosure* blk) { return oop_oop_iterate(obj, blk); } #ifndef SERIALGC // In case we don't have a specialized backward scanner use forward // iteration. - virtual int oop_oop_iterate_backwards_v(oop obj, OopClosure* blk) { + virtual int oop_oop_iterate_backwards_v(oop obj, ExtendedOopClosure* blk) { return oop_oop_iterate_v(obj, blk); } #endif // !SERIALGC @@ -740,8 +642,8 @@ // (I don't see why the _m should be required, but without it the Solaris // C++ gives warning messages about overridings of the "oop_oop_iterate" // defined above "hiding" this virtual function. (DLD, 6/20/00)) */ - virtual int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) = 0; - virtual int oop_oop_iterate_v_m(oop obj, OopClosure* blk, MemRegion mr) { + virtual int oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) = 0; + virtual int oop_oop_iterate_v_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) { return oop_oop_iterate_m(obj, blk, mr); } @@ -778,8 +680,8 @@ SPECIALIZED_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_BACKWARDS_DECL) #endif // !SERIALGC - virtual void array_klasses_do(void f(klassOop k)) {} - virtual void with_array_klasses_do(void f(klassOop k)); + virtual void array_klasses_do(void f(Klass* k)) {} + virtual void with_array_klasses_do(void f(Klass* k)); // Return self, except for abstract classes with exactly 1 // implementor. Then return the 1 concrete implementation. @@ -789,8 +691,6 @@ Symbol* name() const { return _name; } void set_name(Symbol* n); - friend class klassKlass; - public: // jvm support virtual jint compute_modifier_flags(TRAPS) const; @@ -799,23 +699,27 @@ virtual jint jvmti_class_status() const; // Printing + virtual void print_on(outputStream* st) const; + virtual void oop_print_value_on(oop obj, outputStream* st); virtual void oop_print_on (oop obj, outputStream* st); + virtual const char* internal_name() const = 0; + // Verification - virtual const char* internal_name() const = 0; - virtual void oop_verify_on(oop obj, outputStream* st); - // tells whether obj is partially constructed (gc during class loading) - virtual bool oop_partially_loaded(oop obj) const { return false; } - virtual void oop_set_partially_loaded(oop obj) {}; + virtual void verify_on(outputStream* st); + void verify() { verify_on(tty); } #ifndef PRODUCT void verify_vtable_index(int index); #endif + + virtual void oop_verify_on(oop obj, outputStream* st); + + private: + // barriers used by klass_oop_store + void klass_update_barrier_set(oop v); + void klass_update_barrier_set_pre(void* p, oop v); }; - -inline oop klassOopDesc::java_mirror() const { return klass_part()->java_mirror(); } - - #endif // SHARE_VM_OOPS_KLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/klassKlass.cpp --- a/src/share/vm/oops/klassKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,249 +0,0 @@ -/* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "gc_interface/collectedHeap.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/oopFactory.hpp" -#include "memory/permGen.hpp" -#include "oops/constantPoolKlass.hpp" -#include "oops/instanceKlass.hpp" -#include "oops/instanceOop.hpp" -#include "oops/klassKlass.hpp" -#include "oops/klassOop.hpp" -#include "oops/methodKlass.hpp" -#include "oops/objArrayKlass.hpp" -#include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" -#include "oops/symbol.hpp" -#include "oops/typeArrayKlass.hpp" -#include "runtime/handles.inline.hpp" -#ifndef SERIALGC -#include "gc_implementation/parNew/parOopClosures.inline.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" -#include "memory/cardTableRS.hpp" -#include "oops/oop.pcgc.inline.hpp" -#endif - -int klassKlass::oop_size(oop obj) const { - assert (obj->is_klass(), "must be a klassOop"); - return klassOop(obj)->klass_part()->klass_oop_size(); -} - -klassOop klassKlass::create_klass(TRAPS) { - KlassHandle h_this_klass; - klassKlass o; - // for bootstrapping, handles may not be available yet. - klassOop k = base_create_klass_oop(h_this_klass, header_size(), o.vtbl_value(), CHECK_NULL); - k->set_klass(k); // point to thyself - // Do not try to allocate mirror, java.lang.Class not loaded at this point. - // See Universe::fixup_mirrors() - return k; -} - -void klassKlass::oop_follow_contents(oop obj) { - Klass* k = Klass::cast(klassOop(obj)); - // If we are alive it is valid to keep our superclass and subtype caches alive - MarkSweep::mark_and_push(k->adr_super()); - for (juint i = 0; i < Klass::primary_super_limit(); i++) - MarkSweep::mark_and_push(k->adr_primary_supers()+i); - MarkSweep::mark_and_push(k->adr_secondary_super_cache()); - MarkSweep::mark_and_push(k->adr_secondary_supers()); - MarkSweep::mark_and_push(k->adr_java_mirror()); - // We follow the subklass and sibling links at the end of the - // marking phase, since otherwise following them will prevent - // class unloading (all classes are transitively linked from - // java.lang.Object). - MarkSweep::revisit_weak_klass_link(k); - obj->follow_header(); -} - -#ifndef SERIALGC -void klassKlass::oop_follow_contents(ParCompactionManager* cm, - oop obj) { - Klass* k = Klass::cast(klassOop(obj)); - // If we are alive it is valid to keep our superclass and subtype caches alive - PSParallelCompact::mark_and_push(cm, k->adr_super()); - for (juint i = 0; i < Klass::primary_super_limit(); i++) - PSParallelCompact::mark_and_push(cm, k->adr_primary_supers()+i); - PSParallelCompact::mark_and_push(cm, k->adr_secondary_super_cache()); - PSParallelCompact::mark_and_push(cm, k->adr_secondary_supers()); - PSParallelCompact::mark_and_push(cm, k->adr_java_mirror()); - // We follow the subklass and sibling links at the end of the - // marking phase, since otherwise following them will prevent - // class unloading (all classes are transitively linked from - // java.lang.Object). - PSParallelCompact::revisit_weak_klass_link(cm, k); - obj->follow_header(cm); -} -#endif // SERIALGC - -int klassKlass::oop_oop_iterate(oop obj, OopClosure* blk) { - // Get size before changing pointers - int size = oop_size(obj); - Klass* k = Klass::cast(klassOop(obj)); - blk->do_oop(k->adr_super()); - for (juint i = 0; i < Klass::primary_super_limit(); i++) - blk->do_oop(k->adr_primary_supers()+i); - blk->do_oop(k->adr_secondary_super_cache()); - blk->do_oop(k->adr_secondary_supers()); - blk->do_oop(k->adr_java_mirror()); - // The following are in the perm gen and are treated - // specially in a later phase of a perm gen collection; ... - assert(oop(k)->is_perm(), "should be in perm"); - assert(oop(k->subklass())->is_perm_or_null(), "should be in perm"); - assert(oop(k->next_sibling())->is_perm_or_null(), "should be in perm"); - // ... don't scan them normally, but remember this klassKlass - // for later (see, for instance, oop_follow_contents above - // for what MarkSweep does with it. - if (blk->should_remember_klasses()) { - blk->remember_klass(k); - } - obj->oop_iterate_header(blk); - return size; -} - - -int klassKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { - // Get size before changing pointers - int size = oop_size(obj); - Klass* k = Klass::cast(klassOop(obj)); - oop* adr; - adr = k->adr_super(); - if (mr.contains(adr)) blk->do_oop(adr); - for (juint i = 0; i < Klass::primary_super_limit(); i++) { - adr = k->adr_primary_supers()+i; - if (mr.contains(adr)) blk->do_oop(adr); - } - adr = k->adr_secondary_super_cache(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = k->adr_secondary_supers(); - if (mr.contains(adr)) blk->do_oop(adr); - adr = k->adr_java_mirror(); - if (mr.contains(adr)) blk->do_oop(adr); - // The following are "weak links" in the perm gen and are - // treated specially in a later phase of a perm gen collection. - assert(oop(k)->is_perm(), "should be in perm"); - assert(oop(k->adr_subklass())->is_perm(), "should be in perm"); - assert(oop(k->adr_next_sibling())->is_perm(), "should be in perm"); - if (blk->should_remember_klasses() - && (mr.contains(k->adr_subklass()) - || mr.contains(k->adr_next_sibling()))) { - blk->remember_klass(k); - } - obj->oop_iterate_header(blk, mr); - return size; -} - - -int klassKlass::oop_adjust_pointers(oop obj) { - // Get size before changing pointers - int size = oop_size(obj); - obj->adjust_header(); - - Klass* k = Klass::cast(klassOop(obj)); - - MarkSweep::adjust_pointer(k->adr_super()); - for (juint i = 0; i < Klass::primary_super_limit(); i++) - MarkSweep::adjust_pointer(k->adr_primary_supers()+i); - MarkSweep::adjust_pointer(k->adr_secondary_super_cache()); - MarkSweep::adjust_pointer(k->adr_secondary_supers()); - MarkSweep::adjust_pointer(k->adr_java_mirror()); - MarkSweep::adjust_pointer(k->adr_subklass()); - MarkSweep::adjust_pointer(k->adr_next_sibling()); - return size; -} - -#ifndef SERIALGC -void klassKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { - Klass* k = Klass::cast(klassOop(obj)); - - oop* p = k->adr_java_mirror(); - if (PSScavenge::should_scavenge(p)) { - pm->claim_or_forward_depth(p); - } -} - -int klassKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { - Klass* k = Klass::cast(klassOop(obj)); - - oop* const beg_oop = k->oop_block_beg(); - oop* const end_oop = k->oop_block_end(); - for (oop* cur_oop = beg_oop; cur_oop < end_oop; ++cur_oop) { - PSParallelCompact::adjust_pointer(cur_oop); - } - - return oop_size(obj); -} -#endif // SERIALGC - - -// Printing - -void klassKlass::oop_print_on(oop obj, outputStream* st) { - Klass::oop_print_on(obj, st); -} - -void klassKlass::oop_print_value_on(oop obj, outputStream* st) { - Klass::oop_print_value_on(obj, st); -} - -const char* klassKlass::internal_name() const { - return "{other class}"; -} - - -// Verification - -void klassKlass::oop_verify_on(oop obj, outputStream* st) { - Klass::oop_verify_on(obj, st); - guarantee(obj->is_perm(), "should be in permspace"); - guarantee(obj->is_klass(), "should be klass"); - - Klass* k = Klass::cast(klassOop(obj)); - if (k->super() != NULL) { - guarantee(k->super()->is_perm(), "should be in permspace"); - guarantee(k->super()->is_klass(), "should be klass"); - } - klassOop ko = k->secondary_super_cache(); - if( ko != NULL ) { - guarantee(ko->is_perm(), "should be in permspace"); - guarantee(ko->is_klass(), "should be klass"); - } - for( uint i = 0; i < primary_super_limit(); i++ ) { - oop ko = k->adr_primary_supers()[i]; // Cannot use normal accessor because it asserts - if( ko != NULL ) { - guarantee(ko->is_perm(), "should be in permspace"); - guarantee(ko->is_klass(), "should be klass"); - } - } - - if (k->java_mirror() != NULL || (k->oop_is_instance() && instanceKlass::cast(klassOop(obj))->is_loaded())) { - guarantee(k->java_mirror() != NULL, "should be allocated"); - guarantee(k->java_mirror()->is_perm() || !JavaObjectsInPerm, "should be in permspace"); - guarantee(k->java_mirror()->is_instance(), "should be instance"); - } -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/klassKlass.hpp --- a/src/share/vm/oops/klassKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -/* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_KLASSKLASS_HPP -#define SHARE_VM_OOPS_KLASSKLASS_HPP - -#include "memory/oopFactory.hpp" -#include "oops/klass.hpp" -#include "oops/klassOop.hpp" - -// A klassKlass serves as the fix point of the klass chain. -// The klass of klassKlass is itself. - -class klassKlass: public Klass { - friend class VMStructs; - private: - juint _alloc_size; // allocation profiling support - public: - // Testing - bool oop_is_klass() const { return true; } - bool is_leaf_class() const { return true; } - - // Sizing - int oop_size(oop obj) const; - int klass_oop_size() const { return object_size(); } - - // Allocation - DEFINE_ALLOCATE_PERMANENT(klassKlass); - static klassOop create_klass(TRAPS ); - - // Casting from klassOop - static klassKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_klass(), "cast to klassKlass"); - return (klassKlass*) k->klass_part(); - } - - // Sizing - static int header_size() { return oopDesc::header_size() + sizeof(klassKlass)/HeapWordSize; } - int object_size() const { return align_object_size(header_size()); } - - // Garbage collection - void oop_follow_contents(oop obj); - int oop_adjust_pointers(oop obj); - - // Parallel Scavenge and Parallel Old - PARALLEL_GC_DECLS - - // Iterators - int oop_oop_iterate(oop obj, OopClosure* blk); - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr); - - // Allocation profiling support - juint alloc_size() const { return _alloc_size; } - void set_alloc_size(juint n) { _alloc_size = n; } - - // Printing - void oop_print_value_on(oop obj, outputStream* st); - void oop_print_on (oop obj, outputStream* st); - - // Verification - const char* internal_name() const; - void oop_verify_on(oop obj, outputStream* st); -}; - -#endif // SHARE_VM_OOPS_KLASSKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/klassOop.cpp --- a/src/share/vm/oops/klassOop.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "oops/klassOop.hpp" - diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/klassOop.hpp --- a/src/share/vm/oops/klassOop.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,113 +0,0 @@ -/* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_KLASSOOP_HPP -#define SHARE_VM_OOPS_KLASSOOP_HPP - -#include "oops/oop.hpp" - -// A klassOop is the C++ equivalent of a Java class. -// Part of a klassOopDesc is a Klass which handle the -// dispatching for the C++ method calls. - -// klassOop object layout: -// [header ] -// [klass_field] -// [KLASS ] - -class klassOopDesc : public oopDesc { - public: - // returns the Klass part containing dispatching behavior - Klass* klass_part() const { return (Klass*)((address)this + sizeof(klassOopDesc)); } - - // Convenience wrapper - inline oop java_mirror() const; - - private: - // These have no implementation since klassOop should never be accessed in this fashion - oop obj_field(int offset) const; - volatile oop obj_field_volatile(int offset) const; - void obj_field_put(int offset, oop value); - void obj_field_put_raw(int offset, oop value); - void obj_field_put_volatile(int offset, oop value); - - jbyte byte_field(int offset) const; - void byte_field_put(int offset, jbyte contents); - - jchar char_field(int offset) const; - void char_field_put(int offset, jchar contents); - - jboolean bool_field(int offset) const; - void bool_field_put(int offset, jboolean contents); - - jint int_field(int offset) const; - void int_field_put(int offset, jint contents); - - jshort short_field(int offset) const; - void short_field_put(int offset, jshort contents); - - jlong long_field(int offset) const; - void long_field_put(int offset, jlong contents); - - jfloat float_field(int offset) const; - void float_field_put(int offset, jfloat contents); - - jdouble double_field(int offset) const; - void double_field_put(int offset, jdouble contents); - - address address_field(int offset) const; - void address_field_put(int offset, address contents); - - oop obj_field_acquire(int offset) const; - void release_obj_field_put(int offset, oop value); - - jbyte byte_field_acquire(int offset) const; - void release_byte_field_put(int offset, jbyte contents); - - jchar char_field_acquire(int offset) const; - void release_char_field_put(int offset, jchar contents); - - jboolean bool_field_acquire(int offset) const; - void release_bool_field_put(int offset, jboolean contents); - - jint int_field_acquire(int offset) const; - void release_int_field_put(int offset, jint contents); - - jshort short_field_acquire(int offset) const; - void release_short_field_put(int offset, jshort contents); - - jlong long_field_acquire(int offset) const; - void release_long_field_put(int offset, jlong contents); - - jfloat float_field_acquire(int offset) const; - void release_float_field_put(int offset, jfloat contents); - - jdouble double_field_acquire(int offset) const; - void release_double_field_put(int offset, jdouble contents); - - address address_field_acquire(int offset) const; - void release_address_field_put(int offset, address contents); -}; - -#endif // SHARE_VM_OOPS_KLASSOOP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/klassVtable.cpp --- a/src/share/vm/oops/klassVtable.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/klassVtable.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,9 +30,8 @@ #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" #include "oops/instanceKlass.hpp" -#include "oops/klassOop.hpp" #include "oops/klassVtable.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiRedefineClassesTrace.hpp" @@ -40,10 +39,10 @@ #include "runtime/handles.inline.hpp" #include "utilities/copy.hpp" -inline instanceKlass* klassVtable::ik() const { - Klass* k = _klass()->klass_part(); - assert(k->oop_is_instance(), "not an instanceKlass"); - return (instanceKlass*)k; +inline InstanceKlass* klassVtable::ik() const { + Klass* k = _klass(); + assert(k->oop_is_instance(), "not an InstanceKlass"); + return (InstanceKlass*)k; } @@ -57,12 +56,12 @@ // treated as any other public method in C for method over-ride purposes. void klassVtable::compute_vtable_size_and_num_mirandas(int &vtable_length, int &num_miranda_methods, - klassOop super, - objArrayOop methods, + Klass* super, + Array* methods, AccessFlags class_flags, Handle classloader, Symbol* classname, - objArrayOop local_interfaces, + Array* local_interfaces, TRAPS ) { @@ -73,14 +72,14 @@ num_miranda_methods = 0; // start off with super's vtable length - instanceKlass* sk = (instanceKlass*)super->klass_part(); + InstanceKlass* sk = (InstanceKlass*)super; vtable_length = super == NULL ? 0 : sk->vtable_length(); // go thru each method in the methods table to see if it needs a new entry int len = methods->length(); for (int i = 0; i < len; i++) { - assert(methods->obj_at(i)->is_method(), "must be a methodOop"); - methodHandle mh(THREAD, methodOop(methods->obj_at(i))); + assert(methods->at(i)->is_method(), "must be a Method*"); + methodHandle mh(THREAD, methods->at(i)); if (needs_new_vtable_entry(mh, super, classloader, classname, class_flags, THREAD)) { vtable_length += vtableEntry::size(); // we need a new entry @@ -112,7 +111,7 @@ assert(vtable_length >= Universe::base_vtable_size(), "vtable too small"); } -int klassVtable::index_of(methodOop m, int len) const { +int klassVtable::index_of(Method* m, int len) const { assert(m->vtable_index() >= 0, "do not ask this of non-vtable methods"); return m->vtable_index(); } @@ -122,9 +121,9 @@ return 0; } else { // copy methods from superKlass - // can't inherit from array class, so must be instanceKlass + // can't inherit from array class, so must be InstanceKlass assert(super->oop_is_instance(), "must be instance klass"); - instanceKlass* sk = (instanceKlass*)super()->klass_part(); + InstanceKlass* sk = (InstanceKlass*)super(); klassVtable* superVtable = sk->vtable(); assert(superVtable->length() <= _length, "vtable too short"); #ifdef ASSERT @@ -170,17 +169,17 @@ if (klass()->oop_is_array()) { assert(super_vtable_len == _length, "arrays shouldn't introduce new methods"); } else { - assert(_klass->oop_is_instance(), "must be instanceKlass"); + assert(_klass->oop_is_instance(), "must be InstanceKlass"); - objArrayHandle methods(THREAD, ik()->methods()); - int len = methods()->length(); + Array* methods = ik()->methods(); + int len = methods->length(); int initialized = super_vtable_len; // update_inherited_vtable can stop for gc - ensure using handles for (int i = 0; i < len; i++) { HandleMark hm(THREAD); - assert(methods()->obj_at(i)->is_method(), "must be a methodOop"); - methodHandle mh(THREAD, (methodOop)methods()->obj_at(i)); + assert(methods->at(i)->is_method(), "must be a Method*"); + methodHandle mh(THREAD, methods->at(i)); bool needs_new_entry = update_inherited_vtable(ik(), mh, super_vtable_len, checkconstraints, CHECK); @@ -209,14 +208,14 @@ // For bytecodes not produced by javac together it is possible that a method does not override // the superclass's method, but might indirectly override a super-super class's vtable entry // If none found, return a null superk, else return the superk of the method this does override -instanceKlass* klassVtable::find_transitive_override(instanceKlass* initialsuper, methodHandle target_method, +InstanceKlass* klassVtable::find_transitive_override(InstanceKlass* initialsuper, methodHandle target_method, int vtable_index, Handle target_loader, Symbol* target_classname, Thread * THREAD) { - instanceKlass* superk = initialsuper; + InstanceKlass* superk = initialsuper; while (superk != NULL && superk->super() != NULL) { - instanceKlass* supersuperklass = instanceKlass::cast(superk->super()); + InstanceKlass* supersuperklass = InstanceKlass::cast(superk->super()); klassVtable* ssVtable = supersuperklass->vtable(); if (vtable_index < ssVtable->length()) { - methodOop super_method = ssVtable->method_at(vtable_index); + Method* super_method = ssVtable->method_at(vtable_index); #ifndef PRODUCT Symbol* name= target_method()->name(); Symbol* signature = target_method()->signature(); @@ -240,11 +239,11 @@ } } else { // super class has no vtable entry here, stop transitive search - superk = (instanceKlass*)NULL; + superk = (InstanceKlass*)NULL; break; } // if no override found yet, continue to search up - superk = instanceKlass::cast(superk->super()); + superk = InstanceKlass::cast(superk->super()); } return superk; @@ -253,17 +252,17 @@ // Update child's copy of super vtable for overrides // OR return true if a new vtable entry is required -// Only called for instanceKlass's, i.e. not for arrays +// Only called for InstanceKlass's, i.e. not for arrays // If that changed, could not use _klass as handle for klass -bool klassVtable::update_inherited_vtable(instanceKlass* klass, methodHandle target_method, int super_vtable_len, +bool klassVtable::update_inherited_vtable(InstanceKlass* klass, methodHandle target_method, int super_vtable_len, bool checkconstraints, TRAPS) { ResourceMark rm; bool allocate_new = true; - assert(klass->oop_is_instance(), "must be instanceKlass"); + assert(klass->oop_is_instance(), "must be InstanceKlass"); // Initialize the method's vtable index to "nonvirtual". // If we allocate a vtable entry, we will update it to a non-negative number. - target_method()->set_vtable_index(methodOopDesc::nonvirtual_vtable_index); + target_method()->set_vtable_index(Method::nonvirtual_vtable_index); // Static and methods are never in if (target_method()->is_static() || target_method()->name() == vmSymbols::object_initializer_name()) { @@ -296,20 +295,20 @@ Symbol* name = target_method()->name(); Symbol* signature = target_method()->signature(); - Handle target_loader(THREAD, _klass->class_loader()); + Handle target_loader(THREAD, _klass()->class_loader()); Symbol* target_classname = _klass->name(); for(int i = 0; i < super_vtable_len; i++) { - methodOop super_method = method_at(i); + Method* super_method = method_at(i); // Check if method name matches if (super_method->name() == name && super_method->signature() == signature) { // get super_klass for method_holder for the found method - instanceKlass* super_klass = instanceKlass::cast(super_method->method_holder()); + InstanceKlass* super_klass = InstanceKlass::cast(super_method->method_holder()); if ((super_klass->is_override(super_method, target_loader, target_classname, THREAD)) || ((klass->major_version() >= VTABLE_TRANSITIVE_OVERRIDE_VERSION) && ((super_klass = find_transitive_override(super_klass, target_method, i, target_loader, - target_classname, THREAD)) != (instanceKlass*)NULL))) { + target_classname, THREAD)) != (InstanceKlass*)NULL))) { // overriding, so no new entry allocate_new = false; @@ -381,15 +380,13 @@ return allocate_new; } -void klassVtable::put_method_at(methodOop m, int index) { - assert(m->is_oop_or_null(), "Not an oop or null"); +void klassVtable::put_method_at(Method* m, int index) { #ifndef PRODUCT if (PrintVtables && Verbose) { ResourceMark rm; tty->print_cr("adding %s::%s at index %d", _klass->internal_name(), (m != NULL) ? m->name()->as_C_string() : "", index); } - assert(unchecked_method_at(index)->is_oop_or_null(), "Not an oop or null"); #endif table()[index].set(m); } @@ -399,12 +396,12 @@ // by "classloader" and "classname". // NOTE: The logic used here is very similar to the one used for computing // the vtables indices for a method. We cannot directly use that function because, -// we allocate the instanceKlass at load time, and that requires that the +// we allocate the InstanceKlass at load time, and that requires that the // superclass has been loaded. // However, the vtable entries are filled in at link time, and therefore // the superclass' vtable may not yet have been filled in. bool klassVtable::needs_new_vtable_entry(methodHandle target_method, - klassOop super, + Klass* super, Handle classloader, Symbol* classname, AccessFlags class_flags, @@ -438,19 +435,19 @@ ResourceMark rm; Symbol* name = target_method()->name(); Symbol* signature = target_method()->signature(); - klassOop k = super; - methodOop super_method = NULL; - instanceKlass *holder = NULL; - methodOop recheck_method = NULL; + Klass* k = super; + Method* super_method = NULL; + InstanceKlass *holder = NULL; + Method* recheck_method = NULL; while (k != NULL) { // lookup through the hierarchy for a method with matching name and sign. - super_method = instanceKlass::cast(k)->lookup_method(name, signature); + super_method = InstanceKlass::cast(k)->lookup_method(name, signature); if (super_method == NULL) { break; // we still have to search for a matching miranda method } // get the class holding the matching method // make sure you use that class for is_override - instanceKlass* superk = instanceKlass::cast(super_method->method_holder()); + InstanceKlass* superk = InstanceKlass::cast(super_method->method_holder()); // we want only instance method matches // pretend private methods are not in the super vtable // since we do override around them: e.g. a.m pub/b.m private/c.m pub, @@ -473,7 +470,7 @@ // miranda method in the super, whose entry it should re-use. // Actually, to handle cases that javac would not generate, we need // this check for all access permissions. - instanceKlass *sk = instanceKlass::cast(super); + InstanceKlass *sk = InstanceKlass::cast(super); if (sk->has_miranda_methods()) { if (sk->lookup_method_in_all_interfaces(name, signature) != NULL) { return false; // found a matching miranda; we do not need a new entry @@ -488,20 +485,20 @@ int klassVtable::index_of_miranda(Symbol* name, Symbol* signature) { // search from the bottom, might be faster for (int i = (length() - 1); i >= 0; i--) { - methodOop m = table()[i].method(); + Method* m = table()[i].method(); if (is_miranda_entry_at(i) && m->name() == name && m->signature() == signature) { return i; } } - return methodOopDesc::invalid_vtable_index; + return Method::invalid_vtable_index; } // check if an entry is miranda bool klassVtable::is_miranda_entry_at(int i) { - methodOop m = method_at(i); - klassOop method_holder = m->method_holder(); - instanceKlass *mhk = instanceKlass::cast(method_holder); + Method* m = method_at(i); + Klass* method_holder = m->method_holder(); + InstanceKlass *mhk = InstanceKlass::cast(method_holder); // miranda methods are interface methods in a class's vtable if (mhk->is_interface()) { @@ -515,17 +512,17 @@ // check if a method is a miranda method, given a class's methods table and it's super // the caller must make sure that the method belongs to an interface implemented by the class -bool klassVtable::is_miranda(methodOop m, objArrayOop class_methods, klassOop super) { +bool klassVtable::is_miranda(Method* m, Array* class_methods, Klass* super) { Symbol* name = m->name(); Symbol* signature = m->signature(); - if (instanceKlass::find_method(class_methods, name, signature) == NULL) { + if (InstanceKlass::find_method(class_methods, name, signature) == NULL) { // did not find it in the method table of the current class if (super == NULL) { // super doesn't exist return true; } - methodOop mo = instanceKlass::cast(super)->lookup_method(name, signature); + Method* mo = InstanceKlass::cast(super)->lookup_method(name, signature); if (mo == NULL || mo->access_flags().is_private() ) { // super class hierarchy does not implement it or protection is different return true; @@ -535,19 +532,19 @@ return false; } -void klassVtable::add_new_mirandas_to_list(GrowableArray* list_of_current_mirandas, - objArrayOop current_interface_methods, - objArrayOop class_methods, - klassOop super) { +void klassVtable::add_new_mirandas_to_list(GrowableArray* list_of_current_mirandas, + Array* current_interface_methods, + Array* class_methods, + Klass* super) { // iterate thru the current interface's method to see if it a miranda int num_methods = current_interface_methods->length(); for (int i = 0; i < num_methods; i++) { - methodOop im = methodOop(current_interface_methods->obj_at(i)); + Method* im = current_interface_methods->at(i); bool is_duplicate = false; int num_of_current_mirandas = list_of_current_mirandas->length(); // check for duplicate mirandas in different interfaces we implement for (int j = 0; j < num_of_current_mirandas; j++) { - methodOop miranda = list_of_current_mirandas->at(j); + Method* miranda = list_of_current_mirandas->at(j); if ((im->name() == miranda->name()) && (im->signature() == miranda->signature())) { is_duplicate = true; @@ -557,7 +554,7 @@ if (!is_duplicate) { // we don't want duplicate miranda entries in the vtable if (is_miranda(im, class_methods, super)) { // is it a miranda at all? - instanceKlass *sk = instanceKlass::cast(super); + InstanceKlass *sk = InstanceKlass::cast(super); // check if it is a duplicate of a super's miranda if (sk->lookup_method_in_all_interfaces(im->name(), im->signature()) == NULL) { list_of_current_mirandas->append(im); @@ -567,30 +564,30 @@ } } -void klassVtable::get_mirandas(GrowableArray* mirandas, - klassOop super, objArrayOop class_methods, - objArrayOop local_interfaces) { +void klassVtable::get_mirandas(GrowableArray* mirandas, + Klass* super, Array* class_methods, + Array* local_interfaces) { assert((mirandas->length() == 0) , "current mirandas must be 0"); // iterate thru the local interfaces looking for a miranda int num_local_ifs = local_interfaces->length(); for (int i = 0; i < num_local_ifs; i++) { - instanceKlass *ik = instanceKlass::cast(klassOop(local_interfaces->obj_at(i))); + InstanceKlass *ik = InstanceKlass::cast(local_interfaces->at(i)); add_new_mirandas_to_list(mirandas, ik->methods(), class_methods, super); // iterate thru each local's super interfaces - objArrayOop super_ifs = ik->transitive_interfaces(); + Array* super_ifs = ik->transitive_interfaces(); int num_super_ifs = super_ifs->length(); for (int j = 0; j < num_super_ifs; j++) { - instanceKlass *sik = instanceKlass::cast(klassOop(super_ifs->obj_at(j))); + InstanceKlass *sik = InstanceKlass::cast(super_ifs->at(j)); add_new_mirandas_to_list(mirandas, sik->methods(), class_methods, super); } } } // get number of mirandas -int klassVtable::get_num_mirandas(klassOop super, objArrayOop class_methods, objArrayOop local_interfaces) { +int klassVtable::get_num_mirandas(Klass* super, Array* class_methods, Array* local_interfaces) { ResourceMark rm; - GrowableArray* mirandas = new GrowableArray(20); + GrowableArray* mirandas = new GrowableArray(20); get_mirandas(mirandas, super, class_methods, local_interfaces); return mirandas->length(); } @@ -598,8 +595,8 @@ // fill in mirandas void klassVtable::fill_in_mirandas(int& initialized) { ResourceMark rm; - GrowableArray* mirandas = new GrowableArray(20); - instanceKlass *this_ik = ik(); + GrowableArray* mirandas = new GrowableArray(20); + InstanceKlass *this_ik = ik(); get_mirandas(mirandas, this_ik->super(), this_ik->methods(), this_ik->local_interfaces()); int num_mirandas = mirandas->length(); for (int i = 0; i < num_mirandas; i++) { @@ -612,12 +609,12 @@ Copy::disjoint_words((HeapWord*)table(), (HeapWord*)start, _length * vtableEntry::size()); } -void klassVtable::adjust_method_entries(methodOop* old_methods, methodOop* new_methods, +void klassVtable::adjust_method_entries(Method** old_methods, Method** new_methods, int methods_length, bool * trace_name_printed) { // search the vtable for uses of either obsolete or EMCP methods for (int j = 0; j < methods_length; j++) { - methodOop old_method = old_methods[j]; - methodOop new_method = new_methods[j]; + Method* old_method = old_methods[j]; + Method* new_method = new_methods[j]; // In the vast majority of cases we could get the vtable index // by using: old_method->vtable_index() @@ -654,65 +651,11 @@ return _length == 0 || table()[0].method() != NULL; } - -// Garbage collection -void klassVtable::oop_follow_contents() { - int len = length(); - for (int i = 0; i < len; i++) { - MarkSweep::mark_and_push(adr_method_at(i)); - } -} - -#ifndef SERIALGC -void klassVtable::oop_follow_contents(ParCompactionManager* cm) { - int len = length(); - for (int i = 0; i < len; i++) { - PSParallelCompact::mark_and_push(cm, adr_method_at(i)); - } -} -#endif // SERIALGC - -void klassVtable::oop_adjust_pointers() { - int len = length(); - for (int i = 0; i < len; i++) { - MarkSweep::adjust_pointer(adr_method_at(i)); - } -} - -#ifndef SERIALGC -void klassVtable::oop_update_pointers(ParCompactionManager* cm) { - const int n = length(); - for (int i = 0; i < n; i++) { - PSParallelCompact::adjust_pointer(adr_method_at(i)); - } -} -#endif // SERIALGC - -// Iterators -void klassVtable::oop_oop_iterate(OopClosure* blk) { - int len = length(); - for (int i = 0; i < len; i++) { - blk->do_oop(adr_method_at(i)); - } -} - -void klassVtable::oop_oop_iterate_m(OopClosure* blk, MemRegion mr) { - int len = length(); - int i; - for (i = 0; i < len; i++) { - if ((HeapWord*)adr_method_at(i) >= mr.start()) break; - } - for (; i < len; i++) { - oop* adr = adr_method_at(i); - if ((HeapWord*)adr < mr.end()) blk->do_oop(adr); - } -} - //----------------------------------------------------------------------------------------- // Itable code // Initialize a itableMethodEntry -void itableMethodEntry::initialize(methodOop m) { +void itableMethodEntry::initialize(Method* m) { if (m == NULL) return; _method = m; @@ -725,10 +668,10 @@ itableOffsetEntry* offset_entry = (itableOffsetEntry*)klass->start_of_itable(); if (offset_entry != NULL && offset_entry->interface_klass() != NULL) { // Check that itable is initialized // First offset entry points to the first method_entry - intptr_t* method_entry = (intptr_t *)(((address)klass->as_klassOop()) + offset_entry->offset()); + intptr_t* method_entry = (intptr_t *)(((address)klass()) + offset_entry->offset()); intptr_t* end = klass->end_of_itable(); - _table_offset = (intptr_t*)offset_entry - (intptr_t*)klass->as_klassOop(); + _table_offset = (intptr_t*)offset_entry - (intptr_t*)klass(); _size_offset_table = (method_entry - ((intptr_t*)offset_entry)) / itableOffsetEntry::size(); _size_method_table = (end - method_entry) / itableMethodEntry::size(); assert(_table_offset >= 0 && _size_offset_table >= 0 && _size_method_table >= 0, "wrong computation"); @@ -742,112 +685,6 @@ _size_method_table = 0; } -// Garbage Collection - -void klassItable::oop_follow_contents() { - // offset table - itableOffsetEntry* ioe = offset_entry(0); - for(int i = 0; i < _size_offset_table; i++) { - MarkSweep::mark_and_push((oop*)&ioe->_interface); - ioe++; - } - - // method table - itableMethodEntry* ime = method_entry(0); - for(int j = 0; j < _size_method_table; j++) { - MarkSweep::mark_and_push((oop*)&ime->_method); - ime++; - } -} - -#ifndef SERIALGC -void klassItable::oop_follow_contents(ParCompactionManager* cm) { - // offset table - itableOffsetEntry* ioe = offset_entry(0); - for(int i = 0; i < _size_offset_table; i++) { - PSParallelCompact::mark_and_push(cm, (oop*)&ioe->_interface); - ioe++; - } - - // method table - itableMethodEntry* ime = method_entry(0); - for(int j = 0; j < _size_method_table; j++) { - PSParallelCompact::mark_and_push(cm, (oop*)&ime->_method); - ime++; - } -} -#endif // SERIALGC - -void klassItable::oop_adjust_pointers() { - // offset table - itableOffsetEntry* ioe = offset_entry(0); - for(int i = 0; i < _size_offset_table; i++) { - MarkSweep::adjust_pointer((oop*)&ioe->_interface); - ioe++; - } - - // method table - itableMethodEntry* ime = method_entry(0); - for(int j = 0; j < _size_method_table; j++) { - MarkSweep::adjust_pointer((oop*)&ime->_method); - ime++; - } -} - -#ifndef SERIALGC -void klassItable::oop_update_pointers(ParCompactionManager* cm) { - // offset table - itableOffsetEntry* ioe = offset_entry(0); - for(int i = 0; i < _size_offset_table; i++) { - PSParallelCompact::adjust_pointer((oop*)&ioe->_interface); - ioe++; - } - - // method table - itableMethodEntry* ime = method_entry(0); - for(int j = 0; j < _size_method_table; j++) { - PSParallelCompact::adjust_pointer((oop*)&ime->_method); - ime++; - } -} -#endif // SERIALGC - -// Iterators -void klassItable::oop_oop_iterate(OopClosure* blk) { - // offset table - itableOffsetEntry* ioe = offset_entry(0); - for(int i = 0; i < _size_offset_table; i++) { - blk->do_oop((oop*)&ioe->_interface); - ioe++; - } - - // method table - itableMethodEntry* ime = method_entry(0); - for(int j = 0; j < _size_method_table; j++) { - blk->do_oop((oop*)&ime->_method); - ime++; - } -} - -void klassItable::oop_oop_iterate_m(OopClosure* blk, MemRegion mr) { - // offset table - itableOffsetEntry* ioe = offset_entry(0); - for(int i = 0; i < _size_offset_table; i++) { - oop* adr = (oop*)&ioe->_interface; - if (mr.contains(adr)) blk->do_oop(adr); - ioe++; - } - - // method table - itableMethodEntry* ime = method_entry(0); - for(int j = 0; j < _size_method_table; j++) { - oop* adr = (oop*)&ime->_method; - if (mr.contains(adr)) blk->do_oop(adr); - ime++; - } -} - - static int initialize_count = 0; // Initialization @@ -870,6 +707,7 @@ int i; for(i = 0; i < num_interfaces; i++) { itableOffsetEntry* ioe = offset_entry(i); + HandleMark hm(THREAD); KlassHandle interf_h (THREAD, ioe->interface_klass()); assert(interf_h() != NULL && ioe->offset() != 0, "bad offset entry in itable"); initialize_itable_for_interface(ioe->offset(), interf_h, checkconstraints, CHECK); @@ -883,31 +721,31 @@ void klassItable::initialize_itable_for_interface(int method_table_offset, KlassHandle interf_h, bool checkconstraints, TRAPS) { - objArrayHandle methods(THREAD, instanceKlass::cast(interf_h())->methods()); - int nof_methods = methods()->length(); + Array* methods = InstanceKlass::cast(interf_h())->methods(); + int nof_methods = methods->length(); HandleMark hm; KlassHandle klass = _klass; assert(nof_methods > 0, "at least one method must exist for interface to be in vtable"); - Handle interface_loader (THREAD, instanceKlass::cast(interf_h())->class_loader()); + Handle interface_loader (THREAD, InstanceKlass::cast(interf_h())->class_loader()); int ime_num = 0; - // Skip first methodOop if it is a class initializer - int i = ((methodOop)methods()->obj_at(0))->is_static_initializer() ? 1 : 0; + // Skip first Method* if it is a class initializer + int i = methods->at(0)->is_static_initializer() ? 1 : 0; // m, method_name, method_signature, klass reset each loop so they // don't need preserving across check_signature_loaders call // methods needs a handle in case of gc from check_signature_loaders for(; i < nof_methods; i++) { - methodOop m = (methodOop)methods()->obj_at(i); + Method* m = methods->at(i); Symbol* method_name = m->name(); Symbol* method_signature = m->signature(); // This is same code as in Linkresolver::lookup_instance_method_in_klasses - methodOop target = klass->uncached_lookup_method(method_name, method_signature); + Method* target = klass->uncached_lookup_method(method_name, method_signature); while (target != NULL && target->is_static()) { // continue with recursive lookup through the superclass - klassOop super = Klass::cast(target->method_holder())->super(); - target = (super == NULL) ? methodOop(NULL) : Klass::cast(super)->uncached_lookup_method(method_name, method_signature); + Klass* super = Klass::cast(target->method_holder())->super(); + target = (super == NULL) ? (Method*)NULL : Klass::cast(super)->uncached_lookup_method(method_name, method_signature); } if (target == NULL || !target->is_public() || target->is_abstract()) { // Entry do not resolve. Leave it empty @@ -916,7 +754,7 @@ // if checkconstraints requested methodHandle target_h (THREAD, target); // preserve across gc if (checkconstraints) { - Handle method_holder_loader (THREAD, instanceKlass::cast(target->method_holder())->class_loader()); + Handle method_holder_loader (THREAD, InstanceKlass::cast(target->method_holder())->class_loader()); if (method_holder_loader() != interface_loader()) { ResourceMark rm(THREAD); char* failed_type_name = @@ -935,7 +773,7 @@ const char* loader1 = SystemDictionary::loader_name(method_holder_loader()); char* current = klass->name()->as_C_string(); const char* loader2 = SystemDictionary::loader_name(interface_loader()); - char* iface = instanceKlass::cast(interf_h())->name()->as_C_string(); + char* iface = InstanceKlass::cast(interf_h())->name()->as_C_string(); size_t buflen = strlen(msg) + strlen(sig) + strlen(loader1) + strlen(current) + strlen(loader2) + strlen(iface) + strlen(failed_type_name); @@ -955,8 +793,8 @@ } } -// Update entry for specific methodOop -void klassItable::initialize_with_method(methodOop m) { +// Update entry for specific Method* +void klassItable::initialize_with_method(Method* m) { itableMethodEntry* ime = method_entry(0); for(int i = 0; i < _size_method_table; i++) { if (ime->method() == m) { @@ -966,12 +804,12 @@ } } -void klassItable::adjust_method_entries(methodOop* old_methods, methodOop* new_methods, +void klassItable::adjust_method_entries(Method** old_methods, Method** new_methods, int methods_length, bool * trace_name_printed) { // search the itable for uses of either obsolete or EMCP methods for (int j = 0; j < methods_length; j++) { - methodOop old_method = old_methods[j]; - methodOop new_method = new_methods[j]; + Method* old_method = old_methods[j]; + Method* new_method = new_methods[j]; itableMethodEntry* ime = method_entry(0); // The itable can describe more than one interface and the same @@ -994,7 +832,7 @@ new_method->name()->as_C_string(), new_method->signature()->as_C_string())); } - break; + // Cannot break because there might be another entry for this method } ime++; } @@ -1005,20 +843,20 @@ // Setup class InterfaceVisiterClosure : public StackObj { public: - virtual void doit(klassOop intf, int method_count) = 0; + virtual void doit(Klass* intf, int method_count) = 0; }; // Visit all interfaces with at-least one method (excluding ) -void visit_all_interfaces(objArrayOop transitive_intf, InterfaceVisiterClosure *blk) { +void visit_all_interfaces(Array* transitive_intf, InterfaceVisiterClosure *blk) { // Handle array argument for(int i = 0; i < transitive_intf->length(); i++) { - klassOop intf = (klassOop)transitive_intf->obj_at(i); + Klass* intf = transitive_intf->at(i); assert(Klass::cast(intf)->is_interface(), "sanity check"); // Find no. of methods excluding a - int method_count = instanceKlass::cast(intf)->methods()->length(); + int method_count = InstanceKlass::cast(intf)->methods()->length(); if (method_count > 0) { - methodOop m = (methodOop)instanceKlass::cast(intf)->methods()->obj_at(0); + Method* m = InstanceKlass::cast(intf)->methods()->at(0); assert(m != NULL && m->is_method(), "sanity check"); if (m->name() == vmSymbols::object_initializer_name()) { method_count--; @@ -1042,7 +880,7 @@ int nof_methods() const { return _nof_methods; } int nof_interfaces() const { return _nof_interfaces; } - void doit(klassOop intf, int method_count) { _nof_methods += method_count; _nof_interfaces++; } + void doit(Klass* intf, int method_count) { _nof_methods += method_count; _nof_interfaces++; } }; class SetupItableClosure : public InterfaceVisiterClosure { @@ -1059,7 +897,7 @@ itableMethodEntry* method_entry() const { return _method_entry; } - void doit(klassOop intf, int method_count) { + void doit(Klass* intf, int method_count) { int offset = ((address)_method_entry) - _klass_begin; _offset_entry->initialize(intf, offset); _offset_entry++; @@ -1067,10 +905,10 @@ } }; -int klassItable::compute_itable_size(objArrayHandle transitive_interfaces) { +int klassItable::compute_itable_size(Array* transitive_interfaces) { // Count no of interfaces and total number of interface methods CountInterfacesClosure cic; - visit_all_interfaces(transitive_interfaces(), &cic); + visit_all_interfaces(transitive_interfaces, &cic); // There's alway an extra itable entry so we can null-terminate it. int itable_size = calc_itable_size(cic.nof_interfaces() + 1, cic.nof_methods()); @@ -1096,7 +934,7 @@ // Add one extra entry so we can null-terminate the table nof_interfaces++; - assert(compute_itable_size(objArrayHandle(klass->transitive_interfaces())) == + assert(compute_itable_size(klass->transitive_interfaces()) == calc_itable_size(nof_interfaces, nof_methods), "mismatch calculation of itable size"); @@ -1108,7 +946,7 @@ assert((oop*)(end) == (oop*)(ime + nof_methods), "wrong offset calculation (2)"); // Visit all interfaces and initialize itable offset table - SetupItableClosure sic((address)klass->as_klassOop(), ioe, ime); + SetupItableClosure sic((address)klass(), ioe, ime); visit_all_interfaces(klass->transitive_interfaces(), &sic); #ifdef ASSERT @@ -1120,17 +958,17 @@ // m must be a method in an interface -int klassItable::compute_itable_index(methodOop m) { - klassOop intf = m->method_holder(); - assert(instanceKlass::cast(intf)->is_interface(), "sanity check"); - objArrayOop methods = instanceKlass::cast(intf)->methods(); +int klassItable::compute_itable_index(Method* m) { + Klass* intf = m->method_holder(); + assert(InstanceKlass::cast(intf)->is_interface(), "sanity check"); + Array* methods = InstanceKlass::cast(intf)->methods(); int index = 0; - while(methods->obj_at(index) != m) { + while(methods->at(index) != m) { index++; assert(index < methods->length(), "should find index for resolve_invoke"); } // Adjust for , which is left out of table if first method - if (methods->length() > 0 && ((methodOop)methods->obj_at(0))->is_static_initializer()) { + if (methods->length() > 0 && methods->at(0)->is_static_initializer()) { index--; } return index; @@ -1138,20 +976,20 @@ // inverse to compute_itable_index -methodOop klassItable::method_for_itable_index(klassOop intf, int itable_index) { - assert(instanceKlass::cast(intf)->is_interface(), "sanity check"); - objArrayOop methods = instanceKlass::cast(intf)->methods(); +Method* klassItable::method_for_itable_index(Klass* intf, int itable_index) { + assert(InstanceKlass::cast(intf)->is_interface(), "sanity check"); + Array* methods = InstanceKlass::cast(intf)->methods(); int index = itable_index; // Adjust for , which is left out of table if first method - if (methods->length() > 0 && ((methodOop)methods->obj_at(0))->is_static_initializer()) { + if (methods->length() > 0 && methods->at(0)->is_static_initializer()) { index++; } if (itable_index < 0 || index >= methods->length()) return NULL; // help caller defend against bad indexes - methodOop m = (methodOop)methods->obj_at(index); + Method* m = methods->at(index); assert(compute_itable_index(m) == itable_index, "correct inverse"); return m; @@ -1174,9 +1012,9 @@ for (int i = 0; i < _length; i++) table()[i].verify(this, st); // verify consistency with superKlass vtable - klassOop super = _klass->super(); + Klass* super = _klass->super(); if (super != NULL) { - instanceKlass* sk = instanceKlass::cast(super); + InstanceKlass* sk = InstanceKlass::cast(super); klassVtable* vt = sk->vtable(); for (int i = 0; i < vt->length(); i++) { verify_against(st, vt, i); @@ -1238,8 +1076,8 @@ static int entries; // total bytes consumed by vtable entries static int array_entries; // total bytes consumed by array vtable entries - static void do_class(klassOop k) { - Klass* kl = k->klass_part(); + static void do_class(Klass* k) { + Klass* kl = k; klassVtable* vt = kl->vtable(); if (vt == NULL) return; no_klasses++; @@ -1258,7 +1096,7 @@ SystemDictionary::classes_do(do_class); fixed = no_klasses * oopSize; // vtable length // filler size is a conservative approximation - filler = oopSize * (no_klasses - no_instance_klasses) * (sizeof(instanceKlass) - sizeof(arrayKlass) - 1); + filler = oopSize * (no_klasses - no_instance_klasses) * (sizeof(InstanceKlass) - sizeof(arrayKlass) - 1); entries = sizeof(vtableEntry) * sum_of_vtable_len; array_entries = sizeof(vtableEntry) * sum_of_array_vtable_len; } @@ -1290,9 +1128,9 @@ bool klassVtable::check_no_old_entries() { // Check that there really is no entry for (int i = 0; i < length(); i++) { - methodOop m = unchecked_method_at(i); + Method* m = unchecked_method_at(i); if (m != NULL) { - if (m->is_old()) { + if (!m->is_valid() || m->is_old()) { return false; } } @@ -1303,7 +1141,7 @@ void klassVtable::dump_vtable() { tty->print_cr("vtable dump --"); for (int i = 0; i < length(); i++) { - methodOop m = unchecked_method_at(i); + Method* m = unchecked_method_at(i); if (m != NULL) { tty->print(" (%5d) ", i); m->access_flags().print_on(tty); @@ -1314,6 +1152,16 @@ } } +bool klassItable::check_no_old_entries() { + itableMethodEntry* ime = method_entry(0); + for(int i = 0; i < _size_method_table; i++) { + Method* m = ime->method(); + if (m != NULL && (!m->is_valid() || m->is_old())) return false; + ime++; + } + return true; +} + int klassItable::_total_classes; // Total no. of classes with itables long klassItable::_total_size; // Total no. of bytes used for itables diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/klassVtable.hpp --- a/src/share/vm/oops/klassVtable.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/klassVtable.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ #include "runtime/handles.hpp" #include "utilities/growableArray.hpp" -// A klassVtable abstracts the variable-length vtable that is embedded in instanceKlass +// A klassVtable abstracts the variable-length vtable that is embedded in InstanceKlass // and arrayKlass. klassVtable objects are used just as convenient transient accessors to the vtable, // not to actually hold the vtable data. // Note: the klassVtable should not be accessed before the class has been verified @@ -65,12 +65,12 @@ vtableEntry* table() const { return (vtableEntry*)(address(_klass()) + _tableOffset); } KlassHandle klass() const { return _klass; } int length() const { return _length; } - inline methodOop method_at(int i) const; - inline methodOop unchecked_method_at(int i) const; - inline oop* adr_method_at(int i) const; + inline Method* method_at(int i) const; + inline Method* unchecked_method_at(int i) const; + inline Method** adr_method_at(int i) const; // searching; all methods return -1 if not found - int index_of(methodOop m) const { return index_of(m, _length); } + int index_of(Method* m) const { return index_of(m, _length); } int index_of_miranda(Symbol* name, Symbol* signature); void initialize_vtable(bool checkconstraints, TRAPS); // initialize vtable of a new klass @@ -85,9 +85,9 @@ // computes vtable length (in words) and the number of miranda methods static void compute_vtable_size_and_num_mirandas(int &vtable_length, int &num_miranda_methods, - klassOop super, objArrayOop methods, + Klass* super, Array* methods, AccessFlags class_flags, Handle classloader, - Symbol* classname, objArrayOop local_interfaces, + Symbol* classname, Array* local_interfaces, TRAPS); // RedefineClasses() API support: @@ -96,23 +96,9 @@ // trace_name_printed is set to true if the current call has // printed the klass name so that other routines in the adjust_* // group don't print the klass name. - void adjust_method_entries(methodOop* old_methods, methodOop* new_methods, + void adjust_method_entries(Method** old_methods, Method** new_methods, int methods_length, bool * trace_name_printed); - // Garbage collection - void oop_follow_contents(); - void oop_adjust_pointers(); - -#ifndef SERIALGC - // Parallel Old - void oop_follow_contents(ParCompactionManager* cm); - void oop_update_pointers(ParCompactionManager* cm); -#endif // SERIALGC - - // Iterators - void oop_oop_iterate(OopClosure* blk); - void oop_oop_iterate_m(OopClosure* blk, MemRegion mr); - // Debugging code void print() PRODUCT_RETURN; void verify(outputStream* st, bool force = false); @@ -129,25 +115,25 @@ enum { VTABLE_TRANSITIVE_OVERRIDE_VERSION = 51 } ; void copy_vtable_to(vtableEntry* start); int initialize_from_super(KlassHandle super); - int index_of(methodOop m, int len) const; // same as index_of, but search only up to len - void put_method_at(methodOop m, int index); - static bool needs_new_vtable_entry(methodHandle m, klassOop super, Handle classloader, Symbol* classname, AccessFlags access_flags, TRAPS); + int index_of(Method* m, int len) const; // same as index_of, but search only up to len + void put_method_at(Method* m, int index); + static bool needs_new_vtable_entry(methodHandle m, Klass* super, Handle classloader, Symbol* classname, AccessFlags access_flags, TRAPS); - bool update_inherited_vtable(instanceKlass* klass, methodHandle target_method, int super_vtable_len, bool checkconstraints, TRAPS); - instanceKlass* find_transitive_override(instanceKlass* initialsuper, methodHandle target_method, int vtable_index, + bool update_inherited_vtable(InstanceKlass* klass, methodHandle target_method, int super_vtable_len, bool checkconstraints, TRAPS); + InstanceKlass* find_transitive_override(InstanceKlass* initialsuper, methodHandle target_method, int vtable_index, Handle target_loader, Symbol* target_classname, Thread* THREAD); // support for miranda methods bool is_miranda_entry_at(int i); void fill_in_mirandas(int& initialized); - static bool is_miranda(methodOop m, objArrayOop class_methods, klassOop super); - static void add_new_mirandas_to_list(GrowableArray* list_of_current_mirandas, objArrayOop current_interface_methods, objArrayOop class_methods, klassOop super); - static void get_mirandas(GrowableArray* mirandas, klassOop super, objArrayOop class_methods, objArrayOop local_interfaces); - static int get_num_mirandas(klassOop super, objArrayOop class_methods, objArrayOop local_interfaces); + static bool is_miranda(Method* m, Array* class_methods, Klass* super); + static void add_new_mirandas_to_list(GrowableArray* list_of_current_mirandas, Array* current_interface_methods, Array* class_methods, Klass* super); + static void get_mirandas(GrowableArray* mirandas, Klass* super, Array* class_methods, Array* local_interfaces); + static int get_num_mirandas(Klass* super, Array* class_methods, Array* local_interfaces); void verify_against(outputStream* st, klassVtable* vt, int index); - inline instanceKlass* ik() const; + inline InstanceKlass* ik() const; }; @@ -166,11 +152,11 @@ return sizeof(vtableEntry) / sizeof(HeapWord); } static int method_offset_in_bytes() { return offset_of(vtableEntry, _method); } - methodOop method() const { return _method; } + Method* method() const { return _method; } private: - methodOop _method; - void set(methodOop method) { assert(method != NULL, "use clear"); _method = method; } + Method* _method; + void set(Method* method) { assert(method != NULL, "use clear"); _method = method; } void clear() { _method = NULL; } void print() PRODUCT_RETURN; void verify(klassVtable* vt, outputStream* st); @@ -179,22 +165,22 @@ }; -inline methodOop klassVtable::method_at(int i) const { +inline Method* klassVtable::method_at(int i) const { assert(i >= 0 && i < _length, "index out of bounds"); assert(table()[i].method() != NULL, "should not be null"); - assert(oop(table()[i].method())->is_method(), "should be method"); + assert(((Metadata*)table()[i].method())->is_method(), "should be method"); return table()[i].method(); } -inline methodOop klassVtable::unchecked_method_at(int i) const { +inline Method* klassVtable::unchecked_method_at(int i) const { assert(i >= 0 && i < _length, "index out of bounds"); return table()[i].method(); } -inline oop* klassVtable::adr_method_at(int i) const { +inline Method** klassVtable::adr_method_at(int i) const { // Allow one past the last entry to be referenced; useful for loop bounds. assert(i >= 0 && i <= _length, "index out of bounds"); - return (oop*)(address(table() + i) + vtableEntry::method_offset_in_bytes()); + return (Method**)(address(table() + i) + vtableEntry::method_offset_in_bytes()); } // -------------------------------------------------------------------------------- @@ -203,16 +189,16 @@ class itableOffsetEntry VALUE_OBJ_CLASS_SPEC { private: - klassOop _interface; + Klass* _interface; int _offset; public: - klassOop interface_klass() const { return _interface; } + Klass* interface_klass() const { return _interface; } int offset() const { return _offset; } - static itableMethodEntry* method_entry(klassOop k, int offset) { return (itableMethodEntry*)(((address)k) + offset); } - itableMethodEntry* first_method_entry(klassOop k) { return method_entry(k, _offset); } + static itableMethodEntry* method_entry(Klass* k, int offset) { return (itableMethodEntry*)(((address)k) + offset); } + itableMethodEntry* first_method_entry(Klass* k) { return method_entry(k, _offset); } - void initialize(klassOop interf, int offset) { _interface = interf; _offset = offset; } + void initialize(Klass* interf, int offset) { _interface = interf; _offset = offset; } // Static size and offset accessors static int size() { return sizeof(itableOffsetEntry) / HeapWordSize; } // size in words @@ -225,14 +211,14 @@ class itableMethodEntry VALUE_OBJ_CLASS_SPEC { private: - methodOop _method; + Method* _method; public: - methodOop method() const { return _method; } + Method* method() const { return _method; } void clear() { _method = NULL; } - void initialize(methodOop method); + void initialize(Method* method); // Static size and offset accessors static int size() { return sizeof(itableMethodEntry) / HeapWordSize; } // size in words @@ -245,16 +231,16 @@ // Format of an itable // // ---- offset table --- -// klassOop of interface 1 \ +// Klass* of interface 1 \ // offset to vtable from start of oop / offset table entry // ... -// klassOop of interface n \ +// Klass* of interface n \ // offset to vtable from start of oop / offset table entry // --- vtable for interface 1 --- -// methodOop \ +// Method* \ // compiler entry point / method table entry // ... -// methodOop \ +// Method* \ // compiler entry point / method table entry // -- vtable for interface 2 --- // ... @@ -282,7 +268,7 @@ void initialize_itable(bool checkconstraints, TRAPS); // Updates - void initialize_with_method(methodOop m); + void initialize_with_method(Method* m); // RedefineClasses() API support: // if any entry of this itable points to any of old_methods, @@ -290,31 +276,17 @@ // trace_name_printed is set to true if the current call has // printed the klass name so that other routines in the adjust_* // group don't print the klass name. - void adjust_method_entries(methodOop* old_methods, methodOop* new_methods, + void adjust_method_entries(Method** old_methods, Method** new_methods, int methods_length, bool * trace_name_printed); - // Garbage collection - void oop_follow_contents(); - void oop_adjust_pointers(); - -#ifndef SERIALGC - // Parallel Old - void oop_follow_contents(ParCompactionManager* cm); - void oop_update_pointers(ParCompactionManager* cm); -#endif // SERIALGC - - // Iterators - void oop_oop_iterate(OopClosure* blk); - void oop_oop_iterate_m(OopClosure* blk, MemRegion mr); - // Setup of itable - static int compute_itable_size(objArrayHandle transitive_interfaces); + static int compute_itable_size(Array* transitive_interfaces); static void setup_itable_offset_table(instanceKlassHandle klass); // Resolving of method to index - static int compute_itable_index(methodOop m); + static int compute_itable_index(Method* m); // ...and back again: - static methodOop method_for_itable_index(klassOop klass, int itable_index); + static Method* method_for_itable_index(Klass* klass, int itable_index); // Debugging/Statistics static void print_statistics() PRODUCT_RETURN; @@ -330,6 +302,11 @@ NOT_PRODUCT(static long _total_size;) // Total no. of bytes used for itables static void update_stats(int size) PRODUCT_RETURN NOT_PRODUCT({ _total_classes++; _total_size += size; }) + + public: +#ifndef PRODUCT + bool check_no_old_entries(); +#endif }; #endif // SHARE_VM_OOPS_KLASSVTABLE_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/markOop.cpp --- a/src/share/vm/oops/markOop.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/markOop.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,32 +50,3 @@ st->print("age %d)", age()); } } - - -// Give advice about whether the oop that contains this markOop -// should be cached or not. -bool markOopDesc::should_not_be_cached() const { - // the cast is because decode_pointer() isn't marked const - if (is_marked() && ((markOopDesc *)this)->decode_pointer() != NULL) { - // If the oop containing this markOop is being forwarded, then - // we are in the middle of GC and we do not want the containing - // oop to be added to a cache. We have no way of knowing whether - // the cache has already been visited by the current GC phase so - // we don't know whether the forwarded oop will be properly - // processed in this phase. If the forwarded oop is not properly - // processed, then we'll see strange crashes or asserts during - // the next GC run because the markOop will contain an unexpected - // value. - // - // This situation has been seen when we are GC'ing a methodOop - // because we use the methodOop while we're GC'ing it. Scary - // stuff. Some of the uses the methodOop cause the methodOop to - // be added to the OopMapCache in the instanceKlass as a side - // effect. This check lets the cache maintainer know when a - // cache addition would not be safe. - return true; - } - - // caching the containing oop should be just fine - return false; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/markOop.hpp --- a/src/share/vm/oops/markOop.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/markOop.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -261,9 +261,9 @@ // Should this header be preserved during a scavenge where CMS is // the old generation? // (This is basically the same body as must_be_preserved_for_promotion_failure(), - // but takes the klassOop as argument instead) - inline bool must_be_preserved_for_cms_scavenge(klassOop klass_of_obj_containing_mark) const; - inline bool must_be_preserved_with_bias_for_cms_scavenge(klassOop klass_of_obj_containing_mark) const; + // but takes the Klass* as argument instead) + inline bool must_be_preserved_for_cms_scavenge(Klass* klass_of_obj_containing_mark) const; + inline bool must_be_preserved_with_bias_for_cms_scavenge(Klass* klass_of_obj_containing_mark) const; // WARNING: The following routines are used EXCLUSIVELY by // synchronization functions. They are not really gc safe. @@ -331,6 +331,7 @@ // age operations markOop set_marked() { return markOop((value() & ~lock_mask_in_place) | marked_value); } + markOop set_unmarked() { return markOop((value() & ~lock_mask_in_place) | unlocked_value); } int age() const { return mask_bits(value() >> age_shift, age_mask); } markOop set_age(int v) const { @@ -365,9 +366,6 @@ // Recover address of oop from encoded form used in mark inline void* decode_pointer() { if (UseBiasedLocking && has_bias_pattern()) return NULL; return clear_lock_bits(); } - // see the definition in markOop.cpp for the gory details - bool should_not_be_cached() const; - // These markOops indicate cms free chunk blocks and not objects. // In 64 bit, the markOop is set to distinguish them from oops. // These are defined in 32 bit mode for vmStructs. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/markOop.inline.hpp --- a/src/share/vm/oops/markOop.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/markOop.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,6 @@ #define SHARE_VM_OOPS_MARKOOP_INLINE_HPP #include "oops/klass.hpp" -#include "oops/klassOop.hpp" #include "oops/markOop.hpp" #include "runtime/globals.hpp" @@ -84,20 +83,20 @@ // Same as must_be_preserved_with_bias_for_promotion_failure() except that -// it takes a klassOop argument, instead of the object of which this is the mark word. -inline bool markOopDesc::must_be_preserved_with_bias_for_cms_scavenge(klassOop klass_of_obj_containing_mark) const { +// it takes a Klass* argument, instead of the object of which this is the mark word. +inline bool markOopDesc::must_be_preserved_with_bias_for_cms_scavenge(Klass* klass_of_obj_containing_mark) const { assert(UseBiasedLocking, "unexpected"); // CMS scavenges preserve mark words in similar fashion to promotion failures; see above if (has_bias_pattern() || - klass_of_obj_containing_mark->klass_part()->prototype_header()->has_bias_pattern()) { + klass_of_obj_containing_mark->prototype_header()->has_bias_pattern()) { return true; } return (!is_unlocked() || !has_no_hash()); } // Same as must_be_preserved_for_promotion_failure() except that -// it takes a klassOop argument, instead of the object of which this is the mark word. -inline bool markOopDesc::must_be_preserved_for_cms_scavenge(klassOop klass_of_obj_containing_mark) const { +// it takes a Klass* argument, instead of the object of which this is the mark word. +inline bool markOopDesc::must_be_preserved_for_cms_scavenge(Klass* klass_of_obj_containing_mark) const { if (!UseBiasedLocking) return (!is_unlocked() || !has_no_hash()); return must_be_preserved_with_bias_for_cms_scavenge(klass_of_obj_containing_mark); @@ -105,10 +104,10 @@ inline markOop markOopDesc::prototype_for_object(oop obj) { #ifdef ASSERT - markOop prototype_header = obj->klass()->klass_part()->prototype_header(); + markOop prototype_header = obj->klass()->prototype_header(); assert(prototype_header == prototype() || prototype_header->has_bias_pattern(), "corrupt prototype header"); #endif - return obj->klass()->klass_part()->prototype_header(); + return obj->klass()->prototype_header(); } #endif // SHARE_VM_OOPS_MARKOOP_INLINE_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/metadata.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/metadata.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "oops/metadata.hpp" +#include "memory/metaspace.hpp" +#include "memory/resourceArea.hpp" +#include "prims/jvmtiRedefineClasses.hpp" + +void Metadata::set_on_stack(const bool value) { + // nothing to set for most metadata + // Can't inline because this materializes the vtable on some C++ compilers. +} + +void Metadata::print_on(outputStream* st) const { + ResourceMark rm; + // print title + st->print("%s", internal_name()); + print_address_on(st); + st->cr(); +} + +char* Metadata::print_value_string() const { + char buf[100]; + stringStream st(buf, sizeof(buf)); + if (this == NULL) { + st.print("NULL"); + } else { + print_value_on(&st); + } + return st.as_string(); +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/metadata.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/metadata.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_OOPS_METADATA_HPP +#define SHARE_VM_OOPS_METADATA_HPP + +#include "utilities/exceptions.hpp" +#include "utilities/globalDefinitions.hpp" +#include "utilities/ostream.hpp" + +// This is the base class for an internal Class related metadata +class Metadata : public MetaspaceObj { + // Debugging hook to check that the metadata has not been deleted. + NOT_PRODUCT(int _valid;) + public: + NOT_PRODUCT(Metadata() { _valid = 0; }) + NOT_PRODUCT(bool is_valid() const volatile { return _valid == 0; }) + + int identity_hash() { return (int)(uintptr_t)this; } + + // Rehashing support for tables containing pointers to this + unsigned int new_hash(jint seed) { ShouldNotReachHere(); return 0; } + + virtual bool is_klass() const volatile { return false; } + virtual bool is_method() const volatile { return false; } + virtual bool is_methodData() const volatile { return false; } + virtual bool is_constantPool() const volatile { return false; } + + virtual const char* internal_name() const = 0; + + void print() const { print_on(tty); } + void print_value() const { print_value_on(tty); } + + void print_maybe_null() const { print_on_maybe_null(tty); } + void print_on_maybe_null(outputStream* st) const { + if (this == NULL) + st->print("NULL"); + else + print_on(tty); + } + void print_value_on_maybe_null(outputStream* st) const { + if (this == NULL) + st->print("NULL"); + else + print_value_on(tty); + } + + virtual void print_on(outputStream* st) const; // First level print + virtual void print_value_on(outputStream* st) const = 0; // Second level print + + char* print_value_string() const; + + // Used to keep metadata alive during class redefinition + // Can't assert because is called for delete functions (as an assert) + virtual bool on_stack() const { return false; } + virtual void set_on_stack(const bool value); + + // Set on_stack bit, so that the metadata is not cleared + // during class redefinition. This is a virtual call because only methods + // and constant pools need to be set, but someday instanceKlasses might also. + static void mark_on_stack(Metadata* m) { m->set_on_stack(true); } +}; + +#endif // SHARE_VM_OOPS_METADATA_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/method.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/method.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,1897 @@ +/* + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "classfile/systemDictionary.hpp" +#include "code/debugInfoRec.hpp" +#include "gc_interface/collectedHeap.inline.hpp" +#include "interpreter/bytecodeStream.hpp" +#include "interpreter/bytecodeTracer.hpp" +#include "interpreter/bytecodes.hpp" +#include "interpreter/interpreter.hpp" +#include "interpreter/oopMapCache.hpp" +#include "memory/gcLocker.hpp" +#include "memory/generation.hpp" +#include "memory/metadataFactory.hpp" +#include "memory/oopFactory.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" +#include "oops/oop.inline.hpp" +#include "oops/symbol.hpp" +#include "prims/jvmtiExport.hpp" +#include "prims/jvmtiRedefineClasses.hpp" +#include "prims/methodHandles.hpp" +#include "prims/nativeLookup.hpp" +#include "runtime/arguments.hpp" +#include "runtime/compilationPolicy.hpp" +#include "runtime/frame.inline.hpp" +#include "runtime/handles.inline.hpp" +#include "runtime/relocator.hpp" +#include "runtime/sharedRuntime.hpp" +#include "runtime/signature.hpp" +#include "utilities/quickSort.hpp" +#include "utilities/xmlstream.hpp" + + +// Implementation of Method + +Method* Method::allocate(ClassLoaderData* loader_data, + int byte_code_size, + AccessFlags access_flags, + int compressed_line_number_size, + int localvariable_table_length, + int exception_table_length, + int checked_exceptions_length, + TRAPS) { + assert(!access_flags.is_native() || byte_code_size == 0, + "native methods should not contain byte codes"); + ConstMethod* cm = ConstMethod::allocate(loader_data, + byte_code_size, + compressed_line_number_size, + localvariable_table_length, + exception_table_length, + checked_exceptions_length, + CHECK_NULL); + + int size = Method::size(access_flags.is_native()); + + return new (loader_data, size, false, THREAD) Method(cm, access_flags, size); +} + +Method::Method(ConstMethod* xconst, + AccessFlags access_flags, int size) { + No_Safepoint_Verifier no_safepoint; + set_constMethod(xconst); + set_access_flags(access_flags); + set_method_size(size); + set_name_index(0); + set_signature_index(0); +#ifdef CC_INTERP + set_result_index(T_VOID); +#endif + set_constants(NULL); + set_max_stack(0); + set_max_locals(0); + set_intrinsic_id(vmIntrinsics::_none); + set_jfr_towrite(false); + set_method_data(NULL); + set_interpreter_throwout_count(0); + set_vtable_index(Method::garbage_vtable_index); + + // Fix and bury in Method* + set_interpreter_entry(NULL); // sets i2i entry and from_int + set_adapter_entry(NULL); + clear_code(); // from_c/from_i get set to c2i/i2i + + if (access_flags.is_native()) { + clear_native_function(); + set_signature_handler(NULL); + } + + NOT_PRODUCT(set_compiled_invocation_count(0);) + set_interpreter_invocation_count(0); + invocation_counter()->init(); + backedge_counter()->init(); + clear_number_of_breakpoints(); + +#ifdef TIERED + set_rate(0); + set_prev_event_count(0); + set_prev_time(0); +#endif +} + +// Release Method*. The nmethod will be gone when we get here because +// we've walked the code cache. +void Method::deallocate_contents(ClassLoaderData* loader_data) { + MetadataFactory::free_metadata(loader_data, constMethod()); + set_constMethod(NULL); + MetadataFactory::free_metadata(loader_data, method_data()); + set_method_data(NULL); + // The nmethod will be gone when we get here. + if (code() != NULL) _code = NULL; +} + +address Method::get_i2c_entry() { + assert(_adapter != NULL, "must have"); + return _adapter->get_i2c_entry(); +} + +address Method::get_c2i_entry() { + assert(_adapter != NULL, "must have"); + return _adapter->get_c2i_entry(); +} + +address Method::get_c2i_unverified_entry() { + assert(_adapter != NULL, "must have"); + return _adapter->get_c2i_unverified_entry(); +} + +char* Method::name_and_sig_as_C_string() const { + return name_and_sig_as_C_string(Klass::cast(constants()->pool_holder()), name(), signature()); +} + +char* Method::name_and_sig_as_C_string(char* buf, int size) const { + return name_and_sig_as_C_string(Klass::cast(constants()->pool_holder()), name(), signature(), buf, size); +} + +char* Method::name_and_sig_as_C_string(Klass* klass, Symbol* method_name, Symbol* signature) { + const char* klass_name = klass->external_name(); + int klass_name_len = (int)strlen(klass_name); + int method_name_len = method_name->utf8_length(); + int len = klass_name_len + 1 + method_name_len + signature->utf8_length(); + char* dest = NEW_RESOURCE_ARRAY(char, len + 1); + strcpy(dest, klass_name); + dest[klass_name_len] = '.'; + strcpy(&dest[klass_name_len + 1], method_name->as_C_string()); + strcpy(&dest[klass_name_len + 1 + method_name_len], signature->as_C_string()); + dest[len] = 0; + return dest; +} + +char* Method::name_and_sig_as_C_string(Klass* klass, Symbol* method_name, Symbol* signature, char* buf, int size) { + Symbol* klass_name = klass->name(); + klass_name->as_klass_external_name(buf, size); + int len = (int)strlen(buf); + + if (len < size - 1) { + buf[len++] = '.'; + + method_name->as_C_string(&(buf[len]), size - len); + len = (int)strlen(buf); + + signature->as_C_string(&(buf[len]), size - len); + } + + return buf; +} + +int Method::fast_exception_handler_bci_for(KlassHandle ex_klass, int throw_bci, TRAPS) { + // exception table holds quadruple entries of the form (beg_bci, end_bci, handler_bci, klass_index) + // access exception table + ExceptionTable table(this); + int length = table.length(); + // iterate through all entries sequentially + constantPoolHandle pool(THREAD, constants()); + for (int i = 0; i < length; i ++) { + //reacquire the table in case a GC happened + ExceptionTable table(this); + int beg_bci = table.start_pc(i); + int end_bci = table.end_pc(i); + assert(beg_bci <= end_bci, "inconsistent exception table"); + if (beg_bci <= throw_bci && throw_bci < end_bci) { + // exception handler bci range covers throw_bci => investigate further + int handler_bci = table.handler_pc(i); + int klass_index = table.catch_type_index(i); + if (klass_index == 0) { + return handler_bci; + } else if (ex_klass.is_null()) { + return handler_bci; + } else { + // we know the exception class => get the constraint class + // this may require loading of the constraint class; if verification + // fails or some other exception occurs, return handler_bci + Klass* k = pool->klass_at(klass_index, CHECK_(handler_bci)); + KlassHandle klass = KlassHandle(THREAD, k); + assert(klass.not_null(), "klass not loaded"); + if (ex_klass->is_subtype_of(klass())) { + return handler_bci; + } + } + } + } + + return -1; +} + +void Method::mask_for(int bci, InterpreterOopMap* mask) { + + Thread* myThread = Thread::current(); + methodHandle h_this(myThread, this); +#ifdef ASSERT + bool has_capability = myThread->is_VM_thread() || + myThread->is_ConcurrentGC_thread() || + myThread->is_GC_task_thread(); + + if (!has_capability) { + if (!VerifyStack && !VerifyLastFrame) { + // verify stack calls this outside VM thread + warning("oopmap should only be accessed by the " + "VM, GC task or CMS threads (or during debugging)"); + InterpreterOopMap local_mask; + InstanceKlass::cast(method_holder())->mask_for(h_this, bci, &local_mask); + local_mask.print(); + } + } +#endif + InstanceKlass::cast(method_holder())->mask_for(h_this, bci, mask); + return; +} + + +int Method::bci_from(address bcp) const { + assert(is_native() && bcp == code_base() || contains(bcp) || is_error_reported(), + err_msg("bcp doesn't belong to this method: bcp: " INTPTR_FORMAT ", method: %s", bcp, name_and_sig_as_C_string())); + return bcp - code_base(); +} + + +// Return (int)bcx if it appears to be a valid BCI. +// Return bci_from((address)bcx) if it appears to be a valid BCP. +// Return -1 otherwise. +// Used by profiling code, when invalid data is a possibility. +// The caller is responsible for validating the Method* itself. +int Method::validate_bci_from_bcx(intptr_t bcx) const { + // keep bci as -1 if not a valid bci + int bci = -1; + if (bcx == 0 || (address)bcx == code_base()) { + // code_size() may return 0 and we allow 0 here + // the method may be native + bci = 0; + } else if (frame::is_bci(bcx)) { + if (bcx < code_size()) { + bci = (int)bcx; + } + } else if (contains((address)bcx)) { + bci = (address)bcx - code_base(); + } + // Assert that if we have dodged any asserts, bci is negative. + assert(bci == -1 || bci == bci_from(bcp_from(bci)), "sane bci if >=0"); + return bci; +} + +address Method::bcp_from(int bci) const { + assert((is_native() && bci == 0) || (!is_native() && 0 <= bci && bci < code_size()), "illegal bci"); + address bcp = code_base() + bci; + assert(is_native() && bcp == code_base() || contains(bcp), "bcp doesn't belong to this method"); + return bcp; +} + + +int Method::size(bool is_native) { + // If native, then include pointers for native_function and signature_handler + int extra_bytes = (is_native) ? 2*sizeof(address*) : 0; + int extra_words = align_size_up(extra_bytes, BytesPerWord) / BytesPerWord; + return align_object_size(header_size() + extra_words); +} + + +Symbol* Method::klass_name() const { + Klass* k = method_holder(); + assert(k->is_klass(), "must be klass"); + InstanceKlass* ik = (InstanceKlass*) k; + return ik->name(); +} + + +void Method::set_interpreter_kind() { + int kind = Interpreter::method_kind(this); + assert(kind != Interpreter::invalid, + "interpreter entry must be valid"); + set_interpreter_kind(kind); +} + + +// Attempt to return method oop to original state. Clear any pointers +// (to objects outside the shared spaces). We won't be able to predict +// where they should point in a new JVM. Further initialize some +// entries now in order allow them to be write protected later. + +void Method::remove_unshareable_info() { + unlink_method(); + set_interpreter_kind(); +} + + +bool Method::was_executed_more_than(int n) { + // Invocation counter is reset when the Method* is compiled. + // If the method has compiled code we therefore assume it has + // be excuted more than n times. + if (is_accessor() || is_empty_method() || (code() != NULL)) { + // interpreter doesn't bump invocation counter of trivial methods + // compiler does not bump invocation counter of compiled methods + return true; + } + else if (_invocation_counter.carry() || (method_data() != NULL && method_data()->invocation_counter()->carry())) { + // The carry bit is set when the counter overflows and causes + // a compilation to occur. We don't know how many times + // the counter has been reset, so we simply assume it has + // been executed more than n times. + return true; + } else { + return invocation_count() > n; + } +} + +#ifndef PRODUCT +void Method::print_invocation_count() { + if (is_static()) tty->print("static "); + if (is_final()) tty->print("final "); + if (is_synchronized()) tty->print("synchronized "); + if (is_native()) tty->print("native "); + method_holder()->name()->print_symbol_on(tty); + tty->print("."); + name()->print_symbol_on(tty); + signature()->print_symbol_on(tty); + + if (WizardMode) { + // dump the size of the byte codes + tty->print(" {%d}", code_size()); + } + tty->cr(); + + tty->print_cr (" interpreter_invocation_count: %8d ", interpreter_invocation_count()); + tty->print_cr (" invocation_counter: %8d ", invocation_count()); + tty->print_cr (" backedge_counter: %8d ", backedge_count()); + if (CountCompiledCalls) { + tty->print_cr (" compiled_invocation_count: %8d ", compiled_invocation_count()); + } + +} +#endif + +// Build a MethodData* object to hold information about this method +// collected in the interpreter. +void Method::build_interpreter_method_data(methodHandle method, TRAPS) { + // Do not profile method if current thread holds the pending list lock, + // which avoids deadlock for acquiring the MethodData_lock. + if (instanceRefKlass::owns_pending_list_lock((JavaThread*)THREAD)) { + return; + } + + // Grab a lock here to prevent multiple + // MethodData*s from being created. + MutexLocker ml(MethodData_lock, THREAD); + if (method->method_data() == NULL) { + ClassLoaderData* loader_data = method->method_holder()->class_loader_data(); + MethodData* method_data = MethodData::allocate(loader_data, method, CHECK); + method->set_method_data(method_data); + if (PrintMethodData && (Verbose || WizardMode)) { + ResourceMark rm(THREAD); + tty->print("build_interpreter_method_data for "); + method->print_name(tty); + tty->cr(); + // At the end of the run, the MDO, full of data, will be dumped. + } + } +} + +void Method::cleanup_inline_caches() { + // The current system doesn't use inline caches in the interpreter + // => nothing to do (keep this method around for future use) +} + + +int Method::extra_stack_words() { + // not an inline function, to avoid a header dependency on Interpreter + return extra_stack_entries() * Interpreter::stackElementSize; +} + + +void Method::compute_size_of_parameters(Thread *thread) { + ArgumentSizeComputer asc(signature()); + set_size_of_parameters(asc.size() + (is_static() ? 0 : 1)); +} + +#ifdef CC_INTERP +void Method::set_result_index(BasicType type) { + _result_index = Interpreter::BasicType_as_index(type); +} +#endif + +BasicType Method::result_type() const { + ResultTypeFinder rtf(signature()); + return rtf.type(); +} + + +bool Method::is_empty_method() const { + return code_size() == 1 + && *code_base() == Bytecodes::_return; +} + + +bool Method::is_vanilla_constructor() const { + // Returns true if this method is a vanilla constructor, i.e. an "" "()V" method + // which only calls the superclass vanilla constructor and possibly does stores of + // zero constants to local fields: + // + // aload_0 + // invokespecial + // indexbyte1 + // indexbyte2 + // + // followed by an (optional) sequence of: + // + // aload_0 + // aconst_null / iconst_0 / fconst_0 / dconst_0 + // putfield + // indexbyte1 + // indexbyte2 + // + // followed by: + // + // return + + assert(name() == vmSymbols::object_initializer_name(), "Should only be called for default constructors"); + assert(signature() == vmSymbols::void_method_signature(), "Should only be called for default constructors"); + int size = code_size(); + // Check if size match + if (size == 0 || size % 5 != 0) return false; + address cb = code_base(); + int last = size - 1; + if (cb[0] != Bytecodes::_aload_0 || cb[1] != Bytecodes::_invokespecial || cb[last] != Bytecodes::_return) { + // Does not call superclass default constructor + return false; + } + // Check optional sequence + for (int i = 4; i < last; i += 5) { + if (cb[i] != Bytecodes::_aload_0) return false; + if (!Bytecodes::is_zero_const(Bytecodes::cast(cb[i+1]))) return false; + if (cb[i+2] != Bytecodes::_putfield) return false; + } + return true; +} + + +bool Method::compute_has_loops_flag() { + BytecodeStream bcs(this); + Bytecodes::Code bc; + + while ((bc = bcs.next()) >= 0) { + switch( bc ) { + case Bytecodes::_ifeq: + case Bytecodes::_ifnull: + case Bytecodes::_iflt: + case Bytecodes::_ifle: + case Bytecodes::_ifne: + case Bytecodes::_ifnonnull: + case Bytecodes::_ifgt: + case Bytecodes::_ifge: + case Bytecodes::_if_icmpeq: + case Bytecodes::_if_icmpne: + case Bytecodes::_if_icmplt: + case Bytecodes::_if_icmpgt: + case Bytecodes::_if_icmple: + case Bytecodes::_if_icmpge: + case Bytecodes::_if_acmpeq: + case Bytecodes::_if_acmpne: + case Bytecodes::_goto: + case Bytecodes::_jsr: + if( bcs.dest() < bcs.next_bci() ) _access_flags.set_has_loops(); + break; + + case Bytecodes::_goto_w: + case Bytecodes::_jsr_w: + if( bcs.dest_w() < bcs.next_bci() ) _access_flags.set_has_loops(); + break; + } + } + _access_flags.set_loops_flag_init(); + return _access_flags.has_loops(); +} + + +bool Method::is_final_method() const { + // %%% Should return true for private methods also, + // since there is no way to override them. + return is_final() || Klass::cast(method_holder())->is_final(); +} + + +bool Method::is_strict_method() const { + return is_strict(); +} + + +bool Method::can_be_statically_bound() const { + if (is_final_method()) return true; + return vtable_index() == nonvirtual_vtable_index; +} + + +bool Method::is_accessor() const { + if (code_size() != 5) return false; + if (size_of_parameters() != 1) return false; + if (java_code_at(0) != Bytecodes::_aload_0 ) return false; + if (java_code_at(1) != Bytecodes::_getfield) return false; + if (java_code_at(4) != Bytecodes::_areturn && + java_code_at(4) != Bytecodes::_ireturn ) return false; + return true; +} + + +bool Method::is_initializer() const { + return name() == vmSymbols::object_initializer_name() || is_static_initializer(); +} + +bool Method::has_valid_initializer_flags() const { + return (is_static() || + InstanceKlass::cast(method_holder())->major_version() < 51); +} + +bool Method::is_static_initializer() const { + // For classfiles version 51 or greater, ensure that the clinit method is + // static. Non-static methods with the name "" are not static + // initializers. (older classfiles exempted for backward compatibility) + return name() == vmSymbols::class_initializer_name() && + has_valid_initializer_flags(); +} + + +objArrayHandle Method::resolved_checked_exceptions_impl(Method* this_oop, TRAPS) { + int length = this_oop->checked_exceptions_length(); + if (length == 0) { // common case + return objArrayHandle(THREAD, Universe::the_empty_class_klass_array()); + } else { + methodHandle h_this(THREAD, this_oop); + objArrayOop m_oop = oopFactory::new_objArray(SystemDictionary::Class_klass(), length, CHECK_(objArrayHandle())); + objArrayHandle mirrors (THREAD, m_oop); + for (int i = 0; i < length; i++) { + CheckedExceptionElement* table = h_this->checked_exceptions_start(); // recompute on each iteration, not gc safe + Klass* k = h_this->constants()->klass_at(table[i].class_cp_index, CHECK_(objArrayHandle())); + assert(Klass::cast(k)->is_subclass_of(SystemDictionary::Throwable_klass()), "invalid exception class"); + mirrors->obj_at_put(i, Klass::cast(k)->java_mirror()); + } + return mirrors; + } +}; + + +int Method::line_number_from_bci(int bci) const { + if (bci == SynchronizationEntryBCI) bci = 0; + assert(bci == 0 || 0 <= bci && bci < code_size(), "illegal bci"); + int best_bci = 0; + int best_line = -1; + + if (has_linenumber_table()) { + // The line numbers are a short array of 2-tuples [start_pc, line_number]. + // Not necessarily sorted and not necessarily one-to-one. + CompressedLineNumberReadStream stream(compressed_linenumber_table()); + while (stream.read_pair()) { + if (stream.bci() == bci) { + // perfect match + return stream.line(); + } else { + // update best_bci/line + if (stream.bci() < bci && stream.bci() >= best_bci) { + best_bci = stream.bci(); + best_line = stream.line(); + } + } + } + } + return best_line; +} + + +bool Method::is_klass_loaded_by_klass_index(int klass_index) const { + if( constants()->tag_at(klass_index).is_unresolved_klass() ) { + Thread *thread = Thread::current(); + Symbol* klass_name = constants()->klass_name_at(klass_index); + Handle loader(thread, InstanceKlass::cast(method_holder())->class_loader()); + Handle prot (thread, Klass::cast(method_holder())->protection_domain()); + return SystemDictionary::find(klass_name, loader, prot, thread) != NULL; + } else { + return true; + } +} + + +bool Method::is_klass_loaded(int refinfo_index, bool must_be_resolved) const { + int klass_index = constants()->klass_ref_index_at(refinfo_index); + if (must_be_resolved) { + // Make sure klass is resolved in constantpool. + if (constants()->tag_at(klass_index).is_unresolved_klass()) return false; + } + return is_klass_loaded_by_klass_index(klass_index); +} + + +void Method::set_native_function(address function, bool post_event_flag) { + assert(function != NULL, "use clear_native_function to unregister natives"); + assert(!is_method_handle_intrinsic() || function == SharedRuntime::native_method_throw_unsatisfied_link_error_entry(), ""); + address* native_function = native_function_addr(); + + // We can see racers trying to place the same native function into place. Once + // is plenty. + address current = *native_function; + if (current == function) return; + if (post_event_flag && JvmtiExport::should_post_native_method_bind() && + function != NULL) { + // native_method_throw_unsatisfied_link_error_entry() should only + // be passed when post_event_flag is false. + assert(function != + SharedRuntime::native_method_throw_unsatisfied_link_error_entry(), + "post_event_flag mis-match"); + + // post the bind event, and possible change the bind function + JvmtiExport::post_native_method_bind(this, &function); + } + *native_function = function; + // This function can be called more than once. We must make sure that we always + // use the latest registered method -> check if a stub already has been generated. + // If so, we have to make it not_entrant. + nmethod* nm = code(); // Put it into local variable to guard against concurrent updates + if (nm != NULL) { + nm->make_not_entrant(); + } +} + + +bool Method::has_native_function() const { + if (is_method_handle_intrinsic()) + return false; // special-cased in SharedRuntime::generate_native_wrapper + address func = native_function(); + return (func != NULL && func != SharedRuntime::native_method_throw_unsatisfied_link_error_entry()); +} + + +void Method::clear_native_function() { + // Note: is_method_handle_intrinsic() is allowed here. + set_native_function( + SharedRuntime::native_method_throw_unsatisfied_link_error_entry(), + !native_bind_event_is_interesting); + clear_code(); +} + +address Method::critical_native_function() { + methodHandle mh(this); + return NativeLookup::lookup_critical_entry(mh); +} + + +void Method::set_signature_handler(address handler) { + address* signature_handler = signature_handler_addr(); + *signature_handler = handler; +} + + +bool Method::is_not_compilable(int comp_level) const { + if (number_of_breakpoints() > 0) { + return true; + } + if (is_method_handle_intrinsic()) { + return !is_synthetic(); // the generated adapters must be compiled + } + if (comp_level == CompLevel_any) { + return is_not_c1_compilable() || is_not_c2_compilable(); + } + if (is_c1_compile(comp_level)) { + return is_not_c1_compilable(); + } + if (is_c2_compile(comp_level)) { + return is_not_c2_compilable(); + } + return false; +} + +// call this when compiler finds that this method is not compilable +void Method::set_not_compilable(int comp_level, bool report) { + if (PrintCompilation && report) { + ttyLocker ttyl; + tty->print("made not compilable "); + this->print_short_name(tty); + int size = this->code_size(); + if (size > 0) + tty->print(" (%d bytes)", size); + tty->cr(); + } + if ((TraceDeoptimization || LogCompilation) && (xtty != NULL)) { + ttyLocker ttyl; + xtty->begin_elem("make_not_compilable thread='%d'", (int) os::current_thread_id()); + xtty->method(this); + xtty->stamp(); + xtty->end_elem(); + } + if (comp_level == CompLevel_all) { + set_not_c1_compilable(); + set_not_c2_compilable(); + } else { + if (is_c1_compile(comp_level)) { + set_not_c1_compilable(); + } else + if (is_c2_compile(comp_level)) { + set_not_c2_compilable(); + } + } + CompilationPolicy::policy()->disable_compilation(this); +} + +// Revert to using the interpreter and clear out the nmethod +void Method::clear_code() { + + // this may be NULL if c2i adapters have not been made yet + // Only should happen at allocate time. + if (_adapter == NULL) { + _from_compiled_entry = NULL; + } else { + _from_compiled_entry = _adapter->get_c2i_entry(); + } + OrderAccess::storestore(); + _from_interpreted_entry = _i2i_entry; + OrderAccess::storestore(); + _code = NULL; +} + +// Called by class data sharing to remove any entry points (which are not shared) +void Method::unlink_method() { + _code = NULL; + _i2i_entry = NULL; + _from_interpreted_entry = NULL; + if (is_native()) { + *native_function_addr() = NULL; + set_signature_handler(NULL); + } + NOT_PRODUCT(set_compiled_invocation_count(0);) + invocation_counter()->reset(); + backedge_counter()->reset(); + _adapter = NULL; + _from_compiled_entry = NULL; + assert(_method_data == NULL, "unexpected method data?"); + set_method_data(NULL); + set_interpreter_throwout_count(0); + set_interpreter_invocation_count(0); +} + +// Called when the method_holder is getting linked. Setup entrypoints so the method +// is ready to be called from interpreter, compiler, and vtables. +void Method::link_method(methodHandle h_method, TRAPS) { + // If the code cache is full, we may reenter this function for the + // leftover methods that weren't linked. + if (_i2i_entry != NULL) return; + + assert(_adapter == NULL, "init'd to NULL" ); + assert( _code == NULL, "nothing compiled yet" ); + + // Setup interpreter entrypoint + assert(this == h_method(), "wrong h_method()" ); + address entry = Interpreter::entry_for_method(h_method); + assert(entry != NULL, "interpreter entry must be non-null"); + // Sets both _i2i_entry and _from_interpreted_entry + set_interpreter_entry(entry); + if (is_native() && !is_method_handle_intrinsic()) { + set_native_function( + SharedRuntime::native_method_throw_unsatisfied_link_error_entry(), + !native_bind_event_is_interesting); + } + + // Setup compiler entrypoint. This is made eagerly, so we do not need + // special handling of vtables. An alternative is to make adapters more + // lazily by calling make_adapter() from from_compiled_entry() for the + // normal calls. For vtable calls life gets more complicated. When a + // call-site goes mega-morphic we need adapters in all methods which can be + // called from the vtable. We need adapters on such methods that get loaded + // later. Ditto for mega-morphic itable calls. If this proves to be a + // problem we'll make these lazily later. + (void) make_adapters(h_method, CHECK); + + // ONLY USE the h_method now as make_adapter may have blocked + +} + +address Method::make_adapters(methodHandle mh, TRAPS) { + // Adapters for compiled code are made eagerly here. They are fairly + // small (generally < 100 bytes) and quick to make (and cached and shared) + // so making them eagerly shouldn't be too expensive. + AdapterHandlerEntry* adapter = AdapterHandlerLibrary::get_adapter(mh); + if (adapter == NULL ) { + THROW_MSG_NULL(vmSymbols::java_lang_VirtualMachineError(), "out of space in CodeCache for adapters"); + } + + mh->set_adapter_entry(adapter); + mh->_from_compiled_entry = adapter->get_c2i_entry(); + return adapter->get_c2i_entry(); +} + +// The verified_code_entry() must be called when a invoke is resolved +// on this method. + +// It returns the compiled code entry point, after asserting not null. +// This function is called after potential safepoints so that nmethod +// or adapter that it points to is still live and valid. +// This function must not hit a safepoint! +address Method::verified_code_entry() { + debug_only(No_Safepoint_Verifier nsv;) + nmethod *code = (nmethod *)OrderAccess::load_ptr_acquire(&_code); + if (code == NULL && UseCodeCacheFlushing) { + nmethod *saved_code = CodeCache::find_and_remove_saved_code(this); + if (saved_code != NULL) { + methodHandle method(this); + assert( ! saved_code->is_osr_method(), "should not get here for osr" ); + set_code( method, saved_code ); + } + } + + assert(_from_compiled_entry != NULL, "must be set"); + return _from_compiled_entry; +} + +// Check that if an nmethod ref exists, it has a backlink to this or no backlink at all +// (could be racing a deopt). +// Not inline to avoid circular ref. +bool Method::check_code() const { + // cached in a register or local. There's a race on the value of the field. + nmethod *code = (nmethod *)OrderAccess::load_ptr_acquire(&_code); + return code == NULL || (code->method() == NULL) || (code->method() == (Method*)this && !code->is_osr_method()); +} + +// Install compiled code. Instantly it can execute. +void Method::set_code(methodHandle mh, nmethod *code) { + assert( code, "use clear_code to remove code" ); + assert( mh->check_code(), "" ); + + guarantee(mh->adapter() != NULL, "Adapter blob must already exist!"); + + // These writes must happen in this order, because the interpreter will + // directly jump to from_interpreted_entry which jumps to an i2c adapter + // which jumps to _from_compiled_entry. + mh->_code = code; // Assign before allowing compiled code to exec + + int comp_level = code->comp_level(); + // In theory there could be a race here. In practice it is unlikely + // and not worth worrying about. + if (comp_level > mh->highest_comp_level()) { + mh->set_highest_comp_level(comp_level); + } + + OrderAccess::storestore(); +#ifdef SHARK + mh->_from_interpreted_entry = code->insts_begin(); +#else //!SHARK + mh->_from_compiled_entry = code->verified_entry_point(); + OrderAccess::storestore(); + // Instantly compiled code can execute. + if (!mh->is_method_handle_intrinsic()) + mh->_from_interpreted_entry = mh->get_i2c_entry(); +#endif //!SHARK +} + + +bool Method::is_overridden_in(Klass* k) const { + InstanceKlass* ik = InstanceKlass::cast(k); + + if (ik->is_interface()) return false; + + // If method is an interface, we skip it - except if it + // is a miranda method + if (InstanceKlass::cast(method_holder())->is_interface()) { + // Check that method is not a miranda method + if (ik->lookup_method(name(), signature()) == NULL) { + // No implementation exist - so miranda method + return false; + } + return true; + } + + assert(ik->is_subclass_of(method_holder()), "should be subklass"); + assert(ik->vtable() != NULL, "vtable should exist"); + if (vtable_index() == nonvirtual_vtable_index) { + return false; + } else { + Method* vt_m = ik->method_at_vtable(vtable_index()); + return vt_m != this; + } +} + + +// give advice about whether this Method* should be cached or not +bool Method::should_not_be_cached() const { + if (is_old()) { + // This method has been redefined. It is either EMCP or obsolete + // and we don't want to cache it because that would pin the method + // down and prevent it from being collectible if and when it + // finishes executing. + return true; + } + + // caching this method should be just fine + return false; +} + +// Constant pool structure for invoke methods: +enum { + _imcp_invoke_name = 1, // utf8: 'invokeExact', etc. + _imcp_invoke_signature, // utf8: (variable Symbol*) + _imcp_limit +}; + +// Test if this method is an MH adapter frame generated by Java code. +// Cf. java/lang/invoke/InvokerBytecodeGenerator +bool Method::is_compiled_lambda_form() const { + return intrinsic_id() == vmIntrinsics::_compiledLambdaForm; +} + +// Test if this method is an internal MH primitive method. +bool Method::is_method_handle_intrinsic() const { + vmIntrinsics::ID iid = intrinsic_id(); + return (MethodHandles::is_signature_polymorphic(iid) && + MethodHandles::is_signature_polymorphic_intrinsic(iid)); +} + +bool Method::has_member_arg() const { + vmIntrinsics::ID iid = intrinsic_id(); + return (MethodHandles::is_signature_polymorphic(iid) && + MethodHandles::has_member_arg(iid)); +} + +// Make an instance of a signature-polymorphic internal MH primitive. +methodHandle Method::make_method_handle_intrinsic(vmIntrinsics::ID iid, + Symbol* signature, + TRAPS) { + ResourceMark rm; + methodHandle empty; + + KlassHandle holder = SystemDictionary::MethodHandle_klass(); + Symbol* name = MethodHandles::signature_polymorphic_intrinsic_name(iid); + assert(iid == MethodHandles::signature_polymorphic_name_id(name), ""); + if (TraceMethodHandles) { + tty->print_cr("make_method_handle_intrinsic MH.%s%s", name->as_C_string(), signature->as_C_string()); + } + + // invariant: cp->symbol_at_put is preceded by a refcount increment (more usually a lookup) + name->increment_refcount(); + signature->increment_refcount(); + + int cp_length = _imcp_limit; + ClassLoaderData* loader_data = holder->class_loader_data(); + constantPoolHandle cp; + { + ConstantPool* cp_oop = ConstantPool::allocate(loader_data, cp_length, CHECK_(empty)); + cp = constantPoolHandle(THREAD, cp_oop); + } + cp->set_pool_holder(holder()); + cp->symbol_at_put(_imcp_invoke_name, name); + cp->symbol_at_put(_imcp_invoke_signature, signature); + cp->set_preresolution(); + + // decide on access bits: public or not? + int flags_bits = (JVM_ACC_NATIVE | JVM_ACC_SYNTHETIC | JVM_ACC_FINAL); + bool must_be_static = MethodHandles::is_signature_polymorphic_static(iid); + if (must_be_static) flags_bits |= JVM_ACC_STATIC; + assert((flags_bits & JVM_ACC_PUBLIC) == 0, "do not expose these methods"); + + methodHandle m; + { + Method* m_oop = Method::allocate(loader_data, 0, accessFlags_from(flags_bits), + 0, 0, 0, 0, CHECK_(empty)); + m = methodHandle(THREAD, m_oop); + } + m->set_constants(cp()); + m->set_name_index(_imcp_invoke_name); + m->set_signature_index(_imcp_invoke_signature); + assert(MethodHandles::is_signature_polymorphic_name(m->name()), ""); + assert(m->signature() == signature, ""); +#ifdef CC_INTERP + ResultTypeFinder rtf(signature); + m->set_result_index(rtf.type()); +#endif + m->compute_size_of_parameters(THREAD); + m->init_intrinsic_id(); + assert(m->is_method_handle_intrinsic(), ""); +#ifdef ASSERT + if (!MethodHandles::is_signature_polymorphic(m->intrinsic_id())) m->print(); + assert(MethodHandles::is_signature_polymorphic(m->intrinsic_id()), "must be an invoker"); + assert(m->intrinsic_id() == iid, "correctly predicted iid"); +#endif //ASSERT + + // Finally, set up its entry points. + assert(m->can_be_statically_bound(), ""); + m->set_vtable_index(Method::nonvirtual_vtable_index); + m->link_method(m, CHECK_(empty)); + + if (TraceMethodHandles && (Verbose || WizardMode)) + m->print_on(tty); + + return m; +} + +Klass* Method::check_non_bcp_klass(Klass* klass) { + if (klass != NULL && Klass::cast(klass)->class_loader() != NULL) { + if (Klass::cast(klass)->oop_is_objArray()) + klass = objArrayKlass::cast(klass)->bottom_klass(); + return klass; + } + return NULL; +} + + +methodHandle Method::clone_with_new_data(methodHandle m, u_char* new_code, int new_code_length, + u_char* new_compressed_linenumber_table, int new_compressed_linenumber_size, TRAPS) { + // Code below does not work for native methods - they should never get rewritten anyway + assert(!m->is_native(), "cannot rewrite native methods"); + // Allocate new Method* + AccessFlags flags = m->access_flags(); + int checked_exceptions_len = m->checked_exceptions_length(); + int localvariable_len = m->localvariable_table_length(); + int exception_table_len = m->exception_table_length(); + + ClassLoaderData* loader_data = m()->method_holder()->class_loader_data(); + Method* newm_oop = Method::allocate(loader_data, + new_code_length, + flags, + new_compressed_linenumber_size, + localvariable_len, + exception_table_len, + checked_exceptions_len, + CHECK_(methodHandle())); + methodHandle newm (THREAD, newm_oop); + int new_method_size = newm->method_size(); + + // Create a shallow copy of Method part, but be careful to preserve the new ConstMethod* + ConstMethod* newcm = newm->constMethod(); + int new_const_method_size = newm->constMethod()->size(); + + memcpy(newm(), m(), sizeof(Method)); + + // Create shallow copy of ConstMethod. + memcpy(newcm, m->constMethod(), sizeof(ConstMethod)); + + // Reset correct method/const method, method size, and parameter info + newm->set_constMethod(newcm); + newm->constMethod()->set_code_size(new_code_length); + newm->constMethod()->set_constMethod_size(new_const_method_size); + newm->set_method_size(new_method_size); + assert(newm->code_size() == new_code_length, "check"); + assert(newm->checked_exceptions_length() == checked_exceptions_len, "check"); + assert(newm->exception_table_length() == exception_table_len, "check"); + assert(newm->localvariable_table_length() == localvariable_len, "check"); + // Copy new byte codes + memcpy(newm->code_base(), new_code, new_code_length); + // Copy line number table + if (new_compressed_linenumber_size > 0) { + memcpy(newm->compressed_linenumber_table(), + new_compressed_linenumber_table, + new_compressed_linenumber_size); + } + // Copy checked_exceptions + if (checked_exceptions_len > 0) { + memcpy(newm->checked_exceptions_start(), + m->checked_exceptions_start(), + checked_exceptions_len * sizeof(CheckedExceptionElement)); + } + // Copy exception table + if (exception_table_len > 0) { + memcpy(newm->exception_table_start(), + m->exception_table_start(), + exception_table_len * sizeof(ExceptionTableElement)); + } + // Copy local variable number table + if (localvariable_len > 0) { + memcpy(newm->localvariable_table_start(), + m->localvariable_table_start(), + localvariable_len * sizeof(LocalVariableTableElement)); + } + // Copy stackmap table + if (m->has_stackmap_table()) { + int code_attribute_length = m->stackmap_data()->length(); + Array* stackmap_data = + MetadataFactory::new_array(loader_data, code_attribute_length, 0, CHECK_NULL); + memcpy((void*)stackmap_data->adr_at(0), + (void*)m->stackmap_data()->adr_at(0), code_attribute_length); + newm->set_stackmap_data(stackmap_data); + } + + return newm; +} + +vmSymbols::SID Method::klass_id_for_intrinsics(Klass* holder) { + // if loader is not the default loader (i.e., != NULL), we can't know the intrinsics + // because we are not loading from core libraries + if (InstanceKlass::cast(holder)->class_loader() != NULL) + return vmSymbols::NO_SID; // regardless of name, no intrinsics here + + // see if the klass name is well-known: + Symbol* klass_name = InstanceKlass::cast(holder)->name(); + return vmSymbols::find_sid(klass_name); +} + +void Method::init_intrinsic_id() { + assert(_intrinsic_id == vmIntrinsics::_none, "do this just once"); + const uintptr_t max_id_uint = right_n_bits((int)(sizeof(_intrinsic_id) * BitsPerByte)); + assert((uintptr_t)vmIntrinsics::ID_LIMIT <= max_id_uint, "else fix size"); + assert(intrinsic_id_size_in_bytes() == sizeof(_intrinsic_id), ""); + + // the klass name is well-known: + vmSymbols::SID klass_id = klass_id_for_intrinsics(method_holder()); + assert(klass_id != vmSymbols::NO_SID, "caller responsibility"); + + // ditto for method and signature: + vmSymbols::SID name_id = vmSymbols::find_sid(name()); + if (klass_id != vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle) + && name_id == vmSymbols::NO_SID) + return; + vmSymbols::SID sig_id = vmSymbols::find_sid(signature()); + if (klass_id != vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle) + && sig_id == vmSymbols::NO_SID) return; + jshort flags = access_flags().as_short(); + + vmIntrinsics::ID id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags); + if (id != vmIntrinsics::_none) { + set_intrinsic_id(id); + return; + } + + // A few slightly irregular cases: + switch (klass_id) { + case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_StrictMath): + // Second chance: check in regular Math. + switch (name_id) { + case vmSymbols::VM_SYMBOL_ENUM_NAME(min_name): + case vmSymbols::VM_SYMBOL_ENUM_NAME(max_name): + case vmSymbols::VM_SYMBOL_ENUM_NAME(sqrt_name): + // pretend it is the corresponding method in the non-strict class: + klass_id = vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_Math); + id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags); + break; + } + break; + + // Signature-polymorphic methods: MethodHandle.invoke*, InvokeDynamic.*. + case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle): + if (!is_native()) break; + id = MethodHandles::signature_polymorphic_name_id(method_holder(), name()); + if (is_static() != MethodHandles::is_signature_polymorphic_static(id)) + id = vmIntrinsics::_none; + break; + } + + if (id != vmIntrinsics::_none) { + // Set up its iid. It is an alias method. + set_intrinsic_id(id); + return; + } +} + +// These two methods are static since a GC may move the Method +bool Method::load_signature_classes(methodHandle m, TRAPS) { + if (THREAD->is_Compiler_thread()) { + // There is nothing useful this routine can do from within the Compile thread. + // Hopefully, the signature contains only well-known classes. + // We could scan for this and return true/false, but the caller won't care. + return false; + } + bool sig_is_loaded = true; + Handle class_loader(THREAD, InstanceKlass::cast(m->method_holder())->class_loader()); + Handle protection_domain(THREAD, Klass::cast(m->method_holder())->protection_domain()); + ResourceMark rm(THREAD); + Symbol* signature = m->signature(); + for(SignatureStream ss(signature); !ss.is_done(); ss.next()) { + if (ss.is_object()) { + Symbol* sym = ss.as_symbol(CHECK_(false)); + Symbol* name = sym; + Klass* klass = SystemDictionary::resolve_or_null(name, class_loader, + protection_domain, THREAD); + // We are loading classes eagerly. If a ClassNotFoundException or + // a LinkageError was generated, be sure to ignore it. + if (HAS_PENDING_EXCEPTION) { + if (PENDING_EXCEPTION->is_a(SystemDictionary::ClassNotFoundException_klass()) || + PENDING_EXCEPTION->is_a(SystemDictionary::LinkageError_klass())) { + CLEAR_PENDING_EXCEPTION; + } else { + return false; + } + } + if( klass == NULL) { sig_is_loaded = false; } + } + } + return sig_is_loaded; +} + +bool Method::has_unloaded_classes_in_signature(methodHandle m, TRAPS) { + Handle class_loader(THREAD, InstanceKlass::cast(m->method_holder())->class_loader()); + Handle protection_domain(THREAD, Klass::cast(m->method_holder())->protection_domain()); + ResourceMark rm(THREAD); + Symbol* signature = m->signature(); + for(SignatureStream ss(signature); !ss.is_done(); ss.next()) { + if (ss.type() == T_OBJECT) { + Symbol* name = ss.as_symbol_or_null(); + if (name == NULL) return true; + Klass* klass = SystemDictionary::find(name, class_loader, protection_domain, THREAD); + if (klass == NULL) return true; + } + } + return false; +} + +// Exposed so field engineers can debug VM +void Method::print_short_name(outputStream* st) { + ResourceMark rm; +#ifdef PRODUCT + st->print(" %s::", method_holder()->external_name()); +#else + st->print(" %s::", method_holder()->internal_name()); +#endif + name()->print_symbol_on(st); + if (WizardMode) signature()->print_symbol_on(st); + else if (MethodHandles::is_signature_polymorphic(intrinsic_id())) + MethodHandles::print_as_basic_type_signature_on(st, signature(), true); +} + +// This is only done during class loading, so it is OK to assume method_idnum matches the methods() array +static void reorder_based_on_method_index(Array* methods, + Array* annotations, + GrowableArray* temp_array) { + if (annotations == NULL) { + return; + } + + int length = methods->length(); + int i; + // Copy to temp array + temp_array->clear(); + for (i = 0; i < length; i++) { + temp_array->append(annotations->at(i)); + } + + // Copy back using old method indices + for (i = 0; i < length; i++) { + Method* m = methods->at(i); + annotations->at_put(i, temp_array->at(m->method_idnum())); + } +} + +// Comparer for sorting an object array containing +// Method*s. +static int method_comparator(Method* a, Method* b) { + return a->name()->fast_compare(b->name()); +} + +// This is only done during class loading, so it is OK to assume method_idnum matches the methods() array +void Method::sort_methods(Array* methods, + Array* methods_annotations, + Array* methods_parameter_annotations, + Array* methods_default_annotations, + bool idempotent) { + int length = methods->length(); + if (length > 1) { + bool do_annotations = false; + if (methods_annotations != NULL || + methods_parameter_annotations != NULL || + methods_default_annotations != NULL) { + do_annotations = true; + } + if (do_annotations) { + // Remember current method ordering so we can reorder annotations + for (int i = 0; i < length; i++) { + Method* m = methods->at(i); + m->set_method_idnum(i); + } + } + { + No_Safepoint_Verifier nsv; + QuickSort::sort(methods->data(), length, method_comparator, idempotent); + } + + // Sort annotations if necessary + assert(methods_annotations == NULL || methods_annotations->length() == methods->length(), ""); + assert(methods_parameter_annotations == NULL || methods_parameter_annotations->length() == methods->length(), ""); + assert(methods_default_annotations == NULL || methods_default_annotations->length() == methods->length(), ""); + if (do_annotations) { + ResourceMark rm; + // Allocate temporary storage + GrowableArray* temp_array = new GrowableArray(length); + reorder_based_on_method_index(methods, methods_annotations, temp_array); + reorder_based_on_method_index(methods, methods_parameter_annotations, temp_array); + reorder_based_on_method_index(methods, methods_default_annotations, temp_array); + } + + // Reset method ordering + for (int i = 0; i < length; i++) { + Method* m = methods->at(i); + m->set_method_idnum(i); + } + } +} + + +//----------------------------------------------------------------------------------- +// Non-product code + +#ifndef PRODUCT +class SignatureTypePrinter : public SignatureTypeNames { + private: + outputStream* _st; + bool _use_separator; + + void type_name(const char* name) { + if (_use_separator) _st->print(", "); + _st->print(name); + _use_separator = true; + } + + public: + SignatureTypePrinter(Symbol* signature, outputStream* st) : SignatureTypeNames(signature) { + _st = st; + _use_separator = false; + } + + void print_parameters() { _use_separator = false; iterate_parameters(); } + void print_returntype() { _use_separator = false; iterate_returntype(); } +}; + + +void Method::print_name(outputStream* st) { + Thread *thread = Thread::current(); + ResourceMark rm(thread); + SignatureTypePrinter sig(signature(), st); + st->print("%s ", is_static() ? "static" : "virtual"); + sig.print_returntype(); + st->print(" %s.", method_holder()->internal_name()); + name()->print_symbol_on(st); + st->print("("); + sig.print_parameters(); + st->print(")"); +} + + +void Method::print_codes_on(outputStream* st) const { + print_codes_on(0, code_size(), st); +} + +void Method::print_codes_on(int from, int to, outputStream* st) const { + Thread *thread = Thread::current(); + ResourceMark rm(thread); + methodHandle mh (thread, (Method*)this); + BytecodeStream s(mh); + s.set_interval(from, to); + BytecodeTracer::set_closure(BytecodeTracer::std_closure()); + while (s.next() >= 0) BytecodeTracer::trace(mh, s.bcp(), st); +} +#endif // not PRODUCT + + +// Simple compression of line number tables. We use a regular compressed stream, except that we compress deltas +// between (bci,line) pairs since they are smaller. If (bci delta, line delta) fits in (5-bit unsigned, 3-bit unsigned) +// we save it as one byte, otherwise we write a 0xFF escape character and use regular compression. 0x0 is used +// as end-of-stream terminator. + +void CompressedLineNumberWriteStream::write_pair_regular(int bci_delta, int line_delta) { + // bci and line number does not compress into single byte. + // Write out escape character and use regular compression for bci and line number. + write_byte((jubyte)0xFF); + write_signed_int(bci_delta); + write_signed_int(line_delta); +} + +// See comment in method.hpp which explains why this exists. +#if defined(_M_AMD64) && _MSC_VER >= 1400 +#pragma optimize("", off) +void CompressedLineNumberWriteStream::write_pair(int bci, int line) { + write_pair_inline(bci, line); +} +#pragma optimize("", on) +#endif + +CompressedLineNumberReadStream::CompressedLineNumberReadStream(u_char* buffer) : CompressedReadStream(buffer) { + _bci = 0; + _line = 0; +}; + + +bool CompressedLineNumberReadStream::read_pair() { + jubyte next = read_byte(); + // Check for terminator + if (next == 0) return false; + if (next == 0xFF) { + // Escape character, regular compression used + _bci += read_signed_int(); + _line += read_signed_int(); + } else { + // Single byte compression used + _bci += next >> 3; + _line += next & 0x7; + } + return true; +} + + +Bytecodes::Code Method::orig_bytecode_at(int bci) const { + BreakpointInfo* bp = InstanceKlass::cast(method_holder())->breakpoints(); + for (; bp != NULL; bp = bp->next()) { + if (bp->match(this, bci)) { + return bp->orig_bytecode(); + } + } + ShouldNotReachHere(); + return Bytecodes::_shouldnotreachhere; +} + +void Method::set_orig_bytecode_at(int bci, Bytecodes::Code code) { + assert(code != Bytecodes::_breakpoint, "cannot patch breakpoints this way"); + BreakpointInfo* bp = InstanceKlass::cast(method_holder())->breakpoints(); + for (; bp != NULL; bp = bp->next()) { + if (bp->match(this, bci)) { + bp->set_orig_bytecode(code); + // and continue, in case there is more than one + } + } +} + +void Method::set_breakpoint(int bci) { + InstanceKlass* ik = InstanceKlass::cast(method_holder()); + BreakpointInfo *bp = new BreakpointInfo(this, bci); + bp->set_next(ik->breakpoints()); + ik->set_breakpoints(bp); + // do this last: + bp->set(this); +} + +static void clear_matches(Method* m, int bci) { + InstanceKlass* ik = InstanceKlass::cast(m->method_holder()); + BreakpointInfo* prev_bp = NULL; + BreakpointInfo* next_bp; + for (BreakpointInfo* bp = ik->breakpoints(); bp != NULL; bp = next_bp) { + next_bp = bp->next(); + // bci value of -1 is used to delete all breakpoints in method m (ex: clear_all_breakpoint). + if (bci >= 0 ? bp->match(m, bci) : bp->match(m)) { + // do this first: + bp->clear(m); + // unhook it + if (prev_bp != NULL) + prev_bp->set_next(next_bp); + else + ik->set_breakpoints(next_bp); + delete bp; + // When class is redefined JVMTI sets breakpoint in all versions of EMCP methods + // at same location. So we have multiple matching (method_index and bci) + // BreakpointInfo nodes in BreakpointInfo list. We should just delete one + // breakpoint for clear_breakpoint request and keep all other method versions + // BreakpointInfo for future clear_breakpoint request. + // bcivalue of -1 is used to clear all breakpoints (see clear_all_breakpoints) + // which is being called when class is unloaded. We delete all the Breakpoint + // information for all versions of method. We may not correctly restore the original + // bytecode in all method versions, but that is ok. Because the class is being unloaded + // so these methods won't be used anymore. + if (bci >= 0) { + break; + } + } else { + // This one is a keeper. + prev_bp = bp; + } + } +} + +void Method::clear_breakpoint(int bci) { + assert(bci >= 0, ""); + clear_matches(this, bci); +} + +void Method::clear_all_breakpoints() { + clear_matches(this, -1); +} + + +int Method::invocation_count() { + if (TieredCompilation) { + MethodData* const mdo = method_data(); + if (invocation_counter()->carry() || ((mdo != NULL) ? mdo->invocation_counter()->carry() : false)) { + return InvocationCounter::count_limit; + } else { + return invocation_counter()->count() + ((mdo != NULL) ? mdo->invocation_counter()->count() : 0); + } + } else { + return invocation_counter()->count(); + } +} + +int Method::backedge_count() { + if (TieredCompilation) { + MethodData* const mdo = method_data(); + if (backedge_counter()->carry() || ((mdo != NULL) ? mdo->backedge_counter()->carry() : false)) { + return InvocationCounter::count_limit; + } else { + return backedge_counter()->count() + ((mdo != NULL) ? mdo->backedge_counter()->count() : 0); + } + } else { + return backedge_counter()->count(); + } +} + +int Method::highest_comp_level() const { + MethodData* mdo = method_data(); + if (mdo != NULL) { + return mdo->highest_comp_level(); + } else { + return CompLevel_none; + } +} + +int Method::highest_osr_comp_level() const { + MethodData* mdo = method_data(); + if (mdo != NULL) { + return mdo->highest_osr_comp_level(); + } else { + return CompLevel_none; + } +} + +void Method::set_highest_comp_level(int level) { + MethodData* mdo = method_data(); + if (mdo != NULL) { + mdo->set_highest_comp_level(level); + } +} + +void Method::set_highest_osr_comp_level(int level) { + MethodData* mdo = method_data(); + if (mdo != NULL) { + mdo->set_highest_osr_comp_level(level); + } +} + +BreakpointInfo::BreakpointInfo(Method* m, int bci) { + _bci = bci; + _name_index = m->name_index(); + _signature_index = m->signature_index(); + _orig_bytecode = (Bytecodes::Code) *m->bcp_from(_bci); + if (_orig_bytecode == Bytecodes::_breakpoint) + _orig_bytecode = m->orig_bytecode_at(_bci); + _next = NULL; +} + +void BreakpointInfo::set(Method* method) { +#ifdef ASSERT + { + Bytecodes::Code code = (Bytecodes::Code) *method->bcp_from(_bci); + if (code == Bytecodes::_breakpoint) + code = method->orig_bytecode_at(_bci); + assert(orig_bytecode() == code, "original bytecode must be the same"); + } +#endif + *method->bcp_from(_bci) = Bytecodes::_breakpoint; + method->incr_number_of_breakpoints(); + SystemDictionary::notice_modification(); + { + // Deoptimize all dependents on this method + Thread *thread = Thread::current(); + HandleMark hm(thread); + methodHandle mh(thread, method); + Universe::flush_dependents_on_method(mh); + } +} + +void BreakpointInfo::clear(Method* method) { + *method->bcp_from(_bci) = orig_bytecode(); + assert(method->number_of_breakpoints() > 0, "must not go negative"); + method->decr_number_of_breakpoints(); +} + +// jmethodID handling + +// This is a block allocating object, sort of like JNIHandleBlock, only a +// lot simpler. There aren't many of these, they aren't long, they are rarely +// deleted and so we can do some suboptimal things. +// It's allocated on the CHeap because once we allocate a jmethodID, we can +// never get rid of it. +// It would be nice to be able to parameterize the number of methods for +// the null_class_loader but then we'd have to turn this and ClassLoaderData +// into templates. + +// I feel like this brain dead class should exist somewhere in the STL + +class JNIMethodBlock : public CHeapObj { + enum { number_of_methods = 8 }; + + Method* _methods[number_of_methods]; + int _top; + JNIMethodBlock* _next; + public: + static Method* const _free_method; + + JNIMethodBlock() : _next(NULL), _top(0) { + for (int i = 0; i< number_of_methods; i++) _methods[i] = _free_method; + } + + Method** add_method(Method* m) { + if (_top < number_of_methods) { + // top points to the next free entry. + int i = _top; + _methods[i] = m; + _top++; + return &_methods[i]; + } else if (_top == number_of_methods) { + // if the next free entry ran off the block see if there's a free entry + for (int i = 0; i< number_of_methods; i++) { + if (_methods[i] == _free_method) { + _methods[i] = m; + return &_methods[i]; + } + } + // Only check each block once for frees. They're very unlikely. + // Increment top past the end of the block. + _top++; + } + // need to allocate a next block. + if (_next == NULL) { + _next = new JNIMethodBlock(); + } + return _next->add_method(m); + } + + bool contains(Method** m) { + for (JNIMethodBlock* b = this; b != NULL; b = b->_next) { + for (int i = 0; i< number_of_methods; i++) { + if (&(b->_methods[i]) == m) { + return true; + } + } + } + return false; // not found + } + + // Doesn't really destroy it, just marks it as free so it can be reused. + void destroy_method(Method** m) { +#ifdef ASSERT + assert(contains(m), "should be a methodID"); +#endif // ASSERT + *m = _free_method; + } + + // During class unloading the methods are cleared, which is different + // than freed. + void clear_all_methods() { + for (JNIMethodBlock* b = this; b != NULL; b = b->_next) { + for (int i = 0; i< number_of_methods; i++) { + _methods[i] = NULL; + } + } + } +#ifndef PRODUCT + int count_methods() { + // count all allocated methods + int count = 0; + for (JNIMethodBlock* b = this; b != NULL; b = b->_next) { + for (int i = 0; i< number_of_methods; i++) { + if (_methods[i] != _free_method) count++; + } + } + return count; + } +#endif // PRODUCT +}; + +// Something that can't be mistaken for an address or a markOop +Method* const JNIMethodBlock::_free_method = (Method*)55; + +// Add a method id to the jmethod_ids +jmethodID Method::make_jmethod_id(ClassLoaderData* loader_data, Method* m) { + ClassLoaderData* cld = loader_data; + + if (!SafepointSynchronize::is_at_safepoint()) { + // Have to add jmethod_ids() to class loader data thread-safely. + // Also have to add the method to the list safely, which the cld lock + // protects as well. + MutexLockerEx ml(cld->metaspace_lock(), Mutex::_no_safepoint_check_flag); + if (cld->jmethod_ids() == NULL) { + cld->set_jmethod_ids(new JNIMethodBlock()); + } + // jmethodID is a pointer to Method* + return (jmethodID)cld->jmethod_ids()->add_method(m); + } else { + // At safepoint, we are single threaded and can set this. + if (cld->jmethod_ids() == NULL) { + cld->set_jmethod_ids(new JNIMethodBlock()); + } + // jmethodID is a pointer to Method* + return (jmethodID)cld->jmethod_ids()->add_method(m); + } +} + +// Mark a jmethodID as free. This is called when there is a data race in +// InstanceKlass while creating the jmethodID cache. +void Method::destroy_jmethod_id(ClassLoaderData* loader_data, jmethodID m) { + ClassLoaderData* cld = loader_data; + Method** ptr = (Method**)m; + assert(cld->jmethod_ids() != NULL, "should have method handles"); + cld->jmethod_ids()->destroy_method(ptr); +} + +void Method::change_method_associated_with_jmethod_id(jmethodID jmid, Method* new_method) { + // Can't assert the method_holder is the same because the new method has the + // scratch method holder. + assert(resolve_jmethod_id(jmid)->method_holder()->class_loader() + == new_method->method_holder()->class_loader(), + "changing to a different class loader"); + // Just change the method in place, jmethodID pointer doesn't change. + *((Method**)jmid) = new_method; +} + +bool Method::is_method_id(jmethodID mid) { + Method* m = resolve_jmethod_id(mid); + assert(m != NULL, "should be called with non-null method"); + InstanceKlass* ik = InstanceKlass::cast(m->method_holder()); + ClassLoaderData* cld = ik->class_loader_data(); + if (cld->jmethod_ids() == NULL) return false; + return (cld->jmethod_ids()->contains((Method**)mid)); +} + +Method* Method::checked_resolve_jmethod_id(jmethodID mid) { + if (mid == NULL) return NULL; + Method* o = resolve_jmethod_id(mid); + if (o == NULL || o == JNIMethodBlock::_free_method || !((Metadata*)o)->is_method()) { + return NULL; + } + return o; +}; + +void Method::set_on_stack(const bool value) { + // Set both the method itself and its constant pool. The constant pool + // on stack means some method referring to it is also on the stack. + _access_flags.set_on_stack(value); + constants()->set_on_stack(value); + if (value) MetadataOnStackMark::record(this); +} + +// Called when the class loader is unloaded to make all methods weak. +void Method::clear_jmethod_ids(ClassLoaderData* loader_data) { + loader_data->jmethod_ids()->clear_all_methods(); +} + +#ifndef PRODUCT +void Method::print_jmethod_ids(ClassLoaderData* loader_data, outputStream* out) { + out->print_cr("jni_method_id count = %d", loader_data->jmethod_ids()->count_methods()); +} +#endif // PRODUCT + + +// Printing + +#ifndef PRODUCT + +void Method::print_on(outputStream* st) const { + ResourceMark rm; + assert(is_method(), "must be method"); + st->print_cr(internal_name()); + // get the effect of PrintOopAddress, always, for methods: + st->print_cr(" - this oop: "INTPTR_FORMAT, (intptr_t)this); + st->print (" - method holder: "); method_holder()->print_value_on(st); st->cr(); + st->print (" - constants: "INTPTR_FORMAT" ", (address)constants()); + constants()->print_value_on(st); st->cr(); + st->print (" - access: 0x%x ", access_flags().as_int()); access_flags().print_on(st); st->cr(); + st->print (" - name: "); name()->print_value_on(st); st->cr(); + st->print (" - signature: "); signature()->print_value_on(st); st->cr(); + st->print_cr(" - max stack: %d", max_stack()); + st->print_cr(" - max locals: %d", max_locals()); + st->print_cr(" - size of params: %d", size_of_parameters()); + st->print_cr(" - method size: %d", method_size()); + if (intrinsic_id() != vmIntrinsics::_none) + st->print_cr(" - intrinsic id: %d %s", intrinsic_id(), vmIntrinsics::name_at(intrinsic_id())); + if (highest_comp_level() != CompLevel_none) + st->print_cr(" - highest level: %d", highest_comp_level()); + st->print_cr(" - vtable index: %d", _vtable_index); + st->print_cr(" - i2i entry: " INTPTR_FORMAT, interpreter_entry()); + st->print( " - adapters: "); + AdapterHandlerEntry* a = ((Method*)this)->adapter(); + if (a == NULL) + st->print_cr(INTPTR_FORMAT, a); + else + a->print_adapter_on(st); + st->print_cr(" - compiled entry " INTPTR_FORMAT, from_compiled_entry()); + st->print_cr(" - code size: %d", code_size()); + if (code_size() != 0) { + st->print_cr(" - code start: " INTPTR_FORMAT, code_base()); + st->print_cr(" - code end (excl): " INTPTR_FORMAT, code_base() + code_size()); + } + if (method_data() != NULL) { + st->print_cr(" - method data: " INTPTR_FORMAT, (address)method_data()); + } + st->print_cr(" - checked ex length: %d", checked_exceptions_length()); + if (checked_exceptions_length() > 0) { + CheckedExceptionElement* table = checked_exceptions_start(); + st->print_cr(" - checked ex start: " INTPTR_FORMAT, table); + if (Verbose) { + for (int i = 0; i < checked_exceptions_length(); i++) { + st->print_cr(" - throws %s", constants()->printable_name_at(table[i].class_cp_index)); + } + } + } + if (has_linenumber_table()) { + u_char* table = compressed_linenumber_table(); + st->print_cr(" - linenumber start: " INTPTR_FORMAT, table); + if (Verbose) { + CompressedLineNumberReadStream stream(table); + while (stream.read_pair()) { + st->print_cr(" - line %d: %d", stream.line(), stream.bci()); + } + } + } + st->print_cr(" - localvar length: %d", localvariable_table_length()); + if (localvariable_table_length() > 0) { + LocalVariableTableElement* table = localvariable_table_start(); + st->print_cr(" - localvar start: " INTPTR_FORMAT, table); + if (Verbose) { + for (int i = 0; i < localvariable_table_length(); i++) { + int bci = table[i].start_bci; + int len = table[i].length; + const char* name = constants()->printable_name_at(table[i].name_cp_index); + const char* desc = constants()->printable_name_at(table[i].descriptor_cp_index); + int slot = table[i].slot; + st->print_cr(" - %s %s bci=%d len=%d slot=%d", desc, name, bci, len, slot); + } + } + } + if (code() != NULL) { + st->print (" - compiled code: "); + code()->print_value_on(st); + } + if (is_native()) { + st->print_cr(" - native function: " INTPTR_FORMAT, native_function()); + st->print_cr(" - signature handler: " INTPTR_FORMAT, signature_handler()); + } +} + +#endif //PRODUCT + +void Method::print_value_on(outputStream* st) const { + assert(is_method(), "must be method"); + st->print_cr(internal_name()); + print_address_on(st); + st->print(" "); + name()->print_value_on(st); + st->print(" "); + signature()->print_value_on(st); + st->print(" in "); + method_holder()->print_value_on(st); + if (WizardMode) st->print("[%d,%d]", size_of_parameters(), max_locals()); + if (WizardMode && code() != NULL) st->print(" ((nmethod*)%p)", code()); +} + + +// Verification + +void Method::verify_on(outputStream* st) { + guarantee(is_method(), "object must be method"); + guarantee(is_metadata(), "should be metadata"); + guarantee(constants()->is_constantPool(), "should be constant pool"); + guarantee(constants()->is_metadata(), "should be metadata"); + guarantee(constMethod()->is_constMethod(), "should be ConstMethod*"); + guarantee(constMethod()->is_metadata(), "should be metadata"); + MethodData* md = method_data(); + guarantee(md == NULL || + md->is_metadata(), "should be in permspace"); + guarantee(md == NULL || + md->is_methodData(), "should be method data"); +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/method.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/method.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,976 @@ +/* + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_OOPS_METHODOOP_HPP +#define SHARE_VM_OOPS_METHODOOP_HPP + +#include "classfile/vmSymbols.hpp" +#include "code/compressedStream.hpp" +#include "compiler/oopMap.hpp" +#include "interpreter/invocationCounter.hpp" +#include "oops/annotations.hpp" +#include "oops/constMethod.hpp" +#include "oops/constantPool.hpp" +#include "oops/instanceKlass.hpp" +#include "oops/oop.hpp" +#include "oops/typeArrayOop.hpp" +#include "utilities/accessFlags.hpp" +#include "utilities/growableArray.hpp" + +// A Method* represents a Java method. +// +// Memory layout (each line represents a word). Note that most applications load thousands of methods, +// so keeping the size of this structure small has a big impact on footprint. +// +// We put all oops and method_size first for better gc cache locality. +// +// The actual bytecodes are inlined after the end of the Method struct. +// +// There are bits in the access_flags telling whether inlined tables are present. +// Note that accessing the line number and local variable tables is not performance critical at all. +// Accessing the checked exceptions table is used by reflection, so we put that last to make access +// to it fast. +// +// The line number table is compressed and inlined following the byte codes. It is found as the first +// byte following the byte codes. The checked exceptions table and the local variable table are inlined +// after the line number table, and indexed from the end of the method. We do not compress the checked +// exceptions table since the average length is less than 2, and do not bother to compress the local +// variable table either since it is mostly absent. +// +// Note that native_function and signature_handler has to be at fixed offsets (required by the interpreter) +// +// |------------------------------------------------------| +// | header | +// | klass | +// |------------------------------------------------------| +// | ConstMethod* (oop) | +// |------------------------------------------------------| +// | methodData (oop) | +// | interp_invocation_count | +// |------------------------------------------------------| +// | access_flags | +// | vtable_index | +// |------------------------------------------------------| +// | result_index (C++ interpreter only) | +// |------------------------------------------------------| +// | method_size | max_stack | +// | max_locals | size_of_parameters | +// |------------------------------------------------------| +// |intrinsic_id| flags | throwout_count | +// |------------------------------------------------------| +// | num_breakpoints | (unused) | +// |------------------------------------------------------| +// | invocation_counter | +// | backedge_counter | +// |------------------------------------------------------| +// | prev_time (tiered only, 64 bit wide) | +// | | +// |------------------------------------------------------| +// | rate (tiered) | +// |------------------------------------------------------| +// | code (pointer) | +// | i2i (pointer) | +// | adapter (pointer) | +// | from_compiled_entry (pointer) | +// | from_interpreted_entry (pointer) | +// |------------------------------------------------------| +// | native_function (present only if native) | +// | signature_handler (present only if native) | +// |------------------------------------------------------| + + +class CheckedExceptionElement; +class LocalVariableTableElement; +class AdapterHandlerEntry; +class MethodData; + +class Method : public Metadata { + friend class VMStructs; + private: + ConstMethod* _constMethod; // Method read-only data. + MethodData* _method_data; + int _interpreter_invocation_count; // Count of times invoked (reused as prev_event_count in tiered) + AccessFlags _access_flags; // Access flags + int _vtable_index; // vtable index of this method (see VtableIndexFlag) + // note: can have vtables with >2**16 elements (because of inheritance) +#ifdef CC_INTERP + int _result_index; // C++ interpreter needs for converting results to/from stack +#endif + u2 _method_size; // size of this object + u2 _max_stack; // Maximum number of entries on the expression stack + u2 _max_locals; // Number of local variables used by this method + u2 _size_of_parameters; // size of the parameter block (receiver + arguments) in words + u1 _intrinsic_id; // vmSymbols::intrinsic_id (0 == _none) + u1 _jfr_towrite : 1, // Flags + _force_inline : 1, + _hidden : 1, + _dont_inline : 1, + : 4; + u2 _interpreter_throwout_count; // Count of times method was exited via exception while interpreting + u2 _number_of_breakpoints; // fullspeed debugging support + InvocationCounter _invocation_counter; // Incremented before each activation of the method - used to trigger frequency-based optimizations + InvocationCounter _backedge_counter; // Incremented before each backedge taken - used to trigger frequencey-based optimizations + +#ifdef TIERED + jlong _prev_time; // Previous time the rate was acquired + float _rate; // Events (invocation and backedge counter increments) per millisecond +#endif + +#ifndef PRODUCT + int _compiled_invocation_count; // Number of nmethod invocations so far (for perf. debugging) +#endif + // Entry point for calling both from and to the interpreter. + address _i2i_entry; // All-args-on-stack calling convention + // Adapter blob (i2c/c2i) for this Method*. Set once when method is linked. + AdapterHandlerEntry* _adapter; + // Entry point for calling from compiled code, to compiled code if it exists + // or else the interpreter. + volatile address _from_compiled_entry; // Cache of: _code ? _code->entry_point() : _adapter->c2i_entry() + // The entry point for calling both from and to compiled code is + // "_code->entry_point()". Because of tiered compilation and de-opt, this + // field can come and go. It can transition from NULL to not-null at any + // time (whenever a compile completes). It can transition from not-null to + // NULL only at safepoints (because of a de-opt). + nmethod* volatile _code; // Points to the corresponding piece of native code + volatile address _from_interpreted_entry; // Cache of _code ? _adapter->i2c_entry() : _i2i_entry + + // Constructor + Method(ConstMethod* xconst, AccessFlags access_flags, int size); + public: + static Method* allocate(ClassLoaderData* loader_data, + int byte_code_size, + AccessFlags access_flags, + int compressed_line_number_size, + int localvariable_table_length, + int exception_table_length, + int checked_exceptions_length, + TRAPS); + + Method() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); } + bool is_method() const volatile { return true; } + + // accessors for instance variables + ConstMethod* constMethod() const { return _constMethod; } + void set_constMethod(ConstMethod* xconst) { _constMethod = xconst; } + + + static address make_adapters(methodHandle mh, TRAPS); + volatile address from_compiled_entry() const { return (address)OrderAccess::load_ptr_acquire(&_from_compiled_entry); } + volatile address from_interpreted_entry() const{ return (address)OrderAccess::load_ptr_acquire(&_from_interpreted_entry); } + + // access flag + AccessFlags access_flags() const { return _access_flags; } + void set_access_flags(AccessFlags flags) { _access_flags = flags; } + + // name + Symbol* name() const { return constants()->symbol_at(name_index()); } + int name_index() const { return constMethod()->name_index(); } + void set_name_index(int index) { constMethod()->set_name_index(index); } + + // signature + Symbol* signature() const { return constants()->symbol_at(signature_index()); } + int signature_index() const { return constMethod()->signature_index(); } + void set_signature_index(int index) { constMethod()->set_signature_index(index); } + + // generics support + Symbol* generic_signature() const { int idx = generic_signature_index(); return ((idx != 0) ? constants()->symbol_at(idx) : (Symbol*)NULL); } + int generic_signature_index() const { return constMethod()->generic_signature_index(); } + void set_generic_signature_index(int index) { constMethod()->set_generic_signature_index(index); } + + // annotations support + AnnotationArray* annotations() const { + InstanceKlass* ik = InstanceKlass::cast(method_holder()); + if (ik->annotations() == NULL) { + return NULL; + } + return ik->annotations()->get_method_annotations_of(method_idnum()); + } + AnnotationArray* parameter_annotations() const { + InstanceKlass* ik = InstanceKlass::cast(method_holder()); + if (ik->annotations() == NULL) { + return NULL; + } + return ik->annotations()->get_method_parameter_annotations_of(method_idnum()); + } + AnnotationArray* annotation_default() const { + InstanceKlass* ik = InstanceKlass::cast(method_holder()); + if (ik->annotations() == NULL) { + return NULL; + } + return ik->annotations()->get_method_default_annotations_of(method_idnum()); + } + +#ifdef CC_INTERP + void set_result_index(BasicType type); + int result_index() { return _result_index; } +#endif + + // Helper routine: get klass name + "." + method name + signature as + // C string, for the purpose of providing more useful NoSuchMethodErrors + // and fatal error handling. The string is allocated in resource + // area if a buffer is not provided by the caller. + char* name_and_sig_as_C_string() const; + char* name_and_sig_as_C_string(char* buf, int size) const; + + // Static routine in the situations we don't have a Method* + static char* name_and_sig_as_C_string(Klass* klass, Symbol* method_name, Symbol* signature); + static char* name_and_sig_as_C_string(Klass* klass, Symbol* method_name, Symbol* signature, char* buf, int size); + + Bytecodes::Code java_code_at(int bci) const { + return Bytecodes::java_code_at(this, bcp_from(bci)); + } + Bytecodes::Code code_at(int bci) const { + return Bytecodes::code_at(this, bcp_from(bci)); + } + + // JVMTI breakpoints + Bytecodes::Code orig_bytecode_at(int bci) const; + void set_orig_bytecode_at(int bci, Bytecodes::Code code); + void set_breakpoint(int bci); + void clear_breakpoint(int bci); + void clear_all_breakpoints(); + // Tracking number of breakpoints, for fullspeed debugging. + // Only mutated by VM thread. + u2 number_of_breakpoints() const { return _number_of_breakpoints; } + void incr_number_of_breakpoints() { ++_number_of_breakpoints; } + void decr_number_of_breakpoints() { --_number_of_breakpoints; } + // Initialization only + void clear_number_of_breakpoints() { _number_of_breakpoints = 0; } + + // index into InstanceKlass methods() array + // note: also used by jfr + u2 method_idnum() const { return constMethod()->method_idnum(); } + void set_method_idnum(u2 idnum) { constMethod()->set_method_idnum(idnum); } + + // code size + int code_size() const { return constMethod()->code_size(); } + + // method size + int method_size() const { return _method_size; } + void set_method_size(int size) { + assert(0 <= size && size < (1 << 16), "invalid method size"); + _method_size = size; + } + + // constant pool for Klass* holding this method + ConstantPool* constants() const { return constMethod()->constants(); } + void set_constants(ConstantPool* c) { constMethod()->set_constants(c); } + + // max stack + // return original max stack size for method verification + int verifier_max_stack() const { return _max_stack; } + int max_stack() const { return _max_stack + extra_stack_entries(); } + void set_max_stack(int size) { _max_stack = size; } + + // max locals + int max_locals() const { return _max_locals; } + void set_max_locals(int size) { _max_locals = size; } + + int highest_comp_level() const; + void set_highest_comp_level(int level); + int highest_osr_comp_level() const; + void set_highest_osr_comp_level(int level); + + // Count of times method was exited via exception while interpreting + void interpreter_throwout_increment() { + if (_interpreter_throwout_count < 65534) { + _interpreter_throwout_count++; + } + } + + int interpreter_throwout_count() const { return _interpreter_throwout_count; } + void set_interpreter_throwout_count(int count) { _interpreter_throwout_count = count; } + + // size of parameters + int size_of_parameters() const { return _size_of_parameters; } + + bool has_stackmap_table() const { + return constMethod()->has_stackmap_table(); + } + + Array* stackmap_data() const { + return constMethod()->stackmap_data(); + } + + void set_stackmap_data(Array* sd) { + constMethod()->set_stackmap_data(sd); + } + + // exception handler table + bool has_exception_handler() const + { return constMethod()->has_exception_handler(); } + int exception_table_length() const + { return constMethod()->exception_table_length(); } + ExceptionTableElement* exception_table_start() const + { return constMethod()->exception_table_start(); } + + // Finds the first entry point bci of an exception handler for an + // exception of klass ex_klass thrown at throw_bci. A value of NULL + // for ex_klass indicates that the exception klass is not known; in + // this case it matches any constraint class. Returns -1 if the + // exception cannot be handled in this method. The handler + // constraint classes are loaded if necessary. Note that this may + // throw an exception if loading of the constraint classes causes + // an IllegalAccessError (bugid 4307310) or an OutOfMemoryError. + // If an exception is thrown, returns the bci of the + // exception handler which caused the exception to be thrown, which + // is needed for proper retries. See, for example, + // InterpreterRuntime::exception_handler_for_exception. + int fast_exception_handler_bci_for(KlassHandle ex_klass, int throw_bci, TRAPS); + + // method data access + MethodData* method_data() const { + return _method_data; + } + void set_method_data(MethodData* data) { + _method_data = data; + } + + // invocation counter + InvocationCounter* invocation_counter() { return &_invocation_counter; } + InvocationCounter* backedge_counter() { return &_backedge_counter; } + +#ifdef TIERED + // We are reusing interpreter_invocation_count as a holder for the previous event count! + // We can do that since interpreter_invocation_count is not used in tiered. + int prev_event_count() const { return _interpreter_invocation_count; } + void set_prev_event_count(int count) { _interpreter_invocation_count = count; } + jlong prev_time() const { return _prev_time; } + void set_prev_time(jlong time) { _prev_time = time; } + float rate() const { return _rate; } + void set_rate(float rate) { _rate = rate; } +#endif + + int invocation_count(); + int backedge_count(); + + bool was_executed_more_than(int n); + bool was_never_executed() { return !was_executed_more_than(0); } + + static void build_interpreter_method_data(methodHandle method, TRAPS); + + int interpreter_invocation_count() { + if (TieredCompilation) return invocation_count(); + else return _interpreter_invocation_count; + } + void set_interpreter_invocation_count(int count) { _interpreter_invocation_count = count; } + int increment_interpreter_invocation_count() { + if (TieredCompilation) ShouldNotReachHere(); + return ++_interpreter_invocation_count; + } + +#ifndef PRODUCT + int compiled_invocation_count() const { return _compiled_invocation_count; } + void set_compiled_invocation_count(int count) { _compiled_invocation_count = count; } +#endif // not PRODUCT + + // Clear (non-shared space) pointers which could not be relevant + // if this (shared) method were mapped into another JVM. + void remove_unshareable_info(); + + // nmethod/verified compiler entry + address verified_code_entry(); + bool check_code() const; // Not inline to avoid circular ref + nmethod* volatile code() const { assert( check_code(), "" ); return (nmethod *)OrderAccess::load_ptr_acquire(&_code); } + void clear_code(); // Clear out any compiled code + static void set_code(methodHandle mh, nmethod* code); + void set_adapter_entry(AdapterHandlerEntry* adapter) { _adapter = adapter; } + address get_i2c_entry(); + address get_c2i_entry(); + address get_c2i_unverified_entry(); + AdapterHandlerEntry* adapter() { return _adapter; } + // setup entry points + void link_method(methodHandle method, TRAPS); + // clear entry points. Used by sharing code + void unlink_method(); + + // vtable index + enum VtableIndexFlag { + // Valid vtable indexes are non-negative (>= 0). + // These few negative values are used as sentinels. + highest_unused_vtable_index_value = -5, + invalid_vtable_index = -4, // distinct from any valid vtable index + garbage_vtable_index = -3, // not yet linked; no vtable layout yet + nonvirtual_vtable_index = -2 // there is no need for vtable dispatch + // 6330203 Note: Do not use -1, which was overloaded with many meanings. + }; + DEBUG_ONLY(bool valid_vtable_index() const { return _vtable_index >= nonvirtual_vtable_index; }) + int vtable_index() const { assert(valid_vtable_index(), ""); + return _vtable_index; } + void set_vtable_index(int index) { _vtable_index = index; } + + // interpreter entry + address interpreter_entry() const { return _i2i_entry; } + // Only used when first initialize so we can set _i2i_entry and _from_interpreted_entry + void set_interpreter_entry(address entry) { _i2i_entry = entry; _from_interpreted_entry = entry; } + int interpreter_kind(void) { + return constMethod()->interpreter_kind(); + } + void set_interpreter_kind(); + void set_interpreter_kind(int kind) { + constMethod()->set_interpreter_kind(kind); + } + + // native function (used for native methods only) + enum { + native_bind_event_is_interesting = true + }; + address native_function() const { return *(native_function_addr()); } + address critical_native_function(); + + // Must specify a real function (not NULL). + // Use clear_native_function() to unregister. + void set_native_function(address function, bool post_event_flag); + bool has_native_function() const; + void clear_native_function(); + + // signature handler (used for native methods only) + address signature_handler() const { return *(signature_handler_addr()); } + void set_signature_handler(address handler); + + // Interpreter oopmap support + void mask_for(int bci, InterpreterOopMap* mask); + +#ifndef PRODUCT + // operations on invocation counter + void print_invocation_count(); +#endif + + // byte codes + void set_code(address code) { return constMethod()->set_code(code); } + address code_base() const { return constMethod()->code_base(); } + bool contains(address bcp) const { return constMethod()->contains(bcp); } + + // prints byte codes + void print_codes() const { print_codes_on(tty); } + void print_codes_on(outputStream* st) const PRODUCT_RETURN; + void print_codes_on(int from, int to, outputStream* st) const PRODUCT_RETURN; + + // checked exceptions + int checked_exceptions_length() const + { return constMethod()->checked_exceptions_length(); } + CheckedExceptionElement* checked_exceptions_start() const + { return constMethod()->checked_exceptions_start(); } + + // localvariable table + bool has_localvariable_table() const + { return constMethod()->has_localvariable_table(); } + int localvariable_table_length() const + { return constMethod()->localvariable_table_length(); } + LocalVariableTableElement* localvariable_table_start() const + { return constMethod()->localvariable_table_start(); } + + bool has_linenumber_table() const + { return constMethod()->has_linenumber_table(); } + u_char* compressed_linenumber_table() const + { return constMethod()->compressed_linenumber_table(); } + + // method holder (the Klass* holding this method) + Klass* method_holder() const { return constants()->pool_holder(); } + + void compute_size_of_parameters(Thread *thread); // word size of parameters (receiver if any + arguments) + Symbol* klass_name() const; // returns the name of the method holder + BasicType result_type() const; // type of the method result + int result_type_index() const; // type index of the method result + bool is_returning_oop() const { BasicType r = result_type(); return (r == T_OBJECT || r == T_ARRAY); } + bool is_returning_fp() const { BasicType r = result_type(); return (r == T_FLOAT || r == T_DOUBLE); } + + // Checked exceptions thrown by this method (resolved to mirrors) + objArrayHandle resolved_checked_exceptions(TRAPS) { return resolved_checked_exceptions_impl(this, THREAD); } + + // Access flags + bool is_public() const { return access_flags().is_public(); } + bool is_private() const { return access_flags().is_private(); } + bool is_protected() const { return access_flags().is_protected(); } + bool is_package_private() const { return !is_public() && !is_private() && !is_protected(); } + bool is_static() const { return access_flags().is_static(); } + bool is_final() const { return access_flags().is_final(); } + bool is_synchronized() const { return access_flags().is_synchronized();} + bool is_native() const { return access_flags().is_native(); } + bool is_abstract() const { return access_flags().is_abstract(); } + bool is_strict() const { return access_flags().is_strict(); } + bool is_synthetic() const { return access_flags().is_synthetic(); } + + // returns true if contains only return operation + bool is_empty_method() const; + + // returns true if this is a vanilla constructor + bool is_vanilla_constructor() const; + + // checks method and its method holder + bool is_final_method() const; + bool is_strict_method() const; + + // true if method needs no dynamic dispatch (final and/or no vtable entry) + bool can_be_statically_bound() const; + + // returns true if the method has any backward branches. + bool has_loops() { + return access_flags().loops_flag_init() ? access_flags().has_loops() : compute_has_loops_flag(); + }; + + bool compute_has_loops_flag(); + + bool has_jsrs() { + return access_flags().has_jsrs(); + }; + void set_has_jsrs() { + _access_flags.set_has_jsrs(); + } + + // returns true if the method has any monitors. + bool has_monitors() const { return is_synchronized() || access_flags().has_monitor_bytecodes(); } + bool has_monitor_bytecodes() const { return access_flags().has_monitor_bytecodes(); } + + void set_has_monitor_bytecodes() { _access_flags.set_has_monitor_bytecodes(); } + + // monitor matching. This returns a conservative estimate of whether the monitorenter/monitorexit bytecodes + // propererly nest in the method. It might return false, even though they actually nest properly, since the info. + // has not been computed yet. + bool guaranteed_monitor_matching() const { return access_flags().is_monitor_matching(); } + void set_guaranteed_monitor_matching() { _access_flags.set_monitor_matching(); } + + // returns true if the method is an accessor function (setter/getter). + bool is_accessor() const; + + // returns true if the method is an initializer ( or ). + bool is_initializer() const; + + // returns true if the method is static OR if the classfile version < 51 + bool has_valid_initializer_flags() const; + + // returns true if the method name is and the method has + // valid static initializer flags. + bool is_static_initializer() const; + + // compiled code support + // NOTE: code() is inherently racy as deopt can be clearing code + // simultaneously. Use with caution. + bool has_compiled_code() const { return code() != NULL; } + + // sizing + static int header_size() { return sizeof(Method)/HeapWordSize; } + static int size(bool is_native); + int size() const { return method_size(); } + + // interpreter support + static ByteSize const_offset() { return byte_offset_of(Method, _constMethod ); } + static ByteSize access_flags_offset() { return byte_offset_of(Method, _access_flags ); } +#ifdef CC_INTERP + static ByteSize result_index_offset() { return byte_offset_of(Method, _result_index ); } +#endif /* CC_INTERP */ + static ByteSize size_of_locals_offset() { return byte_offset_of(Method, _max_locals ); } + static ByteSize size_of_parameters_offset() { return byte_offset_of(Method, _size_of_parameters); } + static ByteSize from_compiled_offset() { return byte_offset_of(Method, _from_compiled_entry); } + static ByteSize code_offset() { return byte_offset_of(Method, _code); } + static ByteSize invocation_counter_offset() { return byte_offset_of(Method, _invocation_counter); } + static ByteSize backedge_counter_offset() { return byte_offset_of(Method, _backedge_counter); } + static ByteSize method_data_offset() { + return byte_offset_of(Method, _method_data); + } + static ByteSize interpreter_invocation_counter_offset() { return byte_offset_of(Method, _interpreter_invocation_count); } +#ifndef PRODUCT + static ByteSize compiled_invocation_counter_offset() { return byte_offset_of(Method, _compiled_invocation_count); } +#endif // not PRODUCT + static ByteSize native_function_offset() { return in_ByteSize(sizeof(Method)); } + static ByteSize from_interpreted_offset() { return byte_offset_of(Method, _from_interpreted_entry ); } + static ByteSize interpreter_entry_offset() { return byte_offset_of(Method, _i2i_entry ); } + static ByteSize signature_handler_offset() { return in_ByteSize(sizeof(Method) + wordSize); } + static ByteSize max_stack_offset() { return byte_offset_of(Method, _max_stack ); } + + // for code generation + static int method_data_offset_in_bytes() { return offset_of(Method, _method_data); } + static int interpreter_invocation_counter_offset_in_bytes() + { return offset_of(Method, _interpreter_invocation_count); } + static int intrinsic_id_offset_in_bytes() { return offset_of(Method, _intrinsic_id); } + static int intrinsic_id_size_in_bytes() { return sizeof(u1); } + + // Static methods that are used to implement member methods where an exposed this pointer + // is needed due to possible GCs + static objArrayHandle resolved_checked_exceptions_impl(Method* this_oop, TRAPS); + + // Returns the byte code index from the byte code pointer + int bci_from(address bcp) const; + address bcp_from(int bci) const; + int validate_bci_from_bcx(intptr_t bcx) const; + + // Returns the line number for a bci if debugging information for the method is prowided, + // -1 is returned otherwise. + int line_number_from_bci(int bci) const; + + // Reflection support + bool is_overridden_in(Klass* k) const; + + // JSR 292 support + bool is_method_handle_intrinsic() const; // MethodHandles::is_signature_polymorphic_intrinsic(intrinsic_id) + bool is_compiled_lambda_form() const; // intrinsic_id() == vmIntrinsics::_compiledLambdaForm + bool has_member_arg() const; // intrinsic_id() == vmIntrinsics::_linkToSpecial, etc. + static methodHandle make_method_handle_intrinsic(vmIntrinsics::ID iid, // _invokeBasic, _linkToVirtual + Symbol* signature, //anything at all + TRAPS); + static Klass* check_non_bcp_klass(Klass* klass); + // these operate only on invoke methods: + // presize interpreter frames for extra interpreter stack entries, if needed + // method handles want to be able to push a few extra values (e.g., a bound receiver), and + // invokedynamic sometimes needs to push a bootstrap method, call site, and arglist, + // all without checking for a stack overflow + static int extra_stack_entries() { return EnableInvokeDynamic ? 2 : 0; } + static int extra_stack_words(); // = extra_stack_entries() * Interpreter::stackElementSize() + + // RedefineClasses() support: + bool is_old() const { return access_flags().is_old(); } + void set_is_old() { _access_flags.set_is_old(); } + bool is_obsolete() const { return access_flags().is_obsolete(); } + void set_is_obsolete() { _access_flags.set_is_obsolete(); } + bool on_stack() const { return access_flags().on_stack(); } + void set_on_stack(const bool value); + + // see the definition in Method*.cpp for the gory details + bool should_not_be_cached() const; + + // JVMTI Native method prefixing support: + bool is_prefixed_native() const { return access_flags().is_prefixed_native(); } + void set_is_prefixed_native() { _access_flags.set_is_prefixed_native(); } + + // Rewriting support + static methodHandle clone_with_new_data(methodHandle m, u_char* new_code, int new_code_length, + u_char* new_compressed_linenumber_table, int new_compressed_linenumber_size, TRAPS); + + // jmethodID handling + // Because the useful life-span of a jmethodID cannot be determined, + // once created they are never reclaimed. The methods to which they refer, + // however, can be GC'ed away if the class is unloaded or if the method is + // made obsolete or deleted -- in these cases, the jmethodID + // refers to NULL (as is the case for any weak reference). + static jmethodID make_jmethod_id(ClassLoaderData* loader_data, Method* mh); + static void destroy_jmethod_id(ClassLoaderData* loader_data, jmethodID mid); + + // Use resolve_jmethod_id() in situations where the caller is expected + // to provide a valid jmethodID; the only sanity checks are in asserts; + // result guaranteed not to be NULL. + inline static Method* resolve_jmethod_id(jmethodID mid) { + assert(mid != NULL, "JNI method id should not be null"); + return *((Method**)mid); + } + + // Use checked_resolve_jmethod_id() in situations where the caller + // should provide a valid jmethodID, but might not. NULL is returned + // when the jmethodID does not refer to a valid method. + static Method* checked_resolve_jmethod_id(jmethodID mid); + + static void change_method_associated_with_jmethod_id(jmethodID old_jmid_ptr, Method* new_method); + static bool is_method_id(jmethodID mid); + + // Clear methods + static void clear_jmethod_ids(ClassLoaderData* loader_data); + static void print_jmethod_ids(ClassLoaderData* loader_data, outputStream* out) PRODUCT_RETURN; + + // Get this method's jmethodID -- allocate if it doesn't exist + jmethodID jmethod_id() { methodHandle this_h(this); + return InstanceKlass::get_jmethod_id(InstanceKlass::cast(method_holder()), this_h); } + + // Lookup the jmethodID for this method. Return NULL if not found. + // NOTE that this function can be called from a signal handler + // (see AsyncGetCallTrace support for Forte Analyzer) and this + // needs to be async-safe. No allocation should be done and + // so handles are not used to avoid deadlock. + jmethodID find_jmethod_id_or_null() { return InstanceKlass::cast(method_holder())->jmethod_id_or_null(this); } + + // JNI static invoke cached itable index accessors + int cached_itable_index() { return InstanceKlass::cast(method_holder())->cached_itable_index(method_idnum()); } + void set_cached_itable_index(int index) { InstanceKlass::cast(method_holder())->set_cached_itable_index(method_idnum(), index); } + + // Support for inlining of intrinsic methods + vmIntrinsics::ID intrinsic_id() const { return (vmIntrinsics::ID) _intrinsic_id; } + void set_intrinsic_id(vmIntrinsics::ID id) { _intrinsic_id = (u1) id; } + + // Helper routines for intrinsic_id() and vmIntrinsics::method(). + void init_intrinsic_id(); // updates from _none if a match + static vmSymbols::SID klass_id_for_intrinsics(Klass* holder); + + bool jfr_towrite() { return _jfr_towrite; } + void set_jfr_towrite(bool towrite) { _jfr_towrite = towrite; } + + bool force_inline() { return _force_inline; } + void set_force_inline(bool x) { _force_inline = x; } + bool dont_inline() { return _dont_inline; } + void set_dont_inline(bool x) { _dont_inline = x; } + bool is_hidden() { return _hidden; } + void set_hidden(bool x) { _hidden = x; } + + // On-stack replacement support + bool has_osr_nmethod(int level, bool match_level) { + return InstanceKlass::cast(method_holder())->lookup_osr_nmethod(this, InvocationEntryBci, level, match_level) != NULL; + } + + nmethod* lookup_osr_nmethod_for(int bci, int level, bool match_level) { + return InstanceKlass::cast(method_holder())->lookup_osr_nmethod(this, bci, level, match_level); + } + + // Inline cache support + void cleanup_inline_caches(); + + // Find if klass for method is loaded + bool is_klass_loaded_by_klass_index(int klass_index) const; + bool is_klass_loaded(int refinfo_index, bool must_be_resolved = false) const; + + // Indicates whether compilation failed earlier for this method, or + // whether it is not compilable for another reason like having a + // breakpoint set in it. + bool is_not_compilable(int comp_level = CompLevel_any) const; + void set_not_compilable(int comp_level = CompLevel_all, bool report = true); + void set_not_compilable_quietly(int comp_level = CompLevel_all) { + set_not_compilable(comp_level, false); + } + bool is_not_osr_compilable(int comp_level = CompLevel_any) const { + return is_not_compilable(comp_level) || access_flags().is_not_osr_compilable(); + } + void set_not_osr_compilable() { _access_flags.set_not_osr_compilable(); } + bool is_not_c1_compilable() const { return access_flags().is_not_c1_compilable(); } + void set_not_c1_compilable() { _access_flags.set_not_c1_compilable(); } + bool is_not_c2_compilable() const { return access_flags().is_not_c2_compilable(); } + void set_not_c2_compilable() { _access_flags.set_not_c2_compilable(); } + + // Background compilation support + bool queued_for_compilation() const { return access_flags().queued_for_compilation(); } + void set_queued_for_compilation() { _access_flags.set_queued_for_compilation(); } + void clear_queued_for_compilation() { _access_flags.clear_queued_for_compilation(); } + + // Resolve all classes in signature, return 'true' if successful + static bool load_signature_classes(methodHandle m, TRAPS); + + // Return if true if not all classes references in signature, including return type, has been loaded + static bool has_unloaded_classes_in_signature(methodHandle m, TRAPS); + + // Printing + void print_short_name(outputStream* st = tty) /*PRODUCT_RETURN*/; // prints as klassname::methodname; Exposed so field engineers can debug VM + void print_name(outputStream* st = tty) PRODUCT_RETURN; // prints as "virtual void foo(int)" + + // Helper routine used for method sorting + static void sort_methods(Array* methods, + Array* methods_annotations, + Array* methods_parameter_annotations, + Array* methods_default_annotations, + bool idempotent = false); + + // size of parameters + void set_size_of_parameters(int size) { _size_of_parameters = size; } + + // Deallocation function for redefine classes or if an error occurs + void deallocate_contents(ClassLoaderData* loader_data); + + // Printing +#ifndef PRODUCT + void print_on(outputStream* st) const; +#endif + void print_value_on(outputStream* st) const; + + const char* internal_name() const { return "{method}"; } + + // Verify + void verify() { verify_on(tty); } + void verify_on(outputStream* st); + + private: + + // Inlined elements + address* native_function_addr() const { assert(is_native(), "must be native"); return (address*) (this+1); } + address* signature_handler_addr() const { return native_function_addr() + 1; } +}; + + +// Utility class for compressing line number tables + +class CompressedLineNumberWriteStream: public CompressedWriteStream { + private: + int _bci; + int _line; + public: + // Constructor + CompressedLineNumberWriteStream(int initial_size) : CompressedWriteStream(initial_size), _bci(0), _line(0) {} + CompressedLineNumberWriteStream(u_char* buffer, int initial_size) : CompressedWriteStream(buffer, initial_size), _bci(0), _line(0) {} + + // Write (bci, line number) pair to stream + void write_pair_regular(int bci_delta, int line_delta); + + inline void write_pair_inline(int bci, int line) { + int bci_delta = bci - _bci; + int line_delta = line - _line; + _bci = bci; + _line = line; + // Skip (0,0) deltas - they do not add information and conflict with terminator. + if (bci_delta == 0 && line_delta == 0) return; + // Check if bci is 5-bit and line number 3-bit unsigned. + if (((bci_delta & ~0x1F) == 0) && ((line_delta & ~0x7) == 0)) { + // Compress into single byte. + jubyte value = ((jubyte) bci_delta << 3) | (jubyte) line_delta; + // Check that value doesn't match escape character. + if (value != 0xFF) { + write_byte(value); + return; + } + } + write_pair_regular(bci_delta, line_delta); + } + +// Windows AMD64 + Apr 2005 PSDK with /O2 generates bad code for write_pair. +// Disabling optimization doesn't work for methods in header files +// so we force it to call through the non-optimized version in the .cpp. +// It's gross, but it's the only way we can ensure that all callers are +// fixed. _MSC_VER is defined by the windows compiler +#if defined(_M_AMD64) && _MSC_VER >= 1400 + void write_pair(int bci, int line); +#else + void write_pair(int bci, int line) { write_pair_inline(bci, line); } +#endif + + // Write end-of-stream marker + void write_terminator() { write_byte(0); } +}; + + +// Utility class for decompressing line number tables + +class CompressedLineNumberReadStream: public CompressedReadStream { + private: + int _bci; + int _line; + public: + // Constructor + CompressedLineNumberReadStream(u_char* buffer); + // Read (bci, line number) pair from stream. Returns false at end-of-stream. + bool read_pair(); + // Accessing bci and line number (after calling read_pair) + int bci() const { return _bci; } + int line() const { return _line; } +}; + + +/// Fast Breakpoints. + +// If this structure gets more complicated (because bpts get numerous), +// move it into its own header. + +// There is presently no provision for concurrent access +// to breakpoint lists, which is only OK for JVMTI because +// breakpoints are written only at safepoints, and are read +// concurrently only outside of safepoints. + +class BreakpointInfo : public CHeapObj { + friend class VMStructs; + private: + Bytecodes::Code _orig_bytecode; + int _bci; + u2 _name_index; // of method + u2 _signature_index; // of method + BreakpointInfo* _next; // simple storage allocation + + public: + BreakpointInfo(Method* m, int bci); + + // accessors + Bytecodes::Code orig_bytecode() { return _orig_bytecode; } + void set_orig_bytecode(Bytecodes::Code code) { _orig_bytecode = code; } + int bci() { return _bci; } + + BreakpointInfo* next() const { return _next; } + void set_next(BreakpointInfo* n) { _next = n; } + + // helps for searchers + bool match(const Method* m, int bci) { + return bci == _bci && match(m); + } + + bool match(const Method* m) { + return _name_index == m->name_index() && + _signature_index == m->signature_index(); + } + + void set(Method* method); + void clear(Method* method); +}; + +// Utility class for access exception handlers +class ExceptionTable : public StackObj { + private: + ExceptionTableElement* _table; + u2 _length; + + public: + ExceptionTable(Method* m) { + if (m->has_exception_handler()) { + _table = m->exception_table_start(); + _length = m->exception_table_length(); + } else { + _table = NULL; + _length = 0; + } + } + + int length() const { + return _length; + } + + u2 start_pc(int idx) const { + assert(idx < _length, "out of bounds"); + return _table[idx].start_pc; + } + + void set_start_pc(int idx, u2 value) { + assert(idx < _length, "out of bounds"); + _table[idx].start_pc = value; + } + + u2 end_pc(int idx) const { + assert(idx < _length, "out of bounds"); + return _table[idx].end_pc; + } + + void set_end_pc(int idx, u2 value) { + assert(idx < _length, "out of bounds"); + _table[idx].end_pc = value; + } + + u2 handler_pc(int idx) const { + assert(idx < _length, "out of bounds"); + return _table[idx].handler_pc; + } + + void set_handler_pc(int idx, u2 value) { + assert(idx < _length, "out of bounds"); + _table[idx].handler_pc = value; + } + + u2 catch_type_index(int idx) const { + assert(idx < _length, "out of bounds"); + return _table[idx].catch_type_index; + } + + void set_catch_type_index(int idx, u2 value) { + assert(idx < _length, "out of bounds"); + _table[idx].catch_type_index = value; + } +}; + +#endif // SHARE_VM_OOPS_METHODOOP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/methodData.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/methodData.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,874 @@ +/* + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "classfile/systemDictionary.hpp" +#include "interpreter/bytecode.hpp" +#include "interpreter/bytecodeStream.hpp" +#include "interpreter/linkResolver.hpp" +#include "oops/methodData.hpp" +#include "prims/jvmtiRedefineClasses.hpp" +#include "runtime/compilationPolicy.hpp" +#include "runtime/deoptimization.hpp" +#include "runtime/handles.inline.hpp" + +// ================================================================== +// DataLayout +// +// Overlay for generic profiling data. + +// Some types of data layouts need a length field. +bool DataLayout::needs_array_len(u1 tag) { + return (tag == multi_branch_data_tag) || (tag == arg_info_data_tag); +} + +// Perform generic initialization of the data. More specific +// initialization occurs in overrides of ProfileData::post_initialize. +void DataLayout::initialize(u1 tag, u2 bci, int cell_count) { + _header._bits = (intptr_t)0; + _header._struct._tag = tag; + _header._struct._bci = bci; + for (int i = 0; i < cell_count; i++) { + set_cell_at(i, (intptr_t)0); + } + if (needs_array_len(tag)) { + set_cell_at(ArrayData::array_len_off_set, cell_count - 1); // -1 for header. + } +} + +void DataLayout::clean_weak_klass_links(BoolObjectClosure* cl) { + ResourceMark m; + data_in()->clean_weak_klass_links(cl); +} + + +// ================================================================== +// ProfileData +// +// A ProfileData object is created to refer to a section of profiling +// data in a structured way. + +// Constructor for invalid ProfileData. +ProfileData::ProfileData() { + _data = NULL; +} + +#ifndef PRODUCT +void ProfileData::print_shared(outputStream* st, const char* name) { + st->print("bci: %d", bci()); + st->fill_to(tab_width_one); + st->print("%s", name); + tab(st); + int trap = trap_state(); + if (trap != 0) { + char buf[100]; + st->print("trap(%s) ", Deoptimization::format_trap_state(buf, sizeof(buf), trap)); + } + int flags = data()->flags(); + if (flags != 0) + st->print("flags(%d) ", flags); +} + +void ProfileData::tab(outputStream* st) { + st->fill_to(tab_width_two); +} +#endif // !PRODUCT + +// ================================================================== +// BitData +// +// A BitData corresponds to a one-bit flag. This is used to indicate +// whether a checkcast bytecode has seen a null value. + + +#ifndef PRODUCT +void BitData::print_data_on(outputStream* st) { + print_shared(st, "BitData"); +} +#endif // !PRODUCT + +// ================================================================== +// CounterData +// +// A CounterData corresponds to a simple counter. + +#ifndef PRODUCT +void CounterData::print_data_on(outputStream* st) { + print_shared(st, "CounterData"); + st->print_cr("count(%u)", count()); +} +#endif // !PRODUCT + +// ================================================================== +// JumpData +// +// A JumpData is used to access profiling information for a direct +// branch. It is a counter, used for counting the number of branches, +// plus a data displacement, used for realigning the data pointer to +// the corresponding target bci. + +void JumpData::post_initialize(BytecodeStream* stream, MethodData* mdo) { + assert(stream->bci() == bci(), "wrong pos"); + int target; + Bytecodes::Code c = stream->code(); + if (c == Bytecodes::_goto_w || c == Bytecodes::_jsr_w) { + target = stream->dest_w(); + } else { + target = stream->dest(); + } + int my_di = mdo->dp_to_di(dp()); + int target_di = mdo->bci_to_di(target); + int offset = target_di - my_di; + set_displacement(offset); +} + +#ifndef PRODUCT +void JumpData::print_data_on(outputStream* st) { + print_shared(st, "JumpData"); + st->print_cr("taken(%u) displacement(%d)", taken(), displacement()); +} +#endif // !PRODUCT + +// ================================================================== +// ReceiverTypeData +// +// A ReceiverTypeData is used to access profiling information about a +// dynamic type check. It consists of a counter which counts the total times +// that the check is reached, and a series of (Klass*, count) pairs +// which are used to store a type profile for the receiver of the check. + +void ReceiverTypeData::clean_weak_klass_links(BoolObjectClosure* is_alive_cl) { + for (uint row = 0; row < row_limit(); row++) { + Klass* p = receiver(row); + if (p != NULL && !p->is_loader_alive(is_alive_cl)) { + clear_row(row); + } + } +} + +#ifndef PRODUCT +void ReceiverTypeData::print_receiver_data_on(outputStream* st) { + uint row; + int entries = 0; + for (row = 0; row < row_limit(); row++) { + if (receiver(row) != NULL) entries++; + } + st->print_cr("count(%u) entries(%u)", count(), entries); + int total = count(); + for (row = 0; row < row_limit(); row++) { + if (receiver(row) != NULL) { + total += receiver_count(row); + } + } + for (row = 0; row < row_limit(); row++) { + if (receiver(row) != NULL) { + tab(st); + receiver(row)->print_value_on(st); + st->print_cr("(%u %4.2f)", receiver_count(row), (float) receiver_count(row) / (float) total); + } + } +} +void ReceiverTypeData::print_data_on(outputStream* st) { + print_shared(st, "ReceiverTypeData"); + print_receiver_data_on(st); +} +void VirtualCallData::print_data_on(outputStream* st) { + print_shared(st, "VirtualCallData"); + print_receiver_data_on(st); +} +#endif // !PRODUCT + +// ================================================================== +// RetData +// +// A RetData is used to access profiling information for a ret bytecode. +// It is composed of a count of the number of times that the ret has +// been executed, followed by a series of triples of the form +// (bci, count, di) which count the number of times that some bci was the +// target of the ret and cache a corresponding displacement. + +void RetData::post_initialize(BytecodeStream* stream, MethodData* mdo) { + for (uint row = 0; row < row_limit(); row++) { + set_bci_displacement(row, -1); + set_bci(row, no_bci); + } + // release so other threads see a consistent state. bci is used as + // a valid flag for bci_displacement. + OrderAccess::release(); +} + +// This routine needs to atomically update the RetData structure, so the +// caller needs to hold the RetData_lock before it gets here. Since taking +// the lock can block (and allow GC) and since RetData is a ProfileData is a +// wrapper around a derived oop, taking the lock in _this_ method will +// basically cause the 'this' pointer's _data field to contain junk after the +// lock. We require the caller to take the lock before making the ProfileData +// structure. Currently the only caller is InterpreterRuntime::update_mdp_for_ret +address RetData::fixup_ret(int return_bci, MethodData* h_mdo) { + // First find the mdp which corresponds to the return bci. + address mdp = h_mdo->bci_to_dp(return_bci); + + // Now check to see if any of the cache slots are open. + for (uint row = 0; row < row_limit(); row++) { + if (bci(row) == no_bci) { + set_bci_displacement(row, mdp - dp()); + set_bci_count(row, DataLayout::counter_increment); + // Barrier to ensure displacement is written before the bci; allows + // the interpreter to read displacement without fear of race condition. + release_set_bci(row, return_bci); + break; + } + } + return mdp; +} + + +#ifndef PRODUCT +void RetData::print_data_on(outputStream* st) { + print_shared(st, "RetData"); + uint row; + int entries = 0; + for (row = 0; row < row_limit(); row++) { + if (bci(row) != no_bci) entries++; + } + st->print_cr("count(%u) entries(%u)", count(), entries); + for (row = 0; row < row_limit(); row++) { + if (bci(row) != no_bci) { + tab(st); + st->print_cr("bci(%d: count(%u) displacement(%d))", + bci(row), bci_count(row), bci_displacement(row)); + } + } +} +#endif // !PRODUCT + +// ================================================================== +// BranchData +// +// A BranchData is used to access profiling data for a two-way branch. +// It consists of taken and not_taken counts as well as a data displacement +// for the taken case. + +void BranchData::post_initialize(BytecodeStream* stream, MethodData* mdo) { + assert(stream->bci() == bci(), "wrong pos"); + int target = stream->dest(); + int my_di = mdo->dp_to_di(dp()); + int target_di = mdo->bci_to_di(target); + int offset = target_di - my_di; + set_displacement(offset); +} + +#ifndef PRODUCT +void BranchData::print_data_on(outputStream* st) { + print_shared(st, "BranchData"); + st->print_cr("taken(%u) displacement(%d)", + taken(), displacement()); + tab(st); + st->print_cr("not taken(%u)", not_taken()); +} +#endif + +// ================================================================== +// MultiBranchData +// +// A MultiBranchData is used to access profiling information for +// a multi-way branch (*switch bytecodes). It consists of a series +// of (count, displacement) pairs, which count the number of times each +// case was taken and specify the data displacment for each branch target. + +int MultiBranchData::compute_cell_count(BytecodeStream* stream) { + int cell_count = 0; + if (stream->code() == Bytecodes::_tableswitch) { + Bytecode_tableswitch sw(stream->method()(), stream->bcp()); + cell_count = 1 + per_case_cell_count * (1 + sw.length()); // 1 for default + } else { + Bytecode_lookupswitch sw(stream->method()(), stream->bcp()); + cell_count = 1 + per_case_cell_count * (sw.number_of_pairs() + 1); // 1 for default + } + return cell_count; +} + +void MultiBranchData::post_initialize(BytecodeStream* stream, + MethodData* mdo) { + assert(stream->bci() == bci(), "wrong pos"); + int target; + int my_di; + int target_di; + int offset; + if (stream->code() == Bytecodes::_tableswitch) { + Bytecode_tableswitch sw(stream->method()(), stream->bcp()); + int len = sw.length(); + assert(array_len() == per_case_cell_count * (len + 1), "wrong len"); + for (int count = 0; count < len; count++) { + target = sw.dest_offset_at(count) + bci(); + my_di = mdo->dp_to_di(dp()); + target_di = mdo->bci_to_di(target); + offset = target_di - my_di; + set_displacement_at(count, offset); + } + target = sw.default_offset() + bci(); + my_di = mdo->dp_to_di(dp()); + target_di = mdo->bci_to_di(target); + offset = target_di - my_di; + set_default_displacement(offset); + + } else { + Bytecode_lookupswitch sw(stream->method()(), stream->bcp()); + int npairs = sw.number_of_pairs(); + assert(array_len() == per_case_cell_count * (npairs + 1), "wrong len"); + for (int count = 0; count < npairs; count++) { + LookupswitchPair pair = sw.pair_at(count); + target = pair.offset() + bci(); + my_di = mdo->dp_to_di(dp()); + target_di = mdo->bci_to_di(target); + offset = target_di - my_di; + set_displacement_at(count, offset); + } + target = sw.default_offset() + bci(); + my_di = mdo->dp_to_di(dp()); + target_di = mdo->bci_to_di(target); + offset = target_di - my_di; + set_default_displacement(offset); + } +} + +#ifndef PRODUCT +void MultiBranchData::print_data_on(outputStream* st) { + print_shared(st, "MultiBranchData"); + st->print_cr("default_count(%u) displacement(%d)", + default_count(), default_displacement()); + int cases = number_of_cases(); + for (int i = 0; i < cases; i++) { + tab(st); + st->print_cr("count(%u) displacement(%d)", + count_at(i), displacement_at(i)); + } +} +#endif + +#ifndef PRODUCT +void ArgInfoData::print_data_on(outputStream* st) { + print_shared(st, "ArgInfoData"); + int nargs = number_of_args(); + for (int i = 0; i < nargs; i++) { + st->print(" 0x%x", arg_modified(i)); + } + st->cr(); +} + +#endif +// ================================================================== +// MethodData* +// +// A MethodData* holds information which has been collected about +// a method. + +MethodData* MethodData::allocate(ClassLoaderData* loader_data, methodHandle method, TRAPS) { + int size = MethodData::compute_allocation_size_in_words(method); + + return new (loader_data, size, false, THREAD) MethodData(method(), size, CHECK_NULL); +} + +int MethodData::bytecode_cell_count(Bytecodes::Code code) { + switch (code) { + case Bytecodes::_checkcast: + case Bytecodes::_instanceof: + case Bytecodes::_aastore: + if (TypeProfileCasts) { + return ReceiverTypeData::static_cell_count(); + } else { + return BitData::static_cell_count(); + } + case Bytecodes::_invokespecial: + case Bytecodes::_invokestatic: + return CounterData::static_cell_count(); + case Bytecodes::_goto: + case Bytecodes::_goto_w: + case Bytecodes::_jsr: + case Bytecodes::_jsr_w: + return JumpData::static_cell_count(); + case Bytecodes::_invokevirtual: + case Bytecodes::_invokeinterface: + return VirtualCallData::static_cell_count(); + case Bytecodes::_invokedynamic: + return CounterData::static_cell_count(); + case Bytecodes::_ret: + return RetData::static_cell_count(); + case Bytecodes::_ifeq: + case Bytecodes::_ifne: + case Bytecodes::_iflt: + case Bytecodes::_ifge: + case Bytecodes::_ifgt: + case Bytecodes::_ifle: + case Bytecodes::_if_icmpeq: + case Bytecodes::_if_icmpne: + case Bytecodes::_if_icmplt: + case Bytecodes::_if_icmpge: + case Bytecodes::_if_icmpgt: + case Bytecodes::_if_icmple: + case Bytecodes::_if_acmpeq: + case Bytecodes::_if_acmpne: + case Bytecodes::_ifnull: + case Bytecodes::_ifnonnull: + return BranchData::static_cell_count(); + case Bytecodes::_lookupswitch: + case Bytecodes::_tableswitch: + return variable_cell_count; + } + return no_profile_data; +} + +// Compute the size of the profiling information corresponding to +// the current bytecode. +int MethodData::compute_data_size(BytecodeStream* stream) { + int cell_count = bytecode_cell_count(stream->code()); + if (cell_count == no_profile_data) { + return 0; + } + if (cell_count == variable_cell_count) { + cell_count = MultiBranchData::compute_cell_count(stream); + } + // Note: cell_count might be zero, meaning that there is just + // a DataLayout header, with no extra cells. + assert(cell_count >= 0, "sanity"); + return DataLayout::compute_size_in_bytes(cell_count); +} + +int MethodData::compute_extra_data_count(int data_size, int empty_bc_count) { + if (ProfileTraps) { + // Assume that up to 3% of BCIs with no MDP will need to allocate one. + int extra_data_count = (uint)(empty_bc_count * 3) / 128 + 1; + // If the method is large, let the extra BCIs grow numerous (to ~1%). + int one_percent_of_data + = (uint)data_size / (DataLayout::header_size_in_bytes()*128); + if (extra_data_count < one_percent_of_data) + extra_data_count = one_percent_of_data; + if (extra_data_count > empty_bc_count) + extra_data_count = empty_bc_count; // no need for more + return extra_data_count; + } else { + return 0; + } +} + +// Compute the size of the MethodData* necessary to store +// profiling information about a given method. Size is in bytes. +int MethodData::compute_allocation_size_in_bytes(methodHandle method) { + int data_size = 0; + BytecodeStream stream(method); + Bytecodes::Code c; + int empty_bc_count = 0; // number of bytecodes lacking data + while ((c = stream.next()) >= 0) { + int size_in_bytes = compute_data_size(&stream); + data_size += size_in_bytes; + if (size_in_bytes == 0) empty_bc_count += 1; + } + int object_size = in_bytes(data_offset()) + data_size; + + // Add some extra DataLayout cells (at least one) to track stray traps. + int extra_data_count = compute_extra_data_count(data_size, empty_bc_count); + object_size += extra_data_count * DataLayout::compute_size_in_bytes(0); + + // Add a cell to record information about modified arguments. + int arg_size = method->size_of_parameters(); + object_size += DataLayout::compute_size_in_bytes(arg_size+1); + return object_size; +} + +// Compute the size of the MethodData* necessary to store +// profiling information about a given method. Size is in words +int MethodData::compute_allocation_size_in_words(methodHandle method) { + int byte_size = compute_allocation_size_in_bytes(method); + int word_size = align_size_up(byte_size, BytesPerWord) / BytesPerWord; + return align_object_size(word_size); +} + +// Initialize an individual data segment. Returns the size of +// the segment in bytes. +int MethodData::initialize_data(BytecodeStream* stream, + int data_index) { + int cell_count = -1; + int tag = DataLayout::no_tag; + DataLayout* data_layout = data_layout_at(data_index); + Bytecodes::Code c = stream->code(); + switch (c) { + case Bytecodes::_checkcast: + case Bytecodes::_instanceof: + case Bytecodes::_aastore: + if (TypeProfileCasts) { + cell_count = ReceiverTypeData::static_cell_count(); + tag = DataLayout::receiver_type_data_tag; + } else { + cell_count = BitData::static_cell_count(); + tag = DataLayout::bit_data_tag; + } + break; + case Bytecodes::_invokespecial: + case Bytecodes::_invokestatic: + cell_count = CounterData::static_cell_count(); + tag = DataLayout::counter_data_tag; + break; + case Bytecodes::_goto: + case Bytecodes::_goto_w: + case Bytecodes::_jsr: + case Bytecodes::_jsr_w: + cell_count = JumpData::static_cell_count(); + tag = DataLayout::jump_data_tag; + break; + case Bytecodes::_invokevirtual: + case Bytecodes::_invokeinterface: + cell_count = VirtualCallData::static_cell_count(); + tag = DataLayout::virtual_call_data_tag; + break; + case Bytecodes::_invokedynamic: + // %%% should make a type profile for any invokedynamic that takes a ref argument + cell_count = CounterData::static_cell_count(); + tag = DataLayout::counter_data_tag; + break; + case Bytecodes::_ret: + cell_count = RetData::static_cell_count(); + tag = DataLayout::ret_data_tag; + break; + case Bytecodes::_ifeq: + case Bytecodes::_ifne: + case Bytecodes::_iflt: + case Bytecodes::_ifge: + case Bytecodes::_ifgt: + case Bytecodes::_ifle: + case Bytecodes::_if_icmpeq: + case Bytecodes::_if_icmpne: + case Bytecodes::_if_icmplt: + case Bytecodes::_if_icmpge: + case Bytecodes::_if_icmpgt: + case Bytecodes::_if_icmple: + case Bytecodes::_if_acmpeq: + case Bytecodes::_if_acmpne: + case Bytecodes::_ifnull: + case Bytecodes::_ifnonnull: + cell_count = BranchData::static_cell_count(); + tag = DataLayout::branch_data_tag; + break; + case Bytecodes::_lookupswitch: + case Bytecodes::_tableswitch: + cell_count = MultiBranchData::compute_cell_count(stream); + tag = DataLayout::multi_branch_data_tag; + break; + } + assert(tag == DataLayout::multi_branch_data_tag || + cell_count == bytecode_cell_count(c), "cell counts must agree"); + if (cell_count >= 0) { + assert(tag != DataLayout::no_tag, "bad tag"); + assert(bytecode_has_profile(c), "agree w/ BHP"); + data_layout->initialize(tag, stream->bci(), cell_count); + return DataLayout::compute_size_in_bytes(cell_count); + } else { + assert(!bytecode_has_profile(c), "agree w/ !BHP"); + return 0; + } +} + +// Get the data at an arbitrary (sort of) data index. +ProfileData* MethodData::data_at(int data_index) const { + if (out_of_bounds(data_index)) { + return NULL; + } + DataLayout* data_layout = data_layout_at(data_index); + return data_layout->data_in(); +} + +ProfileData* DataLayout::data_in() { + switch (tag()) { + case DataLayout::no_tag: + default: + ShouldNotReachHere(); + return NULL; + case DataLayout::bit_data_tag: + return new BitData(this); + case DataLayout::counter_data_tag: + return new CounterData(this); + case DataLayout::jump_data_tag: + return new JumpData(this); + case DataLayout::receiver_type_data_tag: + return new ReceiverTypeData(this); + case DataLayout::virtual_call_data_tag: + return new VirtualCallData(this); + case DataLayout::ret_data_tag: + return new RetData(this); + case DataLayout::branch_data_tag: + return new BranchData(this); + case DataLayout::multi_branch_data_tag: + return new MultiBranchData(this); + case DataLayout::arg_info_data_tag: + return new ArgInfoData(this); + }; +} + +// Iteration over data. +ProfileData* MethodData::next_data(ProfileData* current) const { + int current_index = dp_to_di(current->dp()); + int next_index = current_index + current->size_in_bytes(); + ProfileData* next = data_at(next_index); + return next; +} + +// Give each of the data entries a chance to perform specific +// data initialization. +void MethodData::post_initialize(BytecodeStream* stream) { + ResourceMark rm; + ProfileData* data; + for (data = first_data(); is_valid(data); data = next_data(data)) { + stream->set_start(data->bci()); + stream->next(); + data->post_initialize(stream, this); + } +} + +// Initialize the MethodData* corresponding to a given method. +MethodData::MethodData(methodHandle method, int size, TRAPS) { + No_Safepoint_Verifier no_safepoint; // init function atomic wrt GC + ResourceMark rm; + // Set the method back-pointer. + _method = method(); + + if (TieredCompilation) { + _invocation_counter.init(); + _backedge_counter.init(); + _invocation_counter_start = 0; + _backedge_counter_start = 0; + _num_loops = 0; + _num_blocks = 0; + _highest_comp_level = 0; + _highest_osr_comp_level = 0; + _would_profile = true; + } + set_creation_mileage(mileage_of(method())); + + // Initialize flags and trap history. + _nof_decompiles = 0; + _nof_overflow_recompiles = 0; + _nof_overflow_traps = 0; + assert(sizeof(_trap_hist) % sizeof(HeapWord) == 0, "align"); + Copy::zero_to_words((HeapWord*) &_trap_hist, + sizeof(_trap_hist) / sizeof(HeapWord)); + + // Go through the bytecodes and allocate and initialize the + // corresponding data cells. + int data_size = 0; + int empty_bc_count = 0; // number of bytecodes lacking data + BytecodeStream stream(method); + Bytecodes::Code c; + while ((c = stream.next()) >= 0) { + int size_in_bytes = initialize_data(&stream, data_size); + data_size += size_in_bytes; + if (size_in_bytes == 0) empty_bc_count += 1; + } + _data_size = data_size; + int object_size = in_bytes(data_offset()) + data_size; + + // Add some extra DataLayout cells (at least one) to track stray traps. + int extra_data_count = compute_extra_data_count(data_size, empty_bc_count); + int extra_size = extra_data_count * DataLayout::compute_size_in_bytes(0); + + // Add a cell to record information about modified arguments. + // Set up _args_modified array after traps cells so that + // the code for traps cells works. + DataLayout *dp = data_layout_at(data_size + extra_size); + + int arg_size = method->size_of_parameters(); + dp->initialize(DataLayout::arg_info_data_tag, 0, arg_size+1); + + object_size += extra_size + DataLayout::compute_size_in_bytes(arg_size+1); + + // Set an initial hint. Don't use set_hint_di() because + // first_di() may be out of bounds if data_size is 0. + // In that situation, _hint_di is never used, but at + // least well-defined. + _hint_di = first_di(); + + post_initialize(&stream); + + set_size(object_size); +} + +// Get a measure of how much mileage the method has on it. +int MethodData::mileage_of(Method* method) { + int mileage = 0; + if (TieredCompilation) { + mileage = MAX2(method->invocation_count(), method->backedge_count()); + } else { + int iic = method->interpreter_invocation_count(); + if (mileage < iic) mileage = iic; + InvocationCounter* ic = method->invocation_counter(); + InvocationCounter* bc = method->backedge_counter(); + int icval = ic->count(); + if (ic->carry()) icval += CompileThreshold; + if (mileage < icval) mileage = icval; + int bcval = bc->count(); + if (bc->carry()) bcval += CompileThreshold; + if (mileage < bcval) mileage = bcval; + } + return mileage; +} + +bool MethodData::is_mature() const { + return CompilationPolicy::policy()->is_mature(_method); +} + +// Translate a bci to its corresponding data index (di). +address MethodData::bci_to_dp(int bci) { + ResourceMark rm; + ProfileData* data = data_before(bci); + ProfileData* prev = NULL; + for ( ; is_valid(data); data = next_data(data)) { + if (data->bci() >= bci) { + if (data->bci() == bci) set_hint_di(dp_to_di(data->dp())); + else if (prev != NULL) set_hint_di(dp_to_di(prev->dp())); + return data->dp(); + } + prev = data; + } + return (address)limit_data_position(); +} + +// Translate a bci to its corresponding data, or NULL. +ProfileData* MethodData::bci_to_data(int bci) { + ProfileData* data = data_before(bci); + for ( ; is_valid(data); data = next_data(data)) { + if (data->bci() == bci) { + set_hint_di(dp_to_di(data->dp())); + return data; + } else if (data->bci() > bci) { + break; + } + } + return bci_to_extra_data(bci, false); +} + +// Translate a bci to its corresponding extra data, or NULL. +ProfileData* MethodData::bci_to_extra_data(int bci, bool create_if_missing) { + DataLayout* dp = extra_data_base(); + DataLayout* end = extra_data_limit(); + DataLayout* avail = NULL; + for (; dp < end; dp = next_extra(dp)) { + // No need for "OrderAccess::load_acquire" ops, + // since the data structure is monotonic. + if (dp->tag() == DataLayout::no_tag) break; + if (dp->tag() == DataLayout::arg_info_data_tag) { + dp = end; // ArgInfoData is at the end of extra data section. + break; + } + if (dp->bci() == bci) { + assert(dp->tag() == DataLayout::bit_data_tag, "sane"); + return new BitData(dp); + } + } + if (create_if_missing && dp < end) { + // Allocate this one. There is no mutual exclusion, + // so two threads could allocate different BCIs to the + // same data layout. This means these extra data + // records, like most other MDO contents, must not be + // trusted too much. + DataLayout temp; + temp.initialize(DataLayout::bit_data_tag, bci, 0); + dp->release_set_header(temp.header()); + assert(dp->tag() == DataLayout::bit_data_tag, "sane"); + //NO: assert(dp->bci() == bci, "no concurrent allocation"); + return new BitData(dp); + } + return NULL; +} + +ArgInfoData *MethodData::arg_info() { + DataLayout* dp = extra_data_base(); + DataLayout* end = extra_data_limit(); + for (; dp < end; dp = next_extra(dp)) { + if (dp->tag() == DataLayout::arg_info_data_tag) + return new ArgInfoData(dp); + } + return NULL; +} + +// Printing + +#ifndef PRODUCT + +void MethodData::print_on(outputStream* st) const { + assert(is_methodData(), "should be method data"); + st->print("method data for "); + method()->print_value_on(st); + st->cr(); + print_data_on(st); +} + +#endif //PRODUCT + +void MethodData::print_value_on(outputStream* st) const { + assert(is_methodData(), "should be method data"); + st->print("method data for "); + method()->print_value_on(st); +} + +#ifndef PRODUCT +void MethodData::print_data_on(outputStream* st) const { + ResourceMark rm; + ProfileData* data = first_data(); + for ( ; is_valid(data); data = next_data(data)) { + st->print("%d", dp_to_di(data->dp())); + st->fill_to(6); + data->print_data_on(st); + } + st->print_cr("--- Extra data:"); + DataLayout* dp = extra_data_base(); + DataLayout* end = extra_data_limit(); + for (; dp < end; dp = next_extra(dp)) { + // No need for "OrderAccess::load_acquire" ops, + // since the data structure is monotonic. + if (dp->tag() == DataLayout::no_tag) continue; + if (dp->tag() == DataLayout::bit_data_tag) { + data = new BitData(dp); + } else { + assert(dp->tag() == DataLayout::arg_info_data_tag, "must be BitData or ArgInfo"); + data = new ArgInfoData(dp); + dp = end; // ArgInfoData is at the end of extra data section. + } + st->print("%d", dp_to_di(data->dp())); + st->fill_to(6); + data->print_data_on(st); + } +} +#endif + + +// Verification + +void MethodData::verify_on(outputStream* st) { + guarantee(is_methodData(), "object must be method data"); + // guarantee(m->is_perm(), "should be in permspace"); + this->verify_data_on(st); +} + +void MethodData::verify_data_on(outputStream* st) { + NEEDS_CLEANUP; + // not yet implemented. +} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/methodData.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/vm/oops/methodData.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -0,0 +1,1508 @@ +/* + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_OOPS_METHODDATAOOP_HPP +#define SHARE_VM_OOPS_METHODDATAOOP_HPP + +#include "interpreter/bytecodes.hpp" +#include "memory/universe.hpp" +#include "oops/method.hpp" +#include "oops/oop.hpp" +#include "runtime/orderAccess.hpp" + +class BytecodeStream; + +// The MethodData object collects counts and other profile information +// during zeroth-tier (interpretive) and first-tier execution. +// The profile is used later by compilation heuristics. Some heuristics +// enable use of aggressive (or "heroic") optimizations. An aggressive +// optimization often has a down-side, a corner case that it handles +// poorly, but which is thought to be rare. The profile provides +// evidence of this rarity for a given method or even BCI. It allows +// the compiler to back out of the optimization at places where it +// has historically been a poor choice. Other heuristics try to use +// specific information gathered about types observed at a given site. +// +// All data in the profile is approximate. It is expected to be accurate +// on the whole, but the system expects occasional inaccuraces, due to +// counter overflow, multiprocessor races during data collection, space +// limitations, missing MDO blocks, etc. Bad or missing data will degrade +// optimization quality but will not affect correctness. Also, each MDO +// is marked with its birth-date ("creation_mileage") which can be used +// to assess the quality ("maturity") of its data. +// +// Short (<32-bit) counters are designed to overflow to a known "saturated" +// state. Also, certain recorded per-BCI events are given one-bit counters +// which overflow to a saturated state which applied to all counters at +// that BCI. In other words, there is a small lattice which approximates +// the ideal of an infinite-precision counter for each event at each BCI, +// and the lattice quickly "bottoms out" in a state where all counters +// are taken to be indefinitely large. +// +// The reader will find many data races in profile gathering code, starting +// with invocation counter incrementation. None of these races harm correct +// execution of the compiled code. + +// forward decl +class ProfileData; + +// DataLayout +// +// Overlay for generic profiling data. +class DataLayout VALUE_OBJ_CLASS_SPEC { +private: + // Every data layout begins with a header. This header + // contains a tag, which is used to indicate the size/layout + // of the data, 4 bits of flags, which can be used in any way, + // 4 bits of trap history (none/one reason/many reasons), + // and a bci, which is used to tie this piece of data to a + // specific bci in the bytecodes. + union { + intptr_t _bits; + struct { + u1 _tag; + u1 _flags; + u2 _bci; + } _struct; + } _header; + + // The data layout has an arbitrary number of cells, each sized + // to accomodate a pointer or an integer. + intptr_t _cells[1]; + + // Some types of data layouts need a length field. + static bool needs_array_len(u1 tag); + +public: + enum { + counter_increment = 1 + }; + + enum { + cell_size = sizeof(intptr_t) + }; + + // Tag values + enum { + no_tag, + bit_data_tag, + counter_data_tag, + jump_data_tag, + receiver_type_data_tag, + virtual_call_data_tag, + ret_data_tag, + branch_data_tag, + multi_branch_data_tag, + arg_info_data_tag + }; + + enum { + // The _struct._flags word is formatted as [trap_state:4 | flags:4]. + // The trap state breaks down further as [recompile:1 | reason:3]. + // This further breakdown is defined in deoptimization.cpp. + // See Deoptimization::trap_state_reason for an assert that + // trap_bits is big enough to hold reasons < Reason_RECORDED_LIMIT. + // + // The trap_state is collected only if ProfileTraps is true. + trap_bits = 1+3, // 3: enough to distinguish [0..Reason_RECORDED_LIMIT]. + trap_shift = BitsPerByte - trap_bits, + trap_mask = right_n_bits(trap_bits), + trap_mask_in_place = (trap_mask << trap_shift), + flag_limit = trap_shift, + flag_mask = right_n_bits(flag_limit), + first_flag = 0 + }; + + // Size computation + static int header_size_in_bytes() { + return cell_size; + } + static int header_size_in_cells() { + return 1; + } + + static int compute_size_in_bytes(int cell_count) { + return header_size_in_bytes() + cell_count * cell_size; + } + + // Initialization + void initialize(u1 tag, u2 bci, int cell_count); + + // Accessors + u1 tag() { + return _header._struct._tag; + } + + // Return a few bits of trap state. Range is [0..trap_mask]. + // The state tells if traps with zero, one, or many reasons have occurred. + // It also tells whether zero or many recompilations have occurred. + // The associated trap histogram in the MDO itself tells whether + // traps are common or not. If a BCI shows that a trap X has + // occurred, and the MDO shows N occurrences of X, we make the + // simplifying assumption that all N occurrences can be blamed + // on that BCI. + int trap_state() { + return ((_header._struct._flags >> trap_shift) & trap_mask); + } + + void set_trap_state(int new_state) { + assert(ProfileTraps, "used only under +ProfileTraps"); + uint old_flags = (_header._struct._flags & flag_mask); + _header._struct._flags = (new_state << trap_shift) | old_flags; + } + + u1 flags() { + return _header._struct._flags; + } + + u2 bci() { + return _header._struct._bci; + } + + void set_header(intptr_t value) { + _header._bits = value; + } + void release_set_header(intptr_t value) { + OrderAccess::release_store_ptr(&_header._bits, value); + } + intptr_t header() { + return _header._bits; + } + void set_cell_at(int index, intptr_t value) { + _cells[index] = value; + } + void release_set_cell_at(int index, intptr_t value) { + OrderAccess::release_store_ptr(&_cells[index], value); + } + intptr_t cell_at(int index) { + return _cells[index]; + } + + void set_flag_at(int flag_number) { + assert(flag_number < flag_limit, "oob"); + _header._struct._flags |= (0x1 << flag_number); + } + bool flag_at(int flag_number) { + assert(flag_number < flag_limit, "oob"); + return (_header._struct._flags & (0x1 << flag_number)) != 0; + } + + // Low-level support for code generation. + static ByteSize header_offset() { + return byte_offset_of(DataLayout, _header); + } + static ByteSize tag_offset() { + return byte_offset_of(DataLayout, _header._struct._tag); + } + static ByteSize flags_offset() { + return byte_offset_of(DataLayout, _header._struct._flags); + } + static ByteSize bci_offset() { + return byte_offset_of(DataLayout, _header._struct._bci); + } + static ByteSize cell_offset(int index) { + return byte_offset_of(DataLayout, _cells) + in_ByteSize(index * cell_size); + } + // Return a value which, when or-ed as a byte into _flags, sets the flag. + static int flag_number_to_byte_constant(int flag_number) { + assert(0 <= flag_number && flag_number < flag_limit, "oob"); + DataLayout temp; temp.set_header(0); + temp.set_flag_at(flag_number); + return temp._header._struct._flags; + } + // Return a value which, when or-ed as a word into _header, sets the flag. + static intptr_t flag_mask_to_header_mask(int byte_constant) { + DataLayout temp; temp.set_header(0); + temp._header._struct._flags = byte_constant; + return temp._header._bits; + } + + ProfileData* data_in(); + + // GC support + void clean_weak_klass_links(BoolObjectClosure* cl); +}; + + +// ProfileData class hierarchy +class ProfileData; +class BitData; +class CounterData; +class ReceiverTypeData; +class VirtualCallData; +class RetData; +class JumpData; +class BranchData; +class ArrayData; +class MultiBranchData; +class ArgInfoData; + + +// ProfileData +// +// A ProfileData object is created to refer to a section of profiling +// data in a structured way. +class ProfileData : public ResourceObj { +private: +#ifndef PRODUCT + enum { + tab_width_one = 16, + tab_width_two = 36 + }; +#endif // !PRODUCT + + // This is a pointer to a section of profiling data. + DataLayout* _data; + +protected: + DataLayout* data() { return _data; } + + enum { + cell_size = DataLayout::cell_size + }; + +public: + // How many cells are in this? + virtual int cell_count() { + ShouldNotReachHere(); + return -1; + } + + // Return the size of this data. + int size_in_bytes() { + return DataLayout::compute_size_in_bytes(cell_count()); + } + +protected: + // Low-level accessors for underlying data + void set_intptr_at(int index, intptr_t value) { + assert(0 <= index && index < cell_count(), "oob"); + data()->set_cell_at(index, value); + } + void release_set_intptr_at(int index, intptr_t value) { + assert(0 <= index && index < cell_count(), "oob"); + data()->release_set_cell_at(index, value); + } + intptr_t intptr_at(int index) { + assert(0 <= index && index < cell_count(), "oob"); + return data()->cell_at(index); + } + void set_uint_at(int index, uint value) { + set_intptr_at(index, (intptr_t) value); + } + void release_set_uint_at(int index, uint value) { + release_set_intptr_at(index, (intptr_t) value); + } + uint uint_at(int index) { + return (uint)intptr_at(index); + } + void set_int_at(int index, int value) { + set_intptr_at(index, (intptr_t) value); + } + void release_set_int_at(int index, int value) { + release_set_intptr_at(index, (intptr_t) value); + } + int int_at(int index) { + return (int)intptr_at(index); + } + int int_at_unchecked(int index) { + return (int)data()->cell_at(index); + } + void set_oop_at(int index, oop value) { + set_intptr_at(index, (intptr_t) value); + } + oop oop_at(int index) { + return (oop)intptr_at(index); + } + + void set_flag_at(int flag_number) { + data()->set_flag_at(flag_number); + } + bool flag_at(int flag_number) { + return data()->flag_at(flag_number); + } + + // two convenient imports for use by subclasses: + static ByteSize cell_offset(int index) { + return DataLayout::cell_offset(index); + } + static int flag_number_to_byte_constant(int flag_number) { + return DataLayout::flag_number_to_byte_constant(flag_number); + } + + ProfileData(DataLayout* data) { + _data = data; + } + +public: + // Constructor for invalid ProfileData. + ProfileData(); + + u2 bci() { + return data()->bci(); + } + + address dp() { + return (address)_data; + } + + int trap_state() { + return data()->trap_state(); + } + void set_trap_state(int new_state) { + data()->set_trap_state(new_state); + } + + // Type checking + virtual bool is_BitData() { return false; } + virtual bool is_CounterData() { return false; } + virtual bool is_JumpData() { return false; } + virtual bool is_ReceiverTypeData(){ return false; } + virtual bool is_VirtualCallData() { return false; } + virtual bool is_RetData() { return false; } + virtual bool is_BranchData() { return false; } + virtual bool is_ArrayData() { return false; } + virtual bool is_MultiBranchData() { return false; } + virtual bool is_ArgInfoData() { return false; } + + + BitData* as_BitData() { + assert(is_BitData(), "wrong type"); + return is_BitData() ? (BitData*) this : NULL; + } + CounterData* as_CounterData() { + assert(is_CounterData(), "wrong type"); + return is_CounterData() ? (CounterData*) this : NULL; + } + JumpData* as_JumpData() { + assert(is_JumpData(), "wrong type"); + return is_JumpData() ? (JumpData*) this : NULL; + } + ReceiverTypeData* as_ReceiverTypeData() { + assert(is_ReceiverTypeData(), "wrong type"); + return is_ReceiverTypeData() ? (ReceiverTypeData*)this : NULL; + } + VirtualCallData* as_VirtualCallData() { + assert(is_VirtualCallData(), "wrong type"); + return is_VirtualCallData() ? (VirtualCallData*)this : NULL; + } + RetData* as_RetData() { + assert(is_RetData(), "wrong type"); + return is_RetData() ? (RetData*) this : NULL; + } + BranchData* as_BranchData() { + assert(is_BranchData(), "wrong type"); + return is_BranchData() ? (BranchData*) this : NULL; + } + ArrayData* as_ArrayData() { + assert(is_ArrayData(), "wrong type"); + return is_ArrayData() ? (ArrayData*) this : NULL; + } + MultiBranchData* as_MultiBranchData() { + assert(is_MultiBranchData(), "wrong type"); + return is_MultiBranchData() ? (MultiBranchData*)this : NULL; + } + ArgInfoData* as_ArgInfoData() { + assert(is_ArgInfoData(), "wrong type"); + return is_ArgInfoData() ? (ArgInfoData*)this : NULL; + } + + + // Subclass specific initialization + virtual void post_initialize(BytecodeStream* stream, MethodData* mdo) {} + + // GC support + virtual void clean_weak_klass_links(BoolObjectClosure* is_alive_closure) {} + + // CI translation: ProfileData can represent both MethodDataOop data + // as well as CIMethodData data. This function is provided for translating + // an oop in a ProfileData to the ci equivalent. Generally speaking, + // most ProfileData don't require any translation, so we provide the null + // translation here, and the required translators are in the ci subclasses. + virtual void translate_from(ProfileData* data) {} + + virtual void print_data_on(outputStream* st) { + ShouldNotReachHere(); + } + +#ifndef PRODUCT + void print_shared(outputStream* st, const char* name); + void tab(outputStream* st); +#endif +}; + +// BitData +// +// A BitData holds a flag or two in its header. +class BitData : public ProfileData { +protected: + enum { + // null_seen: + // saw a null operand (cast/aastore/instanceof) + null_seen_flag = DataLayout::first_flag + 0 + }; + enum { bit_cell_count = 0 }; // no additional data fields needed. +public: + BitData(DataLayout* layout) : ProfileData(layout) { + } + + virtual bool is_BitData() { return true; } + + static int static_cell_count() { + return bit_cell_count; + } + + virtual int cell_count() { + return static_cell_count(); + } + + // Accessor + + // The null_seen flag bit is specially known to the interpreter. + // Consulting it allows the compiler to avoid setting up null_check traps. + bool null_seen() { return flag_at(null_seen_flag); } + void set_null_seen() { set_flag_at(null_seen_flag); } + + + // Code generation support + static int null_seen_byte_constant() { + return flag_number_to_byte_constant(null_seen_flag); + } + + static ByteSize bit_data_size() { + return cell_offset(bit_cell_count); + } + +#ifndef PRODUCT + void print_data_on(outputStream* st); +#endif +}; + +// CounterData +// +// A CounterData corresponds to a simple counter. +class CounterData : public BitData { +protected: + enum { + count_off, + counter_cell_count + }; +public: + CounterData(DataLayout* layout) : BitData(layout) {} + + virtual bool is_CounterData() { return true; } + + static int static_cell_count() { + return counter_cell_count; + } + + virtual int cell_count() { + return static_cell_count(); + } + + // Direct accessor + uint count() { + return uint_at(count_off); + } + + // Code generation support + static ByteSize count_offset() { + return cell_offset(count_off); + } + static ByteSize counter_data_size() { + return cell_offset(counter_cell_count); + } + + void set_count(uint count) { + set_uint_at(count_off, count); + } + +#ifndef PRODUCT + void print_data_on(outputStream* st); +#endif +}; + +// JumpData +// +// A JumpData is used to access profiling information for a direct +// branch. It is a counter, used for counting the number of branches, +// plus a data displacement, used for realigning the data pointer to +// the corresponding target bci. +class JumpData : public ProfileData { +protected: + enum { + taken_off_set, + displacement_off_set, + jump_cell_count + }; + + void set_displacement(int displacement) { + set_int_at(displacement_off_set, displacement); + } + +public: + JumpData(DataLayout* layout) : ProfileData(layout) { + assert(layout->tag() == DataLayout::jump_data_tag || + layout->tag() == DataLayout::branch_data_tag, "wrong type"); + } + + virtual bool is_JumpData() { return true; } + + static int static_cell_count() { + return jump_cell_count; + } + + virtual int cell_count() { + return static_cell_count(); + } + + // Direct accessor + uint taken() { + return uint_at(taken_off_set); + } + + void set_taken(uint cnt) { + set_uint_at(taken_off_set, cnt); + } + + // Saturating counter + uint inc_taken() { + uint cnt = taken() + 1; + // Did we wrap? Will compiler screw us?? + if (cnt == 0) cnt--; + set_uint_at(taken_off_set, cnt); + return cnt; + } + + int displacement() { + return int_at(displacement_off_set); + } + + // Code generation support + static ByteSize taken_offset() { + return cell_offset(taken_off_set); + } + + static ByteSize displacement_offset() { + return cell_offset(displacement_off_set); + } + + // Specific initialization. + void post_initialize(BytecodeStream* stream, MethodData* mdo); + +#ifndef PRODUCT + void print_data_on(outputStream* st); +#endif +}; + +// ReceiverTypeData +// +// A ReceiverTypeData is used to access profiling information about a +// dynamic type check. It consists of a counter which counts the total times +// that the check is reached, and a series of (Klass*, count) pairs +// which are used to store a type profile for the receiver of the check. +class ReceiverTypeData : public CounterData { +protected: + enum { + receiver0_offset = counter_cell_count, + count0_offset, + receiver_type_row_cell_count = (count0_offset + 1) - receiver0_offset + }; + +public: + ReceiverTypeData(DataLayout* layout) : CounterData(layout) { + assert(layout->tag() == DataLayout::receiver_type_data_tag || + layout->tag() == DataLayout::virtual_call_data_tag, "wrong type"); + } + + virtual bool is_ReceiverTypeData() { return true; } + + static int static_cell_count() { + return counter_cell_count + (uint) TypeProfileWidth * receiver_type_row_cell_count; + } + + virtual int cell_count() { + return static_cell_count(); + } + + // Direct accessors + static uint row_limit() { + return TypeProfileWidth; + } + static int receiver_cell_index(uint row) { + return receiver0_offset + row * receiver_type_row_cell_count; + } + static int receiver_count_cell_index(uint row) { + return count0_offset + row * receiver_type_row_cell_count; + } + + Klass* receiver(uint row) { + assert(row < row_limit(), "oob"); + + Klass* recv = (Klass*)intptr_at(receiver_cell_index(row)); + assert(recv == NULL || recv->is_klass(), "wrong type"); + return recv; + } + + void set_receiver(uint row, Klass* k) { + assert((uint)row < row_limit(), "oob"); + set_intptr_at(receiver_cell_index(row), (uintptr_t)k); + } + + uint receiver_count(uint row) { + assert(row < row_limit(), "oob"); + return uint_at(receiver_count_cell_index(row)); + } + + void set_receiver_count(uint row, uint count) { + assert(row < row_limit(), "oob"); + set_uint_at(receiver_count_cell_index(row), count); + } + + void clear_row(uint row) { + assert(row < row_limit(), "oob"); + // Clear total count - indicator of polymorphic call site. + // The site may look like as monomorphic after that but + // it allow to have more accurate profiling information because + // there was execution phase change since klasses were unloaded. + // If the site is still polymorphic then MDO will be updated + // to reflect it. But it could be the case that the site becomes + // only bimorphic. Then keeping total count not 0 will be wrong. + // Even if we use monomorphic (when it is not) for compilation + // we will only have trap, deoptimization and recompile again + // with updated MDO after executing method in Interpreter. + // An additional receiver will be recorded in the cleaned row + // during next call execution. + // + // Note: our profiling logic works with empty rows in any slot. + // We do sorting a profiling info (ciCallProfile) for compilation. + // + set_count(0); + set_receiver(row, NULL); + set_receiver_count(row, 0); + } + + // Code generation support + static ByteSize receiver_offset(uint row) { + return cell_offset(receiver_cell_index(row)); + } + static ByteSize receiver_count_offset(uint row) { + return cell_offset(receiver_count_cell_index(row)); + } + static ByteSize receiver_type_data_size() { + return cell_offset(static_cell_count()); + } + + // GC support + virtual void clean_weak_klass_links(BoolObjectClosure* is_alive_closure); + +#ifndef PRODUCT + void print_receiver_data_on(outputStream* st); + void print_data_on(outputStream* st); +#endif +}; + +// VirtualCallData +// +// A VirtualCallData is used to access profiling information about a +// virtual call. For now, it has nothing more than a ReceiverTypeData. +class VirtualCallData : public ReceiverTypeData { +public: + VirtualCallData(DataLayout* layout) : ReceiverTypeData(layout) { + assert(layout->tag() == DataLayout::virtual_call_data_tag, "wrong type"); + } + + virtual bool is_VirtualCallData() { return true; } + + static int static_cell_count() { + // At this point we could add more profile state, e.g., for arguments. + // But for now it's the same size as the base record type. + return ReceiverTypeData::static_cell_count(); + } + + virtual int cell_count() { + return static_cell_count(); + } + + // Direct accessors + static ByteSize virtual_call_data_size() { + return cell_offset(static_cell_count()); + } + +#ifndef PRODUCT + void print_data_on(outputStream* st); +#endif +}; + +// RetData +// +// A RetData is used to access profiling information for a ret bytecode. +// It is composed of a count of the number of times that the ret has +// been executed, followed by a series of triples of the form +// (bci, count, di) which count the number of times that some bci was the +// target of the ret and cache a corresponding data displacement. +class RetData : public CounterData { +protected: + enum { + bci0_offset = counter_cell_count, + count0_offset, + displacement0_offset, + ret_row_cell_count = (displacement0_offset + 1) - bci0_offset + }; + + void set_bci(uint row, int bci) { + assert((uint)row < row_limit(), "oob"); + set_int_at(bci0_offset + row * ret_row_cell_count, bci); + } + void release_set_bci(uint row, int bci) { + assert((uint)row < row_limit(), "oob"); + // 'release' when setting the bci acts as a valid flag for other + // threads wrt bci_count and bci_displacement. + release_set_int_at(bci0_offset + row * ret_row_cell_count, bci); + } + void set_bci_count(uint row, uint count) { + assert((uint)row < row_limit(), "oob"); + set_uint_at(count0_offset + row * ret_row_cell_count, count); + } + void set_bci_displacement(uint row, int disp) { + set_int_at(displacement0_offset + row * ret_row_cell_count, disp); + } + +public: + RetData(DataLayout* layout) : CounterData(layout) { + assert(layout->tag() == DataLayout::ret_data_tag, "wrong type"); + } + + virtual bool is_RetData() { return true; } + + enum { + no_bci = -1 // value of bci when bci1/2 are not in use. + }; + + static int static_cell_count() { + return counter_cell_count + (uint) BciProfileWidth * ret_row_cell_count; + } + + virtual int cell_count() { + return static_cell_count(); + } + + static uint row_limit() { + return BciProfileWidth; + } + static int bci_cell_index(uint row) { + return bci0_offset + row * ret_row_cell_count; + } + static int bci_count_cell_index(uint row) { + return count0_offset + row * ret_row_cell_count; + } + static int bci_displacement_cell_index(uint row) { + return displacement0_offset + row * ret_row_cell_count; + } + + // Direct accessors + int bci(uint row) { + return int_at(bci_cell_index(row)); + } + uint bci_count(uint row) { + return uint_at(bci_count_cell_index(row)); + } + int bci_displacement(uint row) { + return int_at(bci_displacement_cell_index(row)); + } + + // Interpreter Runtime support + address fixup_ret(int return_bci, MethodData* mdo); + + // Code generation support + static ByteSize bci_offset(uint row) { + return cell_offset(bci_cell_index(row)); + } + static ByteSize bci_count_offset(uint row) { + return cell_offset(bci_count_cell_index(row)); + } + static ByteSize bci_displacement_offset(uint row) { + return cell_offset(bci_displacement_cell_index(row)); + } + + // Specific initialization. + void post_initialize(BytecodeStream* stream, MethodData* mdo); + +#ifndef PRODUCT + void print_data_on(outputStream* st); +#endif +}; + +// BranchData +// +// A BranchData is used to access profiling data for a two-way branch. +// It consists of taken and not_taken counts as well as a data displacement +// for the taken case. +class BranchData : public JumpData { +protected: + enum { + not_taken_off_set = jump_cell_count, + branch_cell_count + }; + + void set_displacement(int displacement) { + set_int_at(displacement_off_set, displacement); + } + +public: + BranchData(DataLayout* layout) : JumpData(layout) { + assert(layout->tag() == DataLayout::branch_data_tag, "wrong type"); + } + + virtual bool is_BranchData() { return true; } + + static int static_cell_count() { + return branch_cell_count; + } + + virtual int cell_count() { + return static_cell_count(); + } + + // Direct accessor + uint not_taken() { + return uint_at(not_taken_off_set); + } + + void set_not_taken(uint cnt) { + set_uint_at(not_taken_off_set, cnt); + } + + uint inc_not_taken() { + uint cnt = not_taken() + 1; + // Did we wrap? Will compiler screw us?? + if (cnt == 0) cnt--; + set_uint_at(not_taken_off_set, cnt); + return cnt; + } + + // Code generation support + static ByteSize not_taken_offset() { + return cell_offset(not_taken_off_set); + } + static ByteSize branch_data_size() { + return cell_offset(branch_cell_count); + } + + // Specific initialization. + void post_initialize(BytecodeStream* stream, MethodData* mdo); + +#ifndef PRODUCT + void print_data_on(outputStream* st); +#endif +}; + +// ArrayData +// +// A ArrayData is a base class for accessing profiling data which does +// not have a statically known size. It consists of an array length +// and an array start. +class ArrayData : public ProfileData { +protected: + friend class DataLayout; + + enum { + array_len_off_set, + array_start_off_set + }; + + uint array_uint_at(int index) { + int aindex = index + array_start_off_set; + return uint_at(aindex); + } + int array_int_at(int index) { + int aindex = index + array_start_off_set; + return int_at(aindex); + } + oop array_oop_at(int index) { + int aindex = index + array_start_off_set; + return oop_at(aindex); + } + void array_set_int_at(int index, int value) { + int aindex = index + array_start_off_set; + set_int_at(aindex, value); + } + + // Code generation support for subclasses. + static ByteSize array_element_offset(int index) { + return cell_offset(array_start_off_set + index); + } + +public: + ArrayData(DataLayout* layout) : ProfileData(layout) {} + + virtual bool is_ArrayData() { return true; } + + static int static_cell_count() { + return -1; + } + + int array_len() { + return int_at_unchecked(array_len_off_set); + } + + virtual int cell_count() { + return array_len() + 1; + } + + // Code generation support + static ByteSize array_len_offset() { + return cell_offset(array_len_off_set); + } + static ByteSize array_start_offset() { + return cell_offset(array_start_off_set); + } +}; + +// MultiBranchData +// +// A MultiBranchData is used to access profiling information for +// a multi-way branch (*switch bytecodes). It consists of a series +// of (count, displacement) pairs, which count the number of times each +// case was taken and specify the data displacment for each branch target. +class MultiBranchData : public ArrayData { +protected: + enum { + default_count_off_set, + default_disaplacement_off_set, + case_array_start + }; + enum { + relative_count_off_set, + relative_displacement_off_set, + per_case_cell_count + }; + + void set_default_displacement(int displacement) { + array_set_int_at(default_disaplacement_off_set, displacement); + } + void set_displacement_at(int index, int displacement) { + array_set_int_at(case_array_start + + index * per_case_cell_count + + relative_displacement_off_set, + displacement); + } + +public: + MultiBranchData(DataLayout* layout) : ArrayData(layout) { + assert(layout->tag() == DataLayout::multi_branch_data_tag, "wrong type"); + } + + virtual bool is_MultiBranchData() { return true; } + + static int compute_cell_count(BytecodeStream* stream); + + int number_of_cases() { + int alen = array_len() - 2; // get rid of default case here. + assert(alen % per_case_cell_count == 0, "must be even"); + return (alen / per_case_cell_count); + } + + uint default_count() { + return array_uint_at(default_count_off_set); + } + int default_displacement() { + return array_int_at(default_disaplacement_off_set); + } + + uint count_at(int index) { + return array_uint_at(case_array_start + + index * per_case_cell_count + + relative_count_off_set); + } + int displacement_at(int index) { + return array_int_at(case_array_start + + index * per_case_cell_count + + relative_displacement_off_set); + } + + // Code generation support + static ByteSize default_count_offset() { + return array_element_offset(default_count_off_set); + } + static ByteSize default_displacement_offset() { + return array_element_offset(default_disaplacement_off_set); + } + static ByteSize case_count_offset(int index) { + return case_array_offset() + + (per_case_size() * index) + + relative_count_offset(); + } + static ByteSize case_array_offset() { + return array_element_offset(case_array_start); + } + static ByteSize per_case_size() { + return in_ByteSize(per_case_cell_count) * cell_size; + } + static ByteSize relative_count_offset() { + return in_ByteSize(relative_count_off_set) * cell_size; + } + static ByteSize relative_displacement_offset() { + return in_ByteSize(relative_displacement_off_set) * cell_size; + } + + // Specific initialization. + void post_initialize(BytecodeStream* stream, MethodData* mdo); + +#ifndef PRODUCT + void print_data_on(outputStream* st); +#endif +}; + +class ArgInfoData : public ArrayData { + +public: + ArgInfoData(DataLayout* layout) : ArrayData(layout) { + assert(layout->tag() == DataLayout::arg_info_data_tag, "wrong type"); + } + + virtual bool is_ArgInfoData() { return true; } + + + int number_of_args() { + return array_len(); + } + + uint arg_modified(int arg) { + return array_uint_at(arg); + } + + void set_arg_modified(int arg, uint val) { + array_set_int_at(arg, val); + } + +#ifndef PRODUCT + void print_data_on(outputStream* st); +#endif +}; + +// MethodData* +// +// A MethodData* holds information which has been collected about +// a method. Its layout looks like this: +// +// ----------------------------- +// | header | +// | klass | +// ----------------------------- +// | method | +// | size of the MethodData* | +// ----------------------------- +// | Data entries... | +// | (variable size) | +// | | +// . . +// . . +// . . +// | | +// ----------------------------- +// +// The data entry area is a heterogeneous array of DataLayouts. Each +// DataLayout in the array corresponds to a specific bytecode in the +// method. The entries in the array are sorted by the corresponding +// bytecode. Access to the data is via resource-allocated ProfileData, +// which point to the underlying blocks of DataLayout structures. +// +// During interpretation, if profiling in enabled, the interpreter +// maintains a method data pointer (mdp), which points at the entry +// in the array corresponding to the current bci. In the course of +// intepretation, when a bytecode is encountered that has profile data +// associated with it, the entry pointed to by mdp is updated, then the +// mdp is adjusted to point to the next appropriate DataLayout. If mdp +// is NULL to begin with, the interpreter assumes that the current method +// is not (yet) being profiled. +// +// In MethodData* parlance, "dp" is a "data pointer", the actual address +// of a DataLayout element. A "di" is a "data index", the offset in bytes +// from the base of the data entry array. A "displacement" is the byte offset +// in certain ProfileData objects that indicate the amount the mdp must be +// adjusted in the event of a change in control flow. +// + +class MethodData : public Metadata { + friend class VMStructs; +private: + friend class ProfileData; + + // Back pointer to the Method* + Method* _method; + + // Size of this oop in bytes + int _size; + + // Cached hint for bci_to_dp and bci_to_data + int _hint_di; + + MethodData(methodHandle method, int size, TRAPS); +public: + static MethodData* allocate(ClassLoaderData* loader_data, methodHandle method, TRAPS); + MethodData() {}; // For ciMethodData + + bool is_methodData() const volatile { return true; } + + // Whole-method sticky bits and flags + enum { + _trap_hist_limit = 17, // decoupled from Deoptimization::Reason_LIMIT + _trap_hist_mask = max_jubyte, + _extra_data_count = 4 // extra DataLayout headers, for trap history + }; // Public flag values +private: + uint _nof_decompiles; // count of all nmethod removals + uint _nof_overflow_recompiles; // recompile count, excluding recomp. bits + uint _nof_overflow_traps; // trap count, excluding _trap_hist + union { + intptr_t _align; + u1 _array[_trap_hist_limit]; + } _trap_hist; + + // Support for interprocedural escape analysis, from Thomas Kotzmann. + intx _eflags; // flags on escape information + intx _arg_local; // bit set of non-escaping arguments + intx _arg_stack; // bit set of stack-allocatable arguments + intx _arg_returned; // bit set of returned arguments + + int _creation_mileage; // method mileage at MDO creation + + // How many invocations has this MDO seen? + // These counters are used to determine the exact age of MDO. + // We need those because in tiered a method can be concurrently + // executed at different levels. + InvocationCounter _invocation_counter; + // Same for backedges. + InvocationCounter _backedge_counter; + // Counter values at the time profiling started. + int _invocation_counter_start; + int _backedge_counter_start; + // Number of loops and blocks is computed when compiling the first + // time with C1. It is used to determine if method is trivial. + short _num_loops; + short _num_blocks; + // Highest compile level this method has ever seen. + u1 _highest_comp_level; + // Same for OSR level + u1 _highest_osr_comp_level; + // Does this method contain anything worth profiling? + bool _would_profile; + + // Size of _data array in bytes. (Excludes header and extra_data fields.) + int _data_size; + + // Beginning of the data entries + intptr_t _data[1]; + + // Helper for size computation + static int compute_data_size(BytecodeStream* stream); + static int bytecode_cell_count(Bytecodes::Code code); + enum { no_profile_data = -1, variable_cell_count = -2 }; + + // Helper for initialization + DataLayout* data_layout_at(int data_index) const { + assert(data_index % sizeof(intptr_t) == 0, "unaligned"); + return (DataLayout*) (((address)_data) + data_index); + } + + // Initialize an individual data segment. Returns the size of + // the segment in bytes. + int initialize_data(BytecodeStream* stream, int data_index); + + // Helper for data_at + DataLayout* limit_data_position() const { + return (DataLayout*)((address)data_base() + _data_size); + } + bool out_of_bounds(int data_index) const { + return data_index >= data_size(); + } + + // Give each of the data entries a chance to perform specific + // data initialization. + void post_initialize(BytecodeStream* stream); + + // hint accessors + int hint_di() const { return _hint_di; } + void set_hint_di(int di) { + assert(!out_of_bounds(di), "hint_di out of bounds"); + _hint_di = di; + } + ProfileData* data_before(int bci) { + // avoid SEGV on this edge case + if (data_size() == 0) + return NULL; + int hint = hint_di(); + if (data_layout_at(hint)->bci() <= bci) + return data_at(hint); + return first_data(); + } + + // What is the index of the first data entry? + int first_di() const { return 0; } + + // Find or create an extra ProfileData: + ProfileData* bci_to_extra_data(int bci, bool create_if_missing); + + // return the argument info cell + ArgInfoData *arg_info(); + +public: + static int header_size() { + return sizeof(MethodData)/wordSize; + } + + // Compute the size of a MethodData* before it is created. + static int compute_allocation_size_in_bytes(methodHandle method); + static int compute_allocation_size_in_words(methodHandle method); + static int compute_extra_data_count(int data_size, int empty_bc_count); + + // Determine if a given bytecode can have profile information. + static bool bytecode_has_profile(Bytecodes::Code code) { + return bytecode_cell_count(code) != no_profile_data; + } + + // Perform initialization of a new MethodData* + void initialize(methodHandle method); + + // My size + int size_in_bytes() const { return _size; } + int size() const { return align_object_size(align_size_up(_size, BytesPerWord)/BytesPerWord); } + + int creation_mileage() const { return _creation_mileage; } + void set_creation_mileage(int x) { _creation_mileage = x; } + + int invocation_count() { + if (invocation_counter()->carry()) { + return InvocationCounter::count_limit; + } + return invocation_counter()->count(); + } + int backedge_count() { + if (backedge_counter()->carry()) { + return InvocationCounter::count_limit; + } + return backedge_counter()->count(); + } + + int invocation_count_start() { + if (invocation_counter()->carry()) { + return 0; + } + return _invocation_counter_start; + } + + int backedge_count_start() { + if (backedge_counter()->carry()) { + return 0; + } + return _backedge_counter_start; + } + + int invocation_count_delta() { return invocation_count() - invocation_count_start(); } + int backedge_count_delta() { return backedge_count() - backedge_count_start(); } + + void reset_start_counters() { + _invocation_counter_start = invocation_count(); + _backedge_counter_start = backedge_count(); + } + + InvocationCounter* invocation_counter() { return &_invocation_counter; } + InvocationCounter* backedge_counter() { return &_backedge_counter; } + + void set_would_profile(bool p) { _would_profile = p; } + bool would_profile() const { return _would_profile; } + + int highest_comp_level() { return _highest_comp_level; } + void set_highest_comp_level(int level) { _highest_comp_level = level; } + int highest_osr_comp_level() { return _highest_osr_comp_level; } + void set_highest_osr_comp_level(int level) { _highest_osr_comp_level = level; } + + int num_loops() const { return _num_loops; } + void set_num_loops(int n) { _num_loops = n; } + int num_blocks() const { return _num_blocks; } + void set_num_blocks(int n) { _num_blocks = n; } + + bool is_mature() const; // consult mileage and ProfileMaturityPercentage + static int mileage_of(Method* m); + + // Support for interprocedural escape analysis, from Thomas Kotzmann. + enum EscapeFlag { + estimated = 1 << 0, + return_local = 1 << 1, + return_allocated = 1 << 2, + allocated_escapes = 1 << 3, + unknown_modified = 1 << 4 + }; + + intx eflags() { return _eflags; } + intx arg_local() { return _arg_local; } + intx arg_stack() { return _arg_stack; } + intx arg_returned() { return _arg_returned; } + uint arg_modified(int a) { ArgInfoData *aid = arg_info(); + assert(a >= 0 && a < aid->number_of_args(), "valid argument number"); + return aid->arg_modified(a); } + + void set_eflags(intx v) { _eflags = v; } + void set_arg_local(intx v) { _arg_local = v; } + void set_arg_stack(intx v) { _arg_stack = v; } + void set_arg_returned(intx v) { _arg_returned = v; } + void set_arg_modified(int a, uint v) { ArgInfoData *aid = arg_info(); + assert(a >= 0 && a < aid->number_of_args(), "valid argument number"); + + aid->set_arg_modified(a, v); } + + void clear_escape_info() { _eflags = _arg_local = _arg_stack = _arg_returned = 0; } + + // Location and size of data area + address data_base() const { + return (address) _data; + } + int data_size() const { + return _data_size; + } + + // Accessors + Method* method() const { return _method; } + + // Get the data at an arbitrary (sort of) data index. + ProfileData* data_at(int data_index) const; + + // Walk through the data in order. + ProfileData* first_data() const { return data_at(first_di()); } + ProfileData* next_data(ProfileData* current) const; + bool is_valid(ProfileData* current) const { return current != NULL; } + + // Convert a dp (data pointer) to a di (data index). + int dp_to_di(address dp) const { + return dp - ((address)_data); + } + + address di_to_dp(int di) { + return (address)data_layout_at(di); + } + + // bci to di/dp conversion. + address bci_to_dp(int bci); + int bci_to_di(int bci) { + return dp_to_di(bci_to_dp(bci)); + } + + // Get the data at an arbitrary bci, or NULL if there is none. + ProfileData* bci_to_data(int bci); + + // Same, but try to create an extra_data record if one is needed: + ProfileData* allocate_bci_to_data(int bci) { + ProfileData* data = bci_to_data(bci); + return (data != NULL) ? data : bci_to_extra_data(bci, true); + } + + // Add a handful of extra data records, for trap tracking. + DataLayout* extra_data_base() const { return limit_data_position(); } + DataLayout* extra_data_limit() const { return (DataLayout*)((address)this + size_in_bytes()); } + int extra_data_size() const { return (address)extra_data_limit() + - (address)extra_data_base(); } + static DataLayout* next_extra(DataLayout* dp) { return (DataLayout*)((address)dp + in_bytes(DataLayout::cell_offset(0))); } + + // Return (uint)-1 for overflow. + uint trap_count(int reason) const { + assert((uint)reason < _trap_hist_limit, "oob"); + return (int)((_trap_hist._array[reason]+1) & _trap_hist_mask) - 1; + } + // For loops: + static uint trap_reason_limit() { return _trap_hist_limit; } + static uint trap_count_limit() { return _trap_hist_mask; } + uint inc_trap_count(int reason) { + // Count another trap, anywhere in this method. + assert(reason >= 0, "must be single trap"); + if ((uint)reason < _trap_hist_limit) { + uint cnt1 = 1 + _trap_hist._array[reason]; + if ((cnt1 & _trap_hist_mask) != 0) { // if no counter overflow... + _trap_hist._array[reason] = cnt1; + return cnt1; + } else { + return _trap_hist_mask + (++_nof_overflow_traps); + } + } else { + // Could not represent the count in the histogram. + return (++_nof_overflow_traps); + } + } + + uint overflow_trap_count() const { + return _nof_overflow_traps; + } + uint overflow_recompile_count() const { + return _nof_overflow_recompiles; + } + void inc_overflow_recompile_count() { + _nof_overflow_recompiles += 1; + } + uint decompile_count() const { + return _nof_decompiles; + } + void inc_decompile_count() { + _nof_decompiles += 1; + if (decompile_count() > (uint)PerMethodRecompilationCutoff) { + method()->set_not_compilable(CompLevel_full_optimization); + } + } + + // Support for code generation + static ByteSize data_offset() { + return byte_offset_of(MethodData, _data[0]); + } + + static ByteSize invocation_counter_offset() { + return byte_offset_of(MethodData, _invocation_counter); + } + static ByteSize backedge_counter_offset() { + return byte_offset_of(MethodData, _backedge_counter); + } + + // Deallocation support - no pointer fields to deallocate + void deallocate_contents(ClassLoaderData* loader_data) {} + + // GC support + void set_size(int object_size_in_bytes) { _size = object_size_in_bytes; } + + // Printing +#ifndef PRODUCT + void print_on (outputStream* st) const; +#endif + void print_value_on(outputStream* st) const; + +#ifndef PRODUCT + // printing support for method data + void print_data_on(outputStream* st) const; +#endif + + const char* internal_name() const { return "{method data}"; } + + // verification + void verify_on(outputStream* st); + void verify_data_on(outputStream* st); +}; + +#endif // SHARE_VM_OOPS_METHODDATAOOP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/methodDataKlass.cpp --- a/src/share/vm/oops/methodDataKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,226 +0,0 @@ -/* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "memory/gcLocker.hpp" -#include "memory/resourceArea.hpp" -#include "memory/universe.inline.hpp" -#include "oops/klassOop.hpp" -#include "oops/methodDataKlass.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" -#include "runtime/handles.inline.hpp" -#ifndef SERIALGC -#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" -#include "oops/oop.pcgc.inline.hpp" -#endif - -klassOop methodDataKlass::create_klass(TRAPS) { - methodDataKlass o; - KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); - KlassHandle k = base_create_klass(h_this_klass, header_size(), - o.vtbl_value(), CHECK_NULL); - // Make sure size calculation is right - assert(k()->size() == align_object_size(header_size()), - "wrong size for object"); - return k(); -} - - -int methodDataKlass::oop_size(oop obj) const { - assert(obj->is_methodData(), "must be method data oop"); - return methodDataOop(obj)->object_size(); -} - - -bool methodDataKlass::oop_is_parsable(oop obj) const { - assert(obj->is_methodData(), "must be method data oop"); - return methodDataOop(obj)->object_is_parsable(); -} - - -methodDataOop methodDataKlass::allocate(methodHandle method, TRAPS) { - int size = methodDataOopDesc::compute_allocation_size_in_words(method); - KlassHandle h_k(THREAD, as_klassOop()); - methodDataOop mdo = - (methodDataOop)CollectedHeap::permanent_obj_allocate(h_k, size, CHECK_NULL); - assert(!mdo->is_parsable(), "not expecting parsability yet."); - No_Safepoint_Verifier no_safepoint; // init function atomic wrt GC - mdo->initialize(method); - - assert(mdo->is_parsable(), "should be parsable here."); - assert(size == mdo->object_size(), "wrong size for methodDataOop"); - return mdo; -} - - -void methodDataKlass::oop_follow_contents(oop obj) { - assert (obj->is_methodData(), "object must be method data"); - methodDataOop m = methodDataOop(obj); - - obj->follow_header(); - MarkSweep::mark_and_push(m->adr_method()); - ResourceMark rm; - for (ProfileData* data = m->first_data(); - m->is_valid(data); - data = m->next_data(data)) { - data->follow_contents(); - } -} - -#ifndef SERIALGC -void methodDataKlass::oop_follow_contents(ParCompactionManager* cm, - oop obj) { - assert (obj->is_methodData(), "object must be method data"); - methodDataOop m = methodDataOop(obj); - - obj->follow_header(cm); - PSParallelCompact::mark_and_push(cm, m->adr_method()); - ResourceMark rm; - for (ProfileData* data = m->first_data(); - m->is_valid(data); - data = m->next_data(data)) { - data->follow_contents(cm); - } -} -#endif // SERIALGC - - -int methodDataKlass::oop_oop_iterate(oop obj, OopClosure* blk) { - assert (obj->is_methodData(), "object must be method data"); - methodDataOop m = methodDataOop(obj); - // Get size before changing pointers - // Don't call size() or oop_size() since that is a virtual call. - int size = m->object_size(); - - obj->oop_iterate_header(blk); - blk->do_oop(m->adr_method()); - ResourceMark rm; - for (ProfileData* data = m->first_data(); - m->is_valid(data); - data = m->next_data(data)) { - data->oop_iterate(blk); - } - return size; -} - -int methodDataKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { - assert (obj->is_methodData(), "object must be method data"); - methodDataOop m = methodDataOop(obj); - // Get size before changing pointers - // Don't call size() or oop_size() since that is a virtual call. - int size = m->object_size(); - - obj->oop_iterate_header(blk, mr); - oop* adr = m->adr_method(); - if (mr.contains(adr)) { - blk->do_oop(m->adr_method()); - } - ResourceMark rm; - for (ProfileData* data = m->first_data(); - m->is_valid(data); - data = m->next_data(data)) { - data->oop_iterate_m(blk, mr); - } - return size; -} - -int methodDataKlass::oop_adjust_pointers(oop obj) { - assert(obj->is_methodData(), "should be method data"); - methodDataOop m = methodDataOop(obj); - // Get size before changing pointers - // Don't call size() or oop_size() since that is a virtual call. - int size = m->object_size(); - - obj->adjust_header(); - MarkSweep::adjust_pointer(m->adr_method()); - ResourceMark rm; - ProfileData* data; - for (data = m->first_data(); m->is_valid(data); data = m->next_data(data)) { - data->adjust_pointers(); - } - return size; -} - - -#ifndef SERIALGC -void methodDataKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { - assert (obj->is_methodData(), "object must be method data"); - methodDataOop m = methodDataOop(obj); - // This should never point into the young gen. - assert(!PSScavenge::should_scavenge(m->adr_method()), "Sanity"); -} - -int methodDataKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { - assert(obj->is_methodData(), "should be method data"); - methodDataOop m = methodDataOop(obj); - - PSParallelCompact::adjust_pointer(m->adr_method()); - - ResourceMark rm; - ProfileData* data; - for (data = m->first_data(); m->is_valid(data); data = m->next_data(data)) { - data->update_pointers(); - } - return m->object_size(); -} -#endif // SERIALGC - -#ifndef PRODUCT - -// Printing -void methodDataKlass::oop_print_on(oop obj, outputStream* st) { - assert(obj->is_methodData(), "should be method data"); - methodDataOop m = methodDataOop(obj); - st->print("method data for "); - m->method()->print_value_on(st); - st->cr(); - m->print_data_on(st); -} - -#endif //PRODUCT - -void methodDataKlass::oop_print_value_on(oop obj, outputStream* st) { - assert(obj->is_methodData(), "should be method data"); - methodDataOop m = methodDataOop(obj); - st->print("method data for "); - m->method()->print_value_on(st); -} - -const char* methodDataKlass::internal_name() const { - return "{method data}"; -} - - -// Verification -void methodDataKlass::oop_verify_on(oop obj, outputStream* st) { - Klass::oop_verify_on(obj, st); - guarantee(obj->is_methodData(), "object must be method data"); - methodDataOop m = methodDataOop(obj); - guarantee(m->is_perm(), "should be in permspace"); - m->verify_data_on(st); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/methodDataKlass.hpp --- a/src/share/vm/oops/methodDataKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_METHODDATAKLASS_HPP -#define SHARE_VM_OOPS_METHODDATAKLASS_HPP - -#include "oops/klass.hpp" - -// a methodDataKlass is the klass of a methodDataOop - -class methodDataKlass : public Klass { - friend class VMStructs; - private: - juint _alloc_size; // allocation profiling support - public: - // Testing - bool oop_is_methodData() const { return true; } - - // Allocation - DEFINE_ALLOCATE_PERMANENT(methodDataKlass); - methodDataOop allocate(methodHandle method, TRAPS); - static klassOop create_klass(TRAPS); - - // Sizing - int oop_size(oop obj) const; - int klass_oop_size() const { return object_size(); } - - // Casting from klassOop - static methodDataKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_methodData(), "cast to methodDataKlass"); - return (methodDataKlass*) k->klass_part(); - } - - // Sizing - static int header_size() { - return oopDesc::header_size() + sizeof(methodDataKlass)/wordSize; - } - int object_size() const { - return align_object_size(header_size()); - } - - // Garbage collection - void oop_follow_contents(oop obj); - int oop_adjust_pointers(oop obj); - bool oop_is_parsable(oop obj) const; - - // Parallel Scavenge and Parallel Old - PARALLEL_GC_DECLS - - // Allocation profiling support - juint alloc_size() const { return _alloc_size; } - void set_alloc_size(juint n) { _alloc_size = n; } - - // Iterators - int oop_oop_iterate(oop obj, OopClosure* blk); - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr); - - public: - // Printing - void oop_print_value_on(oop obj, outputStream* st); -#ifndef PRODUCT - void oop_print_on (oop obj, outputStream* st); -#endif //PRODUCT - - // Verify operations - const char* internal_name() const; - void oop_verify_on(oop obj, outputStream* st); -}; - -#endif // SHARE_VM_OOPS_METHODDATAKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/methodDataOop.cpp --- a/src/share/vm/oops/methodDataOop.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,944 +0,0 @@ -/* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/systemDictionary.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "interpreter/bytecode.hpp" -#include "interpreter/bytecodeStream.hpp" -#include "interpreter/linkResolver.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/oop.inline.hpp" -#include "runtime/compilationPolicy.hpp" -#include "runtime/deoptimization.hpp" -#include "runtime/handles.inline.hpp" - -// ================================================================== -// DataLayout -// -// Overlay for generic profiling data. - -// Some types of data layouts need a length field. -bool DataLayout::needs_array_len(u1 tag) { - return (tag == multi_branch_data_tag) || (tag == arg_info_data_tag); -} - -// Perform generic initialization of the data. More specific -// initialization occurs in overrides of ProfileData::post_initialize. -void DataLayout::initialize(u1 tag, u2 bci, int cell_count) { - _header._bits = (intptr_t)0; - _header._struct._tag = tag; - _header._struct._bci = bci; - for (int i = 0; i < cell_count; i++) { - set_cell_at(i, (intptr_t)0); - } - if (needs_array_len(tag)) { - set_cell_at(ArrayData::array_len_off_set, cell_count - 1); // -1 for header. - } -} - -void DataLayout::follow_weak_refs(BoolObjectClosure* cl) { - ResourceMark m; - data_in()->follow_weak_refs(cl); -} - - -// ================================================================== -// ProfileData -// -// A ProfileData object is created to refer to a section of profiling -// data in a structured way. - -// Constructor for invalid ProfileData. -ProfileData::ProfileData() { - _data = NULL; -} - -#ifndef PRODUCT -void ProfileData::print_shared(outputStream* st, const char* name) { - st->print("bci: %d", bci()); - st->fill_to(tab_width_one); - st->print("%s", name); - tab(st); - int trap = trap_state(); - if (trap != 0) { - char buf[100]; - st->print("trap(%s) ", Deoptimization::format_trap_state(buf, sizeof(buf), trap)); - } - int flags = data()->flags(); - if (flags != 0) - st->print("flags(%d) ", flags); -} - -void ProfileData::tab(outputStream* st) { - st->fill_to(tab_width_two); -} -#endif // !PRODUCT - -// ================================================================== -// BitData -// -// A BitData corresponds to a one-bit flag. This is used to indicate -// whether a checkcast bytecode has seen a null value. - - -#ifndef PRODUCT -void BitData::print_data_on(outputStream* st) { - print_shared(st, "BitData"); -} -#endif // !PRODUCT - -// ================================================================== -// CounterData -// -// A CounterData corresponds to a simple counter. - -#ifndef PRODUCT -void CounterData::print_data_on(outputStream* st) { - print_shared(st, "CounterData"); - st->print_cr("count(%u)", count()); -} -#endif // !PRODUCT - -// ================================================================== -// JumpData -// -// A JumpData is used to access profiling information for a direct -// branch. It is a counter, used for counting the number of branches, -// plus a data displacement, used for realigning the data pointer to -// the corresponding target bci. - -void JumpData::post_initialize(BytecodeStream* stream, methodDataOop mdo) { - assert(stream->bci() == bci(), "wrong pos"); - int target; - Bytecodes::Code c = stream->code(); - if (c == Bytecodes::_goto_w || c == Bytecodes::_jsr_w) { - target = stream->dest_w(); - } else { - target = stream->dest(); - } - int my_di = mdo->dp_to_di(dp()); - int target_di = mdo->bci_to_di(target); - int offset = target_di - my_di; - set_displacement(offset); -} - -#ifndef PRODUCT -void JumpData::print_data_on(outputStream* st) { - print_shared(st, "JumpData"); - st->print_cr("taken(%u) displacement(%d)", taken(), displacement()); -} -#endif // !PRODUCT - -// ================================================================== -// ReceiverTypeData -// -// A ReceiverTypeData is used to access profiling information about a -// dynamic type check. It consists of a counter which counts the total times -// that the check is reached, and a series of (klassOop, count) pairs -// which are used to store a type profile for the receiver of the check. - -void ReceiverTypeData::follow_contents() { - // This is a set of weak references that need - // to be followed at the end of the strong marking - // phase. Memoize this object so it can be visited - // in the weak roots processing phase. - MarkSweep::revisit_mdo(data()); -} - -#ifndef SERIALGC -void ReceiverTypeData::follow_contents(ParCompactionManager* cm) { - // This is a set of weak references that need - // to be followed at the end of the strong marking - // phase. Memoize this object so it can be visited - // in the weak roots processing phase. - PSParallelCompact::revisit_mdo(cm, data()); -} -#endif // SERIALGC - -void ReceiverTypeData::oop_iterate(OopClosure* blk) { - if (blk->should_remember_mdo()) { - // This is a set of weak references that need - // to be followed at the end of the strong marking - // phase. Memoize this object so it can be visited - // in the weak roots processing phase. - blk->remember_mdo(data()); - } else { // normal scan - for (uint row = 0; row < row_limit(); row++) { - if (receiver(row) != NULL) { - oop* adr = adr_receiver(row); - blk->do_oop(adr); - } - } - } -} - -void ReceiverTypeData::oop_iterate_m(OopClosure* blk, MemRegion mr) { - // Currently, this interface is called only during card-scanning for - // a young gen gc, in which case this object cannot contribute anything, - // since it does not contain any references that cross out of - // the perm gen. However, for future more general use we allow - // the possibility of calling for instance from more general - // iterators (for example, a future regionalized perm gen for G1, - // or the possibility of moving some references out of perm in - // the case of other collectors). In that case, you will need - // to relax or remove some of the assertions below. -#ifdef ASSERT - // Verify that none of the embedded oop references cross out of - // this generation. - for (uint row = 0; row < row_limit(); row++) { - if (receiver(row) != NULL) { - oop* adr = adr_receiver(row); - CollectedHeap* h = Universe::heap(); - assert(h->is_permanent(adr) && h->is_permanent_or_null(*adr), "Not intra-perm"); - } - } -#endif // ASSERT - assert(!blk->should_remember_mdo(), "Not expected to remember MDO"); - return; // Nothing to do, see comment above -#if 0 - if (blk->should_remember_mdo()) { - // This is a set of weak references that need - // to be followed at the end of the strong marking - // phase. Memoize this object so it can be visited - // in the weak roots processing phase. - blk->remember_mdo(data()); - } else { // normal scan - for (uint row = 0; row < row_limit(); row++) { - if (receiver(row) != NULL) { - oop* adr = adr_receiver(row); - if (mr.contains(adr)) { - blk->do_oop(adr); - } else if ((HeapWord*)adr >= mr.end()) { - // Test that the current cursor and the two ends of the range - // that we may have skipped iterating over are monotonically ordered; - // this is just a paranoid assertion, just in case represetations - // should change in the future rendering the short-circuit return - // here invalid. - assert((row+1 >= row_limit() || adr_receiver(row+1) > adr) && - (row+2 >= row_limit() || adr_receiver(row_limit()-1) > adr_receiver(row+1)), "Reducing?"); - break; // remaining should be outside this mr too - } - } - } - } -#endif -} - -void ReceiverTypeData::adjust_pointers() { - for (uint row = 0; row < row_limit(); row++) { - if (receiver(row) != NULL) { - MarkSweep::adjust_pointer(adr_receiver(row)); - } - } -} - -void ReceiverTypeData::follow_weak_refs(BoolObjectClosure* is_alive_cl) { - for (uint row = 0; row < row_limit(); row++) { - klassOop p = receiver(row); - if (p != NULL && !is_alive_cl->do_object_b(p)) { - clear_row(row); - } - } -} - -#ifndef SERIALGC -void ReceiverTypeData::update_pointers() { - for (uint row = 0; row < row_limit(); row++) { - if (receiver_unchecked(row) != NULL) { - PSParallelCompact::adjust_pointer(adr_receiver(row)); - } - } -} -#endif // SERIALGC - -#ifndef PRODUCT -void ReceiverTypeData::print_receiver_data_on(outputStream* st) { - uint row; - int entries = 0; - for (row = 0; row < row_limit(); row++) { - if (receiver(row) != NULL) entries++; - } - st->print_cr("count(%u) entries(%u)", count(), entries); - int total = count(); - for (row = 0; row < row_limit(); row++) { - if (receiver(row) != NULL) { - total += receiver_count(row); - } - } - for (row = 0; row < row_limit(); row++) { - if (receiver(row) != NULL) { - tab(st); - receiver(row)->print_value_on(st); - st->print_cr("(%u %4.2f)", receiver_count(row), (float) receiver_count(row) / (float) total); - } - } -} -void ReceiverTypeData::print_data_on(outputStream* st) { - print_shared(st, "ReceiverTypeData"); - print_receiver_data_on(st); -} -void VirtualCallData::print_data_on(outputStream* st) { - print_shared(st, "VirtualCallData"); - print_receiver_data_on(st); -} -#endif // !PRODUCT - -// ================================================================== -// RetData -// -// A RetData is used to access profiling information for a ret bytecode. -// It is composed of a count of the number of times that the ret has -// been executed, followed by a series of triples of the form -// (bci, count, di) which count the number of times that some bci was the -// target of the ret and cache a corresponding displacement. - -void RetData::post_initialize(BytecodeStream* stream, methodDataOop mdo) { - for (uint row = 0; row < row_limit(); row++) { - set_bci_displacement(row, -1); - set_bci(row, no_bci); - } - // release so other threads see a consistent state. bci is used as - // a valid flag for bci_displacement. - OrderAccess::release(); -} - -// This routine needs to atomically update the RetData structure, so the -// caller needs to hold the RetData_lock before it gets here. Since taking -// the lock can block (and allow GC) and since RetData is a ProfileData is a -// wrapper around a derived oop, taking the lock in _this_ method will -// basically cause the 'this' pointer's _data field to contain junk after the -// lock. We require the caller to take the lock before making the ProfileData -// structure. Currently the only caller is InterpreterRuntime::update_mdp_for_ret -address RetData::fixup_ret(int return_bci, methodDataHandle h_mdo) { - // First find the mdp which corresponds to the return bci. - address mdp = h_mdo->bci_to_dp(return_bci); - - // Now check to see if any of the cache slots are open. - for (uint row = 0; row < row_limit(); row++) { - if (bci(row) == no_bci) { - set_bci_displacement(row, mdp - dp()); - set_bci_count(row, DataLayout::counter_increment); - // Barrier to ensure displacement is written before the bci; allows - // the interpreter to read displacement without fear of race condition. - release_set_bci(row, return_bci); - break; - } - } - return mdp; -} - - -#ifndef PRODUCT -void RetData::print_data_on(outputStream* st) { - print_shared(st, "RetData"); - uint row; - int entries = 0; - for (row = 0; row < row_limit(); row++) { - if (bci(row) != no_bci) entries++; - } - st->print_cr("count(%u) entries(%u)", count(), entries); - for (row = 0; row < row_limit(); row++) { - if (bci(row) != no_bci) { - tab(st); - st->print_cr("bci(%d: count(%u) displacement(%d))", - bci(row), bci_count(row), bci_displacement(row)); - } - } -} -#endif // !PRODUCT - -// ================================================================== -// BranchData -// -// A BranchData is used to access profiling data for a two-way branch. -// It consists of taken and not_taken counts as well as a data displacement -// for the taken case. - -void BranchData::post_initialize(BytecodeStream* stream, methodDataOop mdo) { - assert(stream->bci() == bci(), "wrong pos"); - int target = stream->dest(); - int my_di = mdo->dp_to_di(dp()); - int target_di = mdo->bci_to_di(target); - int offset = target_di - my_di; - set_displacement(offset); -} - -#ifndef PRODUCT -void BranchData::print_data_on(outputStream* st) { - print_shared(st, "BranchData"); - st->print_cr("taken(%u) displacement(%d)", - taken(), displacement()); - tab(st); - st->print_cr("not taken(%u)", not_taken()); -} -#endif - -// ================================================================== -// MultiBranchData -// -// A MultiBranchData is used to access profiling information for -// a multi-way branch (*switch bytecodes). It consists of a series -// of (count, displacement) pairs, which count the number of times each -// case was taken and specify the data displacment for each branch target. - -int MultiBranchData::compute_cell_count(BytecodeStream* stream) { - int cell_count = 0; - if (stream->code() == Bytecodes::_tableswitch) { - Bytecode_tableswitch sw(stream->method()(), stream->bcp()); - cell_count = 1 + per_case_cell_count * (1 + sw.length()); // 1 for default - } else { - Bytecode_lookupswitch sw(stream->method()(), stream->bcp()); - cell_count = 1 + per_case_cell_count * (sw.number_of_pairs() + 1); // 1 for default - } - return cell_count; -} - -void MultiBranchData::post_initialize(BytecodeStream* stream, - methodDataOop mdo) { - assert(stream->bci() == bci(), "wrong pos"); - int target; - int my_di; - int target_di; - int offset; - if (stream->code() == Bytecodes::_tableswitch) { - Bytecode_tableswitch sw(stream->method()(), stream->bcp()); - int len = sw.length(); - assert(array_len() == per_case_cell_count * (len + 1), "wrong len"); - for (int count = 0; count < len; count++) { - target = sw.dest_offset_at(count) + bci(); - my_di = mdo->dp_to_di(dp()); - target_di = mdo->bci_to_di(target); - offset = target_di - my_di; - set_displacement_at(count, offset); - } - target = sw.default_offset() + bci(); - my_di = mdo->dp_to_di(dp()); - target_di = mdo->bci_to_di(target); - offset = target_di - my_di; - set_default_displacement(offset); - - } else { - Bytecode_lookupswitch sw(stream->method()(), stream->bcp()); - int npairs = sw.number_of_pairs(); - assert(array_len() == per_case_cell_count * (npairs + 1), "wrong len"); - for (int count = 0; count < npairs; count++) { - LookupswitchPair pair = sw.pair_at(count); - target = pair.offset() + bci(); - my_di = mdo->dp_to_di(dp()); - target_di = mdo->bci_to_di(target); - offset = target_di - my_di; - set_displacement_at(count, offset); - } - target = sw.default_offset() + bci(); - my_di = mdo->dp_to_di(dp()); - target_di = mdo->bci_to_di(target); - offset = target_di - my_di; - set_default_displacement(offset); - } -} - -#ifndef PRODUCT -void MultiBranchData::print_data_on(outputStream* st) { - print_shared(st, "MultiBranchData"); - st->print_cr("default_count(%u) displacement(%d)", - default_count(), default_displacement()); - int cases = number_of_cases(); - for (int i = 0; i < cases; i++) { - tab(st); - st->print_cr("count(%u) displacement(%d)", - count_at(i), displacement_at(i)); - } -} -#endif - -#ifndef PRODUCT -void ArgInfoData::print_data_on(outputStream* st) { - print_shared(st, "ArgInfoData"); - int nargs = number_of_args(); - for (int i = 0; i < nargs; i++) { - st->print(" 0x%x", arg_modified(i)); - } - st->cr(); -} - -#endif -// ================================================================== -// methodDataOop -// -// A methodDataOop holds information which has been collected about -// a method. - -int methodDataOopDesc::bytecode_cell_count(Bytecodes::Code code) { - switch (code) { - case Bytecodes::_checkcast: - case Bytecodes::_instanceof: - case Bytecodes::_aastore: - if (TypeProfileCasts) { - return ReceiverTypeData::static_cell_count(); - } else { - return BitData::static_cell_count(); - } - case Bytecodes::_invokespecial: - case Bytecodes::_invokestatic: - return CounterData::static_cell_count(); - case Bytecodes::_goto: - case Bytecodes::_goto_w: - case Bytecodes::_jsr: - case Bytecodes::_jsr_w: - return JumpData::static_cell_count(); - case Bytecodes::_invokevirtual: - case Bytecodes::_invokeinterface: - return VirtualCallData::static_cell_count(); - case Bytecodes::_invokedynamic: - return CounterData::static_cell_count(); - case Bytecodes::_ret: - return RetData::static_cell_count(); - case Bytecodes::_ifeq: - case Bytecodes::_ifne: - case Bytecodes::_iflt: - case Bytecodes::_ifge: - case Bytecodes::_ifgt: - case Bytecodes::_ifle: - case Bytecodes::_if_icmpeq: - case Bytecodes::_if_icmpne: - case Bytecodes::_if_icmplt: - case Bytecodes::_if_icmpge: - case Bytecodes::_if_icmpgt: - case Bytecodes::_if_icmple: - case Bytecodes::_if_acmpeq: - case Bytecodes::_if_acmpne: - case Bytecodes::_ifnull: - case Bytecodes::_ifnonnull: - return BranchData::static_cell_count(); - case Bytecodes::_lookupswitch: - case Bytecodes::_tableswitch: - return variable_cell_count; - } - return no_profile_data; -} - -// Compute the size of the profiling information corresponding to -// the current bytecode. -int methodDataOopDesc::compute_data_size(BytecodeStream* stream) { - int cell_count = bytecode_cell_count(stream->code()); - if (cell_count == no_profile_data) { - return 0; - } - if (cell_count == variable_cell_count) { - cell_count = MultiBranchData::compute_cell_count(stream); - } - // Note: cell_count might be zero, meaning that there is just - // a DataLayout header, with no extra cells. - assert(cell_count >= 0, "sanity"); - return DataLayout::compute_size_in_bytes(cell_count); -} - -int methodDataOopDesc::compute_extra_data_count(int data_size, int empty_bc_count) { - if (ProfileTraps) { - // Assume that up to 3% of BCIs with no MDP will need to allocate one. - int extra_data_count = (uint)(empty_bc_count * 3) / 128 + 1; - // If the method is large, let the extra BCIs grow numerous (to ~1%). - int one_percent_of_data - = (uint)data_size / (DataLayout::header_size_in_bytes()*128); - if (extra_data_count < one_percent_of_data) - extra_data_count = one_percent_of_data; - if (extra_data_count > empty_bc_count) - extra_data_count = empty_bc_count; // no need for more - return extra_data_count; - } else { - return 0; - } -} - -// Compute the size of the methodDataOop necessary to store -// profiling information about a given method. Size is in bytes. -int methodDataOopDesc::compute_allocation_size_in_bytes(methodHandle method) { - int data_size = 0; - BytecodeStream stream(method); - Bytecodes::Code c; - int empty_bc_count = 0; // number of bytecodes lacking data - while ((c = stream.next()) >= 0) { - int size_in_bytes = compute_data_size(&stream); - data_size += size_in_bytes; - if (size_in_bytes == 0) empty_bc_count += 1; - } - int object_size = in_bytes(data_offset()) + data_size; - - // Add some extra DataLayout cells (at least one) to track stray traps. - int extra_data_count = compute_extra_data_count(data_size, empty_bc_count); - object_size += extra_data_count * DataLayout::compute_size_in_bytes(0); - - // Add a cell to record information about modified arguments. - int arg_size = method->size_of_parameters(); - object_size += DataLayout::compute_size_in_bytes(arg_size+1); - return object_size; -} - -// Compute the size of the methodDataOop necessary to store -// profiling information about a given method. Size is in words -int methodDataOopDesc::compute_allocation_size_in_words(methodHandle method) { - int byte_size = compute_allocation_size_in_bytes(method); - int word_size = align_size_up(byte_size, BytesPerWord) / BytesPerWord; - return align_object_size(word_size); -} - -// Initialize an individual data segment. Returns the size of -// the segment in bytes. -int methodDataOopDesc::initialize_data(BytecodeStream* stream, - int data_index) { - int cell_count = -1; - int tag = DataLayout::no_tag; - DataLayout* data_layout = data_layout_at(data_index); - Bytecodes::Code c = stream->code(); - switch (c) { - case Bytecodes::_checkcast: - case Bytecodes::_instanceof: - case Bytecodes::_aastore: - if (TypeProfileCasts) { - cell_count = ReceiverTypeData::static_cell_count(); - tag = DataLayout::receiver_type_data_tag; - } else { - cell_count = BitData::static_cell_count(); - tag = DataLayout::bit_data_tag; - } - break; - case Bytecodes::_invokespecial: - case Bytecodes::_invokestatic: - cell_count = CounterData::static_cell_count(); - tag = DataLayout::counter_data_tag; - break; - case Bytecodes::_goto: - case Bytecodes::_goto_w: - case Bytecodes::_jsr: - case Bytecodes::_jsr_w: - cell_count = JumpData::static_cell_count(); - tag = DataLayout::jump_data_tag; - break; - case Bytecodes::_invokevirtual: - case Bytecodes::_invokeinterface: - cell_count = VirtualCallData::static_cell_count(); - tag = DataLayout::virtual_call_data_tag; - break; - case Bytecodes::_invokedynamic: - // %%% should make a type profile for any invokedynamic that takes a ref argument - cell_count = CounterData::static_cell_count(); - tag = DataLayout::counter_data_tag; - break; - case Bytecodes::_ret: - cell_count = RetData::static_cell_count(); - tag = DataLayout::ret_data_tag; - break; - case Bytecodes::_ifeq: - case Bytecodes::_ifne: - case Bytecodes::_iflt: - case Bytecodes::_ifge: - case Bytecodes::_ifgt: - case Bytecodes::_ifle: - case Bytecodes::_if_icmpeq: - case Bytecodes::_if_icmpne: - case Bytecodes::_if_icmplt: - case Bytecodes::_if_icmpge: - case Bytecodes::_if_icmpgt: - case Bytecodes::_if_icmple: - case Bytecodes::_if_acmpeq: - case Bytecodes::_if_acmpne: - case Bytecodes::_ifnull: - case Bytecodes::_ifnonnull: - cell_count = BranchData::static_cell_count(); - tag = DataLayout::branch_data_tag; - break; - case Bytecodes::_lookupswitch: - case Bytecodes::_tableswitch: - cell_count = MultiBranchData::compute_cell_count(stream); - tag = DataLayout::multi_branch_data_tag; - break; - } - assert(tag == DataLayout::multi_branch_data_tag || - cell_count == bytecode_cell_count(c), "cell counts must agree"); - if (cell_count >= 0) { - assert(tag != DataLayout::no_tag, "bad tag"); - assert(bytecode_has_profile(c), "agree w/ BHP"); - data_layout->initialize(tag, stream->bci(), cell_count); - return DataLayout::compute_size_in_bytes(cell_count); - } else { - assert(!bytecode_has_profile(c), "agree w/ !BHP"); - return 0; - } -} - -// Get the data at an arbitrary (sort of) data index. -ProfileData* methodDataOopDesc::data_at(int data_index) { - if (out_of_bounds(data_index)) { - return NULL; - } - DataLayout* data_layout = data_layout_at(data_index); - return data_layout->data_in(); -} - -ProfileData* DataLayout::data_in() { - switch (tag()) { - case DataLayout::no_tag: - default: - ShouldNotReachHere(); - return NULL; - case DataLayout::bit_data_tag: - return new BitData(this); - case DataLayout::counter_data_tag: - return new CounterData(this); - case DataLayout::jump_data_tag: - return new JumpData(this); - case DataLayout::receiver_type_data_tag: - return new ReceiverTypeData(this); - case DataLayout::virtual_call_data_tag: - return new VirtualCallData(this); - case DataLayout::ret_data_tag: - return new RetData(this); - case DataLayout::branch_data_tag: - return new BranchData(this); - case DataLayout::multi_branch_data_tag: - return new MultiBranchData(this); - case DataLayout::arg_info_data_tag: - return new ArgInfoData(this); - }; -} - -// Iteration over data. -ProfileData* methodDataOopDesc::next_data(ProfileData* current) { - int current_index = dp_to_di(current->dp()); - int next_index = current_index + current->size_in_bytes(); - ProfileData* next = data_at(next_index); - return next; -} - -// Give each of the data entries a chance to perform specific -// data initialization. -void methodDataOopDesc::post_initialize(BytecodeStream* stream) { - ResourceMark rm; - ProfileData* data; - for (data = first_data(); is_valid(data); data = next_data(data)) { - stream->set_start(data->bci()); - stream->next(); - data->post_initialize(stream, this); - } -} - -// Initialize the methodDataOop corresponding to a given method. -void methodDataOopDesc::initialize(methodHandle method) { - ResourceMark rm; - // Set the method back-pointer. - _method = method(); - - if (TieredCompilation) { - _invocation_counter.init(); - _backedge_counter.init(); - _invocation_counter_start = 0; - _backedge_counter_start = 0; - _num_loops = 0; - _num_blocks = 0; - _highest_comp_level = 0; - _highest_osr_comp_level = 0; - _would_profile = true; - } - set_creation_mileage(mileage_of(method())); - - // Initialize flags and trap history. - _nof_decompiles = 0; - _nof_overflow_recompiles = 0; - _nof_overflow_traps = 0; - assert(sizeof(_trap_hist) % sizeof(HeapWord) == 0, "align"); - Copy::zero_to_words((HeapWord*) &_trap_hist, - sizeof(_trap_hist) / sizeof(HeapWord)); - - // Go through the bytecodes and allocate and initialize the - // corresponding data cells. - int data_size = 0; - int empty_bc_count = 0; // number of bytecodes lacking data - BytecodeStream stream(method); - Bytecodes::Code c; - while ((c = stream.next()) >= 0) { - int size_in_bytes = initialize_data(&stream, data_size); - data_size += size_in_bytes; - if (size_in_bytes == 0) empty_bc_count += 1; - } - _data_size = data_size; - int object_size = in_bytes(data_offset()) + data_size; - - // Add some extra DataLayout cells (at least one) to track stray traps. - int extra_data_count = compute_extra_data_count(data_size, empty_bc_count); - int extra_size = extra_data_count * DataLayout::compute_size_in_bytes(0); - - // Add a cell to record information about modified arguments. - // Set up _args_modified array after traps cells so that - // the code for traps cells works. - DataLayout *dp = data_layout_at(data_size + extra_size); - - int arg_size = method->size_of_parameters(); - dp->initialize(DataLayout::arg_info_data_tag, 0, arg_size+1); - - object_size += extra_size + DataLayout::compute_size_in_bytes(arg_size+1); - - // Set an initial hint. Don't use set_hint_di() because - // first_di() may be out of bounds if data_size is 0. - // In that situation, _hint_di is never used, but at - // least well-defined. - _hint_di = first_di(); - - post_initialize(&stream); - - set_object_is_parsable(object_size); -} - -// Get a measure of how much mileage the method has on it. -int methodDataOopDesc::mileage_of(methodOop method) { - int mileage = 0; - if (TieredCompilation) { - mileage = MAX2(method->invocation_count(), method->backedge_count()); - } else { - int iic = method->interpreter_invocation_count(); - if (mileage < iic) mileage = iic; - InvocationCounter* ic = method->invocation_counter(); - InvocationCounter* bc = method->backedge_counter(); - int icval = ic->count(); - if (ic->carry()) icval += CompileThreshold; - if (mileage < icval) mileage = icval; - int bcval = bc->count(); - if (bc->carry()) bcval += CompileThreshold; - if (mileage < bcval) mileage = bcval; - } - return mileage; -} - -bool methodDataOopDesc::is_mature() const { - return CompilationPolicy::policy()->is_mature(_method); -} - -// Translate a bci to its corresponding data index (di). -address methodDataOopDesc::bci_to_dp(int bci) { - ResourceMark rm; - ProfileData* data = data_before(bci); - ProfileData* prev = NULL; - for ( ; is_valid(data); data = next_data(data)) { - if (data->bci() >= bci) { - if (data->bci() == bci) set_hint_di(dp_to_di(data->dp())); - else if (prev != NULL) set_hint_di(dp_to_di(prev->dp())); - return data->dp(); - } - prev = data; - } - return (address)limit_data_position(); -} - -// Translate a bci to its corresponding data, or NULL. -ProfileData* methodDataOopDesc::bci_to_data(int bci) { - ProfileData* data = data_before(bci); - for ( ; is_valid(data); data = next_data(data)) { - if (data->bci() == bci) { - set_hint_di(dp_to_di(data->dp())); - return data; - } else if (data->bci() > bci) { - break; - } - } - return bci_to_extra_data(bci, false); -} - -// Translate a bci to its corresponding extra data, or NULL. -ProfileData* methodDataOopDesc::bci_to_extra_data(int bci, bool create_if_missing) { - DataLayout* dp = extra_data_base(); - DataLayout* end = extra_data_limit(); - DataLayout* avail = NULL; - for (; dp < end; dp = next_extra(dp)) { - // No need for "OrderAccess::load_acquire" ops, - // since the data structure is monotonic. - if (dp->tag() == DataLayout::no_tag) break; - if (dp->tag() == DataLayout::arg_info_data_tag) { - dp = end; // ArgInfoData is at the end of extra data section. - break; - } - if (dp->bci() == bci) { - assert(dp->tag() == DataLayout::bit_data_tag, "sane"); - return new BitData(dp); - } - } - if (create_if_missing && dp < end) { - // Allocate this one. There is no mutual exclusion, - // so two threads could allocate different BCIs to the - // same data layout. This means these extra data - // records, like most other MDO contents, must not be - // trusted too much. - DataLayout temp; - temp.initialize(DataLayout::bit_data_tag, bci, 0); - dp->release_set_header(temp.header()); - assert(dp->tag() == DataLayout::bit_data_tag, "sane"); - //NO: assert(dp->bci() == bci, "no concurrent allocation"); - return new BitData(dp); - } - return NULL; -} - -ArgInfoData *methodDataOopDesc::arg_info() { - DataLayout* dp = extra_data_base(); - DataLayout* end = extra_data_limit(); - for (; dp < end; dp = next_extra(dp)) { - if (dp->tag() == DataLayout::arg_info_data_tag) - return new ArgInfoData(dp); - } - return NULL; -} - -#ifndef PRODUCT -void methodDataOopDesc::print_data_on(outputStream* st) { - ResourceMark rm; - ProfileData* data = first_data(); - for ( ; is_valid(data); data = next_data(data)) { - st->print("%d", dp_to_di(data->dp())); - st->fill_to(6); - data->print_data_on(st); - } - st->print_cr("--- Extra data:"); - DataLayout* dp = extra_data_base(); - DataLayout* end = extra_data_limit(); - for (; dp < end; dp = next_extra(dp)) { - // No need for "OrderAccess::load_acquire" ops, - // since the data structure is monotonic. - if (dp->tag() == DataLayout::no_tag) continue; - if (dp->tag() == DataLayout::bit_data_tag) { - data = new BitData(dp); - } else { - assert(dp->tag() == DataLayout::arg_info_data_tag, "must be BitData or ArgInfo"); - data = new ArgInfoData(dp); - dp = end; // ArgInfoData is at the end of extra data section. - } - st->print("%d", dp_to_di(data->dp())); - st->fill_to(6); - data->print_data_on(st); - } -} -#endif - -void methodDataOopDesc::verify_data_on(outputStream* st) { - NEEDS_CLEANUP; - // not yet implemented. -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/methodDataOop.hpp --- a/src/share/vm/oops/methodDataOop.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1535 +0,0 @@ -/* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_METHODDATAOOP_HPP -#define SHARE_VM_OOPS_METHODDATAOOP_HPP - -#include "interpreter/bytecodes.hpp" -#include "memory/universe.hpp" -#include "oops/methodOop.hpp" -#include "oops/oop.hpp" -#include "runtime/orderAccess.hpp" - -class BytecodeStream; - -// The MethodData object collects counts and other profile information -// during zeroth-tier (interpretive) and first-tier execution. -// The profile is used later by compilation heuristics. Some heuristics -// enable use of aggressive (or "heroic") optimizations. An aggressive -// optimization often has a down-side, a corner case that it handles -// poorly, but which is thought to be rare. The profile provides -// evidence of this rarity for a given method or even BCI. It allows -// the compiler to back out of the optimization at places where it -// has historically been a poor choice. Other heuristics try to use -// specific information gathered about types observed at a given site. -// -// All data in the profile is approximate. It is expected to be accurate -// on the whole, but the system expects occasional inaccuraces, due to -// counter overflow, multiprocessor races during data collection, space -// limitations, missing MDO blocks, etc. Bad or missing data will degrade -// optimization quality but will not affect correctness. Also, each MDO -// is marked with its birth-date ("creation_mileage") which can be used -// to assess the quality ("maturity") of its data. -// -// Short (<32-bit) counters are designed to overflow to a known "saturated" -// state. Also, certain recorded per-BCI events are given one-bit counters -// which overflow to a saturated state which applied to all counters at -// that BCI. In other words, there is a small lattice which approximates -// the ideal of an infinite-precision counter for each event at each BCI, -// and the lattice quickly "bottoms out" in a state where all counters -// are taken to be indefinitely large. -// -// The reader will find many data races in profile gathering code, starting -// with invocation counter incrementation. None of these races harm correct -// execution of the compiled code. - -// forward decl -class ProfileData; - -// DataLayout -// -// Overlay for generic profiling data. -class DataLayout VALUE_OBJ_CLASS_SPEC { -private: - // Every data layout begins with a header. This header - // contains a tag, which is used to indicate the size/layout - // of the data, 4 bits of flags, which can be used in any way, - // 4 bits of trap history (none/one reason/many reasons), - // and a bci, which is used to tie this piece of data to a - // specific bci in the bytecodes. - union { - intptr_t _bits; - struct { - u1 _tag; - u1 _flags; - u2 _bci; - } _struct; - } _header; - - // The data layout has an arbitrary number of cells, each sized - // to accomodate a pointer or an integer. - intptr_t _cells[1]; - - // Some types of data layouts need a length field. - static bool needs_array_len(u1 tag); - -public: - enum { - counter_increment = 1 - }; - - enum { - cell_size = sizeof(intptr_t) - }; - - // Tag values - enum { - no_tag, - bit_data_tag, - counter_data_tag, - jump_data_tag, - receiver_type_data_tag, - virtual_call_data_tag, - ret_data_tag, - branch_data_tag, - multi_branch_data_tag, - arg_info_data_tag - }; - - enum { - // The _struct._flags word is formatted as [trap_state:4 | flags:4]. - // The trap state breaks down further as [recompile:1 | reason:3]. - // This further breakdown is defined in deoptimization.cpp. - // See Deoptimization::trap_state_reason for an assert that - // trap_bits is big enough to hold reasons < Reason_RECORDED_LIMIT. - // - // The trap_state is collected only if ProfileTraps is true. - trap_bits = 1+3, // 3: enough to distinguish [0..Reason_RECORDED_LIMIT]. - trap_shift = BitsPerByte - trap_bits, - trap_mask = right_n_bits(trap_bits), - trap_mask_in_place = (trap_mask << trap_shift), - flag_limit = trap_shift, - flag_mask = right_n_bits(flag_limit), - first_flag = 0 - }; - - // Size computation - static int header_size_in_bytes() { - return cell_size; - } - static int header_size_in_cells() { - return 1; - } - - static int compute_size_in_bytes(int cell_count) { - return header_size_in_bytes() + cell_count * cell_size; - } - - // Initialization - void initialize(u1 tag, u2 bci, int cell_count); - - // Accessors - u1 tag() { - return _header._struct._tag; - } - - // Return a few bits of trap state. Range is [0..trap_mask]. - // The state tells if traps with zero, one, or many reasons have occurred. - // It also tells whether zero or many recompilations have occurred. - // The associated trap histogram in the MDO itself tells whether - // traps are common or not. If a BCI shows that a trap X has - // occurred, and the MDO shows N occurrences of X, we make the - // simplifying assumption that all N occurrences can be blamed - // on that BCI. - int trap_state() { - return ((_header._struct._flags >> trap_shift) & trap_mask); - } - - void set_trap_state(int new_state) { - assert(ProfileTraps, "used only under +ProfileTraps"); - uint old_flags = (_header._struct._flags & flag_mask); - _header._struct._flags = (new_state << trap_shift) | old_flags; - } - - u1 flags() { - return _header._struct._flags; - } - - u2 bci() { - return _header._struct._bci; - } - - void set_header(intptr_t value) { - _header._bits = value; - } - void release_set_header(intptr_t value) { - OrderAccess::release_store_ptr(&_header._bits, value); - } - intptr_t header() { - return _header._bits; - } - void set_cell_at(int index, intptr_t value) { - _cells[index] = value; - } - void release_set_cell_at(int index, intptr_t value) { - OrderAccess::release_store_ptr(&_cells[index], value); - } - intptr_t cell_at(int index) { - return _cells[index]; - } - intptr_t* adr_cell_at(int index) { - return &_cells[index]; - } - oop* adr_oop_at(int index) { - return (oop*)&(_cells[index]); - } - - void set_flag_at(int flag_number) { - assert(flag_number < flag_limit, "oob"); - _header._struct._flags |= (0x1 << flag_number); - } - bool flag_at(int flag_number) { - assert(flag_number < flag_limit, "oob"); - return (_header._struct._flags & (0x1 << flag_number)) != 0; - } - - // Low-level support for code generation. - static ByteSize header_offset() { - return byte_offset_of(DataLayout, _header); - } - static ByteSize tag_offset() { - return byte_offset_of(DataLayout, _header._struct._tag); - } - static ByteSize flags_offset() { - return byte_offset_of(DataLayout, _header._struct._flags); - } - static ByteSize bci_offset() { - return byte_offset_of(DataLayout, _header._struct._bci); - } - static ByteSize cell_offset(int index) { - return byte_offset_of(DataLayout, _cells) + in_ByteSize(index * cell_size); - } - // Return a value which, when or-ed as a byte into _flags, sets the flag. - static int flag_number_to_byte_constant(int flag_number) { - assert(0 <= flag_number && flag_number < flag_limit, "oob"); - DataLayout temp; temp.set_header(0); - temp.set_flag_at(flag_number); - return temp._header._struct._flags; - } - // Return a value which, when or-ed as a word into _header, sets the flag. - static intptr_t flag_mask_to_header_mask(int byte_constant) { - DataLayout temp; temp.set_header(0); - temp._header._struct._flags = byte_constant; - return temp._header._bits; - } - - // GC support - ProfileData* data_in(); - void follow_weak_refs(BoolObjectClosure* cl); -}; - - -// ProfileData class hierarchy -class ProfileData; -class BitData; -class CounterData; -class ReceiverTypeData; -class VirtualCallData; -class RetData; -class JumpData; -class BranchData; -class ArrayData; -class MultiBranchData; -class ArgInfoData; - - -// ProfileData -// -// A ProfileData object is created to refer to a section of profiling -// data in a structured way. -class ProfileData : public ResourceObj { -private: -#ifndef PRODUCT - enum { - tab_width_one = 16, - tab_width_two = 36 - }; -#endif // !PRODUCT - - // This is a pointer to a section of profiling data. - DataLayout* _data; - -protected: - DataLayout* data() { return _data; } - - enum { - cell_size = DataLayout::cell_size - }; - -public: - // How many cells are in this? - virtual int cell_count() { - ShouldNotReachHere(); - return -1; - } - - // Return the size of this data. - int size_in_bytes() { - return DataLayout::compute_size_in_bytes(cell_count()); - } - -protected: - // Low-level accessors for underlying data - void set_intptr_at(int index, intptr_t value) { - assert(0 <= index && index < cell_count(), "oob"); - data()->set_cell_at(index, value); - } - void release_set_intptr_at(int index, intptr_t value) { - assert(0 <= index && index < cell_count(), "oob"); - data()->release_set_cell_at(index, value); - } - intptr_t intptr_at(int index) { - assert(0 <= index && index < cell_count(), "oob"); - return data()->cell_at(index); - } - void set_uint_at(int index, uint value) { - set_intptr_at(index, (intptr_t) value); - } - void release_set_uint_at(int index, uint value) { - release_set_intptr_at(index, (intptr_t) value); - } - uint uint_at(int index) { - return (uint)intptr_at(index); - } - void set_int_at(int index, int value) { - set_intptr_at(index, (intptr_t) value); - } - void release_set_int_at(int index, int value) { - release_set_intptr_at(index, (intptr_t) value); - } - int int_at(int index) { - return (int)intptr_at(index); - } - int int_at_unchecked(int index) { - return (int)data()->cell_at(index); - } - void set_oop_at(int index, oop value) { - set_intptr_at(index, (intptr_t) value); - } - oop oop_at(int index) { - return (oop)intptr_at(index); - } - oop* adr_oop_at(int index) { - assert(0 <= index && index < cell_count(), "oob"); - return data()->adr_oop_at(index); - } - - void set_flag_at(int flag_number) { - data()->set_flag_at(flag_number); - } - bool flag_at(int flag_number) { - return data()->flag_at(flag_number); - } - - // two convenient imports for use by subclasses: - static ByteSize cell_offset(int index) { - return DataLayout::cell_offset(index); - } - static int flag_number_to_byte_constant(int flag_number) { - return DataLayout::flag_number_to_byte_constant(flag_number); - } - - ProfileData(DataLayout* data) { - _data = data; - } - -public: - // Constructor for invalid ProfileData. - ProfileData(); - - u2 bci() { - return data()->bci(); - } - - address dp() { - return (address)_data; - } - - int trap_state() { - return data()->trap_state(); - } - void set_trap_state(int new_state) { - data()->set_trap_state(new_state); - } - - // Type checking - virtual bool is_BitData() { return false; } - virtual bool is_CounterData() { return false; } - virtual bool is_JumpData() { return false; } - virtual bool is_ReceiverTypeData(){ return false; } - virtual bool is_VirtualCallData() { return false; } - virtual bool is_RetData() { return false; } - virtual bool is_BranchData() { return false; } - virtual bool is_ArrayData() { return false; } - virtual bool is_MultiBranchData() { return false; } - virtual bool is_ArgInfoData() { return false; } - - - BitData* as_BitData() { - assert(is_BitData(), "wrong type"); - return is_BitData() ? (BitData*) this : NULL; - } - CounterData* as_CounterData() { - assert(is_CounterData(), "wrong type"); - return is_CounterData() ? (CounterData*) this : NULL; - } - JumpData* as_JumpData() { - assert(is_JumpData(), "wrong type"); - return is_JumpData() ? (JumpData*) this : NULL; - } - ReceiverTypeData* as_ReceiverTypeData() { - assert(is_ReceiverTypeData(), "wrong type"); - return is_ReceiverTypeData() ? (ReceiverTypeData*)this : NULL; - } - VirtualCallData* as_VirtualCallData() { - assert(is_VirtualCallData(), "wrong type"); - return is_VirtualCallData() ? (VirtualCallData*)this : NULL; - } - RetData* as_RetData() { - assert(is_RetData(), "wrong type"); - return is_RetData() ? (RetData*) this : NULL; - } - BranchData* as_BranchData() { - assert(is_BranchData(), "wrong type"); - return is_BranchData() ? (BranchData*) this : NULL; - } - ArrayData* as_ArrayData() { - assert(is_ArrayData(), "wrong type"); - return is_ArrayData() ? (ArrayData*) this : NULL; - } - MultiBranchData* as_MultiBranchData() { - assert(is_MultiBranchData(), "wrong type"); - return is_MultiBranchData() ? (MultiBranchData*)this : NULL; - } - ArgInfoData* as_ArgInfoData() { - assert(is_ArgInfoData(), "wrong type"); - return is_ArgInfoData() ? (ArgInfoData*)this : NULL; - } - - - // Subclass specific initialization - virtual void post_initialize(BytecodeStream* stream, methodDataOop mdo) {} - - // GC support - virtual void follow_contents() {} - virtual void oop_iterate(OopClosure* blk) {} - virtual void oop_iterate_m(OopClosure* blk, MemRegion mr) {} - virtual void adjust_pointers() {} - virtual void follow_weak_refs(BoolObjectClosure* is_alive_closure) {} - -#ifndef SERIALGC - // Parallel old support - virtual void follow_contents(ParCompactionManager* cm) {} - virtual void update_pointers() {} -#endif // SERIALGC - - // CI translation: ProfileData can represent both MethodDataOop data - // as well as CIMethodData data. This function is provided for translating - // an oop in a ProfileData to the ci equivalent. Generally speaking, - // most ProfileData don't require any translation, so we provide the null - // translation here, and the required translators are in the ci subclasses. - virtual void translate_from(ProfileData* data) {} - - virtual void print_data_on(outputStream* st) { - ShouldNotReachHere(); - } - -#ifndef PRODUCT - void print_shared(outputStream* st, const char* name); - void tab(outputStream* st); -#endif -}; - -// BitData -// -// A BitData holds a flag or two in its header. -class BitData : public ProfileData { -protected: - enum { - // null_seen: - // saw a null operand (cast/aastore/instanceof) - null_seen_flag = DataLayout::first_flag + 0 - }; - enum { bit_cell_count = 0 }; // no additional data fields needed. -public: - BitData(DataLayout* layout) : ProfileData(layout) { - } - - virtual bool is_BitData() { return true; } - - static int static_cell_count() { - return bit_cell_count; - } - - virtual int cell_count() { - return static_cell_count(); - } - - // Accessor - - // The null_seen flag bit is specially known to the interpreter. - // Consulting it allows the compiler to avoid setting up null_check traps. - bool null_seen() { return flag_at(null_seen_flag); } - void set_null_seen() { set_flag_at(null_seen_flag); } - - - // Code generation support - static int null_seen_byte_constant() { - return flag_number_to_byte_constant(null_seen_flag); - } - - static ByteSize bit_data_size() { - return cell_offset(bit_cell_count); - } - -#ifndef PRODUCT - void print_data_on(outputStream* st); -#endif -}; - -// CounterData -// -// A CounterData corresponds to a simple counter. -class CounterData : public BitData { -protected: - enum { - count_off, - counter_cell_count - }; -public: - CounterData(DataLayout* layout) : BitData(layout) {} - - virtual bool is_CounterData() { return true; } - - static int static_cell_count() { - return counter_cell_count; - } - - virtual int cell_count() { - return static_cell_count(); - } - - // Direct accessor - uint count() { - return uint_at(count_off); - } - - // Code generation support - static ByteSize count_offset() { - return cell_offset(count_off); - } - static ByteSize counter_data_size() { - return cell_offset(counter_cell_count); - } - - void set_count(uint count) { - set_uint_at(count_off, count); - } - -#ifndef PRODUCT - void print_data_on(outputStream* st); -#endif -}; - -// JumpData -// -// A JumpData is used to access profiling information for a direct -// branch. It is a counter, used for counting the number of branches, -// plus a data displacement, used for realigning the data pointer to -// the corresponding target bci. -class JumpData : public ProfileData { -protected: - enum { - taken_off_set, - displacement_off_set, - jump_cell_count - }; - - void set_displacement(int displacement) { - set_int_at(displacement_off_set, displacement); - } - -public: - JumpData(DataLayout* layout) : ProfileData(layout) { - assert(layout->tag() == DataLayout::jump_data_tag || - layout->tag() == DataLayout::branch_data_tag, "wrong type"); - } - - virtual bool is_JumpData() { return true; } - - static int static_cell_count() { - return jump_cell_count; - } - - virtual int cell_count() { - return static_cell_count(); - } - - // Direct accessor - uint taken() { - return uint_at(taken_off_set); - } - - void set_taken(uint cnt) { - set_uint_at(taken_off_set, cnt); - } - - // Saturating counter - uint inc_taken() { - uint cnt = taken() + 1; - // Did we wrap? Will compiler screw us?? - if (cnt == 0) cnt--; - set_uint_at(taken_off_set, cnt); - return cnt; - } - - int displacement() { - return int_at(displacement_off_set); - } - - // Code generation support - static ByteSize taken_offset() { - return cell_offset(taken_off_set); - } - - static ByteSize displacement_offset() { - return cell_offset(displacement_off_set); - } - - // Specific initialization. - void post_initialize(BytecodeStream* stream, methodDataOop mdo); - -#ifndef PRODUCT - void print_data_on(outputStream* st); -#endif -}; - -// ReceiverTypeData -// -// A ReceiverTypeData is used to access profiling information about a -// dynamic type check. It consists of a counter which counts the total times -// that the check is reached, and a series of (klassOop, count) pairs -// which are used to store a type profile for the receiver of the check. -class ReceiverTypeData : public CounterData { -protected: - enum { - receiver0_offset = counter_cell_count, - count0_offset, - receiver_type_row_cell_count = (count0_offset + 1) - receiver0_offset - }; - -public: - ReceiverTypeData(DataLayout* layout) : CounterData(layout) { - assert(layout->tag() == DataLayout::receiver_type_data_tag || - layout->tag() == DataLayout::virtual_call_data_tag, "wrong type"); - } - - virtual bool is_ReceiverTypeData() { return true; } - - static int static_cell_count() { - return counter_cell_count + (uint) TypeProfileWidth * receiver_type_row_cell_count; - } - - virtual int cell_count() { - return static_cell_count(); - } - - // Direct accessors - static uint row_limit() { - return TypeProfileWidth; - } - static int receiver_cell_index(uint row) { - return receiver0_offset + row * receiver_type_row_cell_count; - } - static int receiver_count_cell_index(uint row) { - return count0_offset + row * receiver_type_row_cell_count; - } - - // Get the receiver at row. The 'unchecked' version is needed by parallel old - // gc; it does not assert the receiver is a klass. During compaction of the - // perm gen, the klass may already have moved, so the is_klass() predicate - // would fail. The 'normal' version should be used whenever possible. - klassOop receiver_unchecked(uint row) { - assert(row < row_limit(), "oob"); - oop recv = oop_at(receiver_cell_index(row)); - return (klassOop)recv; - } - - klassOop receiver(uint row) { - klassOop recv = receiver_unchecked(row); - assert(recv == NULL || ((oop)recv)->is_klass(), "wrong type"); - return recv; - } - - void set_receiver(uint row, oop p) { - assert((uint)row < row_limit(), "oob"); - set_oop_at(receiver_cell_index(row), p); - } - - uint receiver_count(uint row) { - assert(row < row_limit(), "oob"); - return uint_at(receiver_count_cell_index(row)); - } - - void set_receiver_count(uint row, uint count) { - assert(row < row_limit(), "oob"); - set_uint_at(receiver_count_cell_index(row), count); - } - - void clear_row(uint row) { - assert(row < row_limit(), "oob"); - // Clear total count - indicator of polymorphic call site. - // The site may look like as monomorphic after that but - // it allow to have more accurate profiling information because - // there was execution phase change since klasses were unloaded. - // If the site is still polymorphic then MDO will be updated - // to reflect it. But it could be the case that the site becomes - // only bimorphic. Then keeping total count not 0 will be wrong. - // Even if we use monomorphic (when it is not) for compilation - // we will only have trap, deoptimization and recompile again - // with updated MDO after executing method in Interpreter. - // An additional receiver will be recorded in the cleaned row - // during next call execution. - // - // Note: our profiling logic works with empty rows in any slot. - // We do sorting a profiling info (ciCallProfile) for compilation. - // - set_count(0); - set_receiver(row, NULL); - set_receiver_count(row, 0); - } - - // Code generation support - static ByteSize receiver_offset(uint row) { - return cell_offset(receiver_cell_index(row)); - } - static ByteSize receiver_count_offset(uint row) { - return cell_offset(receiver_count_cell_index(row)); - } - static ByteSize receiver_type_data_size() { - return cell_offset(static_cell_count()); - } - - // GC support - virtual void follow_contents(); - virtual void oop_iterate(OopClosure* blk); - virtual void oop_iterate_m(OopClosure* blk, MemRegion mr); - virtual void adjust_pointers(); - virtual void follow_weak_refs(BoolObjectClosure* is_alive_closure); - -#ifndef SERIALGC - // Parallel old support - virtual void follow_contents(ParCompactionManager* cm); - virtual void update_pointers(); -#endif // SERIALGC - - oop* adr_receiver(uint row) { - return adr_oop_at(receiver_cell_index(row)); - } - -#ifndef PRODUCT - void print_receiver_data_on(outputStream* st); - void print_data_on(outputStream* st); -#endif -}; - -// VirtualCallData -// -// A VirtualCallData is used to access profiling information about a -// virtual call. For now, it has nothing more than a ReceiverTypeData. -class VirtualCallData : public ReceiverTypeData { -public: - VirtualCallData(DataLayout* layout) : ReceiverTypeData(layout) { - assert(layout->tag() == DataLayout::virtual_call_data_tag, "wrong type"); - } - - virtual bool is_VirtualCallData() { return true; } - - static int static_cell_count() { - // At this point we could add more profile state, e.g., for arguments. - // But for now it's the same size as the base record type. - return ReceiverTypeData::static_cell_count(); - } - - virtual int cell_count() { - return static_cell_count(); - } - - // Direct accessors - static ByteSize virtual_call_data_size() { - return cell_offset(static_cell_count()); - } - -#ifndef PRODUCT - void print_data_on(outputStream* st); -#endif -}; - -// RetData -// -// A RetData is used to access profiling information for a ret bytecode. -// It is composed of a count of the number of times that the ret has -// been executed, followed by a series of triples of the form -// (bci, count, di) which count the number of times that some bci was the -// target of the ret and cache a corresponding data displacement. -class RetData : public CounterData { -protected: - enum { - bci0_offset = counter_cell_count, - count0_offset, - displacement0_offset, - ret_row_cell_count = (displacement0_offset + 1) - bci0_offset - }; - - void set_bci(uint row, int bci) { - assert((uint)row < row_limit(), "oob"); - set_int_at(bci0_offset + row * ret_row_cell_count, bci); - } - void release_set_bci(uint row, int bci) { - assert((uint)row < row_limit(), "oob"); - // 'release' when setting the bci acts as a valid flag for other - // threads wrt bci_count and bci_displacement. - release_set_int_at(bci0_offset + row * ret_row_cell_count, bci); - } - void set_bci_count(uint row, uint count) { - assert((uint)row < row_limit(), "oob"); - set_uint_at(count0_offset + row * ret_row_cell_count, count); - } - void set_bci_displacement(uint row, int disp) { - set_int_at(displacement0_offset + row * ret_row_cell_count, disp); - } - -public: - RetData(DataLayout* layout) : CounterData(layout) { - assert(layout->tag() == DataLayout::ret_data_tag, "wrong type"); - } - - virtual bool is_RetData() { return true; } - - enum { - no_bci = -1 // value of bci when bci1/2 are not in use. - }; - - static int static_cell_count() { - return counter_cell_count + (uint) BciProfileWidth * ret_row_cell_count; - } - - virtual int cell_count() { - return static_cell_count(); - } - - static uint row_limit() { - return BciProfileWidth; - } - static int bci_cell_index(uint row) { - return bci0_offset + row * ret_row_cell_count; - } - static int bci_count_cell_index(uint row) { - return count0_offset + row * ret_row_cell_count; - } - static int bci_displacement_cell_index(uint row) { - return displacement0_offset + row * ret_row_cell_count; - } - - // Direct accessors - int bci(uint row) { - return int_at(bci_cell_index(row)); - } - uint bci_count(uint row) { - return uint_at(bci_count_cell_index(row)); - } - int bci_displacement(uint row) { - return int_at(bci_displacement_cell_index(row)); - } - - // Interpreter Runtime support - address fixup_ret(int return_bci, methodDataHandle mdo); - - // Code generation support - static ByteSize bci_offset(uint row) { - return cell_offset(bci_cell_index(row)); - } - static ByteSize bci_count_offset(uint row) { - return cell_offset(bci_count_cell_index(row)); - } - static ByteSize bci_displacement_offset(uint row) { - return cell_offset(bci_displacement_cell_index(row)); - } - - // Specific initialization. - void post_initialize(BytecodeStream* stream, methodDataOop mdo); - -#ifndef PRODUCT - void print_data_on(outputStream* st); -#endif -}; - -// BranchData -// -// A BranchData is used to access profiling data for a two-way branch. -// It consists of taken and not_taken counts as well as a data displacement -// for the taken case. -class BranchData : public JumpData { -protected: - enum { - not_taken_off_set = jump_cell_count, - branch_cell_count - }; - - void set_displacement(int displacement) { - set_int_at(displacement_off_set, displacement); - } - -public: - BranchData(DataLayout* layout) : JumpData(layout) { - assert(layout->tag() == DataLayout::branch_data_tag, "wrong type"); - } - - virtual bool is_BranchData() { return true; } - - static int static_cell_count() { - return branch_cell_count; - } - - virtual int cell_count() { - return static_cell_count(); - } - - // Direct accessor - uint not_taken() { - return uint_at(not_taken_off_set); - } - - void set_not_taken(uint cnt) { - set_uint_at(not_taken_off_set, cnt); - } - - uint inc_not_taken() { - uint cnt = not_taken() + 1; - // Did we wrap? Will compiler screw us?? - if (cnt == 0) cnt--; - set_uint_at(not_taken_off_set, cnt); - return cnt; - } - - // Code generation support - static ByteSize not_taken_offset() { - return cell_offset(not_taken_off_set); - } - static ByteSize branch_data_size() { - return cell_offset(branch_cell_count); - } - - // Specific initialization. - void post_initialize(BytecodeStream* stream, methodDataOop mdo); - -#ifndef PRODUCT - void print_data_on(outputStream* st); -#endif -}; - -// ArrayData -// -// A ArrayData is a base class for accessing profiling data which does -// not have a statically known size. It consists of an array length -// and an array start. -class ArrayData : public ProfileData { -protected: - friend class DataLayout; - - enum { - array_len_off_set, - array_start_off_set - }; - - uint array_uint_at(int index) { - int aindex = index + array_start_off_set; - return uint_at(aindex); - } - int array_int_at(int index) { - int aindex = index + array_start_off_set; - return int_at(aindex); - } - oop array_oop_at(int index) { - int aindex = index + array_start_off_set; - return oop_at(aindex); - } - void array_set_int_at(int index, int value) { - int aindex = index + array_start_off_set; - set_int_at(aindex, value); - } - - // Code generation support for subclasses. - static ByteSize array_element_offset(int index) { - return cell_offset(array_start_off_set + index); - } - -public: - ArrayData(DataLayout* layout) : ProfileData(layout) {} - - virtual bool is_ArrayData() { return true; } - - static int static_cell_count() { - return -1; - } - - int array_len() { - return int_at_unchecked(array_len_off_set); - } - - virtual int cell_count() { - return array_len() + 1; - } - - // Code generation support - static ByteSize array_len_offset() { - return cell_offset(array_len_off_set); - } - static ByteSize array_start_offset() { - return cell_offset(array_start_off_set); - } -}; - -// MultiBranchData -// -// A MultiBranchData is used to access profiling information for -// a multi-way branch (*switch bytecodes). It consists of a series -// of (count, displacement) pairs, which count the number of times each -// case was taken and specify the data displacment for each branch target. -class MultiBranchData : public ArrayData { -protected: - enum { - default_count_off_set, - default_disaplacement_off_set, - case_array_start - }; - enum { - relative_count_off_set, - relative_displacement_off_set, - per_case_cell_count - }; - - void set_default_displacement(int displacement) { - array_set_int_at(default_disaplacement_off_set, displacement); - } - void set_displacement_at(int index, int displacement) { - array_set_int_at(case_array_start + - index * per_case_cell_count + - relative_displacement_off_set, - displacement); - } - -public: - MultiBranchData(DataLayout* layout) : ArrayData(layout) { - assert(layout->tag() == DataLayout::multi_branch_data_tag, "wrong type"); - } - - virtual bool is_MultiBranchData() { return true; } - - static int compute_cell_count(BytecodeStream* stream); - - int number_of_cases() { - int alen = array_len() - 2; // get rid of default case here. - assert(alen % per_case_cell_count == 0, "must be even"); - return (alen / per_case_cell_count); - } - - uint default_count() { - return array_uint_at(default_count_off_set); - } - int default_displacement() { - return array_int_at(default_disaplacement_off_set); - } - - uint count_at(int index) { - return array_uint_at(case_array_start + - index * per_case_cell_count + - relative_count_off_set); - } - int displacement_at(int index) { - return array_int_at(case_array_start + - index * per_case_cell_count + - relative_displacement_off_set); - } - - // Code generation support - static ByteSize default_count_offset() { - return array_element_offset(default_count_off_set); - } - static ByteSize default_displacement_offset() { - return array_element_offset(default_disaplacement_off_set); - } - static ByteSize case_count_offset(int index) { - return case_array_offset() + - (per_case_size() * index) + - relative_count_offset(); - } - static ByteSize case_array_offset() { - return array_element_offset(case_array_start); - } - static ByteSize per_case_size() { - return in_ByteSize(per_case_cell_count) * cell_size; - } - static ByteSize relative_count_offset() { - return in_ByteSize(relative_count_off_set) * cell_size; - } - static ByteSize relative_displacement_offset() { - return in_ByteSize(relative_displacement_off_set) * cell_size; - } - - // Specific initialization. - void post_initialize(BytecodeStream* stream, methodDataOop mdo); - -#ifndef PRODUCT - void print_data_on(outputStream* st); -#endif -}; - -class ArgInfoData : public ArrayData { - -public: - ArgInfoData(DataLayout* layout) : ArrayData(layout) { - assert(layout->tag() == DataLayout::arg_info_data_tag, "wrong type"); - } - - virtual bool is_ArgInfoData() { return true; } - - - int number_of_args() { - return array_len(); - } - - uint arg_modified(int arg) { - return array_uint_at(arg); - } - - void set_arg_modified(int arg, uint val) { - array_set_int_at(arg, val); - } - -#ifndef PRODUCT - void print_data_on(outputStream* st); -#endif -}; - -// methodDataOop -// -// A methodDataOop holds information which has been collected about -// a method. Its layout looks like this: -// -// ----------------------------- -// | header | -// | klass | -// ----------------------------- -// | method | -// | size of the methodDataOop | -// ----------------------------- -// | Data entries... | -// | (variable size) | -// | | -// . . -// . . -// . . -// | | -// ----------------------------- -// -// The data entry area is a heterogeneous array of DataLayouts. Each -// DataLayout in the array corresponds to a specific bytecode in the -// method. The entries in the array are sorted by the corresponding -// bytecode. Access to the data is via resource-allocated ProfileData, -// which point to the underlying blocks of DataLayout structures. -// -// During interpretation, if profiling in enabled, the interpreter -// maintains a method data pointer (mdp), which points at the entry -// in the array corresponding to the current bci. In the course of -// intepretation, when a bytecode is encountered that has profile data -// associated with it, the entry pointed to by mdp is updated, then the -// mdp is adjusted to point to the next appropriate DataLayout. If mdp -// is NULL to begin with, the interpreter assumes that the current method -// is not (yet) being profiled. -// -// In methodDataOop parlance, "dp" is a "data pointer", the actual address -// of a DataLayout element. A "di" is a "data index", the offset in bytes -// from the base of the data entry array. A "displacement" is the byte offset -// in certain ProfileData objects that indicate the amount the mdp must be -// adjusted in the event of a change in control flow. -// - -class methodDataOopDesc : public oopDesc { - friend class VMStructs; -private: - friend class ProfileData; - - // Back pointer to the methodOop - methodOop _method; - - // Size of this oop in bytes - int _size; - - // Cached hint for bci_to_dp and bci_to_data - int _hint_di; - - // Whole-method sticky bits and flags -public: - enum { - _trap_hist_limit = 17, // decoupled from Deoptimization::Reason_LIMIT - _trap_hist_mask = max_jubyte, - _extra_data_count = 4 // extra DataLayout headers, for trap history - }; // Public flag values -private: - uint _nof_decompiles; // count of all nmethod removals - uint _nof_overflow_recompiles; // recompile count, excluding recomp. bits - uint _nof_overflow_traps; // trap count, excluding _trap_hist - union { - intptr_t _align; - u1 _array[_trap_hist_limit]; - } _trap_hist; - - // Support for interprocedural escape analysis, from Thomas Kotzmann. - intx _eflags; // flags on escape information - intx _arg_local; // bit set of non-escaping arguments - intx _arg_stack; // bit set of stack-allocatable arguments - intx _arg_returned; // bit set of returned arguments - - int _creation_mileage; // method mileage at MDO creation - - // How many invocations has this MDO seen? - // These counters are used to determine the exact age of MDO. - // We need those because in tiered a method can be concurrently - // executed at different levels. - InvocationCounter _invocation_counter; - // Same for backedges. - InvocationCounter _backedge_counter; - // Counter values at the time profiling started. - int _invocation_counter_start; - int _backedge_counter_start; - // Number of loops and blocks is computed when compiling the first - // time with C1. It is used to determine if method is trivial. - short _num_loops; - short _num_blocks; - // Highest compile level this method has ever seen. - u1 _highest_comp_level; - // Same for OSR level - u1 _highest_osr_comp_level; - // Does this method contain anything worth profiling? - bool _would_profile; - - // Size of _data array in bytes. (Excludes header and extra_data fields.) - int _data_size; - - // Beginning of the data entries - intptr_t _data[1]; - - // Helper for size computation - static int compute_data_size(BytecodeStream* stream); - static int bytecode_cell_count(Bytecodes::Code code); - enum { no_profile_data = -1, variable_cell_count = -2 }; - - // Helper for initialization - DataLayout* data_layout_at(int data_index) { - assert(data_index % sizeof(intptr_t) == 0, "unaligned"); - return (DataLayout*) (((address)_data) + data_index); - } - - // Initialize an individual data segment. Returns the size of - // the segment in bytes. - int initialize_data(BytecodeStream* stream, int data_index); - - // Helper for data_at - DataLayout* limit_data_position() { - return (DataLayout*)((address)data_base() + _data_size); - } - bool out_of_bounds(int data_index) { - return data_index >= data_size(); - } - - // Give each of the data entries a chance to perform specific - // data initialization. - void post_initialize(BytecodeStream* stream); - - // hint accessors - int hint_di() const { return _hint_di; } - void set_hint_di(int di) { - assert(!out_of_bounds(di), "hint_di out of bounds"); - _hint_di = di; - } - ProfileData* data_before(int bci) { - // avoid SEGV on this edge case - if (data_size() == 0) - return NULL; - int hint = hint_di(); - if (data_layout_at(hint)->bci() <= bci) - return data_at(hint); - return first_data(); - } - - // What is the index of the first data entry? - int first_di() { return 0; } - - // Find or create an extra ProfileData: - ProfileData* bci_to_extra_data(int bci, bool create_if_missing); - - // return the argument info cell - ArgInfoData *arg_info(); - -public: - static int header_size() { - return sizeof(methodDataOopDesc)/wordSize; - } - - // Compute the size of a methodDataOop before it is created. - static int compute_allocation_size_in_bytes(methodHandle method); - static int compute_allocation_size_in_words(methodHandle method); - static int compute_extra_data_count(int data_size, int empty_bc_count); - - // Determine if a given bytecode can have profile information. - static bool bytecode_has_profile(Bytecodes::Code code) { - return bytecode_cell_count(code) != no_profile_data; - } - - // Perform initialization of a new methodDataOop - void initialize(methodHandle method); - - // My size - int object_size_in_bytes() { return _size; } - int object_size() { - return align_object_size(align_size_up(_size, BytesPerWord)/BytesPerWord); - } - - int creation_mileage() const { return _creation_mileage; } - void set_creation_mileage(int x) { _creation_mileage = x; } - - int invocation_count() { - if (invocation_counter()->carry()) { - return InvocationCounter::count_limit; - } - return invocation_counter()->count(); - } - int backedge_count() { - if (backedge_counter()->carry()) { - return InvocationCounter::count_limit; - } - return backedge_counter()->count(); - } - - int invocation_count_start() { - if (invocation_counter()->carry()) { - return 0; - } - return _invocation_counter_start; - } - - int backedge_count_start() { - if (backedge_counter()->carry()) { - return 0; - } - return _backedge_counter_start; - } - - int invocation_count_delta() { return invocation_count() - invocation_count_start(); } - int backedge_count_delta() { return backedge_count() - backedge_count_start(); } - - void reset_start_counters() { - _invocation_counter_start = invocation_count(); - _backedge_counter_start = backedge_count(); - } - - InvocationCounter* invocation_counter() { return &_invocation_counter; } - InvocationCounter* backedge_counter() { return &_backedge_counter; } - - void set_would_profile(bool p) { _would_profile = p; } - bool would_profile() const { return _would_profile; } - - int highest_comp_level() { return _highest_comp_level; } - void set_highest_comp_level(int level) { _highest_comp_level = level; } - int highest_osr_comp_level() { return _highest_osr_comp_level; } - void set_highest_osr_comp_level(int level) { _highest_osr_comp_level = level; } - - int num_loops() const { return _num_loops; } - void set_num_loops(int n) { _num_loops = n; } - int num_blocks() const { return _num_blocks; } - void set_num_blocks(int n) { _num_blocks = n; } - - bool is_mature() const; // consult mileage and ProfileMaturityPercentage - static int mileage_of(methodOop m); - - // Support for interprocedural escape analysis, from Thomas Kotzmann. - enum EscapeFlag { - estimated = 1 << 0, - return_local = 1 << 1, - return_allocated = 1 << 2, - allocated_escapes = 1 << 3, - unknown_modified = 1 << 4 - }; - - intx eflags() { return _eflags; } - intx arg_local() { return _arg_local; } - intx arg_stack() { return _arg_stack; } - intx arg_returned() { return _arg_returned; } - uint arg_modified(int a) { ArgInfoData *aid = arg_info(); - assert(a >= 0 && a < aid->number_of_args(), "valid argument number"); - return aid->arg_modified(a); } - - void set_eflags(intx v) { _eflags = v; } - void set_arg_local(intx v) { _arg_local = v; } - void set_arg_stack(intx v) { _arg_stack = v; } - void set_arg_returned(intx v) { _arg_returned = v; } - void set_arg_modified(int a, uint v) { ArgInfoData *aid = arg_info(); - assert(a >= 0 && a < aid->number_of_args(), "valid argument number"); - - aid->set_arg_modified(a, v); } - - void clear_escape_info() { _eflags = _arg_local = _arg_stack = _arg_returned = 0; } - - // Location and size of data area - address data_base() const { - return (address) _data; - } - int data_size() { - return _data_size; - } - - // Accessors - methodOop method() { return _method; } - - // Get the data at an arbitrary (sort of) data index. - ProfileData* data_at(int data_index); - - // Walk through the data in order. - ProfileData* first_data() { return data_at(first_di()); } - ProfileData* next_data(ProfileData* current); - bool is_valid(ProfileData* current) { return current != NULL; } - - // Convert a dp (data pointer) to a di (data index). - int dp_to_di(address dp) { - return dp - ((address)_data); - } - - address di_to_dp(int di) { - return (address)data_layout_at(di); - } - - // bci to di/dp conversion. - address bci_to_dp(int bci); - int bci_to_di(int bci) { - return dp_to_di(bci_to_dp(bci)); - } - - // Get the data at an arbitrary bci, or NULL if there is none. - ProfileData* bci_to_data(int bci); - - // Same, but try to create an extra_data record if one is needed: - ProfileData* allocate_bci_to_data(int bci) { - ProfileData* data = bci_to_data(bci); - return (data != NULL) ? data : bci_to_extra_data(bci, true); - } - - // Add a handful of extra data records, for trap tracking. - DataLayout* extra_data_base() { return limit_data_position(); } - DataLayout* extra_data_limit() { return (DataLayout*)((address)this + object_size_in_bytes()); } - int extra_data_size() { return (address)extra_data_limit() - - (address)extra_data_base(); } - static DataLayout* next_extra(DataLayout* dp) { return (DataLayout*)((address)dp + in_bytes(DataLayout::cell_offset(0))); } - - // Return (uint)-1 for overflow. - uint trap_count(int reason) const { - assert((uint)reason < _trap_hist_limit, "oob"); - return (int)((_trap_hist._array[reason]+1) & _trap_hist_mask) - 1; - } - // For loops: - static uint trap_reason_limit() { return _trap_hist_limit; } - static uint trap_count_limit() { return _trap_hist_mask; } - uint inc_trap_count(int reason) { - // Count another trap, anywhere in this method. - assert(reason >= 0, "must be single trap"); - if ((uint)reason < _trap_hist_limit) { - uint cnt1 = 1 + _trap_hist._array[reason]; - if ((cnt1 & _trap_hist_mask) != 0) { // if no counter overflow... - _trap_hist._array[reason] = cnt1; - return cnt1; - } else { - return _trap_hist_mask + (++_nof_overflow_traps); - } - } else { - // Could not represent the count in the histogram. - return (++_nof_overflow_traps); - } - } - - uint overflow_trap_count() const { - return _nof_overflow_traps; - } - uint overflow_recompile_count() const { - return _nof_overflow_recompiles; - } - void inc_overflow_recompile_count() { - _nof_overflow_recompiles += 1; - } - uint decompile_count() const { - return _nof_decompiles; - } - void inc_decompile_count() { - _nof_decompiles += 1; - if (decompile_count() > (uint)PerMethodRecompilationCutoff) { - method()->set_not_compilable(CompLevel_full_optimization); - } - } - - // Support for code generation - static ByteSize data_offset() { - return byte_offset_of(methodDataOopDesc, _data[0]); - } - - static ByteSize invocation_counter_offset() { - return byte_offset_of(methodDataOopDesc, _invocation_counter); - } - static ByteSize backedge_counter_offset() { - return byte_offset_of(methodDataOopDesc, _backedge_counter); - } - - // GC support - oop* adr_method() const { return (oop*)&_method; } - bool object_is_parsable() const { return _size != 0; } - void set_object_is_parsable(int object_size_in_bytes) { _size = object_size_in_bytes; } - -#ifndef PRODUCT - // printing support for method data - void print_data_on(outputStream* st); -#endif - - // verification - void verify_data_on(outputStream* st); -}; - -#endif // SHARE_VM_OOPS_METHODDATAOOP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/methodKlass.cpp --- a/src/share/vm/oops/methodKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,356 +0,0 @@ -/* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/javaClasses.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "interpreter/interpreter.hpp" -#include "memory/gcLocker.hpp" -#include "memory/resourceArea.hpp" -#include "memory/universe.inline.hpp" -#include "oops/constMethodKlass.hpp" -#include "oops/klassOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodKlass.hpp" -#include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" -#include "oops/symbol.hpp" -#include "runtime/handles.inline.hpp" - -klassOop methodKlass::create_klass(TRAPS) { - methodKlass o; - KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); - KlassHandle k = base_create_klass(h_this_klass, header_size(), o.vtbl_value(), CHECK_NULL); - // Make sure size calculation is right - assert(k()->size() == align_object_size(header_size()), "wrong size for object"); - java_lang_Class::create_mirror(k, CHECK_NULL); // Allocate mirror - return k(); -} - - -int methodKlass::oop_size(oop obj) const { - assert(obj->is_method(), "must be method oop"); - return methodOop(obj)->object_size(); -} - - -bool methodKlass::oop_is_parsable(oop obj) const { - assert(obj->is_method(), "must be method oop"); - return methodOop(obj)->object_is_parsable(); -} - - -methodOop methodKlass::allocate(constMethodHandle xconst, - AccessFlags access_flags, TRAPS) { - int size = methodOopDesc::object_size(access_flags.is_native()); - KlassHandle h_k(THREAD, as_klassOop()); - assert(xconst()->is_parsable(), "possible publication protocol violation"); - methodOop m = (methodOop)CollectedHeap::permanent_obj_allocate(h_k, size, CHECK_NULL); - assert(!m->is_parsable(), "not expecting parsability yet."); - - No_Safepoint_Verifier no_safepoint; // until m becomes parsable below - m->set_constMethod(xconst()); - m->set_access_flags(access_flags); - m->set_method_size(size); - m->set_name_index(0); - m->set_signature_index(0); -#ifdef CC_INTERP - m->set_result_index(T_VOID); -#endif - m->set_constants(NULL); - m->set_max_stack(0); - m->set_max_locals(0); - m->set_intrinsic_id(vmIntrinsics::_none); - m->set_jfr_towrite(false); - m->set_method_data(NULL); - m->set_interpreter_throwout_count(0); - m->set_vtable_index(methodOopDesc::garbage_vtable_index); - - // Fix and bury in methodOop - m->set_interpreter_entry(NULL); // sets i2i entry and from_int - m->set_adapter_entry(NULL); - m->clear_code(); // from_c/from_i get set to c2i/i2i - - if (access_flags.is_native()) { - m->clear_native_function(); - m->set_signature_handler(NULL); - } - - NOT_PRODUCT(m->set_compiled_invocation_count(0);) - m->set_interpreter_invocation_count(0); - m->invocation_counter()->init(); - m->backedge_counter()->init(); - m->clear_number_of_breakpoints(); - -#ifdef TIERED - m->set_rate(0); - m->set_prev_event_count(0); - m->set_prev_time(0); -#endif - - assert(m->is_parsable(), "must be parsable here."); - assert(m->size() == size, "wrong size for object"); - return m; -} - - -void methodKlass::oop_follow_contents(oop obj) { - assert (obj->is_method(), "object must be method"); - methodOop m = methodOop(obj); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::methodKlassObj never moves. - MarkSweep::mark_and_push(m->adr_constMethod()); - if (m->method_data() != NULL) { - MarkSweep::mark_and_push(m->adr_method_data()); - } -} - -#ifndef SERIALGC -void methodKlass::oop_follow_contents(ParCompactionManager* cm, - oop obj) { - assert (obj->is_method(), "object must be method"); - methodOop m = methodOop(obj); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::methodKlassObj never moves. - PSParallelCompact::mark_and_push(cm, m->adr_constMethod()); -#ifdef COMPILER2 - if (m->method_data() != NULL) { - PSParallelCompact::mark_and_push(cm, m->adr_method_data()); - } -#endif // COMPILER2 -} -#endif // SERIALGC - -int methodKlass::oop_oop_iterate(oop obj, OopClosure* blk) { - assert (obj->is_method(), "object must be method"); - methodOop m = methodOop(obj); - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = m->object_size(); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::methodKlassObj never moves - blk->do_oop(m->adr_constMethod()); - if (m->method_data() != NULL) { - blk->do_oop(m->adr_method_data()); - } - return size; -} - - -int methodKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { - assert (obj->is_method(), "object must be method"); - methodOop m = methodOop(obj); - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = m->object_size(); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::methodKlassObj never moves. - oop* adr; - adr = m->adr_constMethod(); - if (mr.contains(adr)) blk->do_oop(adr); - if (m->method_data() != NULL) { - adr = m->adr_method_data(); - if (mr.contains(adr)) blk->do_oop(adr); - } - return size; -} - - -int methodKlass::oop_adjust_pointers(oop obj) { - assert(obj->is_method(), "should be method"); - methodOop m = methodOop(obj); - // Get size before changing pointers. - // Don't call size() or oop_size() since that is a virtual call. - int size = m->object_size(); - // Performance tweak: We skip iterating over the klass pointer since we - // know that Universe::methodKlassObj never moves. - MarkSweep::adjust_pointer(m->adr_constMethod()); - if (m->method_data() != NULL) { - MarkSweep::adjust_pointer(m->adr_method_data()); - } - return size; -} - -#ifndef SERIALGC -void methodKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { - assert(obj->is_method(), "should be method"); -} - -int methodKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { - assert(obj->is_method(), "should be method"); - methodOop m = methodOop(obj); - PSParallelCompact::adjust_pointer(m->adr_constMethod()); -#ifdef COMPILER2 - if (m->method_data() != NULL) { - PSParallelCompact::adjust_pointer(m->adr_method_data()); - } -#endif // COMPILER2 - return m->object_size(); -} -#endif // SERIALGC - -#ifndef PRODUCT - -// Printing - -void methodKlass::oop_print_on(oop obj, outputStream* st) { - ResourceMark rm; - assert(obj->is_method(), "must be method"); - Klass::oop_print_on(obj, st); - methodOop m = methodOop(obj); - // get the effect of PrintOopAddress, always, for methods: - st->print_cr(" - this oop: "INTPTR_FORMAT, (intptr_t)m); - st->print (" - method holder: "); m->method_holder()->print_value_on(st); st->cr(); - st->print (" - constants: "INTPTR_FORMAT" ", (address)m->constants()); - m->constants()->print_value_on(st); st->cr(); - st->print (" - access: 0x%x ", m->access_flags().as_int()); m->access_flags().print_on(st); st->cr(); - st->print (" - name: "); m->name()->print_value_on(st); st->cr(); - st->print (" - signature: "); m->signature()->print_value_on(st); st->cr(); - st->print_cr(" - max stack: %d", m->max_stack()); - st->print_cr(" - max locals: %d", m->max_locals()); - st->print_cr(" - size of params: %d", m->size_of_parameters()); - st->print_cr(" - method size: %d", m->method_size()); - if (m->intrinsic_id() != vmIntrinsics::_none) - st->print_cr(" - intrinsic id: %d %s", m->intrinsic_id(), vmIntrinsics::name_at(m->intrinsic_id())); - if (m->highest_comp_level() != CompLevel_none) - st->print_cr(" - highest level: %d", m->highest_comp_level()); - st->print_cr(" - vtable index: %d", m->_vtable_index); - st->print_cr(" - i2i entry: " INTPTR_FORMAT, m->interpreter_entry()); - st->print( " - adapters: "); - if (m->adapter() == NULL) - st->print_cr(INTPTR_FORMAT, m->adapter()); - else - m->adapter()->print_adapter_on(st); - st->print_cr(" - compiled entry " INTPTR_FORMAT, m->from_compiled_entry()); - st->print_cr(" - code size: %d", m->code_size()); - if (m->code_size() != 0) { - st->print_cr(" - code start: " INTPTR_FORMAT, m->code_base()); - st->print_cr(" - code end (excl): " INTPTR_FORMAT, m->code_base() + m->code_size()); - } - if (m->method_data() != NULL) { - st->print_cr(" - method data: " INTPTR_FORMAT, (address)m->method_data()); - } - st->print_cr(" - checked ex length: %d", m->checked_exceptions_length()); - if (m->checked_exceptions_length() > 0) { - CheckedExceptionElement* table = m->checked_exceptions_start(); - st->print_cr(" - checked ex start: " INTPTR_FORMAT, table); - if (Verbose) { - for (int i = 0; i < m->checked_exceptions_length(); i++) { - st->print_cr(" - throws %s", m->constants()->printable_name_at(table[i].class_cp_index)); - } - } - } - if (m->has_linenumber_table()) { - u_char* table = m->compressed_linenumber_table(); - st->print_cr(" - linenumber start: " INTPTR_FORMAT, table); - if (Verbose) { - CompressedLineNumberReadStream stream(table); - while (stream.read_pair()) { - st->print_cr(" - line %d: %d", stream.line(), stream.bci()); - } - } - } - st->print_cr(" - localvar length: %d", m->localvariable_table_length()); - if (m->localvariable_table_length() > 0) { - LocalVariableTableElement* table = m->localvariable_table_start(); - st->print_cr(" - localvar start: " INTPTR_FORMAT, table); - if (Verbose) { - for (int i = 0; i < m->localvariable_table_length(); i++) { - int bci = table[i].start_bci; - int len = table[i].length; - const char* name = m->constants()->printable_name_at(table[i].name_cp_index); - const char* desc = m->constants()->printable_name_at(table[i].descriptor_cp_index); - int slot = table[i].slot; - st->print_cr(" - %s %s bci=%d len=%d slot=%d", desc, name, bci, len, slot); - } - } - } - if (m->code() != NULL) { - st->print (" - compiled code: "); - m->code()->print_value_on(st); - } - if (m->is_native()) { - st->print_cr(" - native function: " INTPTR_FORMAT, m->native_function()); - st->print_cr(" - signature handler: " INTPTR_FORMAT, m->signature_handler()); - } -} - -#endif //PRODUCT - -void methodKlass::oop_print_value_on(oop obj, outputStream* st) { - assert(obj->is_method(), "must be method"); - Klass::oop_print_value_on(obj, st); - methodOop m = methodOop(obj); - st->print(" "); - m->name()->print_value_on(st); - st->print(" "); - m->signature()->print_value_on(st); - st->print(" in "); - m->method_holder()->print_value_on(st); - if (WizardMode) st->print("[%d,%d]", m->size_of_parameters(), m->max_locals()); - if (WizardMode && m->code() != NULL) st->print(" ((nmethod*)%p)", m->code()); -} - -const char* methodKlass::internal_name() const { - return "{method}"; -} - - -// Verification - -void methodKlass::oop_verify_on(oop obj, outputStream* st) { - Klass::oop_verify_on(obj, st); - guarantee(obj->is_method(), "object must be method"); - if (!obj->partially_loaded()) { - methodOop m = methodOop(obj); - guarantee(m->is_perm(), "should be in permspace"); - guarantee(m->constMethod()->is_constMethod(), "should be constMethodOop"); - guarantee(m->constMethod()->is_perm(), "should be in permspace"); - methodDataOop method_data = m->method_data(); - guarantee(method_data == NULL || - method_data->is_perm(), "should be in permspace"); - guarantee(method_data == NULL || - method_data->is_methodData(), "should be method data"); - } -} - -bool methodKlass::oop_partially_loaded(oop obj) const { - assert(obj->is_method(), "object must be method"); - methodOop m = methodOop(obj); - constMethodOop xconst = m->constMethod(); - assert(xconst != NULL, "const method must be set"); - constMethodKlass* ck = constMethodKlass::cast(xconst->klass()); - return ck->oop_partially_loaded(xconst); -} - - -void methodKlass::oop_set_partially_loaded(oop obj) { - assert(obj->is_method(), "object must be method"); - methodOop m = methodOop(obj); - constMethodOop xconst = m->constMethod(); - assert(xconst != NULL, "const method must be set"); - constMethodKlass* ck = constMethodKlass::cast(xconst->klass()); - ck->oop_set_partially_loaded(xconst); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/methodKlass.hpp --- a/src/share/vm/oops/methodKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,92 +0,0 @@ -/* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_METHODKLASS_HPP -#define SHARE_VM_OOPS_METHODKLASS_HPP - -#include "oops/klass.hpp" -#include "oops/klassOop.hpp" -#include "oops/methodOop.hpp" - -// a methodKlass is the klass of a methodOop - -class methodKlass : public Klass { - friend class VMStructs; - private: - juint _alloc_size; // allocation profiling support - public: - // Testing - bool oop_is_method() const { return true; } - - // Allocation - DEFINE_ALLOCATE_PERMANENT(methodKlass); - methodOop allocate(constMethodHandle xconst, AccessFlags access_flags, - TRAPS); - static klassOop create_klass(TRAPS); - - // Sizing - int oop_size(oop obj) const; - int klass_oop_size() const { return object_size(); } - - // Casting from klassOop - static methodKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_method(), "cast to methodKlass"); - return (methodKlass*) k->klass_part(); - } - - // Sizing - static int header_size() { return oopDesc::header_size() + sizeof(methodKlass)/HeapWordSize; } - int object_size() const { return align_object_size(header_size()); } - - // Garbage collection - void oop_follow_contents(oop obj); - int oop_adjust_pointers(oop obj); - bool oop_is_parsable(oop obj) const; - - // Parallel Scavenge and Parallel Old - PARALLEL_GC_DECLS - - // Allocation profiling support - juint alloc_size() const { return _alloc_size; } - void set_alloc_size(juint n) { _alloc_size = n; } - - // Iterators - int oop_oop_iterate(oop obj, OopClosure* blk); - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr); - - public: - // Printing - void oop_print_value_on(oop obj, outputStream* st); -#ifndef PRODUCT - void oop_print_on (oop obj, outputStream* st); -#endif //PRODUCT - - // Verify operations - const char* internal_name() const; - void oop_verify_on(oop obj, outputStream* st); - bool oop_partially_loaded(oop obj) const; - void oop_set_partially_loaded(oop obj); -}; - -#endif // SHARE_VM_OOPS_METHODKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/methodOop.cpp --- a/src/share/vm/oops/methodOop.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1562 +0,0 @@ -/* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/systemDictionary.hpp" -#include "code/debugInfoRec.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "interpreter/bytecodeStream.hpp" -#include "interpreter/bytecodeTracer.hpp" -#include "interpreter/bytecodes.hpp" -#include "interpreter/interpreter.hpp" -#include "interpreter/oopMapCache.hpp" -#include "memory/gcLocker.hpp" -#include "memory/generation.hpp" -#include "memory/oopFactory.hpp" -#include "oops/klassOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" -#include "oops/oop.inline.hpp" -#include "oops/symbol.hpp" -#include "prims/jvmtiExport.hpp" -#include "prims/methodHandles.hpp" -#include "prims/nativeLookup.hpp" -#include "runtime/arguments.hpp" -#include "runtime/compilationPolicy.hpp" -#include "runtime/frame.inline.hpp" -#include "runtime/handles.inline.hpp" -#include "runtime/relocator.hpp" -#include "runtime/sharedRuntime.hpp" -#include "runtime/signature.hpp" -#include "utilities/quickSort.hpp" -#include "utilities/xmlstream.hpp" - - -// Implementation of methodOopDesc - -address methodOopDesc::get_i2c_entry() { - assert(_adapter != NULL, "must have"); - return _adapter->get_i2c_entry(); -} - -address methodOopDesc::get_c2i_entry() { - assert(_adapter != NULL, "must have"); - return _adapter->get_c2i_entry(); -} - -address methodOopDesc::get_c2i_unverified_entry() { - assert(_adapter != NULL, "must have"); - return _adapter->get_c2i_unverified_entry(); -} - -char* methodOopDesc::name_and_sig_as_C_string() const { - return name_and_sig_as_C_string(Klass::cast(constants()->pool_holder()), name(), signature()); -} - -char* methodOopDesc::name_and_sig_as_C_string(char* buf, int size) const { - return name_and_sig_as_C_string(Klass::cast(constants()->pool_holder()), name(), signature(), buf, size); -} - -char* methodOopDesc::name_and_sig_as_C_string(Klass* klass, Symbol* method_name, Symbol* signature) { - const char* klass_name = klass->external_name(); - int klass_name_len = (int)strlen(klass_name); - int method_name_len = method_name->utf8_length(); - int len = klass_name_len + 1 + method_name_len + signature->utf8_length(); - char* dest = NEW_RESOURCE_ARRAY(char, len + 1); - strcpy(dest, klass_name); - dest[klass_name_len] = '.'; - strcpy(&dest[klass_name_len + 1], method_name->as_C_string()); - strcpy(&dest[klass_name_len + 1 + method_name_len], signature->as_C_string()); - dest[len] = 0; - return dest; -} - -char* methodOopDesc::name_and_sig_as_C_string(Klass* klass, Symbol* method_name, Symbol* signature, char* buf, int size) { - Symbol* klass_name = klass->name(); - klass_name->as_klass_external_name(buf, size); - int len = (int)strlen(buf); - - if (len < size - 1) { - buf[len++] = '.'; - - method_name->as_C_string(&(buf[len]), size - len); - len = (int)strlen(buf); - - signature->as_C_string(&(buf[len]), size - len); - } - - return buf; -} - -int methodOopDesc::fast_exception_handler_bci_for(KlassHandle ex_klass, int throw_bci, TRAPS) { - // exception table holds quadruple entries of the form (beg_bci, end_bci, handler_bci, klass_index) - // access exception table - ExceptionTable table(this); - int length = table.length(); - // iterate through all entries sequentially - constantPoolHandle pool(THREAD, constants()); - for (int i = 0; i < length; i ++) { - //reacquire the table in case a GC happened - ExceptionTable table(this); - int beg_bci = table.start_pc(i); - int end_bci = table.end_pc(i); - assert(beg_bci <= end_bci, "inconsistent exception table"); - if (beg_bci <= throw_bci && throw_bci < end_bci) { - // exception handler bci range covers throw_bci => investigate further - int handler_bci = table.handler_pc(i); - int klass_index = table.catch_type_index(i); - if (klass_index == 0) { - return handler_bci; - } else if (ex_klass.is_null()) { - return handler_bci; - } else { - // we know the exception class => get the constraint class - // this may require loading of the constraint class; if verification - // fails or some other exception occurs, return handler_bci - klassOop k = pool->klass_at(klass_index, CHECK_(handler_bci)); - KlassHandle klass = KlassHandle(THREAD, k); - assert(klass.not_null(), "klass not loaded"); - if (ex_klass->is_subtype_of(klass())) { - return handler_bci; - } - } - } - } - - return -1; -} - -void methodOopDesc::mask_for(int bci, InterpreterOopMap* mask) { - - Thread* myThread = Thread::current(); - methodHandle h_this(myThread, this); -#ifdef ASSERT - bool has_capability = myThread->is_VM_thread() || - myThread->is_ConcurrentGC_thread() || - myThread->is_GC_task_thread(); - - if (!has_capability) { - if (!VerifyStack && !VerifyLastFrame) { - // verify stack calls this outside VM thread - warning("oopmap should only be accessed by the " - "VM, GC task or CMS threads (or during debugging)"); - InterpreterOopMap local_mask; - instanceKlass::cast(method_holder())->mask_for(h_this, bci, &local_mask); - local_mask.print(); - } - } -#endif - instanceKlass::cast(method_holder())->mask_for(h_this, bci, mask); - return; -} - - -int methodOopDesc::bci_from(address bcp) const { - assert(is_native() && bcp == code_base() || contains(bcp) || is_error_reported(), - err_msg("bcp doesn't belong to this method: bcp: " INTPTR_FORMAT ", method: %s", bcp, name_and_sig_as_C_string())); - return bcp - code_base(); -} - - -// Return (int)bcx if it appears to be a valid BCI. -// Return bci_from((address)bcx) if it appears to be a valid BCP. -// Return -1 otherwise. -// Used by profiling code, when invalid data is a possibility. -// The caller is responsible for validating the methodOop itself. -int methodOopDesc::validate_bci_from_bcx(intptr_t bcx) const { - // keep bci as -1 if not a valid bci - int bci = -1; - if (bcx == 0 || (address)bcx == code_base()) { - // code_size() may return 0 and we allow 0 here - // the method may be native - bci = 0; - } else if (frame::is_bci(bcx)) { - if (bcx < code_size()) { - bci = (int)bcx; - } - } else if (contains((address)bcx)) { - bci = (address)bcx - code_base(); - } - // Assert that if we have dodged any asserts, bci is negative. - assert(bci == -1 || bci == bci_from(bcp_from(bci)), "sane bci if >=0"); - return bci; -} - -address methodOopDesc::bcp_from(int bci) const { - assert((is_native() && bci == 0) || (!is_native() && 0 <= bci && bci < code_size()), "illegal bci"); - address bcp = code_base() + bci; - assert(is_native() && bcp == code_base() || contains(bcp), "bcp doesn't belong to this method"); - return bcp; -} - - -int methodOopDesc::object_size(bool is_native) { - // If native, then include pointers for native_function and signature_handler - int extra_bytes = (is_native) ? 2*sizeof(address*) : 0; - int extra_words = align_size_up(extra_bytes, BytesPerWord) / BytesPerWord; - return align_object_size(header_size() + extra_words); -} - - -Symbol* methodOopDesc::klass_name() const { - klassOop k = method_holder(); - assert(k->is_klass(), "must be klass"); - instanceKlass* ik = (instanceKlass*) k->klass_part(); - return ik->name(); -} - - -void methodOopDesc::set_interpreter_kind() { - int kind = Interpreter::method_kind(methodOop(this)); - assert(kind != Interpreter::invalid, - "interpreter entry must be valid"); - set_interpreter_kind(kind); -} - - -// Attempt to return method oop to original state. Clear any pointers -// (to objects outside the shared spaces). We won't be able to predict -// where they should point in a new JVM. Further initialize some -// entries now in order allow them to be write protected later. - -void methodOopDesc::remove_unshareable_info() { - unlink_method(); - set_interpreter_kind(); -} - - -bool methodOopDesc::was_executed_more_than(int n) { - // Invocation counter is reset when the methodOop is compiled. - // If the method has compiled code we therefore assume it has - // be excuted more than n times. - if (is_accessor() || is_empty_method() || (code() != NULL)) { - // interpreter doesn't bump invocation counter of trivial methods - // compiler does not bump invocation counter of compiled methods - return true; - } - else if (_invocation_counter.carry() || (method_data() != NULL && method_data()->invocation_counter()->carry())) { - // The carry bit is set when the counter overflows and causes - // a compilation to occur. We don't know how many times - // the counter has been reset, so we simply assume it has - // been executed more than n times. - return true; - } else { - return invocation_count() > n; - } -} - -#ifndef PRODUCT -void methodOopDesc::print_invocation_count() { - if (is_static()) tty->print("static "); - if (is_final()) tty->print("final "); - if (is_synchronized()) tty->print("synchronized "); - if (is_native()) tty->print("native "); - method_holder()->klass_part()->name()->print_symbol_on(tty); - tty->print("."); - name()->print_symbol_on(tty); - signature()->print_symbol_on(tty); - - if (WizardMode) { - // dump the size of the byte codes - tty->print(" {%d}", code_size()); - } - tty->cr(); - - tty->print_cr (" interpreter_invocation_count: %8d ", interpreter_invocation_count()); - tty->print_cr (" invocation_counter: %8d ", invocation_count()); - tty->print_cr (" backedge_counter: %8d ", backedge_count()); - if (CountCompiledCalls) { - tty->print_cr (" compiled_invocation_count: %8d ", compiled_invocation_count()); - } - -} -#endif - -// Build a methodDataOop object to hold information about this method -// collected in the interpreter. -void methodOopDesc::build_interpreter_method_data(methodHandle method, TRAPS) { - // Do not profile method if current thread holds the pending list lock, - // which avoids deadlock for acquiring the MethodData_lock. - if (instanceRefKlass::owns_pending_list_lock((JavaThread*)THREAD)) { - return; - } - - // Grab a lock here to prevent multiple - // methodDataOops from being created. - MutexLocker ml(MethodData_lock, THREAD); - if (method->method_data() == NULL) { - methodDataOop method_data = oopFactory::new_methodData(method, CHECK); - method->set_method_data(method_data); - if (PrintMethodData && (Verbose || WizardMode)) { - ResourceMark rm(THREAD); - tty->print("build_interpreter_method_data for "); - method->print_name(tty); - tty->cr(); - // At the end of the run, the MDO, full of data, will be dumped. - } - } -} - -void methodOopDesc::cleanup_inline_caches() { - // The current system doesn't use inline caches in the interpreter - // => nothing to do (keep this method around for future use) -} - - -int methodOopDesc::extra_stack_words() { - // not an inline function, to avoid a header dependency on Interpreter - return extra_stack_entries() * Interpreter::stackElementSize; -} - - -void methodOopDesc::compute_size_of_parameters(Thread *thread) { - ArgumentSizeComputer asc(signature()); - set_size_of_parameters(asc.size() + (is_static() ? 0 : 1)); -} - -#ifdef CC_INTERP -void methodOopDesc::set_result_index(BasicType type) { - _result_index = Interpreter::BasicType_as_index(type); -} -#endif - -BasicType methodOopDesc::result_type() const { - ResultTypeFinder rtf(signature()); - return rtf.type(); -} - - -bool methodOopDesc::is_empty_method() const { - return code_size() == 1 - && *code_base() == Bytecodes::_return; -} - - -bool methodOopDesc::is_vanilla_constructor() const { - // Returns true if this method is a vanilla constructor, i.e. an "" "()V" method - // which only calls the superclass vanilla constructor and possibly does stores of - // zero constants to local fields: - // - // aload_0 - // invokespecial - // indexbyte1 - // indexbyte2 - // - // followed by an (optional) sequence of: - // - // aload_0 - // aconst_null / iconst_0 / fconst_0 / dconst_0 - // putfield - // indexbyte1 - // indexbyte2 - // - // followed by: - // - // return - - assert(name() == vmSymbols::object_initializer_name(), "Should only be called for default constructors"); - assert(signature() == vmSymbols::void_method_signature(), "Should only be called for default constructors"); - int size = code_size(); - // Check if size match - if (size == 0 || size % 5 != 0) return false; - address cb = code_base(); - int last = size - 1; - if (cb[0] != Bytecodes::_aload_0 || cb[1] != Bytecodes::_invokespecial || cb[last] != Bytecodes::_return) { - // Does not call superclass default constructor - return false; - } - // Check optional sequence - for (int i = 4; i < last; i += 5) { - if (cb[i] != Bytecodes::_aload_0) return false; - if (!Bytecodes::is_zero_const(Bytecodes::cast(cb[i+1]))) return false; - if (cb[i+2] != Bytecodes::_putfield) return false; - } - return true; -} - - -bool methodOopDesc::compute_has_loops_flag() { - BytecodeStream bcs(methodOop(this)); - Bytecodes::Code bc; - - while ((bc = bcs.next()) >= 0) { - switch( bc ) { - case Bytecodes::_ifeq: - case Bytecodes::_ifnull: - case Bytecodes::_iflt: - case Bytecodes::_ifle: - case Bytecodes::_ifne: - case Bytecodes::_ifnonnull: - case Bytecodes::_ifgt: - case Bytecodes::_ifge: - case Bytecodes::_if_icmpeq: - case Bytecodes::_if_icmpne: - case Bytecodes::_if_icmplt: - case Bytecodes::_if_icmpgt: - case Bytecodes::_if_icmple: - case Bytecodes::_if_icmpge: - case Bytecodes::_if_acmpeq: - case Bytecodes::_if_acmpne: - case Bytecodes::_goto: - case Bytecodes::_jsr: - if( bcs.dest() < bcs.next_bci() ) _access_flags.set_has_loops(); - break; - - case Bytecodes::_goto_w: - case Bytecodes::_jsr_w: - if( bcs.dest_w() < bcs.next_bci() ) _access_flags.set_has_loops(); - break; - } - } - _access_flags.set_loops_flag_init(); - return _access_flags.has_loops(); -} - - -bool methodOopDesc::is_final_method() const { - // %%% Should return true for private methods also, - // since there is no way to override them. - return is_final() || Klass::cast(method_holder())->is_final(); -} - - -bool methodOopDesc::is_strict_method() const { - return is_strict(); -} - - -bool methodOopDesc::can_be_statically_bound() const { - if (is_final_method()) return true; - return vtable_index() == nonvirtual_vtable_index; -} - - -bool methodOopDesc::is_accessor() const { - if (code_size() != 5) return false; - if (size_of_parameters() != 1) return false; - if (java_code_at(0) != Bytecodes::_aload_0 ) return false; - if (java_code_at(1) != Bytecodes::_getfield) return false; - if (java_code_at(4) != Bytecodes::_areturn && - java_code_at(4) != Bytecodes::_ireturn ) return false; - return true; -} - - -bool methodOopDesc::is_initializer() const { - return name() == vmSymbols::object_initializer_name() || is_static_initializer(); -} - -bool methodOopDesc::has_valid_initializer_flags() const { - return (is_static() || - instanceKlass::cast(method_holder())->major_version() < 51); -} - -bool methodOopDesc::is_static_initializer() const { - // For classfiles version 51 or greater, ensure that the clinit method is - // static. Non-static methods with the name "" are not static - // initializers. (older classfiles exempted for backward compatibility) - return name() == vmSymbols::class_initializer_name() && - has_valid_initializer_flags(); -} - - -objArrayHandle methodOopDesc::resolved_checked_exceptions_impl(methodOop this_oop, TRAPS) { - int length = this_oop->checked_exceptions_length(); - if (length == 0) { // common case - return objArrayHandle(THREAD, Universe::the_empty_class_klass_array()); - } else { - methodHandle h_this(THREAD, this_oop); - objArrayOop m_oop = oopFactory::new_objArray(SystemDictionary::Class_klass(), length, CHECK_(objArrayHandle())); - objArrayHandle mirrors (THREAD, m_oop); - for (int i = 0; i < length; i++) { - CheckedExceptionElement* table = h_this->checked_exceptions_start(); // recompute on each iteration, not gc safe - klassOop k = h_this->constants()->klass_at(table[i].class_cp_index, CHECK_(objArrayHandle())); - assert(Klass::cast(k)->is_subclass_of(SystemDictionary::Throwable_klass()), "invalid exception class"); - mirrors->obj_at_put(i, Klass::cast(k)->java_mirror()); - } - return mirrors; - } -}; - - -int methodOopDesc::line_number_from_bci(int bci) const { - if (bci == SynchronizationEntryBCI) bci = 0; - assert(bci == 0 || 0 <= bci && bci < code_size(), "illegal bci"); - int best_bci = 0; - int best_line = -1; - - if (has_linenumber_table()) { - // The line numbers are a short array of 2-tuples [start_pc, line_number]. - // Not necessarily sorted and not necessarily one-to-one. - CompressedLineNumberReadStream stream(compressed_linenumber_table()); - while (stream.read_pair()) { - if (stream.bci() == bci) { - // perfect match - return stream.line(); - } else { - // update best_bci/line - if (stream.bci() < bci && stream.bci() >= best_bci) { - best_bci = stream.bci(); - best_line = stream.line(); - } - } - } - } - return best_line; -} - - -bool methodOopDesc::is_klass_loaded_by_klass_index(int klass_index) const { - if( constants()->tag_at(klass_index).is_unresolved_klass() ) { - Thread *thread = Thread::current(); - Symbol* klass_name = constants()->klass_name_at(klass_index); - Handle loader(thread, instanceKlass::cast(method_holder())->class_loader()); - Handle prot (thread, Klass::cast(method_holder())->protection_domain()); - return SystemDictionary::find(klass_name, loader, prot, thread) != NULL; - } else { - return true; - } -} - - -bool methodOopDesc::is_klass_loaded(int refinfo_index, bool must_be_resolved) const { - int klass_index = constants()->klass_ref_index_at(refinfo_index); - if (must_be_resolved) { - // Make sure klass is resolved in constantpool. - if (constants()->tag_at(klass_index).is_unresolved_klass()) return false; - } - return is_klass_loaded_by_klass_index(klass_index); -} - - -void methodOopDesc::set_native_function(address function, bool post_event_flag) { - assert(function != NULL, "use clear_native_function to unregister natives"); - assert(!is_method_handle_intrinsic() || function == SharedRuntime::native_method_throw_unsatisfied_link_error_entry(), ""); - address* native_function = native_function_addr(); - - // We can see racers trying to place the same native function into place. Once - // is plenty. - address current = *native_function; - if (current == function) return; - if (post_event_flag && JvmtiExport::should_post_native_method_bind() && - function != NULL) { - // native_method_throw_unsatisfied_link_error_entry() should only - // be passed when post_event_flag is false. - assert(function != - SharedRuntime::native_method_throw_unsatisfied_link_error_entry(), - "post_event_flag mis-match"); - - // post the bind event, and possible change the bind function - JvmtiExport::post_native_method_bind(this, &function); - } - *native_function = function; - // This function can be called more than once. We must make sure that we always - // use the latest registered method -> check if a stub already has been generated. - // If so, we have to make it not_entrant. - nmethod* nm = code(); // Put it into local variable to guard against concurrent updates - if (nm != NULL) { - nm->make_not_entrant(); - } -} - - -bool methodOopDesc::has_native_function() const { - if (is_method_handle_intrinsic()) - return false; // special-cased in SharedRuntime::generate_native_wrapper - address func = native_function(); - return (func != NULL && func != SharedRuntime::native_method_throw_unsatisfied_link_error_entry()); -} - - -void methodOopDesc::clear_native_function() { - // Note: is_method_handle_intrinsic() is allowed here. - set_native_function( - SharedRuntime::native_method_throw_unsatisfied_link_error_entry(), - !native_bind_event_is_interesting); - clear_code(); -} - -address methodOopDesc::critical_native_function() { - methodHandle mh(this); - return NativeLookup::lookup_critical_entry(mh); -} - - -void methodOopDesc::set_signature_handler(address handler) { - address* signature_handler = signature_handler_addr(); - *signature_handler = handler; -} - - -bool methodOopDesc::is_not_compilable(int comp_level) const { - if (number_of_breakpoints() > 0) { - return true; - } - if (is_method_handle_intrinsic()) { - return !is_synthetic(); // the generated adapters must be compiled - } - if (comp_level == CompLevel_any) { - return is_not_c1_compilable() || is_not_c2_compilable(); - } - if (is_c1_compile(comp_level)) { - return is_not_c1_compilable(); - } - if (is_c2_compile(comp_level)) { - return is_not_c2_compilable(); - } - return false; -} - -// call this when compiler finds that this method is not compilable -void methodOopDesc::set_not_compilable(int comp_level, bool report) { - if (PrintCompilation && report) { - ttyLocker ttyl; - tty->print("made not compilable "); - this->print_short_name(tty); - int size = this->code_size(); - if (size > 0) - tty->print(" (%d bytes)", size); - tty->cr(); - } - if ((TraceDeoptimization || LogCompilation) && (xtty != NULL)) { - ttyLocker ttyl; - xtty->begin_elem("make_not_compilable thread='%d'", (int) os::current_thread_id()); - xtty->method(methodOop(this)); - xtty->stamp(); - xtty->end_elem(); - } - if (comp_level == CompLevel_all) { - set_not_c1_compilable(); - set_not_c2_compilable(); - } else { - if (is_c1_compile(comp_level)) { - set_not_c1_compilable(); - } else - if (is_c2_compile(comp_level)) { - set_not_c2_compilable(); - } - } - CompilationPolicy::policy()->disable_compilation(this); -} - -// Revert to using the interpreter and clear out the nmethod -void methodOopDesc::clear_code() { - - // this may be NULL if c2i adapters have not been made yet - // Only should happen at allocate time. - if (_adapter == NULL) { - _from_compiled_entry = NULL; - } else { - _from_compiled_entry = _adapter->get_c2i_entry(); - } - OrderAccess::storestore(); - _from_interpreted_entry = _i2i_entry; - OrderAccess::storestore(); - _code = NULL; -} - -// Called by class data sharing to remove any entry points (which are not shared) -void methodOopDesc::unlink_method() { - _code = NULL; - _i2i_entry = NULL; - _from_interpreted_entry = NULL; - if (is_native()) { - *native_function_addr() = NULL; - set_signature_handler(NULL); - } - NOT_PRODUCT(set_compiled_invocation_count(0);) - invocation_counter()->reset(); - backedge_counter()->reset(); - _adapter = NULL; - _from_compiled_entry = NULL; - assert(_method_data == NULL, "unexpected method data?"); - set_method_data(NULL); - set_interpreter_throwout_count(0); - set_interpreter_invocation_count(0); -} - -// Called when the method_holder is getting linked. Setup entrypoints so the method -// is ready to be called from interpreter, compiler, and vtables. -void methodOopDesc::link_method(methodHandle h_method, TRAPS) { - // If the code cache is full, we may reenter this function for the - // leftover methods that weren't linked. - if (_i2i_entry != NULL) return; - - assert(_adapter == NULL, "init'd to NULL" ); - assert( _code == NULL, "nothing compiled yet" ); - - // Setup interpreter entrypoint - assert(this == h_method(), "wrong h_method()" ); - address entry = Interpreter::entry_for_method(h_method); - assert(entry != NULL, "interpreter entry must be non-null"); - // Sets both _i2i_entry and _from_interpreted_entry - set_interpreter_entry(entry); - if (is_native() && !is_method_handle_intrinsic()) { - set_native_function( - SharedRuntime::native_method_throw_unsatisfied_link_error_entry(), - !native_bind_event_is_interesting); - } - - // Setup compiler entrypoint. This is made eagerly, so we do not need - // special handling of vtables. An alternative is to make adapters more - // lazily by calling make_adapter() from from_compiled_entry() for the - // normal calls. For vtable calls life gets more complicated. When a - // call-site goes mega-morphic we need adapters in all methods which can be - // called from the vtable. We need adapters on such methods that get loaded - // later. Ditto for mega-morphic itable calls. If this proves to be a - // problem we'll make these lazily later. - (void) make_adapters(h_method, CHECK); - - // ONLY USE the h_method now as make_adapter may have blocked - -} - -address methodOopDesc::make_adapters(methodHandle mh, TRAPS) { - // Adapters for compiled code are made eagerly here. They are fairly - // small (generally < 100 bytes) and quick to make (and cached and shared) - // so making them eagerly shouldn't be too expensive. - AdapterHandlerEntry* adapter = AdapterHandlerLibrary::get_adapter(mh); - if (adapter == NULL ) { - THROW_MSG_NULL(vmSymbols::java_lang_VirtualMachineError(), "out of space in CodeCache for adapters"); - } - - mh->set_adapter_entry(adapter); - mh->_from_compiled_entry = adapter->get_c2i_entry(); - return adapter->get_c2i_entry(); -} - -// The verified_code_entry() must be called when a invoke is resolved -// on this method. - -// It returns the compiled code entry point, after asserting not null. -// This function is called after potential safepoints so that nmethod -// or adapter that it points to is still live and valid. -// This function must not hit a safepoint! -address methodOopDesc::verified_code_entry() { - debug_only(No_Safepoint_Verifier nsv;) - nmethod *code = (nmethod *)OrderAccess::load_ptr_acquire(&_code); - if (code == NULL && UseCodeCacheFlushing) { - nmethod *saved_code = CodeCache::find_and_remove_saved_code(this); - if (saved_code != NULL) { - methodHandle method(this); - assert( ! saved_code->is_osr_method(), "should not get here for osr" ); - set_code( method, saved_code ); - } - } - - assert(_from_compiled_entry != NULL, "must be set"); - return _from_compiled_entry; -} - -// Check that if an nmethod ref exists, it has a backlink to this or no backlink at all -// (could be racing a deopt). -// Not inline to avoid circular ref. -bool methodOopDesc::check_code() const { - // cached in a register or local. There's a race on the value of the field. - nmethod *code = (nmethod *)OrderAccess::load_ptr_acquire(&_code); - return code == NULL || (code->method() == NULL) || (code->method() == (methodOop)this && !code->is_osr_method()); -} - -// Install compiled code. Instantly it can execute. -void methodOopDesc::set_code(methodHandle mh, nmethod *code) { - assert( code, "use clear_code to remove code" ); - assert( mh->check_code(), "" ); - - guarantee(mh->adapter() != NULL, "Adapter blob must already exist!"); - - // These writes must happen in this order, because the interpreter will - // directly jump to from_interpreted_entry which jumps to an i2c adapter - // which jumps to _from_compiled_entry. - mh->_code = code; // Assign before allowing compiled code to exec - - int comp_level = code->comp_level(); - // In theory there could be a race here. In practice it is unlikely - // and not worth worrying about. - if (comp_level > mh->highest_comp_level()) { - mh->set_highest_comp_level(comp_level); - } - - OrderAccess::storestore(); -#ifdef SHARK - mh->_from_interpreted_entry = code->insts_begin(); -#else //!SHARK - mh->_from_compiled_entry = code->verified_entry_point(); - OrderAccess::storestore(); - // Instantly compiled code can execute. - if (!mh->is_method_handle_intrinsic()) - mh->_from_interpreted_entry = mh->get_i2c_entry(); -#endif //!SHARK -} - - -bool methodOopDesc::is_overridden_in(klassOop k) const { - instanceKlass* ik = instanceKlass::cast(k); - - if (ik->is_interface()) return false; - - // If method is an interface, we skip it - except if it - // is a miranda method - if (instanceKlass::cast(method_holder())->is_interface()) { - // Check that method is not a miranda method - if (ik->lookup_method(name(), signature()) == NULL) { - // No implementation exist - so miranda method - return false; - } - return true; - } - - assert(ik->is_subclass_of(method_holder()), "should be subklass"); - assert(ik->vtable() != NULL, "vtable should exist"); - if (vtable_index() == nonvirtual_vtable_index) { - return false; - } else { - methodOop vt_m = ik->method_at_vtable(vtable_index()); - return vt_m != methodOop(this); - } -} - - -// give advice about whether this methodOop should be cached or not -bool methodOopDesc::should_not_be_cached() const { - if (is_old()) { - // This method has been redefined. It is either EMCP or obsolete - // and we don't want to cache it because that would pin the method - // down and prevent it from being collectible if and when it - // finishes executing. - return true; - } - - if (mark()->should_not_be_cached()) { - // It is either not safe or not a good idea to cache this - // method at this time because of the state of the embedded - // markOop. See markOop.cpp for the gory details. - return true; - } - - // caching this method should be just fine - return false; -} - -// Constant pool structure for invoke methods: -enum { - _imcp_invoke_name = 1, // utf8: 'invokeExact', etc. - _imcp_invoke_signature, // utf8: (variable Symbol*) - _imcp_limit -}; - -// Test if this method is an MH adapter frame generated by Java code. -// Cf. java/lang/invoke/InvokerBytecodeGenerator -bool methodOopDesc::is_compiled_lambda_form() const { - return intrinsic_id() == vmIntrinsics::_compiledLambdaForm; -} - -// Test if this method is an internal MH primitive method. -bool methodOopDesc::is_method_handle_intrinsic() const { - vmIntrinsics::ID iid = intrinsic_id(); - return (MethodHandles::is_signature_polymorphic(iid) && - MethodHandles::is_signature_polymorphic_intrinsic(iid)); -} - -bool methodOopDesc::has_member_arg() const { - vmIntrinsics::ID iid = intrinsic_id(); - return (MethodHandles::is_signature_polymorphic(iid) && - MethodHandles::has_member_arg(iid)); -} - -// Make an instance of a signature-polymorphic internal MH primitive. -methodHandle methodOopDesc::make_method_handle_intrinsic(vmIntrinsics::ID iid, - Symbol* signature, - TRAPS) { - ResourceMark rm; - methodHandle empty; - - KlassHandle holder = SystemDictionary::MethodHandle_klass(); - Symbol* name = MethodHandles::signature_polymorphic_intrinsic_name(iid); - assert(iid == MethodHandles::signature_polymorphic_name_id(name), ""); - if (TraceMethodHandles) { - tty->print_cr("make_method_handle_intrinsic MH.%s%s", name->as_C_string(), signature->as_C_string()); - } - - // invariant: cp->symbol_at_put is preceded by a refcount increment (more usually a lookup) - name->increment_refcount(); - signature->increment_refcount(); - - int cp_length = _imcp_limit; - constantPoolHandle cp; - { - constantPoolOop cp_oop = oopFactory::new_constantPool(cp_length, IsSafeConc, CHECK_(empty)); - cp = constantPoolHandle(THREAD, cp_oop); - } - cp->symbol_at_put(_imcp_invoke_name, name); - cp->symbol_at_put(_imcp_invoke_signature, signature); - cp->set_preresolution(); - cp->set_pool_holder(holder()); - - // decide on access bits: public or not? - int flags_bits = (JVM_ACC_NATIVE | JVM_ACC_SYNTHETIC | JVM_ACC_FINAL); - bool must_be_static = MethodHandles::is_signature_polymorphic_static(iid); - if (must_be_static) flags_bits |= JVM_ACC_STATIC; - assert((flags_bits & JVM_ACC_PUBLIC) == 0, "do not expose these methods"); - - methodHandle m; - { - methodOop m_oop = oopFactory::new_method(0, accessFlags_from(flags_bits), - 0, 0, 0, 0, IsSafeConc, CHECK_(empty)); - m = methodHandle(THREAD, m_oop); - } - m->set_constants(cp()); - m->set_name_index(_imcp_invoke_name); - m->set_signature_index(_imcp_invoke_signature); - assert(MethodHandles::is_signature_polymorphic_name(m->name()), ""); - assert(m->signature() == signature, ""); -#ifdef CC_INTERP - ResultTypeFinder rtf(signature); - m->set_result_index(rtf.type()); -#endif - m->compute_size_of_parameters(THREAD); - m->init_intrinsic_id(); - assert(m->is_method_handle_intrinsic(), ""); -#ifdef ASSERT - if (!MethodHandles::is_signature_polymorphic(m->intrinsic_id())) m->print(); - assert(MethodHandles::is_signature_polymorphic(m->intrinsic_id()), "must be an invoker"); - assert(m->intrinsic_id() == iid, "correctly predicted iid"); -#endif //ASSERT - - // Finally, set up its entry points. - assert(m->can_be_statically_bound(), ""); - m->set_vtable_index(methodOopDesc::nonvirtual_vtable_index); - m->link_method(m, CHECK_(empty)); - - if (TraceMethodHandles && (Verbose || WizardMode)) - m->print_on(tty); - - return m; -} - -klassOop methodOopDesc::check_non_bcp_klass(klassOop klass) { - if (klass != NULL && Klass::cast(klass)->class_loader() != NULL) { - if (Klass::cast(klass)->oop_is_objArray()) - klass = objArrayKlass::cast(klass)->bottom_klass(); - return klass; - } - return NULL; -} - - -methodHandle methodOopDesc::clone_with_new_data(methodHandle m, u_char* new_code, int new_code_length, - u_char* new_compressed_linenumber_table, int new_compressed_linenumber_size, TRAPS) { - // Code below does not work for native methods - they should never get rewritten anyway - assert(!m->is_native(), "cannot rewrite native methods"); - // Allocate new methodOop - AccessFlags flags = m->access_flags(); - int checked_exceptions_len = m->checked_exceptions_length(); - int localvariable_len = m->localvariable_table_length(); - int exception_table_len = m->exception_table_length(); - // Allocate newm_oop with the is_conc_safe parameter set - // to IsUnsafeConc to indicate that newm_oop is not yet - // safe for concurrent processing by a GC. - methodOop newm_oop = oopFactory::new_method(new_code_length, - flags, - new_compressed_linenumber_size, - localvariable_len, - exception_table_len, - checked_exceptions_len, - IsUnsafeConc, - CHECK_(methodHandle())); - methodHandle newm (THREAD, newm_oop); - NOT_PRODUCT(int nmsz = newm->is_parsable() ? newm->size() : -1;) - int new_method_size = newm->method_size(); - // Create a shallow copy of methodOopDesc part, but be careful to preserve the new constMethodOop - constMethodOop newcm = newm->constMethod(); - NOT_PRODUCT(int ncmsz = newcm->is_parsable() ? newcm->size() : -1;) - int new_const_method_size = newm->constMethod()->object_size(); - - memcpy(newm(), m(), sizeof(methodOopDesc)); - // Create shallow copy of constMethodOopDesc, but be careful to preserve the methodOop - // is_conc_safe is set to false because that is the value of - // is_conc_safe initialzied into newcm and the copy should - // not overwrite that value. During the window during which it is - // tagged as unsafe, some extra work could be needed during precleaning - // or concurrent marking but those phases will be correct. Setting and - // resetting is done in preference to a careful copying into newcm to - // avoid having to know the precise layout of a constMethodOop. - m->constMethod()->set_is_conc_safe(oopDesc::IsUnsafeConc); - assert(m->constMethod()->is_parsable(), "Should remain parsable"); - - // NOTE: this is a reachable object that transiently signals "conc_unsafe" - // However, no allocations are done during this window - // during which it is tagged conc_unsafe, so we are assured that any concurrent - // thread will not wait forever for the object to revert to "conc_safe". - // Further, any such conc_unsafe object will indicate a stable size - // through the transition. - memcpy(newcm, m->constMethod(), sizeof(constMethodOopDesc)); - m->constMethod()->set_is_conc_safe(oopDesc::IsSafeConc); - assert(m->constMethod()->is_parsable(), "Should remain parsable"); - - // Reset correct method/const method, method size, and parameter info - newm->set_constMethod(newcm); - newm->constMethod()->set_code_size(new_code_length); - newm->constMethod()->set_constMethod_size(new_const_method_size); - newm->set_method_size(new_method_size); - assert(newm->code_size() == new_code_length, "check"); - assert(newm->checked_exceptions_length() == checked_exceptions_len, "check"); - assert(newm->exception_table_length() == exception_table_len, "check"); - assert(newm->localvariable_table_length() == localvariable_len, "check"); - // Copy new byte codes - memcpy(newm->code_base(), new_code, new_code_length); - // Copy line number table - if (new_compressed_linenumber_size > 0) { - memcpy(newm->compressed_linenumber_table(), - new_compressed_linenumber_table, - new_compressed_linenumber_size); - } - // Copy checked_exceptions - if (checked_exceptions_len > 0) { - memcpy(newm->checked_exceptions_start(), - m->checked_exceptions_start(), - checked_exceptions_len * sizeof(CheckedExceptionElement)); - } - // Copy exception table - if (exception_table_len > 0) { - memcpy(newm->exception_table_start(), - m->exception_table_start(), - exception_table_len * sizeof(ExceptionTableElement)); - } - // Copy local variable number table - if (localvariable_len > 0) { - memcpy(newm->localvariable_table_start(), - m->localvariable_table_start(), - localvariable_len * sizeof(LocalVariableTableElement)); - } - - // Only set is_conc_safe to true when changes to newcm are - // complete. - assert(!newm->is_parsable() || nmsz < 0 || newm->size() == nmsz, "newm->size() inconsistency"); - assert(!newcm->is_parsable() || ncmsz < 0 || newcm->size() == ncmsz, "newcm->size() inconsistency"); - newcm->set_is_conc_safe(true); - return newm; -} - -vmSymbols::SID methodOopDesc::klass_id_for_intrinsics(klassOop holder) { - // if loader is not the default loader (i.e., != NULL), we can't know the intrinsics - // because we are not loading from core libraries - if (instanceKlass::cast(holder)->class_loader() != NULL) - return vmSymbols::NO_SID; // regardless of name, no intrinsics here - - // see if the klass name is well-known: - Symbol* klass_name = instanceKlass::cast(holder)->name(); - return vmSymbols::find_sid(klass_name); -} - -void methodOopDesc::init_intrinsic_id() { - assert(_intrinsic_id == vmIntrinsics::_none, "do this just once"); - const uintptr_t max_id_uint = right_n_bits((int)(sizeof(_intrinsic_id) * BitsPerByte)); - assert((uintptr_t)vmIntrinsics::ID_LIMIT <= max_id_uint, "else fix size"); - assert(intrinsic_id_size_in_bytes() == sizeof(_intrinsic_id), ""); - - // the klass name is well-known: - vmSymbols::SID klass_id = klass_id_for_intrinsics(method_holder()); - assert(klass_id != vmSymbols::NO_SID, "caller responsibility"); - - // ditto for method and signature: - vmSymbols::SID name_id = vmSymbols::find_sid(name()); - if (klass_id != vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle) - && name_id == vmSymbols::NO_SID) - return; - vmSymbols::SID sig_id = vmSymbols::find_sid(signature()); - if (klass_id != vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle) - && sig_id == vmSymbols::NO_SID) return; - jshort flags = access_flags().as_short(); - - vmIntrinsics::ID id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags); - if (id != vmIntrinsics::_none) { - set_intrinsic_id(id); - return; - } - - // A few slightly irregular cases: - switch (klass_id) { - case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_StrictMath): - // Second chance: check in regular Math. - switch (name_id) { - case vmSymbols::VM_SYMBOL_ENUM_NAME(min_name): - case vmSymbols::VM_SYMBOL_ENUM_NAME(max_name): - case vmSymbols::VM_SYMBOL_ENUM_NAME(sqrt_name): - // pretend it is the corresponding method in the non-strict class: - klass_id = vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_Math); - id = vmIntrinsics::find_id(klass_id, name_id, sig_id, flags); - break; - } - break; - - // Signature-polymorphic methods: MethodHandle.invoke*, InvokeDynamic.*. - case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_MethodHandle): - if (!is_native()) break; - id = MethodHandles::signature_polymorphic_name_id(method_holder(), name()); - if (is_static() != MethodHandles::is_signature_polymorphic_static(id)) - id = vmIntrinsics::_none; - break; - } - - if (id != vmIntrinsics::_none) { - // Set up its iid. It is an alias method. - set_intrinsic_id(id); - return; - } -} - -// These two methods are static since a GC may move the methodOopDesc -bool methodOopDesc::load_signature_classes(methodHandle m, TRAPS) { - if (THREAD->is_Compiler_thread()) { - // There is nothing useful this routine can do from within the Compile thread. - // Hopefully, the signature contains only well-known classes. - // We could scan for this and return true/false, but the caller won't care. - return false; - } - bool sig_is_loaded = true; - Handle class_loader(THREAD, instanceKlass::cast(m->method_holder())->class_loader()); - Handle protection_domain(THREAD, Klass::cast(m->method_holder())->protection_domain()); - ResourceMark rm(THREAD); - Symbol* signature = m->signature(); - for(SignatureStream ss(signature); !ss.is_done(); ss.next()) { - if (ss.is_object()) { - Symbol* sym = ss.as_symbol(CHECK_(false)); - Symbol* name = sym; - klassOop klass = SystemDictionary::resolve_or_null(name, class_loader, - protection_domain, THREAD); - // We are loading classes eagerly. If a ClassNotFoundException or - // a LinkageError was generated, be sure to ignore it. - if (HAS_PENDING_EXCEPTION) { - if (PENDING_EXCEPTION->is_a(SystemDictionary::ClassNotFoundException_klass()) || - PENDING_EXCEPTION->is_a(SystemDictionary::LinkageError_klass())) { - CLEAR_PENDING_EXCEPTION; - } else { - return false; - } - } - if( klass == NULL) { sig_is_loaded = false; } - } - } - return sig_is_loaded; -} - -bool methodOopDesc::has_unloaded_classes_in_signature(methodHandle m, TRAPS) { - Handle class_loader(THREAD, instanceKlass::cast(m->method_holder())->class_loader()); - Handle protection_domain(THREAD, Klass::cast(m->method_holder())->protection_domain()); - ResourceMark rm(THREAD); - Symbol* signature = m->signature(); - for(SignatureStream ss(signature); !ss.is_done(); ss.next()) { - if (ss.type() == T_OBJECT) { - Symbol* name = ss.as_symbol_or_null(); - if (name == NULL) return true; - klassOop klass = SystemDictionary::find(name, class_loader, protection_domain, THREAD); - if (klass == NULL) return true; - } - } - return false; -} - -// Exposed so field engineers can debug VM -void methodOopDesc::print_short_name(outputStream* st) { - ResourceMark rm; -#ifdef PRODUCT - st->print(" %s::", method_holder()->klass_part()->external_name()); -#else - st->print(" %s::", method_holder()->klass_part()->internal_name()); -#endif - name()->print_symbol_on(st); - if (WizardMode) signature()->print_symbol_on(st); - else if (MethodHandles::is_signature_polymorphic(intrinsic_id())) - MethodHandles::print_as_basic_type_signature_on(st, signature(), true); -} - -// This is only done during class loading, so it is OK to assume method_idnum matches the methods() array -static void reorder_based_on_method_index(objArrayOop methods, - objArrayOop annotations, - GrowableArray* temp_array) { - if (annotations == NULL) { - return; - } - - int length = methods->length(); - int i; - // Copy to temp array - temp_array->clear(); - for (i = 0; i < length; i++) { - temp_array->append(annotations->obj_at(i)); - } - - // Copy back using old method indices - for (i = 0; i < length; i++) { - methodOop m = (methodOop) methods->obj_at(i); - annotations->obj_at_put(i, temp_array->at(m->method_idnum())); - } -} - -// Comparer for sorting an object array containing -// methodOops. -// Used non-template method_comparator methods since -// Visual Studio 2003 compiler generates incorrect -// optimized code for it. -static int method_comparator_narrowOop(narrowOop a, narrowOop b) { - methodOop m = (methodOop)oopDesc::decode_heap_oop_not_null(a); - methodOop n = (methodOop)oopDesc::decode_heap_oop_not_null(b); - return m->name()->fast_compare(n->name()); -} -static int method_comparator_oop(oop a, oop b) { - methodOop m = (methodOop)a; - methodOop n = (methodOop)b; - return m->name()->fast_compare(n->name()); -} - -// This is only done during class loading, so it is OK to assume method_idnum matches the methods() array -void methodOopDesc::sort_methods(objArrayOop methods, - objArrayOop methods_annotations, - objArrayOop methods_parameter_annotations, - objArrayOop methods_default_annotations, - bool idempotent) { - int length = methods->length(); - if (length > 1) { - bool do_annotations = false; - if (methods_annotations != NULL || - methods_parameter_annotations != NULL || - methods_default_annotations != NULL) { - do_annotations = true; - } - if (do_annotations) { - // Remember current method ordering so we can reorder annotations - for (int i = 0; i < length; i++) { - methodOop m = (methodOop) methods->obj_at(i); - m->set_method_idnum(i); - } - } - { - No_Safepoint_Verifier nsv; - if (UseCompressedOops) { - QuickSort::sort((narrowOop*)(methods->base()), length, method_comparator_narrowOop, idempotent); - } else { - QuickSort::sort((oop*)(methods->base()), length, method_comparator_oop, idempotent); - } - if (UseConcMarkSweepGC) { - // For CMS we need to dirty the cards for the array - BarrierSet* bs = Universe::heap()->barrier_set(); - assert(bs->has_write_ref_array_opt(), "Barrier set must have ref array opt"); - bs->write_ref_array(methods->base(), length); - } - } - - // Sort annotations if necessary - assert(methods_annotations == NULL || methods_annotations->length() == methods->length(), ""); - assert(methods_parameter_annotations == NULL || methods_parameter_annotations->length() == methods->length(), ""); - assert(methods_default_annotations == NULL || methods_default_annotations->length() == methods->length(), ""); - if (do_annotations) { - ResourceMark rm; - // Allocate temporary storage - GrowableArray* temp_array = new GrowableArray(length); - reorder_based_on_method_index(methods, methods_annotations, temp_array); - reorder_based_on_method_index(methods, methods_parameter_annotations, temp_array); - reorder_based_on_method_index(methods, methods_default_annotations, temp_array); - } - - // Reset method ordering - for (int i = 0; i < length; i++) { - methodOop m = (methodOop) methods->obj_at(i); - m->set_method_idnum(i); - } - } -} - - -//----------------------------------------------------------------------------------- -// Non-product code - -#ifndef PRODUCT -class SignatureTypePrinter : public SignatureTypeNames { - private: - outputStream* _st; - bool _use_separator; - - void type_name(const char* name) { - if (_use_separator) _st->print(", "); - _st->print(name); - _use_separator = true; - } - - public: - SignatureTypePrinter(Symbol* signature, outputStream* st) : SignatureTypeNames(signature) { - _st = st; - _use_separator = false; - } - - void print_parameters() { _use_separator = false; iterate_parameters(); } - void print_returntype() { _use_separator = false; iterate_returntype(); } -}; - - -void methodOopDesc::print_name(outputStream* st) { - Thread *thread = Thread::current(); - ResourceMark rm(thread); - SignatureTypePrinter sig(signature(), st); - st->print("%s ", is_static() ? "static" : "virtual"); - sig.print_returntype(); - st->print(" %s.", method_holder()->klass_part()->internal_name()); - name()->print_symbol_on(st); - st->print("("); - sig.print_parameters(); - st->print(")"); -} - - -void methodOopDesc::print_codes_on(outputStream* st) const { - print_codes_on(0, code_size(), st); -} - -void methodOopDesc::print_codes_on(int from, int to, outputStream* st) const { - Thread *thread = Thread::current(); - ResourceMark rm(thread); - methodHandle mh (thread, (methodOop)this); - BytecodeStream s(mh); - s.set_interval(from, to); - BytecodeTracer::set_closure(BytecodeTracer::std_closure()); - while (s.next() >= 0) BytecodeTracer::trace(mh, s.bcp(), st); -} -#endif // not PRODUCT - - -// Simple compression of line number tables. We use a regular compressed stream, except that we compress deltas -// between (bci,line) pairs since they are smaller. If (bci delta, line delta) fits in (5-bit unsigned, 3-bit unsigned) -// we save it as one byte, otherwise we write a 0xFF escape character and use regular compression. 0x0 is used -// as end-of-stream terminator. - -void CompressedLineNumberWriteStream::write_pair_regular(int bci_delta, int line_delta) { - // bci and line number does not compress into single byte. - // Write out escape character and use regular compression for bci and line number. - write_byte((jubyte)0xFF); - write_signed_int(bci_delta); - write_signed_int(line_delta); -} - -// See comment in methodOop.hpp which explains why this exists. -#if defined(_M_AMD64) && _MSC_VER >= 1400 -#pragma optimize("", off) -void CompressedLineNumberWriteStream::write_pair(int bci, int line) { - write_pair_inline(bci, line); -} -#pragma optimize("", on) -#endif - -CompressedLineNumberReadStream::CompressedLineNumberReadStream(u_char* buffer) : CompressedReadStream(buffer) { - _bci = 0; - _line = 0; -}; - - -bool CompressedLineNumberReadStream::read_pair() { - jubyte next = read_byte(); - // Check for terminator - if (next == 0) return false; - if (next == 0xFF) { - // Escape character, regular compression used - _bci += read_signed_int(); - _line += read_signed_int(); - } else { - // Single byte compression used - _bci += next >> 3; - _line += next & 0x7; - } - return true; -} - - -Bytecodes::Code methodOopDesc::orig_bytecode_at(int bci) const { - BreakpointInfo* bp = instanceKlass::cast(method_holder())->breakpoints(); - for (; bp != NULL; bp = bp->next()) { - if (bp->match(this, bci)) { - return bp->orig_bytecode(); - } - } - ShouldNotReachHere(); - return Bytecodes::_shouldnotreachhere; -} - -void methodOopDesc::set_orig_bytecode_at(int bci, Bytecodes::Code code) { - assert(code != Bytecodes::_breakpoint, "cannot patch breakpoints this way"); - BreakpointInfo* bp = instanceKlass::cast(method_holder())->breakpoints(); - for (; bp != NULL; bp = bp->next()) { - if (bp->match(this, bci)) { - bp->set_orig_bytecode(code); - // and continue, in case there is more than one - } - } -} - -void methodOopDesc::set_breakpoint(int bci) { - instanceKlass* ik = instanceKlass::cast(method_holder()); - BreakpointInfo *bp = new BreakpointInfo(this, bci); - bp->set_next(ik->breakpoints()); - ik->set_breakpoints(bp); - // do this last: - bp->set(this); -} - -static void clear_matches(methodOop m, int bci) { - instanceKlass* ik = instanceKlass::cast(m->method_holder()); - BreakpointInfo* prev_bp = NULL; - BreakpointInfo* next_bp; - for (BreakpointInfo* bp = ik->breakpoints(); bp != NULL; bp = next_bp) { - next_bp = bp->next(); - // bci value of -1 is used to delete all breakpoints in method m (ex: clear_all_breakpoint). - if (bci >= 0 ? bp->match(m, bci) : bp->match(m)) { - // do this first: - bp->clear(m); - // unhook it - if (prev_bp != NULL) - prev_bp->set_next(next_bp); - else - ik->set_breakpoints(next_bp); - delete bp; - // When class is redefined JVMTI sets breakpoint in all versions of EMCP methods - // at same location. So we have multiple matching (method_index and bci) - // BreakpointInfo nodes in BreakpointInfo list. We should just delete one - // breakpoint for clear_breakpoint request and keep all other method versions - // BreakpointInfo for future clear_breakpoint request. - // bcivalue of -1 is used to clear all breakpoints (see clear_all_breakpoints) - // which is being called when class is unloaded. We delete all the Breakpoint - // information for all versions of method. We may not correctly restore the original - // bytecode in all method versions, but that is ok. Because the class is being unloaded - // so these methods won't be used anymore. - if (bci >= 0) { - break; - } - } else { - // This one is a keeper. - prev_bp = bp; - } - } -} - -void methodOopDesc::clear_breakpoint(int bci) { - assert(bci >= 0, ""); - clear_matches(this, bci); -} - -void methodOopDesc::clear_all_breakpoints() { - clear_matches(this, -1); -} - - -int methodOopDesc::invocation_count() { - if (TieredCompilation) { - const methodDataOop mdo = method_data(); - if (invocation_counter()->carry() || ((mdo != NULL) ? mdo->invocation_counter()->carry() : false)) { - return InvocationCounter::count_limit; - } else { - return invocation_counter()->count() + ((mdo != NULL) ? mdo->invocation_counter()->count() : 0); - } - } else { - return invocation_counter()->count(); - } -} - -int methodOopDesc::backedge_count() { - if (TieredCompilation) { - const methodDataOop mdo = method_data(); - if (backedge_counter()->carry() || ((mdo != NULL) ? mdo->backedge_counter()->carry() : false)) { - return InvocationCounter::count_limit; - } else { - return backedge_counter()->count() + ((mdo != NULL) ? mdo->backedge_counter()->count() : 0); - } - } else { - return backedge_counter()->count(); - } -} - -int methodOopDesc::highest_comp_level() const { - methodDataOop mdo = method_data(); - if (mdo != NULL) { - return mdo->highest_comp_level(); - } else { - return CompLevel_none; - } -} - -int methodOopDesc::highest_osr_comp_level() const { - methodDataOop mdo = method_data(); - if (mdo != NULL) { - return mdo->highest_osr_comp_level(); - } else { - return CompLevel_none; - } -} - -void methodOopDesc::set_highest_comp_level(int level) { - methodDataOop mdo = method_data(); - if (mdo != NULL) { - mdo->set_highest_comp_level(level); - } -} - -void methodOopDesc::set_highest_osr_comp_level(int level) { - methodDataOop mdo = method_data(); - if (mdo != NULL) { - mdo->set_highest_osr_comp_level(level); - } -} - -BreakpointInfo::BreakpointInfo(methodOop m, int bci) { - _bci = bci; - _name_index = m->name_index(); - _signature_index = m->signature_index(); - _orig_bytecode = (Bytecodes::Code) *m->bcp_from(_bci); - if (_orig_bytecode == Bytecodes::_breakpoint) - _orig_bytecode = m->orig_bytecode_at(_bci); - _next = NULL; -} - -void BreakpointInfo::set(methodOop method) { -#ifdef ASSERT - { - Bytecodes::Code code = (Bytecodes::Code) *method->bcp_from(_bci); - if (code == Bytecodes::_breakpoint) - code = method->orig_bytecode_at(_bci); - assert(orig_bytecode() == code, "original bytecode must be the same"); - } -#endif - *method->bcp_from(_bci) = Bytecodes::_breakpoint; - method->incr_number_of_breakpoints(); - SystemDictionary::notice_modification(); - { - // Deoptimize all dependents on this method - Thread *thread = Thread::current(); - HandleMark hm(thread); - methodHandle mh(thread, method); - Universe::flush_dependents_on_method(mh); - } -} - -void BreakpointInfo::clear(methodOop method) { - *method->bcp_from(_bci) = orig_bytecode(); - assert(method->number_of_breakpoints() > 0, "must not go negative"); - method->decr_number_of_breakpoints(); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/methodOop.hpp --- a/src/share/vm/oops/methodOop.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,903 +0,0 @@ -/* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_METHODOOP_HPP -#define SHARE_VM_OOPS_METHODOOP_HPP - -#include "classfile/vmSymbols.hpp" -#include "code/compressedStream.hpp" -#include "compiler/oopMap.hpp" -#include "interpreter/invocationCounter.hpp" -#include "oops/constMethodOop.hpp" -#include "oops/constantPoolOop.hpp" -#include "oops/instanceKlass.hpp" -#include "oops/oop.hpp" -#include "oops/typeArrayOop.hpp" -#include "utilities/accessFlags.hpp" -#include "utilities/growableArray.hpp" - -// A methodOop represents a Java method. -// -// Memory layout (each line represents a word). Note that most applications load thousands of methods, -// so keeping the size of this structure small has a big impact on footprint. -// -// We put all oops and method_size first for better gc cache locality. -// -// The actual bytecodes are inlined after the end of the methodOopDesc struct. -// -// There are bits in the access_flags telling whether inlined tables are present. -// Note that accessing the line number and local variable tables is not performance critical at all. -// Accessing the checked exceptions table is used by reflection, so we put that last to make access -// to it fast. -// -// The line number table is compressed and inlined following the byte codes. It is found as the first -// byte following the byte codes. The checked exceptions table and the local variable table are inlined -// after the line number table, and indexed from the end of the method. We do not compress the checked -// exceptions table since the average length is less than 2, and do not bother to compress the local -// variable table either since it is mostly absent. -// -// Note that native_function and signature_handler has to be at fixed offsets (required by the interpreter) -// -// |------------------------------------------------------| -// | header | -// | klass | -// |------------------------------------------------------| -// | constMethodOop (oop) | -// |------------------------------------------------------| -// | methodData (oop) | -// | interp_invocation_count | -// |------------------------------------------------------| -// | access_flags | -// | vtable_index | -// |------------------------------------------------------| -// | result_index (C++ interpreter only) | -// |------------------------------------------------------| -// | method_size | max_stack | -// | max_locals | size_of_parameters | -// |------------------------------------------------------| -// |intrinsic_id| flags | throwout_count | -// |------------------------------------------------------| -// | num_breakpoints | (unused) | -// |------------------------------------------------------| -// | invocation_counter | -// | backedge_counter | -// |------------------------------------------------------| -// | prev_time (tiered only, 64 bit wide) | -// | | -// |------------------------------------------------------| -// | rate (tiered) | -// |------------------------------------------------------| -// | code (pointer) | -// | i2i (pointer) | -// | adapter (pointer) | -// | from_compiled_entry (pointer) | -// | from_interpreted_entry (pointer) | -// |------------------------------------------------------| -// | native_function (present only if native) | -// | signature_handler (present only if native) | -// |------------------------------------------------------| - - -class CheckedExceptionElement; -class LocalVariableTableElement; -class AdapterHandlerEntry; -class methodDataOopDesc; - -class methodOopDesc : public oopDesc { - friend class methodKlass; - friend class VMStructs; - private: - constMethodOop _constMethod; // Method read-only data. - methodDataOop _method_data; - int _interpreter_invocation_count; // Count of times invoked (reused as prev_event_count in tiered) - AccessFlags _access_flags; // Access flags - int _vtable_index; // vtable index of this method (see VtableIndexFlag) - // note: can have vtables with >2**16 elements (because of inheritance) -#ifdef CC_INTERP - int _result_index; // C++ interpreter needs for converting results to/from stack -#endif - u2 _method_size; // size of this object - u2 _max_stack; // Maximum number of entries on the expression stack - u2 _max_locals; // Number of local variables used by this method - u2 _size_of_parameters; // size of the parameter block (receiver + arguments) in words - u1 _intrinsic_id; // vmSymbols::intrinsic_id (0 == _none) - u1 _jfr_towrite : 1, // Flags - _force_inline : 1, - _hidden : 1, - _dont_inline : 1, - : 4; - u2 _interpreter_throwout_count; // Count of times method was exited via exception while interpreting - u2 _number_of_breakpoints; // fullspeed debugging support - InvocationCounter _invocation_counter; // Incremented before each activation of the method - used to trigger frequency-based optimizations - InvocationCounter _backedge_counter; // Incremented before each backedge taken - used to trigger frequencey-based optimizations - -#ifdef TIERED - jlong _prev_time; // Previous time the rate was acquired - float _rate; // Events (invocation and backedge counter increments) per millisecond -#endif - -#ifndef PRODUCT - int _compiled_invocation_count; // Number of nmethod invocations so far (for perf. debugging) -#endif - // Entry point for calling both from and to the interpreter. - address _i2i_entry; // All-args-on-stack calling convention - // Adapter blob (i2c/c2i) for this methodOop. Set once when method is linked. - AdapterHandlerEntry* _adapter; - // Entry point for calling from compiled code, to compiled code if it exists - // or else the interpreter. - volatile address _from_compiled_entry; // Cache of: _code ? _code->entry_point() : _adapter->c2i_entry() - // The entry point for calling both from and to compiled code is - // "_code->entry_point()". Because of tiered compilation and de-opt, this - // field can come and go. It can transition from NULL to not-null at any - // time (whenever a compile completes). It can transition from not-null to - // NULL only at safepoints (because of a de-opt). - nmethod* volatile _code; // Points to the corresponding piece of native code - volatile address _from_interpreted_entry; // Cache of _code ? _adapter->i2c_entry() : _i2i_entry - - public: - - // accessors for instance variables - constMethodOop constMethod() const { return _constMethod; } - void set_constMethod(constMethodOop xconst) { oop_store_without_check((oop*)&_constMethod, (oop)xconst); } - - - static address make_adapters(methodHandle mh, TRAPS); - volatile address from_compiled_entry() const { return (address)OrderAccess::load_ptr_acquire(&_from_compiled_entry); } - volatile address from_interpreted_entry() const{ return (address)OrderAccess::load_ptr_acquire(&_from_interpreted_entry); } - - // access flag - AccessFlags access_flags() const { return _access_flags; } - void set_access_flags(AccessFlags flags) { _access_flags = flags; } - - // name - Symbol* name() const { return constants()->symbol_at(name_index()); } - int name_index() const { return constMethod()->name_index(); } - void set_name_index(int index) { constMethod()->set_name_index(index); } - - // signature - Symbol* signature() const { return constants()->symbol_at(signature_index()); } - int signature_index() const { return constMethod()->signature_index(); } - void set_signature_index(int index) { constMethod()->set_signature_index(index); } - - // generics support - Symbol* generic_signature() const { int idx = generic_signature_index(); return ((idx != 0) ? constants()->symbol_at(idx) : (Symbol*)NULL); } - int generic_signature_index() const { return constMethod()->generic_signature_index(); } - void set_generic_signature_index(int index) { constMethod()->set_generic_signature_index(index); } - - // annotations support - typeArrayOop annotations() const { return instanceKlass::cast(method_holder())->get_method_annotations_of(method_idnum()); } - typeArrayOop parameter_annotations() const { return instanceKlass::cast(method_holder())->get_method_parameter_annotations_of(method_idnum()); } - typeArrayOop annotation_default() const { return instanceKlass::cast(method_holder())->get_method_default_annotations_of(method_idnum()); } - -#ifdef CC_INTERP - void set_result_index(BasicType type); - int result_index() { return _result_index; } -#endif - - // Helper routine: get klass name + "." + method name + signature as - // C string, for the purpose of providing more useful NoSuchMethodErrors - // and fatal error handling. The string is allocated in resource - // area if a buffer is not provided by the caller. - char* name_and_sig_as_C_string() const; - char* name_and_sig_as_C_string(char* buf, int size) const; - - // Static routine in the situations we don't have a methodOop - static char* name_and_sig_as_C_string(Klass* klass, Symbol* method_name, Symbol* signature); - static char* name_and_sig_as_C_string(Klass* klass, Symbol* method_name, Symbol* signature, char* buf, int size); - - Bytecodes::Code java_code_at(int bci) const { - return Bytecodes::java_code_at(this, bcp_from(bci)); - } - Bytecodes::Code code_at(int bci) const { - return Bytecodes::code_at(this, bcp_from(bci)); - } - - // JVMTI breakpoints - Bytecodes::Code orig_bytecode_at(int bci) const; - void set_orig_bytecode_at(int bci, Bytecodes::Code code); - void set_breakpoint(int bci); - void clear_breakpoint(int bci); - void clear_all_breakpoints(); - // Tracking number of breakpoints, for fullspeed debugging. - // Only mutated by VM thread. - u2 number_of_breakpoints() const { return _number_of_breakpoints; } - void incr_number_of_breakpoints() { ++_number_of_breakpoints; } - void decr_number_of_breakpoints() { --_number_of_breakpoints; } - // Initialization only - void clear_number_of_breakpoints() { _number_of_breakpoints = 0; } - - // index into instanceKlass methods() array - // note: also used by jfr - u2 method_idnum() const { return constMethod()->method_idnum(); } - void set_method_idnum(u2 idnum) { constMethod()->set_method_idnum(idnum); } - - // code size - int code_size() const { return constMethod()->code_size(); } - - // method size - int method_size() const { return _method_size; } - void set_method_size(int size) { - assert(0 <= size && size < (1 << 16), "invalid method size"); - _method_size = size; - } - - // constant pool for klassOop holding this method - constantPoolOop constants() const { return constMethod()->constants(); } - void set_constants(constantPoolOop c) { constMethod()->set_constants(c); } - - // max stack - // return original max stack size for method verification - int verifier_max_stack() const { return _max_stack; } - int max_stack() const { return _max_stack + extra_stack_entries(); } - void set_max_stack(int size) { _max_stack = size; } - - // max locals - int max_locals() const { return _max_locals; } - void set_max_locals(int size) { _max_locals = size; } - - int highest_comp_level() const; - void set_highest_comp_level(int level); - int highest_osr_comp_level() const; - void set_highest_osr_comp_level(int level); - - // Count of times method was exited via exception while interpreting - void interpreter_throwout_increment() { - if (_interpreter_throwout_count < 65534) { - _interpreter_throwout_count++; - } - } - - int interpreter_throwout_count() const { return _interpreter_throwout_count; } - void set_interpreter_throwout_count(int count) { _interpreter_throwout_count = count; } - - // size of parameters - int size_of_parameters() const { return _size_of_parameters; } - - bool has_stackmap_table() const { - return constMethod()->has_stackmap_table(); - } - - typeArrayOop stackmap_data() const { - return constMethod()->stackmap_data(); - } - - void set_stackmap_data(typeArrayOop sd) { - constMethod()->set_stackmap_data(sd); - } - - // exception handler table - bool has_exception_handler() const - { return constMethod()->has_exception_handler(); } - int exception_table_length() const - { return constMethod()->exception_table_length(); } - ExceptionTableElement* exception_table_start() const - { return constMethod()->exception_table_start(); } - - // Finds the first entry point bci of an exception handler for an - // exception of klass ex_klass thrown at throw_bci. A value of NULL - // for ex_klass indicates that the exception klass is not known; in - // this case it matches any constraint class. Returns -1 if the - // exception cannot be handled in this method. The handler - // constraint classes are loaded if necessary. Note that this may - // throw an exception if loading of the constraint classes causes - // an IllegalAccessError (bugid 4307310) or an OutOfMemoryError. - // If an exception is thrown, returns the bci of the - // exception handler which caused the exception to be thrown, which - // is needed for proper retries. See, for example, - // InterpreterRuntime::exception_handler_for_exception. - int fast_exception_handler_bci_for(KlassHandle ex_klass, int throw_bci, TRAPS); - - // method data access - methodDataOop method_data() const { - return _method_data; - } - void set_method_data(methodDataOop data) { - oop_store_without_check((oop*)&_method_data, (oop)data); - } - - // invocation counter - InvocationCounter* invocation_counter() { return &_invocation_counter; } - InvocationCounter* backedge_counter() { return &_backedge_counter; } - -#ifdef TIERED - // We are reusing interpreter_invocation_count as a holder for the previous event count! - // We can do that since interpreter_invocation_count is not used in tiered. - int prev_event_count() const { return _interpreter_invocation_count; } - void set_prev_event_count(int count) { _interpreter_invocation_count = count; } - jlong prev_time() const { return _prev_time; } - void set_prev_time(jlong time) { _prev_time = time; } - float rate() const { return _rate; } - void set_rate(float rate) { _rate = rate; } -#endif - - int invocation_count(); - int backedge_count(); - - bool was_executed_more_than(int n); - bool was_never_executed() { return !was_executed_more_than(0); } - - static void build_interpreter_method_data(methodHandle method, TRAPS); - - int interpreter_invocation_count() { - if (TieredCompilation) return invocation_count(); - else return _interpreter_invocation_count; - } - void set_interpreter_invocation_count(int count) { _interpreter_invocation_count = count; } - int increment_interpreter_invocation_count() { - if (TieredCompilation) ShouldNotReachHere(); - return ++_interpreter_invocation_count; - } - -#ifndef PRODUCT - int compiled_invocation_count() const { return _compiled_invocation_count; } - void set_compiled_invocation_count(int count) { _compiled_invocation_count = count; } -#endif // not PRODUCT - - // Clear (non-shared space) pointers which could not be relevant - // if this (shared) method were mapped into another JVM. - void remove_unshareable_info(); - - // nmethod/verified compiler entry - address verified_code_entry(); - bool check_code() const; // Not inline to avoid circular ref - nmethod* volatile code() const { assert( check_code(), "" ); return (nmethod *)OrderAccess::load_ptr_acquire(&_code); } - void clear_code(); // Clear out any compiled code - static void set_code(methodHandle mh, nmethod* code); - void set_adapter_entry(AdapterHandlerEntry* adapter) { _adapter = adapter; } - address get_i2c_entry(); - address get_c2i_entry(); - address get_c2i_unverified_entry(); - AdapterHandlerEntry* adapter() { return _adapter; } - // setup entry points - void link_method(methodHandle method, TRAPS); - // clear entry points. Used by sharing code - void unlink_method(); - - // vtable index - enum VtableIndexFlag { - // Valid vtable indexes are non-negative (>= 0). - // These few negative values are used as sentinels. - highest_unused_vtable_index_value = -5, - invalid_vtable_index = -4, // distinct from any valid vtable index - garbage_vtable_index = -3, // not yet linked; no vtable layout yet - nonvirtual_vtable_index = -2 // there is no need for vtable dispatch - // 6330203 Note: Do not use -1, which was overloaded with many meanings. - }; - DEBUG_ONLY(bool valid_vtable_index() const { return _vtable_index >= nonvirtual_vtable_index; }) - int vtable_index() const { assert(valid_vtable_index(), ""); - return _vtable_index; } - void set_vtable_index(int index) { _vtable_index = index; } - - // interpreter entry - address interpreter_entry() const { return _i2i_entry; } - // Only used when first initialize so we can set _i2i_entry and _from_interpreted_entry - void set_interpreter_entry(address entry) { _i2i_entry = entry; _from_interpreted_entry = entry; } - int interpreter_kind(void) { - return constMethod()->interpreter_kind(); - } - void set_interpreter_kind(); - void set_interpreter_kind(int kind) { - constMethod()->set_interpreter_kind(kind); - } - - // native function (used for native methods only) - enum { - native_bind_event_is_interesting = true - }; - address native_function() const { return *(native_function_addr()); } - address critical_native_function(); - - // Must specify a real function (not NULL). - // Use clear_native_function() to unregister. - void set_native_function(address function, bool post_event_flag); - bool has_native_function() const; - void clear_native_function(); - - // signature handler (used for native methods only) - address signature_handler() const { return *(signature_handler_addr()); } - void set_signature_handler(address handler); - - // Interpreter oopmap support - void mask_for(int bci, InterpreterOopMap* mask); - -#ifndef PRODUCT - // operations on invocation counter - void print_invocation_count(); -#endif - - // byte codes - void set_code(address code) { return constMethod()->set_code(code); } - address code_base() const { return constMethod()->code_base(); } - bool contains(address bcp) const { return constMethod()->contains(bcp); } - - // prints byte codes - void print_codes() const { print_codes_on(tty); } - void print_codes_on(outputStream* st) const PRODUCT_RETURN; - void print_codes_on(int from, int to, outputStream* st) const PRODUCT_RETURN; - - // checked exceptions - int checked_exceptions_length() const - { return constMethod()->checked_exceptions_length(); } - CheckedExceptionElement* checked_exceptions_start() const - { return constMethod()->checked_exceptions_start(); } - - // localvariable table - bool has_localvariable_table() const - { return constMethod()->has_localvariable_table(); } - int localvariable_table_length() const - { return constMethod()->localvariable_table_length(); } - LocalVariableTableElement* localvariable_table_start() const - { return constMethod()->localvariable_table_start(); } - - bool has_linenumber_table() const - { return constMethod()->has_linenumber_table(); } - u_char* compressed_linenumber_table() const - { return constMethod()->compressed_linenumber_table(); } - - // method holder (the klassOop holding this method) - klassOop method_holder() const { return constants()->pool_holder(); } - - void compute_size_of_parameters(Thread *thread); // word size of parameters (receiver if any + arguments) - Symbol* klass_name() const; // returns the name of the method holder - BasicType result_type() const; // type of the method result - int result_type_index() const; // type index of the method result - bool is_returning_oop() const { BasicType r = result_type(); return (r == T_OBJECT || r == T_ARRAY); } - bool is_returning_fp() const { BasicType r = result_type(); return (r == T_FLOAT || r == T_DOUBLE); } - - // Checked exceptions thrown by this method (resolved to mirrors) - objArrayHandle resolved_checked_exceptions(TRAPS) { return resolved_checked_exceptions_impl(this, THREAD); } - - // Access flags - bool is_public() const { return access_flags().is_public(); } - bool is_private() const { return access_flags().is_private(); } - bool is_protected() const { return access_flags().is_protected(); } - bool is_package_private() const { return !is_public() && !is_private() && !is_protected(); } - bool is_static() const { return access_flags().is_static(); } - bool is_final() const { return access_flags().is_final(); } - bool is_synchronized() const { return access_flags().is_synchronized();} - bool is_native() const { return access_flags().is_native(); } - bool is_abstract() const { return access_flags().is_abstract(); } - bool is_strict() const { return access_flags().is_strict(); } - bool is_synthetic() const { return access_flags().is_synthetic(); } - - // returns true if contains only return operation - bool is_empty_method() const; - - // returns true if this is a vanilla constructor - bool is_vanilla_constructor() const; - - // checks method and its method holder - bool is_final_method() const; - bool is_strict_method() const; - - // true if method needs no dynamic dispatch (final and/or no vtable entry) - bool can_be_statically_bound() const; - - // returns true if the method has any backward branches. - bool has_loops() { - return access_flags().loops_flag_init() ? access_flags().has_loops() : compute_has_loops_flag(); - }; - - bool compute_has_loops_flag(); - - bool has_jsrs() { - return access_flags().has_jsrs(); - }; - void set_has_jsrs() { - _access_flags.set_has_jsrs(); - } - - // returns true if the method has any monitors. - bool has_monitors() const { return is_synchronized() || access_flags().has_monitor_bytecodes(); } - bool has_monitor_bytecodes() const { return access_flags().has_monitor_bytecodes(); } - - void set_has_monitor_bytecodes() { _access_flags.set_has_monitor_bytecodes(); } - - // monitor matching. This returns a conservative estimate of whether the monitorenter/monitorexit bytecodes - // propererly nest in the method. It might return false, even though they actually nest properly, since the info. - // has not been computed yet. - bool guaranteed_monitor_matching() const { return access_flags().is_monitor_matching(); } - void set_guaranteed_monitor_matching() { _access_flags.set_monitor_matching(); } - - // returns true if the method is an accessor function (setter/getter). - bool is_accessor() const; - - // returns true if the method is an initializer ( or ). - bool is_initializer() const; - - // returns true if the method is static OR if the classfile version < 51 - bool has_valid_initializer_flags() const; - - // returns true if the method name is and the method has - // valid static initializer flags. - bool is_static_initializer() const; - - // compiled code support - // NOTE: code() is inherently racy as deopt can be clearing code - // simultaneously. Use with caution. - bool has_compiled_code() const { return code() != NULL; } - - // sizing - static int object_size(bool is_native); - static int header_size() { return sizeof(methodOopDesc)/HeapWordSize; } - int object_size() const { return method_size(); } - - bool object_is_parsable() const { return method_size() > 0; } - - // interpreter support - static ByteSize const_offset() { return byte_offset_of(methodOopDesc, _constMethod ); } - static ByteSize access_flags_offset() { return byte_offset_of(methodOopDesc, _access_flags ); } -#ifdef CC_INTERP - static ByteSize result_index_offset() { return byte_offset_of(methodOopDesc, _result_index ); } -#endif /* CC_INTERP */ - static ByteSize size_of_locals_offset() { return byte_offset_of(methodOopDesc, _max_locals ); } - static ByteSize size_of_parameters_offset() { return byte_offset_of(methodOopDesc, _size_of_parameters); } - static ByteSize from_compiled_offset() { return byte_offset_of(methodOopDesc, _from_compiled_entry); } - static ByteSize code_offset() { return byte_offset_of(methodOopDesc, _code); } - static ByteSize invocation_counter_offset() { return byte_offset_of(methodOopDesc, _invocation_counter); } - static ByteSize backedge_counter_offset() { return byte_offset_of(methodOopDesc, _backedge_counter); } - static ByteSize method_data_offset() { - return byte_offset_of(methodOopDesc, _method_data); - } - static ByteSize interpreter_invocation_counter_offset() { return byte_offset_of(methodOopDesc, _interpreter_invocation_count); } -#ifndef PRODUCT - static ByteSize compiled_invocation_counter_offset() { return byte_offset_of(methodOopDesc, _compiled_invocation_count); } -#endif // not PRODUCT - static ByteSize native_function_offset() { return in_ByteSize(sizeof(methodOopDesc)); } - static ByteSize from_interpreted_offset() { return byte_offset_of(methodOopDesc, _from_interpreted_entry ); } - static ByteSize interpreter_entry_offset() { return byte_offset_of(methodOopDesc, _i2i_entry ); } - static ByteSize signature_handler_offset() { return in_ByteSize(sizeof(methodOopDesc) + wordSize); } - static ByteSize max_stack_offset() { return byte_offset_of(methodOopDesc, _max_stack ); } - - // for code generation - static int method_data_offset_in_bytes() { return offset_of(methodOopDesc, _method_data); } - static int interpreter_invocation_counter_offset_in_bytes() - { return offset_of(methodOopDesc, _interpreter_invocation_count); } - static int intrinsic_id_offset_in_bytes() { return offset_of(methodOopDesc, _intrinsic_id); } - static int intrinsic_id_size_in_bytes() { return sizeof(u1); } - - // Static methods that are used to implement member methods where an exposed this pointer - // is needed due to possible GCs - static objArrayHandle resolved_checked_exceptions_impl(methodOop this_oop, TRAPS); - - // Returns the byte code index from the byte code pointer - int bci_from(address bcp) const; - address bcp_from(int bci) const; - int validate_bci_from_bcx(intptr_t bcx) const; - - // Returns the line number for a bci if debugging information for the method is prowided, - // -1 is returned otherwise. - int line_number_from_bci(int bci) const; - - // Reflection support - bool is_overridden_in(klassOop k) const; - - // JSR 292 support - bool is_method_handle_intrinsic() const; // MethodHandles::is_signature_polymorphic_intrinsic(intrinsic_id) - bool is_compiled_lambda_form() const; // intrinsic_id() == vmIntrinsics::_compiledLambdaForm - bool has_member_arg() const; // intrinsic_id() == vmIntrinsics::_linkToSpecial, etc. - static methodHandle make_method_handle_intrinsic(vmIntrinsics::ID iid, // _invokeBasic, _linkToVirtual - Symbol* signature, //anything at all - TRAPS); - static klassOop check_non_bcp_klass(klassOop klass); - // these operate only on invoke methods: - // presize interpreter frames for extra interpreter stack entries, if needed - // method handles want to be able to push a few extra values (e.g., a bound receiver), and - // invokedynamic sometimes needs to push a bootstrap method, call site, and arglist, - // all without checking for a stack overflow - static int extra_stack_entries() { return EnableInvokeDynamic ? 2 : 0; } - static int extra_stack_words(); // = extra_stack_entries() * Interpreter::stackElementSize() - - // RedefineClasses() support: - bool is_old() const { return access_flags().is_old(); } - void set_is_old() { _access_flags.set_is_old(); } - bool is_obsolete() const { return access_flags().is_obsolete(); } - void set_is_obsolete() { _access_flags.set_is_obsolete(); } - // see the definition in methodOop.cpp for the gory details - bool should_not_be_cached() const; - - // JVMTI Native method prefixing support: - bool is_prefixed_native() const { return access_flags().is_prefixed_native(); } - void set_is_prefixed_native() { _access_flags.set_is_prefixed_native(); } - - // Rewriting support - static methodHandle clone_with_new_data(methodHandle m, u_char* new_code, int new_code_length, - u_char* new_compressed_linenumber_table, int new_compressed_linenumber_size, TRAPS); - - // Get this method's jmethodID -- allocate if it doesn't exist - jmethodID jmethod_id() { methodHandle this_h(this); - return instanceKlass::get_jmethod_id(method_holder(), this_h); } - - // Lookup the jmethodID for this method. Return NULL if not found. - // NOTE that this function can be called from a signal handler - // (see AsyncGetCallTrace support for Forte Analyzer) and this - // needs to be async-safe. No allocation should be done and - // so handles are not used to avoid deadlock. - jmethodID find_jmethod_id_or_null() { return instanceKlass::cast(method_holder())->jmethod_id_or_null(this); } - - // JNI static invoke cached itable index accessors - int cached_itable_index() { return instanceKlass::cast(method_holder())->cached_itable_index(method_idnum()); } - void set_cached_itable_index(int index) { instanceKlass::cast(method_holder())->set_cached_itable_index(method_idnum(), index); } - - // Support for inlining of intrinsic methods - vmIntrinsics::ID intrinsic_id() const { return (vmIntrinsics::ID) _intrinsic_id; } - void set_intrinsic_id(vmIntrinsics::ID id) { _intrinsic_id = (u1) id; } - - // Helper routines for intrinsic_id() and vmIntrinsics::method(). - void init_intrinsic_id(); // updates from _none if a match - static vmSymbols::SID klass_id_for_intrinsics(klassOop holder); - - bool jfr_towrite() { return _jfr_towrite; } - void set_jfr_towrite(bool towrite) { _jfr_towrite = towrite; } - - bool force_inline() { return _force_inline; } - void set_force_inline(bool x) { _force_inline = x; } - bool dont_inline() { return _dont_inline; } - void set_dont_inline(bool x) { _dont_inline = x; } - bool is_hidden() { return _hidden; } - void set_hidden(bool x) { _hidden = x; } - - // On-stack replacement support - bool has_osr_nmethod(int level, bool match_level) { - return instanceKlass::cast(method_holder())->lookup_osr_nmethod(this, InvocationEntryBci, level, match_level) != NULL; - } - - nmethod* lookup_osr_nmethod_for(int bci, int level, bool match_level) { - return instanceKlass::cast(method_holder())->lookup_osr_nmethod(this, bci, level, match_level); - } - - // Inline cache support - void cleanup_inline_caches(); - - // Find if klass for method is loaded - bool is_klass_loaded_by_klass_index(int klass_index) const; - bool is_klass_loaded(int refinfo_index, bool must_be_resolved = false) const; - - // Indicates whether compilation failed earlier for this method, or - // whether it is not compilable for another reason like having a - // breakpoint set in it. - bool is_not_compilable(int comp_level = CompLevel_any) const; - void set_not_compilable(int comp_level = CompLevel_all, bool report = true); - void set_not_compilable_quietly(int comp_level = CompLevel_all) { - set_not_compilable(comp_level, false); - } - bool is_not_osr_compilable(int comp_level = CompLevel_any) const { - return is_not_compilable(comp_level) || access_flags().is_not_osr_compilable(); - } - void set_not_osr_compilable() { _access_flags.set_not_osr_compilable(); } - bool is_not_c1_compilable() const { return access_flags().is_not_c1_compilable(); } - void set_not_c1_compilable() { _access_flags.set_not_c1_compilable(); } - bool is_not_c2_compilable() const { return access_flags().is_not_c2_compilable(); } - void set_not_c2_compilable() { _access_flags.set_not_c2_compilable(); } - - // Background compilation support - bool queued_for_compilation() const { return access_flags().queued_for_compilation(); } - void set_queued_for_compilation() { _access_flags.set_queued_for_compilation(); } - void clear_queued_for_compilation() { _access_flags.clear_queued_for_compilation(); } - - // Resolve all classes in signature, return 'true' if successful - static bool load_signature_classes(methodHandle m, TRAPS); - - // Return if true if not all classes references in signature, including return type, has been loaded - static bool has_unloaded_classes_in_signature(methodHandle m, TRAPS); - - // Printing - void print_short_name(outputStream* st = tty) /*PRODUCT_RETURN*/; // prints as klassname::methodname; Exposed so field engineers can debug VM - void print_name(outputStream* st = tty) PRODUCT_RETURN; // prints as "virtual void foo(int)" - - // Helper routine used for method sorting - static void sort_methods(objArrayOop methods, - objArrayOop methods_annotations, - objArrayOop methods_parameter_annotations, - objArrayOop methods_default_annotations, - bool idempotent = false); - - // size of parameters - void set_size_of_parameters(int size) { _size_of_parameters = size; } - private: - - // Inlined elements - address* native_function_addr() const { assert(is_native(), "must be native"); return (address*) (this+1); } - address* signature_handler_addr() const { return native_function_addr() + 1; } - - // Garbage collection support - oop* adr_constMethod() const { return (oop*)&_constMethod; } - oop* adr_method_data() const { return (oop*)&_method_data; } -}; - - -// Utility class for compressing line number tables - -class CompressedLineNumberWriteStream: public CompressedWriteStream { - private: - int _bci; - int _line; - public: - // Constructor - CompressedLineNumberWriteStream(int initial_size) : CompressedWriteStream(initial_size), _bci(0), _line(0) {} - CompressedLineNumberWriteStream(u_char* buffer, int initial_size) : CompressedWriteStream(buffer, initial_size), _bci(0), _line(0) {} - - // Write (bci, line number) pair to stream - void write_pair_regular(int bci_delta, int line_delta); - - inline void write_pair_inline(int bci, int line) { - int bci_delta = bci - _bci; - int line_delta = line - _line; - _bci = bci; - _line = line; - // Skip (0,0) deltas - they do not add information and conflict with terminator. - if (bci_delta == 0 && line_delta == 0) return; - // Check if bci is 5-bit and line number 3-bit unsigned. - if (((bci_delta & ~0x1F) == 0) && ((line_delta & ~0x7) == 0)) { - // Compress into single byte. - jubyte value = ((jubyte) bci_delta << 3) | (jubyte) line_delta; - // Check that value doesn't match escape character. - if (value != 0xFF) { - write_byte(value); - return; - } - } - write_pair_regular(bci_delta, line_delta); - } - -// Windows AMD64 + Apr 2005 PSDK with /O2 generates bad code for write_pair. -// Disabling optimization doesn't work for methods in header files -// so we force it to call through the non-optimized version in the .cpp. -// It's gross, but it's the only way we can ensure that all callers are -// fixed. _MSC_VER is defined by the windows compiler -#if defined(_M_AMD64) && _MSC_VER >= 1400 - void write_pair(int bci, int line); -#else - void write_pair(int bci, int line) { write_pair_inline(bci, line); } -#endif - - // Write end-of-stream marker - void write_terminator() { write_byte(0); } -}; - - -// Utility class for decompressing line number tables - -class CompressedLineNumberReadStream: public CompressedReadStream { - private: - int _bci; - int _line; - public: - // Constructor - CompressedLineNumberReadStream(u_char* buffer); - // Read (bci, line number) pair from stream. Returns false at end-of-stream. - bool read_pair(); - // Accessing bci and line number (after calling read_pair) - int bci() const { return _bci; } - int line() const { return _line; } -}; - - -/// Fast Breakpoints. - -// If this structure gets more complicated (because bpts get numerous), -// move it into its own header. - -// There is presently no provision for concurrent access -// to breakpoint lists, which is only OK for JVMTI because -// breakpoints are written only at safepoints, and are read -// concurrently only outside of safepoints. - -class BreakpointInfo : public CHeapObj { - friend class VMStructs; - private: - Bytecodes::Code _orig_bytecode; - int _bci; - u2 _name_index; // of method - u2 _signature_index; // of method - BreakpointInfo* _next; // simple storage allocation - - public: - BreakpointInfo(methodOop m, int bci); - - // accessors - Bytecodes::Code orig_bytecode() { return _orig_bytecode; } - void set_orig_bytecode(Bytecodes::Code code) { _orig_bytecode = code; } - int bci() { return _bci; } - - BreakpointInfo* next() const { return _next; } - void set_next(BreakpointInfo* n) { _next = n; } - - // helps for searchers - bool match(const methodOopDesc* m, int bci) { - return bci == _bci && match(m); - } - - bool match(const methodOopDesc* m) { - return _name_index == m->name_index() && - _signature_index == m->signature_index(); - } - - void set(methodOop method); - void clear(methodOop method); -}; - -// Utility class for access exception handlers -class ExceptionTable : public StackObj { - private: - ExceptionTableElement* _table; - u2 _length; - - public: - ExceptionTable(methodOop m) { - if (m->has_exception_handler()) { - _table = m->exception_table_start(); - _length = m->exception_table_length(); - } else { - _table = NULL; - _length = 0; - } - } - - int length() const { - return _length; - } - - u2 start_pc(int idx) const { - assert(idx < _length, "out of bounds"); - return _table[idx].start_pc; - } - - void set_start_pc(int idx, u2 value) { - assert(idx < _length, "out of bounds"); - _table[idx].start_pc = value; - } - - u2 end_pc(int idx) const { - assert(idx < _length, "out of bounds"); - return _table[idx].end_pc; - } - - void set_end_pc(int idx, u2 value) { - assert(idx < _length, "out of bounds"); - _table[idx].end_pc = value; - } - - u2 handler_pc(int idx) const { - assert(idx < _length, "out of bounds"); - return _table[idx].handler_pc; - } - - void set_handler_pc(int idx, u2 value) { - assert(idx < _length, "out of bounds"); - _table[idx].handler_pc = value; - } - - u2 catch_type_index(int idx) const { - assert(idx < _length, "out of bounds"); - return _table[idx].catch_type_index; - } - - void set_catch_type_index(int idx, u2 value) { - assert(idx < _length, "out of bounds"); - _table[idx].catch_type_index = value; - } -}; - -#endif // SHARE_VM_OOPS_METHODOOP_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/objArrayKlass.cpp --- a/src/share/vm/oops/objArrayKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/objArrayKlass.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -23,17 +23,19 @@ */ #include "precompiled.hpp" +#include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" #include "gc_implementation/shared/markSweep.inline.hpp" #include "gc_interface/collectedHeap.inline.hpp" #include "memory/genOopClosures.inline.hpp" +#include "memory/metadataFactory.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" #include "oops/instanceKlass.hpp" +#include "oops/klass.inline.hpp" #include "oops/objArrayKlass.hpp" #include "oops/objArrayKlass.inline.hpp" -#include "oops/objArrayKlassKlass.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.inline2.hpp" @@ -42,6 +44,7 @@ #include "runtime/mutexLocker.hpp" #include "utilities/copy.hpp" #ifndef SERIALGC +#include "gc_implementation/concurrentMarkSweep/cmsOopClosures.inline.hpp" #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #include "gc_implementation/g1/g1OopClosures.inline.hpp" #include "gc_implementation/g1/g1RemSet.inline.hpp" @@ -53,6 +56,131 @@ #include "oops/oop.pcgc.inline.hpp" #endif +objArrayKlass* objArrayKlass::allocate(ClassLoaderData* loader_data, int n, KlassHandle klass_handle, Symbol* name, TRAPS) { + assert(objArrayKlass::header_size() <= InstanceKlass::header_size(), + "array klasses must be same size as InstanceKlass"); + + int size = arrayKlass::static_size(objArrayKlass::header_size()); + + return new (loader_data, size, THREAD) objArrayKlass(n, klass_handle, name); +} + +Klass* objArrayKlass::allocate_objArray_klass(ClassLoaderData* loader_data, + int n, KlassHandle element_klass, TRAPS) { + + // Eagerly allocate the direct array supertype. + KlassHandle super_klass = KlassHandle(); + if (!Universe::is_bootstrapping() || SystemDictionary::Object_klass_loaded()) { + KlassHandle element_super (THREAD, element_klass->super()); + if (element_super.not_null()) { + // The element type has a direct super. E.g., String[] has direct super of Object[]. + super_klass = KlassHandle(THREAD, element_super->array_klass_or_null()); + bool supers_exist = super_klass.not_null(); + // Also, see if the element has secondary supertypes. + // We need an array type for each. + Array* element_supers = element_klass->secondary_supers(); + for( int i = element_supers->length()-1; i >= 0; i-- ) { + Klass* elem_super = element_supers->at(i); + if (Klass::cast(elem_super)->array_klass_or_null() == NULL) { + supers_exist = false; + break; + } + } + if (!supers_exist) { + // Oops. Not allocated yet. Back out, allocate it, and retry. +#ifndef PRODUCT + if (WizardMode) { + tty->print_cr("Must retry array klass creation for depth %d",n); + } +#endif + KlassHandle ek; + { + MutexUnlocker mu(MultiArray_lock); + MutexUnlocker mc(Compile_lock); // for vtables + Klass* sk = element_super->array_klass(CHECK_0); + super_klass = KlassHandle(THREAD, sk); + for( int i = element_supers->length()-1; i >= 0; i-- ) { + KlassHandle elem_super (THREAD, element_supers->at(i)); + elem_super->array_klass(CHECK_0); + } + // Now retry from the beginning + Klass* klass_oop = element_klass->array_klass(n, CHECK_0); + // Create a handle because the enclosing brace, when locking + // can cause a gc. Better to have this function return a Handle. + ek = KlassHandle(THREAD, klass_oop); + } // re-lock + return ek(); + } + } else { + // The element type is already Object. Object[] has direct super of Object. + super_klass = KlassHandle(THREAD, SystemDictionary::Object_klass()); + } + } + + // Create type name for klass. + Symbol* name = NULL; + if (!element_klass->oop_is_instance() || + (name = InstanceKlass::cast(element_klass())->array_name()) == NULL) { + + ResourceMark rm(THREAD); + char *name_str = element_klass->name()->as_C_string(); + int len = element_klass->name()->utf8_length(); + char *new_str = NEW_RESOURCE_ARRAY(char, len + 4); + int idx = 0; + new_str[idx++] = '['; + if (element_klass->oop_is_instance()) { // it could be an array or simple type + new_str[idx++] = 'L'; + } + memcpy(&new_str[idx], name_str, len * sizeof(char)); + idx += len; + if (element_klass->oop_is_instance()) { + new_str[idx++] = ';'; + } + new_str[idx++] = '\0'; + name = SymbolTable::new_permanent_symbol(new_str, CHECK_0); + if (element_klass->oop_is_instance()) { + InstanceKlass* ik = InstanceKlass::cast(element_klass()); + ik->set_array_name(name); + } + } + + // Initialize instance variables + objArrayKlass* oak = objArrayKlass::allocate(loader_data, n, element_klass, name, CHECK_0); + + // Add all classes to our internal class loader list here, + // including classes in the bootstrap (NULL) class loader. + // GC walks these as strong roots. + loader_data->add_class(oak); + + // Call complete_create_array_klass after all instance variables has been initialized. + arrayKlass::complete_create_array_klass(oak, super_klass, CHECK_0); + + return oak; +} + +objArrayKlass::objArrayKlass(int n, KlassHandle element_klass, Symbol* name) : arrayKlass(name) { + this->set_dimension(n); + this->set_element_klass(element_klass()); + // decrement refcount because object arrays are not explicitly freed. The + // InstanceKlass array_name() keeps the name counted while the klass is + // loaded. + name->decrement_refcount(); + + Klass* bk; + if (element_klass->oop_is_objArray()) { + bk = objArrayKlass::cast(element_klass())->bottom_klass(); + } else { + bk = element_klass(); + } + assert(bk != NULL && (Klass::cast(bk)->oop_is_instance() || Klass::cast(bk)->oop_is_typeArray()), "invalid bottom klass"); + this->set_bottom_klass(bk); + this->set_class_loader_data(bk->class_loader_data()); + + this->set_layout_helper(array_layout_helper(T_OBJECT)); + assert(this->oop_is_array(), "sanity"); + assert(this->oop_is_objArray(), "sanity"); +} + int objArrayKlass::oop_size(oop obj) const { assert(obj->is_objArray(), "must be object array"); return objArrayOop(obj)->object_size(); @@ -62,10 +190,8 @@ if (length >= 0) { if (length <= arrayOopDesc::max_array_length(T_OBJECT)) { int size = objArrayOopDesc::object_size(length); - KlassHandle h_k(THREAD, as_klassOop()); - objArrayOop a = (objArrayOop)CollectedHeap::array_allocate(h_k, size, length, CHECK_NULL); - assert(a->is_parsable(), "Can't publish unless parsable"); - return a; + KlassHandle h_k(THREAD, this); + return (objArrayOop)CollectedHeap::array_allocate(h_k, size, length, CHECK_NULL); } else { report_java_out_of_memory("Requested array size exceeds VM limit"); JvmtiExport::post_array_size_exhausted(); @@ -85,14 +211,12 @@ KlassHandle h_lower_dimension(THREAD, lower_dimension()); // If length < 0 allocate will throw an exception. objArrayOop array = allocate(length, CHECK_NULL); - assert(array->is_parsable(), "Don't handlize unless parsable"); objArrayHandle h_array (THREAD, array); if (rank > 1) { if (length != 0) { for (int index = 0; index < length; index++) { arrayKlass* ak = arrayKlass::cast(h_lower_dimension()); oop sub_array = ak->multi_allocate(rank-1, &sizes[1], CHECK_NULL); - assert(sub_array->is_parsable(), "Don't publish until parsable"); h_array->obj_at_put(index, sub_array); } } else { @@ -128,8 +252,8 @@ Copy::conjoint_oops_atomic(src, dst, length); } else { // We have to make sure all elements conform to the destination array - klassOop bound = objArrayKlass::cast(d->klass())->element_klass(); - klassOop stype = objArrayKlass::cast(s->klass())->element_klass(); + Klass* bound = objArrayKlass::cast(d->klass())->element_klass(); + Klass* stype = objArrayKlass::cast(s->klass())->element_klass(); if (stype == bound || Klass::cast(stype)->is_subtype_of(bound)) { // elements are guaranteed to be subtypes, so no check necessary bs->write_ref_array_pre(dst, length); @@ -203,21 +327,13 @@ } -klassOop objArrayKlass::array_klass_impl(bool or_null, int n, TRAPS) { - objArrayKlassHandle h_this(THREAD, as_klassOop()); - return array_klass_impl(h_this, or_null, n, CHECK_NULL); -} - - -klassOop objArrayKlass::array_klass_impl(objArrayKlassHandle this_oop, bool or_null, int n, TRAPS) { +Klass* objArrayKlass::array_klass_impl(bool or_null, int n, TRAPS) { - assert(this_oop->dimension() <= n, "check order of chain"); - int dimension = this_oop->dimension(); - if (dimension == n) - return this_oop(); + assert(dimension() <= n, "check order of chain"); + int dim = dimension(); + if (dim == n) return this; - objArrayKlassHandle ak (THREAD, this_oop->higher_dimension()); - if (ak.is_null()) { + if (higher_dimension() == NULL) { if (or_null) return NULL; ResourceMark rm; @@ -228,17 +344,15 @@ MutexLocker mu(MultiArray_lock, THREAD); // Check if another thread beat us - ak = objArrayKlassHandle(THREAD, this_oop->higher_dimension()); - if( ak.is_null() ) { + if (higher_dimension() == NULL) { // Create multi-dim klass object and link them together - klassOop new_klass = - objArrayKlassKlass::cast(Universe::objArrayKlassKlassObj())-> - allocate_objArray_klass(dimension + 1, this_oop, CHECK_NULL); - ak = objArrayKlassHandle(THREAD, new_klass); - ak->set_lower_dimension(this_oop()); + Klass* k = + objArrayKlass::allocate_objArray_klass(class_loader_data(), dim + 1, this, CHECK_NULL); + objArrayKlass* ak = objArrayKlass::cast(k); + ak->set_lower_dimension(this); OrderAccess::storestore(); - this_oop->set_higher_dimension(ak()); + set_higher_dimension(ak); assert(ak->oop_is_objArray(), "incorrect initialization of objArrayKlass"); } } @@ -246,58 +360,58 @@ CHECK_UNHANDLED_OOPS_ONLY(Thread::current()->clear_unhandled_oops()); } + objArrayKlass *ak = objArrayKlass::cast(higher_dimension()); if (or_null) { return ak->array_klass_or_null(n); } return ak->array_klass(n, CHECK_NULL); } -klassOop objArrayKlass::array_klass_impl(bool or_null, TRAPS) { +Klass* objArrayKlass::array_klass_impl(bool or_null, TRAPS) { return array_klass_impl(or_null, dimension() + 1, CHECK_NULL); } bool objArrayKlass::can_be_primary_super_slow() const { - if (!bottom_klass()->klass_part()->can_be_primary_super()) + if (!bottom_klass()->can_be_primary_super()) // array of interfaces return false; else return Klass::can_be_primary_super_slow(); } -objArrayOop objArrayKlass::compute_secondary_supers(int num_extra_slots, TRAPS) { +GrowableArray* objArrayKlass::compute_secondary_supers(int num_extra_slots) { // interfaces = { cloneable_klass, serializable_klass, elemSuper[], ... }; - objArrayOop es = Klass::cast(element_klass())->secondary_supers(); - objArrayHandle elem_supers (THREAD, es); - int num_elem_supers = elem_supers.is_null() ? 0 : elem_supers->length(); + Array* elem_supers = Klass::cast(element_klass())->secondary_supers(); + int num_elem_supers = elem_supers == NULL ? 0 : elem_supers->length(); int num_secondaries = num_extra_slots + 2 + num_elem_supers; if (num_secondaries == 2) { // Must share this for correct bootstrapping! - return Universe::the_array_interfaces_array(); + set_secondary_supers(Universe::the_array_interfaces_array()); + return NULL; } else { - objArrayOop sec_oop = oopFactory::new_system_objArray(num_secondaries, CHECK_NULL); - objArrayHandle secondaries(THREAD, sec_oop); - secondaries->obj_at_put(num_extra_slots+0, SystemDictionary::Cloneable_klass()); - secondaries->obj_at_put(num_extra_slots+1, SystemDictionary::Serializable_klass()); + GrowableArray* secondaries = new GrowableArray(num_elem_supers+2); + secondaries->push(SystemDictionary::Cloneable_klass()); + secondaries->push(SystemDictionary::Serializable_klass()); for (int i = 0; i < num_elem_supers; i++) { - klassOop elem_super = (klassOop) elem_supers->obj_at(i); - klassOop array_super = elem_super->klass_part()->array_klass_or_null(); + Klass* elem_super = (Klass*) elem_supers->at(i); + Klass* array_super = elem_super->array_klass_or_null(); assert(array_super != NULL, "must already have been created"); - secondaries->obj_at_put(num_extra_slots+2+i, array_super); + secondaries->push(array_super); } - return secondaries(); + return secondaries; } } -bool objArrayKlass::compute_is_subtype_of(klassOop k) { - if (!k->klass_part()->oop_is_objArray()) +bool objArrayKlass::compute_is_subtype_of(Klass* k) { + if (!k->oop_is_objArray()) return arrayKlass::compute_is_subtype_of(k); objArrayKlass* oak = objArrayKlass::cast(k); - return element_klass()->klass_part()->is_subtype_of(oak->element_klass()); + return element_klass()->is_subtype_of(oak->element_klass()); } void objArrayKlass::initialize(TRAPS) { - Klass::cast(bottom_klass())->initialize(THREAD); // dispatches to either instanceKlass or typeArrayKlass + Klass::cast(bottom_klass())->initialize(THREAD); // dispatches to either InstanceKlass or typeArrayKlass } #define ObjArrayKlass_SPECIALIZED_OOP_ITERATE(T, a, p, do_oop) \ @@ -344,7 +458,7 @@ void objArrayKlass::oop_follow_contents(oop obj) { assert (obj->is_array(), "obj must be array"); - objArrayOop(obj)->follow_header(); + MarkSweep::follow_klass(obj->klass()); if (UseCompressedOops) { objarray_follow_contents(obj, 0); } else { @@ -356,7 +470,7 @@ void objArrayKlass::oop_follow_contents(ParCompactionManager* cm, oop obj) { assert(obj->is_array(), "obj must be array"); - objArrayOop(obj)->follow_header(cm); + PSParallelCompact::follow_klass(cm, obj->klass()); if (UseCompressedOops) { objarray_follow_contents(cm, obj, 0); } else { @@ -365,6 +479,12 @@ } #endif // SERIALGC +#define if_do_metadata_checked(closure, nv_suffix) \ + /* Make sure the non-virtual and the virtual versions match. */ \ + assert(closure->do_metadata##nv_suffix() == closure->do_metadata(), \ + "Inconsistency in do_metadata"); \ + if (closure->do_metadata##nv_suffix()) + #define ObjArrayKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ \ int objArrayKlass::oop_oop_iterate##nv_suffix(oop obj, \ @@ -375,8 +495,8 @@ /* Get size before changing pointers. */ \ /* Don't call size() or oop_size() since that is a virtual call. */ \ int size = a->object_size(); \ - if (closure->do_header()) { \ - a->oop_iterate_header(closure); \ + if_do_metadata_checked(closure, nv_suffix) { \ + closure->do_klass##nv_suffix(obj->klass()); \ } \ ObjArrayKlass_OOP_ITERATE(a, p, (closure)->do_oop##nv_suffix(p)) \ return size; \ @@ -393,8 +513,9 @@ /* Get size before changing pointers. */ \ /* Don't call size() or oop_size() since that is a virtual call */ \ int size = a->object_size(); \ - if (closure->do_header()) { \ - a->oop_iterate_header(closure, mr); \ + if_do_metadata_checked(closure, nv_suffix) { \ + /* SSS: Do we need to pass down mr here? */ \ + closure->do_klass##nv_suffix(a->klass()); \ } \ ObjArrayKlass_BOUNDED_OOP_ITERATE( \ a, p, mr.start(), mr.end(), (closure)->do_oop##nv_suffix(p)) \ @@ -419,8 +540,9 @@ /* this might be wierd if end needs to be aligned on HeapWord boundary */ \ HeapWord* high = (HeapWord*)((narrowOop*)a->base() + end); \ MemRegion mr(low, high); \ - if (closure->do_header()) { \ - a->oop_iterate_header(closure, mr); \ + if_do_metadata_checked(closure, nv_suffix) { \ + /* SSS: Do we need to pass down mr here? */ \ + closure->do_klass##nv_suffix(a->klass()); \ } \ ObjArrayKlass_SPECIALIZED_BOUNDED_OOP_ITERATE(narrowOop, \ a, p, low, high, (closure)->do_oop##nv_suffix(p)) \ @@ -428,8 +550,9 @@ HeapWord* low = start == 0 ? (HeapWord*)a : (HeapWord*)a->obj_at_addr(start); \ HeapWord* high = (HeapWord*)((oop*)a->base() + end); \ MemRegion mr(low, high); \ - if (closure->do_header()) { \ - a->oop_iterate_header(closure, mr); \ + if_do_metadata_checked(closure, nv_suffix) { \ + /* SSS: Do we need to pass down mr here? */ \ + closure->do_klass##nv_suffix(a->klass()); \ } \ ObjArrayKlass_SPECIALIZED_BOUNDED_OOP_ITERATE(oop, \ a, p, low, high, (closure)->do_oop##nv_suffix(p)) \ @@ -450,7 +573,7 @@ // Get size before changing pointers. // Don't call size() or oop_size() since that is a virtual call. int size = a->object_size(); - a->adjust_header(); + MarkSweep::adjust_klass(a->klass()); ObjArrayKlass_OOP_ITERATE(a, p, MarkSweep::adjust_pointer(p)) return size; } @@ -468,8 +591,10 @@ int objArrayKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { assert (obj->is_objArray(), "obj must be obj array"); objArrayOop a = objArrayOop(obj); + int size = a->object_size(); + a->update_header(cm); ObjArrayKlass_OOP_ITERATE(a, p, PSParallelCompact::adjust_pointer(p)) - return a->object_size(); + return size; } #endif // SERIALGC @@ -489,8 +614,25 @@ } +// Printing + +void objArrayKlass::print_on(outputStream* st) const { #ifndef PRODUCT -// Printing + Klass::print_on(st); + st->print(" - instance klass: "); + element_klass()->print_value_on(st); + st->cr(); +#endif //PRODUCT +} + +void objArrayKlass::print_value_on(outputStream* st) const { + assert(is_klass(), "must be klass"); + + element_klass()->print_value_on(st); + st->print("[]"); +} + +#ifndef PRODUCT void objArrayKlass::oop_print_on(oop obj, outputStream* st) { arrayKlass::oop_print_on(obj, st); @@ -535,8 +677,19 @@ return external_name(); } + // Verification +void objArrayKlass::verify_on(outputStream* st) { + arrayKlass::verify_on(st); + guarantee(element_klass()->is_metadata(), "should be in metaspace"); + guarantee(element_klass()->is_klass(), "should be klass"); + guarantee(bottom_klass()->is_metadata(), "should be in metaspace"); + guarantee(bottom_klass()->is_klass(), "should be klass"); + Klass* bk = Klass::cast(bottom_klass()); + guarantee(bk->oop_is_instance() || bk->oop_is_typeArray(), "invalid bottom klass"); +} + void objArrayKlass::oop_verify_on(oop obj, outputStream* st) { arrayKlass::oop_verify_on(obj, st); guarantee(obj->is_objArray(), "must be objArray"); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/objArrayKlass.hpp --- a/src/share/vm/oops/objArrayKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/objArrayKlass.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -25,40 +25,48 @@ #ifndef SHARE_VM_OOPS_OBJARRAYKLASS_HPP #define SHARE_VM_OOPS_OBJARRAYKLASS_HPP +#include "classfile/classLoaderData.hpp" #include "memory/specialized_oop_closures.hpp" #include "oops/arrayKlass.hpp" -#include "oops/instanceKlass.hpp" // objArrayKlass is the klass for objArrays class objArrayKlass : public arrayKlass { friend class VMStructs; private: - klassOop _element_klass; // The klass of the elements of this array type - klassOop _bottom_klass; // The one-dimensional type (instanceKlass or typeArrayKlass) + Klass* _element_klass; // The klass of the elements of this array type + Klass* _bottom_klass; // The one-dimensional type (InstanceKlass or typeArrayKlass) + + // Constructor + objArrayKlass(int n, KlassHandle element_klass, Symbol* name); + static objArrayKlass* allocate(ClassLoaderData* loader_data, int n, KlassHandle klass_handle, Symbol* name, TRAPS); public: + // For dummy objects + objArrayKlass() {} + // Instance variables - klassOop element_klass() const { return _element_klass; } - void set_element_klass(klassOop k) { oop_store_without_check((oop*) &_element_klass, (oop) k); } - oop* element_klass_addr() { return (oop*)&_element_klass; } + Klass* element_klass() const { return _element_klass; } + void set_element_klass(Klass* k) { _element_klass = k; } + Klass** element_klass_addr() { return &_element_klass; } - klassOop bottom_klass() const { return _bottom_klass; } - void set_bottom_klass(klassOop k) { oop_store_without_check((oop*) &_bottom_klass, (oop) k); } - oop* bottom_klass_addr() { return (oop*)&_bottom_klass; } + Klass* bottom_klass() const { return _bottom_klass; } + void set_bottom_klass(Klass* k) { _bottom_klass = k; } + Klass** bottom_klass_addr() { return &_bottom_klass; } // Compiler/Interpreter offset - static ByteSize element_klass_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(objArrayKlass, _element_klass)); } + static ByteSize element_klass_offset() { return in_ByteSize(offset_of(objArrayKlass, _element_klass)); } // Dispatched operation bool can_be_primary_super_slow() const; - objArrayOop compute_secondary_supers(int num_extra_slots, TRAPS); - bool compute_is_subtype_of(klassOop k); + GrowableArray* compute_secondary_supers(int num_extra_slots); + bool compute_is_subtype_of(Klass* k); bool oop_is_objArray_slow() const { return true; } int oop_size(oop obj) const; - int klass_oop_size() const { return object_size(); } // Allocation - DEFINE_ALLOCATE_PERMANENT(objArrayKlass); + static Klass* allocate_objArray_klass(ClassLoaderData* loader_data, + int n, KlassHandle element_klass, TRAPS); + objArrayOop allocate(int length, TRAPS); oop multi_allocate(int rank, jint* sizes, TRAPS); @@ -67,8 +75,6 @@ // Compute protection domain oop protection_domain() { return Klass::cast(bottom_klass())->protection_domain(); } - // Compute class loader - oop class_loader() const { return Klass::cast(bottom_klass())->class_loader(); } private: // Either oop or narrowOop depending on UseCompressedOops. @@ -77,21 +83,21 @@ T* dst, int length, TRAPS); protected: // Returns the objArrayKlass for n'th dimension. - virtual klassOop array_klass_impl(bool or_null, int n, TRAPS); + virtual Klass* array_klass_impl(bool or_null, int n, TRAPS); // Returns the array class with this class as element type. - virtual klassOop array_klass_impl(bool or_null, TRAPS); + virtual Klass* array_klass_impl(bool or_null, TRAPS); public: - // Casting from klassOop - static objArrayKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_objArray_slow(), "cast to objArrayKlass"); - return (objArrayKlass*) k->klass_part(); + // Casting from Klass* + static objArrayKlass* cast(Klass* k) { + assert(k->oop_is_objArray(), "cast to objArrayKlass"); + return (objArrayKlass*) k; } // Sizing - static int header_size() { return oopDesc::header_size() + sizeof(objArrayKlass)/HeapWordSize; } - int object_size() const { return arrayKlass::object_size(header_size()); } + static int header_size() { return sizeof(objArrayKlass)/HeapWordSize; } + int size() const { return arrayKlass::static_size(header_size()); } // Initialization (virtual from Klass) void initialize(TRAPS); @@ -112,10 +118,10 @@ #endif // !SERIALGC // Iterators - int oop_oop_iterate(oop obj, OopClosure* blk) { + int oop_oop_iterate(oop obj, ExtendedOopClosure* blk) { return oop_oop_iterate_v(obj, blk); } - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { + int oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) { return oop_oop_iterate_v_m(obj, blk, mr); } #define ObjArrayKlass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ @@ -131,18 +137,21 @@ // JVM support jint compute_modifier_flags(TRAPS) const; - private: - static klassOop array_klass_impl (objArrayKlassHandle this_oop, bool or_null, int n, TRAPS); - public: // Printing + void print_on(outputStream* st) const; + void print_value_on(outputStream* st) const; + void oop_print_value_on(oop obj, outputStream* st); #ifndef PRODUCT void oop_print_on (oop obj, outputStream* st); #endif //PRODUCT + const char* internal_name() const; + // Verification - const char* internal_name() const; + void verify_on(outputStream* st); + void oop_verify_on(oop obj, outputStream* st); }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/objArrayKlass.inline.hpp --- a/src/share/vm/oops/objArrayKlass.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/objArrayKlass.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ #ifndef SHARE_VM_OOPS_OBJARRAYKLASS_INLINE_HPP #define SHARE_VM_OOPS_OBJARRAYKLASS_INLINE_HPP +#include "gc_implementation/shared/markSweep.inline.hpp" #include "oops/objArrayKlass.hpp" #ifndef SERIALGC #include "gc_implementation/parallelScavenge/psCompactionManager.inline.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/objArrayKlassKlass.cpp --- a/src/share/vm/oops/objArrayKlassKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,316 +0,0 @@ -/* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/javaClasses.hpp" -#include "classfile/systemDictionary.hpp" -#include "gc_implementation/shared/markSweep.inline.hpp" -#include "gc_interface/collectedHeap.inline.hpp" -#include "oops/instanceKlass.hpp" -#include "oops/objArrayKlassKlass.hpp" -#include "oops/oop.inline.hpp" -#include "oops/oop.inline2.hpp" -#ifndef SERIALGC -#include "gc_implementation/parNew/parOopClosures.inline.hpp" -#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" -#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" -#include "memory/cardTableRS.hpp" -#include "oops/oop.pcgc.inline.hpp" -#endif - -klassOop objArrayKlassKlass::create_klass(TRAPS) { - objArrayKlassKlass o; - KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); - KlassHandle k = base_create_klass(h_this_klass, header_size(), o.vtbl_value(), CHECK_0); - assert(k()->size() == align_object_size(header_size()), "wrong size for object"); - java_lang_Class::create_mirror(k, CHECK_0); // Allocate mirror - return k(); -} - -klassOop objArrayKlassKlass::allocate_system_objArray_klass(TRAPS) { - // system_objArrays have no instance klass, so allocate with fake class, then reset to NULL - KlassHandle kk(THREAD, Universe::intArrayKlassObj()); - klassOop k = allocate_objArray_klass(1, kk, CHECK_0); - objArrayKlass* tk = (objArrayKlass*) k->klass_part(); - tk->set_element_klass(NULL); - tk->set_bottom_klass(NULL); - return k; -} - - -klassOop objArrayKlassKlass::allocate_objArray_klass(int n, KlassHandle element_klass, TRAPS) { - objArrayKlassKlassHandle this_oop(THREAD, as_klassOop()); - return allocate_objArray_klass_impl(this_oop, n, element_klass, THREAD); -} - -klassOop objArrayKlassKlass::allocate_objArray_klass_impl(objArrayKlassKlassHandle this_oop, - int n, KlassHandle element_klass, TRAPS) { - - // Eagerly allocate the direct array supertype. - KlassHandle super_klass = KlassHandle(); - if (!Universe::is_bootstrapping()) { - KlassHandle element_super (THREAD, element_klass->super()); - if (element_super.not_null()) { - // The element type has a direct super. E.g., String[] has direct super of Object[]. - super_klass = KlassHandle(THREAD, element_super->array_klass_or_null()); - bool supers_exist = super_klass.not_null(); - // Also, see if the element has secondary supertypes. - // We need an array type for each. - objArrayHandle element_supers = objArrayHandle(THREAD, - element_klass->secondary_supers()); - for( int i = element_supers->length()-1; i >= 0; i-- ) { - klassOop elem_super = (klassOop) element_supers->obj_at(i); - if (Klass::cast(elem_super)->array_klass_or_null() == NULL) { - supers_exist = false; - break; - } - } - if (!supers_exist) { - // Oops. Not allocated yet. Back out, allocate it, and retry. -#ifndef PRODUCT - if (WizardMode) { - tty->print_cr("Must retry array klass creation for depth %d",n); - } -#endif - KlassHandle ek; - { - MutexUnlocker mu(MultiArray_lock); - MutexUnlocker mc(Compile_lock); // for vtables - klassOop sk = element_super->array_klass(CHECK_0); - super_klass = KlassHandle(THREAD, sk); - for( int i = element_supers->length()-1; i >= 0; i-- ) { - KlassHandle elem_super (THREAD, element_supers->obj_at(i)); - elem_super->array_klass(CHECK_0); - } - // Now retry from the beginning - klassOop klass_oop = element_klass->array_klass(n, CHECK_0); - // Create a handle because the enclosing brace, when locking - // can cause a gc. Better to have this function return a Handle. - ek = KlassHandle(THREAD, klass_oop); - } // re-lock - return ek(); - } - } else { - // The element type is already Object. Object[] has direct super of Object. - super_klass = KlassHandle(THREAD, SystemDictionary::Object_klass()); - } - } - - // Create type name for klass. - Symbol* name = NULL; - if (!element_klass->oop_is_instance() || - (name = instanceKlass::cast(element_klass())->array_name()) == NULL) { - - ResourceMark rm(THREAD); - char *name_str = element_klass->name()->as_C_string(); - int len = element_klass->name()->utf8_length(); - char *new_str = NEW_RESOURCE_ARRAY(char, len + 4); - int idx = 0; - new_str[idx++] = '['; - if (element_klass->oop_is_instance()) { // it could be an array or simple type - new_str[idx++] = 'L'; - } - memcpy(&new_str[idx], name_str, len * sizeof(char)); - idx += len; - if (element_klass->oop_is_instance()) { - new_str[idx++] = ';'; - } - new_str[idx++] = '\0'; - name = SymbolTable::new_permanent_symbol(new_str, CHECK_0); - if (element_klass->oop_is_instance()) { - instanceKlass* ik = instanceKlass::cast(element_klass()); - ik->set_array_name(name); - } - } - - objArrayKlass o; - arrayKlassHandle k = arrayKlass::base_create_array_klass(o.vtbl_value(), - objArrayKlass::header_size(), - this_oop, - CHECK_0); - - // Initialize instance variables - objArrayKlass* oak = objArrayKlass::cast(k()); - oak->set_dimension(n); - oak->set_element_klass(element_klass()); - oak->set_name(name); - // decrement refcount because object arrays are not explicitly freed. The - // instanceKlass array_name() keeps the name counted while the klass is - // loaded. - name->decrement_refcount(); - - klassOop bk; - if (element_klass->oop_is_objArray()) { - bk = objArrayKlass::cast(element_klass())->bottom_klass(); - } else { - bk = element_klass(); - } - assert(bk != NULL && (Klass::cast(bk)->oop_is_instance() || Klass::cast(bk)->oop_is_typeArray()), "invalid bottom klass"); - oak->set_bottom_klass(bk); - - oak->set_layout_helper(array_layout_helper(T_OBJECT)); - assert(oak->oop_is_javaArray(), "sanity"); - assert(oak->oop_is_objArray(), "sanity"); - - // Call complete_create_array_klass after all instance variables has been initialized. - arrayKlass::complete_create_array_klass(k, super_klass, CHECK_0); - - return k(); -} - - -void objArrayKlassKlass::oop_follow_contents(oop obj) { - assert(obj->is_klass(), "must be klass"); - assert(klassOop(obj)->klass_part()->oop_is_objArray_slow(), "must be obj array"); - - objArrayKlass* oak = objArrayKlass::cast((klassOop)obj); - MarkSweep::mark_and_push(oak->element_klass_addr()); - MarkSweep::mark_and_push(oak->bottom_klass_addr()); - - arrayKlassKlass::oop_follow_contents(obj); -} - -#ifndef SERIALGC -void objArrayKlassKlass::oop_follow_contents(ParCompactionManager* cm, - oop obj) { - assert(obj->is_klass(), "must be klass"); - assert(klassOop(obj)->klass_part()->oop_is_objArray_slow(), "must be obj array"); - - objArrayKlass* oak = objArrayKlass::cast((klassOop)obj); - PSParallelCompact::mark_and_push(cm, oak->element_klass_addr()); - PSParallelCompact::mark_and_push(cm, oak->bottom_klass_addr()); - - arrayKlassKlass::oop_follow_contents(cm, obj); -} -#endif // SERIALGC - - -int objArrayKlassKlass::oop_adjust_pointers(oop obj) { - assert(obj->is_klass(), "must be klass"); - assert(klassOop(obj)->klass_part()->oop_is_objArray_slow(), "must be obj array"); - - objArrayKlass* oak = objArrayKlass::cast((klassOop)obj); - MarkSweep::adjust_pointer(oak->element_klass_addr()); - MarkSweep::adjust_pointer(oak->bottom_klass_addr()); - - return arrayKlassKlass::oop_adjust_pointers(obj); -} - - - -int objArrayKlassKlass::oop_oop_iterate(oop obj, OopClosure* blk) { - assert(obj->is_klass(), "must be klass"); - assert(klassOop(obj)->klass_part()->oop_is_objArray_slow(), "must be obj array"); - - objArrayKlass* oak = objArrayKlass::cast((klassOop)obj); - blk->do_oop(oak->element_klass_addr()); - blk->do_oop(oak->bottom_klass_addr()); - - return arrayKlassKlass::oop_oop_iterate(obj, blk); -} - - -int -objArrayKlassKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { - assert(obj->is_klass(), "must be klass"); - assert(klassOop(obj)->klass_part()->oop_is_objArray_slow(), "must be obj array"); - - objArrayKlass* oak = objArrayKlass::cast((klassOop)obj); - oop* addr; - addr = oak->element_klass_addr(); - if (mr.contains(addr)) blk->do_oop(addr); - addr = oak->bottom_klass_addr(); - if (mr.contains(addr)) blk->do_oop(addr); - - return arrayKlassKlass::oop_oop_iterate_m(obj, blk, mr); -} - -#ifndef SERIALGC -void objArrayKlassKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { - assert(obj->blueprint()->oop_is_objArrayKlass(),"must be an obj array klass"); - objArrayKlass* oak = objArrayKlass::cast((klassOop)obj); - oop* p = oak->element_klass_addr(); - if (PSScavenge::should_scavenge(p)) { - pm->claim_or_forward_depth(p); - } - p = oak->bottom_klass_addr(); - if (PSScavenge::should_scavenge(p)) { - pm->claim_or_forward_depth(p); - } - - arrayKlassKlass::oop_push_contents(pm, obj); -} - -int objArrayKlassKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { - assert(obj->is_klass(), "must be klass"); - assert(klassOop(obj)->klass_part()->oop_is_objArray_slow(), "must be obj array"); - - objArrayKlass* oak = objArrayKlass::cast((klassOop)obj); - PSParallelCompact::adjust_pointer(oak->element_klass_addr()); - PSParallelCompact::adjust_pointer(oak->bottom_klass_addr()); - - return arrayKlassKlass::oop_update_pointers(cm, obj); -} -#endif // SERIALGC - -#ifndef PRODUCT - -// Printing - -void objArrayKlassKlass::oop_print_on(oop obj, outputStream* st) { - assert(obj->is_klass(), "must be klass"); - objArrayKlass* oak = (objArrayKlass*) klassOop(obj)->klass_part(); - klassKlass::oop_print_on(obj, st); - st->print(" - instance klass: "); - oak->element_klass()->print_value_on(st); - st->cr(); -} - -#endif //PRODUCT - -void objArrayKlassKlass::oop_print_value_on(oop obj, outputStream* st) { - assert(obj->is_klass(), "must be klass"); - objArrayKlass* oak = (objArrayKlass*) klassOop(obj)->klass_part(); - - oak->element_klass()->print_value_on(st); - st->print("[]"); -} - -const char* objArrayKlassKlass::internal_name() const { - return "{object array class}"; -} - - -// Verification - -void objArrayKlassKlass::oop_verify_on(oop obj, outputStream* st) { - arrayKlassKlass::oop_verify_on(obj, st); - objArrayKlass* oak = objArrayKlass::cast((klassOop)obj); - guarantee(oak->element_klass()->is_perm(), "should be in permspace"); - guarantee(oak->element_klass()->is_klass(), "should be klass"); - guarantee(oak->bottom_klass()->is_perm(), "should be in permspace"); - guarantee(oak->bottom_klass()->is_klass(), "should be klass"); - Klass* bk = Klass::cast(oak->bottom_klass()); - guarantee(bk->oop_is_instance() || bk->oop_is_typeArray(), "invalid bottom klass"); -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/objArrayKlassKlass.hpp --- a/src/share/vm/oops/objArrayKlassKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -/* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_OBJARRAYKLASSKLASS_HPP -#define SHARE_VM_OOPS_OBJARRAYKLASSKLASS_HPP - -#include "oops/arrayKlassKlass.hpp" -#include "oops/objArrayKlass.hpp" - -// The objArrayKlassKlass is klass for all objArrayKlass' - -class objArrayKlassKlass : public arrayKlassKlass { - public: - // Testing - virtual bool oop_is_objArrayKlass() const { return true; } - - // Dispatched operation - int oop_size(oop obj) const { return objArrayKlass::cast(klassOop(obj))->object_size(); } - int klass_oop_size() const { return object_size(); } - - // Allocation - DEFINE_ALLOCATE_PERMANENT(objArrayKlassKlass); - static klassOop create_klass(TRAPS); - klassOop allocate_objArray_klass(int n, KlassHandle element_klass, TRAPS); - klassOop allocate_system_objArray_klass(TRAPS); // Used for bootstrapping in Universe::genesis - - // Casting from klassOop - static objArrayKlassKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_klass(), "cast to objArrayKlassKlass"); - return (objArrayKlassKlass*) k->klass_part(); - } - - // Sizing - static int header_size() { return oopDesc::header_size() + sizeof(objArrayKlassKlass)/HeapWordSize; } - int object_size() const { return align_object_size(header_size()); } - - // Garbage collection - void oop_follow_contents(oop obj); - int oop_adjust_pointers(oop obj); - - // Parallel Scavenge and Parallel Old - PARALLEL_GC_DECLS - - // Iterators - int oop_oop_iterate(oop obj, OopClosure* blk); - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr); - - private: - // helpers - static klassOop allocate_objArray_klass_impl(objArrayKlassKlassHandle this_oop, int n, KlassHandle element_klass, TRAPS); - - public: - // Printing - void oop_print_value_on(oop obj, outputStream* st); -#ifndef PRODUCT - void oop_print_on(oop obj, outputStream* st); -#endif //PRODUCT - - // Verification - const char* internal_name() const; - void oop_verify_on(oop obj, outputStream* st); - -}; - -#endif // SHARE_VM_OOPS_OBJARRAYKLASSKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/objArrayOop.cpp --- a/src/share/vm/oops/objArrayOop.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/objArrayOop.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ \ int objArrayOopDesc::oop_iterate_range(OopClosureType* blk, int start, int end) { \ SpecializationStats::record_call(); \ - return ((objArrayKlass*)blueprint())->oop_oop_iterate_range##nv_suffix(this, blk, start, end); \ + return ((objArrayKlass*)klass())->oop_oop_iterate_range##nv_suffix(this, blk, start, end); \ } ALL_OOP_OOP_ITERATE_CLOSURES_1(ObjArrayOop_OOP_ITERATE_DEFN) diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/oop.cpp --- a/src/share/vm/oops/oop.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/oop.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/altHashing.hpp" #include "classfile/javaClasses.hpp" #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" @@ -48,7 +49,7 @@ if (this == NULL) { st->print_cr("NULL"); } else { - blueprint()->oop_print_on(oop(this), st); + klass()->oop_print_on(oop(this), st); } } @@ -86,19 +87,15 @@ } else if (java_lang_String::is_instance(obj)) { java_lang_String::print(obj, st); if (PrintOopAddress) print_address_on(st); -#ifdef ASSERT - } else if (!Universe::heap()->is_in(obj) || !Universe::heap()->is_in(klass())) { - st->print("### BAD OOP %p ###", (address)obj); -#endif //ASSERT } else { - blueprint()->oop_print_value_on(obj, st); + klass()->oop_print_value_on(obj, st); } } void oopDesc::verify_on(outputStream* st) { if (this != NULL) { - blueprint()->oop_verify_on(this, st); + klass()->oop_verify_on(this, st); } } @@ -107,25 +104,23 @@ verify_on(tty); } -bool oopDesc::partially_loaded() { - return blueprint()->oop_partially_loaded(this); -} - - -void oopDesc::set_partially_loaded() { - blueprint()->oop_set_partially_loaded(this); -} - - intptr_t oopDesc::slow_identity_hash() { // slow case; we have to acquire the micro lock in order to locate the header ResetNoHandleMark rnm; // Might be called from LEAF/QUICK ENTRY HandleMark hm; - Handle object((oop)this); - assert(!is_shared_readonly(), "using identity hash on readonly object?"); + Handle object(this); return ObjectSynchronizer::identity_hash_value_for(object); } +// When String table needs to rehash +unsigned int oopDesc::new_hash(jint seed) { + ResourceMark rm; + int length; + jchar* chars = java_lang_String::as_unicode_string(this, length); + // Use alternate hashing algorithm on the string + return AltHashing::murmur3_32(seed, chars, length); +} + VerifyOopClosure VerifyOopClosure::verify_oop; void VerifyOopClosure::do_oop(oop* p) { VerifyOopClosure::do_oop_work(p); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/oop.hpp --- a/src/share/vm/oops/oop.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/oop.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -28,6 +28,7 @@ #include "memory/iterator.hpp" #include "memory/memRegion.hpp" #include "memory/specialized_oop_closures.hpp" +#include "oops/metadata.hpp" #include "utilities/top.hpp" // oopDesc is the top baseclass for objects classes. The {name}Desc classes describe @@ -41,10 +42,6 @@ template void oop_store(T* p, oop v); template void oop_store(volatile T* p, oop v); -// store into oop without store check -template void oop_store_without_check(T* p, oop v); -template void oop_store_without_check(volatile T* p, oop v); - extern bool always_do_update_barrier; // Forward declarations. @@ -63,7 +60,7 @@ private: volatile markOop _mark; union _metadata { - wideKlassOop _klass; + Klass* _klass; narrowOop _compressed_klass; } _metadata; @@ -71,11 +68,6 @@ static BarrierSet* _bs; public: - enum ConcSafeType { - IsUnsafeConc = false, - IsSafeConc = true - }; - markOop mark() const { return _mark; } markOop* mark_addr() const { return (markOop*) &_mark; } @@ -88,26 +80,25 @@ // objects during a GC) -- requires a valid klass pointer void init_mark(); - klassOop klass() const; - klassOop klass_or_null() const volatile; - oop* klass_addr(); + Klass* klass() const; + Klass* klass_or_null() const volatile; + Klass** klass_addr(); narrowOop* compressed_klass_addr(); - void set_klass(klassOop k); + void set_klass(Klass* k); // For klass field compression int klass_gap() const; void set_klass_gap(int z); // For when the klass pointer is being used as a linked list "next" field. void set_klass_to_list_ptr(oop k); + oop list_ptr_from_klass(); // size of object header, aligned to platform wordSize static int header_size() { return sizeof(oopDesc)/HeapWordSize; } - Klass* blueprint() const; - // Returns whether this is an instance of k or an instance of a subclass of k - bool is_a(klassOop k) const; + bool is_a(Klass* k) const; // Returns the actual oop size of the object int size(); @@ -116,33 +107,13 @@ // to be able to figure out the size of an object knowing its klass. int size_given_klass(Klass* klass); - // Some perm gen objects are not parseble immediately after - // installation of their klass pointer. - bool is_parsable(); - - // Some perm gen objects that have been allocated and initialized - // can be changed by the VM when not at a safe point (class rededfinition - // is an example). Such objects should not be examined by the - // concurrent processing of a garbage collector if is_conc_safe() - // returns false. - bool is_conc_safe(); - // type test operations (inlined in oop.inline.h) bool is_instance() const; bool is_instanceMirror() const; bool is_instanceRef() const; bool is_array() const; bool is_objArray() const; - bool is_klass() const; - bool is_thread() const; - bool is_method() const; - bool is_constMethod() const; - bool is_methodData() const; - bool is_constantPool() const; - bool is_constantPoolCache() const; bool is_typeArray() const; - bool is_javaArray() const; - bool is_compiledICHolder() const; private: // field addresses in oop @@ -156,14 +127,18 @@ jlong* long_field_addr(int offset) const; jfloat* float_field_addr(int offset) const; jdouble* double_field_addr(int offset) const; - address* address_field_addr(int offset) const; + Metadata** metadata_field_addr(int offset) const; public: // Need this as public for garbage collection. template T* obj_field_addr(int offset) const; + // Needed for javaClasses + address* address_field_addr(int offset) const; + static bool is_null(oop obj); static bool is_null(narrowOop obj); + static bool is_null(Klass* obj); // Decode an oop pointer from a narrowOop if compressed. // These are overloaded for oop and narrowOop as are the other functions @@ -210,7 +185,15 @@ static oop atomic_exchange_oop(oop exchange_value, volatile HeapWord *dest); static oop atomic_compare_exchange_oop(oop exchange_value, volatile HeapWord *dest, - oop compare_value); + oop compare_value, + bool prebarrier = false); + + // klass encoding for klass pointer in objects. + static narrowOop encode_klass_not_null(Klass* v); + static narrowOop encode_klass(Klass* v); + + static Klass* decode_klass_not_null(narrowOop v); + static Klass* decode_klass(narrowOop v); // Access to fields in a instanceOop through these methods. oop obj_field(int offset) const; @@ -219,6 +202,9 @@ void obj_field_put_raw(int offset, oop value); void obj_field_put_volatile(int offset, oop value); + Metadata* metadata_field(int offset) const; + void metadata_field_put(int offset, Metadata* value); + jbyte byte_field(int offset) const; void byte_field_put(int offset, jbyte contents); @@ -294,10 +280,6 @@ void verify_on(outputStream* st); void verify(); - // tells whether this oop is partially constructed (gc during class loading) - bool partially_loaded(); - void set_partially_loaded(); - // locking operations bool is_locked() const; bool is_unlocked() const; @@ -315,7 +297,6 @@ // Apply "MarkSweep::mark_and_push" to (the address of) every non-NULL // reference field in "this". void follow_contents(void); - void follow_header(void); #ifndef SERIALGC // Parallel Scavenge @@ -325,15 +306,9 @@ void update_contents(ParCompactionManager* cm); void follow_contents(ParCompactionManager* cm); - void follow_header(ParCompactionManager* cm); #endif // SERIALGC - bool is_perm() const; - bool is_perm_or_null() const; bool is_scavengable() const; - bool is_shared() const; - bool is_shared_readonly() const; - bool is_shared_readwrite() const; // Forward pointer operations for scavenge bool is_forwarded() const; @@ -358,11 +333,10 @@ // Adjust all pointers in this object to point at it's forwarded location and // return the size of this oop. This is used by the MarkSweep collector. int adjust_pointers(); - void adjust_header(); #ifndef SERIALGC // Parallel old - void update_header(); + void update_header(ParCompactionManager* cm); #endif // SERIALGC // mark-sweep support @@ -389,8 +363,8 @@ ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_ITERATE_BACKWARDS_DECL) #endif - void oop_iterate_header(OopClosure* blk); - void oop_iterate_header(OopClosure* blk, MemRegion mr); + int oop_iterate_no_header(OopClosure* bk); + int oop_iterate_no_header(OopClosure* bk, MemRegion mr); // identity hash; returns the identity hash key (computes it if necessary) // NOTE with the introduction of UseBiasedLocking that identity_hash() might reach a @@ -398,6 +372,9 @@ intptr_t identity_hash(); intptr_t slow_identity_hash(); + // Alternate hashing code if string table is rehashed + unsigned int new_hash(jint seed); + // marks are forwarded to stack when object is locked bool has_displaced_mark() const; markOop displaced_mark() const; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/oop.inline.hpp --- a/src/share/vm/oops/oop.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/oop.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,15 +30,12 @@ #include "gc_interface/collectedHeap.inline.hpp" #include "memory/barrierSet.inline.hpp" #include "memory/cardTableModRefBS.hpp" -#include "memory/compactingPermGenGen.hpp" #include "memory/genCollectedHeap.hpp" #include "memory/generation.hpp" -#include "memory/permGen.hpp" #include "memory/specialized_oop_closures.hpp" #include "oops/arrayKlass.hpp" #include "oops/arrayOop.hpp" #include "oops/klass.hpp" -#include "oops/klassOop.hpp" #include "oops/markOop.inline.hpp" #include "oops/oop.hpp" #include "runtime/atomic.hpp" @@ -70,48 +67,48 @@ return (markOop) Atomic::cmpxchg_ptr(new_mark, &_mark, old_mark); } -inline klassOop oopDesc::klass() const { - if (UseCompressedOops) { - return (klassOop)decode_heap_oop_not_null(_metadata._compressed_klass); +inline Klass* oopDesc::klass() const { + if (UseCompressedKlassPointers) { + return decode_klass_not_null(_metadata._compressed_klass); } else { return _metadata._klass; } } -inline klassOop oopDesc::klass_or_null() const volatile { +inline Klass* oopDesc::klass_or_null() const volatile { // can be NULL in CMS - if (UseCompressedOops) { - return (klassOop)decode_heap_oop(_metadata._compressed_klass); + if (UseCompressedKlassPointers) { + return decode_klass(_metadata._compressed_klass); } else { return _metadata._klass; } } inline int oopDesc::klass_gap_offset_in_bytes() { - assert(UseCompressedOops, "only applicable to compressed headers"); + assert(UseCompressedKlassPointers, "only applicable to compressed klass pointers"); return oopDesc::klass_offset_in_bytes() + sizeof(narrowOop); } -inline oop* oopDesc::klass_addr() { +inline Klass** oopDesc::klass_addr() { // Only used internally and with CMS and will not work with // UseCompressedOops - assert(!UseCompressedOops, "only supported with uncompressed oops"); - return (oop*) &_metadata._klass; + assert(!UseCompressedKlassPointers, "only supported with uncompressed klass pointers"); + return (Klass**) &_metadata._klass; } inline narrowOop* oopDesc::compressed_klass_addr() { - assert(UseCompressedOops, "only called by compressed oops"); + assert(UseCompressedKlassPointers, "only called by compressed klass pointers"); return (narrowOop*) &_metadata._compressed_klass; } -inline void oopDesc::set_klass(klassOop k) { +inline void oopDesc::set_klass(Klass* k) { // since klasses are promoted no store check is needed - assert(Universe::is_bootstrapping() || k != NULL, "must be a real klassOop"); - assert(Universe::is_bootstrapping() || k->is_klass(), "not a klassOop"); - if (UseCompressedOops) { - oop_store_without_check(compressed_klass_addr(), (oop)k); + assert(Universe::is_bootstrapping() || k != NULL, "must be a real Klass*"); + assert(Universe::is_bootstrapping() || k->is_klass(), "not a Klass*"); + if (UseCompressedKlassPointers) { + *compressed_klass_addr() = encode_klass_not_null(k); } else { - oop_store_without_check(klass_addr(), (oop) k); + *klass_addr() = k; } } @@ -120,7 +117,7 @@ } inline void oopDesc::set_klass_gap(int v) { - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { *(int*)(((intptr_t)this) + klass_gap_offset_in_bytes()) = v; } } @@ -128,37 +125,38 @@ inline void oopDesc::set_klass_to_list_ptr(oop k) { // This is only to be used during GC, for from-space objects, so no // barrier is needed. - if (UseCompressedOops) { + if (UseCompressedKlassPointers) { _metadata._compressed_klass = encode_heap_oop(k); // may be null (parnew overflow handling) } else { - _metadata._klass = (klassOop)k; + _metadata._klass = (Klass*)(address)k; + } +} + +inline oop oopDesc::list_ptr_from_klass() { + // This is only to be used during GC, for from-space objects. + if (UseCompressedKlassPointers) { + return (oop)decode_heap_oop((oop)(address)_metadata._compressed_klass); + } else { + // Special case for GC + return (oop)(address)_metadata._klass; } } inline void oopDesc::init_mark() { set_mark(markOopDesc::prototype_for_object(this)); } -inline Klass* oopDesc::blueprint() const { return klass()->klass_part(); } -inline bool oopDesc::is_a(klassOop k) const { return blueprint()->is_subtype_of(k); } +inline bool oopDesc::is_a(Klass* k) const { return klass()->is_subtype_of(k); } -inline bool oopDesc::is_instance() const { return blueprint()->oop_is_instance(); } -inline bool oopDesc::is_instanceMirror() const { return blueprint()->oop_is_instanceMirror(); } -inline bool oopDesc::is_instanceRef() const { return blueprint()->oop_is_instanceRef(); } -inline bool oopDesc::is_array() const { return blueprint()->oop_is_array(); } -inline bool oopDesc::is_objArray() const { return blueprint()->oop_is_objArray(); } -inline bool oopDesc::is_typeArray() const { return blueprint()->oop_is_typeArray(); } -inline bool oopDesc::is_javaArray() const { return blueprint()->oop_is_javaArray(); } -inline bool oopDesc::is_klass() const { return blueprint()->oop_is_klass(); } -inline bool oopDesc::is_thread() const { return blueprint()->oop_is_thread(); } -inline bool oopDesc::is_method() const { return blueprint()->oop_is_method(); } -inline bool oopDesc::is_constMethod() const { return blueprint()->oop_is_constMethod(); } -inline bool oopDesc::is_methodData() const { return blueprint()->oop_is_methodData(); } -inline bool oopDesc::is_constantPool() const { return blueprint()->oop_is_constantPool(); } -inline bool oopDesc::is_constantPoolCache() const { return blueprint()->oop_is_constantPoolCache(); } -inline bool oopDesc::is_compiledICHolder() const { return blueprint()->oop_is_compiledICHolder(); } +inline bool oopDesc::is_instance() const { return klass()->oop_is_instance(); } +inline bool oopDesc::is_instanceMirror() const { return klass()->oop_is_instanceMirror(); } +inline bool oopDesc::is_instanceRef() const { return klass()->oop_is_instanceRef(); } +inline bool oopDesc::is_array() const { return klass()->oop_is_array(); } +inline bool oopDesc::is_objArray() const { return klass()->oop_is_objArray(); } +inline bool oopDesc::is_typeArray() const { return klass()->oop_is_typeArray(); } inline void* oopDesc::field_base(int offset) const { return (void*)&((char*)this)[offset]; } template inline T* oopDesc::obj_field_addr(int offset) const { return (T*)field_base(offset); } +inline Metadata** oopDesc::metadata_field_addr(int offset) const { return (Metadata**)field_base(offset); } inline jbyte* oopDesc::byte_field_addr(int offset) const { return (jbyte*) field_base(offset); } inline jchar* oopDesc::char_field_addr(int offset) const { return (jchar*) field_base(offset); } inline jboolean* oopDesc::bool_field_addr(int offset) const { return (jboolean*)field_base(offset); } @@ -177,6 +175,7 @@ // the right type and inlines the appopriate code). inline bool oopDesc::is_null(oop obj) { return obj == NULL; } +inline bool oopDesc::is_null(Klass* obj) { return obj == NULL; } inline bool oopDesc::is_null(narrowOop obj) { return obj == 0; } // Algorithm for encoding and decoding oops from 64 bit pointers to 32 bit @@ -186,6 +185,9 @@ inline bool check_obj_alignment(oop obj) { return (intptr_t)obj % MinObjAlignmentInBytes == 0; } +inline bool check_obj_alignment(Klass* obj) { + return (intptr_t)obj % MinObjAlignmentInBytes == 0; +} inline narrowOop oopDesc::encode_heap_oop_not_null(oop v) { assert(!is_null(v), "oop value can never be zero"); @@ -221,6 +223,39 @@ inline oop oopDesc::decode_heap_oop_not_null(oop v) { return v; } inline oop oopDesc::decode_heap_oop(oop v) { return v; } +// Encoding and decoding for klass field. It is copied code, but someday +// might not be the same as oop. + +inline narrowOop oopDesc::encode_klass_not_null(Klass* v) { + assert(!is_null(v), "oop value can never be zero"); + assert(check_obj_alignment(v), "Address not aligned"); + address base = Universe::narrow_oop_base(); + int shift = Universe::narrow_oop_shift(); + uint64_t pd = (uint64_t)(pointer_delta((void*)v, (void*)base, 1)); + assert(OopEncodingHeapMax > pd, "change encoding max if new encoding"); + uint64_t result = pd >> shift; + assert((result & CONST64(0xffffffff00000000)) == 0, "narrow klass pointer overflow"); + assert(decode_klass(result) == v, "reversibility"); + return (narrowOop)result; +} + +inline narrowOop oopDesc::encode_klass(Klass* v) { + return (is_null(v)) ? (narrowOop)0 : encode_klass_not_null(v); +} + +inline Klass* oopDesc::decode_klass_not_null(narrowOop v) { + assert(!is_null(v), "narrow oop value can never be zero"); + address base = Universe::narrow_oop_base(); + int shift = Universe::narrow_oop_shift(); + Klass* result = (Klass*)(void*)((uintptr_t)base + ((uintptr_t)v << shift)); + assert(check_obj_alignment(result), err_msg("address not aligned: " PTR_FORMAT, (void*) result)); + return result; +} + +inline Klass* oopDesc::decode_klass(narrowOop v) { + return is_null(v) ? (Klass*)NULL : decode_klass_not_null(v); +} + // Load an oop out of the Java heap as is without decoding. // Called by GC to check for null before decoding. inline oop oopDesc::load_heap_oop(oop* p) { return *p; } @@ -298,22 +333,6 @@ } } -inline oop oopDesc::atomic_compare_exchange_oop(oop exchange_value, - volatile HeapWord *dest, - oop compare_value) { - if (UseCompressedOops) { - // encode exchange and compare value from oop to T - narrowOop val = encode_heap_oop(exchange_value); - narrowOop cmp = encode_heap_oop(compare_value); - - narrowOop old = (narrowOop) Atomic::cmpxchg(val, (narrowOop*)dest, cmp); - // decode old from T to oop - return decode_heap_oop(old); - } else { - return (oop)Atomic::cmpxchg_ptr(exchange_value, (oop*)dest, compare_value); - } -} - // In order to put or get a field out of an instance, must first check // if the field has been compressed and uncompress it. inline oop oopDesc::obj_field(int offset) const { @@ -330,6 +349,15 @@ UseCompressedOops ? oop_store(obj_field_addr(offset), value) : oop_store(obj_field_addr(offset), value); } + +inline Metadata* oopDesc::metadata_field(int offset) const { + return *metadata_field_addr(offset); +} + +inline void oopDesc::metadata_field_put(int offset, Metadata* value) { + *metadata_field_addr(offset) = value; +} + inline void oopDesc::obj_field_put_raw(int offset, oop value) { UseCompressedOops ? encode_store_heap_oop(obj_field_addr(offset), value) : @@ -495,15 +523,7 @@ inline int oopDesc::size() { - return size_given_klass(blueprint()); -} - -inline bool oopDesc::is_parsable() { - return blueprint()->oop_is_parsable(this); -} - -inline bool oopDesc::is_conc_safe() { - return blueprint()->oop_is_conc_safe(this); + return size_given_klass(klass()); } inline void update_barrier_set(void* p, oop v) { @@ -532,29 +552,6 @@ update_barrier_set((void*)p, v); // cast away type } -template inline void oop_store_without_check(T* p, oop v) { - // XXX YSR FIX ME!!! - if (always_do_update_barrier) { - oop_store(p, v); - } else { - assert(!Universe::heap()->barrier_set()->write_ref_needs_barrier(p, v), - "oop store without store check failed"); - oopDesc::encode_store_heap_oop(p, v); - } -} - -// When it absolutely has to get there. -template inline void oop_store_without_check(volatile T* p, oop v) { - // XXX YSR FIX ME!!! - if (always_do_update_barrier) { - oop_store(p, v); - } else { - assert(!Universe::heap()->barrier_set()->write_ref_needs_barrier((T*)p, v), - "oop store without store check failed"); - oopDesc::release_encode_store_heap_oop(p, v); - } -} - // Should replace *addr = oop assignments where addr type depends on UseCompressedOops // (without having to remember the function name this calls). inline void oop_store_raw(HeapWord* addr, oop value) { @@ -565,6 +562,29 @@ } } +inline oop oopDesc::atomic_compare_exchange_oop(oop exchange_value, + volatile HeapWord *dest, + oop compare_value, + bool prebarrier) { + if (UseCompressedOops) { + if (prebarrier) { + update_barrier_set_pre((narrowOop*)dest, exchange_value); + } + // encode exchange and compare value from oop to T + narrowOop val = encode_heap_oop(exchange_value); + narrowOop cmp = encode_heap_oop(compare_value); + + narrowOop old = (narrowOop) Atomic::cmpxchg(val, (narrowOop*)dest, cmp); + // decode old from T to oop + return decode_heap_oop(old); + } else { + if (prebarrier) { + update_barrier_set_pre((oop*)dest, exchange_value); + } + return (oop)Atomic::cmpxchg_ptr(exchange_value, (oop*)dest, compare_value); + } +} + // Used only for markSweep, scavenging inline bool oopDesc::is_gc_marked() const { return mark()->is_marked(); @@ -589,21 +609,7 @@ if (!check_obj_alignment(obj)) return false; if (!Universe::heap()->is_in_reserved(obj)) return false; // obj is aligned and accessible in heap - // try to find metaclass cycle safely without seg faulting on bad input - // we should reach klassKlassObj by following klass link at most 3 times - for (int i = 0; i < 3; i++) { - obj = obj->klass_or_null(); - // klass should be aligned and in permspace - if (!check_obj_alignment(obj)) return false; - if (!Universe::heap()->is_in_permanent(obj)) return false; - } - if (obj != Universe::klassKlassObj()) { - // During a dump, the _klassKlassObj moved to a shared space. - if (DumpSharedSpaces && Universe::klassKlassObj()->is_shared()) { - return true; - } - return false; - } + if (Universe::heap()->is_in_reserved(obj->klass_or_null())) return false; // Header verification: the mark is typically non-NULL. If we're // at a safepoint, it must not be null. @@ -632,20 +638,11 @@ } #endif // PRODUCT -inline void oopDesc::follow_header() { - if (UseCompressedOops) { - MarkSweep::mark_and_push(compressed_klass_addr()); - } else { - MarkSweep::mark_and_push(klass_addr()); - } -} - inline void oopDesc::follow_contents(void) { assert (is_gc_marked(), "should be marked"); - blueprint()->oop_follow_contents(this); + klass()->oop_follow_contents(this); } - // Used by scavengers inline bool oopDesc::is_forwarded() const { @@ -728,49 +725,36 @@ } } -inline void oopDesc::oop_iterate_header(OopClosure* blk) { - if (UseCompressedOops) { - blk->do_oop(compressed_klass_addr()); - } else { - blk->do_oop(klass_addr()); - } -} - -inline void oopDesc::oop_iterate_header(OopClosure* blk, MemRegion mr) { - if (UseCompressedOops) { - if (mr.contains(compressed_klass_addr())) { - blk->do_oop(compressed_klass_addr()); - } - } else { - if (mr.contains(klass_addr())) blk->do_oop(klass_addr()); - } -} - inline int oopDesc::adjust_pointers() { debug_only(int check_size = size()); - int s = blueprint()->oop_adjust_pointers(this); + int s = klass()->oop_adjust_pointers(this); assert(s == check_size, "should be the same"); return s; } -inline void oopDesc::adjust_header() { - if (UseCompressedOops) { - MarkSweep::adjust_pointer(compressed_klass_addr()); - } else { - MarkSweep::adjust_pointer(klass_addr()); - } -} - #define OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ \ inline int oopDesc::oop_iterate(OopClosureType* blk) { \ SpecializationStats::record_call(); \ - return blueprint()->oop_oop_iterate##nv_suffix(this, blk); \ + return klass()->oop_oop_iterate##nv_suffix(this, blk); \ } \ \ inline int oopDesc::oop_iterate(OopClosureType* blk, MemRegion mr) { \ SpecializationStats::record_call(); \ - return blueprint()->oop_oop_iterate##nv_suffix##_m(this, blk, mr); \ + return klass()->oop_oop_iterate##nv_suffix##_m(this, blk, mr); \ +} + + +inline int oopDesc::oop_iterate_no_header(OopClosure* blk) { + // The NoHeaderExtendedOopClosure wraps the OopClosure and proxies all + // the do_oop calls, but turns off all other features in ExtendedOopClosure. + NoHeaderExtendedOopClosure cl(blk); + return oop_iterate(&cl); +} + +inline int oopDesc::oop_iterate_no_header(OopClosure* blk, MemRegion mr) { + NoHeaderExtendedOopClosure cl(blk); + return oop_iterate(&cl, mr); } ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_ITERATE_DEFN) @@ -781,23 +765,11 @@ \ inline int oopDesc::oop_iterate_backwards(OopClosureType* blk) { \ SpecializationStats::record_call(); \ - return blueprint()->oop_oop_iterate_backwards##nv_suffix(this, blk); \ + return klass()->oop_oop_iterate_backwards##nv_suffix(this, blk); \ } ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_ITERATE_BACKWARDS_DEFN) ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_ITERATE_BACKWARDS_DEFN) #endif // !SERIALGC -inline bool oopDesc::is_shared() const { - return CompactingPermGenGen::is_shared(this); -} - -inline bool oopDesc::is_shared_readonly() const { - return CompactingPermGenGen::is_shared_readonly(this); -} - -inline bool oopDesc::is_shared_readwrite() const { - return CompactingPermGenGen::is_shared_readwrite(this); -} - #endif // SHARE_VM_OOPS_OOP_INLINE_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/oop.inline2.hpp --- a/src/share/vm/oops/oop.inline2.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/oop.inline2.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,25 +27,13 @@ #include "gc_interface/collectedHeap.hpp" #include "memory/generation.hpp" -#include "memory/permGen.hpp" #include "memory/universe.hpp" #include "oops/oop.hpp" // Implementation of all inlined member functions defined in oop.hpp // We need a separate file to avoid circular references -// Separate this out to break dependency. -inline bool oopDesc::is_perm() const { - return Universe::heap()->is_in_permanent(this); -} - -// Check for NULL also. -inline bool oopDesc::is_perm_or_null() const { - return this == NULL || is_perm(); -} - inline bool oopDesc::is_scavengable() const { return Universe::heap()->is_scavengable(this); } - #endif // SHARE_VM_OOPS_OOP_INLINE2_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/oop.pcgc.inline.hpp --- a/src/share/vm/oops/oop.pcgc.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/oop.pcgc.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,19 +37,9 @@ inline void oopDesc::update_contents(ParCompactionManager* cm) { // The klass field must be updated before anything else // can be done. - DEBUG_ONLY(klassOopDesc* original_klass = klass()); - - // Can the option to update and/or copy be moved up in the - // call chain to avoid calling into here? + DEBUG_ONLY(Klass* original_klass = klass()); - if (PSParallelCompact::should_update_klass(klass())) { - update_header(); - assert(klass()->is_klass(), "Not updated correctly"); - } else { - assert(klass()->is_klass(), "Not updated"); - } - - Klass* new_klass = blueprint(); + Klass* new_klass = klass(); if (!new_klass->oop_is_typeArray()) { // It might contain oops beyond the header, so take the virtual call. new_klass->oop_update_pointers(cm, this); @@ -60,19 +50,11 @@ inline void oopDesc::follow_contents(ParCompactionManager* cm) { assert (PSParallelCompact::mark_bitmap()->is_marked(this), "should be marked"); - blueprint()->oop_follow_contents(cm, this); + klass()->oop_follow_contents(cm, this); } // Used by parallel old GC. -inline void oopDesc::follow_header(ParCompactionManager* cm) { - if (UseCompressedOops) { - PSParallelCompact::mark_and_push(cm, compressed_klass_addr()); - } else { - PSParallelCompact::mark_and_push(cm, klass_addr()); - } -} - inline oop oopDesc::forward_to_atomic(oop p) { assert(ParNewGeneration::is_legal_forward_ptr(p), "illegal forwarding pointer value."); @@ -97,12 +79,8 @@ return forwardee(); } -inline void oopDesc::update_header() { - if (UseCompressedOops) { - PSParallelCompact::adjust_pointer(compressed_klass_addr()); - } else { - PSParallelCompact::adjust_pointer(klass_addr()); - } +inline void oopDesc::update_header(ParCompactionManager* cm) { + PSParallelCompact::adjust_klass(cm, klass()); } #endif // SHARE_VM_OOPS_OOP_PCGC_INLINE_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/oop.psgc.inline.hpp --- a/src/share/vm/oops/oop.psgc.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/oop.psgc.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,10 +34,10 @@ // ParallelScavengeHeap methods inline void oopDesc::push_contents(PSPromotionManager* pm) { - Klass* klass = blueprint(); - if (!klass->oop_is_typeArray()) { + Klass* k = klass(); + if (!k->oop_is_typeArray()) { // It might contain oops beyond the header, so take the virtual call. - klass->oop_push_contents(pm, this); + k->oop_push_contents(pm, this); } // Else skip it. The typeArrayKlass in the header never needs scavenging. } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/oopsHierarchy.hpp --- a/src/share/vm/oops/oopsHierarchy.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/oopsHierarchy.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,29 +33,19 @@ // of B, A's representation is a prefix of B's representation. typedef juint narrowOop; // Offset instead of address for an oop within a java object -typedef class klassOopDesc* wideKlassOop; // to keep SA happy and unhandled oop - // detector happy. typedef void* OopOrNarrowOopStar; +typedef class markOopDesc* markOop; #ifndef CHECK_UNHANDLED_OOPS typedef class oopDesc* oop; typedef class instanceOopDesc* instanceOop; -typedef class methodOopDesc* methodOop; -typedef class constMethodOopDesc* constMethodOop; -typedef class methodDataOopDesc* methodDataOop; typedef class arrayOopDesc* arrayOop; typedef class objArrayOopDesc* objArrayOop; typedef class typeArrayOopDesc* typeArrayOop; -typedef class constantPoolOopDesc* constantPoolOop; -typedef class constantPoolCacheOopDesc* constantPoolCacheOop; -typedef class klassOopDesc* klassOop; -typedef class markOopDesc* markOop; -typedef class compiledICHolderOopDesc* compiledICHolderOop; #else - // When CHECK_UNHANDLED_OOPS is defined, an "oop" is a class with a // carefully chosen set of constructors and conversion operators to go // to and from the underlying oopDesc pointer type. @@ -71,7 +61,6 @@ // instead, which generates less code anyway. class Thread; -typedef class markOopDesc* markOop; class PromotedObject; @@ -106,7 +95,7 @@ oopDesc* operator->() const { return obj(); } bool operator==(const oop o) const { return obj() == o.obj(); } bool operator==(void *p) const { return obj() == p; } - bool operator!=(const oop o) const { return obj() != o.obj(); } + bool operator!=(const volatile oop o) const { return obj() != o.obj(); } bool operator!=(void *p) const { return obj() != p; } bool operator==(intptr_t p) const { return obj() == (oopDesc*)p; } bool operator!=(intptr_t p) const { return obj() != (oopDesc*)p; } @@ -126,7 +115,7 @@ operator markOop () const { return markOop(obj()); } operator address () const { return (address)obj(); } - operator intptr_t () const { return (intptr_t)obj(); } + operator intptr_t () const volatile { return (intptr_t)obj(); } // from javaCalls.cpp operator jobject () const { return (jobject)obj(); } @@ -139,7 +128,7 @@ #endif // from parNewGeneration and other things that want to get to the end of - // an oop for stuff (like constMethodKlass.cpp, objArrayKlass.cpp) + // an oop for stuff (like objArrayKlass.cpp) operator oop* () const { return (oop *)obj(); } }; @@ -154,41 +143,37 @@ type##OopDesc* operator->() const { \ return (type##OopDesc*)obj(); \ } \ - }; \ + }; DEF_OOP(instance); -DEF_OOP(method); -DEF_OOP(methodData); DEF_OOP(array); -DEF_OOP(constMethod); -DEF_OOP(constantPool); -DEF_OOP(constantPoolCache); DEF_OOP(objArray); DEF_OOP(typeArray); -DEF_OOP(klass); -DEF_OOP(compiledICHolder); #endif // CHECK_UNHANDLED_OOPS +// The metadata hierarchy is separate from the oop hierarchy + +// class MetaspaceObj +class ConstMethod; +class ConstantPoolCache; +class MethodData; +// class Metadata +class Method; +class ConstantPool; +// class CHeapObj +class CompiledICHolder; + + // The klass hierarchy is separate from the oop hierarchy. class Klass; -class instanceKlass; +class InstanceKlass; class instanceMirrorKlass; +class instanceClassLoaderKlass; class instanceRefKlass; -class methodKlass; -class constMethodKlass; -class methodDataKlass; -class klassKlass; -class instanceKlassKlass; -class arrayKlassKlass; -class objArrayKlassKlass; -class typeArrayKlassKlass; class arrayKlass; class objArrayKlass; class typeArrayKlass; -class constantPoolKlass; -class constantPoolCacheKlass; -class compiledICHolderKlass; #endif // SHARE_VM_OOPS_OOPSHIERARCHY_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/symbol.cpp --- a/src/share/vm/oops/symbol.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/symbol.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -24,10 +24,12 @@ #include "precompiled.hpp" -#include "oops/oop.inline.hpp" +#include "classfile/altHashing.hpp" +#include "classfile/classLoaderData.hpp" #include "oops/symbol.hpp" #include "runtime/os.hpp" #include "memory/allocation.inline.hpp" +#include "memory/resourceArea.hpp" Symbol::Symbol(const u1* name, int length, int refcount) : _refcount(refcount), _length(length) { _identity_hash = os::random(); @@ -37,19 +39,30 @@ } void* Symbol::operator new(size_t sz, int len, TRAPS) { - int alloc_size = object_size(len)*HeapWordSize; + int alloc_size = size(len)*HeapWordSize; address res = (address) AllocateHeap(alloc_size, mtSymbol); - DEBUG_ONLY(set_allocation_type(res, ResourceObj::C_HEAP);) return res; } void* Symbol::operator new(size_t sz, int len, Arena* arena, TRAPS) { - int alloc_size = object_size(len)*HeapWordSize; + int alloc_size = size(len)*HeapWordSize; address res = (address)arena->Amalloc(alloc_size); - DEBUG_ONLY(set_allocation_type(res, ResourceObj::ARENA);) return res; } +void* Symbol::operator new(size_t sz, int len, ClassLoaderData* loader_data, TRAPS) { + address res; + int alloc_size = size(len)*HeapWordSize; + res = (address) Metaspace::allocate(loader_data, size(len), true, + Metaspace::NonClassType, CHECK_NULL); + return res; +} + +void Symbol::operator delete(void *p) { + assert(((Symbol*)p)->refcount() == 0, "should not call this"); + FreeHeap(p); +} + // ------------------------------------------------------------------ // Symbol::equals // @@ -191,6 +204,12 @@ return str; } +// Alternate hashing for unbalanced symbol tables. +unsigned int Symbol::new_hash(jint seed) { + ResourceMark rm; + // Use alternate hashing algorithm on this symbol. + return AltHashing::murmur3_32(seed, (const jbyte*)as_C_string(), utf8_length()); +} void Symbol::print_on(outputStream* st) const { if (this == NULL) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/symbol.hpp --- a/src/share/vm/oops/symbol.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/symbol.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -36,7 +36,7 @@ // // All Symbols are allocated and added to the SymbolTable. // When a class is unloaded, the reference counts of the Symbol pointers in -// the ConstantPool and in instanceKlass (see release_C_heap_structures) are +// the ConstantPool and in InstanceKlass (see release_C_heap_structures) are // decremented. When the reference count for a Symbol goes to 0, the garbage // collector can free the Symbol and remove it from the SymbolTable. // @@ -96,7 +96,13 @@ // TempNewSymbol (passed in as a parameter) so the reference count on its symbol // will be decremented when it goes out of scope. -class Symbol : public ResourceObj { + +// This cannot be inherited from ResourceObj because it cannot have a vtable. +// Since sometimes this is allocated from Metadata, pick a base allocation +// type without virtual functions. +class ClassLoaderData; + +class Symbol : public MetaspaceObj { friend class VMStructs; friend class SymbolTable; friend class MoveSymbols; @@ -111,9 +117,9 @@ max_symbol_length = (1 << 16) -1 }; - static int object_size(int length) { - size_t size = heap_word_size(sizeof(Symbol) + (length > 0 ? length - 1 : 0)); - return align_object_size(size); + static int size(int length) { + size_t sz = heap_word_size(sizeof(Symbol) + (length > 0 ? length - 1 : 0)); + return align_object_size(sz); } void byte_at_put(int index, int value) { @@ -124,18 +130,24 @@ Symbol(const u1* name, int length, int refcount); void* operator new(size_t size, int len, TRAPS); void* operator new(size_t size, int len, Arena* arena, TRAPS); + void* operator new(size_t size, int len, ClassLoaderData* loader_data, TRAPS); + + void operator delete(void* p); public: // Low-level access (used with care, since not GC-safe) const jbyte* base() const { return &_body[0]; } - int object_size() { return object_size(utf8_length()); } + int size() { return size(utf8_length()); } // Returns the largest size symbol we can safely hold. static int max_length() { return max_symbol_length; } int identity_hash() { return _identity_hash; } + // For symbol table alternate hashing + unsigned int new_hash(jint seed); + // Reference counting. See comments above this class for when to use. int refcount() const { return _refcount; } inline void increment_refcount(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/typeArrayKlass.cpp --- a/src/share/vm/oops/typeArrayKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/typeArrayKlass.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -23,23 +23,25 @@ */ #include "precompiled.hpp" +#include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" #include "gc_interface/collectedHeap.hpp" #include "gc_interface/collectedHeap.inline.hpp" +#include "memory/metadataFactory.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.hpp" #include "memory/universe.inline.hpp" #include "oops/instanceKlass.hpp" -#include "oops/klassOop.hpp" -#include "oops/objArrayKlassKlass.hpp" +#include "oops/klass.inline.hpp" +#include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" #include "oops/typeArrayKlass.hpp" #include "oops/typeArrayOop.hpp" #include "runtime/handles.inline.hpp" -bool typeArrayKlass::compute_is_subtype_of(klassOop k) { - if (!k->klass_part()->oop_is_typeArray()) { +bool typeArrayKlass::compute_is_subtype_of(Klass* k) { + if (!k->oop_is_typeArray()) { return arrayKlass::compute_is_subtype_of(k); } @@ -49,31 +51,46 @@ return element_type() == tak->element_type(); } -klassOop typeArrayKlass::create_klass(BasicType type, int scale, +typeArrayKlass* typeArrayKlass::create_klass(BasicType type, const char* name_str, TRAPS) { - typeArrayKlass o; - Symbol* sym = NULL; if (name_str != NULL) { sym = SymbolTable::new_permanent_symbol(name_str, CHECK_NULL); } - KlassHandle klassklass (THREAD, Universe::typeArrayKlassKlassObj()); + + ClassLoaderData* null_loader_data = ClassLoaderData::the_null_class_loader_data(); + + typeArrayKlass* ak = typeArrayKlass::allocate(null_loader_data, type, sym, CHECK_NULL); - arrayKlassHandle k = base_create_array_klass(o.vtbl_value(), header_size(), klassklass, CHECK_NULL); - typeArrayKlass* ak = typeArrayKlass::cast(k()); - ak->set_name(sym); - ak->set_layout_helper(array_layout_helper(type)); - assert(scale == (1 << ak->log2_element_size()), "scale must check out"); - assert(ak->oop_is_javaArray(), "sanity"); - assert(ak->oop_is_typeArray(), "sanity"); - ak->set_max_length(arrayOopDesc::max_array_length(type)); - assert(k()->size() > header_size(), "bad size"); + // Add all classes to our internal class loader list here, + // including classes in the bootstrap (NULL) class loader. + // GC walks these as strong roots. + null_loader_data->add_class(ak); // Call complete_create_array_klass after all instance variables have been initialized. - KlassHandle super (THREAD, k->super()); - complete_create_array_klass(k, super, CHECK_NULL); + complete_create_array_klass(ak, ak->super(), CHECK_NULL); + + return ak; +} + +typeArrayKlass* typeArrayKlass::allocate(ClassLoaderData* loader_data, BasicType type, Symbol* name, TRAPS) { + assert(typeArrayKlass::header_size() <= InstanceKlass::header_size(), + "array klasses must be same size as InstanceKlass"); + + int size = arrayKlass::static_size(typeArrayKlass::header_size()); - return k(); + return new (loader_data, size, THREAD) typeArrayKlass(type, name); +} + +typeArrayKlass::typeArrayKlass(BasicType type, Symbol* name) : arrayKlass(name) { + set_layout_helper(array_layout_helper(type)); + assert(oop_is_array(), "sanity"); + assert(oop_is_typeArray(), "sanity"); + + set_max_length(arrayOopDesc::max_array_length(type)); + assert(size() >= typeArrayKlass::header_size(), "bad size"); + + set_class_loader_data(ClassLoaderData::the_null_class_loader_data()); } typeArrayOop typeArrayKlass::allocate_common(int length, bool do_zero, TRAPS) { @@ -81,7 +98,7 @@ if (length >= 0) { if (length <= max_length()) { size_t size = typeArrayOopDesc::object_size(layout_helper(), length); - KlassHandle h_k(THREAD, as_klassOop()); + KlassHandle h_k(THREAD, this); typeArrayOop t; CollectedHeap* ch = Universe::heap(); if (do_zero) { @@ -89,7 +106,6 @@ } else { t = (typeArrayOop)CollectedHeap::array_allocate_nozero(h_k, (int)size, length, CHECK_NULL); } - assert(t->is_parsable(), "Don't publish unless parsable"); return t; } else { report_java_out_of_memory("Requested array size exceeds VM limit"); @@ -101,16 +117,6 @@ } } -typeArrayOop typeArrayKlass::allocate_permanent(int length, TRAPS) { - if (length < 0) THROW_0(vmSymbols::java_lang_NegativeArraySizeException()); - int size = typeArrayOopDesc::object_size(layout_helper(), length); - KlassHandle h_k(THREAD, as_klassOop()); - typeArrayOop t = (typeArrayOop) - CollectedHeap::permanent_array_allocate(h_k, size, length, CHECK_NULL); - assert(t->is_parsable(), "Can't publish until parsable"); - return t; -} - oop typeArrayKlass::multi_allocate(int rank, jint* last_size, TRAPS) { // For typeArrays this is only called for the last dimension assert(rank == 1, "just checking"); @@ -150,19 +156,13 @@ // create a klass of array holding typeArrays -klassOop typeArrayKlass::array_klass_impl(bool or_null, int n, TRAPS) { - typeArrayKlassHandle h_this(THREAD, as_klassOop()); - return array_klass_impl(h_this, or_null, n, THREAD); -} +Klass* typeArrayKlass::array_klass_impl(bool or_null, int n, TRAPS) { + int dim = dimension(); + assert(dim <= n, "check order of chain"); + if (dim == n) + return this; -klassOop typeArrayKlass::array_klass_impl(typeArrayKlassHandle h_this, bool or_null, int n, TRAPS) { - int dimension = h_this->dimension(); - assert(dimension <= n, "check order of chain"); - if (dimension == n) - return h_this(); - - objArrayKlassHandle h_ak(THREAD, h_this->higher_dimension()); - if (h_ak.is_null()) { + if (higher_dimension() == NULL) { if (or_null) return NULL; ResourceMark rm; @@ -172,28 +172,27 @@ // Atomic create higher dimension and link into list MutexLocker mu(MultiArray_lock, THREAD); - h_ak = objArrayKlassHandle(THREAD, h_this->higher_dimension()); - if (h_ak.is_null()) { - klassOop oak = objArrayKlassKlass::cast( - Universe::objArrayKlassKlassObj())->allocate_objArray_klass( - dimension + 1, h_this, CHECK_NULL); - h_ak = objArrayKlassHandle(THREAD, oak); - h_ak->set_lower_dimension(h_this()); + if (higher_dimension() == NULL) { + Klass* oak = objArrayKlass::allocate_objArray_klass( + class_loader_data(), dim + 1, this, CHECK_NULL); + objArrayKlass* h_ak = objArrayKlass::cast(oak); + h_ak->set_lower_dimension(this); OrderAccess::storestore(); - h_this->set_higher_dimension(h_ak()); + set_higher_dimension(h_ak); assert(h_ak->oop_is_objArray(), "incorrect initialization of objArrayKlass"); } } } else { CHECK_UNHANDLED_OOPS_ONLY(Thread::current()->clear_unhandled_oops()); } + objArrayKlass* h_ak = objArrayKlass::cast(higher_dimension()); if (or_null) { return h_ak->array_klass_or_null(n); } return h_ak->array_klass(n, CHECK_NULL); } -klassOop typeArrayKlass::array_klass_impl(bool or_null, TRAPS) { +Klass* typeArrayKlass::array_klass_impl(bool or_null, TRAPS) { return array_klass_impl(or_null, dimension() + 1, THREAD); } @@ -225,7 +224,7 @@ return t->object_size(); } -int typeArrayKlass::oop_oop_iterate(oop obj, OopClosure* blk) { +int typeArrayKlass::oop_oop_iterate(oop obj, ExtendedOopClosure* blk) { assert(obj->is_typeArray(),"must be a type array"); typeArrayOop t = typeArrayOop(obj); // Performance tweak: We skip iterating over the klass pointer since we @@ -233,7 +232,7 @@ return t->object_size(); } -int typeArrayKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { +int typeArrayKlass::oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) { assert(obj->is_typeArray(),"must be a type array"); typeArrayOop t = typeArrayOop(obj); // Performance tweak: We skip iterating over the klass pointer since we @@ -243,6 +242,7 @@ #ifndef SERIALGC void typeArrayKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { + ShouldNotReachHere(); assert(obj->is_typeArray(),"must be a type array"); } @@ -273,8 +273,35 @@ return NULL; } + +// Printing + +void typeArrayKlass::print_on(outputStream* st) const { #ifndef PRODUCT -// Printing + assert(is_klass(), "must be klass"); + print_value_on(st); + Klass::print_on(st); +#endif //PRODUCT +} + +void typeArrayKlass::print_value_on(outputStream* st) const { + assert(is_klass(), "must be klass"); + st->print("{type array "); + switch (element_type()) { + case T_BOOLEAN: st->print("bool"); break; + case T_CHAR: st->print("char"); break; + case T_FLOAT: st->print("float"); break; + case T_DOUBLE: st->print("double"); break; + case T_BYTE: st->print("byte"); break; + case T_SHORT: st->print("short"); break; + case T_INT: st->print("int"); break; + case T_LONG: st->print("long"); break; + default: ShouldNotReachHere(); + } + st->print("}"); +} + +#ifndef PRODUCT static void print_boolean_array(typeArrayOop ta, int print_len, outputStream* st) { for (int index = 0; index < print_len; index++) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/typeArrayKlass.hpp --- a/src/share/vm/oops/typeArrayKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/typeArrayKlass.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ #ifndef SHARE_VM_OOPS_TYPEARRAYKLASS_HPP #define SHARE_VM_OOPS_TYPEARRAYKLASS_HPP +#include "classfile/classLoaderData.hpp" #include "oops/arrayKlass.hpp" // A typeArrayKlass is the klass of a typeArray @@ -34,7 +35,13 @@ friend class VMStructs; private: jint _max_length; // maximum number of elements allowed in an array + + // Constructor + typeArrayKlass(BasicType type, Symbol* name); + static typeArrayKlass* allocate(ClassLoaderData* loader_data, BasicType type, Symbol* name, TRAPS); public: + typeArrayKlass() {} // For dummy objects. + // instance variables jint max_length() { return _max_length; } void set_max_length(jint m) { _max_length = m; } @@ -43,30 +50,29 @@ bool oop_is_typeArray_slow() const { return true; } // klass allocation - DEFINE_ALLOCATE_PERMANENT(typeArrayKlass); - static klassOop create_klass(BasicType type, int scale, const char* name_str, + static typeArrayKlass* create_klass(BasicType type, const char* name_str, TRAPS); - static inline klassOop create_klass(BasicType type, int scale, TRAPS) { - return create_klass(type, scale, external_name(type), CHECK_NULL); + static inline Klass* create_klass(BasicType type, int scale, TRAPS) { + typeArrayKlass* tak = create_klass(type, external_name(type), CHECK_NULL); + assert(scale == (1 << tak->log2_element_size()), "scale must check out"); + return tak; } int oop_size(oop obj) const; - int klass_oop_size() const { return object_size(); } - bool compute_is_subtype_of(klassOop k); + bool compute_is_subtype_of(Klass* k); // Allocation typeArrayOop allocate_common(int length, bool do_zero, TRAPS); typeArrayOop allocate(int length, TRAPS) { return allocate_common(length, true, THREAD); } - typeArrayOop allocate_permanent(int length, TRAPS); // used for class file structures oop multi_allocate(int rank, jint* sizes, TRAPS); // Copying void copy_array(arrayOop s, int src_pos, arrayOop d, int dst_pos, int length, TRAPS); // Iteration - int oop_oop_iterate(oop obj, OopClosure* blk); - int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr); + int oop_oop_iterate(oop obj, ExtendedOopClosure* blk); + int oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr); // Garbage collection void oop_follow_contents(oop obj); @@ -77,37 +83,37 @@ protected: // Find n'th dimensional array - virtual klassOop array_klass_impl(bool or_null, int n, TRAPS); + virtual Klass* array_klass_impl(bool or_null, int n, TRAPS); // Returns the array class with this class as element type - virtual klassOop array_klass_impl(bool or_null, TRAPS); + virtual Klass* array_klass_impl(bool or_null, TRAPS); public: - // Casting from klassOop - static typeArrayKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_typeArray_slow(), "cast to typeArrayKlass"); - return (typeArrayKlass*) k->klass_part(); + // Casting from Klass* + static typeArrayKlass* cast(Klass* k) { + assert(k->oop_is_typeArray(), "cast to typeArrayKlass"); + return (typeArrayKlass*) k; } // Naming static const char* external_name(BasicType type); // Sizing - static int header_size() { return oopDesc::header_size() + sizeof(typeArrayKlass)/HeapWordSize; } - int object_size() const { return arrayKlass::object_size(header_size()); } + static int header_size() { return sizeof(typeArrayKlass)/HeapWordSize; } + int size() const { return arrayKlass::static_size(header_size()); } // Initialization (virtual from Klass) void initialize(TRAPS); - private: - // Helpers - static klassOop array_klass_impl(typeArrayKlassHandle h_this, bool or_null, int n, TRAPS); - -#ifndef PRODUCT public: // Printing +#ifndef PRODUCT void oop_print_on(oop obj, outputStream* st); #endif + + void print_on(outputStream* st) const; + void print_value_on(outputStream* st) const; + public: const char* internal_name() const; }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/typeArrayKlassKlass.cpp --- a/src/share/vm/oops/typeArrayKlassKlass.cpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#include "precompiled.hpp" -#include "classfile/javaClasses.hpp" -#include "oops/oop.inline.hpp" -#include "oops/typeArrayKlassKlass.hpp" -#include "runtime/handles.inline.hpp" - -klassOop typeArrayKlassKlass::create_klass(TRAPS) { - typeArrayKlassKlass o; - KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); - KlassHandle k = base_create_klass(h_this_klass, header_size(), o.vtbl_value(), CHECK_NULL); - assert(k()->size() == align_object_size(header_size()), "wrong size for object"); - java_lang_Class::create_mirror(k, CHECK_NULL); // Allocate mirror - return k(); -} - - -#ifndef PRODUCT - -// Printing - -void typeArrayKlassKlass::oop_print_on(oop obj, outputStream* st) { - assert(obj->is_klass(), "must be klass"); - oop_print_value_on(obj, st); - Klass:: oop_print_on(obj, st); -} - -#endif //PRODUCT - -void typeArrayKlassKlass::oop_print_value_on(oop obj, outputStream* st) { - assert(obj->is_klass(), "must be klass"); - st->print("{type array "); - switch (typeArrayKlass::cast(klassOop(obj))->element_type()) { - case T_BOOLEAN: st->print("bool"); break; - case T_CHAR: st->print("char"); break; - case T_FLOAT: st->print("float"); break; - case T_DOUBLE: st->print("double"); break; - case T_BYTE: st->print("byte"); break; - case T_SHORT: st->print("short"); break; - case T_INT: st->print("int"); break; - case T_LONG: st->print("long"); break; - default: ShouldNotReachHere(); - } - st->print("}"); -} - -const char* typeArrayKlassKlass::internal_name() const { - return "{type array class}"; -} diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/typeArrayKlassKlass.hpp --- a/src/share/vm/oops/typeArrayKlassKlass.hpp Fri Aug 31 16:39:35 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -#ifndef SHARE_VM_OOPS_TYPEARRAYKLASSKLASS_HPP -#define SHARE_VM_OOPS_TYPEARRAYKLASSKLASS_HPP - -#include "oops/arrayKlassKlass.hpp" -#include "oops/typeArrayKlass.hpp" - -// A typeArrayKlassKlass is the klass of a typeArrayKlass - -class typeArrayKlassKlass : public arrayKlassKlass { - public: - // Testing - bool oop_is_typeArrayKlass() const { return true; } - - // Dispatched operation - int oop_size(oop obj) const { return typeArrayKlass::cast(klassOop(obj))->object_size(); } - int klass_oop_size() const { return object_size(); } - - // Allocation - DEFINE_ALLOCATE_PERMANENT(typeArrayKlassKlass); - static klassOop create_klass(TRAPS); - - // Casting from klassOop - static typeArrayKlassKlass* cast(klassOop k) { - assert(k->klass_part()->oop_is_klass(), "cast to typeArrayKlassKlass"); - return (typeArrayKlassKlass*) k->klass_part(); - } - - // Sizing - static int header_size() { return oopDesc::header_size() + sizeof(typeArrayKlassKlass)/HeapWordSize; } - int object_size() const { return align_object_size(header_size()); } - - public: - // Printing - void oop_print_value_on(oop obj, outputStream* st); -#ifndef PRODUCT - void oop_print_on(oop obj, outputStream* st); -#endif //PRODUCT - - const char* internal_name() const; -}; - -#endif // SHARE_VM_OOPS_TYPEARRAYKLASSKLASS_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/oops/typeArrayOop.hpp --- a/src/share/vm/oops/typeArrayOop.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/oops/typeArrayOop.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -151,6 +151,23 @@ jbyte byte_at_acquire(int which) const { return OrderAccess::load_acquire(byte_at_addr(which)); } void release_byte_at_put(int which, jbyte contents) { OrderAccess::release_store(byte_at_addr(which), contents); } + // Java thinks metadata arrays are just arrays of either long or int, since + // there doesn't seem to be T_ADDRESS, so this is a bit of unfortunate + // casting +#ifdef _LP64 + Metadata* metadata_at(int which) const { + return (Metadata*)*long_at_addr(which); } + void metadata_at_put(int which, Metadata* contents) { + *long_at_addr(which) = (long)contents; + } +#else + Metadata* metadata_at(int which) const { + return (Metadata*)*int_at_addr(which); } + void metadata_at_put(int which, Metadata* contents) { + *int_at_addr(which) = (int)contents; + } +#endif // _LP64 + // Sizing // Returns the number of words necessary to hold an array of "len" diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/callGenerator.cpp --- a/src/share/vm/opto/callGenerator.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/callGenerator.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "ci/bcEscapeAnalyzer.hpp" #include "ci/ciCallSite.hpp" -#include "ci/ciCPCache.hpp" +#include "ci/ciObjArray.hpp" #include "ci/ciMemberName.hpp" #include "ci/ciMethodHandle.hpp" #include "classfile/javaClasses.hpp" @@ -167,7 +167,7 @@ VirtualCallGenerator(ciMethod* method, int vtable_index) : CallGenerator(method), _vtable_index(vtable_index) { - assert(vtable_index == methodOopDesc::invalid_vtable_index || + assert(vtable_index == Method::invalid_vtable_index || vtable_index >= 0, "either invalid or usable"); } virtual bool is_virtual() const { return true; } @@ -217,7 +217,7 @@ assert(!method()->is_static(), "virtual call must not be to static"); assert(!method()->is_final(), "virtual call should not be to final"); assert(!method()->is_private(), "virtual call should not be to private"); - assert(_vtable_index == methodOopDesc::invalid_vtable_index || !UseInlineCaches, + assert(_vtable_index == Method::invalid_vtable_index || !UseInlineCaches, "no vtable calls if +UseInlineCaches "); address target = SharedRuntime::get_resolve_virtual_call_stub(); // Normal inline cache used for call @@ -603,7 +603,7 @@ const TypeOopPtr* oop_ptr = receiver->bottom_type()->is_oopptr(); ciMethod* target = oop_ptr->const_oop()->as_method_handle()->get_vmtarget(); guarantee(!target->is_method_handle_intrinsic(), "should not happen"); // XXX remove - const int vtable_index = methodOopDesc::invalid_vtable_index; + const int vtable_index = Method::invalid_vtable_index; CallGenerator* cg = C->call_generator(target, vtable_index, false, jvms, true, PROB_ALWAYS); if (cg != NULL && cg->is_inline()) return cg; @@ -653,7 +653,7 @@ } } } - const int vtable_index = methodOopDesc::invalid_vtable_index; + const int vtable_index = Method::invalid_vtable_index; const bool call_is_virtual = target->is_abstract(); // FIXME workaround CallGenerator* cg = C->call_generator(target, vtable_index, call_is_virtual, jvms, true, PROB_ALWAYS); if (cg != NULL && cg->is_inline()) diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/callnode.cpp --- a/src/share/vm/opto/callnode.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/callnode.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -83,7 +83,7 @@ const Type *t = _domain->field_at(proj->_con); if (t->base() == Type::Half) // 2nd half of Longs and Doubles return new (match->C, 1) ConNode(Type::TOP); - uint ideal_reg = Matcher::base2reg[t->base()]; + uint ideal_reg = t->ideal_reg(); RegMask &rm = match->_calling_convention_mask[parm_num]; return new (match->C, 1) MachProjNode(this,proj->_con,rm,ideal_reg); } @@ -131,7 +131,7 @@ case TypeFunc::Parms : { // Type of argument being passed const Type *t = in(0)->as_Start()->_domain->field_at(_con); - return Matcher::base2reg[t->base()]; + return t->ideal_reg(); } } ShouldNotReachHere(); @@ -344,10 +344,15 @@ st->print(" %s%d]=#NULL",msg,i); break; case Type::AryPtr: - case Type::KlassPtr: case Type::InstPtr: st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->isa_oopptr()->const_oop()); break; + case Type::KlassPtr: + st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->make_ptr()->isa_klassptr()->klass()); + break; + case Type::MetadataPtr: + st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->make_ptr()->isa_metadataptr()->metadata()); + break; case Type::NarrowOop: st->print(" %s%d]=#Ptr" INTPTR_FORMAT,msg,i,t->make_ptr()->isa_oopptr()->const_oop()); break; @@ -628,7 +633,7 @@ return new (match->C, 1) MachProjNode(this,proj->_con, RegMask::Empty, (uint)OptoReg::Bad); case TypeFunc::Parms: { // Normal returns - uint ideal_reg = Matcher::base2reg[tf()->range()->field_at(TypeFunc::Parms)->base()]; + uint ideal_reg = tf()->range()->field_at(TypeFunc::Parms)->ideal_reg(); OptoRegPair regs = is_CallRuntime() ? match->c_return_value(ideal_reg,true) // Calls into C runtime : match-> return_value(ideal_reg,true); // Calls into compiled Java code diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/cfgnode.cpp --- a/src/share/vm/opto/cfgnode.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/cfgnode.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1936,7 +1936,7 @@ } const RegMask &PhiNode::out_RegMask() const { - uint ideal_reg = Matcher::base2reg[_type->base()]; + uint ideal_reg = _type->ideal_reg(); assert( ideal_reg != Node::NotAMachineReg, "invalid type at Phi" ); if( ideal_reg == 0 ) return RegMask::Empty; return *(Compile::current()->matcher()->idealreg2spillmask[ideal_reg]); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/compile.cpp --- a/src/share/vm/opto/compile.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/compile.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -925,17 +925,6 @@ } } -#ifndef PRODUCT -void print_opto_verbose_signature( const TypeFunc *j_sig, const char *stub_name ) { - if(PrintOpto && Verbose) { - tty->print("%s ", stub_name); j_sig->print_flattened(); tty->cr(); - } -} -#endif - -void Compile::print_codes() { -} - //------------------------------Init------------------------------------------- // Prepare for a single compilation void Compile::Init(int aliaslevel) { @@ -963,7 +952,7 @@ set_recent_alloc(NULL, NULL); // Create Debug Information Recorder to record scopes, oopmaps, etc. - env()->set_oop_recorder(new OopRecorder(comp_arena())); + env()->set_oop_recorder(new OopRecorder(env()->arena())); env()->set_debug_info(new DebugInformationRecorder(env()->oop_recorder())); env()->set_dependencies(new Dependencies(env())); @@ -1182,7 +1171,7 @@ // space to include all of the array body. Only the header, klass // and array length can be accessed un-aliased. if( offset != Type::OffsetBot ) { - if( ta->const_oop() ) { // methodDataOop or methodOop + if( ta->const_oop() ) { // MethodData* or Method* offset = Type::OffsetBot; // Flatten constant access into array body tj = ta = TypeAryPtr::make(ptr,ta->const_oop(),ta->ary(),ta->klass(),false,offset); } else if( offset == arrayOopDesc::length_offset_in_bytes() ) { @@ -3026,12 +3015,13 @@ if (can_be_reused() != other.can_be_reused()) return false; // For floating point values we compare the bit pattern. switch (type()) { - case T_FLOAT: return (_value.i == other._value.i); + case T_FLOAT: return (_v._value.i == other._v._value.i); case T_LONG: - case T_DOUBLE: return (_value.j == other._value.j); + case T_DOUBLE: return (_v._value.j == other._v._value.j); case T_OBJECT: - case T_ADDRESS: return (_value.l == other._value.l); - case T_VOID: return (_value.l == other._value.l); // jump-table entries + case T_METADATA: return (_v._metadata == other._v._metadata); + case T_ADDRESS: return (_v._value.l == other._v._value.l); + case T_VOID: return (_v._value.l == other._v._value.l); // jump-table entries default: ShouldNotReachHere(); } return false; @@ -3042,6 +3032,7 @@ case T_LONG: return sizeof(jlong ); case T_FLOAT: return sizeof(jfloat ); case T_DOUBLE: return sizeof(jdouble); + case T_METADATA: return sizeof(Metadata*); // We use T_VOID as marker for jump-table entries (labels) which // need an internal word relocation. case T_VOID: @@ -3135,6 +3126,12 @@ } break; } + case T_METADATA: { + Metadata* obj = con.get_metadata(); + int metadata_index = _masm.oop_recorder()->find_index(obj); + constant_addr = _masm.address_constant((address) obj, metadata_Relocation::spec(metadata_index)); + break; + } default: ShouldNotReachHere(); } assert(constant_addr, "consts section too small"); @@ -3168,6 +3165,12 @@ return con; } +Compile::Constant Compile::ConstantTable::add(Metadata* metadata) { + Constant con(metadata); + add(con); + return con; +} + Compile::Constant Compile::ConstantTable::add(MachConstantNode* n, MachOper* oper) { jvalue value; BasicType type = oper->type()->basic_type(); @@ -3177,7 +3180,8 @@ case T_DOUBLE: value.d = oper->constantD(); break; case T_OBJECT: case T_ADDRESS: value.l = (jobject) oper->constant(); break; - default: ShouldNotReachHere(); + case T_METADATA: return add((Metadata*)oper->constant()); break; + default: guarantee(false, err_msg_res("unhandled type: %s", type2name(type))); } return add(n, type, value); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/compile.hpp --- a/src/share/vm/opto/compile.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/compile.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -141,36 +141,51 @@ }; struct AliasCacheEntry { const TypePtr* _adr_type; int _index; }; // simple duple type enum { - trapHistLength = methodDataOopDesc::_trap_hist_limit + trapHistLength = MethodData::_trap_hist_limit }; // Constant entry of the constant table. class Constant { private: BasicType _type; + union { jvalue _value; + Metadata* _metadata; + } _v; int _offset; // offset of this constant (in bytes) relative to the constant table base. float _freq; bool _can_be_reused; // true (default) if the value can be shared with other users. public: - Constant() : _type(T_ILLEGAL), _offset(-1), _freq(0.0f), _can_be_reused(true) { _value.l = 0; } + Constant() : _type(T_ILLEGAL), _offset(-1), _freq(0.0f), _can_be_reused(true) { _v._value.l = 0; } Constant(BasicType type, jvalue value, float freq = 0.0f, bool can_be_reused = true) : _type(type), - _value(value), _offset(-1), _freq(freq), _can_be_reused(can_be_reused) - {} + { + assert(type != T_METADATA, "wrong constructor"); + _v._value = value; + } + Constant(Metadata* metadata, bool can_be_reused = true) : + _type(T_METADATA), + _offset(-1), + _freq(0.0f), + _can_be_reused(can_be_reused) + { + _v._metadata = metadata; + } bool operator==(const Constant& other); BasicType type() const { return _type; } - jlong get_jlong() const { return _value.j; } - jfloat get_jfloat() const { return _value.f; } - jdouble get_jdouble() const { return _value.d; } - jobject get_jobject() const { return _value.l; } + jlong get_jlong() const { return _v._value.j; } + jfloat get_jfloat() const { return _v._value.f; } + jdouble get_jdouble() const { return _v._value.d; } + jobject get_jobject() const { return _v._value.l; } + + Metadata* get_metadata() const { return _v._metadata; } int offset() const { return _offset; } void set_offset(int offset) { _offset = offset; } @@ -219,6 +234,7 @@ void add(Constant& con); Constant add(MachConstantNode* n, BasicType type, jvalue value); + Constant add(Metadata* metadata); Constant add(MachConstantNode* n, MachOper* oper); Constant add(MachConstantNode* n, jfloat f) { jvalue value; value.f = f; @@ -270,7 +286,7 @@ bool _do_scheduling; // True if we intend to do scheduling bool _do_freq_based_layout; // True if we intend to do frequency based block layout bool _do_count_invocations; // True if we generate code to count invocations - bool _do_method_data_update; // True if we generate code to update methodDataOops + bool _do_method_data_update; // True if we generate code to update MethodData*s int _AliasLevel; // Locally-adjusted version of AliasLevel flag. bool _print_assembly; // True if we should dump assembly code for this compilation #ifndef PRODUCT @@ -896,9 +912,6 @@ // graph is strongly connected from root in both directions. void verify_graph_edges(bool no_dead_code = false) PRODUCT_RETURN; - // Print bytecodes, including the scope inlining tree - void print_codes(); - // End-of-run dumps. static void print_statistics() PRODUCT_RETURN; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/connode.cpp --- a/src/share/vm/opto/connode.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/connode.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -50,10 +50,11 @@ case T_FLOAT: return new (C, 1) ConFNode( t->is_float_constant() ); case T_DOUBLE: return new (C, 1) ConDNode( t->is_double_constant() ); case T_VOID: return new (C, 1) ConNode ( Type::TOP ); - case T_OBJECT: return new (C, 1) ConPNode( t->is_oopptr() ); + case T_OBJECT: return new (C, 1) ConPNode( t->is_ptr() ); case T_ARRAY: return new (C, 1) ConPNode( t->is_aryptr() ); case T_ADDRESS: return new (C, 1) ConPNode( t->is_ptr() ); case T_NARROWOOP: return new (C, 1) ConNNode( t->is_narrowoop() ); + case T_METADATA: return new (C, 1) ConPNode( t->is_ptr() ); // Expected cases: TypePtr::NULL_PTR, any is_rawptr() // Also seen: AnyPtr(TopPTR *+top); from command line: // r -XX:+PrintOpto -XX:CIStart=285 -XX:+CompileTheWorld -XX:CompileTheWorldStartAt=660 @@ -526,8 +527,8 @@ // // If either input is an 'interface', return destination type // assert (in_oop == NULL || in_oop->klass() != NULL, ""); // assert (my_oop == NULL || my_oop->klass() != NULL, ""); - // if( (in_oop && in_oop->klass()->klass_part()->is_interface()) - // ||(my_oop && my_oop->klass()->klass_part()->is_interface()) ) { + // if( (in_oop && in_oop->klass()->is_interface()) + // ||(my_oop && my_oop->klass()->is_interface()) ) { // TypePtr::PTR in_ptr = in->isa_ptr() ? in->is_ptr()->_ptr : TypePtr::BotPTR; // // Preserve cast away nullness for interfaces // if( in_ptr == TypePtr::NotNull && my_oop && my_oop->_ptr == TypePtr::BotPTR ) { @@ -604,7 +605,7 @@ if (t == Type::TOP) return Type::TOP; if (t == TypePtr::NULL_PTR) return TypeNarrowOop::NULL_PTR; - assert(t->isa_oopptr(), "only oopptr here"); + assert(t->isa_oop_ptr() || UseCompressedKlassPointers && t->isa_klassptr(), "only oopptr here"); return t->make_narrowoop(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/doCall.cpp --- a/src/share/vm/opto/doCall.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/doCall.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,6 @@ */ #include "precompiled.hpp" -#include "ci/ciCPCache.hpp" #include "ci/ciCallSite.hpp" #include "ci/ciMethodHandle.hpp" #include "classfile/vmSymbols.hpp" @@ -392,7 +391,7 @@ // Choose call strategy. bool call_is_virtual = is_virtual_or_interface; - int vtable_index = methodOopDesc::invalid_vtable_index; + int vtable_index = Method::invalid_vtable_index; ciMethod* callee = orig_callee; // Try to get the most accurate receiver type @@ -539,7 +538,7 @@ } } } else { - assert(ct == rt, err_msg_res("unexpected mismatch rt=%d, ct=%d", rt, ct)); + assert(ct == rt, err_msg("unexpected mismatch rt=%d, ct=%d", rt, ct)); // push a zero; it's better than getting an oop/int mismatch retnode = pop_node(rt); retnode = zerocon(ct); @@ -836,9 +835,9 @@ if( at_method_entry ) { // bump invocation counter if top method (for statistics) if (CountCompiledCalls && depth() == 1) { - const TypeOopPtr* addr_type = TypeOopPtr::make_from_constant(method()); + const TypePtr* addr_type = TypeMetadataPtr::make(method()); Node* adr1 = makecon(addr_type); - Node* adr2 = basic_plus_adr(adr1, adr1, in_bytes(methodOopDesc::compiled_invocation_counter_offset())); + Node* adr2 = basic_plus_adr(adr1, adr1, in_bytes(Method::compiled_invocation_counter_offset())); increment_counter(adr2); } } else if (is_inline) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/graphKit.cpp --- a/src/share/vm/opto/graphKit.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/graphKit.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -3446,12 +3446,6 @@ if (t == TypePtr::NULL_PTR || t == Type::TOP) // stores of null never (?) need barriers return; - ciObject* con = t->is_oopptr()->const_oop(); - if (con != NULL - && con->is_perm() - && Universe::heap()->can_elide_permanent_oop_store_barriers()) - // no store barrier needed, because no old-to-new ref created - return; } if (use_ReduceInitialCardMarks() diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/graphKit.hpp --- a/src/share/vm/opto/graphKit.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/graphKit.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -743,7 +743,7 @@ void shared_unlock(Node* box, Node* obj); // helper functions for the fast path/slow path idioms - Node* fast_and_slow(Node* in, const Type *result_type, Node* null_result, IfNode* fast_test, Node* fast_result, address slow_call, const TypeFunc *slow_call_type, Node* slow_arg, klassOop ex_klass, Node* slow_result); + Node* fast_and_slow(Node* in, const Type *result_type, Node* null_result, IfNode* fast_test, Node* fast_result, address slow_call, const TypeFunc *slow_call_type, Node* slow_arg, Klass* ex_klass, Node* slow_result); // Generate an instance-of idiom. Used by both the instance-of bytecode // and the reflective instance-of call. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/idealGraphPrinter.cpp --- a/src/share/vm/opto/idealGraphPrinter.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/idealGraphPrinter.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -407,7 +407,7 @@ node->_in_dump_cnt++; print_prop(NODE_NAME_PROPERTY, (const char *)node->Name()); const Type *t = node->bottom_type(); - print_prop("type", (const char *)Type::msg[t->base()]); + print_prop("type", t->msg()); print_prop("idx", node->_idx); #ifdef ASSERT print_prop("debug_idx", node->_debug_idx); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/library_call.cpp --- a/src/share/vm/opto/library_call.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/library_call.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -2904,11 +2904,11 @@ // Note: The argument might still be an illegal value like // Serializable.class or Object[].class. The runtime will handle it. // But we must make an explicit check for initialization. - Node* insp = basic_plus_adr(kls, in_bytes(instanceKlass::init_state_offset())); - // Use T_BOOLEAN for instanceKlass::_init_state so the compiler + Node* insp = basic_plus_adr(kls, in_bytes(InstanceKlass::init_state_offset())); + // Use T_BOOLEAN for InstanceKlass::_init_state so the compiler // can generate code to load it as unsigned byte. Node* inst = make_load(NULL, insp, TypeInt::UBYTE, T_BOOLEAN); - Node* bits = intcon(instanceKlass::fully_initialized); + Node* bits = intcon(InstanceKlass::fully_initialized); Node* test = _gvn.transform( new (C, 3) SubINode(inst, bits) ); // The 'test' is non-zero if we need to take a slow path. @@ -3475,7 +3475,7 @@ if (layout_val == NULL) { bool query = (obj_array ? Klass::layout_helper_is_objArray(layout_con) - : Klass::layout_helper_is_javaArray(layout_con)); + : Klass::layout_helper_is_array(layout_con)); if (query == not_array) { return NULL; // never a branch } else { // always a branch @@ -3710,15 +3710,15 @@ RegionNode* slow_region) { ciMethod* method = callee(); int vtable_index = method->vtable_index(); - // Get the methodOop out of the appropriate vtable entry. - int entry_offset = (instanceKlass::vtable_start_offset() + + // Get the Method* out of the appropriate vtable entry. + int entry_offset = (InstanceKlass::vtable_start_offset() + vtable_index*vtableEntry::size()) * wordSize + vtableEntry::method_offset_in_bytes(); Node* entry_addr = basic_plus_adr(obj_klass, entry_offset); Node* target_call = make_load(NULL, entry_addr, TypeInstPtr::NOTNULL, T_OBJECT); // Compare the target method with the expected method (e.g., Object.hashCode). - const TypeInstPtr* native_call_addr = TypeInstPtr::make(method); + const TypePtr* native_call_addr = TypeMetadataPtr::make(method); Node* native_call = makecon(native_call_addr); Node* chk_native = _gvn.transform( new(C, 3) CmpPNode(target_call, native_call) ); @@ -3753,7 +3753,7 @@ method, bci()); } else if (is_virtual) { null_check_receiver(method); - int vtable_index = methodOopDesc::invalid_vtable_index; + int vtable_index = Method::invalid_vtable_index; if (UseInlineCaches) { // Suppress the vtable call } else { @@ -4266,8 +4266,8 @@ instanceOopDesc::base_offset_in_bytes(); // base_off: // 8 - 32-bit VM - // 12 - 64-bit VM, compressed oops - // 16 - 64-bit VM, normal oops + // 12 - 64-bit VM, compressed klass + // 16 - 64-bit VM, normal klass if (base_off % BytesPerLong != 0) { assert(UseCompressedOops, ""); if (is_array) { @@ -4899,7 +4899,7 @@ // further to JVM_ArrayCopy on the first per-oop check that fails. // (Actually, we don't move raw bits only; the GC requires card marks.) - // Get the klassOop for both src and dest + // Get the Klass* for both src and dest Node* src_klass = load_object_klass(src); Node* dest_klass = load_object_klass(dest); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/machnode.cpp --- a/src/share/vm/opto/machnode.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/machnode.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -38,7 +38,7 @@ return (int)(ra_->get_encode(node->in(idx))); } intptr_t MachOper::constant() const { return 0x00; } -bool MachOper::constant_is_oop() const { return false; } +relocInfo::relocType MachOper::constant_reloc() const { return relocInfo::none; } jdouble MachOper::constantD() const { ShouldNotReachHere(); return 0.0; } jfloat MachOper::constantF() const { ShouldNotReachHere(); return 0.0; } jlong MachOper::constantL() const { ShouldNotReachHere(); return CONST64(0) ; } @@ -54,7 +54,7 @@ int MachOper::base_position() const { return -1; } // no base input int MachOper::index_position() const { return -1; } // no index input // Check for PC-Relative displacement -bool MachOper::disp_is_oop() const { return false; } +relocInfo::relocType MachOper::disp_reloc() const { return relocInfo::none; } // Return the label Label* MachOper::label() const { ShouldNotReachHere(); return 0; } intptr_t MachOper::method() const { ShouldNotReachHere(); return 0; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/machnode.hpp --- a/src/share/vm/opto/machnode.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/machnode.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -104,7 +104,7 @@ #endif virtual intptr_t constant() const; - virtual bool constant_is_oop() const; + virtual relocInfo::relocType constant_reloc() const; virtual jdouble constantD() const; virtual jfloat constantF() const; virtual jlong constantL() const; @@ -118,7 +118,7 @@ // Parameters needed to support MEMORY_INTERFACE access to stackSlot virtual int disp (PhaseRegAlloc *ra_, const Node *node, int idx) const; // Check for PC-Relative displacement - virtual bool disp_is_oop() const; + virtual relocInfo::relocType disp_reloc() const; virtual int constant_disp() const; // usu. 0, may return Type::OffsetBot virtual int base_position() const; // base edge position, or -1 virtual int index_position() const; // index edge position, or -1 @@ -247,7 +247,7 @@ // Bottom_type call; value comes from operand0 virtual const class Type *bottom_type() const { return _opnds[0]->type(); } - virtual uint ideal_reg() const { const Type *t = _opnds[0]->type(); return t == TypeInt::CC ? Op_RegFlags : Matcher::base2reg[t->base()]; } + virtual uint ideal_reg() const { const Type *t = _opnds[0]->type(); return t == TypeInt::CC ? Op_RegFlags : t->ideal_reg(); } // If this is a memory op, return the base pointer and fixed offset. // If there are no such, return NULL. If there are multiple addresses @@ -498,7 +498,7 @@ virtual const RegMask &out_RegMask() const { return *_out; } virtual const RegMask &in_RegMask(uint) const { return *_in; } virtual const class Type *bottom_type() const { return _type; } - virtual uint ideal_reg() const { return Matcher::base2reg[_type->base()]; } + virtual uint ideal_reg() const { return _type->ideal_reg(); } virtual uint oper_input_base() const { return 1; } uint implementation( CodeBuffer *cbuf, PhaseRegAlloc *ra_, bool do_size, outputStream* st ) const; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/macro.cpp --- a/src/share/vm/opto/macro.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/macro.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1567,7 +1567,7 @@ } rawmem = make_store(control, rawmem, object, oopDesc::mark_offset_in_bytes(), mark_node, T_ADDRESS); - rawmem = make_store(control, rawmem, object, oopDesc::klass_offset_in_bytes(), klass_node, T_OBJECT); + rawmem = make_store(control, rawmem, object, oopDesc::klass_offset_in_bytes(), klass_node, T_METADATA); int header_size = alloc->minimum_header_size(); // conservatively small // Array length diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/matcher.cpp --- a/src/share/vm/opto/matcher.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/matcher.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -198,7 +198,7 @@ const TypeTuple *range = C->tf()->range(); if( range->cnt() > TypeFunc::Parms ) { // If not a void function // Get ideal-register return type - int ireg = base2reg[range->field_at(TypeFunc::Parms)->base()]; + int ireg = range->field_at(TypeFunc::Parms)->ideal_reg(); // Get machine return register uint sop = C->start()->Opcode(); OptoRegPair regs = return_value(ireg, false); @@ -1285,7 +1285,7 @@ // a little in-place argument insertion. // FIXME: Is this still necessary? int regs_per_word = NOT_LP64(1) LP64_ONLY(2); // %%% make a global const! - out_arg_limit_per_call += methodOopDesc::extra_stack_entries() * regs_per_word; + out_arg_limit_per_call += Method::extra_stack_entries() * regs_per_word; // Do not update mcall->_argsize because (a) the extra space is not // pushed as arguments and (b) _argsize is dead (not used anywhere). } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/matcher.hpp --- a/src/share/vm/opto/matcher.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/matcher.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -123,7 +123,6 @@ public: int LabelRootDepth; - static const int base2reg[]; // Map Types to machine register types // Convert ideal machine register to a register mask for spill-loads static const RegMask *idealreg2regmask[]; RegMask *idealreg2spillmask [_last_machine_leaf]; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/memnode.cpp --- a/src/share/vm/opto/memnode.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/memnode.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -841,7 +841,7 @@ { return !Type::cmp( _type, ((LoadNode&)n)._type ); } const Type *LoadNode::bottom_type() const { return _type; } uint LoadNode::ideal_reg() const { - return Matcher::base2reg[_type->base()]; + return _type->ideal_reg(); } #ifndef PRODUCT @@ -1660,7 +1660,7 @@ return TypeInt::make(klass->super_check_offset()); } // Compute index into primary_supers array - juint depth = (tkls->offset() - in_bytes(Klass::primary_supers_offset())) / sizeof(klassOop); + juint depth = (tkls->offset() - in_bytes(Klass::primary_supers_offset())) / sizeof(Klass*); // Check for overflowing; use unsigned compare to handle the negative case. if( depth < ciKlass::primary_super_limit() ) { // The field is an element of Klass::_primary_supers. Return its (constant) value. @@ -1690,13 +1690,13 @@ // shallow enough depth. Even though the klass is not exact, entries less // than or equal to its super depth are correct. if (klass->is_loaded() ) { - ciType *inner = klass->klass(); + ciType *inner = klass; while( inner->is_obj_array_klass() ) inner = inner->as_obj_array_klass()->base_element_type(); if( inner->is_instance_klass() && !inner->as_instance_klass()->flags().is_interface() ) { // Compute index into primary_supers array - juint depth = (tkls->offset() - in_bytes(Klass::primary_supers_offset())) / sizeof(klassOop); + juint depth = (tkls->offset() - in_bytes(Klass::primary_supers_offset())) / sizeof(Klass*); // Check for overflowing; use unsigned compare to handle the negative case. if( depth < ciKlass::primary_super_limit() && depth <= klass->super_depth() ) { // allow self-depth checks to handle self-check case @@ -1891,10 +1891,11 @@ Compile* C = gvn.C; Node *ctl = NULL; // sanity check the alias category against the created node type - const TypeOopPtr *adr_type = adr->bottom_type()->isa_oopptr(); - assert(adr_type != NULL, "expecting TypeOopPtr"); + const TypePtr *adr_type = adr->bottom_type()->isa_ptr(); + assert(adr_type != NULL, "expecting TypeKlassPtr"); #ifdef _LP64 if (adr_type->is_ptr_to_narrowoop()) { + assert(UseCompressedKlassPointers, "no compressed klasses"); Node* load_klass = gvn.transform(new (C, 3) LoadNKlassNode(ctl, mem, adr, at, tk->make_narrowoop())); return new (C, 2) DecodeNNode(load_klass, load_klass->bottom_type()->make_ptr()); } @@ -2065,7 +2066,7 @@ } } - // Simplify k.java_mirror.as_klass to plain k, where k is a klassOop. + // Simplify k.java_mirror.as_klass to plain k, where k is a Klass*. // Simplify ak.component_mirror.array_klass to plain ak, ak an arrayKlass. // See inline_native_Class_query for occurrences of these patterns. // Java Example: x.getClass().isAssignableFrom(y) @@ -2074,7 +2075,7 @@ // This improves reflective code, often making the Class // mirror go completely dead. (Current exception: Class // mirrors may appear in debug info, but we could clean them out by - // introducing a new debug info operator for klassOop.java_mirror). + // introducing a new debug info operator for Klass*.java_mirror). if (toop->isa_instptr() && toop->klass() == phase->C->env()->Class_klass() && (offset == java_lang_Class::klass_offset_in_bytes() || offset == java_lang_Class::array_klass_offset_in_bytes())) { @@ -2223,11 +2224,12 @@ case T_LONG: return new (C, 4) StoreLNode(ctl, mem, adr, adr_type, val); case T_FLOAT: return new (C, 4) StoreFNode(ctl, mem, adr, adr_type, val); case T_DOUBLE: return new (C, 4) StoreDNode(ctl, mem, adr, adr_type, val); + case T_METADATA: case T_ADDRESS: case T_OBJECT: #ifdef _LP64 if (adr->bottom_type()->is_ptr_to_narrowoop() || - (UseCompressedOops && val->bottom_type()->isa_klassptr() && + (UseCompressedKlassPointers && val->bottom_type()->isa_klassptr() && adr->bottom_type()->isa_rawptr())) { val = gvn.transform(new (C, 2) EncodePNode(val, val->bottom_type()->make_narrowoop())); return new (C, 4) StoreNNode(ctl, mem, adr, adr_type, val); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/multnode.cpp --- a/src/share/vm/opto/multnode.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/multnode.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -130,5 +130,5 @@ //------------------------------ideal_reg-------------------------------------- uint ProjNode::ideal_reg() const { - return Matcher::base2reg[bottom_type()->base()]; + return bottom_type()->ideal_reg(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/node.cpp --- a/src/share/vm/opto/node.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/node.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -2057,5 +2057,5 @@ //------------------------------ideal_reg-------------------------------------- uint TypeNode::ideal_reg() const { - return Matcher::base2reg[_type->base()]; + return _type->ideal_reg(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/output.cpp --- a/src/share/vm/opto/output.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/output.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -626,7 +626,7 @@ assert(cik->is_instance_klass() || cik->is_array_klass(), "Not supported allocation."); sv = new ObjectValue(spobj->_idx, - new ConstantOopWriteValue(cik->constant_encoding())); + new ConstantOopWriteValue(cik->java_mirror()->constant_encoding())); Compile::set_sv_for_object_node(objs, sv); uint first_ind = spobj->first_index(); @@ -715,8 +715,7 @@ array->append(new ConstantOopWriteValue(NULL)); break; case Type::AryPtr: - case Type::InstPtr: - case Type::KlassPtr: // fall through + case Type::InstPtr: // fall through array->append(new ConstantOopWriteValue(t->isa_oopptr()->const_oop()->constant_encoding())); break; case Type::NarrowOop: @@ -902,7 +901,7 @@ assert(cik->is_instance_klass() || cik->is_array_klass(), "Not supported allocation."); ObjectValue* sv = new ObjectValue(spobj->_idx, - new ConstantOopWriteValue(cik->constant_encoding())); + new ConstantOopWriteValue(cik->java_mirror()->constant_encoding())); Compile::set_sv_for_object_node(objs, sv); uint first_ind = spobj->first_index(); @@ -1658,8 +1657,7 @@ ""); } if (method() != NULL) { - method()->print_oop(); - print_codes(); + method()->print_metadata(); } dump_asm(node_offsets, node_offset_limit); if (xtty != NULL) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/parse1.cpp --- a/src/share/vm/opto/parse1.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/parse1.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ #include "precompiled.hpp" #include "compiler/compileLog.hpp" #include "interpreter/linkResolver.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "opto/addnode.hpp" #include "opto/idealGraphPrinter.hpp" #include "opto/locknode.hpp" @@ -492,7 +492,7 @@ if (PrintOpto && (Verbose || WizardMode)) { tty->print_cr("OSR @%d type flow bailout: %s", _entry_bci, _flow->failure_reason()); if (Verbose) { - method()->print_oop(); + method()->print(); method()->print_codes(); _flow->print(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/parse2.cpp --- a/src/share/vm/opto/parse2.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/parse2.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1447,7 +1447,7 @@ NULL, tag.internal_name()); break; } - assert(constant.basic_type() != T_OBJECT || !constant.as_object()->is_klass(), + assert(constant.basic_type() != T_OBJECT || constant.as_object()->is_instance(), "must be java_mirror of klass"); bool pushed = push_constant(constant, true); guarantee(pushed, "must be possible to push this constant"); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/parseHelper.cpp --- a/src/share/vm/opto/parseHelper.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/parseHelper.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,7 +46,7 @@ Node* thread = _gvn.transform( new (C, 1) ThreadLocalNode() ); // Get method - const TypeInstPtr* method_type = TypeInstPtr::make(TypePtr::Constant, method->klass(), true, method, 0); + const TypePtr* method_type = TypeMetadataPtr::make(method); Node *method_node = _gvn.transform( ConNode::make(C, method_type) ); kill_dead_locals(); @@ -220,7 +220,7 @@ _gvn.set_type(merge, Type::CONTROL); Node* kls = makecon(TypeKlassPtr::make(klass)); - Node* init_thread_offset = _gvn.MakeConX(in_bytes(instanceKlass::init_thread_offset())); + Node* init_thread_offset = _gvn.MakeConX(in_bytes(InstanceKlass::init_thread_offset())); Node* adr_node = basic_plus_adr(kls, kls, init_thread_offset); Node* init_thread = make_load(NULL, adr_node, TypeRawPtr::BOTTOM, T_ADDRESS); Node *tst = Bool( CmpP( init_thread, cur_thread), BoolTest::eq); @@ -228,12 +228,12 @@ set_control(IfTrue(iff)); merge->set_req(1, IfFalse(iff)); - Node* init_state_offset = _gvn.MakeConX(in_bytes(instanceKlass::init_state_offset())); + Node* init_state_offset = _gvn.MakeConX(in_bytes(InstanceKlass::init_state_offset())); adr_node = basic_plus_adr(kls, kls, init_state_offset); - // Use T_BOOLEAN for instanceKlass::_init_state so the compiler + // Use T_BOOLEAN for InstanceKlass::_init_state so the compiler // can generate code to load it as unsigned byte. Node* init_state = make_load(NULL, adr_node, TypeInt::UBYTE, T_BOOLEAN); - Node* being_init = _gvn.intcon(instanceKlass::being_initialized); + Node* being_init = _gvn.intcon(InstanceKlass::being_initialized); tst = Bool( CmpI( init_state, being_init), BoolTest::eq); iff = create_and_map_if(control(), tst, PROB_ALWAYS, COUNT_UNKNOWN); set_control(IfTrue(iff)); @@ -336,13 +336,13 @@ void Parse::increment_and_test_invocation_counter(int limit) { if (!count_invocations()) return; - // Get the methodOop node. - const TypePtr* adr_type = TypeOopPtr::make_from_constant(method()); - Node *methodOop_node = makecon(adr_type); + // Get the Method* node. + const TypePtr* adr_type = TypeMetadataPtr::make(method()); + Node *method_node = makecon(adr_type); - // Load the interpreter_invocation_counter from the methodOop. - int offset = methodOopDesc::interpreter_invocation_counter_offset_in_bytes(); - Node* adr_node = basic_plus_adr(methodOop_node, methodOop_node, offset); + // Load the interpreter_invocation_counter from the Method*. + int offset = Method::interpreter_invocation_counter_offset_in_bytes(); + Node* adr_node = basic_plus_adr(method_node, method_node, offset); Node* cnt = make_load(NULL, adr_node, TypeInt::INT, T_INT, adr_type); test_counter_against_threshold(cnt, limit); @@ -354,8 +354,8 @@ //----------------------------method_data_addressing--------------------------- Node* Parse::method_data_addressing(ciMethodData* md, ciProfileData* data, ByteSize counter_offset, Node* idx, uint stride) { - // Get offset within methodDataOop of the data array - ByteSize data_offset = methodDataOopDesc::data_offset(); + // Get offset within MethodData* of the data array + ByteSize data_offset = MethodData::data_offset(); // Get cell offset of the ProfileData within data array int cell_offset = md->dp_to_di(data->dp()); @@ -363,7 +363,7 @@ // Add in counter_offset, the # of bytes into the ProfileData of counter or flag int offset = in_bytes(data_offset) + cell_offset + in_bytes(counter_offset); - const TypePtr* adr_type = TypeOopPtr::make_from_constant(md); + const TypePtr* adr_type = TypeMetadataPtr::make(md); Node* mdo = makecon(adr_type); Node* ptr = basic_plus_adr(mdo, mdo, offset); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/reg_split.cpp --- a/src/share/vm/opto/reg_split.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/reg_split.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1196,7 +1196,7 @@ if( OptoReg::is_stack(uselrg.reg()) && uselrg.reg() < LRG::SPILL_REG && // USE is from stack deflrg.reg() != uselrg.reg() ) { // Not trivially removed - uint def_ideal_reg = Matcher::base2reg[n->bottom_type()->base()]; + uint def_ideal_reg = n->bottom_type()->ideal_reg(); const RegMask &def_rm = *Matcher::idealreg2regmask[def_ideal_reg]; const RegMask &use_rm = n->in_RegMask(copyidx); if( def_rm.overlap(use_rm) && n->is_SpillCopy() ) { // Bug 4707800, 'n' may be a storeSSL diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/runtime.cpp --- a/src/share/vm/opto/runtime.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/runtime.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -228,7 +228,7 @@ } // object allocation -JRT_BLOCK_ENTRY(void, OptoRuntime::new_instance_C(klassOopDesc* klass, JavaThread* thread)) +JRT_BLOCK_ENTRY(void, OptoRuntime::new_instance_C(Klass* klass, JavaThread* thread)) JRT_BLOCK; #ifndef PRODUCT SharedRuntime::_new_instance_ctr++; // new instance requires GC @@ -238,11 +238,11 @@ // These checks are cheap to make and support reflective allocation. int lh = Klass::cast(klass)->layout_helper(); if (Klass::layout_helper_needs_slow_path(lh) - || !instanceKlass::cast(klass)->is_initialized()) { + || !InstanceKlass::cast(klass)->is_initialized()) { KlassHandle kh(THREAD, klass); kh->check_valid_for_instantiation(false, THREAD); if (!HAS_PENDING_EXCEPTION) { - instanceKlass::cast(kh())->initialize(THREAD); + InstanceKlass::cast(kh())->initialize(THREAD); } if (!HAS_PENDING_EXCEPTION) { klass = kh(); @@ -253,7 +253,7 @@ if (klass != NULL) { // Scavenge and allocate an instance. - oop result = instanceKlass::cast(klass)->allocate_instance(THREAD); + oop result = InstanceKlass::cast(klass)->allocate_instance(THREAD); thread->set_vm_result(result); // Pass oops back through thread local storage. Our apparent type to Java @@ -273,7 +273,7 @@ // array allocation -JRT_BLOCK_ENTRY(void, OptoRuntime::new_array_C(klassOopDesc* array_type, int len, JavaThread *thread)) +JRT_BLOCK_ENTRY(void, OptoRuntime::new_array_C(Klass* array_type, int len, JavaThread *thread)) JRT_BLOCK; #ifndef PRODUCT SharedRuntime::_new_array_ctr++; // new array requires GC @@ -292,7 +292,7 @@ // Although the oopFactory likes to work with the elem_type, // the compiler prefers the array_type, since it must already have // that latter value in hand for the fast path. - klassOopDesc* elem_type = objArrayKlass::cast(array_type)->element_klass(); + Klass* elem_type = objArrayKlass::cast(array_type)->element_klass(); result = oopFactory::new_objArray(elem_type, len, THREAD); } @@ -311,7 +311,7 @@ JRT_END // array allocation without zeroing -JRT_BLOCK_ENTRY(void, OptoRuntime::new_array_nozero_C(klassOopDesc* array_type, int len, JavaThread *thread)) +JRT_BLOCK_ENTRY(void, OptoRuntime::new_array_nozero_C(Klass* array_type, int len, JavaThread *thread)) JRT_BLOCK; #ifndef PRODUCT SharedRuntime::_new_array_ctr++; // new array requires GC @@ -361,12 +361,12 @@ // Note: multianewarray for one dimension is handled inline by GraphKit::new_array. // multianewarray for 2 dimensions -JRT_ENTRY(void, OptoRuntime::multianewarray2_C(klassOopDesc* elem_type, int len1, int len2, JavaThread *thread)) +JRT_ENTRY(void, OptoRuntime::multianewarray2_C(Klass* elem_type, int len1, int len2, JavaThread *thread)) #ifndef PRODUCT SharedRuntime::_multi2_ctr++; // multianewarray for 1 dimension #endif assert(check_compiled_frame(thread), "incorrect caller"); - assert(oop(elem_type)->is_klass(), "not a class"); + assert(elem_type->is_klass(), "not a class"); jint dims[2]; dims[0] = len1; dims[1] = len2; @@ -376,12 +376,12 @@ JRT_END // multianewarray for 3 dimensions -JRT_ENTRY(void, OptoRuntime::multianewarray3_C(klassOopDesc* elem_type, int len1, int len2, int len3, JavaThread *thread)) +JRT_ENTRY(void, OptoRuntime::multianewarray3_C(Klass* elem_type, int len1, int len2, int len3, JavaThread *thread)) #ifndef PRODUCT SharedRuntime::_multi3_ctr++; // multianewarray for 1 dimension #endif assert(check_compiled_frame(thread), "incorrect caller"); - assert(oop(elem_type)->is_klass(), "not a class"); + assert(elem_type->is_klass(), "not a class"); jint dims[3]; dims[0] = len1; dims[1] = len2; @@ -392,12 +392,12 @@ JRT_END // multianewarray for 4 dimensions -JRT_ENTRY(void, OptoRuntime::multianewarray4_C(klassOopDesc* elem_type, int len1, int len2, int len3, int len4, JavaThread *thread)) +JRT_ENTRY(void, OptoRuntime::multianewarray4_C(Klass* elem_type, int len1, int len2, int len3, int len4, JavaThread *thread)) #ifndef PRODUCT SharedRuntime::_multi4_ctr++; // multianewarray for 1 dimension #endif assert(check_compiled_frame(thread), "incorrect caller"); - assert(oop(elem_type)->is_klass(), "not a class"); + assert(elem_type->is_klass(), "not a class"); jint dims[4]; dims[0] = len1; dims[1] = len2; @@ -409,12 +409,12 @@ JRT_END // multianewarray for 5 dimensions -JRT_ENTRY(void, OptoRuntime::multianewarray5_C(klassOopDesc* elem_type, int len1, int len2, int len3, int len4, int len5, JavaThread *thread)) +JRT_ENTRY(void, OptoRuntime::multianewarray5_C(Klass* elem_type, int len1, int len2, int len3, int len4, int len5, JavaThread *thread)) #ifndef PRODUCT SharedRuntime::_multi5_ctr++; // multianewarray for 1 dimension #endif assert(check_compiled_frame(thread), "incorrect caller"); - assert(oop(elem_type)->is_klass(), "not a class"); + assert(elem_type->is_klass(), "not a class"); jint dims[5]; dims[0] = len1; dims[1] = len2; @@ -426,9 +426,9 @@ thread->set_vm_result(obj); JRT_END -JRT_ENTRY(void, OptoRuntime::multianewarrayN_C(klassOopDesc* elem_type, arrayOopDesc* dims, JavaThread *thread)) +JRT_ENTRY(void, OptoRuntime::multianewarrayN_C(Klass* elem_type, arrayOopDesc* dims, JavaThread *thread)) assert(check_compiled_frame(thread), "incorrect caller"); - assert(oop(elem_type)->is_klass(), "not a class"); + assert(elem_type->is_klass(), "not a class"); assert(oop(dims)->is_typeArray(), "not an array"); ResourceMark rm; @@ -844,7 +844,7 @@ JRT_LEAF(void, OptoRuntime::profile_receiver_type_C(DataLayout* data, oopDesc* receiver)) if (receiver == NULL) return; - klassOop receiver_klass = receiver->klass(); + Klass* receiver_klass = receiver->klass(); intptr_t* mdp = ((intptr_t*)(data)) + DataLayout::header_size_in_cells(); int empty_row = -1; // free row, if any is encountered @@ -1148,7 +1148,7 @@ // create input type (domain) const Type **fields = TypeTuple::fields(2); fields[TypeFunc::Parms+0] = TypeRawPtr::BOTTOM; // Thread-local storage - fields[TypeFunc::Parms+1] = TypeInstPtr::NOTNULL; // methodOop; Method we are entering + fields[TypeFunc::Parms+1] = TypeInstPtr::NOTNULL; // Method*; Method we are entering const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+2,fields); // create result type (range) @@ -1178,8 +1178,8 @@ JRT_ENTRY_NO_ASYNC(void, OptoRuntime::register_finalizer(oopDesc* obj, JavaThread* thread)) assert(obj->is_oop(), "must be a valid oop"); - assert(obj->klass()->klass_part()->has_finalizer(), "shouldn't be here otherwise"); - instanceKlass::register_finalizer(instanceOop(obj), CHECK); + assert(obj->klass()->has_finalizer(), "shouldn't be here otherwise"); + InstanceKlass::register_finalizer(instanceOop(obj), CHECK); JRT_END //----------------------------------------------------------------------------- diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/runtime.hpp --- a/src/share/vm/opto/runtime.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/runtime.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -140,11 +140,11 @@ // ================================= // Allocate storage for a Java instance. - static void new_instance_C(klassOopDesc* instance_klass, JavaThread *thread); + static void new_instance_C(Klass* instance_klass, JavaThread *thread); // Allocate storage for a objArray or typeArray - static void new_array_C(klassOopDesc* array_klass, int len, JavaThread *thread); - static void new_array_nozero_C(klassOopDesc* array_klass, int len, JavaThread *thread); + static void new_array_C(Klass* array_klass, int len, JavaThread *thread); + static void new_array_nozero_C(Klass* array_klass, int len, JavaThread *thread); // Post-slow-path-allocation, pre-initializing-stores step for // implementing ReduceInitialCardMarks @@ -152,11 +152,11 @@ // Allocate storage for a multi-dimensional arrays // Note: needs to be fixed for arbitrary number of dimensions - static void multianewarray2_C(klassOopDesc* klass, int len1, int len2, JavaThread *thread); - static void multianewarray3_C(klassOopDesc* klass, int len1, int len2, int len3, JavaThread *thread); - static void multianewarray4_C(klassOopDesc* klass, int len1, int len2, int len3, int len4, JavaThread *thread); - static void multianewarray5_C(klassOopDesc* klass, int len1, int len2, int len3, int len4, int len5, JavaThread *thread); - static void multianewarrayN_C(klassOopDesc* klass, arrayOopDesc* dims, JavaThread *thread); + static void multianewarray2_C(Klass* klass, int len1, int len2, JavaThread *thread); + static void multianewarray3_C(Klass* klass, int len1, int len2, int len3, JavaThread *thread); + static void multianewarray4_C(Klass* klass, int len1, int len2, int len3, int len4, JavaThread *thread); + static void multianewarray5_C(Klass* klass, int len1, int len2, int len3, int len4, int len5, JavaThread *thread); + static void multianewarrayN_C(Klass* klass, arrayOopDesc* dims, JavaThread *thread); static void g1_wb_pre_C(oopDesc* orig, JavaThread* thread); static void g1_wb_post_C(void* card_addr, JavaThread* thread); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/subnode.cpp --- a/src/share/vm/opto/subnode.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/subnode.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -664,9 +664,7 @@ // See if neither subclasses the other, or if the class on top // is precise. In either of these cases, the compare is known // to fail if at least one of the pointers is provably not null. - if (klass0->equals(klass1) || // if types are unequal but klasses are - !klass0->is_java_klass() || // types not part of Java language? - !klass1->is_java_klass()) { // types not part of Java language? + if (klass0->equals(klass1)) { // if types are unequal but klasses are equal // Do nothing; we know nothing for imprecise types } else if (klass0->is_subtype_of(klass1)) { // If klass1's type is PRECISE, then classes are unrelated. @@ -744,7 +742,7 @@ } // return the ConP(Foo.klass) - assert(mirror_type->is_klass(), "mirror_type should represent a klassOop"); + assert(mirror_type->is_klass(), "mirror_type should represent a Klass*"); return phase->makecon(TypeKlassPtr::make(mirror_type->as_klass())); } @@ -891,9 +889,7 @@ // See if neither subclasses the other, or if the class on top // is precise. In either of these cases, the compare is known // to fail if at least one of the pointers is provably not null. - if (klass0->equals(klass1) || // if types are unequal but klasses are - !klass0->is_java_klass() || // types not part of Java language? - !klass1->is_java_klass()) { // types not part of Java language? + if (klass0->equals(klass1)) { // if types are unequal but klasses are equal // Do nothing; we know nothing for imprecise types } else if (klass0->is_subtype_of(klass1)) { // If klass1's type is PRECISE, then classes are unrelated. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/type.cpp --- a/src/share/vm/opto/type.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/type.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "ci/ciMethodData.hpp" #include "ci/ciTypeFlow.hpp" #include "classfile/symbolTable.hpp" #include "classfile/systemDictionary.hpp" @@ -33,7 +34,6 @@ #include "memory/resourceArea.hpp" #include "oops/instanceKlass.hpp" #include "oops/instanceMirrorKlass.hpp" -#include "oops/klassKlass.hpp" #include "oops/objArrayKlass.hpp" #include "oops/typeArrayKlass.hpp" #include "opto/matcher.hpp" @@ -49,40 +49,46 @@ Dict* Type::_shared_type_dict = NULL; // Array which maps compiler types to Basic Types -const BasicType Type::_basic_type[Type::lastype] = { - T_ILLEGAL, // Bad - T_ILLEGAL, // Control - T_VOID, // Top - T_INT, // Int - T_LONG, // Long - T_VOID, // Half - T_NARROWOOP, // NarrowOop - - T_ILLEGAL, // Tuple - T_ARRAY, // Array - T_ILLEGAL, // VectorS - T_ILLEGAL, // VectorD - T_ILLEGAL, // VectorX - T_ILLEGAL, // VectorY - - T_ADDRESS, // AnyPtr // shows up in factory methods for NULL_PTR - T_ADDRESS, // RawPtr - T_OBJECT, // OopPtr - T_OBJECT, // InstPtr - T_OBJECT, // AryPtr - T_OBJECT, // KlassPtr - - T_OBJECT, // Function - T_ILLEGAL, // Abio - T_ADDRESS, // Return_Address - T_ILLEGAL, // Memory - T_FLOAT, // FloatTop - T_FLOAT, // FloatCon - T_FLOAT, // FloatBot - T_DOUBLE, // DoubleTop - T_DOUBLE, // DoubleCon - T_DOUBLE, // DoubleBot - T_ILLEGAL, // Bottom +Type::TypeInfo Type::_type_info[Type::lastype] = { + { Bad, T_ILLEGAL, "bad", false, Node::NotAMachineReg, relocInfo::none }, // Bad + { Control, T_ILLEGAL, "control", false, 0, relocInfo::none }, // Control + { Bottom, T_VOID, "top", false, 0, relocInfo::none }, // Top + { Bad, T_INT, "int:", false, Op_RegI, relocInfo::none }, // Int + { Bad, T_LONG, "long:", false, Op_RegL, relocInfo::none }, // Long + { Half, T_VOID, "half", false, 0, relocInfo::none }, // Half + { Bad, T_NARROWOOP, "narrowoop:", false, Op_RegN, relocInfo::none }, // NarrowOop + { Bad, T_ILLEGAL, "tuple:", false, Node::NotAMachineReg, relocInfo::none }, // Tuple + { Bad, T_ARRAY, "array:", false, Node::NotAMachineReg, relocInfo::none }, // Array + +#if defined(IA32) || defined(AMD64) + { Bad, T_ILLEGAL, "vectors:", false, Op_VecS, relocInfo::none }, // VectorS + { Bad, T_ILLEGAL, "vectord:", false, Op_VecD, relocInfo::none }, // VectorD + { Bad, T_ILLEGAL, "vectorx:", false, Op_VecX, relocInfo::none }, // VectorX + { Bad, T_ILLEGAL, "vectory:", false, Op_VecY, relocInfo::none }, // VectorY +#else + { Bad, T_ILLEGAL, "vectors:", false, 0, relocInfo::none }, // VectorS + { Bad, T_ILLEGAL, "vectord:", false, Op_RegD, relocInfo::none }, // VectorD + { Bad, T_ILLEGAL, "vectorx:", false, 0, relocInfo::none }, // VectorX + { Bad, T_ILLEGAL, "vectory:", false, 0, relocInfo::none }, // VectorY +#endif // IA32 || AMD64 + { Bad, T_ADDRESS, "anyptr:", false, Op_RegP, relocInfo::none }, // AnyPtr + { Bad, T_ADDRESS, "rawptr:", false, Op_RegP, relocInfo::none }, // RawPtr + { Bad, T_OBJECT, "oop:", true, Op_RegP, relocInfo::oop_type }, // OopPtr + { Bad, T_OBJECT, "inst:", true, Op_RegP, relocInfo::oop_type }, // InstPtr + { Bad, T_OBJECT, "ary:", true, Op_RegP, relocInfo::oop_type }, // AryPtr + { Bad, T_METADATA, "metadata:", false, Op_RegP, relocInfo::metadata_type }, // MetadataPtr + { Bad, T_METADATA, "klass:", false, Op_RegP, relocInfo::metadata_type }, // KlassPtr + { Bad, T_OBJECT, "func", false, 0, relocInfo::none }, // Function + { Abio, T_ILLEGAL, "abIO", false, 0, relocInfo::none }, // Abio + { Return_Address, T_ADDRESS, "return_address",false, Op_RegP, relocInfo::none }, // Return_Address + { Memory, T_ILLEGAL, "memory", false, 0, relocInfo::none }, // Memory + { FloatBot, T_FLOAT, "float_top", false, Op_RegF, relocInfo::none }, // FloatTop + { FloatCon, T_FLOAT, "ftcon:", false, Op_RegF, relocInfo::none }, // FloatCon + { FloatTop, T_FLOAT, "float", false, Op_RegF, relocInfo::none }, // FloatBot + { DoubleBot, T_DOUBLE, "double_top", false, Op_RegD, relocInfo::none }, // DoubleTop + { DoubleCon, T_DOUBLE, "dblcon:", false, Op_RegD, relocInfo::none }, // DoubleCon + { DoubleTop, T_DOUBLE, "double", false, Op_RegD, relocInfo::none }, // DoubleBot + { Top, T_ILLEGAL, "bottom", false, 0, relocInfo::none } // Bottom }; // Map ideal registers (machine types) to ideal types @@ -321,6 +327,8 @@ false, 0, oopDesc::klass_offset_in_bytes()); TypeOopPtr::BOTTOM = TypeOopPtr::make(TypePtr::BotPTR, OffsetBot, TypeOopPtr::InstanceBot); + TypeMetadataPtr::BOTTOM = TypeMetadataPtr::make(TypePtr::BotPTR, NULL, OffsetBot); + TypeNarrowOop::NULL_PTR = TypeNarrowOop::make( TypePtr::NULL_PTR ); TypeNarrowOop::BOTTOM = TypeNarrowOop::make( TypeInstPtr::BOTTOM ); @@ -340,6 +348,7 @@ #ifdef _LP64 if (UseCompressedOops) { + assert(TypeAryPtr::NARROWOOPS->is_ptr_to_narrowoop(), "array of narrow oops must be ptr to narrow oop"); TypeAryPtr::OOPS = TypeAryPtr::NARROWOOPS; } else #endif @@ -372,7 +381,7 @@ TypeKlassPtr::OBJECT_OR_NULL = TypeKlassPtr::make( TypePtr::BotPTR, current->env()->Object_klass(), 0 ); const Type **fi2c = TypeTuple::fields(2); - fi2c[TypeFunc::Parms+0] = TypeInstPtr::BOTTOM; // methodOop + fi2c[TypeFunc::Parms+0] = TypeInstPtr::BOTTOM; // Method* fi2c[TypeFunc::Parms+1] = TypeRawPtr::BOTTOM; // argument pointer TypeTuple::START_I2C = TypeTuple::make(TypeFunc::Parms+2, fi2c); @@ -461,10 +470,6 @@ Type* t = (Type*)i._value; tdic->Insert(t,t); // New Type, insert into Type table } - -#ifdef ASSERT - verify_lastype(); -#endif } //------------------------------hashcons--------------------------------------- @@ -620,6 +625,7 @@ case InstPtr: return t->xmeet(this); + case MetadataPtr: case KlassPtr: return t->xmeet(this); @@ -700,6 +706,8 @@ Bad, // OopPtr - handled in v-call Bad, // InstPtr - handled in v-call Bad, // AryPtr - handled in v-call + + Bad, // MetadataPtr - handled in v-call Bad, // KlassPtr - handled in v-call Bad, // Function - handled in v-call @@ -717,8 +725,8 @@ const Type *Type::xdual() const { // Note: the base() accessor asserts the sanity of _base. - assert(dual_type[base()] != Bad, "implement with v-call"); - return new Type(dual_type[_base]); + assert(_type_info[base()].dual_type != Bad, "implement with v-call"); + return new Type(_type_info[_base].dual_type); } //------------------------------has_memory------------------------------------- @@ -738,7 +746,7 @@ #ifndef PRODUCT //------------------------------dump2------------------------------------------ void Type::dump2( Dict &d, uint depth, outputStream *st ) const { - st->print(msg[_base]); + st->print(_type_info[_base].msg); } //------------------------------dump------------------------------------------- @@ -750,17 +758,6 @@ st->print(" [narrow]"); } } - -//------------------------------data------------------------------------------- -const char * const Type::msg[Type::lastype] = { - "bad","control","top","int:","long:","half", "narrowoop:", - "tuple:", "array:", "vectors:", "vectord:", "vectorx:", "vectory:", - "anyptr:", "rawptr:", "java:", "inst:", "aryptr:", "klass:", - "func", "abIO", "return_address", "memory", - "float_top", "ftcon:", "float", - "double_top", "dblcon:", "double", - "bottom" -}; #endif //------------------------------singleton-------------------------------------- @@ -813,31 +810,6 @@ ShouldNotReachHere(); } -//------------------------------isa_oop_ptr------------------------------------ -// Return true if type is an oop pointer type. False for raw pointers. -static char isa_oop_ptr_tbl[Type::lastype] = { - 0,0,0,0,0,0,0/*narrowoop*/,0/*tuple*/, 0/*array*/, 0, 0, 0, 0/*vector*/, - 0/*anyptr*/,0/*rawptr*/,1/*OopPtr*/,1/*InstPtr*/,1/*AryPtr*/,1/*KlassPtr*/, - 0/*func*/,0,0/*return_address*/,0, - /*floats*/0,0,0, /*doubles*/0,0,0, - 0 -}; -bool Type::isa_oop_ptr() const { - return isa_oop_ptr_tbl[_base] != 0; -} - -//------------------------------dump_stats------------------------------------- -// // Check that arrays match type enum -#ifndef PRODUCT -void Type::verify_lastype() { - // Check that arrays match enumeration - assert( Type::dual_type [Type::lastype - 1] == Type::Top, "did not update array"); - assert( strcmp(Type::msg [Type::lastype - 1],"bottom") == 0, "did not update array"); - // assert( PhiNode::tbl [Type::lastype - 1] == NULL, "did not update array"); - assert( Matcher::base2reg[Type::lastype - 1] == 0, "did not update array"); - assert( isa_oop_ptr_tbl [Type::lastype - 1] == (char)0, "did not update array"); -} -#endif //============================================================================= // Convenience common pre-built types. @@ -862,8 +834,9 @@ case RawPtr: // reuses local variables case OopPtr: case InstPtr: + case AryPtr: + case MetadataPtr: case KlassPtr: - case AryPtr: case NarrowOop: case Int: case Long: @@ -978,8 +951,9 @@ case RawPtr: // reuses local variables case OopPtr: case InstPtr: + case AryPtr: + case MetadataPtr: case KlassPtr: - case AryPtr: case NarrowOop: case Int: case Long: @@ -1131,8 +1105,9 @@ case RawPtr: // reuses local variables case OopPtr: case InstPtr: + case AryPtr: + case MetadataPtr: case KlassPtr: - case AryPtr: case NarrowOop: case Long: case FloatTop: @@ -1387,8 +1362,9 @@ case RawPtr: // reuses local variables case OopPtr: case InstPtr: + case AryPtr: + case MetadataPtr: case KlassPtr: - case AryPtr: case NarrowOop: case Int: case FloatTop: @@ -2132,8 +2108,9 @@ case RawPtr: // For these, flip the call around to cut down case OopPtr: case InstPtr: // on the cases I have to handle. + case AryPtr: + case MetadataPtr: case KlassPtr: - case AryPtr: return t->xmeet(this); // Call in reverse direction default: // All else is a mistake typerr(t); @@ -2288,8 +2265,9 @@ case OopPtr: case InstPtr: + case AryPtr: + case MetadataPtr: case KlassPtr: - case AryPtr: return TypePtr::BOTTOM; // Oop meet raw is not well defined default: // All else is a mistake typerr(t); @@ -2375,11 +2353,12 @@ _instance_id(instance_id) { #ifdef _LP64 if (UseCompressedOops && _offset != 0) { - if (klass() == NULL) { + if (_offset == oopDesc::klass_offset_in_bytes()) { + _is_ptr_to_narrowoop = UseCompressedKlassPointers; + } else if (klass() == NULL) { + // Array with unknown body type assert(this->isa_aryptr(), "only arrays without klass"); _is_ptr_to_narrowoop = true; - } else if (_offset == oopDesc::klass_offset_in_bytes()) { - _is_ptr_to_narrowoop = true; } else if (this->isa_aryptr()) { _is_ptr_to_narrowoop = (klass()->is_obj_array_klass() && _offset != arrayOopDesc::length_offset_in_bytes()); @@ -2399,7 +2378,7 @@ _offset == java_lang_Class::array_klass_offset_in_bytes())) { // Special hidden fields from the Class. assert(this->isa_instptr(), "must be an instance ptr."); - _is_ptr_to_narrowoop = true; + _is_ptr_to_narrowoop = false; } else if (klass() == ciEnv::current()->Class_klass() && _offset >= instanceMirrorKlass::offset_of_static_fields()) { // Static fields @@ -2423,7 +2402,6 @@ _is_ptr_to_narrowoop = true; } else { // Type for the copy start in LibraryCallKit::inline_native_clone(). - assert(!klass_is_exact(), "only non-exact klass"); _is_ptr_to_narrowoop = true; } } @@ -2437,7 +2415,7 @@ const TypeOopPtr *TypeOopPtr::make(PTR ptr, int offset, int instance_id) { assert(ptr != Constant, "no constant generic pointers"); - ciKlass* k = ciKlassKlass::make(); + ciKlass* k = Compile::current()->env()->Object_klass(); bool xk = false; ciObject* o = NULL; return (TypeOopPtr*)(new TypeOopPtr(OopPtr, ptr, k, xk, o, offset, instance_id))->hashcons(); @@ -2472,7 +2450,7 @@ const TypeKlassPtr* TypeOopPtr::as_klass_type() const { ciKlass* k = klass(); bool xk = klass_is_exact(); - if (k == NULL || !k->is_java_klass()) + if (k == NULL) return TypeKlassPtr::OBJECT; else return TypeKlassPtr::make(xk? Constant: NotNull, k, 0); @@ -2506,6 +2484,8 @@ typerr(t); case RawPtr: + case MetadataPtr: + case KlassPtr: return TypePtr::BOTTOM; // Oop meet raw is not well defined case AnyPtr: { @@ -2536,7 +2516,6 @@ } case InstPtr: // For these, flip the call around to cut down - case KlassPtr: // on the cases I have to handle. case AryPtr: return t->xmeet(this); // Call in reverse direction @@ -2548,7 +2527,7 @@ //------------------------------xdual------------------------------------------ // Dual of a pure heap pointer. No relevant klass or oop information. const Type *TypeOopPtr::xdual() const { - assert(klass() == ciKlassKlass::make(), "no klasses here"); + assert(klass() == Compile::current()->env()->Object_klass(), "no klasses here"); assert(const_oop() == NULL, "no constants here"); return new TypeOopPtr(_base, dual_ptr(), klass(), klass_is_exact(), const_oop(), dual_offset(), dual_instance_id() ); } @@ -2556,7 +2535,6 @@ //--------------------------make_from_klass_common----------------------------- // Computes the element-type given a klass. const TypeOopPtr* TypeOopPtr::make_from_klass_common(ciKlass *klass, bool klass_change, bool try_for_exact) { - assert(klass->is_java_klass(), "must be java language klass"); if (klass->is_instance_klass()) { Compile* C = Compile::current(); Dependencies* deps = C->dependencies(); @@ -2613,24 +2591,6 @@ //------------------------------make_from_constant----------------------------- // Make a java pointer from an oop constant const TypeOopPtr* TypeOopPtr::make_from_constant(ciObject* o, bool require_constant) { - if (o->is_method_data() || o->is_method()) { - // Treat much like a typeArray of bytes, like below, but fake the type... - const BasicType bt = T_BYTE; - const Type* etype = get_const_basic_type(bt); - const TypeAry* arr0 = TypeAry::make(etype, TypeInt::POS); - ciKlass* klass = ciArrayKlass::make(ciType::make(bt)); - assert(o->can_be_constant(), "should be tenured"); - return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); - } else if (o->is_cpcache()) { - // Treat much like a objArray, like below, but fake the type... - const BasicType bt = T_OBJECT; - const Type* etype = get_const_basic_type(bt); - const TypeAry* arr0 = TypeAry::make(etype, TypeInt::POS); - ciKlass* klass = ciArrayKlass::make(ciType::make(bt)); - assert(o->can_be_constant(), "should be tenured"); - return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); - } else { - assert(o->is_java_object(), "must be java language object"); assert(!o->is_null_object(), "null object not yet handled here."); ciKlass* klass = o->klass(); if (klass->is_instance_klass()) { @@ -2643,7 +2603,8 @@ return TypeInstPtr::make(o); } else if (klass->is_obj_array_klass()) { // Element is an object array. Recursively call ourself. - const Type *etype = make_from_klass_raw(klass->as_obj_array_klass()->element_klass()); + const Type *etype = + TypeOopPtr::make_from_klass_raw(klass->as_obj_array_klass()->element_klass()); const TypeAry* arr0 = TypeAry::make(etype, TypeInt::make(o->as_array()->length())); // We used to pass NotNull in here, asserting that the sub-arrays // are all not-null. This is not true in generally, as code can @@ -2653,10 +2614,12 @@ } else if (!o->should_be_constant()) { return TypeAryPtr::make(TypePtr::NotNull, arr0, klass, true, 0); } - return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); + const TypeAryPtr* arr = TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); + return arr; } else if (klass->is_type_array_klass()) { // Element is an typeArray - const Type* etype = get_const_basic_type(klass->as_type_array_klass()->element_type()); + const Type* etype = + (Type*)get_const_basic_type(klass->as_type_array_klass()->element_type()); const TypeAry* arr0 = TypeAry::make(etype, TypeInt::make(o->as_array()->length())); // We used to pass NotNull in here, asserting that the array pointer // is not-null. That was not true in general. @@ -2665,8 +2628,8 @@ } else if (!o->should_be_constant()) { return TypeAryPtr::make(TypePtr::NotNull, arr0, klass, true, 0); } - return TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); - } + const TypeAryPtr* arr = TypeAryPtr::make(TypePtr::Constant, o, arr0, klass, true, 0); + return arr; } fatal("unhandled object type"); @@ -2845,8 +2808,7 @@ ciObject* o, int offset, int instance_id) { - assert( !k->is_loaded() || k->is_instance_klass() || - k->is_method_klass(), "Must be for instance or method"); + assert( !k->is_loaded() || k->is_instance_klass(), "Must be for instance"); // Either const_oop() is NULL or else ptr is Constant assert( (!o && ptr != Constant) || (o && ptr == Constant), "constant pointers must have a value supplied" ); @@ -2971,6 +2933,8 @@ default: // All else is a mistake typerr(t); + case MetadataPtr: + case KlassPtr: case RawPtr: return TypePtr::BOTTOM; case AryPtr: { // All arrays inherit from Object class @@ -3237,9 +3201,6 @@ return make( ptr, k, false, NULL, off, instance_id ); } // End of case InstPtr - case KlassPtr: - return TypeInstPtr::BOTTOM; - } // End of switch return this; // Return the double constant } @@ -3516,6 +3477,8 @@ } } + case MetadataPtr: + case KlassPtr: case RawPtr: return TypePtr::BOTTOM; case AryPtr: { // Meeting 2 references? @@ -3634,10 +3597,6 @@ default: typerr(t); } } - - case KlassPtr: - return TypeInstPtr::BOTTOM; - } return this; // Lint noise } @@ -3768,8 +3727,9 @@ case RawPtr: case OopPtr: case InstPtr: + case AryPtr: + case MetadataPtr: case KlassPtr: - case AryPtr: case Bottom: // Ye Olde Default return Type::BOTTOM; @@ -3829,6 +3789,183 @@ #endif + +//------------------------------eq--------------------------------------------- +// Structural equality check for Type representations +bool TypeMetadataPtr::eq( const Type *t ) const { + const TypeMetadataPtr *a = (const TypeMetadataPtr*)t; + ciMetadata* one = metadata(); + ciMetadata* two = a->metadata(); + if (one == NULL || two == NULL) { + return (one == two) && TypePtr::eq(t); + } else { + return one->equals(two) && TypePtr::eq(t); + } +} + +//------------------------------hash------------------------------------------- +// Type-specific hashing function. +int TypeMetadataPtr::hash(void) const { + return + (metadata() ? metadata()->hash() : 0) + + TypePtr::hash(); +} + +//------------------------------singleton-------------------------------------- +// TRUE if Type is a singleton type, FALSE otherwise. Singletons are simple +// constants +bool TypeMetadataPtr::singleton(void) const { + // detune optimizer to not generate constant metadta + constant offset as a constant! + // TopPTR, Null, AnyNull, Constant are all singletons + return (_offset == 0) && !below_centerline(_ptr); +} + +//------------------------------add_offset------------------------------------- +const TypePtr *TypeMetadataPtr::add_offset( intptr_t offset ) const { + return make( _ptr, _metadata, xadd_offset(offset)); +} + +//-----------------------------filter------------------------------------------ +// Do not allow interface-vs.-noninterface joins to collapse to top. +const Type *TypeMetadataPtr::filter( const Type *kills ) const { + const TypeMetadataPtr* ft = join(kills)->isa_metadataptr(); + if (ft == NULL || ft->empty()) + return Type::TOP; // Canonical empty value + return ft; +} + + //------------------------------get_con---------------------------------------- +intptr_t TypeMetadataPtr::get_con() const { + assert( _ptr == Null || _ptr == Constant, "" ); + assert( _offset >= 0, "" ); + + if (_offset != 0) { + // After being ported to the compiler interface, the compiler no longer + // directly manipulates the addresses of oops. Rather, it only has a pointer + // to a handle at compile time. This handle is embedded in the generated + // code and dereferenced at the time the nmethod is made. Until that time, + // it is not reasonable to do arithmetic with the addresses of oops (we don't + // have access to the addresses!). This does not seem to currently happen, + // but this assertion here is to help prevent its occurence. + tty->print_cr("Found oop constant with non-zero offset"); + ShouldNotReachHere(); + } + + return (intptr_t)metadata()->constant_encoding(); +} + +//------------------------------cast_to_ptr_type------------------------------- +const Type *TypeMetadataPtr::cast_to_ptr_type(PTR ptr) const { + if( ptr == _ptr ) return this; + return make(ptr, metadata(), _offset); +} + +//------------------------------meet------------------------------------------- +// Compute the MEET of two types. It returns a new Type object. +const Type *TypeMetadataPtr::xmeet( const Type *t ) const { + // Perform a fast test for common case; meeting the same types together. + if( this == t ) return this; // Meeting same type-rep? + + // Current "this->_base" is OopPtr + switch (t->base()) { // switch on original type + + case Int: // Mixing ints & oops happens when javac + case Long: // reuses local variables + case FloatTop: + case FloatCon: + case FloatBot: + case DoubleTop: + case DoubleCon: + case DoubleBot: + case NarrowOop: + case Bottom: // Ye Olde Default + return Type::BOTTOM; + case Top: + return this; + + default: // All else is a mistake + typerr(t); + + case AnyPtr: { + // Found an AnyPtr type vs self-OopPtr type + const TypePtr *tp = t->is_ptr(); + int offset = meet_offset(tp->offset()); + PTR ptr = meet_ptr(tp->ptr()); + switch (tp->ptr()) { + case Null: + if (ptr == Null) return TypePtr::make(AnyPtr, ptr, offset); + // else fall through: + case TopPTR: + case AnyNull: { + return make(ptr, NULL, offset); + } + case BotPTR: + case NotNull: + return TypePtr::make(AnyPtr, ptr, offset); + default: typerr(t); + } + } + + case RawPtr: + case KlassPtr: + case OopPtr: + case InstPtr: + case AryPtr: + return TypePtr::BOTTOM; // Oop meet raw is not well defined + + case MetadataPtr: + ShouldNotReachHere(); + break; + + } // End of switch + return this; // Return the double constant +} + + +//------------------------------xdual------------------------------------------ +// Dual of a pure metadata pointer. +const Type *TypeMetadataPtr::xdual() const { + return new TypeMetadataPtr(dual_ptr(), metadata(), dual_offset()); +} + +//------------------------------dump2------------------------------------------ +#ifndef PRODUCT +void TypeMetadataPtr::dump2( Dict &d, uint depth, outputStream *st ) const { + st->print("metadataptr:%s", ptr_msg[_ptr]); + if( metadata() ) st->print(INTPTR_FORMAT, metadata()); + switch( _offset ) { + case OffsetTop: st->print("+top"); break; + case OffsetBot: st->print("+any"); break; + case 0: break; + default: st->print("+%d",_offset); break; + } +} +#endif + + +//============================================================================= +// Convenience common pre-built type. +const TypeMetadataPtr *TypeMetadataPtr::BOTTOM; + +TypeMetadataPtr::TypeMetadataPtr(PTR ptr, ciMetadata* metadata, int offset): + TypePtr(MetadataPtr, ptr, offset), _metadata(metadata) { +} + +const TypeMetadataPtr* TypeMetadataPtr::make(ciMethod* m) { + return make(Constant, m, 0); +} +const TypeMetadataPtr* TypeMetadataPtr::make(ciMethodData* m) { + return make(Constant, m, 0); +} + +//------------------------------make------------------------------------------- +// Create a meta data constant +const TypeMetadataPtr *TypeMetadataPtr::make(PTR ptr, ciMetadata* m, int offset) { + assert(m == NULL || !m->is_klass(), "wrong type"); + return (TypeMetadataPtr*)(new TypeMetadataPtr(ptr, m, offset))->hashcons(); +} + + //============================================================================= // Convenience common pre-built types. @@ -3836,17 +3973,16 @@ const TypeKlassPtr *TypeKlassPtr::OBJECT; const TypeKlassPtr *TypeKlassPtr::OBJECT_OR_NULL; -//------------------------------TypeKlasPtr------------------------------------ +//------------------------------TypeKlassPtr----------------------------------- TypeKlassPtr::TypeKlassPtr( PTR ptr, ciKlass* klass, int offset ) - : TypeOopPtr(KlassPtr, ptr, klass, (ptr==Constant), (ptr==Constant ? klass : NULL), offset, 0) { + : TypePtr(KlassPtr, ptr, offset), _klass(klass), _klass_is_exact(ptr == Constant) { } //------------------------------make------------------------------------------- // ptr to klass 'k', if Constant, or possibly to a sub-klass if not a Constant const TypeKlassPtr *TypeKlassPtr::make( PTR ptr, ciKlass* k, int offset ) { assert( k != NULL, "Expect a non-NULL klass"); - assert(k->is_instance_klass() || k->is_array_klass() || - k->is_method_klass(), "Incorrect type of klass oop"); + assert(k->is_instance_klass() || k->is_array_klass(), "Incorrect type of klass oop"); TypeKlassPtr *r = (TypeKlassPtr*)(new TypeKlassPtr(ptr, k, offset))->hashcons(); @@ -3859,15 +3995,23 @@ const TypeKlassPtr *p = t->is_klassptr(); return klass()->equals(p->klass()) && - TypeOopPtr::eq(p); + TypePtr::eq(p); } //------------------------------hash------------------------------------------- // Type-specific hashing function. int TypeKlassPtr::hash(void) const { - return klass()->hash() + TypeOopPtr::hash(); -} - + return klass()->hash() + TypePtr::hash(); +} + +//------------------------------singleton-------------------------------------- +// TRUE if Type is a singleton type, FALSE otherwise. Singletons are simple +// constants +bool TypeKlassPtr::singleton(void) const { + // detune optimizer to not generate constant klass + constant offset as a constant! + // TopPTR, Null, AnyNull, Constant are all singletons + return (_offset == 0) && !below_centerline(_ptr); +} //----------------------compute_klass------------------------------------------ // Compute the defining klass for this class @@ -4018,24 +4162,6 @@ default: // All else is a mistake typerr(t); - case RawPtr: return TypePtr::BOTTOM; - - case OopPtr: { // Meeting to OopPtrs - // Found a OopPtr type vs self-KlassPtr type - const TypePtr *tp = t->is_oopptr(); - int offset = meet_offset(tp->offset()); - PTR ptr = meet_ptr(tp->ptr()); - switch (tp->ptr()) { - case TopPTR: - case AnyNull: - return make(ptr, klass(), offset); - case BotPTR: - case NotNull: - return TypePtr::make(AnyPtr, ptr, offset); - default: typerr(t); - } - } - case AnyPtr: { // Meeting to AnyPtrs // Found an AnyPtr type vs self-KlassPtr type const TypePtr *tp = t->is_ptr(); @@ -4055,9 +4181,12 @@ } } + case RawPtr: + case MetadataPtr: + case OopPtr: case AryPtr: // Meet with AryPtr case InstPtr: // Meet with InstPtr - return TypeInstPtr::BOTTOM; + return TypePtr::BOTTOM; // // A-top } @@ -4112,17 +4241,11 @@ // If the klasses are equal, the constants may still differ. Fall to // NotNull if they do (neither constant is NULL; that is a special case // handled elsewhere). - ciObject* o = NULL; // Assume not constant when done - ciObject* this_oop = const_oop(); - ciObject* tkls_oop = tkls->const_oop(); if( ptr == Constant ) { - if (this_oop != NULL && tkls_oop != NULL && - this_oop->equals(tkls_oop) ) - o = this_oop; - else if (above_centerline(this->ptr())) - o = tkls_oop; - else if (above_centerline(tkls->ptr())) - o = this_oop; + if (this->_ptr == Constant && tkls->_ptr == Constant && + this->klass()->equals(tkls->klass())); + else if (above_centerline(this->ptr())); + else if (above_centerline(tkls->ptr())); else ptr = NotNull; } @@ -4148,6 +4271,25 @@ return new TypeKlassPtr( dual_ptr(), klass(), dual_offset() ); } +//------------------------------get_con---------------------------------------- +intptr_t TypeKlassPtr::get_con() const { + assert( _ptr == Null || _ptr == Constant, "" ); + assert( _offset >= 0, "" ); + + if (_offset != 0) { + // After being ported to the compiler interface, the compiler no longer + // directly manipulates the addresses of oops. Rather, it only has a pointer + // to a handle at compile time. This handle is embedded in the generated + // code and dereferenced at the time the nmethod is made. Until that time, + // it is not reasonable to do arithmetic with the addresses of oops (we don't + // have access to the addresses!). This does not seem to currently happen, + // but this assertion here is to help prevent its occurence. + tty->print_cr("Found oop constant with non-zero offset"); + ShouldNotReachHere(); + } + + return (intptr_t)klass()->constant_encoding(); +} //------------------------------dump2------------------------------------------ // Dump Klass Type #ifndef PRODUCT @@ -4280,35 +4422,6 @@ } st->print(" )"); } - -//------------------------------print_flattened-------------------------------- -// Print a 'flattened' signature -static const char * const flat_type_msg[Type::lastype] = { - "bad","control","top","int","long","_", "narrowoop", - "tuple:", "array:", "vectors:", "vectord:", "vectorx:", "vectory:", - "ptr", "rawptr", "ptr", "ptr", "ptr", "ptr", - "func", "abIO", "return_address", "mem", - "float_top", "ftcon:", "flt", - "double_top", "dblcon:", "dbl", - "bottom" -}; - -void TypeFunc::print_flattened() const { - if( _range->_cnt <= Parms ) - tty->print("void"); - else { - uint i; - for (i = Parms; i < _range->_cnt-1; i++) - tty->print("%s/",flat_type_msg[_range->field_at(i)->base()]); - tty->print("%s",flat_type_msg[_range->field_at(i)->base()]); - } - tty->print(" ( "); - if (Parms < _domain->_cnt) - tty->print("%s",flat_type_msg[_domain->field_at(Parms)->base()]); - for (uint i = Parms+1; i < _domain->_cnt; i++) - tty->print(", %s",flat_type_msg[_domain->field_at(i)->base()]); - tty->print(" )"); -} #endif //------------------------------singleton-------------------------------------- diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/opto/type.hpp --- a/src/share/vm/opto/type.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/opto/type.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -62,6 +62,7 @@ class TypeInstPtr; class TypeAryPtr; class TypeKlassPtr; +class TypeMetadataPtr; //------------------------------Type------------------------------------------- // Basic Type object, represents a set of primitive Values. @@ -93,8 +94,10 @@ OopPtr, // Any and all Java heap entities InstPtr, // Instance pointers (non-array objects) AryPtr, // Array pointers + // (Ptr order matters: See is_ptr, isa_ptr, is_oopptr, isa_oopptr.) + + MetadataPtr, // Generic metadata KlassPtr, // Klass pointers - // (Ptr order matters: See is_ptr, isa_ptr, is_oopptr, isa_oopptr.) Function, // Function signature Abio, // Abstract I/O @@ -123,8 +126,18 @@ }; private: + typedef struct { + const TYPES dual_type; + const BasicType basic_type; + const char* msg; + const bool isa_oop; + const int ideal_reg; + const relocInfo::relocType reloc; + } TypeInfo; + // Dictionary of types shared among compilations. static Dict* _shared_type_dict; + static TypeInfo _type_info[]; static int uhash( const Type *const t ); // Structural equality check. Assumes that cmp() has already compared @@ -241,12 +254,16 @@ const TypeNarrowOop *isa_narrowoop() const; // Returns NULL if not oop ptr type const TypeOopPtr *isa_oopptr() const; // Returns NULL if not oop ptr type const TypeOopPtr *is_oopptr() const; // Java-style GC'd pointer - const TypeKlassPtr *isa_klassptr() const; // Returns NULL if not KlassPtr - const TypeKlassPtr *is_klassptr() const; // assert if not KlassPtr const TypeInstPtr *isa_instptr() const; // Returns NULL if not InstPtr const TypeInstPtr *is_instptr() const; // Instance const TypeAryPtr *isa_aryptr() const; // Returns NULL if not AryPtr const TypeAryPtr *is_aryptr() const; // Array oop + + const TypeMetadataPtr *isa_metadataptr() const; // Returns NULL if not oop ptr type + const TypeMetadataPtr *is_metadataptr() const; // Java-style GC'd pointer + const TypeKlassPtr *isa_klassptr() const; // Returns NULL if not KlassPtr + const TypeKlassPtr *is_klassptr() const; // assert if not KlassPtr + virtual bool is_finite() const; // Has a finite value virtual bool is_nan() const; // Is not a number (NaN) @@ -267,9 +284,6 @@ // Do you have memory, directly or through a tuple? bool has_memory( ) const; - // Are you a pointer type or not? - bool isa_oop_ptr() const; - // TRUE if type is a singleton virtual bool singleton(void) const; @@ -284,7 +298,6 @@ static const Type *mreg2type[]; // Printing, statistics - static const char * const msg[lastype]; // Printable strings #ifndef PRODUCT void dump_on(outputStream *st) const; void dump() const { @@ -292,7 +305,6 @@ } virtual void dump2( Dict &d, uint depth, outputStream *st ) const; static void dump_stats(); - static void verify_lastype(); // Check that arrays match type enum #endif void typerr(const Type *t) const; // Mixing types error @@ -336,7 +348,11 @@ static const Type *TOP; // Mapping from compiler type to VM BasicType - BasicType basic_type() const { return _basic_type[_base]; } + BasicType basic_type() const { return _type_info[_base].basic_type; } + int ideal_reg() const { return _type_info[_base].ideal_reg; } + const char* msg() const { return _type_info[_base].msg; } + bool isa_oop_ptr() const { return _type_info[_base].isa_oop; } + relocInfo::relocType reloc() const { return _type_info[_base].reloc; } // Mapping from CI type system to compiler type: static const Type* get_typeflow_type(ciType* type); @@ -842,7 +858,7 @@ //------------------------------TypeInstPtr------------------------------------ // Class of Java object pointers, pointing either to non-array Java instances -// or to a klassOop (including array klasses). +// or to a Klass* (including array klasses). class TypeInstPtr : public TypeOopPtr { TypeInstPtr( PTR ptr, ciKlass* k, bool xk, ciObject* o, int offset, int instance_id ); virtual bool eq( const Type *t ) const; @@ -859,7 +875,6 @@ static const TypeInstPtr *make(ciObject* o) { return make(TypePtr::Constant, o->klass(), true, o, 0); } - // Make a pointer to a constant oop with offset. static const TypeInstPtr *make(ciObject* o, int offset) { return make(TypePtr::Constant, o->klass(), true, o, offset); @@ -992,18 +1007,92 @@ #endif }; +//------------------------------TypeMetadataPtr------------------------------------- +// Some kind of metadata, either Method*, MethodData* or CPCacheOop +class TypeMetadataPtr : public TypePtr { +protected: + TypeMetadataPtr(PTR ptr, ciMetadata* metadata, int offset); +public: + virtual bool eq( const Type *t ) const; + virtual int hash() const; // Type specific hashing + virtual bool singleton(void) const; // TRUE if type is a singleton + +private: + ciMetadata* _metadata; + +public: + static const TypeMetadataPtr* make(PTR ptr, ciMetadata* m, int offset); + + static const TypeMetadataPtr* make(ciMethod* m); + static const TypeMetadataPtr* make(ciMethodData* m); + + ciMetadata* metadata() const { return _metadata; } + + virtual const Type *cast_to_ptr_type(PTR ptr) const; + + virtual const TypePtr *add_offset( intptr_t offset ) const; + + virtual const Type *xmeet( const Type *t ) const; + virtual const Type *xdual() const; // Compute dual right now. + + virtual intptr_t get_con() const; + + // Do not allow interface-vs.-noninterface joins to collapse to top. + virtual const Type *filter( const Type *kills ) const; + + // Convenience common pre-built types. + static const TypeMetadataPtr *BOTTOM; + +#ifndef PRODUCT + virtual void dump2( Dict &d, uint depth, outputStream *st ) const; +#endif +}; + //------------------------------TypeKlassPtr----------------------------------- // Class of Java Klass pointers -class TypeKlassPtr : public TypeOopPtr { +class TypeKlassPtr : public TypePtr { TypeKlassPtr( PTR ptr, ciKlass* klass, int offset ); + public: virtual bool eq( const Type *t ) const; virtual int hash() const; // Type specific hashing + virtual bool singleton(void) const; // TRUE if type is a singleton + private: + + static const TypeKlassPtr* make_from_klass_common(ciKlass* klass, bool klass_change, bool try_for_exact); + + ciKlass* _klass; + + // Does the type exclude subclasses of the klass? (Inexact == polymorphic.) + bool _klass_is_exact; public: - ciSymbol* name() const { return _klass->name(); } + ciSymbol* name() const { return klass()->name(); } + + ciKlass* klass() const { return _klass; } + bool klass_is_exact() const { return _klass_is_exact; } + + bool is_loaded() const { return klass()->is_loaded(); } - bool is_loaded() const { return _klass->is_loaded(); } + // Creates a type given a klass. Correctly handles multi-dimensional arrays + // Respects UseUniqueSubclasses. + // If the klass is final, the resulting type will be exact. + static const TypeKlassPtr* make_from_klass(ciKlass* klass) { + return make_from_klass_common(klass, true, false); + } + // Same as before, but will produce an exact type, even if + // the klass is not final, as long as it has exactly one implementation. + static const TypeKlassPtr* make_from_klass_unique(ciKlass* klass) { + return make_from_klass_common(klass, true, true); + } + // Same as before, but does not respects UseUniqueSubclasses. + // Use this only for creating array element types. + static const TypeKlassPtr* make_from_klass_raw(ciKlass* klass) { + return make_from_klass_common(klass, false, false); + } + + // Make a generic (unclassed) pointer to metadata. + static const TypeKlassPtr* make(PTR ptr, int offset); // ptr to klass 'k' static const TypeKlassPtr *make( ciKlass* k ) { return make( TypePtr::Constant, k, 0); } @@ -1023,6 +1112,8 @@ virtual const Type *xmeet( const Type *t ) const; virtual const Type *xdual() const; // Compute dual right now. + virtual intptr_t get_con() const; + // Convenience common pre-built types. static const TypeKlassPtr* OBJECT; // Not-null object klass or below static const TypeKlassPtr* OBJECT_OR_NULL; // Maybe-null version of same @@ -1117,7 +1208,6 @@ #ifndef PRODUCT virtual void dump2( Dict &d, uint depth, outputStream *st ) const; // Specialized per-Type dumping - void print_flattened() const; // Print a 'flattened' signature #endif // Convenience common pre-built types. }; @@ -1209,13 +1299,13 @@ inline const TypeOopPtr *Type::is_oopptr() const { // OopPtr is the first and KlassPtr the last, with no non-oops between. - assert(_base >= OopPtr && _base <= KlassPtr, "Not a Java pointer" ) ; + assert(_base >= OopPtr && _base <= AryPtr, "Not a Java pointer" ) ; return (TypeOopPtr*)this; } inline const TypeOopPtr *Type::isa_oopptr() const { // OopPtr is the first and KlassPtr the last, with no non-oops between. - return (_base >= OopPtr && _base <= KlassPtr) ? (TypeOopPtr*)this : NULL; + return (_base >= OopPtr && _base <= AryPtr) ? (TypeOopPtr*)this : NULL; } inline const TypeRawPtr *Type::isa_rawptr() const { @@ -1256,6 +1346,16 @@ return (_base == NarrowOop) ? (TypeNarrowOop*)this : NULL; } +inline const TypeMetadataPtr *Type::is_metadataptr() const { + // MetadataPtr is the first and CPCachePtr the last + assert(_base == MetadataPtr, "Not a metadata pointer" ) ; + return (TypeMetadataPtr*)this; +} + +inline const TypeMetadataPtr *Type::isa_metadataptr() const { + return (_base == MetadataPtr) ? (TypeMetadataPtr*)this : NULL; +} + inline const TypeKlassPtr *Type::isa_klassptr() const { return (_base == KlassPtr) ? (TypeKlassPtr*)this : NULL; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/precompiled/precompiled.hpp --- a/src/share/vm/precompiled/precompiled.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/precompiled/precompiled.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -41,9 +41,7 @@ # include "ci/ciFlags.hpp" # include "ci/ciInstance.hpp" # include "ci/ciInstanceKlass.hpp" -# include "ci/ciInstanceKlassKlass.hpp" # include "ci/ciKlass.hpp" -# include "ci/ciKlassKlass.hpp" # include "ci/ciMethod.hpp" # include "ci/ciNullObject.hpp" # include "ci/ciObjArrayKlass.hpp" @@ -121,7 +119,6 @@ # include "memory/blockOffsetTable.inline.hpp" # include "memory/cardTableModRefBS.hpp" # include "memory/collectorPolicy.hpp" -# include "memory/compactingPermGenGen.hpp" # include "memory/defNewGeneration.hpp" # include "memory/gcLocker.hpp" # include "memory/genCollectedHeap.hpp" @@ -134,7 +131,6 @@ # include "memory/memRegion.hpp" # include "memory/modRefBarrierSet.hpp" # include "memory/oopFactory.hpp" -# include "memory/permGen.hpp" # include "memory/referencePolicy.hpp" # include "memory/referenceProcessor.hpp" # include "memory/resourceArea.hpp" @@ -149,20 +145,17 @@ # include "memory/watermark.hpp" # include "oops/arrayKlass.hpp" # include "oops/arrayOop.hpp" -# include "oops/constMethodOop.hpp" -# include "oops/constantPoolOop.hpp" -# include "oops/cpCacheOop.hpp" +# include "oops/constMethod.hpp" # include "oops/instanceKlass.hpp" # include "oops/instanceOop.hpp" # include "oops/instanceRefKlass.hpp" # include "oops/klass.hpp" -# include "oops/klassOop.hpp" # include "oops/klassPS.hpp" # include "oops/klassVtable.hpp" # include "oops/markOop.hpp" # include "oops/markOop.inline.hpp" -# include "oops/methodDataOop.hpp" -# include "oops/methodOop.hpp" +# include "oops/methodData.hpp" +# include "oops/method.hpp" # include "oops/objArrayKlass.hpp" # include "oops/objArrayOop.hpp" # include "oops/oop.hpp" @@ -316,7 +309,6 @@ # include "gc_implementation/parallelScavenge/psGenerationCounters.hpp" # include "gc_implementation/parallelScavenge/psOldGen.hpp" # include "gc_implementation/parallelScavenge/psParallelCompact.hpp" -# include "gc_implementation/parallelScavenge/psPermGen.hpp" # include "gc_implementation/parallelScavenge/psVirtualspace.hpp" # include "gc_implementation/parallelScavenge/psYoungGen.hpp" # include "gc_implementation/shared/gcAdaptivePolicyCounters.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/prims/forte.cpp --- a/src/share/vm/prims/forte.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/prims/forte.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -68,7 +68,7 @@ static bool is_decipherable_compiled_frame(JavaThread* thread, frame* fr, nmethod* nm); static bool is_decipherable_interpreted_frame(JavaThread* thread, frame* fr, - methodOop* method_p, + Method** method_p, int* bci_p); @@ -178,12 +178,12 @@ static bool is_decipherable_interpreted_frame(JavaThread* thread, frame* fr, - methodOop* method_p, + Method** method_p, int* bci_p) { assert(fr->is_interpreted_frame(), "just checking"); // top frame is an interpreted frame - // check if it is walkable (i.e. valid methodOop and valid bci) + // check if it is walkable (i.e. valid Method* and valid bci) // Because we may be racing a gc thread the method and/or bci // of a valid interpreter frame may look bad causing us to @@ -199,14 +199,14 @@ if (known_valid || fr->is_interpreted_frame_valid(thread)) { // The frame code should completely validate the frame so that - // references to methodOop and bci are completely safe to access + // references to Method* and bci are completely safe to access // If they aren't the frame code should be fixed not this // code. However since gc isn't locked out the values could be // stale. This is a race we can never completely win since we can't // lock out gc so do one last check after retrieving their values // from the frame for additional safety - methodOop method = fr->interpreter_frame_method(); + Method* method = fr->interpreter_frame_method(); // We've at least found a method. // NOTE: there is something to be said for the approach that @@ -250,13 +250,13 @@ static bool find_initial_Java_frame(JavaThread* thread, frame* fr, frame* initial_frame_p, - methodOop* method_p, + Method** method_p, int* bci_p) { // It is possible that for a frame containing an nmethod // we can capture the method but no bci. If we get no // bci the frame isn't walkable but the method is usable. - // Therefore we init the returned methodOop to NULL so the + // Therefore we init the returned Method* to NULL so the // caller can make the distinction. *method_p = NULL; @@ -384,7 +384,7 @@ NoHandleMark nhm; frame initial_Java_frame; - methodOop method; + Method* method; int bci; int count; @@ -402,9 +402,9 @@ // The method is not stored GC safe so see if GC became active // after we entered AsyncGetCallTrace() and before we try to - // use the methodOop. + // use the Method*. // Yes, there is still a window after this check and before - // we use methodOop below, but we can't lock out GC so that + // we use Method* below, but we can't lock out GC so that // has to be an acceptable risk. if (!ch->is_valid_method(method)) { trace->num_frames = ticks_GC_active; // -2 @@ -442,9 +442,9 @@ // The method is not stored GC safe so see if GC became active // after we entered AsyncGetCallTrace() and before we try to - // use the methodOop. + // use the Method*. // Yes, there is still a window after this check and before - // we use methodOop below, but we can't lock out GC so that + // we use Method* below, but we can't lock out GC so that // has to be an acceptable risk. if (!ch->is_valid_method(method)) { // we throw away everything we've gathered in this sample since diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/prims/jni.cpp --- a/src/share/vm/prims/jni.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/prims/jni.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -41,7 +41,7 @@ #include "oops/instanceKlass.hpp" #include "oops/instanceOop.hpp" #include "oops/markOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/objArrayKlass.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" @@ -208,7 +208,7 @@ // out-of-line helpers for class jfieldIDWorkaround: -bool jfieldIDWorkaround::is_valid_jfieldID(klassOop k, jfieldID id) { +bool jfieldIDWorkaround::is_valid_jfieldID(Klass* k, jfieldID id) { if (jfieldIDWorkaround::is_instance_jfieldID(k, id)) { uintptr_t as_uint = (uintptr_t) id; intptr_t offset = raw_instance_offset(id); @@ -217,7 +217,7 @@ return false; } } - return instanceKlass::cast(k)->contains_field_offset(offset); + return InstanceKlass::cast(k)->contains_field_offset(offset); } else { JNIid* result = (JNIid*) id; #ifdef ASSERT @@ -229,14 +229,14 @@ } -intptr_t jfieldIDWorkaround::encode_klass_hash(klassOop k, intptr_t offset) { +intptr_t jfieldIDWorkaround::encode_klass_hash(Klass* k, intptr_t offset) { if (offset <= small_offset_mask) { - klassOop field_klass = k; - klassOop super_klass = Klass::cast(field_klass)->super(); + Klass* field_klass = k; + Klass* super_klass = Klass::cast(field_klass)->super(); // With compressed oops the most super class with nonstatic fields would // be the owner of fields embedded in the header. - while (instanceKlass::cast(super_klass)->has_nonstatic_fields() && - instanceKlass::cast(super_klass)->contains_field_offset(offset)) { + while (InstanceKlass::cast(super_klass)->has_nonstatic_fields() && + InstanceKlass::cast(super_klass)->contains_field_offset(offset)) { field_klass = super_klass; // super contains the field also super_klass = Klass::cast(field_klass)->super(); } @@ -256,7 +256,7 @@ } } -bool jfieldIDWorkaround::klass_hash_ok(klassOop k, jfieldID id) { +bool jfieldIDWorkaround::klass_hash_ok(Klass* k, jfieldID id) { uintptr_t as_uint = (uintptr_t) id; intptr_t klass_hash = (as_uint >> klass_shift) & klass_mask; do { @@ -269,7 +269,7 @@ return false; } -void jfieldIDWorkaround::verify_instance_jfieldID(klassOop k, jfieldID id) { +void jfieldIDWorkaround::verify_instance_jfieldID(Klass* k, jfieldID id) { guarantee(jfieldIDWorkaround::is_instance_jfieldID(k, id), "must be an instance field" ); uintptr_t as_uint = (uintptr_t) id; intptr_t offset = raw_instance_offset(id); @@ -288,7 +288,7 @@ #endif } } - guarantee(instanceKlass::cast(k)->contains_field_offset(offset), + guarantee(InstanceKlass::cast(k)->contains_field_offset(offset), "Bug in native code: jfieldID offset must address interior of object"); } @@ -405,7 +405,7 @@ ClassLoader::sync_JNIDefineClassLockFreeCounter()->inc(); } } - klassOop k = SystemDictionary::resolve_from_stream(class_name, class_loader, + Klass* k = SystemDictionary::resolve_from_stream(class_name, class_loader, Handle(), &st, true, CHECK_NULL); @@ -474,9 +474,9 @@ } oop mirror = (oop) result.get_jobject(); loader = Handle(THREAD, - instanceKlass::cast(java_lang_Class::as_klassOop(mirror))->class_loader()); + InstanceKlass::cast(java_lang_Class::as_Klass(mirror))->class_loader()); protection_domain = Handle(THREAD, - instanceKlass::cast(java_lang_Class::as_klassOop(mirror))->protection_domain()); + InstanceKlass::cast(java_lang_Class::as_Klass(mirror))->protection_domain()); } } else { // We call ClassLoader.getSystemClassLoader to obtain the system class loader. @@ -488,7 +488,7 @@ protection_domain, true, thread); if (TraceClassResolution && result != NULL) { - trace_class_resolution(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(result))); + trace_class_resolution(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(result))); } // If we were the first invocation of jni_FindClass, we enable compilation again @@ -531,12 +531,12 @@ mirror = java_lang_reflect_Method::clazz(reflected); slot = java_lang_reflect_Method::slot(reflected); } - klassOop k = java_lang_Class::as_klassOop(mirror); + Klass* k = java_lang_Class::as_Klass(mirror); KlassHandle k1(THREAD, k); // Make sure class is initialized before handing id's out to methods Klass::cast(k1())->initialize(CHECK_NULL); - methodOop m = instanceKlass::cast(k1())->method_with_idnum(slot); + Method* m = InstanceKlass::cast(k1())->method_with_idnum(slot); ret = m==NULL? NULL : m->jmethod_id(); // return NULL if reflected method deleted return ret; JNI_END @@ -562,7 +562,7 @@ // field is a handle to a java.lang.reflect.Field object oop reflected = JNIHandles::resolve_non_null(field); oop mirror = java_lang_reflect_Field::clazz(reflected); - klassOop k = java_lang_Class::as_klassOop(mirror); + Klass* k = java_lang_Class::as_Klass(mirror); int slot = java_lang_reflect_Field::slot(reflected); int modifiers = java_lang_reflect_Field::modifiers(reflected); @@ -572,11 +572,11 @@ // First check if this is a static field if (modifiers & JVM_ACC_STATIC) { - intptr_t offset = instanceKlass::cast(k1())->field_offset( slot ); - JNIid* id = instanceKlass::cast(k1())->jni_id_for(offset); + intptr_t offset = InstanceKlass::cast(k1())->field_offset( slot ); + JNIid* id = InstanceKlass::cast(k1())->jni_id_for(offset); assert(id != NULL, "corrupt Field object"); debug_only(id->set_is_static_field_id();) - // A jfieldID for a static field is a JNIid specifying the field holder and the offset within the klassOop + // A jfieldID for a static field is a JNIid specifying the field holder and the offset within the Klass* ret = jfieldIDWorkaround::to_static_jfieldID(id); return ret; } @@ -584,8 +584,8 @@ // The slot is the index of the field description in the field-array // The jfieldID is the offset of the field within the object // It may also have hash bits for k, if VerifyJNIFields is turned on. - intptr_t offset = instanceKlass::cast(k1())->field_offset( slot ); - assert(instanceKlass::cast(k1())->contains_field_offset(offset), "stay within object"); + intptr_t offset = InstanceKlass::cast(k1())->field_offset( slot ); + assert(InstanceKlass::cast(k1())->contains_field_offset(offset), "stay within object"); ret = jfieldIDWorkaround::to_instance_jfieldID(k1(), offset); return ret; JNI_END @@ -608,7 +608,7 @@ jobject ret = NULL; DT_RETURN_MARK(ToReflectedMethod, jobject, (const jobject&)ret); - methodHandle m (THREAD, JNIHandles::resolve_jmethod_id(method_id)); + methodHandle m (THREAD, Method::resolve_jmethod_id(method_id)); assert(m->is_static() == (isStatic != 0), "jni_ToReflectedMethod access flags doesn't match"); oop reflection_method; if (m->is_initializer()) { @@ -646,13 +646,13 @@ // arrays return Object // interfaces return NULL // proper classes return Klass::super() - klassOop k = java_lang_Class::as_klassOop(mirror); + Klass* k = java_lang_Class::as_Klass(mirror); if (Klass::cast(k)->is_interface()) return NULL; // return mirror for superclass - klassOop super = Klass::cast(k)->java_super(); + Klass* super = Klass::cast(k)->java_super(); // super2 is the value computed by the compiler's getSuperClass intrinsic: - debug_only(klassOop super2 = ( Klass::cast(k)->oop_is_javaArray() + debug_only(Klass* super2 = ( Klass::cast(k)->oop_is_array() ? SystemDictionary::Object_klass() : Klass::cast(k)->super() ) ); assert(super == super2, @@ -682,8 +682,8 @@ #endif /* USDT2 */ return ret; } - klassOop sub_klass = java_lang_Class::as_klassOop(sub_mirror); - klassOop super_klass = java_lang_Class::as_klassOop(super_mirror); + Klass* sub_klass = java_lang_Class::as_Klass(sub_mirror); + Klass* super_klass = java_lang_Class::as_Klass(super_mirror); assert(sub_klass != NULL && super_klass != NULL, "invalid arguments to jni_IsAssignableFrom"); jboolean ret = Klass::cast(sub_klass)->is_subtype_of(super_klass) ? JNI_TRUE : JNI_FALSE; @@ -736,7 +736,7 @@ jint ret = JNI_OK; DT_RETURN_MARK(ThrowNew, jint, (const jint&)ret); - instanceKlass* k = instanceKlass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(clazz))); + InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz))); Symbol* name = k->name(); Handle class_loader (THREAD, k->class_loader()); Handle protection_domain (THREAD, k->protection_domain()); @@ -1157,7 +1157,7 @@ set_ap(rap); } JNI_ArgumentPusherVaArg(jmethodID method_id, va_list rap) - : JNI_ArgumentPusher(JNIHandles::resolve_jmethod_id(method_id)->signature()) { + : JNI_ArgumentPusher(Method::resolve_jmethod_id(method_id)->signature()) { set_ap(rap); } @@ -1228,7 +1228,7 @@ set_ap(rap); } JNI_ArgumentPusherArray(jmethodID method_id, const jvalue *rap) - : JNI_ArgumentPusher(JNIHandles::resolve_jmethod_id(method_id)->signature()) { + : JNI_ArgumentPusher(Method::resolve_jmethod_id(method_id)->signature()) { set_ap(rap); } @@ -1318,7 +1318,7 @@ static void jni_invoke_static(JNIEnv *env, JavaValue* result, jobject receiver, JNICallType call_type, jmethodID method_id, JNI_ArgumentPusher *args, TRAPS) { - methodHandle method(THREAD, JNIHandles::resolve_jmethod_id(method_id)); + methodHandle method(THREAD, Method::resolve_jmethod_id(method_id)); // Create object to hold arguments for the JavaCall, and associate it with // the jni parser @@ -1352,11 +1352,11 @@ Handle h_recv(THREAD, recv); int number_of_parameters; - methodOop selected_method; + Method* selected_method; { - methodOop m = JNIHandles::resolve_jmethod_id(method_id); + Method* m = Method::resolve_jmethod_id(method_id); number_of_parameters = m->size_of_parameters(); - klassOop holder = m->method_holder(); + Klass* holder = m->method_holder(); if (!(Klass::cast(holder))->is_interface()) { // non-interface call -- for that little speed boost, don't handlize debug_only(No_Safepoint_Verifier nosafepoint;) @@ -1364,11 +1364,11 @@ // jni_GetMethodID makes sure class is linked and initialized // so m should have a valid vtable index. int vtbl_index = m->vtable_index(); - if (vtbl_index != methodOopDesc::nonvirtual_vtable_index) { - klassOop k = h_recv->klass(); + if (vtbl_index != Method::nonvirtual_vtable_index) { + Klass* k = h_recv->klass(); // k might be an arrayKlassOop but all vtables start at // the same place. The cast is to avoid virtual call and assertion. - instanceKlass *ik = (instanceKlass*)k->klass_part(); + InstanceKlass *ik = (InstanceKlass*)k; selected_method = ik->method_at_vtable(vtbl_index); } else { // final method @@ -1388,8 +1388,8 @@ m->set_cached_itable_index(itbl_index); // the above may have grabbed a lock, 'm' and anything non-handlized can't be used again } - klassOop k = h_recv->klass(); - selected_method = instanceKlass::cast(k)->method_at_itable(h_holder(), itbl_index, CHECK); + Klass* k = h_recv->klass(); + selected_method = InstanceKlass::cast(k)->method_at_itable(h_holder(), itbl_index, CHECK); } } @@ -1421,10 +1421,10 @@ static instanceOop alloc_object(jclass clazz, TRAPS) { - KlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(clazz))); + KlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz))); Klass::cast(k())->check_valid_for_instantiation(false, CHECK_NULL); - instanceKlass::cast(k())->initialize(CHECK_NULL); - instanceOop ih = instanceKlass::cast(k())->allocate_instance(THREAD); + InstanceKlass::cast(k())->initialize(CHECK_NULL); + instanceOop ih = InstanceKlass::cast(k())->allocate_instance(THREAD); return ih; } @@ -1542,7 +1542,7 @@ HOTSPOT_JNI_GETOBJECTCLASS_ENTRY( env, obj); #endif /* USDT2 */ - klassOop k = JNIHandles::resolve_non_null(obj)->klass(); + Klass* k = JNIHandles::resolve_non_null(obj)->klass(); jclass ret = (jclass) JNIHandles::make_local(env, Klass::cast(k)->java_mirror()); #ifndef USDT2 @@ -1565,7 +1565,7 @@ jboolean ret = JNI_TRUE; if (obj != NULL) { ret = JNI_FALSE; - klassOop k = java_lang_Class::as_klassOop( + Klass* k = java_lang_Class::as_Klass( JNIHandles::resolve_non_null(clazz)); if (k != NULL) { ret = JNIHandles::resolve_non_null(obj)->is_a(k) ? JNI_TRUE : JNI_FALSE; @@ -1605,18 +1605,18 @@ } KlassHandle klass(THREAD, - java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(clazz))); + java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz))); // Make sure class is linked and initialized before handing id's out to - // methodOops. + // Method*s. Klass::cast(klass())->initialize(CHECK_NULL); - methodOop m; + Method* m; if (name == vmSymbols::object_initializer_name() || name == vmSymbols::class_initializer_name()) { // Never search superclasses for constructors if (klass->oop_is_instance()) { - m = instanceKlass::cast(klass())->find_method(name, signature); + m = InstanceKlass::cast(klass())->find_method(name, signature); } else { m = NULL; } @@ -1624,7 +1624,7 @@ m = klass->lookup_method(name, signature); // Look up interfaces if (m == NULL && klass->oop_is_instance()) { - m = instanceKlass::cast(klass())->lookup_method_in_all_interfaces(name, + m = InstanceKlass::cast(klass())->lookup_method_in_all_interfaces(name, signature); } } @@ -2424,7 +2424,7 @@ JavaValue jvalue(Tag); \ JNI_ArgumentPusherVaArg ap(methodID, args); \ /* Make sure class is initialized before trying to invoke its method */ \ - KlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls))); \ + KlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls))); \ Klass::cast(k())->initialize(CHECK_0); \ jni_invoke_static(env, &jvalue, NULL, JNI_STATIC, methodID, &ap, CHECK_0); \ va_end(args); \ @@ -2608,13 +2608,13 @@ THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), (char*) name); } KlassHandle k(THREAD, - java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(clazz))); + java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz))); // Make sure class is initialized before handing id's out to fields Klass::cast(k())->initialize(CHECK_NULL); fieldDescriptor fd; if (!Klass::cast(k())->oop_is_instance() || - !instanceKlass::cast(k())->find_field(fieldname, signame, false, &fd)) { + !InstanceKlass::cast(k())->find_field(fieldname, signame, false, &fd)) { THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), (char*) name); } @@ -2634,7 +2634,7 @@ env, obj, (uintptr_t) fieldID); #endif /* USDT2 */ oop o = JNIHandles::resolve_non_null(obj); - klassOop k = o->klass(); + Klass* k = o->klass(); int offset = jfieldIDWorkaround::from_instance_jfieldID(k, fieldID); // Keep JVMTI addition small and only check enabled flag here. // jni_GetField_probe() assumes that is okay to create handles. @@ -2651,8 +2651,8 @@ if (ret != NULL && offset == java_lang_ref_Reference::referent_offset && - instanceKlass::cast(k)->reference_type() != REF_NONE) { - assert(instanceKlass::cast(k)->is_subclass_of(SystemDictionary::Reference_klass()), "sanity"); + InstanceKlass::cast(k)->reference_type() != REF_NONE) { + assert(InstanceKlass::cast(k)->is_subclass_of(SystemDictionary::Reference_klass()), "sanity"); needs_barrier = true; } @@ -2685,7 +2685,7 @@ DT_RETURN_MARK_FOR(Result, Get##Result##Field, Return, (const Return&)ret);\ \ oop o = JNIHandles::resolve_non_null(obj); \ - klassOop k = o->klass(); \ + Klass* k = o->klass(); \ int offset = jfieldIDWorkaround::from_instance_jfieldID(k, fieldID); \ /* Keep JVMTI addition small and only check enabled flag here. */ \ /* jni_GetField_probe_nh() assumes that is not okay to create handles */ \ @@ -2722,7 +2722,7 @@ DT_RETURN_MARK_FOR(Result, Get##Result##Field, Return, (const Return&)ret);\ \ oop o = JNIHandles::resolve_non_null(obj); \ - klassOop k = o->klass(); \ + Klass* k = o->klass(); \ int offset = jfieldIDWorkaround::from_instance_jfieldID(k, fieldID); \ /* Keep JVMTI addition small and only check enabled flag here. */ \ /* jni_GetField_probe_nh() assumes that is not okay to create handles */ \ @@ -2795,7 +2795,7 @@ env, obj, (uintptr_t) fieldID, value); #endif /* USDT2 */ oop o = JNIHandles::resolve_non_null(obj); - klassOop k = o->klass(); + Klass* k = o->klass(); int offset = jfieldIDWorkaround::from_instance_jfieldID(k, fieldID); // Keep JVMTI addition small and only check enabled flag here. // jni_SetField_probe_nh() assumes that is not okay to create handles @@ -2826,7 +2826,7 @@ ( env, obj, fieldID FP_SELECT_##Result(COMMA value,/*empty*/) ) ); \ \ oop o = JNIHandles::resolve_non_null(obj); \ - klassOop k = o->klass(); \ + Klass* k = o->klass(); \ int offset = jfieldIDWorkaround::from_instance_jfieldID(k, fieldID); \ /* Keep JVMTI addition small and only check enabled flag here. */ \ /* jni_SetField_probe_nh() assumes that is not okay to create handles */ \ @@ -2860,7 +2860,7 @@ EntryProbe; \ \ oop o = JNIHandles::resolve_non_null(obj); \ - klassOop k = o->klass(); \ + Klass* k = o->klass(); \ int offset = jfieldIDWorkaround::from_instance_jfieldID(k, fieldID); \ /* Keep JVMTI addition small and only check enabled flag here. */ \ /* jni_SetField_probe_nh() assumes that is not okay to create handles */ \ @@ -2922,19 +2922,19 @@ fieldDescriptor fd; bool found = false; - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); assert(jfieldIDWorkaround::is_static_jfieldID(fieldID) == (isStatic != 0), "invalid fieldID"); if (isStatic) { - // Static field. The fieldID a JNIid specifying the field holder and the offset within the klassOop. + // Static field. The fieldID a JNIid specifying the field holder and the offset within the Klass*. JNIid* id = jfieldIDWorkaround::from_static_jfieldID(fieldID); assert(id->is_static_field_id(), "invalid static field id"); found = id->find_local_field(&fd); } else { // Non-static field. The fieldID is really the offset of the field within the instanceOop. int offset = jfieldIDWorkaround::from_instance_jfieldID(k, fieldID); - found = instanceKlass::cast(k)->find_field_from_offset(offset, false, &fd); + found = InstanceKlass::cast(k)->find_field_from_offset(offset, false, &fd); } assert(found, "bad fieldID passed into jni_ToReflectedField"); oop reflected = Reflection::new_field(&fd, UseNewReflection, CHECK_NULL); @@ -2974,18 +2974,18 @@ THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), (char*) name); } KlassHandle k(THREAD, - java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(clazz))); + java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz))); // Make sure class is initialized before handing id's out to static fields Klass::cast(k())->initialize(CHECK_NULL); fieldDescriptor fd; if (!Klass::cast(k())->oop_is_instance() || - !instanceKlass::cast(k())->find_field(fieldname, signame, true, &fd)) { + !InstanceKlass::cast(k())->find_field(fieldname, signame, true, &fd)) { THROW_MSG_0(vmSymbols::java_lang_NoSuchFieldError(), (char*) name); } - // A jfieldID for a static field is a JNIid specifying the field holder and the offset within the klassOop - JNIid* id = instanceKlass::cast(fd.field_holder())->jni_id_for(fd.offset()); + // A jfieldID for a static field is a JNIid specifying the field holder and the offset within the Klass* + JNIid* id = InstanceKlass::cast(fd.field_holder())->jni_id_for(fd.offset()); debug_only(id->set_is_static_field_id();) debug_only(id->verify(fd.field_holder())); @@ -3004,7 +3004,7 @@ env, clazz, (uintptr_t) fieldID); #endif /* USDT2 */ #ifndef JNICHECK_KERNEL - DEBUG_ONLY(klassOop param_k = jniCheck::validate_class(thread, clazz);) + DEBUG_ONLY(Klass* param_k = jniCheck::validate_class(thread, clazz);) #endif // JNICHECK_KERNEL JNIid* id = jfieldIDWorkaround::from_static_jfieldID(fieldID); assert(id->is_static_field_id(), "invalid static field id"); @@ -3439,8 +3439,8 @@ #endif /* USDT2 */ jobjectArray ret = NULL; DT_RETURN_MARK(NewObjectArray, jobjectArray, (const jobjectArray&)ret); - KlassHandle ek(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(elementClass))); - klassOop ako = Klass::cast(ek())->array_klass(CHECK_NULL); + KlassHandle ek(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(elementClass))); + Klass* ako = Klass::cast(ek())->array_klass(CHECK_NULL); KlassHandle ak = KlassHandle(THREAD, ako); objArrayKlass::cast(ak())->initialize(CHECK_NULL); objArrayOop result = objArrayKlass::cast(ak())->allocate(length, CHECK_NULL); @@ -3949,10 +3949,10 @@ // is not native. Ask JVM TI what prefixes have been specified. Then check // to see if the native method is now wrapped with the prefixes. See the // SetNativeMethodPrefix(es) functions in the JVM TI Spec for details. -static methodOop find_prefixed_native(KlassHandle k, +static Method* find_prefixed_native(KlassHandle k, Symbol* name, Symbol* signature, TRAPS) { ResourceMark rm(THREAD); - methodOop method; + Method* method; int name_len = name->utf8_length(); char* name_str = name->as_utf8(); int prefix_count; @@ -3986,12 +3986,12 @@ } static bool register_native(KlassHandle k, Symbol* name, Symbol* signature, address entry, TRAPS) { - methodOop method = Klass::cast(k())->lookup_method(name, signature); + Method* method = Klass::cast(k())->lookup_method(name, signature); if (method == NULL) { ResourceMark rm; stringStream st; st.print("Method %s name or signature does not match", - methodOopDesc::name_and_sig_as_C_string(Klass::cast(k()), name, signature)); + Method::name_and_sig_as_C_string(Klass::cast(k()), name, signature)); THROW_MSG_(vmSymbols::java_lang_NoSuchMethodError(), st.as_string(), false); } if (!method->is_native()) { @@ -4001,14 +4001,14 @@ ResourceMark rm; stringStream st; st.print("Method %s is not declared as native", - methodOopDesc::name_and_sig_as_C_string(Klass::cast(k()), name, signature)); + Method::name_and_sig_as_C_string(Klass::cast(k()), name, signature)); THROW_MSG_(vmSymbols::java_lang_NoSuchMethodError(), st.as_string(), false); } } if (entry != NULL) { method->set_native_function(entry, - methodOopDesc::native_bind_event_is_interesting); + Method::native_bind_event_is_interesting); } else { method->clear_native_function(); } @@ -4041,7 +4041,7 @@ jint ret = 0; DT_RETURN_MARK(RegisterNatives, jint, (const jint&)ret); - KlassHandle h_k(thread, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(clazz))); + KlassHandle h_k(thread, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz))); for (int index = 0; index < nMethods; index++) { const char* meth_name = methods[index].name; @@ -4081,11 +4081,11 @@ HOTSPOT_JNI_UNREGISTERNATIVES_ENTRY( env, clazz); #endif /* USDT2 */ - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(clazz)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)); //%note jni_2 if (Klass::cast(k)->oop_is_instance()) { - for (int index = 0; index < instanceKlass::cast(k)->methods()->length(); index++) { - methodOop m = methodOop(instanceKlass::cast(k)->methods()->obj_at(index)); + for (int index = 0; index < InstanceKlass::cast(k)->methods()->length(); index++) { + Method* m = InstanceKlass::cast(k)->methods()->at(index); if (m->is_native()) { m->clear_native_function(); m->set_signature_handler(NULL); @@ -4412,7 +4412,7 @@ jclass result = find_class_from_class_loader(env, sym, true, loader, protection_domain, true, CHECK_NULL); if (TraceClassResolution && result != NULL) { - trace_class_resolution(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(result))); + trace_class_resolution(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(result))); } return result; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/prims/jniCheck.cpp --- a/src/share/vm/prims/jniCheck.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/prims/jniCheck.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -215,12 +215,12 @@ /* validate the class being passed */ ASSERT_OOPS_ALLOWED; - klassOop k_oop = jniCheck::validate_class(thr, cls, false); + Klass* k_oop = jniCheck::validate_class(thr, cls, false); /* check for proper subclass hierarchy */ JNIid* id = jfieldIDWorkaround::from_static_jfieldID(fid); - klassOop f_oop = id->holder(); - if (!instanceKlass::cast(k_oop)->is_subtype_of(f_oop)) + Klass* f_oop = id->holder(); + if (!InstanceKlass::cast(k_oop)->is_subtype_of(f_oop)) ReportJNIFatalError(thr, fatal_wrong_static_field); /* check for proper field type */ @@ -247,7 +247,7 @@ if (!oopObj) { ReportJNIFatalError(thr, fatal_null_object); } - klassOop k_oop = oopObj->klass(); + Klass* k_oop = oopObj->klass(); if (!jfieldIDWorkaround::is_valid_jfieldID(k_oop, fid)) { ReportJNIFatalError(thr, fatal_wrong_field); @@ -255,11 +255,11 @@ /* make sure the field exists */ int offset = jfieldIDWorkaround::from_instance_jfieldID(k_oop, fid); - if (!instanceKlass::cast(k_oop)->contains_field_offset(offset)) + if (!InstanceKlass::cast(k_oop)->contains_field_offset(offset)) ReportJNIFatalError(thr, fatal_wrong_field); /* check for proper field type */ - if (!instanceKlass::cast(k_oop)->find_field_from_offset(offset, + if (!InstanceKlass::cast(k_oop)->find_field_from_offset(offset, false, &fd)) ReportJNIFatalError(thr, fatal_instance_field_not_found); @@ -316,16 +316,16 @@ } -methodOop jniCheck::validate_jmethod_id(JavaThread* thr, jmethodID method_id) { +Method* jniCheck::validate_jmethod_id(JavaThread* thr, jmethodID method_id) { ASSERT_OOPS_ALLOWED; // do the fast jmethodID check first - methodOop moop = JNIHandles::checked_resolve_jmethod_id(method_id); + Method* moop = Method::checked_resolve_jmethod_id(method_id); if (moop == NULL) { ReportJNIFatalError(thr, fatal_wrong_class_or_method); } - // jmethodIDs are supposed to be weak global handles, but that - // can be expensive so check it last - else if (!JNIHandles::is_weak_global_handle((jobject) method_id)) { + // jmethodIDs are supposed to be weak handles in the class loader data, + // but that can be expensive so check it last + else if (!Method::is_method_id(method_id)) { ReportJNIFatalError(thr, fatal_non_weak_method); } return moop; @@ -360,7 +360,7 @@ } } -klassOop jniCheck::validate_class(JavaThread* thr, jclass clazz, bool allow_primitive) { +Klass* jniCheck::validate_class(JavaThread* thr, jclass clazz, bool allow_primitive) { ASSERT_OOPS_ALLOWED; oop mirror = jniCheck::validate_handle(thr, clazz); if (!mirror) { @@ -371,7 +371,7 @@ ReportJNIFatalError(thr, fatal_class_not_a_class); } - klassOop k = java_lang_Class::as_klassOop(mirror); + Klass* k = java_lang_Class::as_Klass(mirror); // Make allowances for primitive classes ... if (!(k != NULL || allow_primitive && java_lang_Class::is_primitive(mirror))) { ReportJNIFatalError(thr, fatal_class_not_a_class); @@ -379,12 +379,12 @@ return k; } -void jniCheck::validate_throwable_klass(JavaThread* thr, klassOop klass) { +void jniCheck::validate_throwable_klass(JavaThread* thr, Klass* klass) { ASSERT_OOPS_ALLOWED; assert(klass != NULL, "klass argument must have a value"); if (!Klass::cast(klass)->oop_is_instance() || - !instanceKlass::cast(klass)->is_subclass_of(SystemDictionary::Throwable_klass())) { + !InstanceKlass::cast(klass)->is_subclass_of(SystemDictionary::Throwable_klass())) { ReportJNIFatalError(thr, fatal_class_not_a_throwable_class); } } @@ -540,8 +540,8 @@ const char *msg)) functionEnter(thr); IN_VM( - klassOop k = jniCheck::validate_class(thr, clazz, false); - assert(k != NULL, "validate_class shouldn't return NULL klassOop"); + Klass* k = jniCheck::validate_class(thr, clazz, false); + assert(k != NULL, "validate_class shouldn't return NULL Klass*"); jniCheck::validate_throwable_klass(thr, k); ) jint result = UNCHECKED()->ThrowNew(env, clazz, msg); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/prims/jniCheck.hpp --- a/src/share/vm/prims/jniCheck.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/prims/jniCheck.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,12 +50,12 @@ public: static oop validate_handle(JavaThread* thr, jobject obj); static oop validate_object(JavaThread* thr, jobject obj); - static klassOop validate_class(JavaThread* thr, jclass clazz, bool allow_primitive = false); + static Klass* validate_class(JavaThread* thr, jclass clazz, bool allow_primitive = false); static void validate_class_descriptor(JavaThread* thr, const char* name); - static void validate_throwable_klass(JavaThread* thr, klassOop klass); + static void validate_throwable_klass(JavaThread* thr, Klass* klass); static void validate_call_object(JavaThread* thr, jobject obj, jmethodID method_id); static void validate_call_class(JavaThread* thr, jclass clazz, jmethodID method_id); - static methodOop validate_jmethod_id(JavaThread* thr, jmethodID method_id); + static Method* validate_jmethod_id(JavaThread* thr, jmethodID method_id); }; #endif // SHARE_VM_PRIMS_JNICHECK_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/prims/jvm.cpp --- a/src/share/vm/prims/jvm.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/prims/jvm.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -35,7 +35,7 @@ #include "oops/fieldStreams.hpp" #include "oops/instanceKlass.hpp" #include "oops/objArrayKlass.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "prims/jvm.h" #include "prims/jvm_misc.hpp" #include "prims/jvmtiExport.hpp" @@ -120,29 +120,29 @@ and thus can only support use of handles passed in. */ -static void trace_class_resolution_impl(klassOop to_class, TRAPS) { +static void trace_class_resolution_impl(Klass* to_class, TRAPS) { ResourceMark rm; int line_number = -1; const char * source_file = NULL; const char * trace = "explicit"; - klassOop caller = NULL; + Klass* caller = NULL; JavaThread* jthread = JavaThread::current(); if (jthread->has_last_Java_frame()) { vframeStream vfst(jthread); // scan up the stack skipping ClassLoader, AccessController and PrivilegedAction frames TempNewSymbol access_controller = SymbolTable::new_symbol("java/security/AccessController", CHECK); - klassOop access_controller_klass = SystemDictionary::resolve_or_fail(access_controller, false, CHECK); + Klass* access_controller_klass = SystemDictionary::resolve_or_fail(access_controller, false, CHECK); TempNewSymbol privileged_action = SymbolTable::new_symbol("java/security/PrivilegedAction", CHECK); - klassOop privileged_action_klass = SystemDictionary::resolve_or_fail(privileged_action, false, CHECK); - - methodOop last_caller = NULL; + Klass* privileged_action_klass = SystemDictionary::resolve_or_fail(privileged_action, false, CHECK); + + Method* last_caller = NULL; while (!vfst.at_end()) { - methodOop m = vfst.method(); - if (!vfst.method()->method_holder()->klass_part()->is_subclass_of(SystemDictionary::ClassLoader_klass())&& - !vfst.method()->method_holder()->klass_part()->is_subclass_of(access_controller_klass) && - !vfst.method()->method_holder()->klass_part()->is_subclass_of(privileged_action_klass)) { + Method* m = vfst.method(); + if (!vfst.method()->method_holder()->is_subclass_of(SystemDictionary::ClassLoader_klass())&& + !vfst.method()->method_holder()->is_subclass_of(access_controller_klass) && + !vfst.method()->method_holder()->is_subclass_of(privileged_action_klass)) { break; } last_caller = m; @@ -153,17 +153,17 @@ // that caller, otherwise keep quiet since this should be picked up elsewhere. bool found_it = false; if (!vfst.at_end() && - instanceKlass::cast(vfst.method()->method_holder())->name() == vmSymbols::java_lang_Class() && + InstanceKlass::cast(vfst.method()->method_holder())->name() == vmSymbols::java_lang_Class() && vfst.method()->name() == vmSymbols::forName0_name()) { vfst.next(); if (!vfst.at_end() && - instanceKlass::cast(vfst.method()->method_holder())->name() == vmSymbols::java_lang_Class() && + InstanceKlass::cast(vfst.method()->method_holder())->name() == vmSymbols::java_lang_Class() && vfst.method()->name() == vmSymbols::forName_name()) { vfst.next(); found_it = true; } } else if (last_caller != NULL && - instanceKlass::cast(last_caller->method_holder())->name() == + InstanceKlass::cast(last_caller->method_holder())->name() == vmSymbols::java_lang_ClassLoader() && (last_caller->name() == vmSymbols::loadClassInternal_name() || last_caller->name() == vmSymbols::loadClass_name())) { @@ -182,7 +182,7 @@ // show method name if it's a native method trace = vfst.method()->name_and_sig_as_C_string(); } - Symbol* s = instanceKlass::cast(caller)->source_file_name(); + Symbol* s = InstanceKlass::cast(caller)->source_file_name(); if (s != NULL) { source_file = s->as_C_string(); } @@ -202,7 +202,7 @@ } } -void trace_class_resolution(klassOop to_class) { +void trace_class_resolution(Klass* to_class) { EXCEPTION_MARK; trace_class_resolution_impl(to_class, THREAD); if (HAS_PENDING_EXCEPTION) { @@ -522,7 +522,6 @@ JVM_ENTRY(void, JVM_MonitorWait(JNIEnv* env, jobject handle, jlong ms)) JVMWrapper("JVM_MonitorWait"); Handle obj(THREAD, JNIHandles::resolve_non_null(handle)); - assert(obj->is_instance() || obj->is_array(), "JVM_MonitorWait must apply to an object"); JavaThreadInObjectWaitState jtiows(thread, ms != 0); if (JvmtiExport::should_post_monitor_wait()) { JvmtiExport::post_monitor_wait((JavaThread *)THREAD, (oop)obj(), ms); @@ -534,7 +533,6 @@ JVM_ENTRY(void, JVM_MonitorNotify(JNIEnv* env, jobject handle)) JVMWrapper("JVM_MonitorNotify"); Handle obj(THREAD, JNIHandles::resolve_non_null(handle)); - assert(obj->is_instance() || obj->is_array(), "JVM_MonitorNotify must apply to an object"); ObjectSynchronizer::notify(obj, CHECK); JVM_END @@ -542,7 +540,6 @@ JVM_ENTRY(void, JVM_MonitorNotifyAll(JNIEnv* env, jobject handle)) JVMWrapper("JVM_MonitorNotifyAll"); Handle obj(THREAD, JNIHandles::resolve_non_null(handle)); - assert(obj->is_instance() || obj->is_array(), "JVM_MonitorNotifyAll must apply to an object"); ObjectSynchronizer::notifyall(obj, CHECK); JVM_END @@ -555,7 +552,7 @@ #ifdef ASSERT // Just checking that the cloneable flag is set correct - if (obj->is_javaArray()) { + if (obj->is_array()) { guarantee(klass->is_cloneable(), "all arrays are cloneable"); } else { guarantee(obj->is_instance(), "should be instanceOop"); @@ -574,7 +571,7 @@ // Make shallow object copy const int size = obj->size(); oop new_obj = NULL; - if (obj->is_javaArray()) { + if (obj->is_array()) { const int length = ((arrayOop)obj())->length(); new_obj = CollectedHeap::array_allocate(klass, size, length, CHECK_NULL); } else { @@ -604,7 +601,7 @@ // "gc-robust" by this stage. if (klass->has_finalizer()) { assert(obj->is_instance(), "should be instanceOop"); - new_obj = instanceKlass::register_finalizer(instanceOop(new_obj), CHECK_NULL); + new_obj = InstanceKlass::register_finalizer(instanceOop(new_obj), CHECK_NULL); } return JNIHandles::make_local(env, oop(new_obj)); @@ -677,7 +674,7 @@ JVM_ENTRY(jclass, JVM_GetCallerClass(JNIEnv* env, int depth)) JVMWrapper("JVM_GetCallerClass"); - klassOop k = thread->security_get_caller_class(depth); + Klass* k = thread->security_get_caller_class(depth); return (k == NULL) ? NULL : (jclass) JNIHandles::make_local(env, Klass::cast(k)->java_mirror()); JVM_END @@ -734,7 +731,7 @@ } TempNewSymbol h_name = SymbolTable::new_symbol(name, CHECK_NULL); - klassOop k = SystemDictionary::resolve_or_null(h_name, CHECK_NULL); + Klass* k = SystemDictionary::resolve_or_null(h_name, CHECK_NULL); if (k == NULL) { return NULL; } @@ -766,7 +763,7 @@ Handle(), throwError, THREAD); if (TraceClassResolution && result != NULL) { - trace_class_resolution(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(result))); + trace_class_resolution(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(result))); } return result; JVM_END @@ -782,9 +779,9 @@ } TempNewSymbol h_name = SymbolTable::new_symbol(name, CHECK_NULL); oop from_class_oop = JNIHandles::resolve(from); - klassOop from_class = (from_class_oop == NULL) - ? (klassOop)NULL - : java_lang_Class::as_klassOop(from_class_oop); + Klass* from_class = (from_class_oop == NULL) + ? (Klass*)NULL + : java_lang_Class::as_Klass(from_class_oop); oop class_loader = NULL; oop protection_domain = NULL; if (from_class != NULL) { @@ -800,11 +797,11 @@ // this function is generally only used for class loading during verification. ResourceMark rm; oop from_mirror = JNIHandles::resolve_non_null(from); - klassOop from_class = java_lang_Class::as_klassOop(from_mirror); + Klass* from_class = java_lang_Class::as_Klass(from_mirror); const char * from_name = Klass::cast(from_class)->external_name(); oop mirror = JNIHandles::resolve_non_null(result); - klassOop to_class = java_lang_Class::as_klassOop(mirror); + Klass* to_class = java_lang_Class::as_Klass(mirror); const char * to = Klass::cast(to_class)->external_name(); tty->print("RESOLVE %s %s (verification)\n", from_name, to); } @@ -869,7 +866,7 @@ THREAD); } Handle protection_domain (THREAD, JNIHandles::resolve(pd)); - klassOop k = SystemDictionary::resolve_from_stream(class_name, class_loader, + Klass* k = SystemDictionary::resolve_from_stream(class_name, class_loader, protection_domain, &st, verify != 0, CHECK_NULL); @@ -933,7 +930,7 @@ THREAD); } - klassOop k = SystemDictionary::find_instance_or_array_klass(klass_name, + Klass* k = SystemDictionary::find_instance_or_array_klass(klass_name, h_loader, Handle(), CHECK_NULL); @@ -955,7 +952,7 @@ name = type2name(java_lang_Class::primitive_type(JNIHandles::resolve(cls))); } else { // Consider caching interned string in Klass - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); assert(k->is_klass(), "just checking"); name = Klass::cast(k)->external_name(); } @@ -976,11 +973,11 @@ return (jobjectArray) JNIHandles::make_local(env, r); } - KlassHandle klass(thread, java_lang_Class::as_klassOop(mirror)); + KlassHandle klass(thread, java_lang_Class::as_Klass(mirror)); // Figure size of result array int size; if (klass->oop_is_instance()) { - size = instanceKlass::cast(klass())->local_interfaces()->length(); + size = InstanceKlass::cast(klass())->local_interfaces()->length(); } else { assert(klass->oop_is_objArray() || klass->oop_is_typeArray(), "Illegal mirror klass"); size = 2; @@ -993,7 +990,7 @@ if (klass->oop_is_instance()) { // Regular instance klass, fill in all local interfaces for (int index = 0; index < size; index++) { - klassOop k = klassOop(instanceKlass::cast(klass())->local_interfaces()->obj_at(index)); + Klass* k = InstanceKlass::cast(klass())->local_interfaces()->at(index); result->obj_at_put(index, Klass::cast(k)->java_mirror()); } } else { @@ -1010,7 +1007,7 @@ if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { return NULL; } - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); oop loader = Klass::cast(k)->class_loader(); return JNIHandles::make_local(env, loader); JVM_END @@ -1022,7 +1019,7 @@ if (java_lang_Class::is_primitive(mirror)) { return JNI_FALSE; } - klassOop k = java_lang_Class::as_klassOop(mirror); + Klass* k = java_lang_Class::as_Klass(mirror); jboolean result = Klass::cast(k)->is_interface(); assert(!result || Klass::cast(k)->oop_is_instance(), "all interfaces are instance types"); @@ -1040,10 +1037,10 @@ return NULL; } - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); objArrayOop signers = NULL; if (Klass::cast(k)->oop_is_instance()) { - signers = instanceKlass::cast(k)->signers(); + signers = InstanceKlass::cast(k)->signers(); } // If there are no signers set in the class, or if the class @@ -1051,7 +1048,7 @@ if (signers == NULL) return NULL; // copy of the signers array - klassOop element = objArrayKlass::cast(signers->klass())->element_klass(); + Klass* element = objArrayKlass::cast(signers->klass())->element_klass(); objArrayOop signers_copy = oopFactory::new_objArray(element, signers->length(), CHECK_NULL); for (int index = 0; index < signers->length(); index++) { signers_copy->obj_at_put(index, signers->obj_at(index)); @@ -1068,9 +1065,9 @@ // This call is ignored for primitive types and arrays. // Signers are only set once, ClassLoader.java, and thus shouldn't // be called with an array. Only the bootstrap loader creates arrays. - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); if (Klass::cast(k)->oop_is_instance()) { - instanceKlass::cast(k)->set_signers(objArrayOop(JNIHandles::resolve(signers))); + InstanceKlass::cast(k)->set_signers(objArrayOop(JNIHandles::resolve(signers))); } } JVM_END @@ -1087,7 +1084,7 @@ return NULL; } - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); return (jobject) JNIHandles::make_local(env, Klass::cast(k)->protection_domain()); JVM_END @@ -1101,13 +1098,13 @@ } if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { // Call is ignored for primitive types - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); // cls won't be an array, as this called only from ClassLoader.defineClass if (Klass::cast(k)->oop_is_instance()) { oop pd = JNIHandles::resolve(protection_domain); assert(pd == NULL || pd->is_oop(), "just checking"); - instanceKlass::cast(k)->set_protection_domain(pd); + InstanceKlass::cast(k)->set_protection_domain(pd); } } JVM_END @@ -1127,11 +1124,11 @@ Handle object (THREAD, JNIHandles::resolve(action)); // get run() method - methodOop m_oop = Klass::cast(object->klass())->uncached_lookup_method( + Method* m_oop = Klass::cast(object->klass())->uncached_lookup_method( vmSymbols::run_method_name(), vmSymbols::void_object_signature()); methodHandle m (THREAD, m_oop); - if (m.is_null() || !m->is_method() || !methodOop(m())->is_public() || methodOop(m())->is_static()) { + if (m.is_null() || !m->is_method() || !m()->is_public() || m()->is_static()) { THROW_MSG_0(vmSymbols::java_lang_InternalError(), "No run method"); } @@ -1221,7 +1218,7 @@ for(; !vfst.at_end(); vfst.next()) { // get method of frame - methodOop method = vfst.method(); + Method* method = vfst.method(); intptr_t* frame_id = vfst.frame_id(); // check the privileged frames to see if we have a match @@ -1231,7 +1228,7 @@ privileged_context = Handle(thread, thread->privileged_stack_top()->privileged_context()); protection_domain = thread->privileged_stack_top()->protection_domain(); } else { - protection_domain = instanceKlass::cast(method->method_holder())->protection_domain(); + protection_domain = InstanceKlass::cast(method->method_holder())->protection_domain(); } if ((previous_protection_domain != protection_domain) && (protection_domain != NULL)) { @@ -1269,8 +1266,8 @@ JVM_QUICK_ENTRY(jboolean, JVM_IsArrayClass(JNIEnv *env, jclass cls)) JVMWrapper("JVM_IsArrayClass"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); - return (k != NULL) && Klass::cast(k)->oop_is_javaArray() ? true : false; + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); + return (k != NULL) && Klass::cast(k)->oop_is_array() ? true : false; JVM_END @@ -1296,7 +1293,7 @@ return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC; } - Klass* k = Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls))); + Klass* k = Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls))); debug_only(int computed_modifiers = k->compute_modifier_flags(CHECK_0)); assert(k->modifier_flags() == computed_modifiers, "modifiers cache is OK"); return k->modifier_flags(); @@ -1308,15 +1305,15 @@ JVM_ENTRY(jobjectArray, JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass)) JvmtiVMObjectAllocEventCollector oam; // ofClass is a reference to a java_lang_Class object. The mirror object - // of an instanceKlass + // of an InstanceKlass if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || - ! Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_instance()) { + ! Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_instance()) { oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL); return (jobjectArray)JNIHandles::make_local(env, result); } - instanceKlassHandle k(thread, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); + instanceKlassHandle k(thread, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); InnerClassesIterator iter(k); if (iter.length() == 0) { @@ -1342,9 +1339,9 @@ // Check to see if the name matches the class we're looking for // before attempting to find the class. if (cp->klass_name_at_matches(k, ooff)) { - klassOop outer_klass = cp->klass_at(ooff, CHECK_NULL); + Klass* outer_klass = cp->klass_at(ooff, CHECK_NULL); if (outer_klass == k()) { - klassOop ik = cp->klass_at(ioff, CHECK_NULL); + Klass* ik = cp->klass_at(ioff, CHECK_NULL); instanceKlassHandle inner_klass (THREAD, ik); // Throws an exception if outer klass has not declared k as @@ -1375,13 +1372,13 @@ { // ofClass is a reference to a java_lang_Class object. if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || - ! Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_instance()) { + ! Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_instance()) { return NULL; } bool inner_is_member = false; - klassOop outer_klass - = instanceKlass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)) + Klass* outer_klass + = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)) )->compute_enclosing_class(&inner_is_member, CHECK_NULL); if (outer_klass == NULL) return NULL; // already a top-level class if (!inner_is_member) return NULL; // an anonymous class (inside a method) @@ -1389,8 +1386,8 @@ } JVM_END -// should be in instanceKlass.cpp, but is here for historical reasons -klassOop instanceKlass::compute_enclosing_class_impl(instanceKlassHandle k, +// should be in InstanceKlass.cpp, but is here for historical reasons +Klass* InstanceKlass::compute_enclosing_class_impl(instanceKlassHandle k, bool* inner_is_member, TRAPS) { Thread* thread = THREAD; @@ -1403,7 +1400,7 @@ constantPoolHandle i_cp(thread, k->constants()); bool found = false; - klassOop ok; + Klass* ok; instanceKlassHandle outer_klass; *inner_is_member = false; @@ -1416,7 +1413,7 @@ // Check to see if the name matches the class we're looking for // before attempting to find the class. if (i_cp->klass_name_at_matches(k, ioff)) { - klassOop inner_klass = i_cp->klass_at(ioff, CHECK_NULL); + Klass* inner_klass = i_cp->klass_at(ioff, CHECK_NULL); found = (k() == inner_klass); if (found && ooff != 0) { ok = i_cp->klass_at(ooff, CHECK_NULL); @@ -1454,9 +1451,9 @@ ResourceMark rm(THREAD); // Return null for arrays and primatives if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); if (Klass::cast(k)->oop_is_instance()) { - Symbol* sym = instanceKlass::cast(k)->generic_signature(); + Symbol* sym = InstanceKlass::cast(k)->generic_signature(); if (sym == NULL) return NULL; Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL); return (jstring) JNIHandles::make_local(env, str()); @@ -1472,10 +1469,10 @@ ResourceMark rm(THREAD); // Return null for arrays and primitives if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); if (Klass::cast(k)->oop_is_instance()) { - return (jbyteArray) JNIHandles::make_local(env, - instanceKlass::cast(k)->class_annotations()); + typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL); + return (jbyteArray) JNIHandles::make_local(env, a); } } return NULL; @@ -1491,36 +1488,34 @@ // field is a handle to a java.lang.reflect.Field object oop reflected = JNIHandles::resolve_non_null(field); oop mirror = java_lang_reflect_Field::clazz(reflected); - klassOop k = java_lang_Class::as_klassOop(mirror); + Klass* k = java_lang_Class::as_Klass(mirror); int slot = java_lang_reflect_Field::slot(reflected); int modifiers = java_lang_reflect_Field::modifiers(reflected); fieldDescriptor fd; KlassHandle kh(THREAD, k); - intptr_t offset = instanceKlass::cast(kh())->field_offset(slot); + intptr_t offset = InstanceKlass::cast(kh())->field_offset(slot); if (modifiers & JVM_ACC_STATIC) { // for static fields we only look in the current class - if (!instanceKlass::cast(kh())->find_local_field_from_offset(offset, - true, &fd)) { + if (!InstanceKlass::cast(kh())->find_local_field_from_offset(offset, true, &fd)) { assert(false, "cannot find static field"); return NULL; // robustness } } else { // for instance fields we start with the current class and work // our way up through the superclass chain - if (!instanceKlass::cast(kh())->find_field_from_offset(offset, false, - &fd)) { + if (!InstanceKlass::cast(kh())->find_field_from_offset(offset, false, &fd)) { assert(false, "cannot find instance field"); return NULL; // robustness } } - return (jbyteArray) JNIHandles::make_local(env, fd.annotations()); + return (jbyteArray) JNIHandles::make_local(env, Annotations::make_java_array(fd.annotations(), THREAD)); JVM_END -static methodOop jvm_get_method_common(jobject method, TRAPS) { +static Method* jvm_get_method_common(jobject method, TRAPS) { // some of this code was adapted from from jni_FromReflectedMethod oop reflected = JNIHandles::resolve_non_null(method); @@ -1536,10 +1531,10 @@ mirror = java_lang_reflect_Method::clazz(reflected); slot = java_lang_reflect_Method::slot(reflected); } - klassOop k = java_lang_Class::as_klassOop(mirror); + Klass* k = java_lang_Class::as_Klass(mirror); KlassHandle kh(THREAD, k); - methodOop m = instanceKlass::cast(kh())->method_with_idnum(slot); + Method* m = InstanceKlass::cast(kh())->method_with_idnum(slot); if (m == NULL) { assert(false, "cannot find method"); return NULL; // robustness @@ -1553,8 +1548,9 @@ JVMWrapper("JVM_GetMethodAnnotations"); // method is a handle to a java.lang.reflect.Method object - methodOop m = jvm_get_method_common(method, CHECK_NULL); - return (jbyteArray) JNIHandles::make_local(env, m->annotations()); + Method* m = jvm_get_method_common(method, CHECK_NULL); + return (jbyteArray) JNIHandles::make_local(env, + Annotations::make_java_array(m->annotations(), THREAD)); JVM_END @@ -1562,8 +1558,9 @@ JVMWrapper("JVM_GetMethodDefaultAnnotationValue"); // method is a handle to a java.lang.reflect.Method object - methodOop m = jvm_get_method_common(method, CHECK_NULL); - return (jbyteArray) JNIHandles::make_local(env, m->annotation_default()); + Method* m = jvm_get_method_common(method, CHECK_NULL); + return (jbyteArray) JNIHandles::make_local(env, + Annotations::make_java_array(m->annotation_default(), THREAD)); JVM_END @@ -1571,8 +1568,9 @@ JVMWrapper("JVM_GetMethodParameterAnnotations"); // method is a handle to a java.lang.reflect.Method object - methodOop m = jvm_get_method_common(method, CHECK_NULL); - return (jbyteArray) JNIHandles::make_local(env, m->parameter_annotations()); + Method* m = jvm_get_method_common(method, CHECK_NULL); + return (jbyteArray) JNIHandles::make_local(env, + Annotations::make_java_array(m->parameter_annotations(), THREAD)); JVM_END @@ -1585,13 +1583,13 @@ // Exclude primitive types and array types if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || - Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { + Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_array()) { // Return empty array oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL); return (jobjectArray) JNIHandles::make_local(env, res); } - instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); + instanceKlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); constantPoolHandle cp(THREAD, k->constants()); // Ensure class is linked @@ -1648,24 +1646,24 @@ // Exclude primitive types and array types if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) - || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { + || Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_array()) { // Return empty array oop res = oopFactory::new_objArray(SystemDictionary::reflect_Method_klass(), 0, CHECK_NULL); return (jobjectArray) JNIHandles::make_local(env, res); } - instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); + instanceKlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); // Ensure class is linked k->link_class(CHECK_NULL); - objArrayHandle methods (THREAD, k->methods()); + Array* methods = k->methods(); int methods_length = methods->length(); int num_methods = 0; int i; for (i = 0; i < methods_length; i++) { - methodHandle method(THREAD, (methodOop) methods->obj_at(i)); + methodHandle method(THREAD, methods->at(i)); if (!method->is_initializer()) { if (!publicOnly || method->is_public()) { ++num_methods; @@ -1679,7 +1677,7 @@ int out_idx = 0; for (i = 0; i < methods_length; i++) { - methodHandle method(THREAD, (methodOop) methods->obj_at(i)); + methodHandle method(THREAD, methods->at(i)); if (!method->is_initializer()) { if (!publicOnly || method->is_public()) { oop m = Reflection::new_method(method, UseNewReflection, false, CHECK_NULL); @@ -1700,24 +1698,24 @@ // Exclude primitive types and array types if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) - || Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass)))->oop_is_javaArray()) { + || Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)))->oop_is_array()) { // Return empty array oop res = oopFactory::new_objArray(SystemDictionary::reflect_Constructor_klass(), 0 , CHECK_NULL); return (jobjectArray) JNIHandles::make_local(env, res); } - instanceKlassHandle k(THREAD, java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(ofClass))); + instanceKlassHandle k(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); // Ensure class is linked k->link_class(CHECK_NULL); - objArrayHandle methods (THREAD, k->methods()); + Array* methods = k->methods(); int methods_length = methods->length(); int num_constructors = 0; int i; for (i = 0; i < methods_length; i++) { - methodHandle method(THREAD, (methodOop) methods->obj_at(i)); + methodHandle method(THREAD, methods->at(i)); if (method->is_initializer() && !method->is_static()) { if (!publicOnly || method->is_public()) { ++num_constructors; @@ -1731,7 +1729,7 @@ int out_idx = 0; for (i = 0; i < methods_length; i++) { - methodHandle method(THREAD, (methodOop) methods->obj_at(i)); + methodHandle method(THREAD, methods->at(i)); if (method->is_initializer() && !method->is_static()) { if (!publicOnly || method->is_public()) { oop m = Reflection::new_constructor(method, CHECK_NULL); @@ -1753,7 +1751,7 @@ return JVM_ACC_ABSTRACT | JVM_ACC_FINAL | JVM_ACC_PUBLIC; } - Klass* k = Klass::cast(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls))); + Klass* k = Klass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls))); return k->access_flags().as_int() & JVM_ACC_WRITTEN_FLAGS; } JVM_END @@ -1768,11 +1766,11 @@ // Return null for primitives and arrays if (!java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); if (Klass::cast(k)->oop_is_instance()) { instanceKlassHandle k_h(THREAD, k); Handle jcp = sun_reflect_ConstantPool::create(CHECK_NULL); - sun_reflect_ConstantPool::set_cp_oop(jcp(), k_h->constants()); + sun_reflect_ConstantPool::set_cp(jcp(), k_h->constants()); return JNIHandles::make_local(jcp()); } } @@ -1781,10 +1779,10 @@ JVM_END -JVM_ENTRY(jint, JVM_ConstantPoolGetSize(JNIEnv *env, jobject unused, jobject jcpool)) +JVM_ENTRY(jint, JVM_ConstantPoolGetSize(JNIEnv *env, jobject obj, jobject unused)) { JVMWrapper("JVM_ConstantPoolGetSize"); - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); return cp->length(); } JVM_END @@ -1797,31 +1795,31 @@ } -JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)) +JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAt(JNIEnv *env, jobject obj, jobject unused, jint index)) { JVMWrapper("JVM_ConstantPoolGetClassAt"); - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); bounds_check(cp, index, CHECK_NULL); constantTag tag = cp->tag_at(index); if (!tag.is_klass() && !tag.is_unresolved_klass()) { THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); } - klassOop k = cp->klass_at(index, CHECK_NULL); + Klass* k = cp->klass_at(index, CHECK_NULL); return (jclass) JNIHandles::make_local(k->java_mirror()); } JVM_END -JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)) +JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index)) { JVMWrapper("JVM_ConstantPoolGetClassAtIfLoaded"); - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); bounds_check(cp, index, CHECK_NULL); constantTag tag = cp->tag_at(index); if (!tag.is_klass() && !tag.is_unresolved_klass()) { THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); } - klassOop k = constantPoolOopDesc::klass_at_if_loaded(cp, index); + Klass* k = ConstantPool::klass_at_if_loaded(cp, index); if (k == NULL) return NULL; return (jclass) JNIHandles::make_local(k->java_mirror()); } @@ -1833,11 +1831,11 @@ THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); } int klass_ref = cp->uncached_klass_ref_index_at(index); - klassOop k_o; + Klass* k_o; if (force_resolution) { k_o = cp->klass_at(klass_ref, CHECK_NULL); } else { - k_o = constantPoolOopDesc::klass_at_if_loaded(cp, klass_ref); + k_o = ConstantPool::klass_at_if_loaded(cp, klass_ref); if (k_o == NULL) return NULL; } instanceKlassHandle k(THREAD, k_o); @@ -1856,22 +1854,22 @@ return JNIHandles::make_local(method); } -JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)) +JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAt(JNIEnv *env, jobject obj, jobject unused, jint index)) { JVMWrapper("JVM_ConstantPoolGetMethodAt"); JvmtiVMObjectAllocEventCollector oam; - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); bounds_check(cp, index, CHECK_NULL); jobject res = get_method_at_helper(cp, index, true, CHECK_NULL); return res; } JVM_END -JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)) +JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index)) { JVMWrapper("JVM_ConstantPoolGetMethodAtIfLoaded"); JvmtiVMObjectAllocEventCollector oam; - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); bounds_check(cp, index, CHECK_NULL); jobject res = get_method_at_helper(cp, index, false, CHECK_NULL); return res; @@ -1884,18 +1882,18 @@ THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); } int klass_ref = cp->uncached_klass_ref_index_at(index); - klassOop k_o; + Klass* k_o; if (force_resolution) { k_o = cp->klass_at(klass_ref, CHECK_NULL); } else { - k_o = constantPoolOopDesc::klass_at_if_loaded(cp, klass_ref); + k_o = ConstantPool::klass_at_if_loaded(cp, klass_ref); if (k_o == NULL) return NULL; } instanceKlassHandle k(THREAD, k_o); Symbol* name = cp->uncached_name_ref_at(index); Symbol* sig = cp->uncached_signature_ref_at(index); fieldDescriptor fd; - klassOop target_klass = k->find_field(name, sig, &fd); + Klass* target_klass = k->find_field(name, sig, &fd); if (target_klass == NULL) { THROW_MSG_0(vmSymbols::java_lang_RuntimeException(), "Unable to look up field in target class"); } @@ -1903,33 +1901,33 @@ return JNIHandles::make_local(field); } -JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)) +JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAt(JNIEnv *env, jobject obj, jobject unusedl, jint index)) { JVMWrapper("JVM_ConstantPoolGetFieldAt"); JvmtiVMObjectAllocEventCollector oam; - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); bounds_check(cp, index, CHECK_NULL); jobject res = get_field_at_helper(cp, index, true, CHECK_NULL); return res; } JVM_END -JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAtIfLoaded(JNIEnv *env, jobject unused, jobject jcpool, jint index)) +JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAtIfLoaded(JNIEnv *env, jobject obj, jobject unused, jint index)) { JVMWrapper("JVM_ConstantPoolGetFieldAtIfLoaded"); JvmtiVMObjectAllocEventCollector oam; - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); bounds_check(cp, index, CHECK_NULL); jobject res = get_field_at_helper(cp, index, false, CHECK_NULL); return res; } JVM_END -JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetMemberRefInfoAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)) +JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetMemberRefInfoAt(JNIEnv *env, jobject obj, jobject unused, jint index)) { JVMWrapper("JVM_ConstantPoolGetMemberRefInfoAt"); JvmtiVMObjectAllocEventCollector oam; - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); bounds_check(cp, index, CHECK_NULL); constantTag tag = cp->tag_at(index); if (!tag.is_field_or_method()) { @@ -1951,10 +1949,10 @@ } JVM_END -JVM_ENTRY(jint, JVM_ConstantPoolGetIntAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)) +JVM_ENTRY(jint, JVM_ConstantPoolGetIntAt(JNIEnv *env, jobject obj, jobject unused, jint index)) { JVMWrapper("JVM_ConstantPoolGetIntAt"); - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); bounds_check(cp, index, CHECK_0); constantTag tag = cp->tag_at(index); if (!tag.is_int()) { @@ -1964,10 +1962,10 @@ } JVM_END -JVM_ENTRY(jlong, JVM_ConstantPoolGetLongAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)) +JVM_ENTRY(jlong, JVM_ConstantPoolGetLongAt(JNIEnv *env, jobject obj, jobject unused, jint index)) { JVMWrapper("JVM_ConstantPoolGetLongAt"); - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); bounds_check(cp, index, CHECK_(0L)); constantTag tag = cp->tag_at(index); if (!tag.is_long()) { @@ -1977,10 +1975,10 @@ } JVM_END -JVM_ENTRY(jfloat, JVM_ConstantPoolGetFloatAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)) +JVM_ENTRY(jfloat, JVM_ConstantPoolGetFloatAt(JNIEnv *env, jobject obj, jobject unused, jint index)) { JVMWrapper("JVM_ConstantPoolGetFloatAt"); - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); bounds_check(cp, index, CHECK_(0.0f)); constantTag tag = cp->tag_at(index); if (!tag.is_float()) { @@ -1990,10 +1988,10 @@ } JVM_END -JVM_ENTRY(jdouble, JVM_ConstantPoolGetDoubleAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)) +JVM_ENTRY(jdouble, JVM_ConstantPoolGetDoubleAt(JNIEnv *env, jobject obj, jobject unused, jint index)) { JVMWrapper("JVM_ConstantPoolGetDoubleAt"); - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); bounds_check(cp, index, CHECK_(0.0)); constantTag tag = cp->tag_at(index); if (!tag.is_double()) { @@ -2003,13 +2001,13 @@ } JVM_END -JVM_ENTRY(jstring, JVM_ConstantPoolGetStringAt(JNIEnv *env, jobject unused, jobject jcpool, jint index)) +JVM_ENTRY(jstring, JVM_ConstantPoolGetStringAt(JNIEnv *env, jobject obj, jobject unused, jint index)) { JVMWrapper("JVM_ConstantPoolGetStringAt"); - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); bounds_check(cp, index, CHECK_NULL); constantTag tag = cp->tag_at(index); - if (!tag.is_string() && !tag.is_unresolved_string()) { + if (!tag.is_string()) { THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index"); } oop str = cp->string_at(index, CHECK_NULL); @@ -2017,11 +2015,11 @@ } JVM_END -JVM_ENTRY(jstring, JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject unused, jobject jcpool, jint index)) +JVM_ENTRY(jstring, JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject obj, jobject unused, jint index)) { JVMWrapper("JVM_ConstantPoolGetUTF8At"); JvmtiVMObjectAllocEventCollector oam; - constantPoolHandle cp = constantPoolHandle(THREAD, constantPoolOop(JNIHandles::resolve_non_null(jcpool))); + constantPoolHandle cp = constantPoolHandle(THREAD, sun_reflect_ConstantPool::get_cp(JNIHandles::resolve_non_null(obj))); bounds_check(cp, index, CHECK_NULL); constantTag tag = cp->tag_at(index); if (!tag.is_symbol()) { @@ -2044,7 +2042,7 @@ assert(! java_lang_Class::is_primitive(r), "primitive classes not allowed"); if (java_lang_Class::is_primitive(r)) return false; - klassOop k = java_lang_Class::as_klassOop(r); + Klass* k = java_lang_Class::as_Klass(r); assert(Klass::cast(k)->oop_is_instance(), "must be an instance klass"); if (! Klass::cast(k)->oop_is_instance()) return false; @@ -2071,15 +2069,15 @@ // RedefineClasses support: bug 6214132 caused verification to fail. // All functions from this section should call the jvmtiThreadSate function: -// klassOop class_to_verify_considering_redefinition(klassOop klass). -// The function returns a klassOop of the _scratch_class if the verifier +// Klass* class_to_verify_considering_redefinition(Klass* klass). +// The function returns a Klass* of the _scratch_class if the verifier // was invoked in the middle of the class redefinition. -// Otherwise it returns its argument value which is the _the_class klassOop. +// Otherwise it returns its argument value which is the _the_class Klass*. // Please, refer to the description in the jvmtiThreadSate.hpp. JVM_ENTRY(const char*, JVM_GetClassNameUTF(JNIEnv *env, jclass cls)) JVMWrapper("JVM_GetClassNameUTF"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); return Klass::cast(k)->name()->as_utf8(); JVM_END @@ -2087,16 +2085,15 @@ JVM_QUICK_ENTRY(void, JVM_GetClassCPTypes(JNIEnv *env, jclass cls, unsigned char *types)) JVMWrapper("JVM_GetClassCPTypes"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - // types will have length zero if this is not an instanceKlass + // types will have length zero if this is not an InstanceKlass // (length is determined by call to JVM_GetClassCPEntriesCount) if (Klass::cast(k)->oop_is_instance()) { - constantPoolOop cp = instanceKlass::cast(k)->constants(); + ConstantPool* cp = InstanceKlass::cast(k)->constants(); for (int index = cp->length() - 1; index >= 0; index--) { constantTag tag = cp->tag_at(index); - types[index] = (tag.is_unresolved_klass()) ? JVM_CONSTANT_Class : - (tag.is_unresolved_string()) ? JVM_CONSTANT_String : tag.value(); + types[index] = (tag.is_unresolved_klass()) ? JVM_CONSTANT_Class : tag.value(); } } JVM_END @@ -2104,47 +2101,47 @@ JVM_QUICK_ENTRY(jint, JVM_GetClassCPEntriesCount(JNIEnv *env, jclass cls)) JVMWrapper("JVM_GetClassCPEntriesCount"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); if (!Klass::cast(k)->oop_is_instance()) return 0; - return instanceKlass::cast(k)->constants()->length(); + return InstanceKlass::cast(k)->constants()->length(); JVM_END JVM_QUICK_ENTRY(jint, JVM_GetClassFieldsCount(JNIEnv *env, jclass cls)) JVMWrapper("JVM_GetClassFieldsCount"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); if (!Klass::cast(k)->oop_is_instance()) return 0; - return instanceKlass::cast(k)->java_fields_count(); + return InstanceKlass::cast(k)->java_fields_count(); JVM_END JVM_QUICK_ENTRY(jint, JVM_GetClassMethodsCount(JNIEnv *env, jclass cls)) JVMWrapper("JVM_GetClassMethodsCount"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); if (!Klass::cast(k)->oop_is_instance()) return 0; - return instanceKlass::cast(k)->methods()->length(); + return InstanceKlass::cast(k)->methods()->length(); JVM_END // The following methods, used for the verifier, are never called with -// array klasses, so a direct cast to instanceKlass is safe. +// array klasses, so a direct cast to InstanceKlass is safe. // Typically, these methods are called in a loop with bounds determined // by the results of JVM_GetClass{Fields,Methods}Count, which return // zero for arrays. JVM_QUICK_ENTRY(void, JVM_GetMethodIxExceptionIndexes(JNIEnv *env, jclass cls, jint method_index, unsigned short *exceptions)) JVMWrapper("JVM_GetMethodIxExceptionIndexes"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - int length = methodOop(method)->checked_exceptions_length(); + Method* method = InstanceKlass::cast(k)->methods()->at(method_index); + int length = method->checked_exceptions_length(); if (length > 0) { - CheckedExceptionElement* table= methodOop(method)->checked_exceptions_start(); + CheckedExceptionElement* table= method->checked_exceptions_start(); for (int i = 0; i < length; i++) { exceptions[i] = table[i].class_cp_index; } @@ -2154,37 +2151,37 @@ JVM_QUICK_ENTRY(jint, JVM_GetMethodIxExceptionsCount(JNIEnv *env, jclass cls, jint method_index)) JVMWrapper("JVM_GetMethodIxExceptionsCount"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - return methodOop(method)->checked_exceptions_length(); + Method* method = InstanceKlass::cast(k)->methods()->at(method_index); + return method->checked_exceptions_length(); JVM_END JVM_QUICK_ENTRY(void, JVM_GetMethodIxByteCode(JNIEnv *env, jclass cls, jint method_index, unsigned char *code)) JVMWrapper("JVM_GetMethodIxByteCode"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - memcpy(code, methodOop(method)->code_base(), methodOop(method)->code_size()); + Method* method = InstanceKlass::cast(k)->methods()->at(method_index); + memcpy(code, method->code_base(), method->code_size()); JVM_END JVM_QUICK_ENTRY(jint, JVM_GetMethodIxByteCodeLength(JNIEnv *env, jclass cls, jint method_index)) JVMWrapper("JVM_GetMethodIxByteCodeLength"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - return methodOop(method)->code_size(); + Method* method = InstanceKlass::cast(k)->methods()->at(method_index); + return method->code_size(); JVM_END JVM_QUICK_ENTRY(void, JVM_GetMethodIxExceptionTableEntry(JNIEnv *env, jclass cls, jint method_index, jint entry_index, JVM_ExceptionTableEntryType *entry)) JVMWrapper("JVM_GetMethodIxExceptionTableEntry"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - ExceptionTable extable((methodOop(method))); + Method* method = InstanceKlass::cast(k)->methods()->at(method_index); + ExceptionTable extable(method); entry->start_pc = extable.start_pc(entry_index); entry->end_pc = extable.end_pc(entry_index); entry->handler_pc = extable.handler_pc(entry_index); @@ -2194,82 +2191,82 @@ JVM_QUICK_ENTRY(jint, JVM_GetMethodIxExceptionTableLength(JNIEnv *env, jclass cls, int method_index)) JVMWrapper("JVM_GetMethodIxExceptionTableLength"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - return methodOop(method)->exception_table_length(); + Method* method = InstanceKlass::cast(k)->methods()->at(method_index); + return method->exception_table_length(); JVM_END JVM_QUICK_ENTRY(jint, JVM_GetMethodIxModifiers(JNIEnv *env, jclass cls, int method_index)) JVMWrapper("JVM_GetMethodIxModifiers"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - return methodOop(method)->access_flags().as_int() & JVM_RECOGNIZED_METHOD_MODIFIERS; + Method* method = InstanceKlass::cast(k)->methods()->at(method_index); + return method->access_flags().as_int() & JVM_RECOGNIZED_METHOD_MODIFIERS; JVM_END JVM_QUICK_ENTRY(jint, JVM_GetFieldIxModifiers(JNIEnv *env, jclass cls, int field_index)) JVMWrapper("JVM_GetFieldIxModifiers"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - return instanceKlass::cast(k)->field_access_flags(field_index) & JVM_RECOGNIZED_FIELD_MODIFIERS; + return InstanceKlass::cast(k)->field_access_flags(field_index) & JVM_RECOGNIZED_FIELD_MODIFIERS; JVM_END JVM_QUICK_ENTRY(jint, JVM_GetMethodIxLocalsCount(JNIEnv *env, jclass cls, int method_index)) JVMWrapper("JVM_GetMethodIxLocalsCount"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - return methodOop(method)->max_locals(); + Method* method = InstanceKlass::cast(k)->methods()->at(method_index); + return method->max_locals(); JVM_END JVM_QUICK_ENTRY(jint, JVM_GetMethodIxArgsSize(JNIEnv *env, jclass cls, int method_index)) JVMWrapper("JVM_GetMethodIxArgsSize"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - return methodOop(method)->size_of_parameters(); + Method* method = InstanceKlass::cast(k)->methods()->at(method_index); + return method->size_of_parameters(); JVM_END JVM_QUICK_ENTRY(jint, JVM_GetMethodIxMaxStack(JNIEnv *env, jclass cls, int method_index)) JVMWrapper("JVM_GetMethodIxMaxStack"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - return methodOop(method)->verifier_max_stack(); + Method* method = InstanceKlass::cast(k)->methods()->at(method_index); + return method->verifier_max_stack(); JVM_END JVM_QUICK_ENTRY(jboolean, JVM_IsConstructorIx(JNIEnv *env, jclass cls, int method_index)) JVMWrapper("JVM_IsConstructorIx"); ResourceMark rm(THREAD); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - return methodOop(method)->name() == vmSymbols::object_initializer_name(); + Method* method = InstanceKlass::cast(k)->methods()->at(method_index); + return method->name() == vmSymbols::object_initializer_name(); JVM_END JVM_ENTRY(const char*, JVM_GetMethodIxNameUTF(JNIEnv *env, jclass cls, jint method_index)) JVMWrapper("JVM_GetMethodIxIxUTF"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - return methodOop(method)->name()->as_utf8(); + Method* method = InstanceKlass::cast(k)->methods()->at(method_index); + return method->name()->as_utf8(); JVM_END JVM_ENTRY(const char*, JVM_GetMethodIxSignatureUTF(JNIEnv *env, jclass cls, jint method_index)) JVMWrapper("JVM_GetMethodIxSignatureUTF"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - oop method = instanceKlass::cast(k)->methods()->obj_at(method_index); - return methodOop(method)->signature()->as_utf8(); + Method* method = InstanceKlass::cast(k)->methods()->at(method_index); + return method->signature()->as_utf8(); JVM_END /** @@ -2282,9 +2279,9 @@ */ JVM_ENTRY(const char*, JVM_GetCPFieldNameUTF(JNIEnv *env, jclass cls, jint cp_index)) JVMWrapper("JVM_GetCPFieldNameUTF"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - constantPoolOop cp = instanceKlass::cast(k)->constants(); + ConstantPool* cp = InstanceKlass::cast(k)->constants(); switch (cp->tag_at(cp_index).value()) { case JVM_CONSTANT_Fieldref: return cp->uncached_name_ref_at(cp_index)->as_utf8(); @@ -2298,9 +2295,9 @@ JVM_ENTRY(const char*, JVM_GetCPMethodNameUTF(JNIEnv *env, jclass cls, jint cp_index)) JVMWrapper("JVM_GetCPMethodNameUTF"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - constantPoolOop cp = instanceKlass::cast(k)->constants(); + ConstantPool* cp = InstanceKlass::cast(k)->constants(); switch (cp->tag_at(cp_index).value()) { case JVM_CONSTANT_InterfaceMethodref: case JVM_CONSTANT_Methodref: @@ -2316,9 +2313,9 @@ JVM_ENTRY(const char*, JVM_GetCPMethodSignatureUTF(JNIEnv *env, jclass cls, jint cp_index)) JVMWrapper("JVM_GetCPMethodSignatureUTF"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - constantPoolOop cp = instanceKlass::cast(k)->constants(); + ConstantPool* cp = InstanceKlass::cast(k)->constants(); switch (cp->tag_at(cp_index).value()) { case JVM_CONSTANT_InterfaceMethodref: case JVM_CONSTANT_Methodref: @@ -2334,9 +2331,9 @@ JVM_ENTRY(const char*, JVM_GetCPFieldSignatureUTF(JNIEnv *env, jclass cls, jint cp_index)) JVMWrapper("JVM_GetCPFieldSignatureUTF"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - constantPoolOop cp = instanceKlass::cast(k)->constants(); + ConstantPool* cp = InstanceKlass::cast(k)->constants(); switch (cp->tag_at(cp_index).value()) { case JVM_CONSTANT_Fieldref: return cp->uncached_signature_ref_at(cp_index)->as_utf8(); @@ -2350,9 +2347,9 @@ JVM_ENTRY(const char*, JVM_GetCPClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)) JVMWrapper("JVM_GetCPClassNameUTF"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - constantPoolOop cp = instanceKlass::cast(k)->constants(); + ConstantPool* cp = InstanceKlass::cast(k)->constants(); Symbol* classname = cp->klass_name_at(cp_index); return classname->as_utf8(); JVM_END @@ -2360,9 +2357,9 @@ JVM_ENTRY(const char*, JVM_GetCPFieldClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)) JVMWrapper("JVM_GetCPFieldClassNameUTF"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - constantPoolOop cp = instanceKlass::cast(k)->constants(); + ConstantPool* cp = InstanceKlass::cast(k)->constants(); switch (cp->tag_at(cp_index).value()) { case JVM_CONSTANT_Fieldref: { int class_index = cp->uncached_klass_ref_index_at(cp_index); @@ -2379,9 +2376,9 @@ JVM_ENTRY(const char*, JVM_GetCPMethodClassNameUTF(JNIEnv *env, jclass cls, jint cp_index)) JVMWrapper("JVM_GetCPMethodClassNameUTF"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); - constantPoolOop cp = instanceKlass::cast(k)->constants(); + ConstantPool* cp = InstanceKlass::cast(k)->constants(); switch (cp->tag_at(cp_index).value()) { case JVM_CONSTANT_Methodref: case JVM_CONSTANT_InterfaceMethodref: { @@ -2399,12 +2396,12 @@ JVM_ENTRY(jint, JVM_GetCPFieldModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls)) JVMWrapper("JVM_GetCPFieldModifiers"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); - klassOop k_called = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(called_cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); + Klass* k_called = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(called_cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); k_called = JvmtiThreadState::class_to_verify_considering_redefinition(k_called, thread); - constantPoolOop cp = instanceKlass::cast(k)->constants(); - constantPoolOop cp_called = instanceKlass::cast(k_called)->constants(); + ConstantPool* cp = InstanceKlass::cast(k)->constants(); + ConstantPool* cp_called = InstanceKlass::cast(k_called)->constants(); switch (cp->tag_at(cp_index).value()) { case JVM_CONSTANT_Fieldref: { Symbol* name = cp->uncached_name_ref_at(cp_index); @@ -2426,20 +2423,20 @@ JVM_QUICK_ENTRY(jint, JVM_GetCPMethodModifiers(JNIEnv *env, jclass cls, int cp_index, jclass called_cls)) JVMWrapper("JVM_GetCPMethodModifiers"); - klassOop k = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(cls)); - klassOop k_called = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(called_cls)); + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); + Klass* k_called = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(called_cls)); k = JvmtiThreadState::class_to_verify_considering_redefinition(k, thread); k_called = JvmtiThreadState::class_to_verify_considering_redefinition(k_called, thread); - constantPoolOop cp = instanceKlass::cast(k)->constants(); + ConstantPool* cp = InstanceKlass::cast(k)->constants(); switch (cp->tag_at(cp_index).value()) { case JVM_CONSTANT_Methodref: case JVM_CONSTANT_InterfaceMethodref: { Symbol* name = cp->uncached_name_ref_at(cp_index); Symbol* signature = cp->uncached_signature_ref_at(cp_index); - objArrayOop methods = instanceKlass::cast(k_called)->methods(); + Array* methods = InstanceKlass::cast(k_called)->methods(); int methods_count = methods->length(); for (int i = 0; i < methods_count; i++) { - methodOop method = methodOop(methods->obj_at(i)); + Method* method = methods->at(i); if (method->name() == name && method->signature() == signature) { return method->access_flags().as_int() & JVM_RECOGNIZED_METHOD_MODIFIERS; } @@ -2465,8 +2462,8 @@ JVMWrapper("JVM_IsSameClassPackage"); oop class1_mirror = JNIHandles::resolve_non_null(class1); oop class2_mirror = JNIHandles::resolve_non_null(class2); - klassOop klass1 = java_lang_Class::as_klassOop(class1_mirror); - klassOop klass2 = java_lang_Class::as_klassOop(class2_mirror); + Klass* klass1 = java_lang_Class::as_Klass(class1_mirror); + Klass* klass2 = java_lang_Class::as_Klass(class2_mirror); return (jboolean) Reflection::is_same_class_package(klass1, klass2); JVM_END @@ -3049,10 +3046,10 @@ bool trusted = is_trusted_frame(thread, &vfst); if (trusted) return NULL; - methodOop m = vfst.method(); + Method* m = vfst.method(); if (!m->is_native()) { - klassOop holder = m->method_holder(); - oop loader = instanceKlass::cast(holder)->class_loader(); + Klass* holder = m->method_holder(); + oop loader = InstanceKlass::cast(holder)->class_loader(); if (loader != NULL && !java_lang_ClassLoader::is_trusted_loader(loader)) { return (jclass) JNIHandles::make_local(env, Klass::cast(holder)->java_mirror()); } @@ -3072,11 +3069,11 @@ bool trusted = is_trusted_frame(thread, &vfst); if (trusted) return NULL; - methodOop m = vfst.method(); + Method* m = vfst.method(); if (!m->is_native()) { - klassOop holder = m->method_holder(); + Klass* holder = m->method_holder(); assert(holder->is_klass(), "just checking"); - oop loader = instanceKlass::cast(holder)->class_loader(); + oop loader = InstanceKlass::cast(holder)->class_loader(); if (loader != NULL && !java_lang_ClassLoader::is_trusted_loader(loader)) { return JNIHandles::make_local(env, loader); } @@ -3108,7 +3105,7 @@ for(vframeStream vfst(thread); !vfst.at_end(); vfst.security_get_caller_frame(1)) { // Native frames are not returned if (!vfst.method()->is_native()) { - klassOop holder = vfst.method()->method_holder(); + Klass* holder = vfst.method()->method_holder(); assert(holder->is_klass(), "just checking"); depth++; KlassLink* l = new KlassLink(KlassHandle(thread, holder)); @@ -3151,9 +3148,9 @@ for(vframeStream vfst(thread); !vfst.at_end(); vfst.next()) { if (!vfst.method()->is_native()) { - klassOop holder = vfst.method()->method_holder(); + Klass* holder = vfst.method()->method_holder(); assert(holder->is_klass(), "just checking"); - if (instanceKlass::cast(holder)->name() == class_name_sym) { + if (InstanceKlass::cast(holder)->name() == class_name_sym) { return depth; } depth++; @@ -3172,11 +3169,11 @@ bool trusted = is_trusted_frame(thread, &vfst); if (trusted) return -1; - methodOop m = vfst.method(); + Method* m = vfst.method(); if (!m->is_native()) { - klassOop holder = m->method_holder(); + Klass* holder = m->method_holder(); assert(holder->is_klass(), "just checking"); - oop loader = instanceKlass::cast(holder)->class_loader(); + oop loader = InstanceKlass::cast(holder)->class_loader(); if (loader != NULL && !java_lang_ClassLoader::is_trusted_loader(loader)) { return depth; } @@ -3210,7 +3207,7 @@ // ObjectInputStream /////////////////////////////////////////////////////////////// -bool force_verify_field_access(klassOop current_class, klassOop field_class, AccessFlags access, bool classloader_only) { +bool force_verify_field_access(Klass* current_class, Klass* field_class, AccessFlags access, bool classloader_only) { if (current_class == NULL) { return true; } @@ -3225,7 +3222,7 @@ } } - return (!access.is_private() && instanceKlass::cast(current_class)->is_same_class_package(field_class)); + return (!access.is_private() && InstanceKlass::cast(current_class)->is_same_class_package(field_class)); } @@ -3244,14 +3241,14 @@ } // Arrays not allowed here, must use JVM_AllocateNewArray - if (Klass::cast(java_lang_Class::as_klassOop(curr_mirror))->oop_is_javaArray() || - Klass::cast(java_lang_Class::as_klassOop(init_mirror))->oop_is_javaArray()) { + if (Klass::cast(java_lang_Class::as_Klass(curr_mirror))->oop_is_array() || + Klass::cast(java_lang_Class::as_Klass(init_mirror))->oop_is_array()) { ResourceMark rm(THREAD); THROW_0(vmSymbols::java_lang_InvalidClassException()); } - instanceKlassHandle curr_klass (THREAD, java_lang_Class::as_klassOop(curr_mirror)); - instanceKlassHandle init_klass (THREAD, java_lang_Class::as_klassOop(init_mirror)); + instanceKlassHandle curr_klass (THREAD, java_lang_Class::as_Klass(curr_mirror)); + instanceKlassHandle init_klass (THREAD, java_lang_Class::as_Klass(init_mirror)); assert(curr_klass->is_subclass_of(init_klass()), "just checking"); @@ -3267,7 +3264,7 @@ if (m.is_null()) { ResourceMark rm(THREAD); THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(init_klass()), + Method::name_and_sig_as_C_string(Klass::cast(init_klass()), vmSymbols::object_initializer_name(), vmSymbols::void_method_signature())); } @@ -3300,15 +3297,15 @@ if (java_lang_Class::is_primitive(mirror)) { THROW_0(vmSymbols::java_lang_InvalidClassException()); } - klassOop k = java_lang_Class::as_klassOop(mirror); + Klass* k = java_lang_Class::as_Klass(mirror); oop result; - if (k->klass_part()->oop_is_typeArray()) { + if (k->oop_is_typeArray()) { // typeArray result = typeArrayKlass::cast(k)->allocate(length, CHECK_NULL); - } else if (k->klass_part()->oop_is_objArray()) { + } else if (k->oop_is_objArray()) { // objArray - objArrayKlassHandle oak(THREAD, k); + objArrayKlass* oak = objArrayKlass::cast(k); oak->initialize(CHECK_NULL); // make sure class is initialized (matches Classic VM behavior) result = oak->allocate(length, CHECK_NULL); } else { @@ -3325,8 +3322,8 @@ for (vframeStream vfst(thread); !vfst.at_end(); vfst.next()) { // UseNewReflection vfst.skip_reflection_related_frames(); // Only needed for 1.4 reflection - klassOop holder = vfst.method()->method_holder(); - oop loader = instanceKlass::cast(holder)->class_loader(); + Klass* holder = vfst.method()->method_holder(); + oop loader = InstanceKlass::cast(holder)->class_loader(); if (loader != NULL) { return JNIHandles::make_local(env, loader); } @@ -3368,22 +3365,22 @@ !vfst.at_end() && loader == NULL; vfst.next()) { if (!vfst.method()->is_native()) { - klassOop holder = vfst.method()->method_holder(); - loader = instanceKlass::cast(holder)->class_loader(); - protection_domain = instanceKlass::cast(holder)->protection_domain(); + Klass* holder = vfst.method()->method_holder(); + loader = InstanceKlass::cast(holder)->class_loader(); + protection_domain = InstanceKlass::cast(holder)->protection_domain(); } } } else { - klassOop curr_klass_oop = java_lang_Class::as_klassOop(curr_klass()); - loader = instanceKlass::cast(curr_klass_oop)->class_loader(); - protection_domain = instanceKlass::cast(curr_klass_oop)->protection_domain(); + Klass* curr_klass_oop = java_lang_Class::as_Klass(curr_klass()); + loader = InstanceKlass::cast(curr_klass_oop)->class_loader(); + protection_domain = InstanceKlass::cast(curr_klass_oop)->protection_domain(); } Handle h_loader(THREAD, loader); Handle h_prot (THREAD, protection_domain); jclass result = find_class_from_class_loader(env, name, true, h_loader, h_prot, false, thread); if (TraceClassResolution && result != NULL) { - trace_class_resolution(java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(result))); + trace_class_resolution(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(result))); } return result; JVM_END @@ -3398,7 +3395,7 @@ THROW_0(vmSymbols::java_lang_NullPointerException()); } oop a = JNIHandles::resolve_non_null(arr); - if (!a->is_javaArray() || (type_array_only && !a->is_typeArray())) { + if (!a->is_array() || (type_array_only && !a->is_typeArray())) { THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Argument is not an array"); } return arrayOop(a); @@ -4019,7 +4016,7 @@ // Security Note: // The Java level wrapper will perform the necessary security check allowing // us to pass the NULL as the initiating class loader. - klassOop klass = SystemDictionary::resolve_or_fail(name, loader, protection_domain, throwError != 0, CHECK_NULL); + Klass* klass = SystemDictionary::resolve_or_fail(name, loader, protection_domain, throwError != 0, CHECK_NULL); KlassHandle klass_handle(THREAD, klass); // Check if we should initialize the class @@ -4196,7 +4193,7 @@ } // check if threads is not an array of objects of Thread class - klassOop k = objArrayKlass::cast(ah->klass())->element_klass(); + Klass* k = objArrayKlass::cast(ah->klass())->element_klass(); if (k != SystemDictionary::Thread_klass()) { THROW_(vmSymbols::java_lang_IllegalArgumentException(), 0); } @@ -4248,7 +4245,7 @@ if (java_lang_Class::is_primitive(mirror())) { return NULL; } - klassOop k = java_lang_Class::as_klassOop(mirror()); + Klass* k = java_lang_Class::as_Klass(mirror()); if (!Klass::cast(k)->oop_is_instance()) { return NULL; } @@ -4259,7 +4256,7 @@ } objArrayOop dest_o = oopFactory::new_objArray(SystemDictionary::Object_klass(), 3, CHECK_NULL); objArrayHandle dest(THREAD, dest_o); - klassOop enc_k = ik_h->constants()->klass_at(encl_method_class_idx, CHECK_NULL); + Klass* enc_k = ik_h->constants()->klass_at(encl_method_class_idx, CHECK_NULL); dest->obj_at_put(0, Klass::cast(enc_k)->java_mirror()); int encl_method_method_idx = ik_h->enclosing_method_method_index(); if (encl_method_method_idx != 0) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/prims/jvm.h --- a/src/share/vm/prims/jvm.h Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/prims/jvm.h Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -550,46 +550,46 @@ JVM_GetClassConstantPool(JNIEnv *env, jclass cls); JNIEXPORT jint JNICALL JVM_ConstantPoolGetSize -(JNIEnv *env, jobject unused, jobject jcpool); +(JNIEnv *env, jobject obj, jobject unused); JNIEXPORT jclass JNICALL JVM_ConstantPoolGetClassAt -(JNIEnv *env, jobject unused, jobject jcpool, jint index); +(JNIEnv *env, jobject obj, jobject unused, jint index); JNIEXPORT jclass JNICALL JVM_ConstantPoolGetClassAtIfLoaded -(JNIEnv *env, jobject unused, jobject jcpool, jint index); +(JNIEnv *env, jobject obj, jobject unused, jint index); JNIEXPORT jobject JNICALL JVM_ConstantPoolGetMethodAt -(JNIEnv *env, jobject unused, jobject jcpool, jint index); +(JNIEnv *env, jobject obj, jobject unused, jint index); JNIEXPORT jobject JNICALL JVM_ConstantPoolGetMethodAtIfLoaded -(JNIEnv *env, jobject unused, jobject jcpool, jint index); +(JNIEnv *env, jobject obj, jobject unused, jint index); JNIEXPORT jobject JNICALL JVM_ConstantPoolGetFieldAt -(JNIEnv *env, jobject unused, jobject jcpool, jint index); +(JNIEnv *env, jobject obj, jobject unused, jint index); JNIEXPORT jobject JNICALL JVM_ConstantPoolGetFieldAtIfLoaded -(JNIEnv *env, jobject unused, jobject jcpool, jint index); +(JNIEnv *env, jobject obj, jobject unused, jint index); JNIEXPORT jobjectArray JNICALL JVM_ConstantPoolGetMemberRefInfoAt -(JNIEnv *env, jobject unused, jobject jcpool, jint index); +(JNIEnv *env, jobject obj, jobject unused, jint index); JNIEXPORT jint JNICALL JVM_ConstantPoolGetIntAt -(JNIEnv *env, jobject unused, jobject jcpool, jint index); +(JNIEnv *env, jobject obj, jobject unused, jint index); JNIEXPORT jlong JNICALL JVM_ConstantPoolGetLongAt -(JNIEnv *env, jobject unused, jobject jcpool, jint index); +(JNIEnv *env, jobject obj, jobject unused, jint index); JNIEXPORT jfloat JNICALL JVM_ConstantPoolGetFloatAt -(JNIEnv *env, jobject unused, jobject jcpool, jint index); +(JNIEnv *env, jobject obj, jobject unused, jint index); JNIEXPORT jdouble JNICALL JVM_ConstantPoolGetDoubleAt -(JNIEnv *env, jobject unused, jobject jcpool, jint index); +(JNIEnv *env, jobject obj, jobject unused, jint index); JNIEXPORT jstring JNICALL JVM_ConstantPoolGetStringAt -(JNIEnv *env, jobject unused, jobject jcpool, jint index); +(JNIEnv *env, jobject obj, jobject unused, jint index); JNIEXPORT jstring JNICALL JVM_ConstantPoolGetUTF8At -(JNIEnv *env, jobject unused, jobject jcpool, jint index); +(JNIEnv *env, jobject obj, jobject unused, jint index); /* * java.security.* diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/prims/jvm_misc.hpp --- a/src/share/vm/prims/jvm_misc.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/prims/jvm_misc.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,7 +33,7 @@ jclass find_class_from_class_loader(JNIEnv* env, Symbol* name, jboolean init, Handle loader, Handle protection_domain, jboolean throwError, TRAPS); -void trace_class_resolution(klassOop to_class); +void trace_class_resolution(Klass* to_class); /* * Support for Serialization and RMI. Currently used by HotSpot only. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/prims/jvmtiClassFileReconstituter.cpp --- a/src/share/vm/prims/jvmtiClassFileReconstituter.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/prims/jvmtiClassFileReconstituter.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -45,7 +45,7 @@ #endif // FIXME: add Deprecated, LVTT attributes // FIXME: fix Synthetic attribute -// FIXME: per Serguei, add error return handling for constantPoolOopDesc::copy_cpool_bytes() +// FIXME: per Serguei, add error return handling for ConstantPool::copy_cpool_bytes() // Write the field information portion of ClassFile structure @@ -53,7 +53,7 @@ // JVMSpec| field_info fields[fields_count]; void JvmtiClassFileReconstituter::write_field_infos() { HandleMark hm(thread()); - objArrayHandle fields_anno(thread(), ikh()->fields_annotations()); + Array* fields_anno = ikh()->fields_annotations(); // Compute the real number of Java fields int java_fields = ikh()->java_fields_count(); @@ -67,9 +67,7 @@ guarantee(name_index != 0 && signature_index != 0, "bad constant pool index for field"); // int offset = ikh()->field_offset( index ); int generic_signature_index = fs.generic_signature_index(); - typeArrayHandle anno(thread(), fields_anno.not_null() ? - (typeArrayOop)(fields_anno->obj_at(fs.index())) : - (typeArrayOop)NULL); + AnnotationArray* anno = fields_anno == NULL ? NULL : fields_anno->at(fs.index()); // JVMSpec| field_info { // JVMSpec| u2 access_flags; @@ -92,7 +90,7 @@ if (generic_signature_index != 0) { ++attr_count; } - if (anno.not_null()) { + if (anno != NULL) { ++attr_count; // has RuntimeVisibleAnnotations attribute } @@ -109,7 +107,7 @@ if (generic_signature_index != 0) { write_signature_attribute(generic_signature_index); } - if (anno.not_null()) { + if (anno != NULL) { write_annotations_attribute("RuntimeVisibleAnnotations", anno); } } @@ -133,7 +131,7 @@ // JVMSpec| attribute_info attributes[attributes_count]; // JVMSpec| } void JvmtiClassFileReconstituter::write_code_attribute(methodHandle method) { - constMethodHandle const_method(thread(), method->constMethod()); + ConstMethod* const_method = method->constMethod(); u2 line_num_cnt = 0; int stackmap_len = 0; int local_variable_table_length = 0; @@ -234,7 +232,7 @@ // JVMSpec| u2 number_of_exceptions; // JVMSpec| u2 exception_index_table[number_of_exceptions]; // JVMSpec| } -void JvmtiClassFileReconstituter::write_exceptions_attribute(constMethodHandle const_method) { +void JvmtiClassFileReconstituter::write_exceptions_attribute(ConstMethod* const_method) { CheckedExceptionElement* checked_exceptions = const_method->checked_exceptions_start(); int checked_exceptions_length = const_method->checked_exceptions_length(); int size = @@ -307,11 +305,11 @@ // JSR202| ... // JSR202| } void JvmtiClassFileReconstituter::write_annotations_attribute(const char* attr_name, - typeArrayHandle annos) { + AnnotationArray* annos) { u4 length = annos->length(); write_attribute_name_index(attr_name); write_u4(length); - memcpy(writeable_address(length), annos->byte_at_addr(0), length); + memcpy(writeable_address(length), annos->adr_at(0), length); } @@ -330,7 +328,7 @@ InnerClassesIterator iter(ikh()); guarantee(iter.length() != 0 && iter.length() == length, "caller must check"); - u2 entry_count = length / instanceKlass::inner_class_next_offset; + u2 entry_count = length / InstanceKlass::inner_class_next_offset; u4 size = 2 + entry_count * (2+2+2+2); write_attribute_name_index("InnerClasses"); @@ -433,7 +431,7 @@ write_u4(stackmap_len); memcpy( writeable_address(stackmap_len), - (void*)(method->stackmap_data()->byte_at_addr(0)), + (void*)(method->stackmap_data()->adr_at(0)), stackmap_len); } @@ -447,11 +445,11 @@ // JVMSpec| } void JvmtiClassFileReconstituter::write_method_info(methodHandle method) { AccessFlags access_flags = method->access_flags(); - constMethodHandle const_method(thread(), method->constMethod()); + ConstMethod* const_method = method->constMethod(); u2 generic_signature_index = const_method->generic_signature_index(); - typeArrayHandle anno(thread(), method->annotations()); - typeArrayHandle param_anno(thread(), method->parameter_annotations()); - typeArrayHandle default_anno(thread(), method->annotation_default()); + AnnotationArray* anno = method->annotations(); + AnnotationArray* param_anno = method->parameter_annotations(); + AnnotationArray* default_anno = method->annotation_default(); write_u2(access_flags.get_flags() & JVM_RECOGNIZED_METHOD_MODIFIERS); write_u2(const_method->name_index()); @@ -466,7 +464,7 @@ if (const_method->has_checked_exceptions()) { ++attr_count; // has Exceptions attribute } - if (default_anno.not_null()) { + if (default_anno != NULL) { ++attr_count; // has AnnotationDefault attribute } // Deprecated attribute would go here @@ -476,10 +474,10 @@ if (generic_signature_index != 0) { ++attr_count; } - if (anno.not_null()) { + if (anno != NULL) { ++attr_count; // has RuntimeVisibleAnnotations attribute } - if (param_anno.not_null()) { + if (param_anno != NULL) { ++attr_count; // has RuntimeVisibleParameterAnnotations attribute } @@ -490,7 +488,7 @@ if (const_method->has_checked_exceptions()) { write_exceptions_attribute(const_method); } - if (default_anno.not_null()) { + if (default_anno != NULL) { write_annotations_attribute("AnnotationDefault", default_anno); } // Deprecated attribute would go here @@ -500,10 +498,10 @@ if (generic_signature_index != 0) { write_signature_attribute(generic_signature_index); } - if (anno.not_null()) { + if (anno != NULL) { write_annotations_attribute("RuntimeVisibleAnnotations", anno); } - if (param_anno.not_null()) { + if (param_anno != NULL) { write_annotations_attribute("RuntimeVisibleParameterAnnotations", param_anno); } } @@ -514,7 +512,7 @@ void JvmtiClassFileReconstituter::write_class_attributes() { u2 inner_classes_length = inner_classes_attribute_length(); Symbol* generic_signature = ikh()->generic_signature(); - typeArrayHandle anno(thread(), ikh()->class_annotations()); + AnnotationArray* anno = ikh()->class_annotations(); int attr_count = 0; if (generic_signature != NULL) { @@ -529,7 +527,7 @@ if (inner_classes_length > 0) { ++attr_count; } - if (anno.not_null()) { + if (anno != NULL) { ++attr_count; // has RuntimeVisibleAnnotations attribute } @@ -547,7 +545,7 @@ if (inner_classes_length > 0) { write_inner_classes_attribute(inner_classes_length); } - if (anno.not_null()) { + if (anno != NULL) { write_annotations_attribute("RuntimeVisibleAnnotations", anno); } } @@ -557,33 +555,33 @@ // JVMSpec| method_info methods[methods_count]; void JvmtiClassFileReconstituter::write_method_infos() { HandleMark hm(thread()); - objArrayHandle methods(thread(), ikh()->methods()); + Array* methods = ikh()->methods(); int num_methods = methods->length(); write_u2(num_methods); if (JvmtiExport::can_maintain_original_method_order()) { int index; int original_index; - int* method_order = NEW_RESOURCE_ARRAY(int, num_methods); + intArray method_order(num_methods, 0); // invert the method order mapping for (index = 0; index < num_methods; index++) { - original_index = ikh()->method_ordering()->int_at(index); + original_index = ikh()->method_ordering()->at(index); assert(original_index >= 0 && original_index < num_methods, "invalid original method index"); - method_order[original_index] = index; + method_order.at_put(original_index, index); } // write in original order for (original_index = 0; original_index < num_methods; original_index++) { - index = method_order[original_index]; - methodHandle method(thread(), (methodOop)(ikh()->methods()->obj_at(index))); + index = method_order.at(original_index); + methodHandle method(thread(), methods->at(index)); write_method_info(method); } } else { // method order not preserved just dump the method infos for (int index = 0; index < num_methods; index++) { - methodHandle method(thread(), (methodOop)(ikh()->methods()->obj_at(index))); + methodHandle method(thread(), methods->at(index)); write_method_info(method); } } @@ -613,18 +611,18 @@ // JVMSpec| u2 this_class; // JVMSpec| u2 super_class; write_u2(class_symbol_to_cpool_index(ikh()->name())); - klassOop super_class = ikh()->super(); + Klass* super_class = ikh()->super(); write_u2(super_class == NULL? 0 : // zero for java.lang.Object - class_symbol_to_cpool_index(super_class->klass_part()->name())); + class_symbol_to_cpool_index(super_class->name())); // JVMSpec| u2 interfaces_count; // JVMSpec| u2 interfaces[interfaces_count]; - objArrayHandle interfaces(thread(), ikh()->local_interfaces()); + Array* interfaces = ikh()->local_interfaces(); int num_interfaces = interfaces->length(); write_u2(num_interfaces); for (int index = 0; index < num_interfaces; index++) { HandleMark hm(thread()); - instanceKlassHandle iikh(thread(), klassOop(interfaces->obj_at(index))); + instanceKlassHandle iikh(thread(), interfaces->at(index)); write_u2(class_symbol_to_cpool_index(iikh->name())); } @@ -693,7 +691,7 @@ unsigned char* p = bytecodes; Bytecodes::Code code; - bool is_rewritten = instanceKlass::cast(mh->method_holder())->is_rewritten(); + bool is_rewritten = InstanceKlass::cast(mh->method_holder())->is_rewritten(); while ((code = bs.next()) >= 0) { assert(Bytecodes::is_java_code(code), "sanity check"); @@ -713,7 +711,8 @@ // During linking the get/put and invoke instructions are rewritten // with an index into the constant pool cache. The original constant // pool index must be returned to caller. Rewrite the index. - if (is_rewritten && len >= 3) { + if (is_rewritten && len > 1) { + bool is_wide = false; switch (code) { case Bytecodes::_getstatic : // fall through case Bytecodes::_putstatic : // fall through @@ -723,7 +722,7 @@ case Bytecodes::_invokespecial : // fall through case Bytecodes::_invokestatic : // fall through case Bytecodes::_invokedynamic : // fall through - case Bytecodes::_invokeinterface : + case Bytecodes::_invokeinterface : { assert(len == 3 || (code == Bytecodes::_invokeinterface && len == 5) || (code == Bytecodes::_invokedynamic && len == 5), @@ -731,17 +730,36 @@ int cpci = Bytes::get_native_u2(bcp+1); bool is_invokedynamic = (EnableInvokeDynamic && code == Bytecodes::_invokedynamic); - if (is_invokedynamic) + ConstantPoolCacheEntry* entry; + if (is_invokedynamic) { cpci = Bytes::get_native_u4(bcp+1); + entry = mh->constants()->invokedynamic_cp_cache_entry_at(cpci); + } else { // cache cannot be pre-fetched since some classes won't have it yet - ConstantPoolCacheEntry* entry = - mh->constants()->cache()->main_entry_at(cpci); + entry = mh->constants()->cache()->entry_at(cpci); + } int i = entry->constant_pool_index(); assert(i < mh->constants()->length(), "sanity check"); Bytes::put_Java_u2((address)(p+1), (u2)i); // java byte ordering if (is_invokedynamic) *(p+3) = *(p+4) = 0; break; } + case Bytecodes::_ldc_w: + is_wide = true; // fall through + case Bytecodes::_ldc: { + if (bs.raw_code() == Bytecodes::_fast_aldc || bs.raw_code() == Bytecodes::_fast_aldc_w) { + int cpci = is_wide ? Bytes::get_native_u2(bcp+1) : (u1)(*(bcp+1)); + int i = mh->constants()->object_to_cp_index(cpci); + assert(i < mh->constants()->length(), "sanity check"); + if (is_wide) { + Bytes::put_Java_u2((address)(p+1), (u2)i); // java byte ordering + } else { + *(p+1) = (u1)i; + } + } + break; + } + } } p += len; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/prims/jvmtiClassFileReconstituter.hpp --- a/src/share/vm/prims/jvmtiClassFileReconstituter.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/prims/jvmtiClassFileReconstituter.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -112,7 +112,7 @@ void write_method_infos(); void write_method_info(methodHandle method); void write_code_attribute(methodHandle method); - void write_exceptions_attribute(constMethodHandle const_method); + void write_exceptions_attribute(ConstMethod* const_method); void write_synthetic_attribute(); void write_class_attributes(); void write_source_file_attribute(); @@ -125,7 +125,7 @@ void write_inner_classes_attribute(int length); void write_signature_attribute(u2 generic_signaure_index); void write_attribute_name_index(const char* name); - void write_annotations_attribute(const char* attr_name, typeArrayHandle annos); + void write_annotations_attribute(const char* attr_name, AnnotationArray* annos); address writeable_address(size_t size); void write_u1(u1 x); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/prims/jvmtiEnter.xsl --- a/src/share/vm/prims/jvmtiEnter.xsl Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/prims/jvmtiEnter.xsl Sat Sep 01 13:25:18 2012 -0400 @@ -1,6 +1,6 @@ inline) or rejection msg if (m->is_abstract()) return (_msg = "abstract method"); // note: we allow ik->is_abstract() - if (!instanceKlass::cast(m->method_holder())->is_initialized()) return (_msg = "method holder not initialized"); + if (!InstanceKlass::cast(m->method_holder())->is_initialized()) return (_msg = "method holder not initialized"); if (m->is_native()) return (_msg = "native method"); nmethod* m_code = m->code(); if (m_code != NULL && m_code->code_size() > InlineSmallCode) @@ -639,7 +639,7 @@ if ((m->code() == NULL) && m->was_never_executed()) return (_msg = "never executed"); if (!m->was_executed_more_than(MIN2(MinInliningThreshold, CompileThreshold >> 1))) return (_msg = "executed < MinInliningThreshold times"); } - if (methodOopDesc::has_unloaded_classes_in_signature(m, JavaThread::current())) return (_msg = "unloaded signature classes"); + if (Method::has_unloaded_classes_in_signature(m, JavaThread::current())) return (_msg = "unloaded signature classes"); return NULL; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/compilationPolicy.hpp --- a/src/share/vm/runtime/compilationPolicy.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/compilationPolicy.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -71,15 +71,15 @@ virtual void reprofile(ScopeDesc* trap_scope, bool is_osr) = 0; // delay_compilation(method) can be called by any component of the runtime to notify the policy // that it's recommended to delay the complation of this method. - virtual void delay_compilation(methodOop method) = 0; + virtual void delay_compilation(Method* method) = 0; // disable_compilation() is called whenever the runtime decides to disable compilation of the // specified method. - virtual void disable_compilation(methodOop method) = 0; + virtual void disable_compilation(Method* method) = 0; // Select task is called by CompileBroker. The queue is guaranteed to have at least one // element and is locked. The function should select one and return it. virtual CompileTask* select_task(CompileQueue* compile_queue) = 0; // Tell the runtime if we think a given method is adequately profiled. - virtual bool is_mature(methodOop method) = 0; + virtual bool is_mature(Method* method) = 0; // Do policy initialization virtual void initialize() = 0; virtual bool should_not_inline(ciEnv* env, ciMethod* method) { return false; } @@ -100,9 +100,9 @@ virtual int compiler_count(CompLevel comp_level); virtual void do_safepoint_work(); virtual void reprofile(ScopeDesc* trap_scope, bool is_osr); - virtual void delay_compilation(methodOop method); - virtual void disable_compilation(methodOop method); - virtual bool is_mature(methodOop method); + virtual void delay_compilation(Method* method); + virtual void disable_compilation(Method* method); + virtual bool is_mature(Method* method); virtual void initialize(); virtual CompileTask* select_task(CompileQueue* compile_queue); virtual nmethod* event(methodHandle method, methodHandle inlinee, int branch_bci, int bci, CompLevel comp_level, nmethod* nm, JavaThread* thread); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/deoptimization.cpp --- a/src/share/vm/runtime/deoptimization.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/deoptimization.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -34,7 +34,7 @@ #include "memory/allocation.inline.hpp" #include "memory/oopFactory.hpp" #include "memory/resourceArea.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiThreadState.hpp" #include "runtime/biasedLocking.hpp" @@ -748,11 +748,11 @@ assert(objects->at(i)->is_object(), "invalid debug information"); ObjectValue* sv = (ObjectValue*) objects->at(i); - KlassHandle k(((ConstantOopReadValue*) sv->klass())->value()()); + KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()())); oop obj = NULL; if (k->oop_is_instance()) { - instanceKlass* ik = instanceKlass::cast(k()); + InstanceKlass* ik = InstanceKlass::cast(k()); obj = ik->allocate_instance(CHECK_(false)); } else if (k->oop_is_typeArray()) { typeArrayKlass* ak = typeArrayKlass::cast(k()); @@ -782,7 +782,7 @@ frame* _fr; RegisterMap* _reg_map; ObjectValue* _sv; - instanceKlass* _ik; + InstanceKlass* _ik; oop _obj; int _i; @@ -914,12 +914,12 @@ void Deoptimization::reassign_fields(frame* fr, RegisterMap* reg_map, GrowableArray* objects) { for (int i = 0; i < objects->length(); i++) { ObjectValue* sv = (ObjectValue*) objects->at(i); - KlassHandle k(((ConstantOopReadValue*) sv->klass())->value()()); + KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()())); Handle obj = sv->value(); assert(obj.not_null(), "reallocation was missed"); if (k->oop_is_instance()) { - instanceKlass* ik = instanceKlass::cast(k()); + InstanceKlass* ik = InstanceKlass::cast(k()); FieldReassigner reassign(fr, reg_map, sv, obj()); ik->do_nonstatic_fields(&reassign); } else if (k->oop_is_typeArray()) { @@ -965,11 +965,11 @@ for (int i = 0; i < objects->length(); i++) { ObjectValue* sv = (ObjectValue*) objects->at(i); - KlassHandle k(((ConstantOopReadValue*) sv->klass())->value()()); + KlassHandle k(java_lang_Class::as_Klass(sv->klass()->as_ConstantOopReadValue()->value()())); Handle obj = sv->value(); tty->print(" object <" INTPTR_FORMAT "> of type ", sv->value()()); - k->as_klassOop()->print_value(); + k->print_value(); tty->print(" allocated (%d bytes)", obj->size() * HeapWordSize); tty->cr(); @@ -1182,13 +1182,13 @@ void Deoptimization::load_class_by_index(constantPoolHandle constant_pool, int index, TRAPS) { // in case of an unresolved klass entry, load the class. if (constant_pool->tag_at(index).is_unresolved_klass()) { - klassOop tk = constant_pool->klass_at(index, CHECK); + Klass* tk = constant_pool->klass_at(index, CHECK); return; } if (!constant_pool->tag_at(index).is_symbol()) return; - Handle class_loader (THREAD, instanceKlass::cast(constant_pool->pool_holder())->class_loader()); + Handle class_loader (THREAD, InstanceKlass::cast(constant_pool->pool_holder())->class_loader()); Symbol* symbol = constant_pool->symbol_at(index); // class name? @@ -1268,8 +1268,8 @@ // Ensure that we can record deopt. history: bool create_if_missing = ProfileTraps; - methodDataHandle trap_mdo - (THREAD, get_method_data(thread, trap_method, create_if_missing)); + MethodData* trap_mdo = + get_method_data(thread, trap_method, create_if_missing); // Print a bunch of diagnostics, if requested. if (TraceDeoptimization || LogCompilation) { @@ -1297,7 +1297,7 @@ if (xtty != NULL) xtty->name(class_name); } - if (xtty != NULL && trap_mdo.not_null()) { + if (xtty != NULL && trap_mdo != NULL) { // Dump the relevant MDO state. // This is the deopt count for the current reason, any previous // reasons or recompiles seen at this point. @@ -1380,7 +1380,7 @@ // PerMethodRecompilationCutoff, the method is abandoned. // This should only happen if the method is very large and has // many "lukewarm" deoptimizations. The code which enforces this - // limit is elsewhere (class nmethod, class methodOopDesc). + // limit is elsewhere (class nmethod, class Method). // // Note that the per-BCI 'is_recompiled' bit gives the compiler one chance // to recompile at each bytecode independently of the per-BCI cutoff. @@ -1449,15 +1449,15 @@ // Setting +ProfileTraps fixes the following, on all platforms: // 4852688: ProfileInterpreter is off by default for ia64. The result is // infinite heroic-opt-uncommon-trap/deopt/recompile cycles, since the - // recompile relies on a methodDataOop to record heroic opt failures. + // recompile relies on a MethodData* to record heroic opt failures. // Whether the interpreter is producing MDO data or not, we also need // to use the MDO to detect hot deoptimization points and control // aggressive optimization. bool inc_recompile_count = false; ProfileData* pdata = NULL; - if (ProfileTraps && update_trap_state && trap_mdo.not_null()) { - assert(trap_mdo() == get_method_data(thread, trap_method, false), "sanity"); + if (ProfileTraps && update_trap_state && trap_mdo != NULL) { + assert(trap_mdo == get_method_data(thread, trap_method, false), "sanity"); uint this_trap_count = 0; bool maybe_prior_trap = false; bool maybe_prior_recompile = false; @@ -1573,15 +1573,15 @@ } JRT_END -methodDataOop +MethodData* Deoptimization::get_method_data(JavaThread* thread, methodHandle m, bool create_if_missing) { Thread* THREAD = thread; - methodDataOop mdo = m()->method_data(); + MethodData* mdo = m()->method_data(); if (mdo == NULL && create_if_missing && !HAS_PENDING_EXCEPTION) { // Build an MDO. Ignore errors like OutOfMemory; // that simply means we won't have an MDO to update. - methodOopDesc::build_interpreter_method_data(m, THREAD); + Method::build_interpreter_method_data(m, THREAD); if (HAS_PENDING_EXCEPTION) { assert((PENDING_EXCEPTION->is_a(SystemDictionary::OutOfMemoryError_klass())), "we expect only an OOM error here"); CLEAR_PENDING_EXCEPTION; @@ -1592,7 +1592,7 @@ } ProfileData* -Deoptimization::query_update_method_data(methodDataHandle trap_mdo, +Deoptimization::query_update_method_data(MethodData* trap_mdo, int trap_bci, Deoptimization::DeoptReason reason, //outputs: @@ -1652,7 +1652,7 @@ } void -Deoptimization::update_method_data_from_interpreter(methodDataHandle trap_mdo, int trap_bci, int reason) { +Deoptimization::update_method_data_from_interpreter(MethodData* trap_mdo, int trap_bci, int reason) { ResourceMark rm; // Ignored outputs: uint ignore_this_trap_count; @@ -1940,7 +1940,7 @@ } void -Deoptimization::update_method_data_from_interpreter(methodDataHandle trap_mdo, int trap_bci, int reason) { +Deoptimization::update_method_data_from_interpreter(MethodData* trap_mdo, int trap_bci, int reason) { // no udpate } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/deoptimization.hpp --- a/src/share/vm/runtime/deoptimization.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/deoptimization.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -332,9 +332,9 @@ static void popframe_preserve_args(JavaThread* thread, int bytes_to_save, void* start_address); private: - static methodDataOop get_method_data(JavaThread* thread, methodHandle m, bool create_if_missing); + static MethodData* get_method_data(JavaThread* thread, methodHandle m, bool create_if_missing); // Update the mdo's count and per-BCI reason bits, returning previous state: - static ProfileData* query_update_method_data(methodDataHandle trap_mdo, + static ProfileData* query_update_method_data(MethodData* trap_mdo, int trap_bci, DeoptReason reason, //outputs: @@ -355,7 +355,7 @@ // Note: Histogram array size is 1-2 Kb. public: - static void update_method_data_from_interpreter(methodDataHandle trap_mdo, int trap_bci, int reason); + static void update_method_data_from_interpreter(MethodData* trap_mdo, int trap_bci, int reason); }; class DeoptimizationMarker : StackObj { // for profiling diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/dtraceJSDT.cpp --- a/src/share/vm/runtime/dtraceJSDT.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/dtraceJSDT.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -67,7 +67,7 @@ assert(probe->name != NULL, "valid probe name"); assert(probe->function != NULL, "valid probe function spec"); methodHandle h_method = - methodHandle(THREAD, JNIHandles::resolve_jmethod_id(probe->method)); + methodHandle(THREAD, Method::resolve_jmethod_id(probe->method)); nmethod* nm = AdapterHandlerLibrary::create_dtrace_nmethod(h_method); if (nm == NULL) { delete probes; @@ -92,7 +92,7 @@ } jboolean DTraceJSDT::is_probe_enabled(jmethodID method) { - methodOop m = JNIHandles::resolve_jmethod_id(method); + Method* m = Method::resolve_jmethod_id(method); return nativeInstruction_at(m->code()->trap_address())->is_dtrace_trap(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/fieldDescriptor.cpp --- a/src/share/vm/runtime/fieldDescriptor.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/fieldDescriptor.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ #include "classfile/vmSymbols.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" +#include "oops/annotations.hpp" #include "oops/instanceKlass.hpp" #include "oops/fieldStreams.hpp" #include "runtime/fieldDescriptor.hpp" @@ -35,7 +36,7 @@ oop fieldDescriptor::loader() const { - return instanceKlass::cast(_cp->pool_holder())->class_loader(); + return InstanceKlass::cast(_cp->pool_holder())->class_loader(); } Symbol* fieldDescriptor::generic_signature() const { @@ -44,7 +45,7 @@ } int idx = 0; - instanceKlass* ik = instanceKlass::cast(field_holder()); + InstanceKlass* ik = InstanceKlass::cast(field_holder()); for (AllFieldStream fs(ik); !fs.done(); fs.next()) { if (idx == _index) { return fs.generic_signature(); @@ -56,12 +57,12 @@ return NULL; } -typeArrayOop fieldDescriptor::annotations() const { - instanceKlass* ik = instanceKlass::cast(field_holder()); - objArrayOop md = ik->fields_annotations(); +AnnotationArray* fieldDescriptor::annotations() const { + InstanceKlass* ik = InstanceKlass::cast(field_holder()); + Array* md = ik->fields_annotations(); if (md == NULL) return NULL; - return typeArrayOop(md->obj_at(index())); + return md->at(index()); } constantTag fieldDescriptor::initial_value_tag() const { @@ -85,11 +86,10 @@ } oop fieldDescriptor::string_initial_value(TRAPS) const { - return constants()->string_at(initial_value_index(), CHECK_0); + return constants()->uncached_string_at(initial_value_index(), CHECK_0); } -void fieldDescriptor::initialize(klassOop k, int index) { - instanceKlass* ik = instanceKlass::cast(k); +void fieldDescriptor::initialize(InstanceKlass* ik, int index) { _cp = ik->constants(); FieldInfo* f = ik->field(index); assert(!f->is_internal(), "regular Java fields only"); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/fieldDescriptor.hpp --- a/src/share/vm/runtime/fieldDescriptor.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/fieldDescriptor.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,9 +25,7 @@ #ifndef SHARE_VM_RUNTIME_FIELDDESCRIPTOR_HPP #define SHARE_VM_RUNTIME_FIELDDESCRIPTOR_HPP -#include "oops/constantPoolOop.hpp" -#include "oops/klassOop.hpp" -#include "oops/oop.inline.hpp" +#include "oops/constantPool.hpp" #include "oops/symbol.hpp" #include "runtime/fieldType.hpp" #include "utilities/accessFlags.hpp" @@ -45,12 +43,12 @@ // update the access_flags for the field in the klass void update_klass_field_access_flag() { - instanceKlass* ik = instanceKlass::cast(field_holder()); + InstanceKlass* ik = InstanceKlass::cast(field_holder()); ik->field(index())->set_access_flags(_access_flags.as_short()); } FieldInfo* field() const { - instanceKlass* ik = instanceKlass::cast(field_holder()); + InstanceKlass* ik = InstanceKlass::cast(field_holder()); return ik->field(_index); } @@ -61,15 +59,15 @@ Symbol* signature() const { return field()->signature(_cp); } - klassOop field_holder() const { return _cp->pool_holder(); } - constantPoolOop constants() const { return _cp(); } + Klass* field_holder() const { return _cp->pool_holder(); } + ConstantPool* constants() const { return _cp(); } AccessFlags access_flags() const { return _access_flags; } oop loader() const; - // Offset (in words) of field from start of instanceOop / klassOop + // Offset (in words) of field from start of instanceOop / Klass* int offset() const { return field()->offset(); } Symbol* generic_signature() const; int index() const { return _index; } - typeArrayOop annotations() const; + AnnotationArray* annotations() const; // Initial field value bool has_initial_value() const { return field()->initval_index() != 0; } @@ -113,7 +111,7 @@ } // Initialization - void initialize(klassOop k, int index); + void initialize(InstanceKlass* ik, int index); // Print void print() { print_on(tty); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/fprofiler.cpp --- a/src/share/vm/runtime/fprofiler.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/fprofiler.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -288,9 +288,9 @@ virtual bool is_runtime_stub() const{ return false; } virtual void oops_do(OopClosure* f) = 0; - virtual bool interpreted_match(methodOop m) const { return false; } - virtual bool compiled_match(methodOop m ) const { return false; } - virtual bool stub_match(methodOop m, const char* name) const { return false; } + virtual bool interpreted_match(Method* m) const { return false; } + virtual bool compiled_match(Method* m ) const { return false; } + virtual bool stub_match(Method* m, const char* name) const { return false; } virtual bool adapter_match() const { return false; } virtual bool runtimeStub_match(const CodeBlob* stub, const char* name) const { return false; } virtual bool unknown_compiled_match(const CodeBlob* cb) const { return false; } @@ -312,12 +312,12 @@ st->cr(); } - virtual methodOop method() = 0; + virtual Method* method() = 0; virtual void print_method_on(outputStream* st) { int limit; int i; - methodOop m = method(); + Method* m = method(); Symbol* k = m->klass_name(); // Print the class name with dots instead of slashes limit = k->utf8_length(); @@ -342,7 +342,7 @@ Symbol* sig = m->signature(); sig->print_symbol_on(st); } else if (MethodHandles::is_signature_polymorphic(m->intrinsic_id())) - // compare with methodOopDesc::print_short_name + // compare with Method::print_short_name MethodHandles::print_as_basic_type_signature_on(st, m->signature(), true); } @@ -356,7 +356,7 @@ } // for hashing into the table - static int hash(methodOop method) { + static int hash(Method* method) { // The point here is to try to make something fairly unique // out of the fields we can read without grabbing any locks // since the method may be locked when we need the hash. @@ -388,24 +388,26 @@ class interpretedNode : public ProfilerNode { private: - methodOop _method; + Method* _method; + oop _class_loader; // needed to keep metadata for the method alive public: - interpretedNode(methodOop method, TickPosition where) : ProfilerNode() { + interpretedNode(Method* method, TickPosition where) : ProfilerNode() { _method = method; + _class_loader = method->method_holder()->class_loader(); update(where); } bool is_interpreted() const { return true; } - bool interpreted_match(methodOop m) const { + bool interpreted_match(Method* m) const { return _method == m; } void oops_do(OopClosure* f) { - f->do_oop((oop*)&_method); + f->do_oop(&_class_loader); } - methodOop method() { return _method; } + Method* method() { return _method; } static void print_title(outputStream* st) { st->fill_to(col1); @@ -425,22 +427,24 @@ class compiledNode : public ProfilerNode { private: - methodOop _method; + Method* _method; + oop _class_loader; // needed to keep metadata for the method alive public: - compiledNode(methodOop method, TickPosition where) : ProfilerNode() { + compiledNode(Method* method, TickPosition where) : ProfilerNode() { _method = method; + _class_loader = method->method_holder()->class_loader(); update(where); } bool is_compiled() const { return true; } - bool compiled_match(methodOop m) const { + bool compiled_match(Method* m) const { return _method == m; } - methodOop method() { return _method; } + Method* method() { return _method; } void oops_do(OopClosure* f) { - f->do_oop((oop*)&_method); + f->do_oop(&_class_loader); } static void print_title(outputStream* st) { @@ -460,26 +464,28 @@ class stubNode : public ProfilerNode { private: - methodOop _method; + Method* _method; + oop _class_loader; // needed to keep metadata for the method alive const char* _symbol; // The name of the nearest VM symbol (for +ProfileVM). Points to a unique string public: - stubNode(methodOop method, const char* name, TickPosition where) : ProfilerNode() { + stubNode(Method* method, const char* name, TickPosition where) : ProfilerNode() { _method = method; + _class_loader = method->method_holder()->class_loader(); _symbol = name; update(where); } bool is_stub() const { return true; } - bool stub_match(methodOop m, const char* name) const { + void oops_do(OopClosure* f) { + f->do_oop(&_class_loader); + } + + bool stub_match(Method* m, const char* name) const { return (_method == m) && (_symbol == name); } - void oops_do(OopClosure* f) { - f->do_oop((oop*)&_method); - } - - methodOop method() { return _method; } + Method* method() { return _method; } static void print_title(outputStream* st) { st->fill_to(col1); @@ -512,7 +518,7 @@ bool adapter_match() const { return true; } - methodOop method() { return NULL; } + Method* method() { return NULL; } void oops_do(OopClosure* f) { ; @@ -545,7 +551,7 @@ (_symbol == name); } - methodOop method() { return NULL; } + Method* method() { return NULL; } static void print_title(outputStream* st) { st->fill_to(col1); @@ -593,7 +599,7 @@ return !strcmp(((SingletonBlob*)cb)->name(), _name); } - methodOop method() { return NULL; } + Method* method() { return NULL; } void oops_do(OopClosure* f) { ; @@ -627,7 +633,7 @@ bool vm_match(const char* name) const { return strcmp(name, _name) == 0; } - methodOop method() { return NULL; } + Method* method() { return NULL; } static int hash(const char* name){ // Compute a simple hash @@ -661,7 +667,7 @@ } }; -void ThreadProfiler::interpreted_update(methodOop method, TickPosition where) { +void ThreadProfiler::interpreted_update(Method* method, TickPosition where) { int index = entry(ProfilerNode::hash(method)); if (!table[index]) { table[index] = new (this) interpretedNode(method, where); @@ -678,7 +684,7 @@ } } -void ThreadProfiler::compiled_update(methodOop method, TickPosition where) { +void ThreadProfiler::compiled_update(Method* method, TickPosition where) { int index = entry(ProfilerNode::hash(method)); if (!table[index]) { table[index] = new (this) compiledNode(method, where); @@ -695,7 +701,7 @@ } } -void ThreadProfiler::stub_update(methodOop method, const char* name, TickPosition where) { +void ThreadProfiler::stub_update(Method* method, const char* name, TickPosition where) { int index = entry(ProfilerNode::hash(method)); if (!table[index]) { table[index] = new (this) stubNode(method, name, where); @@ -957,7 +963,7 @@ // The frame has been fully validated so we can trust the method and bci - methodOop method = *fr.interpreter_frame_method_addr(); + Method* method = *fr.interpreter_frame_method_addr(); interpreted_update(method, where); @@ -984,8 +990,8 @@ cb = fr.cb(); localwhere = tp_native; } - methodOop method = (cb->is_nmethod()) ? ((nmethod *)cb)->method() : - (methodOop)NULL; + Method* method = (cb->is_nmethod()) ? ((nmethod *)cb)->method() : + (Method*)NULL; if (method == NULL) { if (cb->is_runtime_stub()) diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/fprofiler.hpp --- a/src/share/vm/runtime/fprofiler.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/fprofiler.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -154,9 +154,9 @@ private: void record_interpreted_tick(JavaThread* thread, frame fr, TickPosition where, int* ticks); void record_compiled_tick (JavaThread* thread, frame fr, TickPosition where); - void interpreted_update(methodOop method, TickPosition where); - void compiled_update (methodOop method, TickPosition where); - void stub_update (methodOop method, const char* name, TickPosition where); + void interpreted_update(Method* method, TickPosition where); + void compiled_update (Method* method, TickPosition where); + void stub_update (Method* method, const char* name, TickPosition where); void adapter_update (TickPosition where); void runtime_stub_update(const CodeBlob* stub, const char* name, TickPosition where); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/frame.cpp --- a/src/share/vm/runtime/frame.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/frame.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -29,8 +29,8 @@ #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" #include "oops/markOop.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.inline2.hpp" #include "prims/methodHandles.hpp" @@ -383,15 +383,15 @@ *interpreter_frame_locals_addr() = locs; } -methodOop frame::interpreter_frame_method() const { +Method* frame::interpreter_frame_method() const { assert(is_interpreted_frame(), "interpreted frame expected"); - methodOop m = *interpreter_frame_method_addr(); - assert(m->is_perm(), "bad methodOop in interpreter frame"); - assert(m->is_method(), "not a methodOop"); + Method* m = *interpreter_frame_method_addr(); + assert(m->is_metadata(), "bad Method* in interpreter frame"); + assert(m->is_method(), "not a Method*"); return m; } -void frame::interpreter_frame_set_method(methodOop method) { +void frame::interpreter_frame_set_method(Method* method) { assert(is_interpreted_frame(), "interpreted frame expected"); *interpreter_frame_method_addr() = method; } @@ -410,7 +410,7 @@ if (!is_now_bci) { // The bcx was just converted from bci to bcp. // Convert the mdx in parallel. - methodDataOop mdo = interpreter_frame_method()->method_data(); + MethodData* mdo = interpreter_frame_method()->method_data(); assert(mdo != NULL, ""); int mdi = mdx - 1; // We distinguish valid mdi from zero by adding one. address mdp = mdo->di_to_dp(mdi); @@ -420,7 +420,7 @@ if (is_now_bci) { // The bcx was just converted from bcp to bci. // Convert the mdx in parallel. - methodDataOop mdo = interpreter_frame_method()->method_data(); + MethodData* mdo = interpreter_frame_method()->method_data(); assert(mdo != NULL, ""); int mdi = mdo->dp_to_di((address)mdx); interpreter_frame_set_mdx((intptr_t)mdi + 1); // distinguish valid from 0. @@ -691,7 +691,7 @@ void frame::print_on_error(outputStream* st, char* buf, int buflen, bool verbose) const { if (_cb != NULL) { if (Interpreter::contains(pc())) { - methodOop m = this->interpreter_frame_method(); + Method* m = this->interpreter_frame_method(); if (m != NULL) { m->name_and_sig_as_C_string(buf, buflen); st->print("j %s", buf); @@ -709,7 +709,7 @@ } else if (_cb->is_buffer_blob()) { st->print("v ~BufferBlob::%s", ((BufferBlob *)_cb)->name()); } else if (_cb->is_nmethod()) { - methodOop m = ((nmethod *)_cb)->method(); + Method* m = ((nmethod *)_cb)->method(); if (m != NULL) { m->name_and_sig_as_C_string(buf, buflen); st->print("J %s", buf); @@ -736,8 +736,8 @@ /* The interpreter_frame_expression_stack_at method in the case of SPARC needs the max_stack value of the method in order to compute the expression stack address. - It uses the methodOop in order to get the max_stack value but during GC this - methodOop value saved on the frame is changed by reverse_and_push and hence cannot + It uses the Method* in order to get the max_stack value but during GC this + Method* value saved on the frame is changed by reverse_and_push and hence cannot be used. So we save the max_stack value in the FrameClosure object and pass it down to the interpreter_frame_expression_stack_at method */ @@ -886,9 +886,12 @@ methodHandle m (thread, interpreter_frame_method()); jint bci = interpreter_frame_bci(); - assert(Universe::heap()->is_in(m()), "must be valid oop"); + assert(!Universe::heap()->is_in(m()), + "must be valid oop"); assert(m->is_method(), "checking frame value"); - assert((m->is_native() && bci == 0) || (!m->is_native() && bci >= 0 && bci < m->code_size()), "invalid bci value"); + assert((m->is_native() && bci == 0) || + (!m->is_native() && bci >= 0 && bci < m->code_size()), + "invalid bci value"); // Handle the monitor elements in the activation for ( @@ -903,23 +906,10 @@ } // process fixed part - f->do_oop((oop*)interpreter_frame_method_addr()); - f->do_oop((oop*)interpreter_frame_cache_addr()); - - // Hmm what about the mdp? -#ifdef CC_INTERP - // Interpreter frame in the midst of a call have a methodOop within the - // object. - interpreterState istate = get_interpreterState(); - if (istate->msg() == BytecodeInterpreter::call_method) { - f->do_oop((oop*)&istate->_result._to_call._callee); - } - -#endif /* CC_INTERP */ - #if !defined(PPC) || defined(ZERO) if (m->is_native()) { #ifdef CC_INTERP + interpreterState istate = get_interpreterState(); f->do_oop((oop*)&istate->_oop_temp); #else f->do_oop((oop*)( fp() + interpreter_frame_oop_temp_offset )); @@ -1148,9 +1138,19 @@ } +// call f() on the interpreted Method*s in the stack. +// Have to walk the entire code cache for the compiled frames Yuck. +void frame::metadata_do(void f(Metadata*)) { + if (_cb != NULL && Interpreter::contains(pc())) { + Method* m = this->interpreter_frame_method(); + assert(m != NULL, "huh?"); + f(m); + } +} + void frame::gc_prologue() { if (is_interpreted_frame()) { - // set bcx to bci to become methodOop position independent during GC + // set bcx to bci to become Method* position independent during GC interpreter_frame_set_bcx(interpreter_frame_bci()); } } @@ -1225,7 +1225,7 @@ void frame::zap_dead_interpreted_locals(JavaThread *thread, const RegisterMap* map) { // get current interpreter 'pc' assert(is_interpreted_frame(), "Not an interpreted frame"); - methodOop m = interpreter_frame_method(); + Method* m = interpreter_frame_method(); int bci = interpreter_frame_bci(); int max_locals = m->is_native() ? m->size_of_parameters() : m->max_locals(); @@ -1269,7 +1269,7 @@ void frame::verify(const RegisterMap* map) { // for now make sure receiver type is correct if (is_interpreted_frame()) { - methodOop method = interpreter_frame_method(); + Method* method = interpreter_frame_method(); guarantee(method->is_method(), "method is wrong in frame::verify"); if (!method->is_static()) { // fetch the receiver @@ -1334,7 +1334,7 @@ } if (is_interpreted_frame()) { - methodOop m = interpreter_frame_method(); + Method* m = interpreter_frame_method(); int bci = interpreter_frame_bci(); // Label the method and current bci diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/frame.hpp --- a/src/share/vm/runtime/frame.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/frame.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -26,7 +26,7 @@ #define SHARE_VM_RUNTIME_FRAME_HPP #include "asm/assembler.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "runtime/basicLock.hpp" #include "runtime/monitorChunk.hpp" #include "runtime/registerMap.hpp" @@ -197,7 +197,7 @@ oop* obj_at_addr(int offset) const { return (oop*) addr_at(offset); } - oop* adjusted_obj_at_addr(methodOop method, int index) { return obj_at_addr(adjust_offset(method, index)); } + oop* adjusted_obj_at_addr(Method* method, int index) { return obj_at_addr(adjust_offset(method, index)); } private: jint* int_at_addr(int offset) const { return (jint*) addr_at(offset); } @@ -343,10 +343,10 @@ public: // Method & constant pool cache - methodOop interpreter_frame_method() const; - void interpreter_frame_set_method(methodOop method); - methodOop* interpreter_frame_method_addr() const; - constantPoolCacheOop* interpreter_frame_cache_addr() const; + Method* interpreter_frame_method() const; + void interpreter_frame_set_method(Method* method); + Method** interpreter_frame_method_addr() const; + ConstantPoolCache** interpreter_frame_cache_addr() const; #ifdef PPC oop* interpreter_frame_mirror_addr() const; #endif @@ -422,12 +422,15 @@ void oops_do_internal(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache); void oops_entry_do(OopClosure* f, const RegisterMap* map); void oops_code_blob_do(OopClosure* f, CodeBlobClosure* cf, const RegisterMap* map); - int adjust_offset(methodOop method, int index); // helper for above fn + int adjust_offset(Method* method, int index); // helper for above fn public: // Memory management void oops_do(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map) { oops_do_internal(f, cf, map, true); } void nmethods_do(CodeBlobClosure* cf); + // RedefineClasses support for finding live interpreted methods on the stack + void metadata_do(void f(Metadata*)); + void gc_prologue(); void gc_epilogue(); void pd_gc_epilog(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/frame.inline.hpp --- a/src/share/vm/runtime/frame.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/frame.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ #include "interpreter/bytecodeInterpreter.hpp" #include "interpreter/bytecodeInterpreter.inline.hpp" #include "interpreter/interpreter.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "runtime/frame.hpp" #include "runtime/signature.hpp" #ifdef TARGET_ARCH_x86 @@ -58,7 +58,7 @@ // This file holds platform-independent bodies of inline functions for frames. // Note: The bcx usually contains the bcp; however during GC it contains the bci -// (changed by gc_prologue() and gc_epilogue()) to be methodOop position +// (changed by gc_prologue() and gc_epilogue()) to be Method* position // independent. These accessors make sure the correct value is returned // by testing the range of the bcx value. bcp's are guaranteed to be above // max_method_code_size, since methods are always allocated in OldSpace and diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/globals.hpp --- a/src/share/vm/runtime/globals.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/globals.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -175,8 +175,7 @@ define_pd_global(intx, ReservedCodeCacheSize, 32*M); define_pd_global(intx, CodeCacheExpansionSize, 32*K); define_pd_global(intx, CodeCacheMinBlockLength, 1); -define_pd_global(uintx,PermSize, ScaleForWordSize(4*M)); -define_pd_global(uintx,MaxPermSize, ScaleForWordSize(64*M)); +define_pd_global(uintx,MetaspaceSize, ScaleForWordSize(4*M)); define_pd_global(bool, NeverActAsServerClassMachine, true); define_pd_global(uint64_t,MaxRAM, 1ULL*G); #define CI_COMPILER_COUNT 0 @@ -439,7 +438,11 @@ #define RUNTIME_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, manageable, product_rw, lp64_product) \ \ lp64_product(bool, UseCompressedOops, false, \ - "Use 32-bit object references in 64-bit VM. " \ + "Use 32-bit object references in 64-bit VM " \ + "lp64_product means flag is always constant in 32 bit VM") \ + \ + lp64_product(bool, UseCompressedKlassPointers, false, \ + "Use 32-bit klass pointers in 64-bit VM " \ "lp64_product means flag is always constant in 32 bit VM") \ \ notproduct(bool, CheckCompressedOops, true, \ @@ -1188,11 +1191,6 @@ "Decay time (in milliseconds) to re-enable bulk rebiasing of a " \ "type after previous bulk rebias") \ \ - develop(bool, JavaObjectsInPerm, false, \ - "controls whether Classes and interned Strings are allocated" \ - "in perm. This purely intended to allow debugging issues" \ - "in production.") \ - \ /* tracing */ \ \ notproduct(bool, TraceRuntimeCalls, false, \ @@ -1677,9 +1675,6 @@ product(uintx, CMSConcMarkMultiple, 32, \ "Size (in cards) of CMS concurrent MT marking task") \ \ - product(uintx, CMSRevisitStackSize, 1*M, \ - "Size of CMS KlassKlass revisit stack") \ - \ product(bool, CMSAbortSemantics, false, \ "Whether abort-on-overflow semantics is implemented") \ \ @@ -1697,10 +1692,6 @@ product(bool, CMSConcurrentMTEnabled, true, \ "Whether multi-threaded concurrent work enabled (if ParNewGC)") \ \ - product(bool, CMSPermGenPrecleaningEnabled, true, \ - "Whether concurrent precleaning enabled in perm gen" \ - " (effective only when CMSPrecleaningEnabled is true)") \ - \ product(bool, CMSPrecleaningEnabled, true, \ "Whether concurrent precleaning enabled") \ \ @@ -1816,11 +1807,6 @@ "Percentage of MinHeapFreeRatio in CMS generation that is " \ "allocated before a CMS collection cycle commences") \ \ - product(intx, CMSTriggerPermRatio, 80, \ - "Percentage of MinHeapFreeRatio in the CMS perm generation that " \ - "is allocated before a CMS collection cycle commences, that " \ - "also collects the perm generation") \ - \ product(uintx, CMSBootstrapOccupancy, 50, \ "Percentage CMS generation occupancy at which to " \ "initiate CMS collection for bootstrapping collection stats") \ @@ -1836,11 +1822,6 @@ "not just one of the generations (e.g., G1). A value of 0 " \ "denotes 'do constant GC cycles'.") \ \ - product(intx, CMSInitiatingPermOccupancyFraction, -1, \ - "Percentage CMS perm generation occupancy to start a " \ - "CMScollection cycle. A negative value means that " \ - "CMSTriggerPermRatio is used") \ - \ product(bool, UseCMSInitiatingOccupancyOnly, false, \ "Only use occupancy as a crierion for starting a CMS collection") \ \ @@ -1900,6 +1881,29 @@ "Number of ObjArray elements to push onto the marking stack" \ "before pushing a continuation entry") \ \ + develop(bool, MetadataAllocationFailALot, false, \ + "Fail metadata allocations at intervals controlled by " \ + "MetadataAllocationFailALotInterval") \ + \ + develop(uintx, MetadataAllocationFailALotInterval, 1000, \ + "metadata allocation failure alot interval") \ + \ + develop(bool, MetaDataDeallocateALot, false, \ + "Deallocation bunches of metadata at intervals controlled by " \ + "MetaDataAllocateALotInterval") \ + \ + develop(uintx, MetaDataDeallocateALotInterval, 100, \ + "Metadata deallocation alot interval") \ + \ + develop(bool, TraceMetadataChunkAllocation, false, \ + "Trace humongous metadata allocations") \ + \ + product(bool, TraceMetadataHumongousAllocation, false, \ + "Trace humongous metadata allocations") \ + \ + develop(bool, TraceMetavirtualspaceAllocation, false, \ + "Trace humongous metadata allocations") \ + \ notproduct(bool, ExecuteInternalVMTests, false, \ "Enable execution of internal VM tests.") \ \ @@ -1920,9 +1924,6 @@ product(bool, TLABStats, true, \ "Print various TLAB related information") \ \ - product(bool, PrintRevisitStats, false, \ - "Print revisit (klass and MDO) stack related information") \ - \ EMBEDDED_ONLY(product(bool, LowMemoryProtection, true, \ "Enable LowMemoryProtection")) \ \ @@ -2023,12 +2024,6 @@ product(uintx, SurvivorPadding, 3, \ "How much buffer to keep for survivor overflow") \ \ - product(uintx, AdaptivePermSizeWeight, 20, \ - "Weight for perm gen exponential resizing, between 0 and 100") \ - \ - product(uintx, PermGenPadding, 3, \ - "How much buffer to keep for perm gen sizing") \ - \ product(uintx, ThresholdTolerance, 10, \ "Allowed collection cost difference between generations") \ \ @@ -2216,6 +2211,12 @@ product_rw(bool, TraceLoaderConstraints, false, \ "Trace loader constraints") \ \ + develop(bool, TraceClassLoaderData, false, \ + "Trace class loader loader_data lifetime") \ + \ + product(uintx, InitialBootClassLoaderMetaspaceSize, 3*M, \ + "Initial size of the boot class loader data metaspace") \ + \ product(bool, TraceGen0Time, false, \ "Trace accumulated time for Gen 0 collection") \ \ @@ -2986,11 +2987,15 @@ "Additional size added to desired new generation size per " \ "non-daemon thread (in bytes)") \ \ - product_pd(uintx, PermSize, \ - "Initial size of permanent generation (in bytes)") \ - \ - product_pd(uintx, MaxPermSize, \ - "Maximum size of permanent generation (in bytes)") \ + product_pd(uintx, MetaspaceSize, \ + "Initial size of Metaspaces (in bytes)") \ + \ + product(uintx, MaxMetaspaceSize, max_uintx, \ + "Maximum size of Metaspaces (in bytes)") \ + \ + product(uintx, ClassMetaspaceSize, NOT_LP64(1*M) LP64_ONLY(512*M), \ + "Maximum size of InstanceKlass area in Metaspace used for " \ + "UseCompressedKlassPointers") \ \ product(uintx, MinHeapFreeRatio, 40, \ "Min percentage of heap free after GC to avoid expansion") \ @@ -3004,10 +3009,10 @@ product(uintx, MinHeapDeltaBytes, ScaleForWordSize(128*K), \ "Min change in heap space due to GC (in bytes)") \ \ - product(uintx, MinPermHeapExpansion, ScaleForWordSize(256*K), \ + product(uintx, MinMetaspaceExpansion, ScaleForWordSize(256*K), \ "Min expansion of permanent heap (in bytes)") \ \ - product(uintx, MaxPermHeapExpansion, ScaleForWordSize(4*M), \ + product(uintx, MaxMetaspaceExpansion, ScaleForWordSize(4*M), \ "Max expansion of permanent heap without full GC (in bytes)") \ \ product(intx, QueuedAllocationWarningCount, 0, \ @@ -3038,10 +3043,6 @@ "either completely full or completely empty. Par compact also" \ "has a smaller default value; see arguments.cpp.") \ \ - product(uintx, PermMarkSweepDeadRatio, 20, \ - "Percentage (0-100) of the perm gen allowed as dead wood." \ - "See MarkSweepDeadRatio for collector-specific comments.") \ - \ product(intx, MarkSweepAlwaysCompactCount, 4, \ "How often should we fully compact the heap (ignoring the dead " \ "space parameters)") \ @@ -3523,29 +3524,20 @@ product(bool, PrintSharedSpaces, false, \ "Print usage of shared spaces") \ \ - product(uintx, SharedDummyBlockSize, 512*M, \ - "Size of dummy block used to shift heap addresses (in bytes)") \ - \ - product(uintx, SharedReadWriteSize, NOT_LP64(12*M) LP64_ONLY(13*M), \ + product(uintx, SharedReadWriteSize, NOT_LP64(12*M) LP64_ONLY(16*M), \ "Size of read-write space in permanent generation (in bytes)") \ \ - product(uintx, SharedReadOnlySize, 10*M, \ + product(uintx, SharedReadOnlySize, NOT_LP64(12*M) LP64_ONLY(16*M), \ "Size of read-only space in permanent generation (in bytes)") \ \ - product(uintx, SharedMiscDataSize, NOT_LP64(4*M) LP64_ONLY(5*M) NOT_PRODUCT(+1*M), \ + product(uintx, SharedMiscDataSize, NOT_LP64(2*M) LP64_ONLY(4*M), \ "Size of the shared data area adjacent to the heap (in bytes)") \ \ - product(uintx, SharedMiscCodeSize, 4*M, \ + product(uintx, SharedMiscCodeSize, 120*K, \ "Size of the shared code area adjacent to the heap (in bytes)") \ \ - diagnostic(bool, SharedOptimizeColdStart, true, \ - "At dump time, order shared objects to achieve better " \ - "cold startup time.") \ - \ - develop(intx, SharedOptimizeColdStartPolicy, 2, \ - "Reordering policy for SharedOptimizeColdStart " \ - "0=favor classload-time locality, 1=balanced, " \ - "2=favor runtime locality") \ + product(uintx, SharedDummyBlockSize, 0, \ + "Size of dummy block used to shift heap addresses (in bytes)") \ \ diagnostic(bool, SharedSkipVerify, false, \ "Skip assert() and verify() which page-in unwanted shared " \ diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/handles.cpp --- a/src/share/vm/runtime/handles.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/handles.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,6 +24,7 @@ #include "precompiled.hpp" #include "memory/allocation.inline.hpp" +#include "oops/constantPool.hpp" #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" #ifdef TARGET_OS_FAMILY_linux @@ -70,8 +71,10 @@ // during GC phase 3, a handle may be a forward pointer that // is not yet valid, so loosen the assertion while (bottom < top) { -// assert((*bottom)->is_oop(), "handle should point to oop"); - assert(Universe::heap()->is_in(*bottom), "handle should be valid heap address"); + // This test can be moved up but for now check every oop. + + assert((*bottom)->is_oop(), "handle should point to oop"); + f->do_oop(bottom++); } return handles_visited; @@ -148,6 +151,8 @@ // Note: _nof_handlemarks is only set in debug mode warning("%d: Allocated in HandleMark : %d", _nof_handlemarks, handles); } + + tty->print_cr("Handles %d", handles); } #endif diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/handles.hpp --- a/src/share/vm/runtime/handles.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/handles.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,6 @@ #define SHARE_VM_RUNTIME_HANDLES_HPP #include "oops/klass.hpp" -#include "oops/klassOop.hpp" -#include "utilities/top.hpp" //------------------------------------------------------------------------------------------------------------------------ // In order to preserve oops during garbage collection, they should be @@ -56,17 +54,8 @@ // there is a corresponding handle called xxxHandle, e.g. // // oop Handle -// methodOop methodHandle +// Method* methodHandle // instanceOop instanceHandle -// -// For klassOops, it is often useful to model the Klass hierarchy in order -// to get access to the klass_part without casting. For each xxxKlass there -// is a corresponding handle called xxxKlassHandle, e.g. -// -// klassOop Klass KlassHandle -// klassOop methodKlass methodKlassHandle -// klassOop instanceKlass instanceKlassHandle -// //------------------------------------------------------------------------------------------------------------------------ // Base class for all handles. Provides overloading of frequently @@ -84,12 +73,7 @@ // Constructors Handle() { _handle = NULL; } Handle(oop obj); -#ifndef ASSERT Handle(Thread* thread, oop obj); -#else - // Don't inline body with assert for current thread - Handle(Thread* thread, oop obj); -#endif // ASSERT // General access oop operator () () const { return obj(); } @@ -115,53 +99,8 @@ static oop raw_resolve(oop *handle) { return handle == NULL ? (oop)NULL : *handle; } }; - -//------------------------------------------------------------------------------------------------------------------------ -// Base class for Handles containing klassOops. Provides overloading of frequently -// used operators for ease of use and typed access to the Klass part. -class KlassHandle: public Handle { - protected: - klassOop obj() const { return (klassOop)Handle::obj(); } - klassOop non_null_obj() const { return (klassOop)Handle::non_null_obj(); } - Klass* as_klass() const { return non_null_obj()->klass_part(); } - - public: - // Constructors - KlassHandle () : Handle() {} - KlassHandle (oop obj) : Handle(obj) { - assert(SharedSkipVerify || is_null() || obj->is_klass(), "not a klassOop"); - } - KlassHandle (Klass* kl) : Handle(kl ? kl->as_klassOop() : (klassOop)NULL) { - assert(SharedSkipVerify || is_null() || obj()->is_klass(), "not a klassOop"); - } - - // Faster versions passing Thread - KlassHandle (Thread* thread, oop obj) : Handle(thread, obj) { - assert(SharedSkipVerify || is_null() || obj->is_klass(), "not a klassOop"); - } - KlassHandle (Thread *thread, Klass* kl) - : Handle(thread, kl ? kl->as_klassOop() : (klassOop)NULL) { - assert(is_null() || obj()->is_klass(), "not a klassOop"); - } - - // Direct interface, use very sparingly. - // Used by SystemDictionaryHandles to create handles on existing WKKs. - // The obj of such a klass handle may be null, because the handle is formed - // during system bootstrapping. - KlassHandle(klassOop *handle, bool dummy) : Handle((oop*)handle, dummy) { - assert(SharedSkipVerify || is_null() || obj() == NULL || obj()->is_klass(), "not a klassOop"); - } - - // General access - klassOop operator () () const { return obj(); } - Klass* operator -> () const { return as_klass(); } -}; - - -//------------------------------------------------------------------------------------------------------------------------ // Specific Handles for different oop types #define DEF_HANDLE(type, is_a) \ - class type##Handle; \ class type##Handle: public Handle { \ protected: \ type##Oop obj() const { return (type##Oop)Handle::obj(); } \ @@ -178,9 +117,6 @@ assert(SharedSkipVerify || is_null() || ((oop)obj)->is_a(), "illegal type"); \ } \ \ - /* Special constructor, use sparingly */ \ - type##Handle (type##Oop *handle, bool dummy) : Handle((oop*)handle, dummy) {} \ - \ /* Operators for ease of use */ \ type##Oop operator () () const { return obj(); } \ type##Oop operator -> () const { return non_null_obj(); } \ @@ -188,52 +124,94 @@ DEF_HANDLE(instance , is_instance ) -DEF_HANDLE(method , is_method ) -DEF_HANDLE(constMethod , is_constMethod ) -DEF_HANDLE(methodData , is_methodData ) DEF_HANDLE(array , is_array ) -DEF_HANDLE(constantPool , is_constantPool ) -DEF_HANDLE(constantPoolCache, is_constantPoolCache) DEF_HANDLE(objArray , is_objArray ) DEF_HANDLE(typeArray , is_typeArray ) //------------------------------------------------------------------------------------------------------------------------ -// Specific KlassHandles for different Klass types + +// Metadata Handles. Unlike oop Handles these are needed to prevent metadata +// from being reclaimed by RedefineClasses. -#define DEF_KLASS_HANDLE(type, is_a) \ - class type##Handle : public KlassHandle { \ +// Specific Handles for different oop types +#define DEF_METADATA_HANDLE(name, type) \ + class name##Handle; \ + class name##Handle { \ + type* _value; \ + Thread* _thread; \ + protected: \ + type* obj() const { return _value; } \ + type* non_null_obj() const { assert(_value != NULL, "resolving NULL _value"); return _value; } \ + \ public: \ /* Constructors */ \ - type##Handle () : KlassHandle() {} \ - type##Handle (klassOop obj) : KlassHandle(obj) { \ - assert(SharedSkipVerify || is_null() || obj->klass_part()->is_a(), \ - "illegal type"); \ - } \ - type##Handle (Thread* thread, klassOop obj) : KlassHandle(thread, obj) { \ - assert(SharedSkipVerify || is_null() || obj->klass_part()->is_a(), \ - "illegal type"); \ - } \ + name##Handle () : _value(NULL), _thread(NULL) {} \ + name##Handle (type* obj); \ + name##Handle (Thread* thread, type* obj); \ + \ + name##Handle (const name##Handle &h); \ + name##Handle& operator=(const name##Handle &s); \ + \ + /* Destructor */ \ + ~name##Handle (); \ + void remove(); \ \ - /* Access to klass part */ \ - type* operator -> () const { return (type*)obj()->klass_part(); } \ + /* Operators for ease of use */ \ + type* operator () () const { return obj(); } \ + type* operator -> () const { return non_null_obj(); } \ \ - static type##Handle cast(KlassHandle h) { return type##Handle(h()); } \ + bool operator == (type* o) const { return obj() == o; } \ + bool operator == (const name##Handle& h) const { return obj() == h.obj(); } \ \ + /* Null checks */ \ + bool is_null() const { return _value == NULL; } \ + bool not_null() const { return _value != NULL; } \ }; -DEF_KLASS_HANDLE(instanceKlass , oop_is_instance_slow ) -DEF_KLASS_HANDLE(methodKlass , oop_is_method ) -DEF_KLASS_HANDLE(constMethodKlass , oop_is_constMethod ) -DEF_KLASS_HANDLE(klassKlass , oop_is_klass ) -DEF_KLASS_HANDLE(arrayKlassKlass , oop_is_arrayKlass ) -DEF_KLASS_HANDLE(objArrayKlassKlass , oop_is_objArrayKlass ) -DEF_KLASS_HANDLE(typeArrayKlassKlass , oop_is_typeArrayKlass) -DEF_KLASS_HANDLE(arrayKlass , oop_is_array ) -DEF_KLASS_HANDLE(typeArrayKlass , oop_is_typeArray_slow) -DEF_KLASS_HANDLE(objArrayKlass , oop_is_objArray_slow ) -DEF_KLASS_HANDLE(constantPoolKlass , oop_is_constantPool ) -DEF_KLASS_HANDLE(constantPoolCacheKlass, oop_is_constantPool ) +DEF_METADATA_HANDLE(method, Method) +DEF_METADATA_HANDLE(constantPool, ConstantPool) + +// Writing this class explicitly, since DEF_METADATA_HANDLE(klass) doesn't +// provide the necessary Klass* <-> Klass* conversions. This Klass +// could be removed when we don't have the Klass* typedef anymore. +class KlassHandle { + Klass* _value; + protected: + Klass* obj() const { return _value; } + Klass* non_null_obj() const { assert(_value != NULL, "resolving NULL _value"); return _value; } + + public: + KlassHandle() : _value(NULL) {} + KlassHandle(const Klass* obj) : _value(const_cast(obj)) {}; + KlassHandle(Thread* thread, const Klass* obj) : _value(const_cast(obj)) {}; + + Klass* operator () () const { return obj(); } + Klass* operator -> () const { return non_null_obj(); } + + bool operator == (Klass* o) const { return obj() == o; } + bool operator == (const KlassHandle& h) const { return obj() == h.obj(); } + + bool is_null() const { return _value == NULL; } + bool not_null() const { return _value != NULL; } +}; + +class instanceKlassHandle : public KlassHandle { + public: + /* Constructors */ + instanceKlassHandle () : KlassHandle() {} + instanceKlassHandle (const Klass* k) : KlassHandle(k) { + assert(SharedSkipVerify || k == NULL || k->oop_is_instance(), + "illegal type"); + } + instanceKlassHandle (Thread* thread, const Klass* k) : KlassHandle(thread, k) { + assert(SharedSkipVerify || k == NULL || k->oop_is_instance(), + "illegal type"); + } + /* Access to klass part */ + InstanceKlass* operator () () const { return (InstanceKlass*)obj(); } + InstanceKlass* operator -> () const { return (InstanceKlass*)obj(); } +}; //------------------------------------------------------------------------------------------------------------------------ diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/handles.inline.hpp --- a/src/share/vm/runtime/handles.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/handles.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -62,6 +62,63 @@ } #endif // ASSERT +// Constructors for metadata handles +#define DEF_METADATA_HANDLE_FN(name, type) \ +inline name##Handle::name##Handle(type* obj) : _value(obj), _thread(NULL) { \ + if (obj != NULL) { \ + assert(((Metadata*)obj)->is_valid(), "obj is valid"); \ + _thread = Thread::current(); \ + assert (_thread->is_in_stack((address)this), "not on stack?"); \ + _thread->metadata_handles()->push((Metadata*)obj); \ + } \ +} \ +inline name##Handle::name##Handle(Thread* thread, type* obj) : _value(obj), _thread(thread) { \ + if (obj != NULL) { \ + assert(((Metadata*)obj)->is_valid(), "obj is valid"); \ + assert(_thread == Thread::current(), "thread must be current"); \ + assert (_thread->is_in_stack((address)this), "not on stack?"); \ + _thread->metadata_handles()->push((Metadata*)obj); \ + } \ +} \ +inline name##Handle::name##Handle(const name##Handle &h) { \ + _value = h._value; \ + if (_value != NULL) { \ + assert(_value->is_valid(), "obj is valid"); \ + if (h._thread != NULL) { \ + assert(h._thread == Thread::current(), "thread must be current");\ + _thread = h._thread; \ + } else { \ + _thread = Thread::current(); \ + } \ + _thread->metadata_handles()->push((Metadata*)_value); \ + } \ +} \ +inline name##Handle& name##Handle::operator=(const name##Handle &s) { \ + remove(); \ + _value = s._value; \ + if (_value != NULL) { \ + assert(_value->is_valid(), "obj is valid"); \ + if (s._thread != NULL) { \ + assert(s._thread == Thread::current(), "thread must be current");\ + _thread = s._thread; \ + } else { \ + _thread = Thread::current(); \ + } \ + _thread->metadata_handles()->push((Metadata*)_value); \ + } \ + return *this; \ +} \ +inline void name##Handle::remove() { \ + if (_value != NULL) { \ + int i = _thread->metadata_handles()->find_from_end((Metadata*)_value); \ + assert(i!=-1, "not in metadata_handles list"); \ + _thread->metadata_handles()->remove_at(i); \ + } \ +} \ +inline name##Handle::~name##Handle () { remove(); } \ + +DEF_METADATA_HANDLE_FN(method, Method) +DEF_METADATA_HANDLE_FN(constantPool, ConstantPool) inline HandleMark::HandleMark() { initialize(Thread::current()); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/init.cpp --- a/src/share/vm/runtime/init.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/init.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -94,12 +94,13 @@ management_init(); bytecodes_init(); classLoader_init(); + Metaspace::global_initialize(); // must be before codeCache codeCache_init(); VM_Version_init(); os_init_globals(); stubRoutines_init1(); jint status = universe_init(); // dependent on codeCache_init and - // stubRoutines_init1 + // stubRoutines_init1 and metaspace_init. if (status != JNI_OK) return status; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/java.cpp --- a/src/share/vm/runtime/java.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/java.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,12 +33,11 @@ #include "memory/genCollectedHeap.hpp" #include "memory/oopFactory.hpp" #include "memory/universe.hpp" -#include "oops/constantPoolOop.hpp" +#include "oops/constantPool.hpp" #include "oops/generateOopMap.hpp" #include "oops/instanceKlass.hpp" -#include "oops/instanceKlassKlass.hpp" #include "oops/instanceOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "oops/symbol.hpp" @@ -115,19 +114,23 @@ // Statistics printing (method invocation histogram) -GrowableArray* collected_invoked_methods; +GrowableArray* collected_invoked_methods; -void collect_invoked_methods(methodOop m) { +void collect_invoked_methods(Method* m) { if (m->invocation_count() + m->compiled_invocation_count() >= 1 ) { collected_invoked_methods->push(m); } } -GrowableArray* collected_profiled_methods; +GrowableArray* collected_profiled_methods; -void collect_profiled_methods(methodOop m) { - methodHandle mh(Thread::current(), m); +void collect_profiled_methods(Method* m) { + Thread* thread = Thread::current(); + // This HandleMark prevents a huge amount of handles from being added + // to the metadata_handles() array on the thread. + HandleMark hm(thread); + methodHandle mh(thread, m); if ((m->method_data() != NULL) && (PrintMethodData || CompilerOracle::should_print(mh))) { collected_profiled_methods->push(m); @@ -135,7 +138,7 @@ } -int compare_methods(methodOop* a, methodOop* b) { +int compare_methods(Method** a, Method** b) { // %%% there can be 32-bit overflow here return ((*b)->invocation_count() + (*b)->compiled_invocation_count()) - ((*a)->invocation_count() + (*a)->compiled_invocation_count()); @@ -145,7 +148,7 @@ void print_method_invocation_histogram() { ResourceMark rm; HandleMark hm; - collected_invoked_methods = new GrowableArray(1024); + collected_invoked_methods = new GrowableArray(1024); SystemDictionary::methods_do(collect_invoked_methods); collected_invoked_methods->sort(&compare_methods); // @@ -156,7 +159,7 @@ unsigned total = 0, int_total = 0, comp_total = 0, static_total = 0, final_total = 0, synch_total = 0, nativ_total = 0, acces_total = 0; for (int index = 0; index < collected_invoked_methods->length(); index++) { - methodOop m = collected_invoked_methods->at(index); + Method* m = collected_invoked_methods->at(index); int c = m->invocation_count() + m->compiled_invocation_count(); if (c >= MethodHistogramCutoff) m->print_invocation_count(); int_total += m->invocation_count(); @@ -185,14 +188,14 @@ void print_method_profiling_data() { ResourceMark rm; HandleMark hm; - collected_profiled_methods = new GrowableArray(1024); + collected_profiled_methods = new GrowableArray(1024); SystemDictionary::methods_do(collect_profiled_methods); collected_profiled_methods->sort(&compare_methods); int count = collected_profiled_methods->length(); if (count > 0) { for (int index = 0; index < count; index++) { - methodOop m = collected_profiled_methods->at(index); + Method* m = collected_profiled_methods->at(index); ttyLocker ttyl; tty->print_cr("------------------------------------------------------------------------"); //m->print_name(tty); @@ -485,6 +488,9 @@ if (PrintGCDetails) { Universe::print(); AdaptiveSizePolicyOutput(0); + if (Verbose) { + ClassLoaderDataGraph::dump_on(gclog_or_tty); + } } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/javaCalls.cpp --- a/src/share/vm/runtime/javaCalls.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/javaCalls.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -89,7 +89,6 @@ _receiver = receiver(); #ifdef CHECK_UNHANDLED_OOPS - THREAD->allow_unhandled_oop(&_callee_method); THREAD->allow_unhandled_oop(&_receiver); #endif // CHECK_UNHANDLED_OOPS @@ -154,7 +153,6 @@ void JavaCallWrapper::oops_do(OopClosure* f) { - f->do_oop((oop*)&_callee_method); f->do_oop((oop*)&_receiver); handles()->oops_do(f); } @@ -191,7 +189,7 @@ assert(method->name() == vmSymbols::object_initializer_name(), "Should only be called for default constructor"); assert(method->signature() == vmSymbols::void_method_signature(), "Should only be called for default constructor"); - instanceKlass* ik = instanceKlass::cast(method->method_holder()); + InstanceKlass* ik = InstanceKlass::cast(method->method_holder()); if (ik->is_initialized() && ik->has_vanilla_constructor()) { // safe to skip constructor call } else { @@ -206,7 +204,7 @@ void JavaCalls::call_virtual(JavaValue* result, KlassHandle spec_klass, Symbol* name, Symbol* signature, JavaCallArguments* args, TRAPS) { CallInfo callinfo; Handle receiver = args->receiver(); - KlassHandle recvrKlass(THREAD, receiver.is_null() ? (klassOop)NULL : receiver->klass()); + KlassHandle recvrKlass(THREAD, receiver.is_null() ? (Klass*)NULL : receiver->klass()); LinkResolver::resolve_virtual_call( callinfo, receiver, recvrKlass, spec_klass, name, signature, KlassHandle(), false, true, CHECK); @@ -346,11 +344,11 @@ #ifdef ASSERT - { klassOop holder = method->method_holder(); + { Klass* holder = method->method_holder(); // A klass might not be initialized since JavaCall's might be used during the executing of // the . For example, a Thread.start might start executing on an object that is // not fully initialized! (bad Java programming style) - assert(instanceKlass::cast(holder)->is_linked(), "rewritting must have taken place"); + assert(InstanceKlass::cast(holder)->is_linked(), "rewritting must have taken place"); } #endif diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/javaCalls.hpp --- a/src/share/vm/runtime/javaCalls.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/javaCalls.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ #define SHARE_VM_RUNTIME_JAVACALLS_HPP #include "memory/allocation.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "runtime/handles.hpp" #include "runtime/javaFrameAnchor.hpp" #include "runtime/vmThread.hpp" @@ -67,7 +67,7 @@ private: JavaThread* _thread; // the thread to which this call belongs JNIHandleBlock* _handles; // the saved handle block - methodOop _callee_method; // to be able to collect arguments if entry frame is top frame + Method* _callee_method; // to be able to collect arguments if entry frame is top frame oop _receiver; // the receiver of the call (if a non-static call) JavaFrameAnchor _anchor; // last thread anchor state that we must restore @@ -87,7 +87,7 @@ JavaValue* result() const { return _result; } // GC support - methodOop callee_method() { return _callee_method; } + Method* callee_method() { return _callee_method; } oop receiver() { return _receiver; } void oops_do(OopClosure* f); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/jfieldIDWorkaround.hpp --- a/src/share/vm/runtime/jfieldIDWorkaround.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/jfieldIDWorkaround.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -91,14 +91,14 @@ } return (intptr_t)result; } - static intptr_t encode_klass_hash(klassOop k, intptr_t offset); - static bool klass_hash_ok(klassOop k, jfieldID id); - static void verify_instance_jfieldID(klassOop k, jfieldID id); + static intptr_t encode_klass_hash(Klass* k, intptr_t offset); + static bool klass_hash_ok(Klass* k, jfieldID id); + static void verify_instance_jfieldID(Klass* k, jfieldID id); public: - static bool is_valid_jfieldID(klassOop k, jfieldID id); + static bool is_valid_jfieldID(Klass* k, jfieldID id); - static bool is_instance_jfieldID(klassOop k, jfieldID id) { + static bool is_instance_jfieldID(Klass* k, jfieldID id) { uintptr_t as_uint = (uintptr_t) id; return ((as_uint & instance_mask_in_place) != 0); } @@ -107,7 +107,7 @@ return ((as_uint & instance_mask_in_place) == 0); } - static jfieldID to_instance_jfieldID(klassOop k, int offset) { + static jfieldID to_instance_jfieldID(Klass* k, int offset) { intptr_t as_uint = ((offset & large_offset_mask) << offset_shift) | instance_mask_in_place; if (VerifyJNIFields) { as_uint |= encode_klass_hash(k, offset); @@ -124,7 +124,7 @@ return result; } - static intptr_t from_instance_jfieldID(klassOop k, jfieldID id) { + static intptr_t from_instance_jfieldID(Klass* k, jfieldID id) { #ifndef ASSERT // always verify in debug mode; switchable in anything else if (VerifyJNIFields) diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/jniHandles.cpp --- a/src/share/vm/runtime/jniHandles.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/jniHandles.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -111,19 +111,6 @@ return res; } -jmethodID JNIHandles::make_jmethod_id(methodHandle mh) { - return (jmethodID) make_weak_global(mh); -} - - - -void JNIHandles::change_method_associated_with_jmethod_id(jmethodID jmid, methodHandle mh) { - MutexLocker ml(JNIGlobalHandle_lock); // Is this necessary? - Handle obj = (Handle)mh; - oop* jobj = (oop*)jmid; - *jobj = obj(); -} - void JNIHandles::destroy_global(jobject handle) { if (handle != NULL) { @@ -140,10 +127,6 @@ } } -void JNIHandles::destroy_jmethod_id(jmethodID mid) { - destroy_weak_global((jobject)mid); -} - void JNIHandles::oops_do(OopClosure* f) { f->do_oop(&_deleted_handle); @@ -162,8 +145,8 @@ EXCEPTION_MARK; // We will never reach the CATCH below since Exceptions::_throw will cause // the VM to exit if an exception is thrown during initialization - klassOop k = SystemDictionary::Object_klass(); - _deleted_handle = instanceKlass::cast(k)->allocate_permanent_instance(CATCH); + Klass* k = SystemDictionary::Object_klass(); + _deleted_handle = InstanceKlass::cast(k)->allocate_instance(CATCH); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/jniHandles.hpp --- a/src/share/vm/runtime/jniHandles.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/jniHandles.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -62,23 +62,6 @@ static jobject make_weak_global(Handle obj); static void destroy_weak_global(jobject handle); - // jmethodID handling (as Weak global handles). - // Because the useful life-span of a jmethodID cannot be determined, once created they are - // never reclaimed. The methods to which they refer, however, can be GC'ed away if the class - // is unloaded or if the method is made obsolete or deleted -- in these cases, the jmethodID - // refers to NULL (as is the case for any weak reference). - static jmethodID make_jmethod_id(methodHandle mh); - static void destroy_jmethod_id(jmethodID mid); - // Use resolve_jmethod_id() in situations where the caller is expected - // to provide a valid jmethodID; the only sanity checks are in asserts; - // result guaranteed not to be NULL. - inline static methodOop resolve_jmethod_id(jmethodID mid); - // Use checked_resolve_jmethod_id() in situations where the caller - // should provide a valid jmethodID, but might not. NULL is returned - // when the jmethodID does not refer to a valid method. - inline static methodOop checked_resolve_jmethod_id(jmethodID mid); - static void change_method_associated_with_jmethod_id(jmethodID jmid, methodHandle mh); - // Sentinel marking deleted handles in block. Note that we cannot store NULL as // the sentinel, since clearing weak global JNI refs are done by storing NULL in // the handle. The handle may not be reused before destroy_weak_global is called. @@ -207,20 +190,6 @@ return result; }; -inline methodOop JNIHandles::resolve_jmethod_id(jmethodID mid) { - return (methodOop) resolve_non_null((jobject)mid); -}; - -inline methodOop JNIHandles::checked_resolve_jmethod_id(jmethodID mid) { - oop o = resolve_external_guard((jobject) mid); - if (o == NULL || !o->is_method()) { - return (methodOop) NULL; - } - - return (methodOop) o; -}; - - inline void JNIHandles::destroy_local(jobject handle) { if (handle != NULL) { *((oop*)handle) = deleted_handle(); // Mark the handle as deleted, allocate will reuse it diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/memprofiler.cpp --- a/src/share/vm/runtime/memprofiler.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/memprofiler.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,6 @@ #include "gc_interface/collectedHeap.inline.hpp" #include "interpreter/oopMapCache.hpp" #include "memory/generation.hpp" -#include "memory/permGen.hpp" #include "memory/resourceArea.hpp" #include "runtime/handles.inline.hpp" #include "runtime/jniHandles.hpp" @@ -129,15 +128,12 @@ } // Print trace line in log - fprintf(_log_fp, "%6.1f,%5d,%5d," UINTX_FORMAT_W(6) "," UINTX_FORMAT_W(6) "," - UINTX_FORMAT_W(6) "," UINTX_FORMAT_W(6) ",", + fprintf(_log_fp, "%6.1f,%5d,%5d," UINTX_FORMAT_W(6) "," UINTX_FORMAT_W(6) ",", os::elapsedTime(), Threads::number_of_threads(), SystemDictionary::number_of_classes(), Universe::heap()->used() / K, - Universe::heap()->capacity() / K, - Universe::heap()->permanent_used() / HWperKB, - Universe::heap()->permanent_capacity() / HWperKB); + Universe::heap()->capacity() / K); fprintf(_log_fp, UINTX_FORMAT_W(6) ",", CodeCache::capacity() / K); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/mutexLocker.cpp --- a/src/share/vm/runtime/mutexLocker.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/mutexLocker.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -225,7 +225,7 @@ def(ExpandHeap_lock , Mutex , leaf, true ); // Used during compilation by VM thread def(JNIHandleBlockFreeList_lock , Mutex , leaf, true ); // handles are used by VM thread def(SignatureHandlerLibrary_lock , Mutex , leaf, false); - def(SymbolTable_lock , Mutex , leaf, true ); + def(SymbolTable_lock , Mutex , leaf+2, true ); def(StringTable_lock , Mutex , leaf, true ); def(ProfilePrint_lock , Mutex , leaf, false); // serial profile printing def(ExceptionCache_lock , Mutex , leaf, false); // serial profile printing diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/objectMonitor.cpp --- a/src/share/vm/runtime/objectMonitor.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/objectMonitor.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,11 +69,11 @@ // TODO-FIXME: probes should not fire when caller is _blocked. assert() accordingly. -#define DTRACE_MONITOR_PROBE_COMMON(klassOop, thread) \ +#define DTRACE_MONITOR_PROBE_COMMON(obj, thread) \ char* bytes = NULL; \ int len = 0; \ jlong jtid = SharedRuntime::get_java_tid(thread); \ - Symbol* klassname = ((oop)(klassOop))->klass()->klass_part()->name(); \ + Symbol* klassname = ((oop)obj)->klass()->name(); \ if (klassname != NULL) { \ bytes = (char*)klassname->bytes(); \ len = klassname->utf8_length(); \ @@ -92,19 +92,19 @@ HS_DTRACE_PROBE_DECL4(hotspot, monitor__contended__exit, jlong, uintptr_t, char*, int); -#define DTRACE_MONITOR_WAIT_PROBE(monitor, klassOop, thread, millis) \ +#define DTRACE_MONITOR_WAIT_PROBE(monitor, obj, thread, millis) \ { \ if (DTraceMonitorProbes) { \ - DTRACE_MONITOR_PROBE_COMMON(klassOop, thread); \ + DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ HS_DTRACE_PROBE5(hotspot, monitor__wait, jtid, \ (monitor), bytes, len, (millis)); \ } \ } -#define DTRACE_MONITOR_PROBE(probe, monitor, klassOop, thread) \ +#define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread) \ { \ if (DTraceMonitorProbes) { \ - DTRACE_MONITOR_PROBE_COMMON(klassOop, thread); \ + DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ HS_DTRACE_PROBE4(hotspot, monitor__##probe, jtid, \ (uintptr_t)(monitor), bytes, len); \ } \ @@ -112,10 +112,10 @@ #else /* USDT2 */ -#define DTRACE_MONITOR_WAIT_PROBE(monitor, klassOop, thread, millis) \ +#define DTRACE_MONITOR_WAIT_PROBE(monitor, obj, thread, millis) \ { \ if (DTraceMonitorProbes) { \ - DTRACE_MONITOR_PROBE_COMMON(klassOop, thread); \ + DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ HOTSPOT_MONITOR_WAIT(jtid, \ (monitor), bytes, len, (millis)); \ } \ @@ -127,10 +127,10 @@ #define HOTSPOT_MONITOR_notify HOTSPOT_MONITOR_NOTIFY #define HOTSPOT_MONITOR_notifyAll HOTSPOT_MONITOR_NOTIFYALL -#define DTRACE_MONITOR_PROBE(probe, monitor, klassOop, thread) \ +#define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread) \ { \ if (DTraceMonitorProbes) { \ - DTRACE_MONITOR_PROBE_COMMON(klassOop, thread); \ + DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ HOTSPOT_MONITOR_##probe(jtid, \ (uintptr_t)(monitor), bytes, len); \ } \ @@ -139,8 +139,8 @@ #endif /* USDT2 */ #else // ndef DTRACE_ENABLED -#define DTRACE_MONITOR_WAIT_PROBE(klassOop, thread, millis, mon) {;} -#define DTRACE_MONITOR_PROBE(probe, klassOop, thread, mon) {;} +#define DTRACE_MONITOR_WAIT_PROBE(obj, thread, millis, mon) {;} +#define DTRACE_MONITOR_PROBE(probe, obj, thread, mon) {;} #endif // ndef DTRACE_ENABLED diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/os.cpp --- a/src/share/vm/runtime/os.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/os.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -271,7 +271,7 @@ default: { // Dispatch the signal to java HandleMark hm(THREAD); - klassOop k = SystemDictionary::resolve_or_null(vmSymbols::sun_misc_Signal(), THREAD); + Klass* k = SystemDictionary::resolve_or_null(vmSymbols::sun_misc_Signal(), THREAD); KlassHandle klass (THREAD, k); if (klass.not_null()) { JavaValue result(T_VOID); @@ -294,7 +294,7 @@ char klass_name[256]; char tmp_sig_name[16]; const char* sig_name = "UNKNOWN"; - instanceKlass::cast(PENDING_EXCEPTION->klass())-> + InstanceKlass::cast(PENDING_EXCEPTION->klass())-> name()->as_klass_external_name(klass_name, 256); if (os::exception_name(sig, tmp_sig_name, 16) != NULL) sig_name = tmp_sig_name; @@ -314,7 +314,7 @@ if (!ReduceSignalUsage) { // Setup JavaThread for processing signals EXCEPTION_MARK; - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK); instanceKlassHandle klass (THREAD, k); instanceHandle thread_oop = klass->allocate_instance_handle(CHECK); @@ -893,17 +893,6 @@ if (print) { st->print_cr(INTPTR_FORMAT " is an oop", addr); oop(p)->print_on(st); - if (p != (HeapWord*)x && oop(p)->is_constMethod() && - constMethodOop(p)->contains(addr)) { - Thread *thread = Thread::current(); - HandleMark hm(thread); - methodHandle mh (thread, constMethodOop(p)->method()); - if (!mh->is_native()) { - st->print_cr("bci_from(%p) = %d; print_codes():", - addr, mh->bci_from(address(x))); - mh->print_codes_on(st); - } - } return; } } else { @@ -958,6 +947,17 @@ } } + +#ifndef PRODUCT + // Check if in metaspace. + if (ClassLoaderDataGraph::contains((address)addr)) { + // Use addr->print() from the debugger instead (not here) + st->print_cr(INTPTR_FORMAT + " is pointing into metadata", addr); + return; + } +#endif + // Try an OS specific find if (os::find(addr, st)) { return; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/perfData.cpp --- a/src/share/vm/runtime/perfData.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/perfData.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -213,7 +213,10 @@ void PerfLongVariant::sample() { - assert(_sample_helper != NULL || _sampled != NULL, "unexpected state"); + // JJJ - This should not happen. Maybe the first sample is taken + // while the _sample_helper is being null'ed out. + // assert(_sample_helper != NULL || _sampled != NULL, "unexpected state"); + if (_sample_helper == NULL) return; if (_sample_helper != NULL) { *(jlong*)_valuep = _sample_helper->take_sample(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/perfData.hpp --- a/src/share/vm/runtime/perfData.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/perfData.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -425,6 +425,7 @@ inline void inc() { (*(jlong*)_valuep)++; } inline void inc(jlong val) { (*(jlong*)_valuep) += val; } inline void add(jlong val) { (*(jlong*)_valuep) += val; } + void clear_sample_helper() { _sample_helper = NULL; } }; /* diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/reflection.cpp --- a/src/share/vm/runtime/reflection.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/reflection.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,24 +46,24 @@ #define JAVA_1_5_VERSION 49 -static void trace_class_resolution(klassOop to_class) { +static void trace_class_resolution(Klass* to_class) { ResourceMark rm; int line_number = -1; const char * source_file = NULL; - klassOop caller = NULL; + Klass* caller = NULL; JavaThread* jthread = JavaThread::current(); if (jthread->has_last_Java_frame()) { vframeStream vfst(jthread); // skip over any frames belonging to java.lang.Class while (!vfst.at_end() && - instanceKlass::cast(vfst.method()->method_holder())->name() == vmSymbols::java_lang_Class()) { + InstanceKlass::cast(vfst.method()->method_holder())->name() == vmSymbols::java_lang_Class()) { vfst.next(); } if (!vfst.at_end()) { // this frame is a likely suspect caller = vfst.method()->method_holder(); line_number = vfst.method()->line_number_from_bci(vfst.bci()); - Symbol* s = instanceKlass::cast(vfst.method()->method_holder())->source_file_name(); + Symbol* s = InstanceKlass::cast(vfst.method()->method_holder())->source_file_name(); if (s != NULL) { source_file = s->as_C_string(); } @@ -254,7 +254,7 @@ if (value_type == T_OBJECT) { oop obj = (oop) value->l; if (obj != NULL) { - klassOop element_klass = objArrayKlass::cast(a->klass())->element_klass(); + Klass* element_klass = objArrayKlass::cast(a->klass())->element_klass(); if (!obj->is_a(element_klass)) { THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "array element type mismatch"); } @@ -301,7 +301,7 @@ } -klassOop Reflection::basic_type_mirror_to_arrayklass(oop basic_type_mirror, TRAPS) { +Klass* Reflection::basic_type_mirror_to_arrayklass(oop basic_type_mirror, TRAPS) { assert(java_lang_Class::is_primitive(basic_type_mirror), "just checking"); BasicType type = java_lang_Class::primitive_type(basic_type_mirror); if (type == T_VOID) { @@ -312,7 +312,7 @@ } -oop Reflection:: basic_type_arrayklass_to_mirror(klassOop basic_type_arrayklass, TRAPS) { +oop Reflection:: basic_type_arrayklass_to_mirror(Klass* basic_type_arrayklass, TRAPS) { BasicType type = typeArrayKlass::cast(basic_type_arrayklass)->element_type(); return Universe::java_mirror(type); } @@ -326,10 +326,10 @@ THROW_0(vmSymbols::java_lang_NegativeArraySizeException()); } if (java_lang_Class::is_primitive(element_mirror)) { - klassOop tak = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL); + Klass* tak = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL); return typeArrayKlass::cast(tak)->allocate(length, THREAD); } else { - klassOop k = java_lang_Class::as_klassOop(element_mirror); + Klass* k = java_lang_Class::as_Klass(element_mirror); if (Klass::cast(k)->oop_is_array() && arrayKlass::cast(k)->dimension() >= MAX_DIM) { THROW_0(vmSymbols::java_lang_IllegalArgumentException()); } @@ -360,12 +360,12 @@ dimensions[i] = d; } - klassOop klass; + Klass* klass; int dim = len; if (java_lang_Class::is_primitive(element_mirror)) { klass = basic_type_mirror_to_arrayklass(element_mirror, CHECK_NULL); } else { - klass = java_lang_Class::as_klassOop(element_mirror); + klass = java_lang_Class::as_Klass(element_mirror); if (Klass::cast(klass)->oop_is_array()) { int k_dim = arrayKlass::cast(klass)->dimension(); if (k_dim + len > MAX_DIM) { @@ -386,7 +386,7 @@ return NULL; } - klassOop klass = java_lang_Class::as_klassOop(mirror); + Klass* klass = java_lang_Class::as_Klass(mirror); if (!Klass::cast(klass)->oop_is_array()) { return NULL; } @@ -401,7 +401,7 @@ result2 = Klass::cast(objArrayKlass::cast(klass)->element_klass())->java_mirror(); } } else { - klassOop lower_dim = arrayKlass::cast(klass)->lower_dimension(); + Klass* lower_dim = arrayKlass::cast(klass)->lower_dimension(); assert(Klass::cast(lower_dim)->oop_is_array(), "just checking"); result2 = Klass::cast(lower_dim)->java_mirror(); } @@ -411,7 +411,7 @@ } -bool Reflection::reflect_check_access(klassOop field_class, AccessFlags acc, klassOop target_class, bool is_method_invoke, TRAPS) { +bool Reflection::reflect_check_access(Klass* field_class, AccessFlags acc, Klass* target_class, bool is_method_invoke, TRAPS) { // field_class : declaring class // acc : declared field access // target_class : for protected @@ -424,7 +424,7 @@ // that case (same as classic). ResourceMark rm(THREAD); assert(THREAD->is_Java_thread(), "sanity check"); - klassOop client_class = ((JavaThread *)THREAD)->security_get_caller_class(is_method_invoke ? 0 : 1); + Klass* client_class = ((JavaThread *)THREAD)->security_get_caller_class(is_method_invoke ? 0 : 1); if (client_class != field_class) { if (!verify_class_access(client_class, field_class, false) @@ -454,13 +454,13 @@ } -bool Reflection::verify_class_access(klassOop current_class, klassOop new_class, bool classloader_only) { +bool Reflection::verify_class_access(Klass* current_class, Klass* new_class, bool classloader_only) { // Verify that current_class can access new_class. If the classloader_only // flag is set, we automatically allow any accesses in which current_class // doesn't have a classloader. if ((current_class == NULL) || (current_class == new_class) || - (instanceKlass::cast(new_class)->is_public()) || + (InstanceKlass::cast(new_class)->is_public()) || is_same_class_package(current_class, new_class)) { return true; } @@ -475,13 +475,13 @@ return can_relax_access_check_for(current_class, new_class, classloader_only); } -static bool under_host_klass(instanceKlass* ik, klassOop host_klass) { +static bool under_host_klass(InstanceKlass* ik, Klass* host_klass) { DEBUG_ONLY(int inf_loop_check = 1000 * 1000 * 1000); for (;;) { - klassOop hc = (klassOop) ik->host_klass(); + Klass* hc = (Klass*) ik->host_klass(); if (hc == NULL) return false; if (hc == host_klass) return true; - ik = instanceKlass::cast(hc); + ik = InstanceKlass::cast(hc); // There's no way to make a host class loop short of patching memory. // Therefore there cannot be a loop here unles there's another bug. @@ -491,9 +491,9 @@ } bool Reflection::can_relax_access_check_for( - klassOop accessor, klassOop accessee, bool classloader_only) { - instanceKlass* accessor_ik = instanceKlass::cast(accessor); - instanceKlass* accessee_ik = instanceKlass::cast(accessee); + Klass* accessor, Klass* accessee, bool classloader_only) { + InstanceKlass* accessor_ik = InstanceKlass::cast(accessor); + InstanceKlass* accessee_ik = InstanceKlass::cast(accessee); // If either is on the other's host_klass chain, access is OK, // because one is inside the other. @@ -513,9 +513,9 @@ } } -bool Reflection::verify_field_access(klassOop current_class, - klassOop resolved_class, - klassOop field_class, +bool Reflection::verify_field_access(Klass* current_class, + Klass* resolved_class, + Klass* field_class, AccessFlags access, bool classloader_only, bool protected_restriction) { @@ -569,12 +569,12 @@ } -bool Reflection::is_same_class_package(klassOop class1, klassOop class2) { - return instanceKlass::cast(class1)->is_same_class_package(class2); +bool Reflection::is_same_class_package(Klass* class1, Klass* class2) { + return InstanceKlass::cast(class1)->is_same_class_package(class2); } -bool Reflection::is_same_package_member(klassOop class1, klassOop class2, TRAPS) { - return instanceKlass::cast(class1)->is_same_package_member(class2, THREAD); +bool Reflection::is_same_package_member(Klass* class1, Klass* class2, TRAPS) { + return InstanceKlass::cast(class1)->is_same_package_member(class2, THREAD); } @@ -592,9 +592,9 @@ int ooff = iter.outer_class_info_index(); if (inner_is_member && ioff != 0 && ooff != 0) { - klassOop o = cp->klass_at(ooff, CHECK); + Klass* o = cp->klass_at(ooff, CHECK); if (o == outer()) { - klassOop i = cp->klass_at(ioff, CHECK); + Klass* i = cp->klass_at(ioff, CHECK); if (i == inner()) { return; } @@ -602,7 +602,7 @@ } if (!inner_is_member && ioff != 0 && ooff == 0 && cp->klass_name_at_matches(inner, ioff)) { - klassOop i = cp->klass_at(ioff, CHECK); + Klass* i = cp->klass_at(ioff, CHECK); if (i == inner()) { return; } @@ -630,9 +630,9 @@ case T_OBJECT: case T_ARRAY: Symbol* name = ss->as_symbol(CHECK_NULL); - oop loader = instanceKlass::cast(method->method_holder())->class_loader(); - oop protection_domain = instanceKlass::cast(method->method_holder())->protection_domain(); - klassOop k = SystemDictionary::resolve_or_fail( + oop loader = InstanceKlass::cast(method->method_holder())->class_loader(); + oop protection_domain = InstanceKlass::cast(method->method_holder())->protection_domain(); + Klass* k = SystemDictionary::resolve_or_fail( name, Handle(THREAD, loader), Handle(THREAD, protection_domain), @@ -680,9 +680,9 @@ return Handle(THREAD, Universe::java_mirror(type)); } - oop loader = instanceKlass::cast(k())->class_loader(); + oop loader = InstanceKlass::cast(k())->class_loader(); oop protection_domain = Klass::cast(k())->protection_domain(); - klassOop result = SystemDictionary::resolve_or_fail(signature, + Klass* result = SystemDictionary::resolve_or_fail(signature, Handle(THREAD, loader), Handle(THREAD, protection_domain), true, CHECK_(Handle())); @@ -748,13 +748,16 @@ java_lang_reflect_Method::set_signature(mh(), sig()); } if (java_lang_reflect_Method::has_annotations_field()) { - java_lang_reflect_Method::set_annotations(mh(), method->annotations()); + typeArrayOop an_oop = Annotations::make_java_array(method->annotations(), CHECK_NULL); + java_lang_reflect_Method::set_annotations(mh(), an_oop); } if (java_lang_reflect_Method::has_parameter_annotations_field()) { - java_lang_reflect_Method::set_parameter_annotations(mh(), method->parameter_annotations()); + typeArrayOop an_oop = Annotations::make_java_array(method->parameter_annotations(), CHECK_NULL); + java_lang_reflect_Method::set_parameter_annotations(mh(), an_oop); } if (java_lang_reflect_Method::has_annotation_default_field()) { - java_lang_reflect_Method::set_annotation_default(mh(), method->annotation_default()); + typeArrayOop an_oop = Annotations::make_java_array(method->annotation_default(), CHECK_NULL); + java_lang_reflect_Method::set_annotation_default(mh(), an_oop); } return mh(); } @@ -791,10 +794,12 @@ java_lang_reflect_Constructor::set_signature(ch(), sig()); } if (java_lang_reflect_Constructor::has_annotations_field()) { - java_lang_reflect_Constructor::set_annotations(ch(), method->annotations()); + typeArrayOop an_oop = Annotations::make_java_array(method->annotations(), CHECK_NULL); + java_lang_reflect_Constructor::set_annotations(ch(), an_oop); } if (java_lang_reflect_Constructor::has_parameter_annotations_field()) { - java_lang_reflect_Constructor::set_parameter_annotations(ch(), method->parameter_annotations()); + typeArrayOop an_oop = Annotations::make_java_array(method->parameter_annotations(), CHECK_NULL); + java_lang_reflect_Constructor::set_parameter_annotations(ch(), an_oop); } return ch(); } @@ -811,7 +816,7 @@ name = java_lang_String::create_from_symbol(field_name, CHECK_NULL); } Symbol* signature = fd->signature(); - KlassHandle holder (THREAD, fd->field_holder()); + instanceKlassHandle holder (THREAD, fd->field_holder()); Handle type = new_type(signature, holder, CHECK_NULL); Handle rh = java_lang_reflect_Field::create(CHECK_NULL); @@ -829,7 +834,8 @@ java_lang_reflect_Field::set_signature(rh(), sig()); } if (java_lang_reflect_Field::has_annotations_field()) { - java_lang_reflect_Field::set_annotations(rh(), fd->annotations()); + typeArrayOop an_oop = Annotations::make_java_array(fd->annotations(), CHECK_NULL); + java_lang_reflect_Field::set_annotations(rh(), an_oop); } return rh(); } @@ -882,7 +888,7 @@ method = reflected_method; } else { // resolve based on the receiver - if (instanceKlass::cast(reflected_method->method_holder())->is_interface()) { + if (InstanceKlass::cast(reflected_method->method_holder())->is_interface()) { // resolve interface call if (ReflectionWrapResolutionErrors) { // new default: 6531596 @@ -905,10 +911,10 @@ // if the method can be overridden, we resolve using the vtable index. int index = reflected_method->vtable_index(); method = reflected_method; - if (index != methodOopDesc::nonvirtual_vtable_index) { + if (index != Method::nonvirtual_vtable_index) { // target_klass might be an arrayKlassOop but all vtables start at // the same place. The cast is to avoid virtual call and assertion. - instanceKlass* inst = (instanceKlass*)target_klass()->klass_part(); + InstanceKlass* inst = (InstanceKlass*)target_klass(); method = methodHandle(THREAD, inst->method_at_vtable(index)); } if (!method.is_null()) { @@ -919,7 +925,7 @@ ResourceMark rm(THREAD); Handle h_origexception = Exceptions::new_exception(THREAD, vmSymbols::java_lang_AbstractMethodError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(target_klass()), + Method::name_and_sig_as_C_string(Klass::cast(target_klass()), method->name(), method->signature())); JavaCallArguments args(h_origexception); @@ -929,7 +935,7 @@ } else { ResourceMark rm(THREAD); THROW_MSG_0(vmSymbols::java_lang_AbstractMethodError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(target_klass()), + Method::name_and_sig_as_C_string(Klass::cast(target_klass()), method->name(), method->signature())); } @@ -944,7 +950,7 @@ if (method.is_null()) { ResourceMark rm(THREAD); THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(), - methodOopDesc::name_and_sig_as_C_string(Klass::cast(klass()), + Method::name_and_sig_as_C_string(Klass::cast(klass()), reflected_method->name(), reflected_method->signature())); } @@ -1003,7 +1009,7 @@ } } else { if (arg != NULL) { - klassOop k = java_lang_Class::as_klassOop(type_mirror); + Klass* k = java_lang_Class::as_Klass(type_mirror); if (!arg->is_a(k)) { THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "argument type mismatch"); } @@ -1079,8 +1085,8 @@ rtype = T_OBJECT; } - instanceKlassHandle klass(THREAD, java_lang_Class::as_klassOop(mirror)); - methodOop m = klass->method_with_idnum(slot); + instanceKlassHandle klass(THREAD, java_lang_Class::as_Klass(mirror)); + Method* m = klass->method_with_idnum(slot); if (m == NULL) { THROW_MSG_0(vmSymbols::java_lang_InternalError(), "invoke"); } @@ -1096,8 +1102,8 @@ bool override = java_lang_reflect_Constructor::override(constructor_mirror) != 0; objArrayHandle ptypes(THREAD, objArrayOop(java_lang_reflect_Constructor::parameter_types(constructor_mirror))); - instanceKlassHandle klass(THREAD, java_lang_Class::as_klassOop(mirror)); - methodOop m = klass->method_with_idnum(slot); + instanceKlassHandle klass(THREAD, java_lang_Class::as_Klass(mirror)); + Method* m = klass->method_with_idnum(slot); if (m == NULL) { THROW_MSG_0(vmSymbols::java_lang_InternalError(), "invoke"); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/reflection.hpp --- a/src/share/vm/runtime/reflection.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/reflection.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,11 +45,11 @@ class Reflection: public AllStatic { private: // Access checking - static bool reflect_check_access(klassOop field_class, AccessFlags acc, klassOop target_class, bool is_method_invoke, TRAPS); + static bool reflect_check_access(Klass* field_class, AccessFlags acc, Klass* target_class, bool is_method_invoke, TRAPS); // Conversion - static klassOop basic_type_mirror_to_arrayklass(oop basic_type_mirror, TRAPS); - static oop basic_type_arrayklass_to_mirror(klassOop basic_type_arrayklass, TRAPS); + static Klass* basic_type_mirror_to_arrayklass(oop basic_type_mirror, TRAPS); + static oop basic_type_arrayklass_to_mirror(Klass* basic_type_arrayklass, TRAPS); static objArrayHandle get_parameter_types(methodHandle method, int parameter_count, oop* return_type, TRAPS); static objArrayHandle get_exception_types(methodHandle method, TRAPS); @@ -86,19 +86,19 @@ static arrayOop reflect_new_multi_array(oop element_mirror, typeArrayOop dimensions, TRAPS); // Verification - static bool verify_class_access(klassOop current_class, klassOop new_class, bool classloader_only); + static bool verify_class_access(Klass* current_class, Klass* new_class, bool classloader_only); - static bool verify_field_access(klassOop current_class, - klassOop resolved_class, - klassOop field_class, + static bool verify_field_access(Klass* current_class, + Klass* resolved_class, + Klass* field_class, AccessFlags access, bool classloader_only, bool protected_restriction = false); - static bool is_same_class_package(klassOop class1, klassOop class2); - static bool is_same_package_member(klassOop class1, klassOop class2, TRAPS); + static bool is_same_class_package(Klass* class1, Klass* class2); + static bool is_same_package_member(Klass* class1, Klass* class2, TRAPS); static bool can_relax_access_check_for( - klassOop accessor, klassOop accesee, bool classloader_only); + Klass* accessor, Klass* accesee, bool classloader_only); // inner class reflection // raise an ICCE unless the required relationship can be proven to hold diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/reflectionUtils.cpp --- a/src/share/vm/runtime/reflectionUtils.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/reflectionUtils.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ KlassStream::KlassStream(instanceKlassHandle klass, bool local_only, bool classes_only) { _klass = klass; if (classes_only) { - _interfaces = Universe::the_empty_system_obj_array(); + _interfaces = Universe::the_empty_klass_array(); } else { _interfaces = klass->transitive_interfaces(); } @@ -47,7 +47,7 @@ _klass = _klass->super(); } else { if (_interface_index > 0) { - _klass = klassOop(_interfaces->obj_at(--_interface_index)); + _klass = _interfaces->at(--_interface_index); } else { return true; } @@ -70,7 +70,7 @@ if (JDK_Version::is_gte_jdk16x_version()) { // The following class fields do not exist in // previous version of jdk. - offset = sun_reflect_ConstantPool::cp_oop_offset(); + offset = sun_reflect_ConstantPool::oop_offset(); _filtered_fields->append(new FilteredField(SystemDictionary::reflect_ConstantPool_klass(), offset)); offset = sun_reflect_UnsafeStaticFieldAccessorImpl::base_offset(); _filtered_fields->append(new FilteredField(SystemDictionary::reflect_UnsafeStaticFieldAccessorImpl_klass(), offset)); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/reflectionUtils.hpp --- a/src/share/vm/runtime/reflectionUtils.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/reflectionUtils.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,14 +39,14 @@ // interfaces last). // // for (KlassStream st(k, false, false); !st.eos(); st.next()) { -// klassOop k = st.klass(); +// Klass* k = st.klass(); // ... // } class KlassStream VALUE_OBJ_CLASS_SPEC { protected: instanceKlassHandle _klass; // current klass/interface iterated over - objArrayHandle _interfaces; // transitive interfaces for initial class + Array* _interfaces; // transitive interfaces for initial class int _interface_index; // current interface being processed bool _local_only; // process initial class/interface only bool _classes_only; // process classes only (no interfaces) @@ -75,14 +75,14 @@ // Usage: // // for (MethodStream st(k, false, false); !st.eos(); st.next()) { -// methodOop m = st.method(); +// Method* m = st.method(); // ... // } class MethodStream : public KlassStream { private: int length() const { return methods()->length(); } - objArrayOop methods() const { return _klass->methods(); } + Array* methods() const { return _klass->methods(); } public: MethodStream(instanceKlassHandle klass, bool local_only, bool classes_only) : KlassStream(klass, local_only, classes_only) { @@ -91,7 +91,7 @@ } void next() { _index--; } - methodOop method() const { return methodOop(methods()->obj_at(index())); } + Method* method() const { return methods()->at(index()); } }; @@ -138,16 +138,15 @@ class FilteredField { private: - klassOop _klass; + Klass* _klass; int _field_offset; public: - FilteredField(klassOop klass, int field_offset) { + FilteredField(Klass* klass, int field_offset) { _klass = klass; _field_offset = field_offset; } - klassOop klass() { return _klass; } - oop* klass_addr() { return (oop*) &_klass; } + Klass* klass() { return _klass; } int field_offset() { return _field_offset; } }; @@ -156,7 +155,7 @@ static GrowableArray *_filtered_fields; public: static void initialize(); - static bool is_filtered_field(klassOop klass, int field_offset) { + static bool is_filtered_field(Klass* klass, int field_offset) { for (int i=0; i < _filtered_fields->length(); i++) { if (klass == _filtered_fields->at(i)->klass() && field_offset == _filtered_fields->at(i)->field_offset()) { @@ -165,21 +164,21 @@ } return false; } - static int filtered_fields_count(klassOop klass, bool local_only) { + static int filtered_fields_count(Klass* klass, bool local_only) { int nflds = 0; for (int i=0; i < _filtered_fields->length(); i++) { if (local_only && klass == _filtered_fields->at(i)->klass()) { nflds++; - } else if (klass->klass_part()->is_subtype_of(_filtered_fields->at(i)->klass())) { + } else if (klass->is_subtype_of(_filtered_fields->at(i)->klass())) { nflds++; } } return nflds; } - // GC support. - static void klasses_oops_do(OopClosure* f) { + // Enhance Class Redefinition Support + static void classes_do(KlassClosure* f) { for (int i = 0; i < _filtered_fields->length(); i++) { - f->do_oop((oop*)_filtered_fields->at(i)->klass_addr()); + f->do_klass(_filtered_fields->at(i)->klass()); } } }; @@ -204,13 +203,13 @@ public: FilteredFieldStream(instanceKlassHandle klass, bool local_only, bool classes_only) : FieldStream(klass, local_only, classes_only) { - _filtered_fields_count = FilteredFieldsMap::filtered_fields_count((klassOop)klass(), local_only); + _filtered_fields_count = FilteredFieldsMap::filtered_fields_count((Klass*)klass(), local_only); } int field_count(); void next() { _index -= 1; if (has_filtered_field()) { - while (_index >=0 && FilteredFieldsMap::is_filtered_field((klassOop)_klass(), offset())) { + while (_index >=0 && FilteredFieldsMap::is_filtered_field((Klass*)_klass(), offset())) { _index -= 1; } } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/relocator.cpp --- a/src/share/vm/runtime/relocator.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/relocator.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -25,6 +25,7 @@ #include "precompiled.hpp" #include "classfile/stackMapTableFormat.hpp" #include "interpreter/bytecodes.hpp" +#include "memory/metadataFactory.hpp" #include "memory/oopFactory.hpp" #include "memory/universe.inline.hpp" #include "oops/oop.inline.hpp" @@ -155,11 +156,16 @@ if (!handle_code_changes()) return methodHandle(); // Construct the new method - methodHandle new_method = methodOopDesc::clone_with_new_data(method(), + methodHandle new_method = Method::clone_with_new_data(method(), code_array(), code_length(), compressed_line_number_table(), compressed_line_number_table_size(), CHECK_(methodHandle())); + + // Deallocate the old Method* from metadata + ClassLoaderData* loader_data = method()->method_holder()->class_loader_data(); + loader_data->add_to_deallocate_list(method()()); + set_method(new_method); if (TraceRelocator) { @@ -443,16 +449,14 @@ // Create a new array, copying the src array but adding a hole at // the specified location -static typeArrayOop insert_hole_at( - size_t where, int hole_sz, typeArrayOop src) { +static Array* insert_hole_at(ClassLoaderData* loader_data, + size_t where, int hole_sz, Array* src) { Thread* THREAD = Thread::current(); - Handle src_hnd(THREAD, src); - typeArrayOop dst = - oopFactory::new_permanent_byteArray(src->length() + hole_sz, CHECK_NULL); - src = (typeArrayOop)src_hnd(); + Array* dst = + MetadataFactory::new_array(loader_data, src->length() + hole_sz, 0, CHECK_NULL); - address src_addr = (address)src->byte_at_addr(0); - address dst_addr = (address)dst->byte_at_addr(0); + address src_addr = (address)src->adr_at(0); + address dst_addr = (address)dst->adr_at(0); memcpy(dst_addr, src_addr, where); memcpy(dst_addr + where + hole_sz, @@ -464,10 +468,10 @@ // map frames. void Relocator::adjust_stack_map_table(int bci, int delta) { if (method()->has_stackmap_table()) { - typeArrayOop data = method()->stackmap_data(); + Array* data = method()->stackmap_data(); // The data in the array is a classfile representation of the stackmap table stack_map_table* sm_table = - stack_map_table::at((address)data->byte_at_addr(0)); + stack_map_table::at((address)data->adr_at(0)); int count = sm_table->number_of_entries(); stack_map_frame* frame = sm_table->entries(); @@ -497,14 +501,18 @@ // We can safely ignore the reverse situation as a small delta // can still be used in an extended version of the frame. - size_t frame_offset = (address)frame - (address)data->byte_at_addr(0); + size_t frame_offset = (address)frame - (address)data->adr_at(0); - data = insert_hole_at(frame_offset + 1, 2, data); - if (data == NULL) { + ClassLoaderData* loader_data = method()->method_holder()->class_loader_data(); + Array* new_data = insert_hole_at(loader_data, frame_offset + 1, 2, data); + if (new_data == NULL) { return; // out-of-memory? } + // Deallocate old data + MetadataFactory::free_array(loader_data, data); + data = new_data; - address frame_addr = (address)(data->byte_at_addr(0) + frame_offset); + address frame_addr = (address)(data->adr_at(0) + frame_offset); frame = stack_map_frame::at(frame_addr); @@ -573,7 +581,7 @@ if (code_array() != NULL) { memcpy(new_code_array, code_array(), code_length()); } else { - // Initial copy. Copy directly from methodOop + // Initial copy. Copy directly from Method* memcpy(new_code_array, method()->code_base(), code_length()); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/relocator.hpp --- a/src/share/vm/runtime/relocator.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/relocator.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ #define SHARE_VM_RUNTIME_RELOCATOR_HPP #include "interpreter/bytecodes.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #ifdef TARGET_ARCH_x86 # include "bytes_x86.hpp" #endif diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/rframe.hpp --- a/src/share/vm/runtime/rframe.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/rframe.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,9 +69,9 @@ RFrame* parent() const; // rframe containing lexical scope (if any) virtual void print() = 0; - static int computeSends(methodOop m); + static int computeSends(Method* m); static int computeSends(nmethod* nm); - static int computeCumulSends(methodOop m); + static int computeCumulSends(Method* m); static int computeCumulSends(nmethod* nm); }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/sharedRuntime.cpp --- a/src/share/vm/runtime/sharedRuntime.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/sharedRuntime.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -590,13 +590,13 @@ // to modify the compilers to generate calls to this function. // JRT_LEAF(int, SharedRuntime::rc_trace_method_entry( - JavaThread* thread, methodOopDesc* method)) + JavaThread* thread, Method* method)) assert(RC_TRACE_IN_RANGE(0x00001000, 0x00002000), "wrong call"); if (method->is_obsolete()) { // We are calling an obsolete method, but this is not necessarily // an error. Our method could have been redefined just after we - // fetched the methodOop from the constant pool. + // fetched the Method* from the constant pool. // RC_TRACE macro has an embedded ResourceMark RC_TRACE_WITH_THREAD(0x00001000, thread, @@ -725,8 +725,8 @@ JRT_ENTRY(void, SharedRuntime::throw_StackOverflowError(JavaThread* thread)) // We avoid using the normal exception construction in this case because // it performs an upcall to Java, and we're already out of stack space. - klassOop k = SystemDictionary::StackOverflowError_klass(); - oop exception_oop = instanceKlass::cast(k)->allocate_instance(CHECK); + Klass* k = SystemDictionary::StackOverflowError_klass(); + oop exception_oop = InstanceKlass::cast(k)->allocate_instance(CHECK); Handle exception (thread, exception_oop); if (StackTraceInThrowable) { java_lang_Throwable::fill_in_stack_trace(exception); @@ -909,8 +909,8 @@ JRT_ENTRY_NO_ASYNC(void, SharedRuntime::register_finalizer(JavaThread* thread, oopDesc* obj)) assert(obj->is_oop(), "must be a valid oop"); - assert(obj->klass()->klass_part()->has_finalizer(), "shouldn't be here otherwise"); - instanceKlass::register_finalizer(instanceOop(obj), CHECK); + assert(obj->klass()->has_finalizer(), "shouldn't be here otherwise"); + InstanceKlass::register_finalizer(instanceOop(obj), CHECK); JRT_END @@ -935,7 +935,7 @@ int SharedRuntime::dtrace_object_alloc_base(Thread* thread, oopDesc* o) { assert(DTraceAllocProbes, "wrong call"); - Klass* klass = o->blueprint(); + Klass* klass = o->klass(); int size = o->size(); Symbol* name = klass->name(); #ifndef USDT2 @@ -950,7 +950,7 @@ } JRT_LEAF(int, SharedRuntime::dtrace_method_entry( - JavaThread* thread, methodOopDesc* method)) + JavaThread* thread, Method* method)) assert(DTraceMethodProbes, "wrong call"); Symbol* kname = method->klass_name(); Symbol* name = method->name(); @@ -971,7 +971,7 @@ JRT_END JRT_LEAF(int, SharedRuntime::dtrace_method_exit( - JavaThread* thread, methodOopDesc* method)) + JavaThread* thread, Method* method)) assert(DTraceMethodProbes, "wrong call"); Symbol* kname = method->klass_name(); Symbol* name = method->name(); @@ -1059,7 +1059,7 @@ if (bc != Bytecodes::_invokestatic && bc != Bytecodes::_invokedynamic) { assert(receiver.not_null(), "should have thrown exception"); KlassHandle receiver_klass(THREAD, receiver->klass()); - klassOop rk = constants->klass_ref_at(bytecode_index, CHECK_(nullHandle)); + Klass* rk = constants->klass_ref_at(bytecode_index, CHECK_(nullHandle)); // klass is already loaded KlassHandle static_receiver_klass(THREAD, rk); // Method handle invokes might have been optimized to a direct call @@ -1071,11 +1071,11 @@ callee->is_compiled_lambda_form(), "actual receiver must be subclass of static receiver klass"); if (receiver_klass->oop_is_instance()) { - if (instanceKlass::cast(receiver_klass())->is_not_initialized()) { + if (InstanceKlass::cast(receiver_klass())->is_not_initialized()) { tty->print_cr("ERROR: Klass not yet initialized!!"); - receiver_klass.print(); + receiver_klass()->print(); } - assert(!instanceKlass::cast(receiver_klass())->is_not_initialized(), "receiver_klass must be initialized"); + assert(!InstanceKlass::cast(receiver_klass())->is_not_initialized(), "receiver_klass must be initialized"); } } #endif @@ -1233,7 +1233,7 @@ { MutexLocker ml_patch(CompiledIC_lock); - // Now that we are ready to patch if the methodOop was redefined then + // Now that we are ready to patch if the Method* was redefined then // don't update call site and let the caller retry. if (!callee_method->is_old()) { @@ -1245,7 +1245,9 @@ } #endif if (is_virtual) { - CompiledIC* inline_cache = CompiledIC_before(caller_frame.pc()); + nmethod* nm = callee_nm; + if (nm == NULL) CodeCache::find_blob(caller_frame.pc()); + CompiledIC* inline_cache = CompiledIC_before(caller_nm, caller_frame.pc()); if (inline_cache->is_clean()) { inline_cache->set_to_monomorphic(virtual_call_info); } @@ -1274,8 +1276,8 @@ methodHandle callee_method; JRT_BLOCK callee_method = SharedRuntime::handle_ic_miss_helper(thread, CHECK_NULL); - // Return methodOop through TLS - thread->set_vm_result(callee_method()); + // Return Method* through TLS + thread->set_vm_result_2(callee_method()); JRT_BLOCK_END // return compiled code entry point after potential safepoints assert(callee_method->verified_code_entry() != NULL, " Jump to zero!"); @@ -1307,9 +1309,9 @@ if (caller_frame.is_interpreted_frame() || caller_frame.is_entry_frame()) { - methodOop callee = thread->callee_target(); + Method* callee = thread->callee_target(); guarantee(callee != NULL && callee->is_method(), "bad handshake"); - thread->set_vm_result(callee); + thread->set_vm_result_2(callee); thread->set_callee_target(NULL); return callee->get_c2i_entry(); } @@ -1319,7 +1321,7 @@ JRT_BLOCK // Force resolving of caller (if we called from compiled frame) callee_method = SharedRuntime::reresolve_call_site(thread, CHECK_NULL); - thread->set_vm_result(callee_method()); + thread->set_vm_result_2(callee_method()); JRT_BLOCK_END // return compiled code entry point after potential safepoints assert(callee_method->verified_code_entry() != NULL, " Jump to zero!"); @@ -1332,7 +1334,7 @@ methodHandle callee_method; JRT_BLOCK callee_method = SharedRuntime::resolve_helper(thread, false, false, CHECK_NULL); - thread->set_vm_result(callee_method()); + thread->set_vm_result_2(callee_method()); JRT_BLOCK_END // return compiled code entry point after potential safepoints assert(callee_method->verified_code_entry() != NULL, " Jump to zero!"); @@ -1345,7 +1347,7 @@ methodHandle callee_method; JRT_BLOCK callee_method = SharedRuntime::resolve_helper(thread, true, false, CHECK_NULL); - thread->set_vm_result(callee_method()); + thread->set_vm_result_2(callee_method()); JRT_BLOCK_END // return compiled code entry point after potential safepoints assert(callee_method->verified_code_entry() != NULL, " Jump to zero!"); @@ -1359,7 +1361,7 @@ methodHandle callee_method; JRT_BLOCK callee_method = SharedRuntime::resolve_helper(thread, true, true, CHECK_NULL); - thread->set_vm_result(callee_method()); + thread->set_vm_result_2(callee_method()); JRT_BLOCK_END // return compiled code entry point after potential safepoints assert(callee_method->verified_code_entry() != NULL, " Jump to zero!"); @@ -1442,7 +1444,7 @@ CodeBlob* cb = caller_frame.cb(); if (cb->is_nmethod() && ((nmethod*)cb)->is_in_use()) { // Not a non-entrant nmethod, so find inline_cache - CompiledIC* inline_cache = CompiledIC_before(caller_frame.pc()); + CompiledIC* inline_cache = CompiledIC_before(((nmethod*)cb), caller_frame.pc()); bool should_be_mono = false; if (inline_cache->is_optimized()) { if (TraceCallFixup) { @@ -1452,9 +1454,9 @@ tty->print_cr(" code: " INTPTR_FORMAT, callee_method->code()); } should_be_mono = true; - } else { - compiledICHolderOop ic_oop = (compiledICHolderOop) inline_cache->cached_oop(); - if ( ic_oop != NULL && ic_oop->is_compiledICHolder()) { + } else if (inline_cache->is_icholder_call()) { + CompiledICHolder* ic_oop = inline_cache->cached_icholder(); + if ( ic_oop != NULL) { if (receiver()->klass() == ic_oop->holder_klass()) { // This isn't a real miss. We must have seen that compiled code @@ -1591,7 +1593,7 @@ ssc->set_to_clean(); } else { // compiled, dispatched call (which used to call an interpreted method) - CompiledIC* inline_cache = CompiledIC_at(call_addr); + CompiledIC* inline_cache = CompiledIC_at(caller_nm, call_addr); inline_cache->set_to_clean(); } } @@ -1622,8 +1624,8 @@ // where we went int -> i2c -> c2i and so the caller could in fact be // interpreted. If the caller is compiled we attempt to patch the caller // so he no longer calls into the interpreter. -IRT_LEAF(void, SharedRuntime::fixup_callers_callsite(methodOopDesc* method, address caller_pc)) - methodOop moop(method); +IRT_LEAF(void, SharedRuntime::fixup_callers_callsite(Method* method, address caller_pc)) + Method* moop(method); address entry_point = moop->from_compiled_entry(); @@ -1634,7 +1636,7 @@ // Also it is possible that we lost a race in that from_compiled_entry // is now back to the i2c in that case we don't need to patch and if // we did we'd leap into space because the callsite needs to use - // "to interpreter" stub in order to load up the methodOop. Don't + // "to interpreter" stub in order to load up the Method*. Don't // ask me how I know this... CodeBlob* cb = CodeCache::find_blob(caller_pc); @@ -1907,7 +1909,7 @@ static int _max_size; // max. arg size seen static void add_method_to_histogram(nmethod* nm) { - methodOop m = nm->method(); + Method* m = nm->method(); ArgumentCount args(m->signature()); int arity = args.size() + (m->is_static() ? 0 : 1); int argsize = m->size_of_parameters(); @@ -2800,7 +2802,7 @@ // QQQ we could place number of active monitors in the array so that compiled code // could double check it. - methodOop moop = fr.interpreter_frame_method(); + Method* moop = fr.interpreter_frame_method(); int max_locals = moop->max_locals(); // Allocate temp buffer, 1 word per local & 2 per active monitor int buf_size_words = max_locals + active_monitor_count*2; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/sharedRuntime.hpp --- a/src/share/vm/runtime/sharedRuntime.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/sharedRuntime.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -234,7 +234,7 @@ static void throw_and_post_jvmti_exception(JavaThread *thread, Symbol* name, const char *message = NULL); // RedefineClasses() tracing support for obsolete method entry - static int rc_trace_method_entry(JavaThread* thread, methodOopDesc* m); + static int rc_trace_method_entry(JavaThread* thread, Method* m); // To be used as the entry point for unresolved native methods. static address native_method_throw_unsatisfied_link_error_entry(); @@ -253,8 +253,8 @@ // dtrace notifications static int dtrace_object_alloc(oopDesc* o); static int dtrace_object_alloc_base(Thread* thread, oopDesc* o); - static int dtrace_method_entry(JavaThread* thread, methodOopDesc* m); - static int dtrace_method_exit(JavaThread* thread, methodOopDesc* m); + static int dtrace_method_entry(JavaThread* thread, Method* m); + static int dtrace_method_exit(JavaThread* thread, Method* m); // Utility method for retrieving the Java thread id, returns 0 if the // thread is not a well formed Java thread. @@ -452,7 +452,7 @@ // A compiled caller has just called the interpreter, but compiled code // exists. Patch the caller so he no longer calls into the interpreter. - static void fixup_callers_callsite(methodOopDesc* moop, address ret_pc); + static void fixup_callers_callsite(Method* moop, address ret_pc); // Slow-path Locking and Unlocking static void complete_monitor_locking_C(oopDesc* obj, BasicLock* lock, JavaThread* thread); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/signature.cpp --- a/src/share/vm/runtime/signature.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/signature.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -336,7 +336,7 @@ return name; } -klassOop SignatureStream::as_klass(Handle class_loader, Handle protection_domain, +Klass* SignatureStream::as_klass(Handle class_loader, Handle protection_domain, FailureMode failure_mode, TRAPS) { if (!is_object()) return NULL; Symbol* name = as_symbol(CHECK_NULL); @@ -352,7 +352,7 @@ FailureMode failure_mode, TRAPS) { if (!is_object()) return Universe::java_mirror(type()); - klassOop klass = as_klass(class_loader, protection_domain, failure_mode, CHECK_NULL); + Klass* klass = as_klass(class_loader, protection_domain, failure_mode, CHECK_NULL); if (klass == NULL) return NULL; return Klass::cast(klass)->java_mirror(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/signature.hpp --- a/src/share/vm/runtime/signature.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/signature.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ #define SHARE_VM_RUNTIME_SIGNATURE_HPP #include "memory/allocation.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "utilities/top.hpp" // SignatureIterators iterate over a Java signature (or parts of it). @@ -394,7 +394,7 @@ BasicType type() const { return _type; } Symbol* as_symbol(TRAPS); enum FailureMode { ReturnNull, CNFException, NCDFError }; - klassOop as_klass(Handle class_loader, Handle protection_domain, FailureMode failure_mode, TRAPS); + Klass* as_klass(Handle class_loader, Handle protection_domain, FailureMode failure_mode, TRAPS); oop as_java_mirror(Handle class_loader, Handle protection_domain, FailureMode failure_mode, TRAPS); const jbyte* raw_bytes() { return _signature->bytes() + _begin; } int raw_length() { return _end - _begin; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/simpleThresholdPolicy.cpp --- a/src/share/vm/runtime/simpleThresholdPolicy.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/simpleThresholdPolicy.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,10 +34,10 @@ void SimpleThresholdPolicy::print_counters(const char* prefix, methodHandle mh) { int invocation_count = mh->invocation_count(); int backedge_count = mh->backedge_count(); - methodDataHandle mdh = mh->method_data(); + MethodData* mdh = mh->method_data(); int mdo_invocations = 0, mdo_backedges = 0; int mdo_invocations_start = 0, mdo_backedges_start = 0; - if (mdh() != NULL) { + if (mdh != NULL) { mdo_invocations = mdh->invocation_count(); mdo_backedges = mdh->backedge_count(); mdo_invocations_start = mdh->invocation_count_start(); @@ -147,10 +147,10 @@ } // Set carry flags on the counters if necessary -void SimpleThresholdPolicy::handle_counter_overflow(methodOop method) { +void SimpleThresholdPolicy::handle_counter_overflow(Method* method) { set_carry_if_necessary(method->invocation_counter()); set_carry_if_necessary(method->backedge_counter()); - methodDataOop mdo = method->method_data(); + MethodData* mdo = method->method_data(); if (mdo != NULL) { set_carry_if_necessary(mdo->invocation_counter()); set_carry_if_necessary(mdo->backedge_counter()); @@ -168,7 +168,7 @@ methodHandle mh(sd->method()); print_event(REPROFILE, mh, mh, InvocationEntryBci, CompLevel_none); } - methodDataOop mdo = sd->method()->method_data(); + MethodData* mdo = sd->method()->method_data(); if (mdo != NULL) { mdo->reset_start_counters(); } @@ -272,9 +272,9 @@ } // Determine is a method is mature. -bool SimpleThresholdPolicy::is_mature(methodOop method) { +bool SimpleThresholdPolicy::is_mature(Method* method) { if (is_trivial(method)) return true; - methodDataOop mdo = method->method_data(); + MethodData* mdo = method->method_data(); if (mdo != NULL) { int i = mdo->invocation_count(); int b = mdo->backedge_count(); @@ -286,7 +286,7 @@ } // Common transition function. Given a predicate determines if a method should transition to another level. -CompLevel SimpleThresholdPolicy::common(Predicate p, methodOop method, CompLevel cur_level) { +CompLevel SimpleThresholdPolicy::common(Predicate p, Method* method, CompLevel cur_level) { CompLevel next_level = cur_level; int i = method->invocation_count(); int b = method->backedge_count(); @@ -306,7 +306,7 @@ case CompLevel_limited_profile: case CompLevel_full_profile: { - methodDataOop mdo = method->method_data(); + MethodData* mdo = method->method_data(); if (mdo != NULL) { if (mdo->would_profile()) { int mdo_i = mdo->invocation_count_delta(); @@ -326,7 +326,7 @@ } // Determine if a method should be compiled with a normal entry point at a different level. -CompLevel SimpleThresholdPolicy::call_event(methodOop method, CompLevel cur_level) { +CompLevel SimpleThresholdPolicy::call_event(Method* method, CompLevel cur_level) { CompLevel osr_level = MIN2((CompLevel) method->highest_osr_comp_level(), common(&SimpleThresholdPolicy::loop_predicate, method, cur_level)); CompLevel next_level = common(&SimpleThresholdPolicy::call_predicate, method, cur_level); @@ -335,7 +335,7 @@ // equalized by raising the regular method level in order to avoid OSRs during each // invocation of the method. if (osr_level == CompLevel_full_optimization && cur_level == CompLevel_full_profile) { - methodDataOop mdo = method->method_data(); + MethodData* mdo = method->method_data(); guarantee(mdo != NULL, "MDO should not be NULL"); if (mdo->invocation_count() >= 1) { next_level = CompLevel_full_optimization; @@ -348,7 +348,7 @@ } // Determine if we should do an OSR compilation of a given method. -CompLevel SimpleThresholdPolicy::loop_event(methodOop method, CompLevel cur_level) { +CompLevel SimpleThresholdPolicy::loop_event(Method* method, CompLevel cur_level) { CompLevel next_level = common(&SimpleThresholdPolicy::loop_predicate, method, cur_level); if (cur_level == CompLevel_none) { // If there is a live OSR method that means that we deopted to the interpreter diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/simpleThresholdPolicy.hpp --- a/src/share/vm/runtime/simpleThresholdPolicy.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/simpleThresholdPolicy.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,7 @@ #define SHARE_VM_RUNTIME_SIMPLETHRESHOLDPOLICY_HPP #include "code/nmethod.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "runtime/compilationPolicy.hpp" #include "utilities/globalDefinitions.hpp" @@ -38,8 +38,8 @@ // Check if the counter is big enough and set carry (effectively infinity). inline void set_carry_if_necessary(InvocationCounter *counter); - // Set carry flags in the counters (in methodOop and MDO). - inline void handle_counter_overflow(methodOop method); + // Set carry flags in the counters (in Method* and MDO). + inline void handle_counter_overflow(Method* method); // Call and loop predicates determine whether a transition to a higher compilation // level should be performed (pointers to predicate functions are passed to common_TF(). // Predicates also take compiler load into account. @@ -47,14 +47,14 @@ bool call_predicate(int i, int b, CompLevel cur_level); bool loop_predicate(int i, int b, CompLevel cur_level); // Common transition function. Given a predicate determines if a method should transition to another level. - CompLevel common(Predicate p, methodOop method, CompLevel cur_level); + CompLevel common(Predicate p, Method* method, CompLevel cur_level); // Transition functions. // call_event determines if a method should be compiled at a different // level with a regular invocation entry. - CompLevel call_event(methodOop method, CompLevel cur_level); + CompLevel call_event(Method* method, CompLevel cur_level); // loop_event checks if a method should be OSR compiled at a different // level. - CompLevel loop_event(methodOop method, CompLevel cur_level); + CompLevel loop_event(Method* method, CompLevel cur_level); void print_counters(const char* prefix, methodHandle mh); protected: int c1_count() const { return _c1_count; } @@ -72,7 +72,7 @@ virtual void submit_compile(methodHandle mh, int bci, CompLevel level, JavaThread* thread); // Simple methods are as good being compiled with C1 as C2. // This function tells if it's such a function. - inline bool is_trivial(methodOop method); + inline bool is_trivial(Method* method); // Predicate helpers are used by .*_predicate() methods as well as others. // They check the given counter values, multiplied by the scale against the thresholds. @@ -80,7 +80,7 @@ template static inline bool loop_predicate_helper(int i, int b, double scale); // Get a compilation level for a given method. - static CompLevel comp_level(methodOop method) { + static CompLevel comp_level(Method* method) { nmethod *nm = method->code(); if (nm != NULL && nm->is_in_use()) { return (CompLevel)nm->comp_level(); @@ -100,15 +100,15 @@ } virtual CompLevel initial_compile_level() { return MIN2((CompLevel)TieredStopAtLevel, CompLevel_initial_compile); } virtual void do_safepoint_work() { } - virtual void delay_compilation(methodOop method) { } - virtual void disable_compilation(methodOop method) { } + virtual void delay_compilation(Method* method) { } + virtual void disable_compilation(Method* method) { } virtual void reprofile(ScopeDesc* trap_scope, bool is_osr); virtual nmethod* event(methodHandle method, methodHandle inlinee, int branch_bci, int bci, CompLevel comp_level, nmethod* nm, JavaThread* thread); // Select task is called by CompileBroker. We should return a task or NULL. virtual CompileTask* select_task(CompileQueue* compile_queue); // Tell the runtime if we think a given method is adequately profiled. - virtual bool is_mature(methodOop method); + virtual bool is_mature(Method* method); // Initialize: set compiler thread count virtual void initialize(); virtual bool should_not_inline(ciEnv* env, ciMethod* callee) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/simpleThresholdPolicy.inline.hpp --- a/src/share/vm/runtime/simpleThresholdPolicy.inline.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/simpleThresholdPolicy.inline.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,10 +53,10 @@ // Simple methods are as good being compiled with C1 as C2. // Determine if a given method is such a case. -bool SimpleThresholdPolicy::is_trivial(methodOop method) { +bool SimpleThresholdPolicy::is_trivial(Method* method) { if (method->is_accessor()) return true; if (method->code() != NULL) { - methodDataOop mdo = method->method_data(); + MethodData* mdo = method->method_data(); if (mdo != NULL && mdo->num_loops() == 0 && (method->code_size() < 5 || (mdo->num_blocks() < 4) && (method->code_size() < 15))) { return !mdo->would_profile(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/stackValue.cpp --- a/src/share/vm/runtime/stackValue.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/stackValue.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -145,7 +145,7 @@ return new StackValue(value.p); } else if (sv->is_constant_oop()) { // constant oop - return new StackValue(((ConstantOopReadValue *)sv)->value()); + return new StackValue(sv->as_ConstantOopReadValue()->value()); #ifdef _LP64 } else if (sv->is_constant_double()) { // Constant double in a single stack slot diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/stubRoutines.hpp --- a/src/share/vm/runtime/stubRoutines.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/stubRoutines.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -240,7 +240,7 @@ address link, intptr_t* result, BasicType result_type, - methodOopDesc* method, + Method* method, address entry_point, intptr_t* parameters, int size_of_parameters, diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/sweeper.cpp --- a/src/share/vm/runtime/sweeper.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/sweeper.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,10 +24,12 @@ #include "precompiled.hpp" #include "code/codeCache.hpp" +#include "code/compiledIC.hpp" +#include "code/icBuffer.hpp" #include "code/nmethod.hpp" #include "compiler/compileBroker.hpp" #include "memory/resourceArea.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "runtime/atomic.hpp" #include "runtime/compilationPolicy.hpp" #include "runtime/mutexLocker.hpp" @@ -324,13 +326,32 @@ public: NMethodMarker(nmethod* nm) { _thread = CompilerThread::current(); + if (!nm->is_zombie() && !nm->is_unloaded()) { + // Only expose live nmethods for scanning _thread->set_scanned_nmethod(nm); } + } ~NMethodMarker() { _thread->set_scanned_nmethod(NULL); } }; +void NMethodSweeper::release_nmethod(nmethod *nm) { + // Clean up any CompiledICHolders + { + ResourceMark rm; + MutexLocker ml_patch(CompiledIC_lock); + RelocIterator iter(nm); + while (iter.next()) { + if (iter.type() == relocInfo::virtual_call_type) { + CompiledIC::cleanup_call_site(iter.virtual_call_reloc()); + } + } + } + + MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); + nm->flush(); +} void NMethodSweeper::process_nmethod(nmethod *nm) { assert(!CodeCache_lock->owned_by_self(), "just checking"); @@ -365,8 +386,7 @@ if (PrintMethodFlushing && Verbose) { tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (marked for reclamation) being flushed", nm->compile_id(), nm); } - MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); - nm->flush(); + release_nmethod(nm); } else { if (PrintMethodFlushing && Verbose) { tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (zombie) being marked for reclamation", nm->compile_id(), nm); @@ -400,10 +420,9 @@ if (PrintMethodFlushing && Verbose) tty->print_cr("### Nmethod %3d/" PTR_FORMAT " (unloaded) being made zombie", nm->compile_id(), nm); if (nm->is_osr_method()) { + SWEEP(nm); // No inline caches will ever point to osr methods, so we can just remove it - MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); - SWEEP(nm); - nm->flush(); + release_nmethod(nm); } else { nm->make_zombie(); _rescan = true; @@ -434,8 +453,8 @@ // saving the old code in a list in the CodeCache. Then // execution resumes. If a method so marked is not called by the second sweeper // stack traversal after the current one, the nmethod will be marked non-entrant and -// got rid of by normal sweeping. If the method is called, the methodOop's -// _code field is restored and the methodOop/nmethod +// got rid of by normal sweeping. If the method is called, the Method*'s +// _code field is restored and the Method*/nmethod // go back to their normal state. void NMethodSweeper::handle_full_code_cache(bool is_full) { // Only the first one to notice can advise us to start early cleaning diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/sweeper.hpp --- a/src/share/vm/runtime/sweeper.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/sweeper.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -52,6 +52,8 @@ static void process_nmethod(nmethod *nm); + static void release_nmethod(nmethod* nm); + static void log_sweep(const char* msg, const char* format = NULL, ...); public: diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/synchronizer.cpp --- a/src/share/vm/runtime/synchronizer.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/synchronizer.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -77,11 +77,11 @@ // Only bother with this argument setup if dtrace is available // TODO-FIXME: probes should not fire when caller is _blocked. assert() accordingly. -#define DTRACE_MONITOR_PROBE_COMMON(klassOop, thread) \ +#define DTRACE_MONITOR_PROBE_COMMON(obj, thread) \ char* bytes = NULL; \ int len = 0; \ jlong jtid = SharedRuntime::get_java_tid(thread); \ - Symbol* klassname = ((oop)(klassOop))->klass()->klass_part()->name(); \ + Symbol* klassname = ((oop)(obj))->klass()->name(); \ if (klassname != NULL) { \ bytes = (char*)klassname->bytes(); \ len = klassname->utf8_length(); \ @@ -93,19 +93,19 @@ HS_DTRACE_PROBE_DECL4(hotspot, monitor__waited, jlong, uintptr_t, char*, int); -#define DTRACE_MONITOR_WAIT_PROBE(monitor, klassOop, thread, millis) \ +#define DTRACE_MONITOR_WAIT_PROBE(monitor, obj, thread, millis) \ { \ if (DTraceMonitorProbes) { \ - DTRACE_MONITOR_PROBE_COMMON(klassOop, thread); \ + DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ HS_DTRACE_PROBE5(hotspot, monitor__wait, jtid, \ (monitor), bytes, len, (millis)); \ } \ } -#define DTRACE_MONITOR_PROBE(probe, monitor, klassOop, thread) \ +#define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread) \ { \ if (DTraceMonitorProbes) { \ - DTRACE_MONITOR_PROBE_COMMON(klassOop, thread); \ + DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ HS_DTRACE_PROBE4(hotspot, monitor__##probe, jtid, \ (uintptr_t)(monitor), bytes, len); \ } \ @@ -113,10 +113,10 @@ #else /* USDT2 */ -#define DTRACE_MONITOR_WAIT_PROBE(monitor, klassOop, thread, millis) \ +#define DTRACE_MONITOR_WAIT_PROBE(monitor, obj, thread, millis) \ { \ if (DTraceMonitorProbes) { \ - DTRACE_MONITOR_PROBE_COMMON(klassOop, thread); \ + DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ HOTSPOT_MONITOR_WAIT(jtid, \ (uintptr_t)(monitor), bytes, len, (millis)); \ } \ @@ -124,10 +124,10 @@ #define HOTSPOT_MONITOR_PROBE_waited HOTSPOT_MONITOR_PROBE_WAITED -#define DTRACE_MONITOR_PROBE(probe, monitor, klassOop, thread) \ +#define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread) \ { \ if (DTraceMonitorProbes) { \ - DTRACE_MONITOR_PROBE_COMMON(klassOop, thread); \ + DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ HOTSPOT_MONITOR_PROBE_##probe(jtid, /* probe = waited */ \ (uintptr_t)(monitor), bytes, len); \ } \ @@ -136,8 +136,8 @@ #endif /* USDT2 */ #else // ndef DTRACE_ENABLED -#define DTRACE_MONITOR_WAIT_PROBE(klassOop, thread, millis, mon) {;} -#define DTRACE_MONITOR_PROBE(probe, klassOop, thread, mon) {;} +#define DTRACE_MONITOR_WAIT_PROBE(obj, thread, millis, mon) {;} +#define DTRACE_MONITOR_PROBE(probe, obj, thread, mon) {;} #endif // ndef DTRACE_ENABLED diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/thread.cpp --- a/src/share/vm/runtime/thread.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/thread.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -34,6 +34,7 @@ #include "interpreter/oopMapCache.hpp" #include "jvmtifiles/jvmtiEnv.hpp" #include "memory/gcLocker.inline.hpp" +#include "memory/metaspaceShared.hpp" #include "memory/oopFactory.hpp" #include "memory/universe.inline.hpp" #include "oops/instanceKlass.hpp" @@ -219,6 +220,7 @@ set_osthread(NULL); set_resource_area(new (mtThread)ResourceArea()); set_handle_area(new (mtThread) HandleArea(NULL)); + set_metadata_handles(new (ResourceObj::C_HEAP, mtClass) GrowableArray(300, true)); set_active_handles(NULL); set_free_handle_block(NULL); set_last_handle_mark(NULL); @@ -346,6 +348,7 @@ ParkEvent::Release (_MuxEvent) ; _MuxEvent = NULL ; delete handle_area(); + delete metadata_handles(); // osthread() can be NULL, if creation of thread failed. if (osthread() != NULL) os::free_thread(osthread()); @@ -817,6 +820,14 @@ // no nmethods in a generic thread... } +void Thread::metadata_do(void f(Metadata*)) { + if (metadata_handles() != NULL) { + for (int i = 0; i< metadata_handles()->length(); i++) { + f(metadata_handles()->at(i)); + } + } +} + void Thread::print_on(outputStream* st) const { // get_priority assumes osthread initialized if (osthread() != NULL) { @@ -916,6 +927,8 @@ bool Thread::is_in_stack(address adr) const { assert(Thread::current() == this, "is_in_stack can only be called from current thread"); address end = os::current_stack_pointer(); + // Allow non Java threads to call this without stack_base + if (_stack_base == NULL) return true; if (stack_base() >= adr && adr >= end) return true; return false; @@ -937,14 +950,14 @@ } static void initialize_class(Symbol* class_name, TRAPS) { - klassOop klass = SystemDictionary::resolve_or_fail(class_name, true, CHECK); - instanceKlass::cast(klass)->initialize(CHECK); + Klass* klass = SystemDictionary::resolve_or_fail(class_name, true, CHECK); + InstanceKlass::cast(klass)->initialize(CHECK); } // Creates the initial ThreadGroup static Handle create_initial_thread_group(TRAPS) { - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_ThreadGroup(), true, CHECK_NH); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_ThreadGroup(), true, CHECK_NH); instanceKlassHandle klass (THREAD, k); Handle system_instance = klass->allocate_instance_handle(CHECK_NH); @@ -977,7 +990,7 @@ // Creates the initial Thread static oop create_initial_thread(Handle thread_group, JavaThread* thread, TRAPS) { - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK_NULL); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK_NULL); instanceKlassHandle klass (THREAD, k); instanceHandle thread_oop = klass->allocate_instance_handle(CHECK_NULL); @@ -999,7 +1012,7 @@ } static void call_initializeSystemClass(TRAPS) { - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK); instanceKlassHandle klass (THREAD, k); JavaValue result(T_VOID); @@ -1011,11 +1024,11 @@ // extract the JRE name from sun.misc.Version.java_runtime_name static const char* get_java_runtime_name(TRAPS) { - klassOop k = SystemDictionary::find(vmSymbols::sun_misc_Version(), + Klass* k = SystemDictionary::find(vmSymbols::sun_misc_Version(), Handle(), Handle(), CHECK_AND_CLEAR_NULL); fieldDescriptor fd; bool found = k != NULL && - instanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_name_name(), + InstanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_name_name(), vmSymbols::string_signature(), &fd); if (found) { oop name_oop = k->java_mirror()->obj_field(fd.offset()); @@ -1033,7 +1046,7 @@ // General purpose hook into Java code, run once when the VM is initialized. // The Java library method itself may be changed independently from the VM. static void call_postVMInitHook(TRAPS) { - klassOop k = SystemDictionary::PostVMInitHook_klass(); + Klass* k = SystemDictionary::PostVMInitHook_klass(); instanceKlassHandle klass (THREAD, k); if (klass.not_null()) { JavaValue result(T_VOID); @@ -1049,7 +1062,7 @@ const char *vm_info = VM_Version::vm_info_string(); // java.lang.System class - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK); instanceKlassHandle klass (THREAD, k); // setProperty arguments @@ -1074,7 +1087,7 @@ assert(thread_group.not_null(), "thread group should be specified"); assert(threadObj() == NULL, "should only create Java thread object once"); - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK); instanceKlassHandle klass (THREAD, k); instanceHandle thread_oop = klass->allocate_instance_handle(CHECK); @@ -1982,7 +1995,7 @@ frame f = last_frame(); tty->print(" (pc: " INTPTR_FORMAT " sp: " INTPTR_FORMAT " )", f.pc(), f.sp()); } - tty->print_cr(" of type: %s", instanceKlass::cast(_pending_async_exception->klass())->external_name()); + tty->print_cr(" of type: %s", InstanceKlass::cast(_pending_async_exception->klass())->external_name()); } _pending_async_exception = NULL; clear_has_async_exception(); @@ -2103,10 +2116,10 @@ if (TraceExceptions) { ResourceMark rm; - tty->print_cr("Pending Async. exception installed of type: %s", instanceKlass::cast(_pending_async_exception->klass())->external_name()); + tty->print_cr("Pending Async. exception installed of type: %s", InstanceKlass::cast(_pending_async_exception->klass())->external_name()); } // for AbortVMOnException flag - NOT_PRODUCT(Exceptions::debug_check_abort(instanceKlass::cast(_pending_async_exception->klass())->external_name())); + NOT_PRODUCT(Exceptions::debug_check_abort(InstanceKlass::cast(_pending_async_exception->klass())->external_name())); } } @@ -2656,7 +2669,6 @@ // around using this function f->do_oop((oop*) &_threadObj); f->do_oop((oop*) &_vm_result); - f->do_oop((oop*) &_vm_result_2); f->do_oop((oop*) &_exception_oop); f->do_oop((oop*) &_pending_async_exception); @@ -2679,6 +2691,22 @@ } } +void JavaThread::metadata_do(void f(Metadata*)) { + Thread::metadata_do(f); + if (has_last_Java_frame()) { + // Traverse the execution stack to call f() on the methods in the stack + for(StackFrameStream fst(this); !fst.is_done(); fst.next()) { + fst.current()->metadata_do(f); + } + } else if (is_Compiler_thread()) { + // need to walk ciMetadata in current compile tasks to keep alive. + CompilerThread* ct = (CompilerThread*)this; + if (ct->env() != NULL) { + ct->env()->metadata_do(f); + } + } +} + // Printing const char* _get_thread_state_name(JavaThreadState _thread_state) { switch (_thread_state) { @@ -2869,7 +2897,7 @@ Handle thread_oop(Thread::current(), JNIHandles::resolve_non_null(jni_thread)); - assert(instanceKlass::cast(thread_oop->klass())->is_linked(), + assert(InstanceKlass::cast(thread_oop->klass())->is_linked(), "must be initialized"); set_threadObj(thread_oop()); java_lang_Thread::set_thread(thread_oop(), this); @@ -3070,7 +3098,7 @@ } -klassOop JavaThread::security_get_caller_class(int depth) { +Klass* JavaThread::security_get_caller_class(int depth) { vframeStream vfst(this); vfst.security_get_caller_frame(depth); if (!vfst.at_end()) { @@ -3123,6 +3151,9 @@ int Threads::_number_of_non_daemon_threads = 0; int Threads::_return_code = 0; size_t JavaThread::_stack_size_at_create = 0; +#ifdef ASSERT +bool Threads::_vm_complete = false; +#endif // All JavaThreads #define ALL_JAVA_THREADS(X) for (JavaThread* X = _thread_list; X; X = X->next()) @@ -3320,9 +3351,8 @@ // At this point, the Universe is initialized, but we have not executed // any byte code. Now is a good time (the only time) to dump out the // internal state of the JVM for sharing. - if (DumpSharedSpaces) { - Universe::heap()->preload_and_dump(CHECK_0); + MetaspaceShared::preload_and_dump(CHECK_0); ShouldNotReachHere(); } @@ -3351,10 +3381,10 @@ // Forcibly initialize java/util/HashMap and mutate the private // static final "frontCacheEnabled" field before we start creating instances #ifdef ASSERT - klassOop tmp_k = SystemDictionary::find(vmSymbols::java_util_HashMap(), Handle(), Handle(), CHECK_0); + Klass* tmp_k = SystemDictionary::find(vmSymbols::java_util_HashMap(), Handle(), Handle(), CHECK_0); assert(tmp_k == NULL, "java/util/HashMap should not be loaded yet"); #endif - klassOop k_o = SystemDictionary::resolve_or_null(vmSymbols::java_util_HashMap(), Handle(), Handle(), CHECK_0); + Klass* k_o = SystemDictionary::resolve_or_null(vmSymbols::java_util_HashMap(), Handle(), Handle(), CHECK_0); KlassHandle k = KlassHandle(THREAD, k_o); guarantee(k.not_null(), "Must find java/util/HashMap"); instanceKlassHandle ik = instanceKlassHandle(THREAD, k()); @@ -3369,7 +3399,7 @@ if (UseStringCache) { // Forcibly initialize java/lang/StringValue and mutate the private // static final "stringCacheEnabled" field before we start creating instances - klassOop k_o = SystemDictionary::resolve_or_null(vmSymbols::java_lang_StringValue(), Handle(), Handle(), CHECK_0); + Klass* k_o = SystemDictionary::resolve_or_null(vmSymbols::java_lang_StringValue(), Handle(), Handle(), CHECK_0); // Possible that StringValue isn't present: if so, silently don't break if (k_o != NULL) { KlassHandle k = KlassHandle(THREAD, k_o); @@ -3574,6 +3604,9 @@ os::init_3(); create_vm_timer.end(); +#ifdef ASSERT + _vm_complete = true; +#endif return JNI_OK; } @@ -3781,7 +3814,7 @@ } EXCEPTION_MARK; - klassOop k = + Klass* k = SystemDictionary::resolve_or_null(vmSymbols::java_lang_Shutdown(), THREAD); if (k != NULL) { @@ -3840,6 +3873,9 @@ bool Threads::destroy_vm() { JavaThread* thread = JavaThread::current(); +#ifdef ASSERT + _vm_complete = false; +#endif // Wait until we are the last non-daemon thread to execute { MutexLocker nu(Threads_lock); while (Threads::number_of_non_daemon_threads() > 1 ) @@ -4100,6 +4136,12 @@ VMThread::vm_thread()->nmethods_do(cf); } +void Threads::metadata_do(void f(Metadata*)) { + ALL_JAVA_THREADS(p) { + p->metadata_do(f); + } +} + void Threads::gc_epilogue() { ALL_JAVA_THREADS(p) { p->gc_epilogue(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/thread.hpp --- a/src/share/vm/runtime/thread.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/thread.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -417,6 +417,9 @@ HandleArea* handle_area() const { return _handle_area; } void set_handle_area(HandleArea* area) { _handle_area = area; } + GrowableArray* metadata_handles() const { return _metadata_handles; } + void set_metadata_handles(GrowableArray* handles){ _metadata_handles = handles; } + // Thread-Local Allocation Buffer (TLAB) support ThreadLocalAllocBuffer& tlab() { return _tlab; } void initialize_tlab() { @@ -500,6 +503,9 @@ // Sweeper support void nmethods_do(CodeBlobClosure* cf); + // jvmtiRedefineClasses support + void metadata_do(void f(Metadata*)); + // Used by fast lock support virtual bool is_lock_owned(address adr) const; @@ -520,6 +526,7 @@ // Thread local handle area for allocation of handles within the VM HandleArea* _handle_area; + GrowableArray* _metadata_handles; // Support for stack overflow handling, get_thread, etc. address _stack_base; @@ -790,18 +797,18 @@ GrowableArray* _deferred_locals_updates; // Handshake value for fixing 6243940. We need a place for the i2c - // adapter to store the callee methodOop. This value is NEVER live + // adapter to store the callee Method*. This value is NEVER live // across a gc point so it does NOT have to be gc'd // The handshake is open ended since we can't be certain that it will // be NULLed. This is because we rarely ever see the race and end up // in handle_wrong_method which is the backend of the handshake. See // code in i2c adapters and handle_wrong_method. - methodOop _callee_target; + Method* _callee_target; - // Oop results of VM runtime calls - oop _vm_result; // Used to pass back an oop result into Java code, GC-preserved - oop _vm_result_2; // Used to pass back an oop result into Java code, GC-preserved + // Used to pass back results to the interpreter or generated code running Java code. + oop _vm_result; // oop result is GC-preserved + Metadata* _vm_result_2; // non-oop result // See ReduceInitialCardMarks: this holds the precise space interval of // the most recent slow path allocation for which compiled code has @@ -1218,15 +1225,15 @@ void set_deopt_nmethod(nmethod* nm) { _deopt_nmethod = nm; } nmethod* deopt_nmethod() { return _deopt_nmethod; } - methodOop callee_target() const { return _callee_target; } - void set_callee_target (methodOop x) { _callee_target = x; } + Method* callee_target() const { return _callee_target; } + void set_callee_target (Method* x) { _callee_target = x; } // Oop results of vm runtime calls oop vm_result() const { return _vm_result; } void set_vm_result (oop x) { _vm_result = x; } - oop vm_result_2() const { return _vm_result_2; } - void set_vm_result_2 (oop x) { _vm_result_2 = x; } + Metadata* vm_result_2() const { return _vm_result_2; } + void set_vm_result_2 (Metadata* x) { _vm_result_2 = x; } MemRegion deferred_card_mark() const { return _deferred_card_mark; } void set_deferred_card_mark(MemRegion mr) { _deferred_card_mark = mr; } @@ -1389,6 +1396,9 @@ // Sweeper operations void nmethods_do(CodeBlobClosure* cf); + // RedefineClasses Support + void metadata_do(void f(Metadata*)); + // Memory management operations void gc_epilogue(); void gc_prologue(); @@ -1419,7 +1429,7 @@ // Returns method at 'depth' java or native frames down the stack // Used for security checks - klassOop security_get_caller_class(int depth); + Klass* security_get_caller_class(int depth); // Print stack trace in external format void print_stack_on(outputStream* st); @@ -1836,6 +1846,9 @@ static int _number_of_threads; static int _number_of_non_daemon_threads; static int _return_code; +#ifdef ASSERT + static bool _vm_complete; +#endif public: // Thread management @@ -1883,8 +1896,14 @@ // Sweeper static void nmethods_do(CodeBlobClosure* cf); + // RedefineClasses support + static void metadata_do(void f(Metadata*)); + static void gc_epilogue(); static void gc_prologue(); +#ifdef ASSERT + static bool is_vm_complete() { return _vm_complete; } +#endif // Verification static void verify(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/unhandledOops.cpp --- a/src/share/vm/runtime/unhandledOops.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/unhandledOops.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -84,7 +84,7 @@ void UnhandledOops::allow_unhandled_oop(oop* op) { assert (CheckUnhandledOops, "should only be called with checking option"); - int i = _oop_list->find_at_end(op, match_oop_entry); + int i = _oop_list->find_from_end(op, match_oop_entry); assert(i!=-1, "safe for gc oop not in unhandled_oop_list"); UnhandledOopEntry entry = _oop_list->at(i); @@ -106,7 +106,7 @@ tty->print_cr("u "INTPTR_FORMAT, op); } - int i = _oop_list->find_at_end(op, match_oop_entry); + int i = _oop_list->find_from_end(op, match_oop_entry); assert(i!=-1, "oop not in unhandled_oop_list"); _oop_list->remove_at(i); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/vframe.cpp --- a/src/share/vm/runtime/vframe.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/vframe.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -146,8 +146,8 @@ if (obj.not_null()) { st->print("\t- %s <" INTPTR_FORMAT "> ", lock_state, (address)obj()); if (obj->klass() == SystemDictionary::Class_klass()) { - klassOop target_klass = java_lang_Class::as_klassOop(obj()); - st->print_cr("(a java.lang.Class for %s)", instanceKlass::cast(target_klass)->external_name()); + Klass* target_klass = java_lang_Class::as_Klass(obj()); + st->print_cr("(a java.lang.Class for %s)", InstanceKlass::cast(target_klass)->external_name()); } else { Klass* k = Klass::cast(obj->klass()); st->print_cr("(a %s)", k->external_name()); @@ -161,7 +161,7 @@ // If this is the first frame, and java.lang.Object.wait(...) then print out the receiver. if (frame_count == 0) { if (method()->name() == vmSymbols::wait_name() && - instanceKlass::cast(method()->method_holder())->name() == vmSymbols::java_lang_Object()) { + InstanceKlass::cast(method()->method_holder())->name() == vmSymbols::java_lang_Object()) { StackValueCollection* locs = locals(); if (!locs->is_empty()) { StackValue* sv = locs->at(0); @@ -186,7 +186,7 @@ MonitorInfo* monitor = mons->at(index); if (monitor->eliminated() && is_compiled_frame()) { // Eliminated in compiled code if (monitor->owner_is_scalar_replaced()) { - Klass* k = Klass::cast(monitor->owner_klass()); + Klass* k = java_lang_Class::as_Klass(monitor->owner_klass()); st->print("\t- eliminated (a %s)", k->external_name()); } else { oop obj = monitor->owner(); @@ -249,7 +249,7 @@ return method()->bci_from(bcp()); } -methodOop interpretedVFrame::method() const { +Method* interpretedVFrame::method() const { return fr().interpreter_frame_method(); } @@ -527,7 +527,7 @@ MonitorInfo* monitor = list->at(index); tty->print("\t obj\t"); if (monitor->owner_is_scalar_replaced()) { - Klass* k = Klass::cast(monitor->owner_klass()); + Klass* k = java_lang_Class::as_Klass(monitor->owner_klass()); tty->print("( is scalar replaced %s)", k->external_name()); } else if (monitor->owner() == NULL) { tty->print("( null )"); @@ -546,14 +546,14 @@ void javaVFrame::print_value() const { - methodOop m = method(); - klassOop k = m->method_holder(); + Method* m = method(); + Klass* k = m->method_holder(); tty->print_cr("frame( sp=" INTPTR_FORMAT ", unextended_sp=" INTPTR_FORMAT ", fp=" INTPTR_FORMAT ", pc=" INTPTR_FORMAT ")", _fr.sp(), _fr.unextended_sp(), _fr.fp(), _fr.pc()); tty->print("%s.%s", Klass::cast(k)->internal_name(), m->name()->as_C_string()); if (!m->is_native()) { - Symbol* source_name = instanceKlass::cast(k)->source_file_name(); + Symbol* source_name = InstanceKlass::cast(k)->source_file_name(); int line_number = m->line_number_from_bci(bci()); if (source_name != NULL && (line_number != -1)) { tty->print("(%s:%d)", source_name->as_C_string(), line_number); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/vframe.hpp --- a/src/share/vm/runtime/vframe.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/vframe.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -106,7 +106,7 @@ class javaVFrame: public vframe { public: // JVM state - virtual methodOop method() const = 0; + virtual Method* method() const = 0; virtual int bci() const = 0; virtual StackValueCollection* locals() const = 0; virtual StackValueCollection* expressions() const = 0; @@ -158,7 +158,7 @@ class interpretedVFrame: public javaVFrame { public: // JVM state - methodOop method() const; + Method* method() const; int bci() const; StackValueCollection* locals() const; StackValueCollection* expressions() const; @@ -243,7 +243,7 @@ private: oop _owner; // the object owning the monitor BasicLock* _lock; - oop _owner_klass; // klass if owner was scalar replaced + oop _owner_klass; // klass (mirror) if owner was scalar replaced bool _eliminated; bool _owner_is_scalar_replaced; public: @@ -266,9 +266,9 @@ assert(!_owner_is_scalar_replaced, "should not be called for scalar replaced object"); return _owner; } - klassOop owner_klass() const { + oop owner_klass() const { assert(_owner_is_scalar_replaced, "should not be called for not scalar replaced object"); - return (klassOop)_owner_klass; + return _owner_klass; } BasicLock* lock() const { return _lock; } bool eliminated() const { return _eliminated; } @@ -286,7 +286,7 @@ int _sender_decode_offset; // Cached information - methodOop _method; + Method* _method; int _bci; // Should VM activations be ignored or not @@ -311,7 +311,7 @@ } // Accessors - methodOop method() const { return _method; } + Method* method() const { return _method; } int bci() const { return _bci; } intptr_t* frame_id() const { return _frame.id(); } address frame_pc() const { return _frame.pc(); } @@ -414,7 +414,7 @@ // Decode first part of scopeDesc DebugInfoReadStream buffer(nm(), decode_offset); _sender_decode_offset = buffer.read_int(); - _method = methodOop(buffer.read_oop()); + _method = buffer.read_method(); _bci = buffer.read_bci(); assert(_method->is_method(), "checking type of decoded method"); @@ -509,7 +509,7 @@ inline void vframeStreamCommon::fill_from_interpreter_frame() { - methodOop method = _frame.interpreter_frame_method(); + Method* method = _frame.interpreter_frame_method(); intptr_t bcx = _frame.interpreter_frame_bcx(); int bci = method->validate_bci_from_bcx(bcx); // 6379830 AsyncGetCallTrace sometimes feeds us wild frames. diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/vframeArray.cpp --- a/src/share/vm/runtime/vframeArray.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/vframeArray.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,7 @@ #include "memory/allocation.inline.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.inline.hpp" -#include "oops/methodDataOop.hpp" +#include "oops/methodData.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiThreadState.hpp" #include "runtime/handles.inline.hpp" @@ -299,7 +299,7 @@ } iframe()->interpreter_frame_set_bcx((intptr_t)bcp); // cannot use bcp because frame is not initialized yet if (ProfileInterpreter) { - methodDataOop mdo = method()->method_data(); + MethodData* mdo = method()->method_data(); if (mdo != NULL) { int bci = iframe()->interpreter_frame_bci(); if (use_next_mdp) ++bci; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/vframeArray.hpp --- a/src/share/vm/runtime/vframeArray.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/vframeArray.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -54,7 +54,7 @@ frame _frame; // the interpreter frame we will unpack into int _bci; // raw bci for this vframe bool _reexecute; // whether sould we reexecute this bytecode - methodOop _method; // the method for this vframe + Method* _method; // the method for this vframe MonitorChunk* _monitors; // active monitors for this vframe StackValueCollection* _locals; StackValueCollection* _expressions; @@ -68,7 +68,7 @@ int raw_bci(void) const { return _bci; } bool should_reexecute(void) const { return _reexecute; } - methodOop method(void) const { return _method; } + Method* method(void) const { return _method; } MonitorChunk* monitors(void) const { return _monitors; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/vframe_hp.cpp --- a/src/share/vm/runtime/vframe_hp.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/vframe_hp.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -196,7 +196,7 @@ // Natives has no scope if (scope() == NULL) { nmethod* nm = code(); - methodOop method = nm->method(); + Method* method = nm->method(); assert(method->is_native(), ""); if (!method->is_synchronized()) { return new GrowableArray(0); @@ -226,8 +226,9 @@ // Put klass for scalar replaced object. ScopeValue* kv = ((ObjectValue *)ov)->klass(); assert(kv->is_constant_oop(), "klass should be oop constant for scalar replaced object"); - KlassHandle k(((ConstantOopReadValue*)kv)->value()()); - result->push(new MonitorInfo(k->as_klassOop(), resolve_monitor_lock(mv->basic_lock()), + Handle k(((ConstantOopReadValue*)kv)->value()()); + assert(java_lang_Class::is_instance(k()), "must be"); + result->push(new MonitorInfo(k(), resolve_monitor_lock(mv->basic_lock()), mv->eliminated(), true)); } else { result->push(new MonitorInfo(owner_sv->get_obj()(), resolve_monitor_lock(mv->basic_lock()), @@ -267,14 +268,14 @@ } -methodOop compiledVFrame::method() const { +Method* compiledVFrame::method() const { if (scope() == NULL) { // native nmethods have no scope the method is implied nmethod* nm = code(); assert(nm->is_native_method(), "must be native"); return nm->method(); } - return scope()->method()(); + return scope()->method(); } @@ -318,7 +319,7 @@ } } -jvmtiDeferredLocalVariableSet::jvmtiDeferredLocalVariableSet(methodOop method, int bci, intptr_t* id) { +jvmtiDeferredLocalVariableSet::jvmtiDeferredLocalVariableSet(Method* method, int bci, intptr_t* id) { _method = method; _bci = bci; _id = id; @@ -353,8 +354,8 @@ } void jvmtiDeferredLocalVariableSet::oops_do(OopClosure* f) { - - f->do_oop((oop*) &_method); + // The Method* is on the stack so a live activation keeps it alive + // either by mirror in interpreter or code in compiled code. for ( int i = 0; i < locals()->length(); i++ ) { if ( locals()->at(i)->type() == T_OBJECT) { f->do_oop(locals()->at(i)->oop_addr()); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/vframe_hp.hpp --- a/src/share/vm/runtime/vframe_hp.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/vframe_hp.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ class compiledVFrame: public javaVFrame { public: // JVM state - methodOop method() const; + Method* method() const; int bci() const; bool should_reexecute() const; StackValueCollection* locals() const; @@ -92,14 +92,14 @@ class jvmtiDeferredLocalVariableSet : public CHeapObj { private: - methodOop _method; // must be GC'd + Method* _method; int _bci; intptr_t* _id; GrowableArray* _locals; public: // JVM state - methodOop method() const { return _method; } + Method* method() const { return _method; } int bci() const { return _bci; } intptr_t* id() const { return _id; } GrowableArray* locals() const { return _locals; } @@ -111,7 +111,7 @@ void oops_do(OopClosure* f); // constructor - jvmtiDeferredLocalVariableSet(methodOop method, int bci, intptr_t* id); + jvmtiDeferredLocalVariableSet(Method* method, int bci, intptr_t* id); // destructor ~jvmtiDeferredLocalVariableSet(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/virtualspace.cpp --- a/src/share/vm/runtime/virtualspace.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/virtualspace.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -155,38 +155,27 @@ return true; } -ReservedSpace::ReservedSpace(const size_t prefix_size, - const size_t prefix_align, - const size_t suffix_size, +ReservedSpace::ReservedSpace(const size_t suffix_size, const size_t suffix_align, char* requested_address, const size_t noaccess_prefix) { - assert(prefix_size != 0, "sanity"); - assert(prefix_align != 0, "sanity"); assert(suffix_size != 0, "sanity"); assert(suffix_align != 0, "sanity"); - assert((prefix_size & (prefix_align - 1)) == 0, - "prefix_size not divisible by prefix_align"); assert((suffix_size & (suffix_align - 1)) == 0, "suffix_size not divisible by suffix_align"); - assert((suffix_align & (prefix_align - 1)) == 0, - "suffix_align not divisible by prefix_align"); // Assert that if noaccess_prefix is used, it is the same as prefix_align. - assert(noaccess_prefix == 0 || - noaccess_prefix == prefix_align, "noaccess prefix wrong"); - - // Add in noaccess_prefix to prefix_size; - const size_t adjusted_prefix_size = prefix_size + noaccess_prefix; + // Add in noaccess_prefix to prefix + const size_t adjusted_prefix_size = noaccess_prefix; const size_t size = adjusted_prefix_size + suffix_size; // On systems where the entire region has to be reserved and committed up // front, the compound alignment normally done by this method is unnecessary. const bool try_reserve_special = UseLargePages && - prefix_align == os::large_page_size(); + suffix_align == os::large_page_size(); if (!os::can_commit_large_page_memory() && try_reserve_special) { - initialize(size, prefix_align, true, requested_address, noaccess_prefix, + initialize(size, suffix_align, true, requested_address, noaccess_prefix, false); return; } @@ -209,12 +198,11 @@ addr = NULL; } } else { - addr = os::reserve_memory(size, NULL, prefix_align); + addr = os::reserve_memory(size, NULL, suffix_align); } if (addr == NULL) return; - // Check whether the result has the needed alignment (unlikely unless - // prefix_align < suffix_align). + // Check whether the result has the needed alignment const size_t ofs = (size_t(addr) + adjusted_prefix_size) & (suffix_align - 1); if (ofs != 0) { // Wrong alignment. Release, allocate more space and do manual alignment. @@ -229,12 +217,12 @@ } const size_t extra = MAX2(ofs, suffix_align - ofs); - addr = reserve_and_align(size + extra, adjusted_prefix_size, prefix_align, + addr = reserve_and_align(size + extra, adjusted_prefix_size, suffix_align, suffix_size, suffix_align); if (addr == NULL) { // Try an even larger region. If this fails, address space is exhausted. addr = reserve_and_align(size + suffix_align, adjusted_prefix_size, - prefix_align, suffix_size, suffix_align); + suffix_align, suffix_size, suffix_align); } if (requested_address != 0 && @@ -249,7 +237,7 @@ _base = addr; _size = size; - _alignment = prefix_align; + _alignment = suffix_align; _noaccess_prefix = noaccess_prefix; } @@ -499,21 +487,18 @@ protect_noaccess_prefix(size); } -ReservedHeapSpace::ReservedHeapSpace(const size_t prefix_size, - const size_t prefix_align, - const size_t suffix_size, - const size_t suffix_align, +ReservedHeapSpace::ReservedHeapSpace(const size_t heap_space_size, + const size_t alignment, char* requested_address) : - ReservedSpace(prefix_size, prefix_align, suffix_size, suffix_align, + ReservedSpace(heap_space_size, alignment, requested_address, (UseCompressedOops && (Universe::narrow_oop_base() != NULL) && Universe::narrow_oop_use_implicit_null_checks()) ? - lcm(os::vm_page_size(), prefix_align) : 0) { + lcm(os::vm_page_size(), alignment) : 0) { if (base() > 0) { MemTracker::record_virtual_memory_type((address)base(), mtJavaHeap); } - - protect_noaccess_prefix(prefix_size+suffix_size); + protect_noaccess_prefix(heap_space_size); } // Reserve space for code segment. Same as Java heap only we mark this as diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/virtualspace.hpp --- a/src/share/vm/runtime/virtualspace.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/virtualspace.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -79,8 +79,7 @@ ReservedSpace(size_t size, size_t alignment, bool large, char* requested_address = NULL, const size_t noaccess_prefix = 0); - ReservedSpace(const size_t prefix_size, const size_t prefix_align, - const size_t suffix_size, const size_t suffix_align, + ReservedSpace(const size_t suffix_size, const size_t suffix_align, char* requested_address, const size_t noaccess_prefix = 0); ReservedSpace(size_t size, size_t alignment, bool large, bool executable); @@ -130,7 +129,6 @@ ReservedHeapSpace(size_t size, size_t forced_base_alignment, bool large, char* requested_address); ReservedHeapSpace(const size_t prefix_size, const size_t prefix_align, - const size_t suffix_size, const size_t suffix_align, char* requested_address); }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/vmStructs.cpp --- a/src/share/vm/runtime/vmStructs.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/vmStructs.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -51,48 +51,37 @@ #include "interpreter/bytecodeInterpreter.hpp" #include "interpreter/bytecodes.hpp" #include "interpreter/interpreter.hpp" +#include "memory/allocation.hpp" #include "memory/cardTableRS.hpp" -#include "memory/compactPermGen.hpp" #include "memory/defNewGeneration.hpp" #include "memory/freeBlockDictionary.hpp" #include "memory/genCollectedHeap.hpp" #include "memory/generation.hpp" #include "memory/generationSpec.hpp" #include "memory/heap.hpp" -#include "memory/permGen.hpp" #include "memory/space.hpp" #include "memory/tenuredGeneration.hpp" #include "memory/universe.hpp" #include "memory/watermark.hpp" #include "oops/arrayKlass.hpp" -#include "oops/arrayKlassKlass.hpp" #include "oops/arrayOop.hpp" -#include "oops/compiledICHolderKlass.hpp" -#include "oops/compiledICHolderOop.hpp" -#include "oops/constMethodKlass.hpp" -#include "oops/constMethodOop.hpp" -#include "oops/constantPoolKlass.hpp" -#include "oops/constantPoolOop.hpp" -#include "oops/cpCacheKlass.hpp" -#include "oops/cpCacheOop.hpp" +#include "oops/compiledICHolder.hpp" +#include "oops/constMethod.hpp" +#include "oops/constantPool.hpp" +#include "oops/cpCache.hpp" +#include "oops/instanceClassLoaderKlass.hpp" #include "oops/instanceKlass.hpp" #include "oops/instanceMirrorKlass.hpp" -#include "oops/instanceKlassKlass.hpp" #include "oops/instanceOop.hpp" #include "oops/klass.hpp" -#include "oops/klassOop.hpp" #include "oops/markOop.hpp" -#include "oops/methodDataKlass.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodKlass.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/objArrayKlass.hpp" -#include "oops/objArrayKlassKlass.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "oops/symbol.hpp" #include "oops/typeArrayKlass.hpp" -#include "oops/typeArrayKlassKlass.hpp" #include "oops/typeArrayOop.hpp" #include "prims/jvmtiAgentThread.hpp" #include "runtime/arguments.hpp" @@ -107,6 +96,7 @@ #include "runtime/stubRoutines.hpp" #include "runtime/virtualspace.hpp" #include "runtime/vmStructs.hpp" +#include "utilities/array.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/hashtable.hpp" #ifdef TARGET_ARCH_x86 @@ -167,7 +157,6 @@ # include "vmStructs_bsd_zero.hpp" #endif #ifndef SERIALGC -#include "gc_implementation/concurrentMarkSweep/cmsPermGen.hpp" #include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp" #include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" #include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp" @@ -178,7 +167,6 @@ #include "gc_implementation/parallelScavenge/asPSYoungGen.hpp" #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" #include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psPermGen.hpp" #include "gc_implementation/parallelScavenge/psVirtualspace.hpp" #include "gc_implementation/parallelScavenge/psYoungGen.hpp" #include "gc_implementation/parallelScavenge/vmStructs_parallelgc.hpp" @@ -248,9 +236,9 @@ typedef Hashtable SymbolHashtable; typedef HashtableEntry SymbolHashtableEntry; typedef Hashtable StringHashtable; -typedef TwoOopHashtable klassOopTwoOopHashtable; -typedef Hashtable klassOopHashtable; -typedef HashtableEntry klassHashtableEntry; +typedef TwoOopHashtable KlassTwoOopHashtable; +typedef Hashtable KlassHashtable; +typedef HashtableEntry KlassHashtableEntry; typedef TwoOopHashtable SymbolTwoOopHashtable; //-------------------------------------------------------------------------------- @@ -273,131 +261,126 @@ last_entry) \ \ /******************************************************************/ \ - /* OopDesc and Klass hierarchies (NOTE: methodDataOop incomplete) */ \ + /* OopDesc and Klass hierarchies (NOTE: MethodData* incomplete) */ \ /******************************************************************/ \ \ volatile_nonstatic_field(oopDesc, _mark, markOop) \ - volatile_nonstatic_field(oopDesc, _metadata._klass, wideKlassOop) \ + volatile_nonstatic_field(oopDesc, _metadata._klass, Klass*) \ volatile_nonstatic_field(oopDesc, _metadata._compressed_klass, narrowOop) \ static_field(oopDesc, _bs, BarrierSet*) \ nonstatic_field(arrayKlass, _dimension, int) \ - volatile_nonstatic_field(arrayKlass, _higher_dimension, klassOop) \ - volatile_nonstatic_field(arrayKlass, _lower_dimension, klassOop) \ + volatile_nonstatic_field(arrayKlass, _higher_dimension, Klass*) \ + volatile_nonstatic_field(arrayKlass, _lower_dimension, Klass*) \ nonstatic_field(arrayKlass, _vtable_len, int) \ nonstatic_field(arrayKlass, _alloc_size, juint) \ nonstatic_field(arrayKlass, _component_mirror, oop) \ - nonstatic_field(compiledICHolderKlass, _alloc_size, juint) \ - nonstatic_field(compiledICHolderOopDesc, _holder_method, methodOop) \ - nonstatic_field(compiledICHolderOopDesc, _holder_klass, klassOop) \ - nonstatic_field(constantPoolOopDesc, _tags, typeArrayOop) \ - nonstatic_field(constantPoolOopDesc, _cache, constantPoolCacheOop) \ - nonstatic_field(constantPoolOopDesc, _pool_holder, klassOop) \ - nonstatic_field(constantPoolOopDesc, _operands, typeArrayOop) \ - nonstatic_field(constantPoolOopDesc, _length, int) \ - nonstatic_field(constantPoolCacheOopDesc, _length, int) \ - nonstatic_field(constantPoolCacheOopDesc, _constant_pool, constantPoolOop) \ - nonstatic_field(instanceKlass, _array_klasses, klassOop) \ - nonstatic_field(instanceKlass, _methods, objArrayOop) \ - nonstatic_field(instanceKlass, _method_ordering, typeArrayOop) \ - nonstatic_field(instanceKlass, _local_interfaces, objArrayOop) \ - nonstatic_field(instanceKlass, _transitive_interfaces, objArrayOop) \ - nonstatic_field(instanceKlass, _fields, typeArrayOop) \ - nonstatic_field(instanceKlass, _java_fields_count, u2) \ - nonstatic_field(instanceKlass, _constants, constantPoolOop) \ - nonstatic_field(instanceKlass, _class_loader, oop) \ - nonstatic_field(instanceKlass, _protection_domain, oop) \ - nonstatic_field(instanceKlass, _signers, objArrayOop) \ - nonstatic_field(instanceKlass, _source_file_name, Symbol*) \ - nonstatic_field(instanceKlass, _source_debug_extension, char*) \ - nonstatic_field(instanceKlass, _inner_classes, typeArrayOop) \ - nonstatic_field(instanceKlass, _nonstatic_field_size, int) \ - nonstatic_field(instanceKlass, _static_field_size, int) \ - nonstatic_field(instanceKlass, _static_oop_field_count, u2) \ - nonstatic_field(instanceKlass, _nonstatic_oop_map_size, int) \ - nonstatic_field(instanceKlass, _is_marked_dependent, bool) \ - nonstatic_field(instanceKlass, _minor_version, u2) \ - nonstatic_field(instanceKlass, _major_version, u2) \ - nonstatic_field(instanceKlass, _init_state, u1) \ - nonstatic_field(instanceKlass, _init_thread, Thread*) \ - nonstatic_field(instanceKlass, _vtable_len, int) \ - nonstatic_field(instanceKlass, _itable_len, int) \ - nonstatic_field(instanceKlass, _reference_type, u1) \ - volatile_nonstatic_field(instanceKlass, _oop_map_cache, OopMapCache*) \ - nonstatic_field(instanceKlass, _jni_ids, JNIid*) \ - nonstatic_field(instanceKlass, _osr_nmethods_head, nmethod*) \ - nonstatic_field(instanceKlass, _breakpoints, BreakpointInfo*) \ - nonstatic_field(instanceKlass, _generic_signature, Symbol*) \ - nonstatic_field(instanceKlass, _methods_jmethod_ids, jmethodID*) \ - nonstatic_field(instanceKlass, _methods_cached_itable_indices, int*) \ - volatile_nonstatic_field(instanceKlass, _idnum_allocated_count, u2) \ - nonstatic_field(instanceKlass, _class_annotations, typeArrayOop) \ - nonstatic_field(instanceKlass, _fields_annotations, objArrayOop) \ - nonstatic_field(instanceKlass, _methods_annotations, objArrayOop) \ - nonstatic_field(instanceKlass, _methods_parameter_annotations, objArrayOop) \ - nonstatic_field(instanceKlass, _methods_default_annotations, objArrayOop) \ - nonstatic_field(instanceKlass, _dependencies, nmethodBucket*) \ + nonstatic_field(CompiledICHolder, _holder_method, Method*) \ + nonstatic_field(CompiledICHolder, _holder_klass, Klass*) \ + nonstatic_field(ConstantPool, _tags, Array*) \ + nonstatic_field(ConstantPool, _cache, ConstantPoolCache*) \ + nonstatic_field(ConstantPool, _pool_holder, Klass*) \ + nonstatic_field(ConstantPool, _operands, Array*) \ + nonstatic_field(ConstantPool, _length, int) \ + nonstatic_field(ConstantPool, _resolved_references, jobject) \ + nonstatic_field(ConstantPool, _reference_map, Array*) \ + nonstatic_field(ConstantPoolCache, _length, int) \ + nonstatic_field(ConstantPoolCache, _constant_pool, ConstantPool*) \ + nonstatic_field(InstanceKlass, _array_klasses, Klass*) \ + nonstatic_field(InstanceKlass, _methods, Array*) \ + nonstatic_field(InstanceKlass, _local_interfaces, Array*) \ + nonstatic_field(InstanceKlass, _transitive_interfaces, Array*) \ + nonstatic_field(InstanceKlass, _fields, Array*) \ + nonstatic_field(InstanceKlass, _java_fields_count, u2) \ + nonstatic_field(InstanceKlass, _constants, ConstantPool*) \ + nonstatic_field(InstanceKlass, _class_loader_data, ClassLoaderData*) \ + nonstatic_field(InstanceKlass, _protection_domain, oop) \ + nonstatic_field(InstanceKlass, _signers, objArrayOop) \ + nonstatic_field(InstanceKlass, _source_file_name, Symbol*) \ + nonstatic_field(InstanceKlass, _source_debug_extension, char*) \ + nonstatic_field(InstanceKlass, _inner_classes, Array*) \ + nonstatic_field(InstanceKlass, _nonstatic_field_size, int) \ + nonstatic_field(InstanceKlass, _static_field_size, int) \ + nonstatic_field(InstanceKlass, _static_oop_field_count, u2) \ + nonstatic_field(InstanceKlass, _nonstatic_oop_map_size, int) \ + nonstatic_field(InstanceKlass, _is_marked_dependent, bool) \ + nonstatic_field(InstanceKlass, _minor_version, u2) \ + nonstatic_field(InstanceKlass, _major_version, u2) \ + nonstatic_field(InstanceKlass, _init_state, u1) \ + nonstatic_field(InstanceKlass, _init_thread, Thread*) \ + nonstatic_field(InstanceKlass, _vtable_len, int) \ + nonstatic_field(InstanceKlass, _itable_len, int) \ + nonstatic_field(InstanceKlass, _reference_type, u1) \ + volatile_nonstatic_field(InstanceKlass, _oop_map_cache, OopMapCache*) \ + nonstatic_field(InstanceKlass, _jni_ids, JNIid*) \ + nonstatic_field(InstanceKlass, _osr_nmethods_head, nmethod*) \ + nonstatic_field(InstanceKlass, _breakpoints, BreakpointInfo*) \ + nonstatic_field(InstanceKlass, _generic_signature, Symbol*) \ + nonstatic_field(InstanceKlass, _methods_jmethod_ids, jmethodID*) \ + nonstatic_field(InstanceKlass, _methods_cached_itable_indices, int*) \ + volatile_nonstatic_field(InstanceKlass, _idnum_allocated_count, u2) \ + nonstatic_field(InstanceKlass, _annotations, Annotations*) \ + nonstatic_field(InstanceKlass, _dependencies, nmethodBucket*) \ nonstatic_field(nmethodBucket, _nmethod, nmethod*) \ nonstatic_field(nmethodBucket, _count, int) \ nonstatic_field(nmethodBucket, _next, nmethodBucket*) \ + nonstatic_field(InstanceKlass, _method_ordering, Array*) \ nonstatic_field(Klass, _super_check_offset, juint) \ - nonstatic_field(Klass, _secondary_super_cache, klassOop) \ - nonstatic_field(Klass, _secondary_supers, objArrayOop) \ - nonstatic_field(Klass, _primary_supers[0], klassOop) \ + nonstatic_field(Klass, _secondary_super_cache, Klass*) \ + nonstatic_field(Klass, _secondary_supers, Array*) \ + nonstatic_field(Klass, _primary_supers[0], Klass*) \ nonstatic_field(Klass, _java_mirror, oop) \ nonstatic_field(Klass, _modifier_flags, jint) \ - nonstatic_field(Klass, _super, klassOop) \ + nonstatic_field(Klass, _super, Klass*) \ nonstatic_field(Klass, _layout_helper, jint) \ nonstatic_field(Klass, _name, Symbol*) \ nonstatic_field(Klass, _access_flags, AccessFlags) \ - nonstatic_field(Klass, _subklass, klassOop) \ - nonstatic_field(Klass, _next_sibling, klassOop) \ + nonstatic_field(Klass, _subklass, Klass*) \ + nonstatic_field(Klass, _next_sibling, Klass*) \ nonproduct_nonstatic_field(Klass, _verify_count, int) \ nonstatic_field(Klass, _alloc_count, juint) \ - nonstatic_field(klassKlass, _alloc_size, juint) \ - nonstatic_field(methodKlass, _alloc_size, juint) \ - nonstatic_field(methodDataOopDesc, _size, int) \ - nonstatic_field(methodDataOopDesc, _method, methodOop) \ - nonstatic_field(methodDataOopDesc, _data_size, int) \ - nonstatic_field(methodDataOopDesc, _data[0], intptr_t) \ - nonstatic_field(methodDataOopDesc, _nof_decompiles, uint) \ - nonstatic_field(methodDataOopDesc, _nof_overflow_recompiles, uint) \ - nonstatic_field(methodDataOopDesc, _nof_overflow_traps, uint) \ - nonstatic_field(methodDataOopDesc, _eflags, intx) \ - nonstatic_field(methodDataOopDesc, _arg_local, intx) \ - nonstatic_field(methodDataOopDesc, _arg_stack, intx) \ - nonstatic_field(methodDataOopDesc, _arg_returned, intx) \ - nonstatic_field(methodOopDesc, _constMethod, constMethodOop) \ - nonstatic_field(methodOopDesc, _method_data, methodDataOop) \ - nonstatic_field(methodOopDesc, _interpreter_invocation_count, int) \ - nonstatic_field(methodOopDesc, _access_flags, AccessFlags) \ - nonstatic_field(methodOopDesc, _vtable_index, int) \ - nonstatic_field(methodOopDesc, _method_size, u2) \ - nonstatic_field(methodOopDesc, _max_stack, u2) \ - nonstatic_field(methodOopDesc, _max_locals, u2) \ - nonstatic_field(methodOopDesc, _size_of_parameters, u2) \ - nonstatic_field(methodOopDesc, _interpreter_throwout_count, u2) \ - nonstatic_field(methodOopDesc, _number_of_breakpoints, u2) \ - nonstatic_field(methodOopDesc, _invocation_counter, InvocationCounter) \ - nonstatic_field(methodOopDesc, _backedge_counter, InvocationCounter) \ - nonproduct_nonstatic_field(methodOopDesc, _compiled_invocation_count, int) \ - volatile_nonstatic_field(methodOopDesc, _code, nmethod*) \ - nonstatic_field(methodOopDesc, _i2i_entry, address) \ - nonstatic_field(methodOopDesc, _adapter, AdapterHandlerEntry*) \ - volatile_nonstatic_field(methodOopDesc, _from_compiled_entry, address) \ - volatile_nonstatic_field(methodOopDesc, _from_interpreted_entry, address) \ - volatile_nonstatic_field(constMethodOopDesc, _fingerprint, uint64_t) \ - nonstatic_field(constMethodOopDesc, _constants, constantPoolOop) \ - nonstatic_field(constMethodOopDesc, _stackmap_data, typeArrayOop) \ - nonstatic_field(constMethodOopDesc, _constMethod_size, int) \ - nonstatic_field(constMethodOopDesc, _interpreter_kind, jbyte) \ - nonstatic_field(constMethodOopDesc, _flags, jbyte) \ - nonstatic_field(constMethodOopDesc, _code_size, u2) \ - nonstatic_field(constMethodOopDesc, _name_index, u2) \ - nonstatic_field(constMethodOopDesc, _signature_index, u2) \ - nonstatic_field(constMethodOopDesc, _method_idnum, u2) \ - nonstatic_field(constMethodOopDesc, _generic_signature_index, u2) \ - nonstatic_field(objArrayKlass, _element_klass, klassOop) \ - nonstatic_field(objArrayKlass, _bottom_klass, klassOop) \ + nonstatic_field(MethodData, _size, int) \ + nonstatic_field(MethodData, _method, Method*) \ + nonstatic_field(MethodData, _data_size, int) \ + nonstatic_field(MethodData, _data[0], intptr_t) \ + nonstatic_field(MethodData, _nof_decompiles, uint) \ + nonstatic_field(MethodData, _nof_overflow_recompiles, uint) \ + nonstatic_field(MethodData, _nof_overflow_traps, uint) \ + nonstatic_field(MethodData, _eflags, intx) \ + nonstatic_field(MethodData, _arg_local, intx) \ + nonstatic_field(MethodData, _arg_stack, intx) \ + nonstatic_field(MethodData, _arg_returned, intx) \ + nonstatic_field(Method, _constMethod, ConstMethod*) \ + nonstatic_field(Method, _method_data, MethodData*) \ + nonstatic_field(Method, _interpreter_invocation_count, int) \ + nonstatic_field(Method, _access_flags, AccessFlags) \ + nonstatic_field(Method, _vtable_index, int) \ + nonstatic_field(Method, _method_size, u2) \ + nonstatic_field(Method, _max_stack, u2) \ + nonstatic_field(Method, _max_locals, u2) \ + nonstatic_field(Method, _size_of_parameters, u2) \ + nonstatic_field(Method, _interpreter_throwout_count, u2) \ + nonstatic_field(Method, _number_of_breakpoints, u2) \ + nonstatic_field(Method, _invocation_counter, InvocationCounter) \ + nonstatic_field(Method, _backedge_counter, InvocationCounter) \ + nonproduct_nonstatic_field(Method, _compiled_invocation_count, int) \ + volatile_nonstatic_field(Method, _code, nmethod*) \ + nonstatic_field(Method, _i2i_entry, address) \ + nonstatic_field(Method, _adapter, AdapterHandlerEntry*) \ + volatile_nonstatic_field(Method, _from_compiled_entry, address) \ + volatile_nonstatic_field(Method, _from_interpreted_entry, address) \ + volatile_nonstatic_field(ConstMethod, _fingerprint, uint64_t) \ + nonstatic_field(ConstMethod, _constants, ConstantPool*) \ + nonstatic_field(ConstMethod, _stackmap_data, Array*) \ + nonstatic_field(ConstMethod, _constMethod_size, int) \ + nonstatic_field(ConstMethod, _interpreter_kind, jbyte) \ + nonstatic_field(ConstMethod, _flags, jbyte) \ + nonstatic_field(ConstMethod, _code_size, u2) \ + nonstatic_field(ConstMethod, _name_index, u2) \ + nonstatic_field(ConstMethod, _signature_index, u2) \ + nonstatic_field(ConstMethod, _method_idnum, u2) \ + nonstatic_field(ConstMethod, _generic_signature_index, u2) \ + nonstatic_field(objArrayKlass, _element_klass, Klass*) \ + nonstatic_field(objArrayKlass, _bottom_klass, Klass*) \ volatile_nonstatic_field(Symbol, _refcount, int) \ nonstatic_field(Symbol, _identity_hash, int) \ nonstatic_field(Symbol, _length, unsigned short) \ @@ -409,7 +392,7 @@ /***********************/ \ \ volatile_nonstatic_field(ConstantPoolCacheEntry, _indices, intx) \ - volatile_nonstatic_field(ConstantPoolCacheEntry, _f1, oop) \ + nonstatic_field(ConstantPoolCacheEntry, _f1, volatile Metadata*) \ volatile_nonstatic_field(ConstantPoolCacheEntry, _f2, intx) \ volatile_nonstatic_field(ConstantPoolCacheEntry, _flags, intx) \ \ @@ -437,40 +420,24 @@ /* JNI IDs */ \ /***********/ \ \ - nonstatic_field(JNIid, _holder, klassOop) \ + nonstatic_field(JNIid, _holder, Klass*) \ nonstatic_field(JNIid, _next, JNIid*) \ nonstatic_field(JNIid, _offset, int) \ /************/ \ /* Universe */ \ /************/ \ \ - static_field(Universe, _boolArrayKlassObj, klassOop) \ - static_field(Universe, _byteArrayKlassObj, klassOop) \ - static_field(Universe, _charArrayKlassObj, klassOop) \ - static_field(Universe, _intArrayKlassObj, klassOop) \ - static_field(Universe, _shortArrayKlassObj, klassOop) \ - static_field(Universe, _longArrayKlassObj, klassOop) \ - static_field(Universe, _singleArrayKlassObj, klassOop) \ - static_field(Universe, _doubleArrayKlassObj, klassOop) \ - static_field(Universe, _methodKlassObj, klassOop) \ - static_field(Universe, _constMethodKlassObj, klassOop) \ - static_field(Universe, _methodDataKlassObj, klassOop) \ - static_field(Universe, _klassKlassObj, klassOop) \ - static_field(Universe, _arrayKlassKlassObj, klassOop) \ - static_field(Universe, _objArrayKlassKlassObj, klassOop) \ - static_field(Universe, _typeArrayKlassKlassObj, klassOop) \ - static_field(Universe, _instanceKlassKlassObj, klassOop) \ - static_field(Universe, _constantPoolKlassObj, klassOop) \ - static_field(Universe, _constantPoolCacheKlassObj, klassOop) \ - static_field(Universe, _compiledICHolderKlassObj, klassOop) \ - static_field(Universe, _systemObjArrayKlassObj, klassOop) \ + static_field(Universe, _boolArrayKlassObj, Klass*) \ + static_field(Universe, _byteArrayKlassObj, Klass*) \ + static_field(Universe, _charArrayKlassObj, Klass*) \ + static_field(Universe, _intArrayKlassObj, Klass*) \ + static_field(Universe, _shortArrayKlassObj, Klass*) \ + static_field(Universe, _longArrayKlassObj, Klass*) \ + static_field(Universe, _singleArrayKlassObj, Klass*) \ + static_field(Universe, _doubleArrayKlassObj, Klass*) \ static_field(Universe, _mirrors[0], oop) \ static_field(Universe, _main_thread_group, oop) \ static_field(Universe, _system_thread_group, oop) \ - static_field(Universe, _the_empty_byte_array, typeArrayOop) \ - static_field(Universe, _the_empty_short_array, typeArrayOop) \ - static_field(Universe, _the_empty_int_array, typeArrayOop) \ - static_field(Universe, _the_empty_system_obj_array, objArrayOop) \ static_field(Universe, _the_empty_class_klass_array, objArrayOop) \ static_field(Universe, _out_of_memory_error_java_heap, oop) \ static_field(Universe, _out_of_memory_error_perm_gen, oop) \ @@ -528,7 +495,6 @@ nonstatic_field(CardTableRS, _ct_bs, CardTableModRefBSForCTRS*) \ \ nonstatic_field(CollectedHeap, _reserved, MemRegion) \ - nonstatic_field(SharedHeap, _perm_gen, PermGen*) \ nonstatic_field(CollectedHeap, _barrier_set, BarrierSet*) \ nonstatic_field(CollectedHeap, _defer_initial_card_mark, bool) \ nonstatic_field(CollectedHeap, _is_gc_active, bool) \ @@ -536,7 +502,6 @@ nonstatic_field(CompactibleSpace, _first_dead, HeapWord*) \ nonstatic_field(CompactibleSpace, _end_of_live, HeapWord*) \ \ - nonstatic_field(CompactingPermGen, _gen, OneContigSpaceCardGeneration*) \ \ nonstatic_field(ContiguousSpace, _top, HeapWord*) \ nonstatic_field(ContiguousSpace, _concurrent_iteration_safe_limit, HeapWord*) \ @@ -579,30 +544,7 @@ nonstatic_field(OneContigSpaceCardGeneration, _the_space, ContiguousSpace*) \ nonstatic_field(OneContigSpaceCardGeneration, _last_gc, WaterMark) \ \ - nonstatic_field(CompactingPermGenGen, _ro_vs, VirtualSpace) \ - nonstatic_field(CompactingPermGenGen, _rw_vs, VirtualSpace) \ - nonstatic_field(CompactingPermGenGen, _md_vs, VirtualSpace) \ - nonstatic_field(CompactingPermGenGen, _mc_vs, VirtualSpace) \ - nonstatic_field(CompactingPermGenGen, _ro_space, OffsetTableContigSpace*) \ - nonstatic_field(CompactingPermGenGen, _rw_space, OffsetTableContigSpace*) \ - static_field(CompactingPermGenGen, unshared_bottom, HeapWord*) \ - static_field(CompactingPermGenGen, unshared_end, HeapWord*) \ - static_field(CompactingPermGenGen, shared_bottom, HeapWord*) \ - static_field(CompactingPermGenGen, readonly_bottom, HeapWord*) \ - static_field(CompactingPermGenGen, readonly_end, HeapWord*) \ - static_field(CompactingPermGenGen, readwrite_bottom, HeapWord*) \ - static_field(CompactingPermGenGen, readwrite_end, HeapWord*) \ - static_field(CompactingPermGenGen, miscdata_bottom, HeapWord*) \ - static_field(CompactingPermGenGen, miscdata_end, HeapWord*) \ - static_field(CompactingPermGenGen, misccode_bottom, HeapWord*) \ - static_field(CompactingPermGenGen, misccode_end, HeapWord*) \ - static_field(CompactingPermGenGen, shared_end, HeapWord*) \ \ - nonstatic_field(PermGen, _capacity_expansion_limit, size_t) \ - \ - nonstatic_field(PermanentGenerationSpec, _name, PermGen::Name) \ - nonstatic_field(PermanentGenerationSpec, _init_size, size_t) \ - nonstatic_field(PermanentGenerationSpec, _max_size, size_t) \ \ nonstatic_field(Space, _bottom, HeapWord*) \ nonstatic_field(Space, _end, HeapWord*) \ @@ -677,40 +619,40 @@ static_field(SystemDictionary, _shared_dictionary, Dictionary*) \ static_field(SystemDictionary, _system_loader_lock_obj, oop) \ static_field(SystemDictionary, _loader_constraints, LoaderConstraintTable*) \ - static_field(SystemDictionary, WK_KLASS(Object_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(String_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(Class_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(Cloneable_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(ClassLoader_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(Serializable_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(System_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(Throwable_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(ThreadDeath_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(Error_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(Exception_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(RuntimeException_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(ClassNotFoundException_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(NoClassDefFoundError_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(LinkageError_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(ClassCastException_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(ArrayStoreException_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(VirtualMachineError_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(OutOfMemoryError_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(StackOverflowError_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(ProtectionDomain_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(AccessControlContext_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(Reference_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(SoftReference_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(WeakReference_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(FinalReference_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(PhantomReference_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(Finalizer_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(Thread_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(ThreadGroup_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(Properties_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(StringBuffer_klass), klassOop) \ - static_field(SystemDictionary, WK_KLASS(MethodHandle_klass), klassOop) \ - static_field(SystemDictionary, _box_klasses[0], klassOop) \ + static_field(SystemDictionary, WK_KLASS(Object_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(String_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(Class_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(Cloneable_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(ClassLoader_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(Serializable_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(System_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(Throwable_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(ThreadDeath_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(Error_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(Exception_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(RuntimeException_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(ClassNotFoundException_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(NoClassDefFoundError_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(LinkageError_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(ClassCastException_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(ArrayStoreException_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(VirtualMachineError_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(OutOfMemoryError_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(StackOverflowError_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(ProtectionDomain_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(AccessControlContext_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(Reference_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(SoftReference_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(WeakReference_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(FinalReference_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(PhantomReference_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(Finalizer_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(Thread_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(ThreadGroup_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(Properties_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(StringBuffer_klass), Klass*) \ + static_field(SystemDictionary, WK_KLASS(MethodHandle_klass), Klass*) \ + static_field(SystemDictionary, _box_klasses[0], Klass*) \ static_field(SystemDictionary, _java_system_loader, oop) \ \ /*************/ \ @@ -748,12 +690,12 @@ /* DictionaryEntry */ \ /*******************/ \ \ - nonstatic_field(DictionaryEntry, _loader, oop) \ + nonstatic_field(DictionaryEntry, _loader_data, ClassLoaderData*) \ nonstatic_field(DictionaryEntry, _pd_set, ProtectionDomainEntry*) \ \ /********************/ \ \ - nonstatic_field(PlaceholderEntry, _loader, oop) \ + nonstatic_field(PlaceholderEntry, _loader_data, ClassLoaderData*) \ \ /**************************/ \ /* ProctectionDomainEntry */ \ @@ -769,7 +711,13 @@ nonstatic_field(LoaderConstraintEntry, _name, Symbol*) \ nonstatic_field(LoaderConstraintEntry, _num_loaders, int) \ nonstatic_field(LoaderConstraintEntry, _max_loaders, int) \ - nonstatic_field(LoaderConstraintEntry, _loaders, oop*) \ + nonstatic_field(LoaderConstraintEntry, _loaders, ClassLoaderData**) \ + \ + nonstatic_field(ClassLoaderData, _class_loader, oop) \ + nonstatic_field(ClassLoaderData, _next, ClassLoaderData*) \ + \ + static_field(ClassLoaderDataGraph, _head, ClassLoaderData*) \ + nonstatic_field(ClassLoaderDataGraph, _unloading, ClassLoaderData*) \ \ /*******************/ \ /* GrowableArrays */ \ @@ -853,7 +801,7 @@ /* NMethods (NOTE: incomplete, but only a little) */ \ /**************************************************/ \ \ - nonstatic_field(nmethod, _method, methodOop) \ + nonstatic_field(nmethod, _method, Method*) \ nonstatic_field(nmethod, _entry_bci, int) \ nonstatic_field(nmethod, _osr_link, nmethod*) \ nonstatic_field(nmethod, _scavenge_root_link, nmethod*) \ @@ -866,6 +814,7 @@ nonstatic_field(nmethod, _stub_offset, int) \ nonstatic_field(nmethod, _consts_offset, int) \ nonstatic_field(nmethod, _oops_offset, int) \ + nonstatic_field(nmethod, _metadata_offset, int) \ nonstatic_field(nmethod, _scopes_data_offset, int) \ nonstatic_field(nmethod, _scopes_pcs_offset, int) \ nonstatic_field(nmethod, _dependencies_offset, int) \ @@ -918,7 +867,7 @@ nonstatic_field(JavaThread, _threadObj, oop) \ nonstatic_field(JavaThread, _anchor, JavaFrameAnchor) \ nonstatic_field(JavaThread, _vm_result, oop) \ - nonstatic_field(JavaThread, _vm_result_2, oop) \ + nonstatic_field(JavaThread, _vm_result_2, Metadata*) \ nonstatic_field(JavaThread, _pending_async_exception, oop) \ volatile_nonstatic_field(JavaThread, _exception_oop, oop) \ volatile_nonstatic_field(JavaThread, _exception_pc, address) \ @@ -1008,11 +957,13 @@ nonstatic_field(ciEnv, _task, CompileTask*) \ nonstatic_field(ciEnv, _arena, Arena*) \ \ + nonstatic_field(ciBaseObject, _ident, uint) \ + \ nonstatic_field(ciObject, _handle, jobject) \ nonstatic_field(ciObject, _klass, ciKlass*) \ - nonstatic_field(ciObject, _ident, uint) \ \ - nonstatic_field(ciSymbol, _ident, uint) \ + nonstatic_field(ciMetadata, _metadata, Metadata*) \ + \ nonstatic_field(ciSymbol, _symbol, Symbol*) \ \ nonstatic_field(ciType, _basic_type, BasicType) \ @@ -1024,7 +975,7 @@ nonstatic_field(ciObjArrayKlass, _element_klass, ciKlass*) \ nonstatic_field(ciObjArrayKlass, _base_element_klass, ciKlass*) \ \ - nonstatic_field(ciInstanceKlass, _init_state, instanceKlass::ClassState) \ + nonstatic_field(ciInstanceKlass, _init_state, InstanceKlass::ClassState) \ nonstatic_field(ciInstanceKlass, _is_shared, bool) \ \ nonstatic_field(ciMethod, _interpreter_invocation_count, int) \ @@ -1040,7 +991,7 @@ nonstatic_field(ciMethodData, _arg_stack, intx) \ nonstatic_field(ciMethodData, _arg_returned, intx) \ nonstatic_field(ciMethodData, _current_mileage, int) \ - nonstatic_field(ciMethodData, _orig, methodDataOopDesc) \ + nonstatic_field(ciMethodData, _orig, MethodData) \ \ nonstatic_field(ciField, _holder, ciInstanceKlass*) \ nonstatic_field(ciField, _name, ciSymbol*) \ @@ -1049,7 +1000,7 @@ nonstatic_field(ciField, _is_constant, bool) \ nonstatic_field(ciField, _constant_value, ciConstant) \ \ - nonstatic_field(ciObjectFactory, _ci_objects, GrowableArray*) \ + nonstatic_field(ciObjectFactory, _ci_metadata, GrowableArray*) \ nonstatic_field(ciObjectFactory, _symbols, GrowableArray*) \ nonstatic_field(ciObjectFactory, _unloaded_methods, GrowableArray*) \ \ @@ -1234,6 +1185,17 @@ static_field(Arguments, _num_jvm_args, int) \ static_field(Arguments, _java_command, char*) \ \ + /************/ \ + /* Array */ \ + /************/ \ + \ + nonstatic_field(Array, _length, int) \ + unchecked_nonstatic_field(Array, _data, sizeof(int)) \ + unchecked_nonstatic_field(Array, _data, sizeof(u1)) \ + unchecked_nonstatic_field(Array, _data, sizeof(u2)) \ + unchecked_nonstatic_field(Array, _data, sizeof(Method*)) \ + unchecked_nonstatic_field(Array, _data, sizeof(Klass*)) \ + \ /*********************************/ \ /* java_lang_Class fields */ \ /*********************************/ \ @@ -1248,7 +1210,7 @@ /* Miscellaneous fields */ \ /************************/ \ \ - nonstatic_field(CompileTask, _method, jobject) \ + nonstatic_field(CompileTask, _method, Method*) \ nonstatic_field(CompileTask, _osr_bci, int) \ nonstatic_field(CompileTask, _comp_level, int) \ nonstatic_field(CompileTask, _compile_id, uint) \ @@ -1262,7 +1224,7 @@ \ nonstatic_field(vframeArrayElement, _frame, frame) \ nonstatic_field(vframeArrayElement, _bci, int) \ - nonstatic_field(vframeArrayElement, _method, methodOop) \ + nonstatic_field(vframeArrayElement, _method, Method*) \ \ nonstatic_field(AccessFlags, _flags, jint) \ nonstatic_field(elapsedTimer, _counter, jlong) \ @@ -1360,14 +1322,15 @@ declare_unsigned_integer_type(unsigned long) \ /* The compiler thinks this is a different type than */ \ /* unsigned short on Win32 */ \ + declare_unsigned_integer_type(u1) \ declare_unsigned_integer_type(u2) \ - declare_unsigned_integer_type(u1) \ declare_unsigned_integer_type(unsigned) \ \ /*****************************/ \ /* C primitive pointer types */ \ /*****************************/ \ \ + declare_toplevel_type(void*) \ declare_toplevel_type(int*) \ declare_toplevel_type(char*) \ declare_toplevel_type(char**) \ @@ -1389,44 +1352,40 @@ declare_unsigned_integer_type(uint32_t) \ declare_unsigned_integer_type(uint64_t) \ \ - /*******************************************************************************/ \ - /* OopDesc and Klass hierarchies (NOTE: missing methodDataOop-related classes) */ \ - /*******************************************************************************/ \ + /******************************************/ \ + /* OopDesc hierarchy (NOTE: some missing) */ \ + /******************************************/ \ \ declare_toplevel_type(oopDesc) \ - declare_toplevel_type(Klass_vtbl) \ - declare_type(Klass, Klass_vtbl) \ + declare_type(arrayOopDesc, oopDesc) \ + declare_type(objArrayOopDesc, arrayOopDesc) \ + declare_type(instanceOopDesc, oopDesc) \ + declare_type(markOopDesc, oopDesc) \ + \ + /**************************************************/ \ + /* MetadataOopDesc hierarchy (NOTE: some missing) */ \ + /**************************************************/ \ + \ + declare_toplevel_type(CompiledICHolder) \ + declare_toplevel_type(MetaspaceObj) \ + declare_type(Metadata, MetaspaceObj) \ + declare_type(Klass, Metadata) \ declare_type(arrayKlass, Klass) \ - declare_type(arrayKlassKlass, klassKlass) \ - declare_type(arrayOopDesc, oopDesc) \ - declare_type(compiledICHolderKlass, Klass) \ - declare_type(compiledICHolderOopDesc, oopDesc) \ - declare_type(constantPoolKlass, Klass) \ - declare_type(constantPoolOopDesc, oopDesc) \ - declare_type(constantPoolCacheKlass, Klass) \ - declare_type(constantPoolCacheOopDesc, oopDesc) \ - declare_type(instanceKlass, Klass) \ - declare_type(instanceKlassKlass, klassKlass) \ - declare_type(instanceOopDesc, oopDesc) \ - declare_type(instanceMirrorKlass, instanceKlass) \ - declare_type(instanceRefKlass, instanceKlass) \ - declare_type(klassKlass, Klass) \ - declare_type(klassOopDesc, oopDesc) \ - declare_type(markOopDesc, oopDesc) \ - declare_type(methodDataKlass, Klass) \ - declare_type(methodDataOopDesc, oopDesc) \ - declare_type(methodKlass, Klass) \ - declare_type(constMethodKlass, Klass) \ - declare_type(methodOopDesc, oopDesc) \ declare_type(objArrayKlass, arrayKlass) \ - declare_type(objArrayKlassKlass, arrayKlassKlass) \ - declare_type(objArrayOopDesc, arrayOopDesc) \ - declare_type(constMethodOopDesc, oopDesc) \ declare_type(typeArrayKlass, arrayKlass) \ - declare_type(typeArrayKlassKlass, arrayKlassKlass) \ - declare_type(typeArrayOopDesc, arrayOopDesc) \ + declare_type(InstanceKlass, Klass) \ + declare_type(instanceClassLoaderKlass, InstanceKlass) \ + declare_type(instanceMirrorKlass, InstanceKlass) \ + declare_type(instanceRefKlass, InstanceKlass) \ + declare_type(ConstantPool, Metadata) \ + declare_type(ConstantPoolCache, MetaspaceObj) \ + declare_type(MethodData, Metadata) \ + declare_type(Method, Metadata) \ + declare_type(ConstMethod, MetaspaceObj) \ + \ declare_toplevel_type(Symbol) \ declare_toplevel_type(Symbol*) \ + declare_toplevel_type(volatile Metadata*) \ \ declare_toplevel_type(nmethodBucket) \ \ @@ -1434,17 +1393,10 @@ /* Oops */ \ /********/ \ \ - declare_oop_type(constantPoolOop) \ - declare_oop_type(constantPoolCacheOop) \ - declare_oop_type(klassOop) \ declare_oop_type(markOop) \ - declare_oop_type(methodOop) \ - declare_oop_type(methodDataOop) \ declare_oop_type(objArrayOop) \ declare_oop_type(oop) \ declare_oop_type(narrowOop) \ - declare_oop_type(wideKlassOop) \ - declare_oop_type(constMethodOop) \ declare_oop_type(typeArrayOop) \ \ /*************************************/ \ @@ -1455,6 +1407,9 @@ declare_toplevel_type(LocalVariableTableElement) \ declare_toplevel_type(ExceptionTableElement) \ \ + declare_toplevel_type(ClassLoaderData) \ + declare_toplevel_type(ClassLoaderDataGraph) \ + \ /******************************************/ \ /* Generation and space hierarchies */ \ /* (needed for run-time type information) */ \ @@ -1468,7 +1423,6 @@ declare_type(CardGeneration, Generation) \ declare_type(OneContigSpaceCardGeneration, CardGeneration) \ declare_type(TenuredGeneration, OneContigSpaceCardGeneration) \ - declare_type(CompactingPermGenGen, OneContigSpaceCardGeneration) \ declare_toplevel_type(Space) \ declare_toplevel_type(BitMap) \ declare_type(CompactibleSpace, Space) \ @@ -1476,9 +1430,6 @@ declare_type(EdenSpace, ContiguousSpace) \ declare_type(OffsetTableContigSpace, ContiguousSpace) \ declare_type(TenuredSpace, OffsetTableContigSpace) \ - declare_type(ContigPermSpace, OffsetTableContigSpace) \ - declare_toplevel_type(PermGen) \ - declare_type(CompactingPermGen, PermGen) \ declare_toplevel_type(BarrierSet) \ declare_type(ModRefBarrierSet, BarrierSet) \ declare_type(CardTableModRefBS, ModRefBarrierSet) \ @@ -1498,7 +1449,6 @@ declare_toplevel_type(GenerationSpec) \ declare_toplevel_type(HeapWord) \ declare_toplevel_type(MemRegion) \ - declare_toplevel_type(PermanentGenerationSpec) \ declare_toplevel_type(ThreadLocalAllocBuffer) \ declare_toplevel_type(VirtualSpace) \ declare_toplevel_type(WaterMark) \ @@ -1524,7 +1474,6 @@ declare_toplevel_type(MemRegion*) \ declare_toplevel_type(OffsetTableContigSpace*) \ declare_toplevel_type(OneContigSpaceCardGeneration*) \ - declare_toplevel_type(PermGen*) \ declare_toplevel_type(Space*) \ declare_toplevel_type(ThreadLocalAllocBuffer*) \ \ @@ -1545,15 +1494,15 @@ declare_type(IntptrHashtable, BasicHashtable) \ declare_type(SymbolTable, SymbolHashtable) \ declare_type(StringTable, StringHashtable) \ - declare_type(LoaderConstraintTable, klassOopHashtable) \ - declare_type(klassOopTwoOopHashtable, klassOopHashtable) \ - declare_type(Dictionary, klassOopTwoOopHashtable) \ + declare_type(LoaderConstraintTable, KlassHashtable) \ + declare_type(KlassTwoOopHashtable, KlassHashtable) \ + declare_type(Dictionary, KlassTwoOopHashtable) \ declare_type(PlaceholderTable, SymbolTwoOopHashtable) \ declare_toplevel_type(BasicHashtableEntry) \ declare_type(IntptrHashtableEntry, BasicHashtableEntry) \ - declare_type(DictionaryEntry, klassHashtableEntry) \ + declare_type(DictionaryEntry, KlassHashtableEntry) \ declare_type(PlaceholderEntry, SymbolHashtableEntry) \ - declare_type(LoaderConstraintEntry, klassHashtableEntry) \ + declare_type(LoaderConstraintEntry, KlassHashtableEntry) \ declare_toplevel_type(HashtableBucket) \ declare_toplevel_type(SystemDictionary) \ declare_toplevel_type(vmSymbols) \ @@ -2007,24 +1956,19 @@ declare_toplevel_type(ciObjectFactory) \ declare_toplevel_type(ciConstant) \ declare_toplevel_type(ciField) \ - declare_toplevel_type(void*) \ - declare_toplevel_type(ciObject) \ - declare_type(ciMethod, ciObject) \ - declare_type(ciMethodData, ciObject) \ - declare_type(ciType, ciObject) \ + declare_toplevel_type(ciSymbol) \ + declare_toplevel_type(ciBaseObject) \ + declare_type(ciObject, ciBaseObject) \ declare_type(ciInstance, ciObject) \ - declare_toplevel_type(ciSymbol) \ + declare_type(ciMetadata, ciBaseObject) \ + declare_type(ciMethod, ciMetadata) \ + declare_type(ciMethodData, ciMetadata) \ + declare_type(ciType, ciMetadata) \ declare_type(ciKlass, ciType) \ declare_type(ciInstanceKlass, ciKlass) \ declare_type(ciArrayKlass, ciKlass) \ declare_type(ciTypeArrayKlass, ciArrayKlass) \ declare_type(ciObjArrayKlass, ciArrayKlass) \ - declare_type(ciMethodKlass, ciKlass) \ - declare_type(ciKlassKlass, ciKlass) \ - declare_type(ciInstanceKlassKlass, ciKlassKlass) \ - declare_type(ciArrayKlassKlass, ciKlassKlass) \ - declare_type(ciTypeArrayKlassKlass, ciArrayKlassKlass) \ - declare_type(ciObjArrayKlassKlass, ciArrayKlassKlass) \ \ /********************/ \ /* -XX flags */ \ @@ -2060,14 +2004,20 @@ \ declare_integer_type(Bytecodes::Code) \ declare_integer_type(Generation::Name) \ - declare_integer_type(instanceKlass::ClassState) \ + declare_integer_type(InstanceKlass::ClassState) \ declare_integer_type(JavaThreadState) \ declare_integer_type(Location::Type) \ declare_integer_type(Location::Where) \ - declare_integer_type(PermGen::Name) \ declare_integer_type(FlagValueOrigin) \ COMPILER2_PRESENT(declare_integer_type(OptoReg::Name)) \ \ + declare_toplevel_type(CHeapObj) \ + declare_type(Array, MetaspaceObj) \ + declare_type(Array, MetaspaceObj) \ + declare_type(Array, MetaspaceObj) \ + declare_type(Array, MetaspaceObj) \ + declare_type(Array, MetaspaceObj) \ + \ declare_integer_type(AccessFlags) /* FIXME: wrong type (not integer) */\ declare_toplevel_type(address) /* FIXME: should this be an integer type? */\ declare_integer_type(BasicType) /* FIXME: wrong type (not integer) */\ @@ -2108,7 +2058,8 @@ declare_toplevel_type(Thread*) \ declare_toplevel_type(Universe) \ declare_toplevel_type(vframeArray) \ - declare_toplevel_type(vframeArrayElement) + declare_toplevel_type(vframeArrayElement) \ + declare_toplevel_type(Annotations*) /* NOTE that we do not use the last_entry() macro here; it is used */ @@ -2149,6 +2100,7 @@ \ declare_constant(oopSize) \ declare_constant(LogBytesPerWord) \ + declare_constant(BytesPerWord) \ declare_constant(BytesPerLong) \ \ /********************************************/ \ @@ -2197,10 +2149,6 @@ declare_constant(HeapWordSize) \ declare_constant(LogHeapWordSize) \ \ - /* constants from PermGen::Name enum */ \ - \ - declare_constant(PermGen::MarkSweepCompact) \ - declare_constant(PermGen::MarkSweep) \ \ /************************/ \ /* PerfMemory - jvmstat */ \ @@ -2288,16 +2236,16 @@ declare_constant(Klass::_lh_array_tag_obj_value) \ \ /********************************/ \ - /* constMethodOopDesc anon-enum */ \ + /* ConstMethod anon-enum */ \ /********************************/ \ \ - declare_constant(constMethodOopDesc::_has_linenumber_table) \ - declare_constant(constMethodOopDesc::_has_checked_exceptions) \ - declare_constant(constMethodOopDesc::_has_localvariable_table) \ - declare_constant(constMethodOopDesc::_has_exception_table) \ + declare_constant(ConstMethod::_has_linenumber_table) \ + declare_constant(ConstMethod::_has_checked_exceptions) \ + declare_constant(ConstMethod::_has_localvariable_table) \ + declare_constant(ConstMethod::_has_exception_table) \ \ /*************************************/ \ - /* instanceKlass enum */ \ + /* InstanceKlass enum */ \ /*************************************/ \ \ \ @@ -2314,26 +2262,25 @@ declare_constant(FieldInfo::field_slots) \ \ /************************************************/ \ - /* instanceKlass InnerClassAttributeOffset enum */ \ + /* InstanceKlass InnerClassAttributeOffset enum */ \ /************************************************/ \ \ - declare_constant(instanceKlass::inner_class_inner_class_info_offset) \ - declare_constant(instanceKlass::inner_class_outer_class_info_offset) \ - declare_constant(instanceKlass::inner_class_inner_name_offset) \ - declare_constant(instanceKlass::inner_class_access_flags_offset) \ - declare_constant(instanceKlass::inner_class_next_offset) \ + declare_constant(InstanceKlass::inner_class_inner_class_info_offset) \ + declare_constant(InstanceKlass::inner_class_outer_class_info_offset) \ + declare_constant(InstanceKlass::inner_class_inner_name_offset) \ + declare_constant(InstanceKlass::inner_class_access_flags_offset) \ + declare_constant(InstanceKlass::inner_class_next_offset) \ \ /*********************************/ \ - /* instanceKlass ClassState enum */ \ + /* InstanceKlass ClassState enum */ \ /*********************************/ \ \ - declare_constant(instanceKlass::unparsable_by_gc) \ - declare_constant(instanceKlass::allocated) \ - declare_constant(instanceKlass::loaded) \ - declare_constant(instanceKlass::linked) \ - declare_constant(instanceKlass::being_initialized) \ - declare_constant(instanceKlass::fully_initialized) \ - declare_constant(instanceKlass::initialization_error) \ + declare_constant(InstanceKlass::allocated) \ + declare_constant(InstanceKlass::loaded) \ + declare_constant(InstanceKlass::linked) \ + declare_constant(InstanceKlass::being_initialized) \ + declare_constant(InstanceKlass::fully_initialized) \ + declare_constant(InstanceKlass::initialization_error) \ \ /*********************************/ \ /* Symbol* - symbol max length */ \ @@ -2342,12 +2289,12 @@ declare_constant(Symbol::max_symbol_length) \ \ /*************************************************/ \ - /* constantPoolOop layout enum for InvokeDynamic */ \ + /* ConstantPool* layout enum for InvokeDynamic */ \ /*************************************************/ \ \ - declare_constant(constantPoolOopDesc::_indy_bsm_offset) \ - declare_constant(constantPoolOopDesc::_indy_argc_offset) \ - declare_constant(constantPoolOopDesc::_indy_argv_offset) \ + declare_constant(ConstantPool::_indy_bsm_offset) \ + declare_constant(ConstantPool::_indy_argc_offset) \ + declare_constant(ConstantPool::_indy_argv_offset) \ \ /********************************/ \ /* ConstantPoolCacheEntry enums */ \ @@ -3167,8 +3114,13 @@ } delete s; } + const char* start = NULL; if (strstr(typeName, "GrowableArray<") == typeName) { - const char * start = typeName + strlen("GrowableArray<"); + start = typeName + strlen("GrowableArray<"); + } else if (strstr(typeName, "Array<") == typeName) { + start = typeName + strlen("Array<"); + } + if (start != NULL) { const char * end = strrchr(typeName, '>'); int len = end - start + 1; char * s = new char[len]; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/vmStructs.hpp --- a/src/share/vm/runtime/vmStructs.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/vmStructs.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -78,10 +78,10 @@ } VMStructEntry; typedef struct { - const char* typeName; // Type name (example: "methodOopDesc") + const char* typeName; // Type name (example: "Method") const char* superclassName; // Superclass name, or null if none (example: "oopDesc") - int32_t isOopType; // Does this type represent an oop typedef? (i.e., "methodOop" or - // "klassOop", but NOT "methodOopDesc") + int32_t isOopType; // Does this type represent an oop typedef? (i.e., "Method*" or + // "Klass*", but NOT "Method") int32_t isIntegerType; // Does this type represent an integer type (of arbitrary size)? int32_t isUnsigned; // If so, is it unsigned? uint64_t size; // Size, in bytes, of the type diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/vmThread.cpp --- a/src/share/vm/runtime/vmThread.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/vmThread.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -26,7 +26,7 @@ #include "compiler/compileBroker.hpp" #include "gc_interface/collectedHeap.hpp" #include "memory/resourceArea.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/mutexLocker.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/runtime/vm_operations.hpp --- a/src/share/vm/runtime/vm_operations.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/runtime/vm_operations.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -56,13 +56,12 @@ template(PrintJNI) \ template(HeapDumper) \ template(DeoptimizeTheWorld) \ + template(CollectForMetadataAllocation) \ template(GC_HeapInspection) \ template(GenCollectFull) \ template(GenCollectFullConcurrent) \ template(GenCollectForAllocation) \ - template(GenCollectForPermanentAllocation) \ template(ParallelGCFailedAllocation) \ - template(ParallelGCFailedPermanentAllocation) \ template(ParallelGCSystemGC) \ template(CGC_Operation) \ template(CMS_Initial_Mark) \ diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/attachListener.cpp --- a/src/share/vm/services/attachListener.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/attachListener.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,8 +44,8 @@ // Invokes sun.misc.VMSupport.serializePropertiesToByteArray to serialize // the system properties into a byte array. -static klassOop load_and_initialize_klass(Symbol* sh, TRAPS) { - klassOop k = SystemDictionary::resolve_or_fail(sh, true, CHECK_NULL); +static Klass* load_and_initialize_klass(Symbol* sh, TRAPS) { + Klass* k = SystemDictionary::resolve_or_fail(sh, true, CHECK_NULL); instanceKlassHandle ik (THREAD, k); if (ik->should_be_initialized()) { ik->initialize(CHECK_NULL); @@ -59,7 +59,7 @@ // load sun.misc.VMSupport Symbol* klass = vmSymbols::sun_misc_VMSupport(); - klassOop k = load_and_initialize_klass(klass, THREAD); + Klass* k = load_and_initialize_klass(klass, THREAD); if (HAS_PENDING_EXCEPTION) { java_lang_Throwable::print(PENDING_EXCEPTION, out); CLEAR_PENDING_EXCEPTION; @@ -456,7 +456,7 @@ // Starts the Attach Listener thread void AttachListener::init() { EXCEPTION_MARK; - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK); instanceKlassHandle klass (THREAD, k); instanceHandle thread_oop = klass->allocate_instance_handle(CHECK); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/classLoadingService.cpp --- a/src/share/vm/services/classLoadingService.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/classLoadingService.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -134,7 +134,7 @@ } } -void ClassLoadingService::notify_class_unloaded(instanceKlass* k) { +void ClassLoadingService::notify_class_unloaded(InstanceKlass* k) { DTRACE_CLASSLOAD_PROBE(unloaded, k, false); // Classes that can be unloaded must be non-shared _classes_unloaded_count->inc(); @@ -146,20 +146,20 @@ // Compute method size & subtract from running total. // We are called during phase 1 of mark sweep, so it's - // still ok to iterate through methodOops here. - objArrayOop methods = k->methods(); + // still ok to iterate through Method*s here. + Array* methods = k->methods(); for (int i = 0; i < methods->length(); i++) { - _class_methods_size->inc(-methods->obj_at(i)->size()); + _class_methods_size->inc(-methods->at(i)->size()); } } if (TraceClassUnloading) { ResourceMark rm; - tty->print_cr("[Unloading class %s]", k->external_name()); + tty->print_cr("[Unloading class %s " INTPTR_FORMAT "]", k->external_name(), k); } } -void ClassLoadingService::notify_class_loaded(instanceKlass* k, bool shared_class) { +void ClassLoadingService::notify_class_loaded(InstanceKlass* k, bool shared_class) { DTRACE_CLASSLOAD_PROBE(loaded, k, shared_class); PerfCounter* classes_counter = (shared_class ? _shared_classes_loaded_count : _classes_loaded_count); @@ -175,20 +175,22 @@ } } -size_t ClassLoadingService::compute_class_size(instanceKlass* k) { - // lifted from ClassStatistics.do_class(klassOop k) +size_t ClassLoadingService::compute_class_size(InstanceKlass* k) { + // lifted from ClassStatistics.do_class(Klass* k) size_t class_size = 0; - class_size += k->as_klassOop()->size(); + class_size += k->size(); if (k->oop_is_instance()) { class_size += k->methods()->size(); + // FIXME: Need to count the contents of methods class_size += k->constants()->size(); class_size += k->local_interfaces()->size(); class_size += k->transitive_interfaces()->size(); // We do not have to count implementors, since we only store one! - class_size += k->fields()->size(); + // FIXME: How should these be accounted for, now when they have moved. + //class_size += k->fields()->size(); } return class_size * oopSize; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/classLoadingService.hpp --- a/src/share/vm/services/classLoadingService.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/classLoadingService.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,7 @@ #include "runtime/perfData.hpp" #include "utilities/growableArray.hpp" -class instanceKlass; +class InstanceKlass; // VM monitoring and management support for the Class Loading subsystem class ClassLoadingService : public AllStatic { @@ -48,7 +48,7 @@ static PerfVariable* _class_methods_size; - static size_t compute_class_size(instanceKlass* k); + static size_t compute_class_size(InstanceKlass* k); public: static void init(); @@ -102,9 +102,9 @@ return (UsePerfData ? _class_methods_size->get_value() : -1); } - static void notify_class_loaded(instanceKlass* k, bool shared_class); + static void notify_class_loaded(InstanceKlass* k, bool shared_class); // All unloaded classes are non-shared - static void notify_class_unloaded(instanceKlass* k); + static void notify_class_unloaded(InstanceKlass* k); static void add_class_method_size(int size) { if (UsePerfData) { _class_methods_size->inc(size); @@ -127,12 +127,12 @@ int num_loaded_classes() { return _klass_handle_array->length(); } KlassHandle get_klass(int index) { return _klass_handle_array->at(index); } - static void add_loaded_class(klassOop k) { + static void add_loaded_class(Klass* k) { // FIXME: For now - don't include array klasses // The spec is unclear at this point to count array klasses or not // and also indirect creation of array of super class and secondaries // - // for (klassOop l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { + // for (Klass* l = k; l != NULL; l = Klass::cast(l)->array_klass_or_null()) { // KlassHandle h(_current_thread, l); // _loaded_classes->append(h); // } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/diagnosticCommand.cpp --- a/src/share/vm/services/diagnosticCommand.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/diagnosticCommand.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -171,7 +171,7 @@ void PrintSystemPropertiesDCmd::execute(TRAPS) { // load sun.misc.VMSupport Symbol* klass = vmSymbols::sun_misc_VMSupport(); - klassOop k = SystemDictionary::resolve_or_fail(klass, true, CHECK); + Klass* k = SystemDictionary::resolve_or_fail(klass, true, CHECK); instanceKlassHandle ik (THREAD, k); if (ik->should_be_initialized()) { ik->initialize(THREAD); @@ -243,7 +243,7 @@ } void RunFinalizationDCmd::execute(TRAPS) { - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK); instanceKlassHandle klass(THREAD, k); JavaValue result(T_VOID); @@ -447,7 +447,7 @@ // throw java.lang.NoSuchMethodError if the method doesn't exist Handle loader = Handle(THREAD, SystemDictionary::java_system_loader()); - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::sun_management_Agent(), loader, Handle(), true, CHECK); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::sun_management_Agent(), loader, Handle(), true, CHECK); instanceKlassHandle ik (THREAD, k); JavaValue result(T_VOID); @@ -506,7 +506,7 @@ // throw java.lang.NoSuchMethodError if method doesn't exist Handle loader = Handle(THREAD, SystemDictionary::java_system_loader()); - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::sun_management_Agent(), loader, Handle(), true, CHECK); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::sun_management_Agent(), loader, Handle(), true, CHECK); instanceKlassHandle ik (THREAD, k); JavaValue result(T_VOID); @@ -524,7 +524,7 @@ // throw java.lang.NoSuchMethodError if method doesn't exist Handle loader = Handle(THREAD, SystemDictionary::java_system_loader()); - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::sun_management_Agent(), loader, Handle(), true, CHECK); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::sun_management_Agent(), loader, Handle(), true, CHECK); instanceKlassHandle ik (THREAD, k); JavaValue result(T_VOID); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/gcNotifier.cpp --- a/src/share/vm/services/gcNotifier.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/gcNotifier.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -77,7 +77,7 @@ static Handle getGcInfoBuilder(GCMemoryManager *gcManager,TRAPS) { - klassOop k = Management::sun_management_GarbageCollectorImpl_klass(CHECK_NH); + Klass* k = Management::sun_management_GarbageCollectorImpl_klass(CHECK_NH); instanceKlassHandle gcMBeanKlass (THREAD, k); instanceOop i = gcManager->get_memory_manager_instance(THREAD); @@ -100,7 +100,7 @@ // Fill the arrays of MemoryUsage objects with before and after GC // per pool memory usage - klassOop mu_klass = Management::java_lang_management_MemoryUsage_klass(CHECK_NH); + Klass* mu_klass = Management::java_lang_management_MemoryUsage_klass(CHECK_NH); instanceKlassHandle mu_kh(THREAD, mu_klass); // The array allocations below should use a handle containing mu_klass @@ -133,7 +133,7 @@ // The type is 'I' objArrayOop extra_args_array = oopFactory::new_objArray(SystemDictionary::Integer_klass(), 1, CHECK_NH); objArrayHandle extra_array (THREAD, extra_args_array); - klassOop itKlass = SystemDictionary::Integer_klass(); + Klass* itKlass = SystemDictionary::Integer_klass(); instanceKlassHandle intK(THREAD, itKlass); instanceHandle extra_arg_val = intK->allocate_instance_handle(CHECK_NH); @@ -153,7 +153,7 @@ } extra_array->obj_at_put(0,extra_arg_val()); - klassOop gcInfoklass = Management::com_sun_management_GcInfo_klass(CHECK_NH); + Klass* gcInfoklass = Management::com_sun_management_GcInfo_klass(CHECK_NH); instanceKlassHandle ik(THREAD, gcInfoklass); Handle gcInfo_instance = ik->allocate_instance_handle(CHECK_NH); @@ -215,7 +215,7 @@ Handle objAction = java_lang_String::create_from_platform_dependent_str(request->gcAction, CHECK); Handle objCause = java_lang_String::create_from_platform_dependent_str(request->gcCause, CHECK); - klassOop k = Management::sun_management_GarbageCollectorImpl_klass(CHECK); + Klass* k = Management::sun_management_GarbageCollectorImpl_klass(CHECK); instanceKlassHandle gc_mbean_klass(THREAD, k); instanceOop gc_mbean = request->gcManager->get_memory_manager_instance(THREAD); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/heapDumper.cpp --- a/src/share/vm/services/heapDumper.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/heapDumper.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -608,7 +608,7 @@ static hprofTag type2tag(BasicType type); // returns the size of the instance of the given class - static u4 instance_size(klassOop k); + static u4 instance_size(Klass* k); // dump a jfloat static void dump_float(DumpWriter* writer, jfloat f); @@ -617,26 +617,26 @@ // dumps the raw value of the given field static void dump_field_value(DumpWriter* writer, char type, address addr); // dumps static fields of the given class - static void dump_static_fields(DumpWriter* writer, klassOop k); + static void dump_static_fields(DumpWriter* writer, Klass* k); // dump the raw values of the instance fields of the given object static void dump_instance_fields(DumpWriter* writer, oop o); // dumps the definition of the instance fields for a given class - static void dump_instance_field_descriptors(DumpWriter* writer, klassOop k); + static void dump_instance_field_descriptors(DumpWriter* writer, Klass* k); // creates HPROF_GC_INSTANCE_DUMP record for the given object static void dump_instance(DumpWriter* writer, oop o); // creates HPROF_GC_CLASS_DUMP record for the given class and each of its // array classes - static void dump_class_and_array_classes(DumpWriter* writer, klassOop k); + static void dump_class_and_array_classes(DumpWriter* writer, Klass* k); // creates HPROF_GC_CLASS_DUMP record for a given primitive array // class (and each multi-dimensional array class too) - static void dump_basic_type_array_class(DumpWriter* writer, klassOop k); + static void dump_basic_type_array_class(DumpWriter* writer, Klass* k); // creates HPROF_GC_OBJ_ARRAY_DUMP record for the given object array static void dump_object_array(DumpWriter* writer, objArrayOop array); // creates HPROF_GC_PRIM_ARRAY_DUMP record for the given type array static void dump_prim_array(DumpWriter* writer, typeArrayOop array); // create HPROF_FRAME record for the given method and bci - static void dump_stack_frame(DumpWriter* writer, int frame_serial_num, int class_serial_num, methodOop m, int bci); + static void dump_stack_frame(DumpWriter* writer, int frame_serial_num, int class_serial_num, Method* m, int bci); }; // write a header of the given type @@ -719,17 +719,8 @@ } // reflection and sun.misc.Unsafe classes may have a reference to a - // klassOop so filter it out. - if (o != NULL && o->is_klass()) { - o = NULL; - } - - // FIXME: When sharing is enabled we don't emit field references to objects - // in shared spaces. We can remove this once we write records for the classes - // and strings that are shared. - if (o != NULL && o->is_shared()) { - o = NULL; - } + // Klass* so filter it out. + assert(o->is_oop_or_null(), "should always be an oop"); writer->write_objectID(o); break; } @@ -778,7 +769,7 @@ } // returns the size of the instance of the given class -u4 DumperSupport::instance_size(klassOop k) { +u4 DumperSupport::instance_size(Klass* k) { HandleMark hm; instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), k); @@ -811,7 +802,7 @@ } // dumps static fields of the given class -void DumperSupport::dump_static_fields(DumpWriter* writer, klassOop k) { +void DumperSupport::dump_static_fields(DumpWriter* writer, Klass* k) { HandleMark hm; instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), k); @@ -856,7 +847,7 @@ } // dumps the definition of the instance fields for a given class -void DumperSupport::dump_instance_field_descriptors(DumpWriter* writer, klassOop k) { +void DumperSupport::dump_instance_field_descriptors(DumpWriter* writer, Klass* k) { HandleMark hm; instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), k); @@ -881,7 +872,7 @@ // creates HPROF_GC_INSTANCE_DUMP record for the given object void DumperSupport::dump_instance(DumpWriter* writer, oop o) { - klassOop k = o->klass(); + Klass* k = o->klass(); writer->write_u1(HPROF_GC_INSTANCE_DUMP); writer->write_objectID(o); @@ -899,10 +890,10 @@ // creates HPROF_GC_CLASS_DUMP record for the given class and each of // its array classes -void DumperSupport::dump_class_and_array_classes(DumpWriter* writer, klassOop k) { +void DumperSupport::dump_class_and_array_classes(DumpWriter* writer, Klass* k) { Klass* klass = Klass::cast(k); - assert(klass->oop_is_instance(), "not an instanceKlass"); - instanceKlass* ik = (instanceKlass*)klass; + assert(klass->oop_is_instance(), "not an InstanceKlass"); + InstanceKlass* ik = (InstanceKlass*)klass; writer->write_u1(HPROF_GC_CLASS_DUMP); @@ -911,9 +902,9 @@ writer->write_u4(STACK_TRACE_ID); // super class ID - klassOop java_super = ik->java_super(); + Klass* java_super = ik->java_super(); if (java_super == NULL) { - writer->write_objectID(NULL); + writer->write_objectID(oop(NULL)); } else { writer->write_classID(Klass::cast(java_super)); } @@ -923,8 +914,8 @@ writer->write_objectID(ik->protection_domain()); // reserved - writer->write_objectID(NULL); - writer->write_objectID(NULL); + writer->write_objectID(oop(NULL)); + writer->write_objectID(oop(NULL)); // instance size writer->write_u4(DumperSupport::instance_size(k)); @@ -957,8 +948,8 @@ writer->write_objectID(ik->signers()); writer->write_objectID(ik->protection_domain()); - writer->write_objectID(NULL); // reserved - writer->write_objectID(NULL); + writer->write_objectID(oop(NULL)); // reserved + writer->write_objectID(oop(NULL)); writer->write_u4(0); // instance size writer->write_u2(0); // constant pool writer->write_u2(0); // static fields @@ -971,7 +962,7 @@ // creates HPROF_GC_CLASS_DUMP record for a given primitive array // class (and each multi-dimensional array class too) -void DumperSupport::dump_basic_type_array_class(DumpWriter* writer, klassOop k) { +void DumperSupport::dump_basic_type_array_class(DumpWriter* writer, Klass* k) { // array classes while (k != NULL) { Klass* klass = Klass::cast(k); @@ -981,16 +972,16 @@ writer->write_u4(STACK_TRACE_ID); // super class of array classes is java.lang.Object - klassOop java_super = klass->java_super(); + Klass* java_super = klass->java_super(); assert(java_super != NULL, "checking"); writer->write_classID(Klass::cast(java_super)); - writer->write_objectID(NULL); // loader - writer->write_objectID(NULL); // signers - writer->write_objectID(NULL); // protection domain + writer->write_objectID(oop(NULL)); // loader + writer->write_objectID(oop(NULL)); // signers + writer->write_objectID(oop(NULL)); // protection domain - writer->write_objectID(NULL); // reserved - writer->write_objectID(NULL); + writer->write_objectID(oop(NULL)); // reserved + writer->write_objectID(oop(NULL)); writer->write_u4(0); // instance size writer->write_u2(0); // constant pool writer->write_u2(0); // static fields @@ -1004,9 +995,6 @@ // creates HPROF_GC_OBJ_ARRAY_DUMP record for the given object array void DumperSupport::dump_object_array(DumpWriter* writer, objArrayOop array) { - // filter this - if (array->klass() == Universe::systemObjArrayKlassObj()) return; - writer->write_u1(HPROF_GC_OBJ_ARRAY_DUMP); writer->write_objectID(array); writer->write_u4(STACK_TRACE_ID); @@ -1111,11 +1099,11 @@ } } -// create a HPROF_FRAME record of the given methodOop and bci +// create a HPROF_FRAME record of the given Method* and bci void DumperSupport::dump_stack_frame(DumpWriter* writer, int frame_serial_num, int class_serial_num, - methodOop m, + Method* m, int bci) { int line_number; if (m->is_native()) { @@ -1129,8 +1117,8 @@ writer->write_symbolID(m->name()); // method's name writer->write_symbolID(m->signature()); // method's signature - assert(Klass::cast(m->method_holder())->oop_is_instance(), "not instanceKlass"); - writer->write_symbolID(instanceKlass::cast(m->method_holder())->source_file_name()); // source file name + assert(Klass::cast(m->method_holder())->oop_is_instance(), "not InstanceKlass"); + writer->write_symbolID(InstanceKlass::cast(m->method_holder())->source_file_name()); // source file name writer->write_u4(class_serial_num); // class serial number writer->write_u4((u4) line_number); // line number } @@ -1242,7 +1230,7 @@ // Support class used to generate HPROF_GC_ROOT_STICKY_CLASS records -class StickyClassDumper : public OopClosure { +class StickyClassDumper : public KlassClosure { private: DumpWriter* _writer; DumpWriter* writer() const { return _writer; } @@ -1250,23 +1238,14 @@ StickyClassDumper(DumpWriter* writer) { _writer = writer; } - void do_oop(oop* obj_p); - void do_oop(narrowOop* obj_p) { ShouldNotReachHere(); } -}; - -void StickyClassDumper::do_oop(oop* obj_p) { - if (*obj_p != NULL) { - oop o = *obj_p; - if (o->is_klass()) { - klassOop k = klassOop(o); - if (Klass::cast(k)->oop_is_instance()) { - instanceKlass* ik = instanceKlass::cast(k); + void do_klass(Klass* k) { + if (k->oop_is_instance()) { + InstanceKlass* ik = InstanceKlass::cast(k); writer()->write_u1(HPROF_GC_ROOT_STICKY_CLASS); writer()->write_classID(ik); } } - } -} +}; class VM_HeapDumper; @@ -1298,9 +1277,6 @@ // hide the sentinel for deleted handles if (o == JNIHandles::deleted_handle()) return; - // ignore KlassKlass objects - if (o->is_klass()) return; - // skip classes as these emitted as HPROF_GC_CLASS_DUMP records if (o->klass() == SystemDictionary::Class_klass()) { if (!java_lang_Class::is_primitive(o)) { @@ -1334,7 +1310,7 @@ static DumpWriter* _global_writer; DumpWriter* _local_writer; JavaThread* _oome_thread; - methodOop _oome_constructor; + Method* _oome_constructor; bool _gc_before_heap_dump; bool _is_segmented_dump; jlong _dump_start; @@ -1364,15 +1340,15 @@ bool skip_operation() const; // writes a HPROF_LOAD_CLASS record - static void do_load_class(klassOop k); + static void do_load_class(Klass* k); // writes a HPROF_GC_CLASS_DUMP record for the given class // (and each array class too) - static void do_class_dump(klassOop k); + static void do_class_dump(Klass* k); // writes a HPROF_GC_CLASS_DUMP records for a given basic type // array (and each multi-dimensional array too) - static void do_basic_type_array_class_dump(klassOop k); + static void do_basic_type_array_class_dump(Klass* k); // HPROF_GC_ROOT_THREAD_OBJ records int do_thread(JavaThread* thread, u4 thread_serial_num); @@ -1411,7 +1387,7 @@ if (oome) { assert(!Thread::current()->is_VM_thread(), "Dump from OutOfMemoryError cannot be called by the VMThread"); // get OutOfMemoryError zero-parameter constructor - instanceKlass* oome_ik = instanceKlass::cast(SystemDictionary::OutOfMemoryError_klass()); + InstanceKlass* oome_ik = InstanceKlass::cast(SystemDictionary::OutOfMemoryError_klass()); _oome_constructor = oome_ik->find_method(vmSymbols::object_initializer_name(), vmSymbols::void_method_signature()); // get thread throwing OOME when generating the heap dump at OOME @@ -1535,7 +1511,7 @@ // writes a HPROF_LOAD_CLASS record for the class (and each of its // array classes) -void VM_HeapDumper::do_load_class(klassOop k) { +void VM_HeapDumper::do_load_class(Klass* k) { static u4 class_serial_num = 0; // len of HPROF_LOAD_CLASS record @@ -1552,7 +1528,7 @@ Klass* klass = Klass::cast(k); writer()->write_classID(klass); - // add the klassOop and class serial number pair + // add the Klass* and class serial number pair dumper()->add_class_serial_number(klass, class_serial_num); writer()->write_u4(STACK_TRACE_ID); @@ -1567,13 +1543,13 @@ } // writes a HPROF_GC_CLASS_DUMP record for the given class -void VM_HeapDumper::do_class_dump(klassOop k) { +void VM_HeapDumper::do_class_dump(Klass* k) { DumperSupport::dump_class_and_array_classes(writer(), k); } // writes a HPROF_GC_CLASS_DUMP records for a given basic type // array (and each multi-dimensional array too) -void VM_HeapDumper::do_basic_type_array_class_dump(klassOop k) { +void VM_HeapDumper::do_basic_type_array_class_dump(Klass* k) { DumperSupport::dump_basic_type_array_class(writer(), k); } @@ -1785,7 +1761,7 @@ // HPROF_GC_ROOT_STICKY_CLASS StickyClassDumper class_dumper(writer()); - SystemDictionary::always_strong_oops_do(&class_dumper); + SystemDictionary::always_strong_classes_do(&class_dumper); // fixes up the length of the dump record. In the case of a segmented // heap then the HPROF_HEAP_DUMP_END record is also written. @@ -1829,7 +1805,7 @@ } for (int j=0; j < depth; j++) { StackFrameInfo* frame = stack_trace->stack_frame_at(j); - methodOop m = frame->method(); + Method* m = frame->method(); int class_serial_num = _klass_map->find(Klass::cast(m->method_holder())); // the class serial number starts from 1 assert(class_serial_num > 0, "class not found"); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/heapDumper.hpp --- a/src/share/vm/services/heapDumper.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/heapDumper.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,6 @@ #define SHARE_VM_SERVICES_HEAPDUMPER_HPP #include "memory/allocation.hpp" -#include "oops/klassOop.hpp" #include "oops/oop.hpp" #include "runtime/os.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/lowMemoryDetector.cpp --- a/src/share/vm/services/lowMemoryDetector.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/lowMemoryDetector.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -295,7 +295,7 @@ assert(count <= _pending_trigger_count, "just checking"); if (_sensor_obj != NULL) { - klassOop k = Management::sun_management_Sensor_klass(CHECK); + Klass* k = Management::sun_management_Sensor_klass(CHECK); instanceKlassHandle sensorKlass (THREAD, k); Handle sensor_h(THREAD, _sensor_obj); Handle usage_h = MemoryService::create_MemoryUsage_obj(_usage, CHECK); @@ -324,7 +324,7 @@ void SensorInfo::clear(int count, TRAPS) { if (_sensor_obj != NULL) { - klassOop k = Management::sun_management_Sensor_klass(CHECK); + Klass* k = Management::sun_management_Sensor_klass(CHECK); instanceKlassHandle sensorKlass (THREAD, k); Handle sensor(THREAD, _sensor_obj); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/management.cpp --- a/src/share/vm/services/management.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/management.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,6 @@ #include "memory/oopFactory.hpp" #include "memory/resourceArea.hpp" #include "oops/klass.hpp" -#include "oops/klassOop.hpp" #include "oops/objArrayKlass.hpp" #include "oops/oop.inline.hpp" #include "runtime/arguments.hpp" @@ -59,15 +58,15 @@ PerfVariable* Management::_end_vm_creation_time = NULL; PerfVariable* Management::_vm_init_done_time = NULL; -klassOop Management::_sensor_klass = NULL; -klassOop Management::_threadInfo_klass = NULL; -klassOop Management::_memoryUsage_klass = NULL; -klassOop Management::_memoryPoolMXBean_klass = NULL; -klassOop Management::_memoryManagerMXBean_klass = NULL; -klassOop Management::_garbageCollectorMXBean_klass = NULL; -klassOop Management::_managementFactory_klass = NULL; -klassOop Management::_garbageCollectorImpl_klass = NULL; -klassOop Management::_gcInfo_klass = NULL; +Klass* Management::_sensor_klass = NULL; +Klass* Management::_threadInfo_klass = NULL; +Klass* Management::_memoryUsage_klass = NULL; +Klass* Management::_memoryPoolMXBean_klass = NULL; +Klass* Management::_memoryManagerMXBean_klass = NULL; +Klass* Management::_garbageCollectorMXBean_klass = NULL; +Klass* Management::_managementFactory_klass = NULL; +Klass* Management::_garbageCollectorImpl_klass = NULL; +Klass* Management::_gcInfo_klass = NULL; jmmOptionalSupport Management::_optional_support = {0}; TimeStamp Management::_stamp; @@ -136,7 +135,7 @@ // Load and initialize the sun.management.Agent class // invoke startAgent method to start the management server Handle loader = Handle(THREAD, SystemDictionary::java_system_loader()); - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::sun_management_Agent(), + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::sun_management_Agent(), loader, Handle(), true, @@ -156,12 +155,15 @@ memcpy(support, &_optional_support, sizeof(jmmOptionalSupport)); } -klassOop Management::load_and_initialize_klass(Symbol* sh, TRAPS) { - klassOop k = SystemDictionary::resolve_or_fail(sh, true, CHECK_NULL); +Klass* Management::load_and_initialize_klass(Symbol* sh, TRAPS) { + Klass* k = SystemDictionary::resolve_or_fail(sh, true, CHECK_NULL); instanceKlassHandle ik (THREAD, k); if (ik->should_be_initialized()) { ik->initialize(CHECK_NULL); } + // If these classes change to not be owned by the boot loader, they need + // to be walked to keep their class loader alive in oops_do. + assert(ik->class_loader() == NULL, "need to follow in oops_do"); return ik(); } @@ -184,75 +186,65 @@ void Management::oops_do(OopClosure* f) { MemoryService::oops_do(f); ThreadService::oops_do(f); - - f->do_oop((oop*) &_sensor_klass); - f->do_oop((oop*) &_threadInfo_klass); - f->do_oop((oop*) &_memoryUsage_klass); - f->do_oop((oop*) &_memoryPoolMXBean_klass); - f->do_oop((oop*) &_memoryManagerMXBean_klass); - f->do_oop((oop*) &_garbageCollectorMXBean_klass); - f->do_oop((oop*) &_managementFactory_klass); - f->do_oop((oop*) &_garbageCollectorImpl_klass); - f->do_oop((oop*) &_gcInfo_klass); } -klassOop Management::java_lang_management_ThreadInfo_klass(TRAPS) { +Klass* Management::java_lang_management_ThreadInfo_klass(TRAPS) { if (_threadInfo_klass == NULL) { _threadInfo_klass = load_and_initialize_klass(vmSymbols::java_lang_management_ThreadInfo(), CHECK_NULL); } return _threadInfo_klass; } -klassOop Management::java_lang_management_MemoryUsage_klass(TRAPS) { +Klass* Management::java_lang_management_MemoryUsage_klass(TRAPS) { if (_memoryUsage_klass == NULL) { _memoryUsage_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryUsage(), CHECK_NULL); } return _memoryUsage_klass; } -klassOop Management::java_lang_management_MemoryPoolMXBean_klass(TRAPS) { +Klass* Management::java_lang_management_MemoryPoolMXBean_klass(TRAPS) { if (_memoryPoolMXBean_klass == NULL) { _memoryPoolMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryPoolMXBean(), CHECK_NULL); } return _memoryPoolMXBean_klass; } -klassOop Management::java_lang_management_MemoryManagerMXBean_klass(TRAPS) { +Klass* Management::java_lang_management_MemoryManagerMXBean_klass(TRAPS) { if (_memoryManagerMXBean_klass == NULL) { _memoryManagerMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_MemoryManagerMXBean(), CHECK_NULL); } return _memoryManagerMXBean_klass; } -klassOop Management::java_lang_management_GarbageCollectorMXBean_klass(TRAPS) { +Klass* Management::java_lang_management_GarbageCollectorMXBean_klass(TRAPS) { if (_garbageCollectorMXBean_klass == NULL) { _garbageCollectorMXBean_klass = load_and_initialize_klass(vmSymbols::java_lang_management_GarbageCollectorMXBean(), CHECK_NULL); } return _garbageCollectorMXBean_klass; } -klassOop Management::sun_management_Sensor_klass(TRAPS) { +Klass* Management::sun_management_Sensor_klass(TRAPS) { if (_sensor_klass == NULL) { _sensor_klass = load_and_initialize_klass(vmSymbols::sun_management_Sensor(), CHECK_NULL); } return _sensor_klass; } -klassOop Management::sun_management_ManagementFactory_klass(TRAPS) { +Klass* Management::sun_management_ManagementFactory_klass(TRAPS) { if (_managementFactory_klass == NULL) { _managementFactory_klass = load_and_initialize_klass(vmSymbols::sun_management_ManagementFactory(), CHECK_NULL); } return _managementFactory_klass; } -klassOop Management::sun_management_GarbageCollectorImpl_klass(TRAPS) { +Klass* Management::sun_management_GarbageCollectorImpl_klass(TRAPS) { if (_garbageCollectorImpl_klass == NULL) { _garbageCollectorImpl_klass = load_and_initialize_klass(vmSymbols::sun_management_GarbageCollectorImpl(), CHECK_NULL); } return _garbageCollectorImpl_klass; } -klassOop Management::com_sun_management_GcInfo_klass(TRAPS) { +Klass* Management::com_sun_management_GcInfo_klass(TRAPS) { if (_gcInfo_klass == NULL) { _gcInfo_klass = load_and_initialize_klass(vmSymbols::com_sun_management_GcInfo(), CHECK_NULL); } @@ -303,7 +295,7 @@ // Helper function to construct a ThreadInfo object instanceOop Management::create_thread_info_instance(ThreadSnapshot* snapshot, TRAPS) { - klassOop k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); + Klass* k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); instanceKlassHandle ik (THREAD, k); JavaValue result(T_VOID); @@ -333,7 +325,7 @@ typeArrayHandle depths_array, objArrayHandle synchronizers_array, TRAPS) { - klassOop k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); + Klass* k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); instanceKlassHandle ik (THREAD, k); JavaValue result(T_VOID); @@ -388,7 +380,7 @@ oop mgr_obj = JNIHandles::resolve(mgr); instanceHandle h(THREAD, (instanceOop) mgr_obj); - klassOop k = Management::java_lang_management_GarbageCollectorMXBean_klass(CHECK_NULL); + Klass* k = Management::java_lang_management_GarbageCollectorMXBean_klass(CHECK_NULL); if (!h->is_a(k)) { THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), "the object is not an instance of java.lang.management.GarbageCollectorMXBean class", @@ -433,8 +425,8 @@ static void validate_thread_info_array(objArrayHandle infoArray_h, TRAPS) { // check if the element of infoArray is of type ThreadInfo class - klassOop threadinfo_klass = Management::java_lang_management_ThreadInfo_klass(CHECK); - klassOop element_klass = objArrayKlass::cast(infoArray_h->klass())->element_klass(); + Klass* threadinfo_klass = Management::java_lang_management_ThreadInfo_klass(CHECK); + Klass* element_klass = objArrayKlass::cast(infoArray_h->klass())->element_klass(); if (element_klass != threadinfo_klass) { THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "infoArray element type is not ThreadInfo class"); @@ -574,7 +566,7 @@ } // Allocate the resulting MemoryPoolMXBean[] object - klassOop k = Management::java_lang_management_MemoryPoolMXBean_klass(CHECK_NULL); + Klass* k = Management::java_lang_management_MemoryPoolMXBean_klass(CHECK_NULL); instanceKlassHandle ik (THREAD, k); objArrayOop r = oopFactory::new_objArray(ik(), num_memory_pools, CHECK_NULL); objArrayHandle poolArray(THREAD, r); @@ -619,7 +611,7 @@ } // Allocate the resulting MemoryManagerMXBean[] object - klassOop k = Management::java_lang_management_MemoryManagerMXBean_klass(CHECK_NULL); + Klass* k = Management::java_lang_management_MemoryManagerMXBean_klass(CHECK_NULL); instanceKlassHandle ik (THREAD, k); objArrayOop r = oopFactory::new_objArray(ik(), num_mgrs, CHECK_NULL); objArrayHandle mgrArray(THREAD, r); @@ -696,7 +688,7 @@ THROW(vmSymbols::java_lang_NullPointerException()); } - klassOop sensor_klass = Management::sun_management_Sensor_klass(CHECK); + Klass* sensor_klass = Management::sun_management_Sensor_klass(CHECK); oop s = JNIHandles::resolve(sensorObj); assert(s->is_instance(), "Sensor should be an instanceOop"); instanceHandle sensor_h(THREAD, (instanceOop) s); @@ -1306,7 +1298,7 @@ int num_snapshots = dump_result.num_snapshots(); // create the result ThreadInfo[] object - klassOop k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); + Klass* k = Management::java_lang_management_ThreadInfo_klass(CHECK_NULL); instanceKlassHandle ik (THREAD, k); objArrayOop r = oopFactory::new_objArray(ik(), num_snapshots, CHECK_NULL); objArrayHandle result_h(THREAD, r); @@ -1723,7 +1715,7 @@ objArrayOop ta = objArrayOop(JNIHandles::resolve_non_null(names)); objArrayHandle names_ah(THREAD, ta); // Make sure we have a String array - klassOop element_klass = objArrayKlass::cast(names_ah->klass())->element_klass(); + Klass* element_klass = objArrayKlass::cast(names_ah->klass())->element_klass(); if (element_klass != SystemDictionary::String_klass()) { THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), "Array element type is not String class", 0); @@ -1877,7 +1869,7 @@ objArrayHandle names_ah(THREAD, na); // Make sure we have a String array - klassOop element_klass = objArrayKlass::cast(names_ah->klass())->element_klass(); + Klass* element_klass = objArrayKlass::cast(names_ah->klass())->element_klass(); if (element_klass != SystemDictionary::String_klass()) { THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), "Array element type is not String class", 0); @@ -1993,8 +1985,8 @@ } // check if the element of array is of type MemoryUsage class - klassOop usage_klass = Management::java_lang_management_MemoryUsage_klass(CHECK_0); - klassOop element_klass = objArrayKlass::cast(array_h->klass())->element_klass(); + Klass* usage_klass = Management::java_lang_management_MemoryUsage_klass(CHECK_0); + Klass* element_klass = objArrayKlass::cast(array_h->klass())->element_klass(); if (element_klass != usage_klass) { THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), "The element type is not MemoryUsage class", 0); @@ -2142,7 +2134,7 @@ objArrayHandle cmds_ah(THREAD, ca); // Make sure we have a String array - klassOop element_klass = objArrayKlass::cast(cmds_ah->klass())->element_klass(); + Klass* element_klass = objArrayKlass::cast(cmds_ah->klass())->element_klass(); if (element_klass != SystemDictionary::String_klass()) { THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Array element type is not String class"); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/management.hpp --- a/src/share/vm/services/management.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/management.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,17 +42,17 @@ static TimeStamp _stamp; // Timestamp since vm init done time // Management klasses - static klassOop _sensor_klass; - static klassOop _threadInfo_klass; - static klassOop _memoryUsage_klass; - static klassOop _memoryPoolMXBean_klass; - static klassOop _memoryManagerMXBean_klass; - static klassOop _garbageCollectorMXBean_klass; - static klassOop _managementFactory_klass; - static klassOop _garbageCollectorImpl_klass; - static klassOop _gcInfo_klass; + static Klass* _sensor_klass; + static Klass* _threadInfo_klass; + static Klass* _memoryUsage_klass; + static Klass* _memoryPoolMXBean_klass; + static Klass* _memoryManagerMXBean_klass; + static Klass* _garbageCollectorMXBean_klass; + static Klass* _managementFactory_klass; + static Klass* _garbageCollectorImpl_klass; + static Klass* _gcInfo_klass; - static klassOop load_and_initialize_klass(Symbol* sh, TRAPS); + static Klass* load_and_initialize_klass(Symbol* sh, TRAPS); public: static void init(); @@ -83,16 +83,16 @@ return _vm_init_done_time->get_value(); } - // methods to return a klassOop. - static klassOop java_lang_management_ThreadInfo_klass(TRAPS); - static klassOop java_lang_management_MemoryUsage_klass(TRAPS); - static klassOop java_lang_management_MemoryPoolMXBean_klass(TRAPS); - static klassOop java_lang_management_MemoryManagerMXBean_klass(TRAPS); - static klassOop java_lang_management_GarbageCollectorMXBean_klass(TRAPS); - static klassOop sun_management_Sensor_klass(TRAPS); - static klassOop sun_management_ManagementFactory_klass(TRAPS); - static klassOop sun_management_GarbageCollectorImpl_klass(TRAPS); - static klassOop com_sun_management_GcInfo_klass(TRAPS); + // methods to return a Klass*. + static Klass* java_lang_management_ThreadInfo_klass(TRAPS); + static Klass* java_lang_management_MemoryUsage_klass(TRAPS); + static Klass* java_lang_management_MemoryPoolMXBean_klass(TRAPS); + static Klass* java_lang_management_MemoryManagerMXBean_klass(TRAPS); + static Klass* java_lang_management_GarbageCollectorMXBean_klass(TRAPS); + static Klass* sun_management_Sensor_klass(TRAPS); + static Klass* sun_management_ManagementFactory_klass(TRAPS); + static Klass* sun_management_GarbageCollectorImpl_klass(TRAPS); + static Klass* com_sun_management_GcInfo_klass(TRAPS); static instanceOop create_thread_info_instance(ThreadSnapshot* snapshot, TRAPS); static instanceOop create_thread_info_instance(ThreadSnapshot* snapshot, objArrayHandle monitors_array, typeArrayHandle depths_array, objArrayHandle synchronizers_array, TRAPS); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/memoryManager.cpp --- a/src/share/vm/services/memoryManager.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/memoryManager.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -100,7 +100,7 @@ if (mgr_obj == NULL) { // It's ok for more than one thread to execute the code up to the locked region. // Extra manager instances will just be gc'ed. - klassOop k = Management::sun_management_ManagementFactory_klass(CHECK_0); + Klass* k = Management::sun_management_ManagementFactory_klass(CHECK_0); instanceKlassHandle ik(THREAD, k); Handle mgr_name = java_lang_String::create_from_str(name(), CHECK_0); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/memoryPool.cpp --- a/src/share/vm/services/memoryPool.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/memoryPool.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -77,7 +77,7 @@ if (pool_obj == NULL) { // It's ok for more than one thread to execute the code up to the locked region. // Extra pool instances will just be gc'ed. - klassOop k = Management::sun_management_ManagementFactory_klass(CHECK_NULL); + Klass* k = Management::sun_management_ManagementFactory_klass(CHECK_NULL); instanceKlassHandle ik(THREAD, k); Handle pool_name = java_lang_String::create_from_str(_name, CHECK_NULL); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/memoryPool.hpp --- a/src/share/vm/services/memoryPool.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/memoryPool.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,8 +46,6 @@ class SensorInfo; class Generation; class DefNewGeneration; -class PSPermGen; -class PermGen; class ThresholdSupport; class MemoryPool : public CHeapObj { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/memoryService.cpp --- a/src/share/vm/services/memoryService.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/memoryService.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,7 +33,6 @@ #include "memory/generationSpec.hpp" #include "memory/heap.hpp" #include "memory/memRegion.hpp" -#include "memory/permGen.hpp" #include "memory/tenuredGeneration.hpp" #include "oops/oop.inline.hpp" #include "runtime/javaCalls.hpp" @@ -45,13 +44,11 @@ #include "services/memoryService.hpp" #include "utilities/growableArray.hpp" #ifndef SERIALGC -#include "gc_implementation/concurrentMarkSweep/cmsPermGen.hpp" #include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp" #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" #include "gc_implementation/parNew/parNewGeneration.hpp" #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" #include "gc_implementation/parallelScavenge/psOldGen.hpp" -#include "gc_implementation/parallelScavenge/psPermGen.hpp" #include "gc_implementation/parallelScavenge/psYoungGen.hpp" #include "services/g1MemoryPool.hpp" #include "services/psMemoryPool.hpp" @@ -160,25 +157,6 @@ add_generation_memory_pool(heap->get_gen(minor), _major_gc_manager, _minor_gc_manager); add_generation_memory_pool(heap->get_gen(major), _major_gc_manager); - - PermGen::Name name = policy->permanent_generation()->name(); - switch (name) { - case PermGen::MarkSweepCompact: { - CompactingPermGenGen* perm_gen = (CompactingPermGenGen*) heap->perm_gen(); - add_compact_perm_gen_memory_pool(perm_gen, _major_gc_manager); - break; - } -#ifndef SERIALGC - case PermGen::ConcurrentMarkSweep: { - CMSPermGenGen* cms_gen = (CMSPermGenGen*) heap->perm_gen(); - add_cms_perm_gen_memory_pool(cms_gen, _major_gc_manager); - break; - } -#endif // SERIALGC - default: - guarantee(false, "Unrecognized perm generation"); - break; - } } #ifndef SERIALGC @@ -194,7 +172,6 @@ add_psYoung_memory_pool(heap->young_gen(), _major_gc_manager, _minor_gc_manager); add_psOld_memory_pool(heap->old_gen(), _major_gc_manager); - add_psPerm_memory_pool(heap->perm_gen(), _major_gc_manager); } void MemoryService::add_g1_heap_info(G1CollectedHeap* g1h) { @@ -207,7 +184,6 @@ add_g1YoungGen_memory_pool(g1h, _major_gc_manager, _minor_gc_manager); add_g1OldGen_memory_pool(g1h, _major_gc_manager); - add_g1PermGen_memory_pool(g1h, _major_gc_manager); } #endif // SERIALGC @@ -349,45 +325,8 @@ } } -void MemoryService::add_compact_perm_gen_memory_pool(CompactingPermGenGen* perm_gen, - MemoryManager* mgr) { - PermanentGenerationSpec* spec = perm_gen->spec(); - size_t max_size = spec->max_size() - spec->read_only_size() - spec->read_write_size(); - MemoryPool* pool = add_space(perm_gen->unshared_space(), - "Perm Gen", - false, /* is_heap */ - max_size, - true /* support_usage_threshold */); - mgr->add_pool(pool); - if (UseSharedSpaces) { - pool = add_space(perm_gen->ro_space(), - "Perm Gen [shared-ro]", - false, /* is_heap */ - spec->read_only_size(), - true /* support_usage_threshold */); - mgr->add_pool(pool); - - pool = add_space(perm_gen->rw_space(), - "Perm Gen [shared-rw]", - false, /* is_heap */ - spec->read_write_size(), - true /* support_usage_threshold */); - mgr->add_pool(pool); - } -} #ifndef SERIALGC -void MemoryService::add_cms_perm_gen_memory_pool(CMSPermGenGen* cms_gen, - MemoryManager* mgr) { - - MemoryPool* pool = add_cms_space(cms_gen->cmsSpace(), - "CMS Perm Gen", - false, /* is_heap */ - cms_gen->reserved().byte_size(), - true /* support_usage_threshold */); - mgr->add_pool(pool); -} - void MemoryService::add_psYoung_memory_pool(PSYoungGen* gen, MemoryManager* major_mgr, MemoryManager* minor_mgr) { assert(major_mgr != NULL && minor_mgr != NULL, "Should have two managers"); @@ -421,15 +360,6 @@ _pools_list->append(old_gen); } -void MemoryService::add_psPerm_memory_pool(PSPermGen* gen, MemoryManager* mgr) { - PSGenerationPool* perm_gen = new PSGenerationPool(gen, - "PS Perm Gen", - MemoryPool::NonHeap, - true /* support_usage_threshold */); - mgr->add_pool(perm_gen); - _pools_list->append(perm_gen); -} - void MemoryService::add_g1YoungGen_memory_pool(G1CollectedHeap* g1h, MemoryManager* major_mgr, MemoryManager* minor_mgr) { @@ -454,39 +384,6 @@ mgr->add_pool(old_gen); _pools_list->append(old_gen); } - -void MemoryService::add_g1PermGen_memory_pool(G1CollectedHeap* g1h, - MemoryManager* mgr) { - assert(mgr != NULL, "should have one manager"); - - CompactingPermGenGen* perm_gen = (CompactingPermGenGen*) g1h->perm_gen(); - PermanentGenerationSpec* spec = perm_gen->spec(); - size_t max_size = spec->max_size() - spec->read_only_size() - - spec->read_write_size(); - MemoryPool* pool = add_space(perm_gen->unshared_space(), - "G1 Perm Gen", - false, /* is_heap */ - max_size, - true /* support_usage_threshold */); - mgr->add_pool(pool); - - // in case we support CDS in G1 - if (UseSharedSpaces) { - pool = add_space(perm_gen->ro_space(), - "G1 Perm Gen [shared-ro]", - false, /* is_heap */ - spec->read_only_size(), - true /* support_usage_threshold */); - mgr->add_pool(pool); - - pool = add_space(perm_gen->rw_space(), - "G1 Perm Gen [shared-rw]", - false, /* is_heap */ - spec->read_write_size(), - true /* support_usage_threshold */); - mgr->add_pool(pool); - } -} #endif // SERIALGC void MemoryService::add_code_heap_memory_pool(CodeHeap* heap) { @@ -605,7 +502,7 @@ } Handle MemoryService::create_MemoryUsage_obj(MemoryUsage usage, TRAPS) { - klassOop k = Management::java_lang_management_MemoryUsage_klass(CHECK_NH); + Klass* k = Management::java_lang_management_MemoryUsage_klass(CHECK_NH); instanceKlassHandle ik(THREAD, k); instanceHandle obj = ik->allocate_instance_handle(CHECK_NH); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/memoryService.hpp --- a/src/share/vm/services/memoryService.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/memoryService.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,15 +40,11 @@ class DefNewGeneration; class PSYoungGen; class PSOldGen; -class PSPermGen; class CodeHeap; class ContiguousSpace; class CompactibleFreeListSpace; -class PermanentGenerationSpec; class GenCollectedHeap; class ParallelScavengeHeap; -class CompactingPermGenGen; -class CMSPermGenGen; class G1CollectedHeap; // VM Monitoring and Management Support @@ -85,26 +81,18 @@ add_generation_memory_pool(gen, major_mgr, NULL); } - static void add_compact_perm_gen_memory_pool(CompactingPermGenGen* perm_gen, - MemoryManager* mgr); - static void add_cms_perm_gen_memory_pool(CMSPermGenGen* perm_gen, - MemoryManager* mgr); static void add_psYoung_memory_pool(PSYoungGen* gen, MemoryManager* major_mgr, MemoryManager* minor_mgr); static void add_psOld_memory_pool(PSOldGen* gen, MemoryManager* mgr); - static void add_psPerm_memory_pool(PSPermGen* perm, - MemoryManager* mgr); static void add_g1YoungGen_memory_pool(G1CollectedHeap* g1h, MemoryManager* major_mgr, MemoryManager* minor_mgr); static void add_g1OldGen_memory_pool(G1CollectedHeap* g1h, MemoryManager* mgr); - static void add_g1PermGen_memory_pool(G1CollectedHeap* g1h, - MemoryManager* mgr); static MemoryPool* add_space(ContiguousSpace* space, const char* name, diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/psMemoryPool.cpp --- a/src/share/vm/services/psMemoryPool.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/psMemoryPool.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,6 @@ #include "precompiled.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" -#include "gc_implementation/parallelScavenge/psPermGen.hpp" #include "oops/oop.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/javaCalls.hpp" @@ -42,14 +41,6 @@ gen->reserved().byte_size(), support_usage_threshold), _gen(gen) { } -PSGenerationPool::PSGenerationPool(PSPermGen* gen, - const char* name, - PoolType type, - bool support_usage_threshold) : - CollectedMemoryPool(name, type, gen->capacity_in_bytes(), - gen->reserved().byte_size(), support_usage_threshold), _gen(gen) { -} - MemoryUsage PSGenerationPool::get_memory_usage() { size_t maxSize = (available_for_allocation() ? max_size() : 0); size_t used = used_in_bytes(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/psMemoryPool.hpp --- a/src/share/vm/services/psMemoryPool.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/psMemoryPool.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,7 +42,6 @@ public: PSGenerationPool(PSOldGen* pool, const char* name, PoolType type, bool support_usage_threshold); - PSGenerationPool(PSPermGen* pool, const char* name, PoolType type, bool support_usage_threshold); MemoryUsage get_memory_usage(); size_t used_in_bytes() { return _gen->used_in_bytes(); } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/serviceUtil.hpp --- a/src/share/vm/services/serviceUtil.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/serviceUtil.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,11 +43,6 @@ return false; } - // ignore KlassKlass - if (o->is_klass()) { - return false; - } - // instance if (o->is_instance()) { // instance objects are visible @@ -58,11 +53,11 @@ return true; } // java.lang.Classes are visible - o = java_lang_Class::as_klassOop(o); - if (o->is_klass()) { + Klass* k = java_lang_Class::as_Klass(o); + if (k->is_klass()) { // if it's a class for an object, an object array, or // primitive (type) array then it's visible. - klassOop klass = (klassOop)o; + Klass* klass = k; if (Klass::cast(klass)->oop_is_instance()) { return true; } @@ -77,18 +72,13 @@ } // object arrays are visible if they aren't system object arrays if (o->is_objArray()) { - objArrayOop array = (objArrayOop)o; - if (array->klass() != Universe::systemObjArrayKlassObj()) { return true; - } else { - return false; - } } // type arrays are visible if (o->is_typeArray()) { return true; } - // everything else (methodOops, ...) aren't visible + // everything else (Method*s, ...) aren't visible return false; }; // end of visible_oop() diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/threadService.cpp --- a/src/share/vm/services/threadService.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/threadService.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -249,9 +249,9 @@ // Allocate the resulting StackTraceElement[][] object ResourceMark rm(THREAD); - klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_StackTraceElement_array(), true, CHECK_NH); - objArrayKlassHandle ik (THREAD, k); - objArrayOop r = oopFactory::new_objArray(ik(), num_threads, CHECK_NH); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_StackTraceElement_array(), true, CHECK_NH); + objArrayKlass* ik = objArrayKlass::cast(k); + objArrayOop r = oopFactory::new_objArray(ik, num_threads, CHECK_NH); objArrayHandle result_obj(THREAD, r); int num_snapshots = dump_result.num_snapshots(); @@ -384,7 +384,7 @@ ThreadDumpResult::ThreadDumpResult() : _num_threads(0), _num_snapshots(0), _snapshots(NULL), _next(NULL), _last(NULL) { // Create a new ThreadDumpResult object and append to the list. - // If GC happens before this function returns, methodOop + // If GC happens before this function returns, Method* // in the stack trace will be visited. ThreadService::add_thread_dump(this); } @@ -448,7 +448,6 @@ } void StackFrameInfo::oops_do(OopClosure* f) { - f->do_oop((oop*) &_method); if (_locked_monitors != NULL) { int length = _locked_monitors->length(); for (int i = 0; i < length; i++) { @@ -463,7 +462,7 @@ int len = (_locked_monitors != NULL ? _locked_monitors->length() : 0); for (int i = 0; i < len; i++) { oop o = _locked_monitors->at(i); - instanceKlass* ik = instanceKlass::cast(o->klass()); + InstanceKlass* ik = InstanceKlass::cast(o->klass()); st->print_cr("\t- locked <" INTPTR_FORMAT "> (a %s)", (address)o, ik->external_name()); } @@ -564,7 +563,7 @@ } Handle ThreadStackTrace::allocate_fill_stack_trace_element_array(TRAPS) { - klassOop k = SystemDictionary::StackTraceElement_klass(); + Klass* k = SystemDictionary::StackTraceElement_klass(); assert(k != NULL, "must be loaded in 1.4+"); instanceKlassHandle ik(THREAD, k); @@ -681,7 +680,7 @@ for (int i = 0; i < locks->length(); i++) { instanceOop obj = locks->at(i); - instanceKlass* ik = instanceKlass::cast(obj->klass()); + InstanceKlass* ik = InstanceKlass::cast(obj->klass()); st->print_cr("\t- <" INTPTR_FORMAT "> (a %s)", (address)obj, ik->external_name()); } st->cr(); @@ -832,7 +831,7 @@ oop obj = (oop)waitingToLockMonitor->object(); if (obj != NULL) { st->print(" (object "INTPTR_FORMAT ", a %s)", (address)obj, - (instanceKlass::cast(obj->klass()))->external_name()); + (InstanceKlass::cast(obj->klass()))->external_name()); if (!currentThread->current_pending_monitor_is_from_java()) { owner_desc = "\n in JNI, which is held by"; @@ -846,7 +845,7 @@ } else { st->print(" waiting for ownable synchronizer " INTPTR_FORMAT ", (a %s)", (address)waitingToLockBlocker, - (instanceKlass::cast(waitingToLockBlocker->klass()))->external_name()); + (InstanceKlass::cast(waitingToLockBlocker->klass()))->external_name()); assert(waitingToLockBlocker->is_a(SystemDictionary::abstract_ownable_synchronizer_klass()), "Must be an AbstractOwnableSynchronizer"); oop ownerObj = java_util_concurrent_locks_AbstractOwnableSynchronizer::get_owner_threadObj(waitingToLockBlocker); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/services/threadService.hpp --- a/src/share/vm/services/threadService.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/services/threadService.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -68,7 +68,7 @@ static bool _thread_allocated_memory_enabled; // Need to keep the list of thread dump result that - // keep references to methodOop since thread dump can be + // keep references to Method* since thread dump can be // requested by multiple threads concurrently. static ThreadDumpResult* _threaddump_list; @@ -272,12 +272,12 @@ void add_jni_locked_monitor(oop object) { _jni_locked_monitors->append(object); } }; -// StackFrameInfo for keeping methodOop and bci during +// StackFrameInfo for keeping Method* and bci during // stack walking for later construction of StackTraceElement[] // Java instances class StackFrameInfo : public CHeapObj { private: - methodOop _method; + Method* _method; int _bci; GrowableArray* _locked_monitors; // list of object monitors locked by this frame @@ -289,7 +289,7 @@ delete _locked_monitors; } }; - methodOop method() const { return _method; } + Method* method() const { return _method; } int bci() const { return _bci; } void oops_do(OopClosure* f); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/shark/sharkBuilder.cpp --- a/src/share/vm/shark/sharkBuilder.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/shark/sharkBuilder.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2009, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -26,7 +26,7 @@ #include "precompiled.hpp" #include "ci/ciMethod.hpp" #include "memory/resourceArea.hpp" -#include "oops/methodOop.hpp" +#include "oops/method.hpp" #include "runtime/os.hpp" #include "runtime/synchronizer.hpp" #include "runtime/thread.hpp" diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/shark/sharkCacheDecache.cpp --- a/src/share/vm/shark/sharkCacheDecache.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/shark/sharkCacheDecache.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2009 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -107,7 +107,7 @@ void SharkDecacher::process_method_slot(Value** value, int offset) { // Decache the method pointer write_value_to_frame( - SharkType::methodOop_type(), + SharkType::Method*_type(), *value, offset); @@ -205,7 +205,7 @@ void SharkCacher::process_method_slot(Value** value, int offset) { // Cache the method pointer - *value = read_value_from_frame(SharkType::methodOop_type(), offset); + *value = read_value_from_frame(SharkType::Method*_type(), offset); } void SharkFunctionEntryCacher::process_method_slot(Value** value, int offset) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/shark/sharkContext.cpp --- a/src/share/vm/shark/sharkContext.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/shark/sharkContext.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2009, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -61,8 +61,8 @@ _jniHandleBlock_type = PointerType::getUnqual( ArrayType::get(jbyte_type(), sizeof(JNIHandleBlock))); - _methodOop_type = PointerType::getUnqual( - ArrayType::get(jbyte_type(), sizeof(methodOopDesc))); + _Method*_type = PointerType::getUnqual( + ArrayType::get(jbyte_type(), sizeof(Method))); _monitor_type = ArrayType::get( jbyte_type(), frame::interpreter_frame_monitor_size() * wordSize); @@ -77,13 +77,13 @@ ArrayType::get(jbyte_type(), sizeof(ZeroStack))); std::vector params; - params.push_back(methodOop_type()); + params.push_back(Method*_type()); params.push_back(intptr_type()); params.push_back(thread_type()); _entry_point_type = FunctionType::get(jint_type(), params, false); params.clear(); - params.push_back(methodOop_type()); + params.push_back(Method*_type()); params.push_back(PointerType::getUnqual(jbyte_type())); params.push_back(intptr_type()); params.push_back(thread_type()); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/shark/sharkContext.hpp --- a/src/share/vm/shark/sharkContext.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/shark/sharkContext.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2009, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -118,7 +118,7 @@ const llvm::PointerType* _jniEnv_type; const llvm::PointerType* _jniHandleBlock_type; const llvm::PointerType* _klass_type; - const llvm::PointerType* _methodOop_type; + const llvm::PointerType* _Method*_type; const llvm::ArrayType* _monitor_type; const llvm::PointerType* _oop_type; const llvm::PointerType* _thread_type; @@ -139,8 +139,8 @@ const llvm::PointerType* klass_type() const { return _klass_type; } - const llvm::PointerType* methodOop_type() const { - return _methodOop_type; + const llvm::PointerType* Method*_type() const { + return _Method*_type; } const llvm::ArrayType* monitor_type() const { return _monitor_type; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/shark/sharkRuntime.cpp --- a/src/share/vm/shark/sharkRuntime.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/shark/sharkRuntime.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2009, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -24,7 +24,6 @@ */ #include "precompiled.hpp" -#include "oops/klassOop.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/deoptimization.hpp" #include "runtime/thread.hpp" @@ -43,13 +42,13 @@ KlassHandle exc_klass(thread, ((oop) tos_at(thread, 0))->klass()); for (int i = 0; i < num_indexes; i++) { - klassOop tmp = pool->klass_at(indexes[i], CHECK_0); + Klass* tmp = pool->klass_at(indexes[i], CHECK_0); KlassHandle chk_klass(thread, tmp); if (exc_klass() == chk_klass()) return i; - if (exc_klass()->klass_part()->is_subtype_of(chk_klass())) + if (exc_klass()->is_subtype_of(chk_klass())) return i; } @@ -83,7 +82,7 @@ JRT_END JRT_ENTRY(void, SharkRuntime::new_instance(JavaThread* thread, int index)) - klassOop k_oop = method(thread)->constants()->klass_at(index, CHECK); + Klass* k_oop = method(thread)->constants()->klass_at(index, CHECK); instanceKlassHandle klass(THREAD, k_oop); // Make sure we are not instantiating an abstract klass @@ -120,7 +119,7 @@ JRT_ENTRY(void, SharkRuntime::anewarray(JavaThread* thread, int index, int size)) - klassOop klass = method(thread)->constants()->klass_at(index, CHECK); + Klass* klass = method(thread)->constants()->klass_at(index, CHECK); objArrayOop obj = oopFactory::new_objArray(klass, size, CHECK); thread->set_vm_result(obj); JRT_END @@ -129,7 +128,7 @@ int index, int ndims, int* dims)) - klassOop klass = method(thread)->constants()->klass_at(index, CHECK); + Klass* klass = method(thread)->constants()->klass_at(index, CHECK); oop obj = arrayKlass::cast(klass)->multi_allocate(ndims, dims, CHECK); thread->set_vm_result(obj); JRT_END @@ -137,8 +136,8 @@ JRT_ENTRY(void, SharkRuntime::register_finalizer(JavaThread* thread, oop object)) assert(object->is_oop(), "should be"); - assert(object->klass()->klass_part()->has_finalizer(), "should have"); - instanceKlass::register_finalizer(instanceOop(object), CHECK); + assert(object->klass()->has_finalizer(), "should have"); + InstanceKlass::register_finalizer(instanceOop(object), CHECK); JRT_END JRT_ENTRY(void, SharkRuntime::throw_ArithmeticException(JavaThread* thread, @@ -196,8 +195,8 @@ tty->print_cr(""); } -bool SharkRuntime::is_subtype_of(klassOop check_klass, klassOop object_klass) { - return object_klass->klass_part()->is_subtype_of(check_klass); +bool SharkRuntime::is_subtype_of(Klass* check_klass, Klass* object_klass) { + return object_klass->is_subtype_of(check_klass); } int SharkRuntime::uncommon_trap(JavaThread* thread, int trap_request) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/shark/sharkRuntime.hpp --- a/src/share/vm/shark/sharkRuntime.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/shark/sharkRuntime.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2009, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -27,7 +27,6 @@ #define SHARE_VM_SHARK_SHARKRUNTIME_HPP #include "memory/allocation.hpp" -#include "oops/klassOop.hpp" #include "runtime/thread.hpp" #include "shark/llvmHeaders.hpp" #include "shark/llvmValue.hpp" @@ -71,7 +70,7 @@ static const SharkFrame* last_frame(JavaThread *thread) { return thread->last_frame().zero_sharkframe(); } - static methodOop method(JavaThread *thread) { + static Method* method(JavaThread *thread) { return last_frame(thread)->method(); } static address bcp(JavaThread *thread, int bci) { @@ -87,7 +86,7 @@ // Non-VM calls public: static void dump(const char *name, intptr_t value); - static bool is_subtype_of(klassOop check_klass, klassOop object_klass); + static bool is_subtype_of(Klass* check_klass, Klass* object_klass); static int uncommon_trap(JavaThread* thread, int trap_request); }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/shark/sharkStack.cpp --- a/src/share/vm/shark/sharkStack.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/shark/sharkStack.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2009, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -75,7 +75,7 @@ _method_slot_offset = offset++; if (setup_sp_and_method) { builder()->CreateStore( - method, slot_addr(method_slot_offset(), SharkType::methodOop_type())); + method, slot_addr(method_slot_offset(), SharkType::Method*_type())); } // Unextended SP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/shark/sharkState.cpp --- a/src/share/vm/shark/sharkState.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/shark/sharkState.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2009 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -131,7 +131,7 @@ Value *this_method = this->method(); Value *other_method = other->method(); if (this_method != other_method) { - PHINode *phi = builder()->CreatePHI(SharkType::methodOop_type(), "method"); + PHINode *phi = builder()->CreatePHI(SharkType::Method*_type(), "method"); phi->addIncoming(this_method, this_block); phi->addIncoming(other_method, other_block); set_method(phi); @@ -287,7 +287,7 @@ char name[18]; // Method - set_method(builder()->CreatePHI(SharkType::methodOop_type(), "method")); + set_method(builder()->CreatePHI(SharkType::Method*_type(), "method")); // Local variables for (int i = 0; i < max_locals(); i++) { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/shark/sharkTopLevelBlock.cpp --- a/src/share/vm/shark/sharkTopLevelBlock.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/shark/sharkTopLevelBlock.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2009, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -1103,7 +1103,7 @@ Value *SharkTopLevelBlock::get_direct_callee(ciMethod* method) { return builder()->CreateBitCast( builder()->CreateInlineOop(method), - SharkType::methodOop_type(), + SharkType::Method*_type(), "callee"); } @@ -1118,9 +1118,9 @@ return builder()->CreateLoad( builder()->CreateArrayAddress( klass, - SharkType::methodOop_type(), + SharkType::Method*_type(), vtableEntry::size() * wordSize, - in_ByteSize(instanceKlass::vtable_start_offset() * wordSize), + in_ByteSize(InstanceKlass::vtable_start_offset() * wordSize), LLVMValue::intptr_constant(vtable_index)), "callee"); } @@ -1142,12 +1142,12 @@ Value *vtable_start = builder()->CreateAdd( builder()->CreatePtrToInt(object_klass, SharkType::intptr_type()), LLVMValue::intptr_constant( - instanceKlass::vtable_start_offset() * HeapWordSize), + InstanceKlass::vtable_start_offset() * HeapWordSize), "vtable_start"); Value *vtable_length = builder()->CreateValueOfStructEntry( object_klass, - in_ByteSize(instanceKlass::vtable_length_offset() * HeapWordSize), + in_ByteSize(InstanceKlass::vtable_length_offset() * HeapWordSize), SharkType::jint_type(), "vtable_length"); vtable_length = @@ -1231,7 +1231,7 @@ method->itable_index() * itableMethodEntry::size() * wordSize)), LLVMValue::intptr_constant( itableMethodEntry::method_offset_in_bytes())), - PointerType::getUnqual(SharkType::methodOop_type())), + PointerType::getUnqual(SharkType::Method*_type())), "callee"); } @@ -1312,7 +1312,7 @@ // Load the SharkEntry from the callee Value *base_pc = builder()->CreateValueOfStructEntry( - callee, methodOopDesc::from_interpreted_offset(), + callee, Method::from_interpreted_offset(), SharkType::intptr_type(), "base_pc"); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/shark/sharkType.hpp --- a/src/share/vm/shark/sharkType.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/shark/sharkType.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright 2008, 2009 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -82,8 +82,8 @@ static const llvm::PointerType* klass_type() { return context().klass_type(); } - static const llvm::PointerType* methodOop_type() { - return context().methodOop_type(); + static const llvm::PointerType* Method*_type() { + return context().Method*_type(); } static const llvm::ArrayType* monitor_type() { return context().monitor_type(); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/accessFlags.cpp --- a/src/share/vm/utilities/accessFlags.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/accessFlags.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -77,6 +77,7 @@ if (is_synthetic ()) st->print("synthetic " ); if (is_old ()) st->print("{old} " ); if (is_obsolete ()) st->print("{obsolete} " ); + if (on_stack ()) st->print("{on_stack} " ); } #endif diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/accessFlags.hpp --- a/src/share/vm/utilities/accessFlags.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/accessFlags.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,7 +39,7 @@ // flags actually put in .class file JVM_ACC_WRITTEN_FLAGS = 0x00007FFF, - // methodOop flags + // Method* flags JVM_ACC_MONITOR_MATCH = 0x10000000, // True if we know that monitorenter/monitorexit bytecodes match JVM_ACC_HAS_MONITOR_BYTECODES = 0x20000000, // Method contains monitorenter/monitorexit bytecodes JVM_ACC_HAS_LOOPS = 0x40000000, // Method has loops @@ -54,22 +54,23 @@ JVM_ACC_IS_OLD = 0x00010000, // RedefineClasses() has replaced this method JVM_ACC_IS_OBSOLETE = 0x00020000, // RedefineClasses() has made method obsolete JVM_ACC_IS_PREFIXED_NATIVE = 0x00040000, // JVMTI has prefixed this native method + JVM_ACC_ON_STACK = 0x00080000, // RedefinedClasses() is used on the stack - // klassOop flags + // Klass* flags JVM_ACC_HAS_MIRANDA_METHODS = 0x10000000, // True if this class has miranda methods in it's vtable JVM_ACC_HAS_VANILLA_CONSTRUCTOR = 0x20000000, // True if klass has a vanilla default constructor JVM_ACC_HAS_FINALIZER = 0x40000000, // True if klass has a non-empty finalize() method JVM_ACC_IS_CLONEABLE = (int)0x80000000,// True if klass supports the Clonable interface JVM_ACC_HAS_FINAL_METHOD = 0x01000000, // True if klass has final method - // klassOop and methodOop flags + // Klass* and Method* flags JVM_ACC_HAS_LOCAL_VARIABLE_TABLE= 0x00200000, JVM_ACC_PROMOTED_FLAGS = 0x00200000, // flags promoted from methods to the holding klass // field flags // Note: these flags must be defined in the low order 16 bits because - // instanceKlass only stores a ushort worth of information from the + // InstanceKlass only stores a ushort worth of information from the // AccessFlags value. // These bits must not conflict with any other field-related access flags // (e.g., ACC_ENUM). @@ -114,7 +115,7 @@ // Attribute flags bool is_synthetic () const { return (_flags & JVM_ACC_SYNTHETIC ) != 0; } - // methodOop flags + // Method* flags bool is_monitor_matching () const { return (_flags & JVM_ACC_MONITOR_MATCH ) != 0; } bool has_monitor_bytecodes () const { return (_flags & JVM_ACC_HAS_MONITOR_BYTECODES ) != 0; } bool has_loops () const { return (_flags & JVM_ACC_HAS_LOOPS ) != 0; } @@ -130,13 +131,13 @@ bool is_obsolete () const { return (_flags & JVM_ACC_IS_OBSOLETE ) != 0; } bool is_prefixed_native () const { return (_flags & JVM_ACC_IS_PREFIXED_NATIVE ) != 0; } - // klassOop flags + // Klass* flags bool has_miranda_methods () const { return (_flags & JVM_ACC_HAS_MIRANDA_METHODS ) != 0; } bool has_vanilla_constructor () const { return (_flags & JVM_ACC_HAS_VANILLA_CONSTRUCTOR) != 0; } bool has_finalizer () const { return (_flags & JVM_ACC_HAS_FINALIZER ) != 0; } bool has_final_method () const { return (_flags & JVM_ACC_HAS_FINAL_METHOD ) != 0; } bool is_cloneable () const { return (_flags & JVM_ACC_IS_CLONEABLE ) != 0; } - // klassOop and methodOop flags + // Klass* and Method* flags bool has_localvariable_table () const { return (_flags & JVM_ACC_HAS_LOCAL_VARIABLE_TABLE) != 0; } void set_has_localvariable_table() { atomic_set_bits(JVM_ACC_HAS_LOCAL_VARIABLE_TABLE); } void clear_has_localvariable_table() { atomic_clear_bits(JVM_ACC_HAS_LOCAL_VARIABLE_TABLE); } @@ -145,6 +146,7 @@ bool is_field_access_watched() const { return (_flags & JVM_ACC_FIELD_ACCESS_WATCHED) != 0; } bool is_field_modification_watched() const { return (_flags & JVM_ACC_FIELD_MODIFICATION_WATCHED) != 0; } + bool on_stack() const { return (_flags & JVM_ACC_ON_STACK) != 0; } bool is_internal() const { return (_flags & JVM_ACC_FIELD_INTERNAL) != 0; } bool field_has_generic_signature() const { return (_flags & JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE) != 0; } @@ -168,7 +170,7 @@ void atomic_clear_bits(jint bits); private: - friend class methodOopDesc; + friend class Method; friend class Klass; friend class ClassFileParser; // the functions below should only be called on the _access_flags inst var directly, @@ -177,7 +179,7 @@ // attribute flags void set_is_synthetic() { atomic_set_bits(JVM_ACC_SYNTHETIC); } - // methodOop flags + // Method* flags void set_monitor_matching() { atomic_set_bits(JVM_ACC_MONITOR_MATCH); } void set_has_monitor_bytecodes() { atomic_set_bits(JVM_ACC_HAS_MONITOR_BYTECODES); } void set_has_loops() { atomic_set_bits(JVM_ACC_HAS_LOOPS); } @@ -192,7 +194,7 @@ void set_is_obsolete() { atomic_set_bits(JVM_ACC_IS_OBSOLETE); } void set_is_prefixed_native() { atomic_set_bits(JVM_ACC_IS_PREFIXED_NATIVE); } - // klassOop flags + // Klass* flags void set_has_vanilla_constructor() { atomic_set_bits(JVM_ACC_HAS_VANILLA_CONSTRUCTOR); } void set_has_finalizer() { atomic_set_bits(JVM_ACC_HAS_FINALIZER); } void set_has_final_method() { atomic_set_bits(JVM_ACC_HAS_FINAL_METHOD); } @@ -222,6 +224,14 @@ atomic_set_bits(JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE); } + void set_on_stack(const bool value) + { + if (value) { + atomic_set_bits(JVM_ACC_ON_STACK); + } else { + atomic_clear_bits(JVM_ACC_ON_STACK); + } + } // Conversion jshort as_short() const { return (jshort)_flags; } jint as_int() const { return _flags; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/array.hpp --- a/src/share/vm/utilities/array.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/array.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ #include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" +#include "memory/metaspace.hpp" // correct linkage required to compile w/o warnings // (must be on file level - cannot be local) @@ -97,6 +98,10 @@ _data = (void*) NEW_C_HEAP_ARRAY(char *, esize * length, F); } + void initialize(size_t esize, int length) { + // In debug set array to 0? + } + #ifdef ASSERT void init_nesting(); #endif @@ -123,7 +128,7 @@ public: \ /* creation */ \ array_name() : base_class() {} \ - array_name(const int length) : base_class(esize, length) {} \ + explicit array_name(const int length) : base_class(esize, length) {} \ array_name(const int length, const etype fx) { initialize(length, fx); } \ void initialize(const int length) { base_class::initialize(esize, length); } \ void initialize(const int length, const etype fx) { \ @@ -292,4 +297,96 @@ define_array(boolArray, bool) define_stack(boolStack, boolArray) define_array(intArray , int ) define_stack(intStack , intArray ) +// Array for metadata allocation + +template +class Array: public MetaspaceObj { + friend class MetadataFactory; + friend class VMStructs; + friend class MethodHandleCompiler; // special case +protected: + int _length; // the number of array elements + T _data[1]; // the array memory + + void initialize(int length) { + _length = length; + } + + private: + // Turn off copy constructor and assignment operator. + Array(const Array&); + void operator=(const Array&); + + void* operator new(size_t size, ClassLoaderData* loader_data, int length, bool read_only, TRAPS) { + size_t word_size = Array::size(length); + return (void*) Metaspace::allocate(loader_data, word_size, read_only, + Metaspace::NonClassType, CHECK_NULL); + } + + static size_t byte_sizeof(int length) { return sizeof(Array) + MAX2(length - 1, 0) * sizeof(T); } + + explicit Array(int length) : _length(length) { + assert(length >= 0, "illegal length"); + } + + Array(int length, T init) : _length(length) { + assert(length >= 0, "illegal length"); + for (int i = 0; i < length; i++) { + _data[i] = init; + } + } + + public: + + // standard operations + int length() const { return _length; } + T* data() { return _data; } + bool is_empty() const { return length() == 0; } + + int index_of(const T& x) const { + int i = length(); + while (i-- > 0 && _data[i] != x) ; + + return i; + } + + // sort the array. + bool contains(const T& x) const { return index_of(x) >= 0; } + + T at(int i) const { return _data[i]; } + void at_put(const int i, const T& x) { _data[i] = x; } + T* adr_at(const int i) { return &_data[i]; } + int find(const T& x) { return index_of(x); } + + T at_acquire(const int which) { return OrderAccess::load_acquire(adr_at(which)); } + void release_at_put(int which, T contents) { OrderAccess::release_store(adr_at(which), contents); } + + static int size(int length) { + return align_size_up(byte_sizeof(length), BytesPerWord) / BytesPerWord; + } + + int size() { + return size(_length); + } + + static int length_offset_in_bytes() { return (int) (offset_of(Array, _length)); } + // Note, this offset don't have to be wordSize aligned. + static int base_offset_in_bytes() { return (int) (offset_of(Array, _data)); }; + + // FIXME: How to handle this? + void print_value_on(outputStream* st) const { + st->print("Array(" INTPTR_FORMAT ")", this); + } + +#ifndef PRODUCT + void print(outputStream* st) { + for (int i = 0; i< _length; i++) { + st->print_cr("%d: " INTPTR_FORMAT, i, (intptr_t)at(i)); + } + } + void print() { print(tty); } +#endif // PRODUCT +}; + + #endif // SHARE_VM_UTILITIES_ARRAY_HPP diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/constantTag.cpp --- a/src/share/vm/utilities/constantTag.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/constantTag.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,7 +49,6 @@ case JVM_CONSTANT_UnresolvedClass : case JVM_CONSTANT_UnresolvedClassInError : case JVM_CONSTANT_ClassIndex : - case JVM_CONSTANT_UnresolvedString : case JVM_CONSTANT_StringIndex : case JVM_CONSTANT_MethodHandle : case JVM_CONSTANT_MethodType : @@ -89,8 +88,12 @@ return "NameAndType"; case JVM_CONSTANT_MethodHandle : return "MethodHandle"; + case JVM_CONSTANT_MethodHandleInError : + return "MethodHandle Error"; case JVM_CONSTANT_MethodType : return "MethodType"; + case JVM_CONSTANT_MethodTypeInError : + return "MethodType Error"; case JVM_CONSTANT_InvokeDynamic : return "InvokeDynamic"; case JVM_CONSTANT_Object : @@ -103,8 +106,6 @@ return "Unresolved Class Error"; case JVM_CONSTANT_ClassIndex : return "Unresolved Class Index"; - case JVM_CONSTANT_UnresolvedString : - return "Unresolved String"; case JVM_CONSTANT_StringIndex : return "Unresolved String Index"; default: diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/constantTag.hpp --- a/src/share/vm/utilities/constantTag.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/constantTag.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,11 +39,12 @@ JVM_CONSTANT_InternalMin = 100, // First implementation tag (aside from bad value of course) JVM_CONSTANT_UnresolvedClass = 100, // Temporary tag until actual use JVM_CONSTANT_ClassIndex = 101, // Temporary tag while constructing constant pool - JVM_CONSTANT_UnresolvedString = 102, // Temporary tag until actual use - JVM_CONSTANT_StringIndex = 103, // Temporary tag while constructing constant pool - JVM_CONSTANT_UnresolvedClassInError = 104, // Error tag due to resolution error - JVM_CONSTANT_Object = 105, // Required for BoundMethodHandle arguments. - JVM_CONSTANT_InternalMax = 105 // Last implementation tag + JVM_CONSTANT_StringIndex = 102, // Temporary tag while constructing constant pool + JVM_CONSTANT_UnresolvedClassInError = 103, // Error tag due to resolution error + JVM_CONSTANT_MethodHandleInError = 104, // Error tag due to resolution error + JVM_CONSTANT_MethodTypeInError = 105, // Error tag due to resolution error + JVM_CONSTANT_Object = 106, // Required for BoundMethodHandle arguments. + JVM_CONSTANT_InternalMax = 106 // Last implementation tag }; @@ -73,8 +74,14 @@ return _tag == JVM_CONSTANT_UnresolvedClassInError; } + bool is_method_handle_in_error() const { + return _tag == JVM_CONSTANT_MethodHandleInError; + } + bool is_method_type_in_error() const { + return _tag == JVM_CONSTANT_MethodTypeInError; + } + bool is_klass_index() const { return _tag == JVM_CONSTANT_ClassIndex; } - bool is_unresolved_string() const { return _tag == JVM_CONSTANT_UnresolvedString; } bool is_string_index() const { return _tag == JVM_CONSTANT_StringIndex; } bool is_object() const { return _tag == JVM_CONSTANT_Object; } @@ -91,8 +98,7 @@ bool is_loadable_constant() const { return ((_tag >= JVM_CONSTANT_Integer && _tag <= JVM_CONSTANT_String) || is_method_type() || is_method_handle() || - is_unresolved_klass() || is_unresolved_string() || - is_object()); + is_unresolved_klass() || is_object()); } constantTag() { diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/debug.cpp --- a/src/share/vm/utilities/debug.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/debug.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -264,6 +264,10 @@ report_vm_error(file, line, "ShouldNotReachHere()"); } +void report_should_not_reach_here2(const char* file, int line, const char* message) { + report_vm_error(file, line, "ShouldNotReachHere()", message); +} + void report_unimplemented(const char* file, int line) { report_vm_error(file, line, "Unimplemented()"); } @@ -276,13 +280,13 @@ void report_out_of_shared_space(SharedSpaceType shared_space) { static const char* name[] = { - "permanent generation", + "native memory for metadata", "shared read only space", "shared read write space", "shared miscellaneous data space" }; static const char* flag[] = { - "PermGen", + "Metaspace", "SharedReadOnlySize", "SharedReadWriteSize", "SharedMiscDataSize" @@ -413,8 +417,8 @@ extern "C" void dump_vtable(address p) { Command c("dump_vtable"); - klassOop k = (klassOop)p; - instanceKlass::cast(k)->vtable()->print(); + Klass* k = (Klass*)p; + InstanceKlass::cast(k)->vtable()->print(); } @@ -627,10 +631,10 @@ } -extern "C" methodOop findm(intptr_t pc) { +extern "C" Method* findm(intptr_t pc) { Command c("findm"); nmethod* nm = CodeCache::find_nmethod((address)pc); - return (nm == NULL) ? (methodOop)NULL : nm->method(); + return (nm == NULL) ? (Method*)NULL : nm->method(); } @@ -650,82 +654,6 @@ } } -class LookForRefInGenClosure : public OopsInGenClosure { -public: - oop target; - void do_oop(oop* o) { - if (o != NULL && *o == target) { - tty->print_cr(INTPTR_FORMAT, o); - } - } - void do_oop(narrowOop* o) { ShouldNotReachHere(); } -}; - - -class LookForRefInObjectClosure : public ObjectClosure { -private: - LookForRefInGenClosure look_in_object; -public: - LookForRefInObjectClosure(oop target) { look_in_object.target = target; } - void do_object(oop obj) { - obj->oop_iterate(&look_in_object); - } -}; - - -static void findref(intptr_t x) { - CollectedHeap *ch = Universe::heap(); - LookForRefInGenClosure lookFor; - lookFor.target = (oop) x; - LookForRefInObjectClosure look_in_object((oop) x); - - tty->print_cr("Searching heap:"); - ch->object_iterate(&look_in_object); - - tty->print_cr("Searching strong roots:"); - Universe::oops_do(&lookFor, false); - JNIHandles::oops_do(&lookFor); // Global (strong) JNI handles - Threads::oops_do(&lookFor, NULL); - ObjectSynchronizer::oops_do(&lookFor); - //FlatProfiler::oops_do(&lookFor); - SystemDictionary::oops_do(&lookFor); - - tty->print_cr("Searching code cache:"); - CodeCache::oops_do(&lookFor); - - tty->print_cr("Done."); -} - -class FindClassObjectClosure: public ObjectClosure { - private: - const char* _target; - public: - FindClassObjectClosure(const char name[]) { _target = name; } - - virtual void do_object(oop obj) { - if (obj->is_klass()) { - Klass* k = klassOop(obj)->klass_part(); - if (k->name() != NULL) { - ResourceMark rm; - const char* ext = k->external_name(); - if ( strcmp(_target, ext) == 0 ) { - tty->print_cr("Found " INTPTR_FORMAT, obj); - obj->print(); - } - } - } - } -}; - -// -extern "C" void findclass(const char name[]) { - Command c("findclass"); - if (name != NULL) { - tty->print_cr("Finding class %s -> ", name); - FindClassObjectClosure srch(name); - Universe::heap()->permanent_object_iterate(&srch); - } -} // Another interface that isn't ambiguous in dbx. // Can we someday rename the other find to hsfind? @@ -735,11 +663,6 @@ } -extern "C" void hsfindref(intptr_t x) { - Command c("hsfindref"); - findref(x); -} - extern "C" void find(intptr_t x) { Command c("find"); os::print_location(tty, x, false); @@ -752,6 +675,17 @@ } +// Need method pointer to find bcp, when not in permgen. +extern "C" void findbcp(intptr_t method, intptr_t bcp) { + Command c("findbcp"); + Method* mh = (Method*)method; + if (!mh->is_native()) { + tty->print_cr("bci_from(%p) = %d; print_codes():", + mh, mh->bci_from(address(bcp))); + mh->print_codes_on(tty); + } +} + // int versions of all methods to avoid having to type type casts in the debugger void pp(intptr_t p) { pp((void*)p); } @@ -764,8 +698,8 @@ tty->print_cr(" pv(intptr_t p)- ((PrintableResourceObj*) p)->print()"); tty->print_cr(" ps() - print current thread stack"); tty->print_cr(" pss() - print all thread stacks"); - tty->print_cr(" pm(int pc) - print methodOop given compiled PC"); - tty->print_cr(" findm(intptr_t pc) - finds methodOop"); + tty->print_cr(" pm(int pc) - print Method* given compiled PC"); + tty->print_cr(" findm(intptr_t pc) - finds Method*"); tty->print_cr(" find(intptr_t x) - finds & prints nmethod/stub/bytecode/oop based on pointer into it"); tty->print_cr("misc."); @@ -812,7 +746,7 @@ (char *)"ps", CMDID_PS, " Print Current Thread Stack Trace", (char *)"pss", CMDID_PSS, " Print All Thread Stack Trace", (char *)"psf", CMDID_PSF, " Print All Stack Frames", - (char *)"findm", CMDID_FINDM, " Find a methodOop from a PC", + (char *)"findm", CMDID_FINDM, " Find a Method* from a PC", (char *)"findnm", CMDID_FINDNM, "Find an nmethod from a PC", (char *)"pp", CMDID_PP, " Find out something about a pointer", (char *)"break", CMDID_BPT, " Execute a breakpoint", @@ -837,7 +771,7 @@ intptr_t addr; char buffer[256]; nmethod *nm; - methodOop m; + Method* m; tty->print_cr("You have entered the diagnostic command interpreter"); tty->print("The supported commands are:\n"); @@ -872,7 +806,7 @@ case CMDID_FINDM: tty->print("Please enter the hex addr to pass to findm: "); scanf("%I64X", &addr); - m = (methodOop)findm(addr); + m = (Method*)findm(addr); tty->print("findm(0x%I64X) returned 0x%I64X\n", addr, m); break; case CMDID_FINDNM: diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/debug.hpp --- a/src/share/vm/utilities/debug.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/debug.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -192,6 +192,12 @@ BREAKPOINT; \ } while (0) +#define ShouldNotReachHere2(message) \ +do { \ + report_should_not_reach_here2(__FILE__, __LINE__, message); \ + BREAKPOINT; \ +} while (0) + #define Unimplemented() \ do { \ report_unimplemented(__FILE__, __LINE__); \ @@ -212,6 +218,7 @@ const char* message); void report_should_not_call(const char* file, int line); void report_should_not_reach_here(const char* file, int line); +void report_should_not_reach_here2(const char* file, int line, const char* message); void report_unimplemented(const char* file, int line); void report_untested(const char* file, int line, const char* message); diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/exceptions.cpp --- a/src/share/vm/utilities/exceptions.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/exceptions.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -88,7 +88,7 @@ // adequate stack space. // This can happen with stress testing a large value of StackShadowPages if (h_exception()->klass() == SystemDictionary::StackOverflowError_klass()) { - instanceKlass* ik = instanceKlass::cast(h_exception->klass()); + InstanceKlass* ik = InstanceKlass::cast(h_exception->klass()); assert(ik->is_initialized(), "need to increase min_stack_allowed calculation"); } @@ -219,10 +219,10 @@ void Exceptions::throw_stack_overflow_exception(Thread* THREAD, const char* file, int line, methodHandle method) { Handle exception; if (!THREAD->has_pending_exception()) { - klassOop k = SystemDictionary::StackOverflowError_klass(); - oop e = instanceKlass::cast(k)->allocate_instance(CHECK); + Klass* k = SystemDictionary::StackOverflowError_klass(); + oop e = InstanceKlass::cast(k)->allocate_instance(CHECK); exception = Handle(THREAD, e); // fill_in_stack trace does gc - assert(instanceKlass::cast(k)->is_initialized(), "need to increase min_stack_allowed calculation"); + assert(InstanceKlass::cast(k)->is_initialized(), "need to increase min_stack_allowed calculation"); if (StackTraceInThrowable) { java_lang_Throwable::fill_in_stack_trace(exception, method()); } @@ -257,7 +257,7 @@ Handle h_exception; // Resolve exception klass - klassOop ik = SystemDictionary::resolve_or_fail(name, h_loader, h_protection_domain, true, thread); + Klass* ik = SystemDictionary::resolve_or_fail(name, h_loader, h_protection_domain, true, thread); instanceKlassHandle klass(thread, ik); if (!thread->has_pending_exception()) { @@ -451,7 +451,7 @@ message = java_lang_String::as_utf8_string(msg); } } - debug_check_abort(instanceKlass::cast(exception()->klass())->external_name(), message); + debug_check_abort(InstanceKlass::cast(exception()->klass())->external_name(), message); } } #endif diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/exceptions.hpp --- a/src/share/vm/utilities/exceptions.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/exceptions.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -235,6 +235,9 @@ #define THROW_ARG(name, signature, args) \ { Exceptions::_throw_args(THREAD_AND_LOCATION, name, signature, args); return; } +#define THROW_MSG_CAUSE(name, message, cause) \ + { Exceptions::_throw_msg_cause(THREAD_AND_LOCATION, name, message, cause); return; } + #define THROW_OOP_(e, result) \ { Exceptions::_throw_oop(THREAD_AND_LOCATION, e); return result; } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/globalDefinitions.cpp --- a/src/share/vm/utilities/globalDefinitions.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/globalDefinitions.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -112,6 +112,7 @@ case T_LONG: case T_OBJECT: case T_ADDRESS: // random raw pointer + case T_METADATA: // metadata pointer case T_NARROWOOP: // compressed pointer case T_CONFLICT: // might as well support a bottom type case T_VOID: // padding or other unaddressed word @@ -178,7 +179,7 @@ // Map BasicType to signature character -char type2char_tab[T_CONFLICT+1]={ 0, 0, 0, 0, 'Z', 'C', 'F', 'D', 'B', 'S', 'I', 'J', 'L', '[', 'V', 0, 0, 0}; +char type2char_tab[T_CONFLICT+1]={ 0, 0, 0, 0, 'Z', 'C', 'F', 'D', 'B', 'S', 'I', 'J', 'L', '[', 'V', 0, 0, 0, 0}; // Map BasicType to Java type name const char* type2name_tab[T_CONFLICT+1] = { @@ -196,6 +197,7 @@ "void", "*address*", "*narrowoop*", + "*metadata*", "*conflict*" }; @@ -231,7 +233,8 @@ T_VOID, // T_VOID = 14, T_ADDRESS, // T_ADDRESS = 15, T_NARROWOOP, // T_NARROWOOP= 16, - T_CONFLICT // T_CONFLICT = 17, + T_METADATA, // T_METADATA = 17, + T_CONFLICT // T_CONFLICT = 18, }; @@ -253,7 +256,8 @@ T_VOID, // T_VOID = 14, T_ADDRESS, // T_ADDRESS = 15, T_NARROWOOP, // T_NARROWOOP = 16, - T_CONFLICT // T_CONFLICT = 17, + T_METADATA, // T_METADATA = 17, + T_CONFLICT // T_CONFLICT = 18, }; @@ -275,7 +279,8 @@ 0, // T_VOID = 14, T_OBJECT_aelem_bytes, // T_ADDRESS = 15, T_NARROWOOP_aelem_bytes,// T_NARROWOOP= 16, - 0 // T_CONFLICT = 17, + T_OBJECT_aelem_bytes, // T_METADATA = 17, + 0 // T_CONFLICT = 18, }; #ifdef ASSERT diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/globalDefinitions.hpp --- a/src/share/vm/utilities/globalDefinitions.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/globalDefinitions.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -128,6 +128,14 @@ #endif }; +// Analogous opaque struct for metadata allocated from +// metaspaces. +class MetaWord { + friend class VMStructs; + private: + char* i; +}; + // HeapWordSize must be 2^LogHeapWordSize. const int HeapWordSize = sizeof(HeapWord); #ifdef _LP64 @@ -272,6 +280,10 @@ inline size_t pointer_delta(const HeapWord* left, const HeapWord* right) { return pointer_delta(left, right, sizeof(HeapWord)); } +// A version specialized for MetaWord*'s. +inline size_t pointer_delta(const MetaWord* left, const MetaWord* right) { + return pointer_delta(left, right, sizeof(MetaWord)); +} // // ANSI C++ does not allow casting from one pointer type to a function pointer @@ -482,7 +494,8 @@ T_VOID = 14, T_ADDRESS = 15, T_NARROWOOP= 16, - T_CONFLICT = 17, // for stack value type with conflicting contents + T_METADATA = 17, + T_CONFLICT = 18, // for stack value type with conflicting contents T_ILLEGAL = 99 }; @@ -854,6 +867,7 @@ class JavaCallWrapper; class oopDesc; +class metaDataOopDesc; class NativeCall; @@ -911,6 +925,7 @@ const int uninitBlockPad = 0xF1; // value used to zap newly malloc'd blocks. const intptr_t badJNIHandleVal = (intptr_t) CONST64(0xFEFEFEFEFEFEFEFE); // value used to zap jni handle area const juint badHeapWordVal = 0xBAADBABE; // value used to zap heap after GC +const juint badMetaWordVal = 0xBAADFADE; // value used to zap metadata heap after GC const int badCodeHeapNewVal= 0xCC; // value used to zap Code heap at allocation const int badCodeHeapFreeVal = 0xDD; // value used to zap Code heap at deallocation diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/growableArray.hpp --- a/src/share/vm/utilities/growableArray.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/growableArray.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -281,6 +281,13 @@ return -1; } + int find_from_end(const E& elem) const { + for (int i = _len-1; i >= 0; i--) { + if (_data[i] == elem) return i; + } + return -1; + } + int find(void* token, bool f(void*, E)) const { for (int i = 0; i < _len; i++) { if (f(token, _data[i])) return i; @@ -288,7 +295,7 @@ return -1; } - int find_at_end(void* token, bool f(void*, E)) const { + int find_from_end(void* token, bool f(void*, E)) const { // start at the end of the array for (int i = _len-1; i >= 0; i--) { if (f(token, _data[i])) return i; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/hashtable.cpp --- a/src/share/vm/utilities/hashtable.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/hashtable.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -94,20 +94,6 @@ template jint Hashtable::_seed = 0; -template unsigned int Hashtable::new_hash(Symbol* sym) { - ResourceMark rm; - // Use alternate hashing algorithm on this symbol. - return AltHashing::murmur3_32(seed(), (const jbyte*)sym->as_C_string(), sym->utf8_length()); -} - -template unsigned int Hashtable::new_hash(oop string) { - ResourceMark rm; - int length; - jchar* chars = java_lang_String::as_unicode_string(string, length); - // Use alternate hashing algorithm on the string - return AltHashing::murmur3_32(seed(), chars, length); -} - // Create a new table and using alternate hash code, populate the new table // with the existing elements. This can be used to change the hash code // and could in the future change the size of the table. @@ -126,7 +112,7 @@ HashtableEntry* next = p->next(); T string = p->literal(); // Use alternate hashing algorithm on the symbol in the first table - unsigned int hashValue = new_hash(string); + unsigned int hashValue = string->new_hash(seed()); // Get a new index relative to the new table (can also change size) int index = new_table->hash_to_index(hashValue); p->set_hash(hashValue); @@ -314,9 +300,9 @@ #endif // Explicitly instantiate these types -template class Hashtable; +template class Hashtable; template class Hashtable; -template class Hashtable; +template class Hashtable; template class Hashtable; #ifdef SOLARIS template class Hashtable; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/hashtable.hpp --- a/src/share/vm/utilities/hashtable.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/hashtable.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -25,6 +25,7 @@ #ifndef SHARE_VM_UTILITIES_HASHTABLE_HPP #define SHARE_VM_UTILITIES_HASHTABLE_HPP +#include "classfile/classLoaderData.hpp" #include "memory/allocation.hpp" #include "oops/oop.hpp" #include "oops/symbol.hpp" @@ -283,9 +284,6 @@ private: static jint _seed; - - unsigned int new_hash(Symbol* s); - unsigned int new_hash(oop string); }; @@ -302,18 +300,17 @@ : Hashtable(table_size, entry_size, t, number_of_entries) {} public: - unsigned int compute_hash(Symbol* name, Handle loader) { - // Be careful with identity_hash(), it can safepoint and if this - // were one expression, the compiler could choose to unhandle each - // oop before calling identity_hash() for either of them. If the first - // causes a GC, the next would fail. + unsigned int compute_hash(Symbol* name, ClassLoaderData* loader_data) { unsigned int name_hash = name->identity_hash(); - unsigned int loader_hash = loader.is_null() ? 0 : loader->identity_hash(); + // loader is null with CDS + assert(loader_data != NULL || UseSharedSpaces || DumpSharedSpaces, + "only allowed with shared spaces"); + unsigned int loader_hash = loader_data == NULL ? 0 : loader_data->identity_hash(); return name_hash ^ loader_hash; } - int index_for(Symbol* name, Handle loader) { - return this->hash_to_index(compute_hash(name, loader)); + int index_for(Symbol* name, ClassLoaderData* loader_data) { + return this->hash_to_index(compute_hash(name, loader_data)); } }; diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/xmlstream.cpp --- a/src/share/vm/utilities/xmlstream.cpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/xmlstream.cpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,8 @@ #include "code/nmethod.hpp" #include "memory/allocation.hpp" #include "memory/allocation.inline.hpp" -#include "oops/methodDataOop.hpp" -#include "oops/methodOop.hpp" +#include "oops/methodData.hpp" +#include "oops/method.hpp" #include "oops/oop.inline.hpp" #include "runtime/deoptimization.hpp" #include "runtime/vmThread.hpp" @@ -379,7 +379,7 @@ print(" iicount='%d'", method->interpreter_invocation_count()); int throwouts = method->interpreter_throwout_count(); if (throwouts != 0) print(" throwouts='%d'", throwouts); - methodDataOop mdo = method->method_data(); + MethodData* mdo = method->method_data(); if (mdo != NULL) { uint cnt; cnt = mdo->decompile_count(); @@ -399,7 +399,7 @@ assert_if_no_error(inside_attrs(), "printing attributes"); if (method.is_null()) return; //method->print_short_name(text()); - method->method_holder()->klass_part()->name()->print_symbol_on(text()); + method->method_holder()->name()->print_symbol_on(text()); print_raw(" "); // " " is easier for tools to parse than "::" method->name()->print_symbol_on(text()); print_raw(" "); // separator @@ -442,7 +442,7 @@ void xmlStream::object(const char* attr, Handle x) { assert_if_no_error(inside_attrs(), "printing attributes"); - if (x.is_null()) return; + if (x == NULL) return; print_raw(" "); print_raw(attr); print_raw("='"); @@ -452,14 +452,31 @@ void xmlStream::object_text(Handle x) { assert_if_no_error(inside_attrs(), "printing attributes"); - if (x.is_null()) return; + if (x == NULL) return; + x->print_value_on(text()); +} + + +void xmlStream::object(const char* attr, Metadata* x) { + assert_if_no_error(inside_attrs(), "printing attributes"); + if (x == NULL) return; + print_raw(" "); + print_raw(attr); + print_raw("='"); + object_text(x); + print_raw("'"); +} + +void xmlStream::object_text(Metadata* x) { + assert_if_no_error(inside_attrs(), "printing attributes"); + if (x == NULL) return; //x->print_value_on(text()); if (x->is_method()) - method_text(methodOop(x())); + method_text((Method*)x); else if (x->is_klass()) - klass_text(klassOop(x())); + klass_text((Klass*)x); else - x->print_value_on(text()); + ShouldNotReachHere(); // Add impl if this is reached. } diff -r 36d1d483d5d6 -r da91efe96a93 src/share/vm/utilities/xmlstream.hpp --- a/src/share/vm/utilities/xmlstream.hpp Fri Aug 31 16:39:35 2012 -0700 +++ b/src/share/vm/utilities/xmlstream.hpp Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -140,12 +140,14 @@ void method(methodHandle m); // method='k n s' ... void klass(KlassHandle k); // klass='name' void name(const Symbol* s); // name='name' + void object(const char* attr, Metadata* val); void object(const char* attr, Handle val); // print the text alone (sans ''): void method_text(methodHandle m); void klass_text(KlassHandle k); // klass='name' void name_text(const Symbol* s); // name='name' + void object_text(Metadata* x); void object_text(Handle x); /* Example uses: diff -r 36d1d483d5d6 -r da91efe96a93 test/compiler/6859338/Test6859338.java --- a/test/compiler/6859338/Test6859338.java Fri Aug 31 16:39:35 2012 -0700 +++ b/test/compiler/6859338/Test6859338.java Sat Sep 01 13:25:18 2012 -0400 @@ -27,7 +27,7 @@ * @bug 6859338 * @summary Assertion failure in sharedRuntime.cpp * - * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-InlineObjectHash -Xbatch -XX:-ProfileInterpreter Test6859338 + * @run main/othervm -Xcomp -XX:+IgnoreUnrecognizedVMOptions -XX:-InlineObjectHash -Xbatch -XX:-ProfileInterpreter Test6859338 */ public class Test6859338 {